CompareObjectHandles 函式 (handleapi.h)
比較兩個物件句柄,以判斷它們是否參考相同的基礎核心物件。
語法
BOOL CompareObjectHandles(
[in] HANDLE hFirstObjectHandle,
[in] HANDLE hSecondObjectHandle
);
參數
[in] hFirstObjectHandle
要比較的第一個物件句柄。
[in] hSecondObjectHandle
要比較的第二個物件句柄。
傳回值
布爾值,指出兩個句柄是否參考相同的基礎核心物件。 如果相同,則為TRUE,否則為 FALSE。
備註
CompareObjectHandles 函式有助於判斷兩個核心句柄是否參考相同的核心物件,而不需要對任一個句柄授與特定訪問許可權,才能執行比較。 例如,如果進程想要判斷進程句柄是否為目前進程的句柄,則呼叫 CompareObjectHandles (GetCurrentProcess () ,hProcess) 可用來判斷 hProcess 是否參考目前的進程。 值得注意的是,這不需要使用物件特定的訪問許可權,而在此範例中,呼叫 GetProcessId 來檢查兩個進程句柄的進程標識碼會強制要求處理授與PROCESS_QUERY_LIMITED_INFORMATION存取權。 不過,根據句柄的使用方式而定,進程句柄沒有授與該訪問許可權是合法的。
範例
下列程式代碼範例會建立三個句柄,其中兩個句柄參考相同的對象,然後比較它們以顯示相同的基礎核心物件會傳回 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) |
程式庫 | Kernelbase.lib |
Dll | Kernelbase.dll |