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 |