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 |