次の方法で共有


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]
Oleacc.dll