CompareObjectHandles-Funktion (handleapi.h)
Vergleicht zwei Objekthandles, um zu bestimmen, ob sie auf dasselbe zugrunde liegende Kernelobjekt verweisen.
Syntax
BOOL CompareObjectHandles(
[in] HANDLE hFirstObjectHandle,
[in] HANDLE hSecondObjectHandle
);
Parameter
[in] hFirstObjectHandle
Das erste zu vergleichende Objekthandle.
[in] hSecondObjectHandle
Das zweite zu vergleichende Objekthandle.
Rückgabewert
Ein boolescher Wert, der angibt, ob die beiden Handles auf das gleiche zugrunde liegende Kernelobjekt verweisen. TRUE, wenn gleich, andernfalls FALSE.
Hinweise
Die CompareObjectHandles-Funktion ist nützlich, um zu bestimmen, ob zwei Kernelhandles auf dasselbe Kernelobjekt verweisen, ohne dass für beide Handle bestimmte Zugriffsrechte erteilt werden müssen, um den Vergleich durchzuführen. Wenn ein Prozess beispielsweise bestimmen möchte, ob ein Prozesshandle ein Handle für den aktuellen Prozess ist, kann ein Aufruf von CompareObjectHandles (GetCurrentProcess (), hProcess) verwendet werden, um zu bestimmen, ob hProcess auf den aktuellen Prozess verweist. Dies erfordert insbesondere nicht die Verwendung von objektspezifischen Zugriffsrechten, während in diesem Beispiel das Aufrufen von GetProcessId zum Überprüfen der Prozess-IDs von zwei Prozesshandles eine Anforderung erzwingt, dass der die Gewährung PROCESS_QUERY_LIMITED_INFORMATION Zugriffs verarbeitet. Es ist jedoch zulässig, dass einem Prozesshandle dieses Zugriffsrecht nicht gewährt wird, je nachdem, wie das Handle verwendet werden soll.
Beispiele
Im folgenden Codebeispiel werden drei Handles erstellt, von denen zwei auf dasselbe Objekt verweisen und dann verglichen werden, um zu zeigen, dass identische zugrunde liegende Kernelobjekte TRUE zurückgeben, während nicht identische Objekte FALSE zurückgeben.
#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 ());
}
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows 10 [Desktop-Apps | UWP-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2016 [Desktop-Apps | UWP-Apps] |
Zielplattform | Windows |
Kopfzeile | handleapi.h (Einschließen von Windows.h) |
Bibliothek | Kernelbase.lib |
DLL | Kernelbase.dll |