Asynchrones Senden von E/A-Anforderungen

Bevor Sie eine E/A-Anforderung asynchron an ein E/A-Ziel senden können, müssen Sie die Anforderung formatieren. In der folgenden Tabelle sind die E/A-Zielobjektmethoden aufgeführt, die Ihr Treiber zum Formatieren von E/A-Anforderungen aufrufen kann.

Methode Zweck

WdfIoTargetFormatRequestForRead

Formatieren einer Leseanforderung

WdfIoTargetFormatRequestForWrite

Formatieren einer Schreibanforderung

WdfIoTargetFormatRequestForIoctl

Formatieren einer Gerätesteuerungsanforderung

WdfIoTargetFormatRequestForInternalIoctl

Formatieren einer internen Gerätesteuerungsanforderung

WdfIoTargetFormatRequestForInternalIoctlOthers

Formatieren einer nicht standardmäßigen internen Gerätesteuerungsanforderung

Um eine E/A-Anforderung asynchron zu senden, muss Ihr Treiber:

  1. Formatieren Sie die Anforderung.

    Verwenden Sie eine der Methoden, die in der vorherigen Tabelle aufgeführt sind, um Ihre Anforderungen zu formatieren. Ausführliche Informationen zur Verwendung dieser Methoden finden Sie auf den Referenzseiten der Methoden.

  2. Registrieren Sie eine CompletionRoutine-Rückruffunktion .

    Wenn Sie Anforderungen asynchron senden, möchten Sie in der Regel, dass das Framework Ihren Treiber benachrichtigt, wenn jede Anforderung von einem anderen Treiber abgeschlossen wird. Ihr Treiber sollte eine CompletionRoutine-Rückruffunktion definieren und durch Aufrufen von WdfRequestSetCompletionRoutine registrieren. Weitere Informationen finden Sie unter Abschließen von E/A-Anforderungen.

  3. Senden Sie die Anforderung.

    Nachdem Der Treiber die Anforderung formatiert und eine CompletionRoutine-Rückruffunktion registriert hat, muss Der Treiber WdfRequestSend aufrufen. Mit dieser Methode können Sie Anforderungen entweder synchron oder asynchron senden, abhängig von den flags, die im Parameter RequestOptions festgelegt sind. Eine einfachere Möglichkeit zum synchronen Senden von E/A-Anforderungen finden Sie unter Synchrones Senden von E/A-Anforderungen. Informationen zum Abrufen des Abschlusses status für eine asynchrone Anforderung oder für jede Anforderung, die durch aufrufen von WdfRequestSend gesendet wird, finden Sie unter Abschließen von E/A-Anforderungen.

Ein Treiber, der WdfRequestSend aufruft , um eine E/A-Anforderung zu senden, kann versuchen, die Anforderung später abzubrechen. Weitere Informationen finden Sie unter Abbrechen von E/A-Anforderungen.

Einige Treiber senden möglicherweise eine einzelne E/A-Anforderung an mehrere Geräte und somit an mehrere E/A-Ziele, indem WdfRequestSend für jede Anforderung mehrmals aufgerufen wird. Diese Treiber müssen vor jedem Aufruf von WdfRequestSend nach dem ersten WdfRequestSendWdfRequestChangeTarget aufrufen, um zu überprüfen, ob die Anforderung an das nächste E/A-Ziel gesendet werden kann.