CompareObjectHandles 関数 (handleapi.h)
2 つのオブジェクト ハンドルを比較して、それらが同じ基になるカーネル オブジェクトを参照しているかどうかを判断します。
構文
BOOL CompareObjectHandles(
[in] HANDLE hFirstObjectHandle,
[in] HANDLE hSecondObjectHandle
);
パラメーター
[in] hFirstObjectHandle
比較する最初のオブジェクト ハンドル。
[in] hSecondObjectHandle
比較する 2 番目のオブジェクト ハンドル。
戻り値
2 つのハンドルが同じ基になるカーネル オブジェクトを参照しているかどうかを示すブール値。 同じ場合は TRUE、それ以外の場合は FALSE。
注釈
CompareObjectHandles 関数は、2 つのカーネル ハンドルが同じカーネル オブジェクトを参照しているかどうかを判断するのに役立ちます。比較を実行するために、いずれかのハンドルに特定のアクセス権を付与する必要はありません。 たとえば、プロセス ハンドルが現在のプロセスのハンドルであるかどうかを判断する必要がある場合は、 CompareObjectHandles (GetCurrentProcess ()、hProcess) の呼び出しを使用して、hProcess が現在のプロセスを参照しているかどうかを判断できます。 特に、オブジェクト固有のアクセス権を使用する必要はありません。一方、この例では、GetProcessId を呼び出して 2 つのプロセス ハンドルのプロセス ID をチェックすると、ハンドルがアクセスPROCESS_QUERY_LIMITED_INFORMATION許可するという要件が課されます。 ただし、プロセス ハンドルの使用方法に応じて、そのアクセス権が付与されないのは適切です。
例
次のコード サンプルでは、3 つのハンドルを作成します。そのうちの 2 つは同じオブジェクトを参照し、それらを比較して、同じ基になるカーネル オブジェクトが TRUE を返し、同一でないオブジェクトは FALSE を返します。
#include <windows.h>
#include <stdio.h>
#include <wchar.h>
HANDLE Event1;
HANDLE Event2;
HANDLE Event3;
// Create a handle to a named event.
Event1 = CreateEventW (NULL, TRUE, FALSE, L"{75A520B7-2C11-4809-B43A-0D31FB1FDD19}");
if (Event1 == NULL) { ExitProcess (0); }
// Create a handle to the same event.
Event2 = CreateEventW (NULL, TRUE, FALSE, L"{75A520B7-2C11-4809-B43A-0D31FB1FDD19}");
if (Event2 == NULL) { ExitProcess (0); }
// Create a handle to an anonymous, unnamed event.
Event3 = CreateEventW (NULL, TRUE, FALSE, NULL);
if (Event3 == NULL) { ExitProcess (0); }
// Compare two handles to the same kernel object.
if (CompareObjectHandles (Event1, Event2) != FALSE)
{ // This message should be printed by the program.
wprintf (L"Event1 and Event2 refer to the same underlying event object.\n");
}
// Compare two handles to different kernel objects.
if (CompareObjectHandles (Event1, Event3) == FALSE)
{ // This message should be printed by the program.
wprintf (L"Event1 and Event3 refer to different underlying event objects. (Error %lu)\n", GetLastError ());
}
// Compare two handles to different kernel objects, each of a different type of kernel object.
// The comparison is legal to make, though the function will always return FALSE and indicate
// a last error status of ERROR_NOT_SAME_OBJECT.
if (CompareObjectHandles (Event1, GetCurrentProcess ()) == FALSE)
{ // This message should be printed by the program.
wprintf (L"Event1 and the current process refer to different underlying kernel objects. (Error %lu)\n", GetLastError ());
}
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 10 [デスクトップ アプリ |UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2016 [デスクトップ アプリ |UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | handleapi.h (Windows.h を含む) |
Library | Kernelbase.lib |
[DLL] | Kernelbase.dll |