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) |
Library | Kernelbase.lib |
DLL | Kernelbase.dll |