OpenProcess 関数 (processthreadsapi.h)

既存のローカル プロセス オブジェクトを開きます。

構文

HANDLE OpenProcess(
  [in] DWORD dwDesiredAccess,
  [in] BOOL  bInheritHandle,
  [in] DWORD dwProcessId
);

パラメーター

[in] dwDesiredAccess

プロセス オブジェクトへのアクセス。 このアクセス権は、プロセスのセキュリティ記述子に対してチェックされます。 このパラメーターには、1 つ以上の プロセス アクセス権を指定できます。

呼び出し元が SeDebugPrivilege 特権を有効にした場合、要求されたアクセスは、セキュリティ記述子の内容に関係なく付与されます。

[in] bInheritHandle

この値が TRUE の場合、このプロセスによって作成されたプロセスはハンドルを継承します。 それ以外の場合、プロセスはこのハンドルを継承しません。

[in] dwProcessId

開くローカル プロセスの識別子。

指定したプロセスがシステム アイドル プロセス (0x00000000) の場合、関数は失敗し、最後のエラー コードは です ERROR_INVALID_PARAMETER。 指定されたプロセスがシステム プロセスまたはクライアント サーバー Run-Time サブシステム (CSRSS) プロセスの 1 つである場合、この関数は失敗し、最後のエラー コードは ERROR_ACCESS_DENIED 、アクセス制限によってユーザー レベルのコードが開くことができないためです。

この関数の引数として GetCurrentProcessId を 使用している場合は、パフォーマンスを向上させるために、 OpenProcess ではなく GetCurrentProcess を使用することを検討してください。

戻り値

関数が成功した場合、戻り値は指定されたプロセスに対する開いているハンドルです。

関数が失敗した場合は、返される値は NULL です。 詳細なエラー情報を得るには、GetLastError を呼び出します。

解説

別のローカル プロセスへのハンドルを開き、フル アクセス権を取得するには、SeDebugPrivilege 特権を有効にする必要があります。 詳細については、「 トークンでの特権の変更」を参照してください。

OpenProcess 関数によって返されるハンドルは、適切なアクセス権が要求されていれば、待機関数などのプロセスへのハンドルを必要とする任意の関数で使用できます。

ハンドルが完成したら、 CloseHandle 関数を使用して閉じておきます。

例については、「スナップショットの 作成」と「プロセスの表示」を参照してください。

要件

要件
サポートされている最小のクライアント Windows XP [デスクトップ アプリ | UWP アプリ]
サポートされている最小のサーバー Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ]
対象プラットフォーム Windows
ヘッダー processthreadsapi.h (Windows Server 2003、Windows Vista、Windows 7、Windows Server 2008 Windows Server 2008 R2 の Windows.h を含む)
Library Kernel32.lib
[DLL] Kernel32.dll

関連項目

AssignProcessToJobObject

CloseHandle

CreateProcess

CreateRemoteThread

DuplicateHandle

GetCurrentProcess

GetCurrentProcessId

GetExitCodeProcess

GetModuleFileNameEx

GetPriorityClass

プロセス関数とスレッド関数

処理

ReadProcessMemory

SetPriorityClass

SetProcessWorkingSetSize

TerminateProcess

VirtualProtectEx

WriteProcessMemory