GetProcessHandleFromHwnd 関数
ウィンドウ ハンドルからプロセス ハンドルを取得します。
構文
HANDLE WINAPI GetProcessHandleFromHwnd(
_In_ HWND hwnd
);
パラメーター
-
hwnd [in]
-
種類: HWND
ウィンドウ ハンドル。
戻り値
型: HANDLE
成功した場合は、ウィンドウを所有するプロセスのハンドルを返します。
成功しなかった場合は、 NULL を返します。
解説
以前のバージョンのオペレーティング システムでは、プロセスが OpenProcess を使用して別のプロセスを開く (たとえば、メモリにアクセスする) 可能性があります。 呼び出し元に適切な特権がある場合、この関数は成功します。通常、呼び出し元とターゲット プロセスは同じユーザーである必要があります。
ただし、Windows Vista では、呼び出し元に UIAccess があり、ターゲット プロセスが昇格されているシナリオで OpenProcess が失敗します。 この場合、ターゲット プロセスの所有者は Administrators グループに属していますが、呼び出し元プロセスは制限付きトークンで実行されているため、このグループにはメンバーシップがないため、昇格されたプロセスへのアクセスは拒否されます。 ただし、呼び出し元に UIAccess がある場合は、Windows フックを使用してターゲット プロセスにコードを挿入し、ターゲット プロセス内から呼び出し元にハンドルを送信します。
GetProcessHandleFromHwnd は、この手法を使用して、指定された HWND を所有するプロセスのハンドルを取得する便利な関数です。 呼び出し元とターゲット プロセスが同じユーザーとして実行されている場合にのみ成功します。 返されるハンドルには、次の特権があります: PROCESS_DUP_HANDLE |PROCESS_VM_OPERATION |PROCESS_VM_READ |PROCESS_VM_WRITE |同期。 他の特権が必要な場合は、この関数を使用するのではなく、フック手法を明示的に実装する必要があります。
必要条件
要件 | 値 |
---|---|
サポートされている最小のクライアント |
Windows XP [デスクトップ アプリのみ] |
サポートされている最小のサーバー |
Windows Server 2003 [デスクトップ アプリのみ] |
[DLL] |
|