Función CompareObjectHandles (handleapi.h)

Compara dos identificadores de objeto para determinar si hacen referencia al mismo objeto de kernel subyacente.

Sintaxis

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

Parámetros

[in] hFirstObjectHandle

Primer identificador de objeto que se va a comparar.

[in] hSecondObjectHandle

Segundo identificador de objeto que se va a comparar.

Valor devuelto

Valor booleano que indica si los dos identificadores hacen referencia al mismo objeto de kernel subyacente. TRUE si es igual, en caso contrario, FALSE.

Comentarios

La función CompareObjectHandles es útil para determinar si dos identificadores de kernel hacen referencia al mismo objeto kernel sin imponer un requisito de que se concedan derechos de acceso específicos a cualquiera de los controladores para realizar la comparación. Por ejemplo, si un proceso desea determinar si un identificador de proceso es un identificador del proceso actual, se puede usar una llamada a CompareObjectHandles (GetCurrentProcess (), hProcess) para determinar si hProcess hace referencia al proceso actual. En particular, esto no requiere el uso de derechos de acceso específicos del objeto, mientras que en este ejemplo, llamar a GetProcessId para comprobar los identificadores de proceso de dos identificadores de proceso impone un requisito que los identificadores conceden PROCESS_QUERY_LIMITED_INFORMATION acceso. Sin embargo, es legal que un identificador de proceso no tenga ese derecho de acceso concedido en función de cómo se pretende usar el identificador.

Ejemplos

En el ejemplo de código siguiente se crean tres identificadores, dos de los cuales hacen referencia al mismo objeto y, a continuación, los compara para mostrar que los objetos kernel subyacentes idénticos devolverán TRUE, mientras que los objetos no idénticos devolverán 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 Value
Cliente mínimo compatible Windows 10 [aplicaciones de escritorio | Aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2016 [aplicaciones de escritorio | Aplicaciones para UWP]
Plataforma de destino Windows
Encabezado handleapi.h (incluir Windows.h)
Library Kernelbase.lib
Archivo DLL Kernelbase.dll

Consulte también

Funciones handle y object