Compartir a través de


EVT_WDF_REQUEST_IMPERSONATE función de devolución de llamada (wdfrequest.h)

[Solo se aplica a UMDF]

La función de devolución de llamada de eventos EvtRequestImpersonate de un controlador realiza tareas en el nivel de suplantación solicitado, como abrir un archivo protegido.

Sintaxis

EVT_WDF_REQUEST_IMPERSONATE EvtWdfRequestImpersonate;

void EvtWdfRequestImpersonate(
  [in]           WDFREQUEST Request,
  [in, optional] PVOID Context
)
{...}

Parámetros

[in] Request

Identificador de un objeto de solicitud de marco que representa la solicitud de E/S que requiere suplantación.

[in, optional] Context

Puntero a un contexto que se proporcionó anteriormente en el método WdfRequestImpersonate . Este parámetro es opcional y puede ser NULL si no se requiere un contexto.

Valor devuelto

None

Observaciones

User-Mode Driver Framework (UMDF) no permite que la función de devolución de llamada EvtRequestImpersonate de un controlador llame a cualquiera de los métodos de objeto del marco. Esto garantiza que el controlador no exponga el nivel de suplantación a otras funciones de devolución de llamada del controlador u otros controladores.

El tipo de función EVT_WDF_REQUEST_IMPERSONATE se define en el archivo de encabezado Wdfrequest.h. Para identificar con más precisión los errores al ejecutar las herramientas de análisis de código, asegúrese de agregar la anotación a la _Use_decl_annotations_ definición de la función. La _Use_decl_annotations_ anotación garantiza que se usen las anotaciones que se aplican al tipo de función EVT_WDF_REQUEST_IMPERSONATE en el archivo de encabezado.

También se aplican las siguientes restricciones:

  • Cuando el controlador llama a WdfRequestImpersonate con ImpersonationLevel = SecurityIdentification, la devolución de llamada no puede llamar a LoadLibrary ni realizar ninguna acción que requiera una comprobación de acceso.

  • El mismo principio se aplica a la carga de retraso de DLL. Considere un ejemplo en el que el controlador suplanta en el nivel de identificación y la devolución de llamada llama a GetUserNameW. Dado que esta API a su vez retrasa otra DLL y llama a GetUserNameExW, la llamada inicial podría producir un error con ERROR_PROC_NOT_FOUND o ERROR_BAD_IMPERSONATION_LEVEL. En tal caso, la devolución de llamada debe llamar directamente a GetUserNameExW .

Para obtener más información, vea Controlar la suplantación de cliente en controladores UMDF.

Ejemplos

Para definir una función de devolución de llamada EvtRequestImpersonate , primero debe proporcionar una declaración de función que identifique el tipo de función de devolución de llamada que está definiendo. Windows proporciona un conjunto de tipos de función de devolución de llamada para controladores. Declarar una función mediante los tipos de función de devolución de llamada ayuda a Code Analysis for Drivers, Static Driver Verifier (SDV) y otras herramientas de comprobación encuentran errores y es un requisito para escribir controladores para el sistema operativo Windows.

Por ejemplo, para definir una función de devolución de llamada EvtRequestImpersonate denominada MyRequestImpersonate, use el tipo de EVT_WDF_REQUEST_IMPERSONATE como se muestra en este ejemplo de código:

EVT_WDF_REQUEST_IMPERSONATE  MyRequestImpersonate;

A continuación, implemente la función de devolución de llamada de la siguiente manera:

_Use_decl_annotations_
VOID
 MyRequestImpersonate (
    WDFREQUEST  Request
    PVOID  Context
    )
  {...}

Para obtener más información sobre los requisitos de las declaraciones de función, consulte Declaración de funciones mediante tipos de roles de función para controladores KMDF.

Para obtener información sobre Use_decl_annotations, consulte Anotación del comportamiento de la función.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 8.1
Plataforma de destino Universal
Versión mínima de UMDF 2.0
Encabezado wdfrequest.h (incluya Wdf.h)

Consulte también

WdfRequestImpersonate