WdfUsbTargetPipeAbortSynchronously-Funktion (wdfusb.h)
[Gilt für KMDF und UMDF]
Die WdfUsbTargetPipeAbortSynchronously-Methode erstellt eine Abbruchanforderung und sendet sie synchron an eine angegebene USB-Pipe.
Syntax
NTSTATUS WdfUsbTargetPipeAbortSynchronously(
[in] WDFUSBPIPE Pipe,
[in, optional] WDFREQUEST Request,
[in, optional] PWDF_REQUEST_SEND_OPTIONS RequestOptions
);
Parameter
[in] Pipe
Ein Handle für ein Framework-Pipeobjekt, das durch Aufrufen von WdfUsbInterfaceGetConfiguredPipe abgerufen wurde.
[in, optional] Request
Ein Handle für ein Frameworkanforderungsobjekt. Dieser Parameter ist optional und kann NULL sein. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".
[in, optional] RequestOptions
Ein Zeiger auf eine vom Aufrufer zugeordnete WDF_REQUEST_SEND_OPTIONS Struktur, die Optionen für die Anforderung angibt. Dieser Zeiger ist optional und kann NULL sein. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".
Rückgabewert
WdfUsbTargetPipeAbortSynchronously gibt den Abschluss des E/A-Ziels status Wert zurück, wenn der Vorgang erfolgreich ist. Andernfalls kann diese Methode einen der folgenden Werte zurückgeben:
Rückgabecode | Beschreibung |
---|---|
|
Die Größe der WDF_REQUEST_SEND_OPTIONS Struktur, die vom RequestOptions-Parameter angegeben wurde, war falsch. |
|
Ein ungültiges Handle wurde erkannt. |
|
Es war nicht genügend Arbeitsspeicher verfügbar. |
|
Die IRQL des Aufrufers wurde nicht PASSIVE_LEVEL, oder die angegebene E/A-Anforderung wurde bereits an ein E/A-Ziel in die Warteschlange gestellt. |
|
Der Treiber hat einen Timeoutwert angegeben, und die Anforderung wurde nicht innerhalb der zugewiesenen Zeit abgeschlossen. |
Diese Methode kann auch andere NTSTATUS-Werte zurückgeben.
Eine Fehlerüberprüfung tritt auf, wenn der Treiber ein ungültiges Objekthandle bereitstellt.
Hinweise
Verwenden Sie die WdfUsbTargetPipeAbortSynchronously-Methode , um eine USB-Abbruchanforderung synchron zu senden. Um solche Anforderungen asynchron zu senden, verwenden Sie WdfUsbTargetPipeFormatRequestForAbort, gefolgt von WdfRequestSend.
Eine USB-Abbruchanforderung bewirkt, dass das E/A-Ziel des Treibers alle E/A-Anforderungen abbricht, die an eine Pipe gesendet wurden. Wenn ein Treiber WdfUsbTargetPipeAbortSynchronously aufruft, sendet das Framework eine URB_FUNCTION_ABORT_PIPE Anforderung an das E/A-Ziel. Weitere Informationen zum Abbrechen von Vorgängen an einer USB-Pipe (auch als "Abbrechen einer Pipe" bezeichnet) finden Sie in der USB-Spezifikation.
Die WdfUsbTargetPipeAbortSynchronously-Methode gibt erst zurück, wenn die Anforderung abgeschlossen ist, es sei denn, der Treiber gibt einen Timeoutwert in der WDF_REQUEST_SEND_OPTIONS-Struktur des RequestOptions-Parameters an oder es wird kein Fehler erkannt.
Sie können eine E/A-Anforderung weiterleiten, die Ihr Treiber in einer E/A-Warteschlange empfangen hat, oder Sie können eine neue Anforderung erstellen und senden.
Um eine E/A-Anforderung weiterzuleiten, die Ihr Treiber in einer E/A-Warteschlange empfangen hat, geben Sie das Handle der empfangenen Anforderung für den Request-Parameter der WdfUsbTargetPipeAbortSynchronously-Methode an.
Um eine neue Anforderung zu erstellen und zu senden, geben Sie entweder ein NULL-Anforderungshandle für den Request-Parameter an, oder erstellen Sie ein neues Anforderungsobjekt, und geben Sie dessen Handle an:
- Wenn Sie ein NULL-Anforderungshandle bereitstellen, verwendet das Framework ein internes Anforderungsobjekt. Diese Technik ist einfach zu verwenden, aber der Treiber kann die Anforderung nicht abbrechen.
- Wenn Sie WdfRequestCreate aufrufen, um ein oder mehrere Anforderungsobjekte zu erstellen, können Sie diese Anforderungsobjekte wiederverwenden, indem Sie WdfRequestReuse aufrufen. Mit dieser Technik kann die EvtDriverDeviceAdd-Rückruffunktion Ihres Treibers Anforderungsobjekte für ein Gerät vorab zugeordnet werden. Darüber hinaus kann ein anderer Treiberthread WdfRequestCancelSentRequest aufrufen, um die Anforderung bei Bedarf abzubrechen.
Informationen zum Abrufen status Informationen nach Abschluss einer E/A-Anforderung finden Sie unter Abrufen von Abschlussinformationen.
Weitere Informationen zur WdfUsbTargetPipeAbortSynchronously-Methode und USB-E/A-Zielen finden Sie unter USB-E/A-Ziele.
Beispiele
Im folgenden Codebeispiel werden Abbruchanforderungen an alle Pipes gesendet, die für die Schnittstelle eines USB-Geräts konfiguriert sind.
UCHAR i;
ULONG count;
NTSTATUS status;
PDEVICE_CONTEXT pDevContext;
pDevContext = GetDeviceContext(Device);
count = WdfUsbInterfaceGetNumConfiguredPipes(
pDevContext->UsbInterface
);
for (i = 0; i < count; i++) {
WDFUSBPIPE pipe;
pipe = WdfUsbInterfaceGetConfiguredPipe(
pDevContext->UsbInterface,
i,
NULL
);
status = WdfUsbTargetPipeAbortSynchronously(
pipe,
WDF_NO_HANDLE,
NULL
);
if (!NT_SUCCESS(status)) {
break;
}
}
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Universell |
KMDF-Mindestversion | 1.0 |
UMDF-Mindestversion | 2.0 |
Kopfzeile | wdfusb.h (wdfusb.h einschließen) |
Bibliothek | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | PASSIVE_LEVEL |
DDI-Complianceregeln | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), RequestForUrbXrb(kmdf), UsbKmdfIrql(kmdf), UsbKmdfIrql2(kmdf), UsbKmdfIrqlExplicit(kmdf) |
Weitere Informationen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für