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 = SecurityIdentification
aufruft, 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) |