EVT_WDF_REQUEST_IMPERSONATE Rückruffunktion (wdfrequest.h)

[Gilt nur für UMDF]

Die EvtRequestImpersonate-Ereignisrückruffunktion eines Treibers führt Aufgaben auf der angeforderten Identitätswechselebene aus, z. B. das Öffnen einer geschützten Datei.

Syntax

EVT_WDF_REQUEST_IMPERSONATE EvtWdfRequestImpersonate;

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

Parameter

[in] Request

Ein Handle für ein Frameworkanforderungsobjekt, das die E/A-Anforderung darstellt, die einen Identitätswechsel erfordert.

[in, optional] Context

Ein Zeiger auf einen Kontext, der zuvor in der WdfRequestImpersonate-Methode bereitgestellt wurde. Dieser Parameter ist optional und kann NULL sein, wenn kein Kontext erforderlich ist.

Rückgabewert

Keine

Bemerkungen

User-Mode Driver Framework (UMDF) lässt es nicht zu, dass die EvtRequestImpersonate-Rückruffunktion eines Treibers eine der Objektmethoden des Frameworks aufruft. Dadurch wird sichergestellt, dass der Treiber die Identitätswechselebene nicht für andere Treiberrückruffunktionen oder andere Treiber verfügbar macht.

Der EVT_WDF_REQUEST_IMPERSONATE Funktionstyp ist in der Headerdatei Wdfrequest.h definiert. Um Fehler beim Ausführen der Codeanalysetools genauer zu identifizieren, fügen Sie die _Use_decl_annotations_ Anmerkung ihrer Funktionsdefinition hinzu. Die _Use_decl_annotations_ Anmerkung stellt sicher, dass die Anmerkungen verwendet werden, die auf den EVT_WDF_REQUEST_IMPERSONATE Funktionstyp in der Headerdatei angewendet werden.

Es gelten auch die folgenden Einschränkungen:

  • Wenn der Treiber WdfRequestImpersonate mit ImpersonationLevel = SecurityIdentificationaufruft, kann der Rückruf LoadLibrary nicht aufrufen oder keine Aktion ausführen, die eine Zugriffsüberprüfung erfordert.

  • Das gleiche Prinzip gilt für das Laden von DLL-Verzögerung. Betrachten Sie ein Beispiel, in dem der Treiber die Identität auf Identifikationsebene angibt und der Rückruf GetUserNameW aufruft. Da diese API wiederum das Laden einer anderen DLL verzögert und GetUserNameExW aufruft, schlägt der anfängliche Aufruf möglicherweise mit ERROR_PROC_NOT_FOUND oder ERROR_BAD_IMPERSONATION_LEVEL fehl. In einem solchen Fall sollte der Rückruf stattdessen GetUserNameExW direkt aufrufen.

Weitere Informationen finden Sie unter Behandeln des Clientidentitätswechsels in UMDF-Treibern.

Beispiele

Um eine EvtRequestImpersonate-Rückruffunktion zu definieren, müssen Sie zuerst eine Funktionsdeklaration bereitstellen, die den Typ der von Ihnen definierten Rückruffunktion identifiziert. Windows bietet eine Reihe von Rückruffunktionstypen für Treiber. Das Deklarieren einer Funktion mithilfe der Rückruffunktionstypen hilft der Codeanalyse für Treiber, der statischen Treiberüberprüfung (Static Driver Verifier , SDV) und anderen Überprüfungstools, Fehler zu finden, und es ist eine Anforderung zum Schreiben von Treibern für das Windows-Betriebssystem.

Um beispielsweise eine EvtRequestImpersonate-Rückruffunktion namens MyRequestImpersonate zu definieren, verwenden Sie den EVT_WDF_REQUEST_IMPERSONATE-Typ , wie in diesem Codebeispiel gezeigt:

EVT_WDF_REQUEST_IMPERSONATE  MyRequestImpersonate;

Implementieren Sie dann Ihre Rückruffunktion wie folgt:

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

Weitere Informationen zu den Anforderungen für Funktionsdeklarationen finden Sie unter Deklarieren von Funktionen mithilfe von Funktionsrollentypen für KMDF-Treiber.

Informationen zu Use_decl_annotations finden Sie unter Verhalten von Funktionen mit Anmerkungen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 8.1
Zielplattform Universell
UMDF-Mindestversion 2.0
Kopfzeile wdfrequest.h (einschließen von Wdf.h)

Weitere Informationen

WdfRequestImpersonate