다음을 통해 공유


CompareObjectHandles 함수(handleapi.h)

두 개체 핸들을 비교하여 동일한 기본 커널 개체를 참조하는지 확인합니다.

구문

BOOL CompareObjectHandles(
  [in] HANDLE hFirstObjectHandle,
  [in] HANDLE hSecondObjectHandle
);

매개 변수

[in] hFirstObjectHandle

비교할 첫 번째 개체 핸들입니다.

[in] hSecondObjectHandle

비교할 두 번째 개체 핸들입니다.

반환 값

두 핸들이 동일한 기본 커널 개체를 참조하는지 여부를 나타내는 부울 값입니다. TRUE이면 같고, 그렇지 않으면 FALSE입니다.

설명

CompareObjectHandles 함수는 비교를 수행하기 위해 특정 액세스 권한을 부여해야 한다는 요구 사항을 적용하지 않고 두 커널 핸들이 동일한 커널 개체를 참조하는지 확인하는 데 유용합니다. 예를 들어 프로세스 핸들이 현재 프로세스에 대한 핸들인지 여부를 확인하려는 경우 CompareObjectHandles (GetCurrentProcess(), hProcess)에 대한 호출을 사용하여 hProcess가 현재 프로세스를 참조하는지 여부를 확인할 수 있습니다. 특히 개체별 액세스 권한을 사용할 필요는 없습니다. 반면 이 예제에서는 GetProcessId를 호출하여 두 프로세스 핸들의 프로세스 ID를 검사 핸들이 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

추가 정보

핸들 및 개체 함수