Função CompareObjectHandles (handleapi.h)

Compara dois identificadores de objeto para determinar se eles se referem ao mesmo objeto kernel subjacente.

Sintaxe

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

Parâmetros

[in] hFirstObjectHandle

O primeiro identificador de objeto a ser comparado.

[in] hSecondObjectHandle

O segundo identificador de objeto a ser comparado.

Retornar valor

Um valor booliano que indica se os dois identificadores se referem ao mesmo objeto kernel subjacente. TRUE se o mesmo, caso contrário, FALSE.

Comentários

A função CompareObjectHandles é útil para determinar se dois identificadores de kernel se referem ao mesmo objeto kernel sem impor um requisito de que direitos de acesso específicos sejam concedidos a qualquer um dos identificadores para executar a comparação. Por exemplo, se um processo quiser determinar se um identificador de processo é um identificador para o processo atual, uma chamada para CompareObjectHandles (GetCurrentProcess (), hProcess) pode ser usada para determinar se hProcess se refere ao processo atual. Notavelmente, isso não requer o uso de direitos de acesso específicos ao objeto, enquanto neste exemplo, chamar GetProcessId para marcar as IDs de processo de dois identificadores de processo impõe um requisito de que os identificadores concedam acesso PROCESS_QUERY_LIMITED_INFORMATION. No entanto, é legal que um identificador de processo não tenha esse direito de acesso concedido dependendo de como o identificador deve ser usado.

Exemplos

O exemplo de código a seguir cria três identificadores, dois dos quais se referem ao mesmo objeto e os compara para mostrar que objetos kernel subjacentes idênticos retornarão TRUE, enquanto objetos não idênticos retornarão 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 ());
	}

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 10 [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2016 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho handleapi.h (inclua Windows.h)
Biblioteca Kernelbase.lib
DLL Kernelbase.dll

Confira também

Funções handle e object