Share via


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

另請參閱

句柄和物件函式