Partager via


EVT_WDF_REQUEST_IMPERSONATE fonction de rappel (wdfrequest.h)

[S’applique à UMDF uniquement]

La fonction de rappel d’événement EvtRequestImpersonate d’un pilote effectue des tâches au niveau de l’emprunt d’identité demandé, telles que l’ouverture d’un fichier protégé.

Syntaxe

EVT_WDF_REQUEST_IMPERSONATE EvtWdfRequestImpersonate;

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

Paramètres

[in] Request

Handle pour un objet de demande d’infrastructure qui représente la demande d’E/S qui nécessite l’emprunt d’identité.

[in, optional] Context

Pointeur vers un contexte précédemment fourni dans la méthode WdfRequestImpersonate . Ce paramètre est facultatif et peut être NULL si aucun contexte n’est requis.

Valeur de retour

None

Remarques

User-Mode Driver Framework (UMDF) n’autorise pas la fonction de rappel EvtRequestImpersonate d’un pilote à appeler les méthodes d’objet de l’infrastructure. Cela garantit que le pilote n’expose pas le niveau d’emprunt d’identité à d’autres fonctions de rappel de pilote ou à d’autres pilotes.

Le type de fonction EVT_WDF_REQUEST_IMPERSONATE est défini dans le fichier d’en-tête Wdfrequest.h. Pour identifier plus précisément les erreurs lors de l’exécution des outils d’analyse du code, veillez à ajouter l’annotation _Use_decl_annotations_ à votre définition de fonction. L’annotation _Use_decl_annotations_ garantit que les annotations appliquées au type de fonction EVT_WDF_REQUEST_IMPERSONATE dans le fichier d’en-tête sont utilisées.

Les restrictions suivantes s’appliquent également :

  • Lorsque le pilote appelle WdfRequestImpersonate avec ImpersonationLevel = SecurityIdentification, le rappel ne peut pas appeler LoadLibrary ou effectuer une action nécessitant un accès case activée.

  • Le même principe s’applique au chargement différé de DLL. Prenons un exemple dans lequel le pilote emprunte l’identité au niveau de l’identification, et le rappel appelle GetUserNameW. Étant donné que cette API retarde à son tour le chargement d’une autre DLL et appelle GetUserNameExW, l’appel initial peut échouer avec ERROR_PROC_NOT_FOUND ou ERROR_BAD_IMPERSONATION_LEVEL. Dans ce cas, le rappel doit appeler getUserNameExW directement.

Pour plus d’informations, consultez Gestion de l’emprunt d’identité client dans les pilotes UMDF.

Exemples

Pour définir une fonction de rappel EvtRequestImpersonate , vous devez d’abord fournir une déclaration de fonction qui identifie le type de fonction de rappel que vous définissez. Windows fournit un ensemble de types de fonctions de rappel pour les pilotes. La déclaration d’une fonction à l’aide des types de fonction de rappel permet à l’analyse du code pour les pilotes, au vérificateur de pilotes statiques (SDV) et à d’autres outils de vérification de trouver des erreurs. Il s’agit d’une exigence pour l’écriture de pilotes pour le système d’exploitation Windows.

Par exemple, pour définir une fonction de rappel EvtRequestImpersonate nommée MyRequestImpersonate, utilisez le type EVT_WDF_REQUEST_IMPERSONATE comme indiqué dans cet exemple de code :

EVT_WDF_REQUEST_IMPERSONATE  MyRequestImpersonate;

Ensuite, implémentez votre fonction de rappel comme suit :

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

Pour plus d’informations sur la configuration requise pour les déclarations de fonction, consultez Déclaration de fonctions à l’aide de types de rôles de fonction pour les pilotes KMDF.

Pour plus d’informations sur Use_decl_annotations, consultez Annotating Function Behavior.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 8.1
Plateforme cible Universal
Version UMDF minimale 2.0
En-tête wdfrequest.h (inclure Wdf.h)

Voir aussi

WdfRequestImpersonate