WdfRequestComplete-Funktion (wdfrequest.h)
[Gilt für KMDF und UMDF]
Die WdfRequestComplete-Methode schließt eine angegebene E/A-Anforderung ab und stellt einen Abschluss status bereit.
Syntax
void WdfRequestComplete(
[in] WDFREQUEST Request,
[in] NTSTATUS Status
);
Parameter
[in] Request
Ein Handle für das Frameworkanforderungsobjekt, das die E/A-Anforderung darstellt, die abgeschlossen wird.
[in] Status
Ein NTSTATUS-Wert, der den Abschluss status der Anforderung darstellt. Gültige status-Werte umfassen unter anderem Folgendes:
STATUS_SUCCESS
Der Treiber führt die Anforderung erfolgreich aus.
STATUS_CANCELLED
Der Treiber bricht die Anforderung ab.
STATUS_UNSUCCESSFUL
Beim Treiber ist bei der Verarbeitung der Anforderung ein Fehler aufgetreten.
Rückgabewert
Keine
Bemerkungen
Eine Fehlerüberprüfung tritt auf, wenn der Treiber ein ungültiges Objekthandle bereitstellt.
Nachdem ein Treiber WdfRequestComplete aufgerufen hat, können Treiber auf höherer Ebene im Treiberstapel WdfRequestGetStatus aufrufen, um den abschluss status Wert abzurufen, der für den Status-Parameter angegeben wurde. In der Regel rufen Treiber WdfRequestGetStatus aus einer CompletionRoutine-Rückruffunktion auf.
Nachdem ein Aufruf von WdfRequestComplete zurückgegeben wurde, ist das Anforderungshandle nicht mehr gültig, es sei denn, der Treiber hat WdfObjectReference aufgerufen, um dem Anforderungsobjekt eine oder mehrere zusätzliche Verweisanzahlen hinzuzufügen. Beachten Sie, dass der Treiber nach der Rückgabe von WdfRequestComplete nicht versuchen darf, auf die zugeordnete WDM-IRP-Struktur zuzugreifen, auch wenn er WdfObjectReference aufgerufen hat. Diese Anforderung erstreckt sich auf den Zugriff auf die zugeordnete WDM-IRP-Struktur, indem Methoden für WDFREQUEST aufgerufen werden, z. B. WdfRequestRetrieveOutputBuffer oder WdfRequestRetrieveInputBuffer.
Nachdem ein Treiber WdfRequestComplete aufgerufen hat, ruft das Framework die EvtCleanupCallback-Funktion des Treibers für die Anforderung auf, sofern der Treiber eine bereitgestellt hat.
Anstatt WdfRequestComplete aufzurufen, kann der Treiber WdfRequestCompleteWithInformation oder WdfRequestCompleteWithPriorityBoost aufrufen. Weitere Informationen finden Sie in den Hinweisen zu WdfRequestCompleteWithInformation .
Wenn Ihr Treiber WdfRequestComplete aufruft, stellt das Framework einen Standardwert bereit, den das System verwendet, um die Laufzeitpriorität des Threads zu erhöhen, der den E/A-Vorgang angefordert hat. Informationen zu standardbasierten Prioritätserhöhungswerten finden Sie unter Angeben von Prioritätserhöhungen beim Abschließen von E/A-Anforderungen. Ihr Treiber kann WdfRequestCompleteWithPriorityBoost aufrufen, um den Standardwert der Prioritätserhöhung zu überschreiben.
Weitere Informationen zum Aufrufen von WdfRequestComplete finden Sie unter Abschließen von E/A-Anforderungen.
Beispiele
Das folgende Codebeispiel ist ein Abschnitt eines Anforderungshandlers. Der Anforderungshandler akzeptiert nur Lese- und Schreibanforderungen und schließt jede Anforderung mit einem Fehler ab, status, wenn der Anforderungstyp nicht gelesen oder geschrieben ist.
VOID
MyEvtIoDefault(
IN WDFQUEUE Queue,
IN WDFREQUEST Request
)
{
WDF_REQUEST_PARAMETERS params;
WDF_DMA_DIRECTION direction;
...
WDF_REQUEST_PARAMETERS_INIT(¶ms);
WdfRequestGetParameters(
Request,
¶ms
);
//
// Validate and gather parameters.
//
switch (params.Type) {
case WdfRequestTypeRead:
length = params.Parameters.Read.Length;
direction = WdfDmaDirectionReadFromDevice;
break;
case WdfRequestTypeWrite:
length = params.Parameters.Write.Length;
direction = WdfDmaDirectionWriteToDevice;
break;
default:
WdfRequestComplete(
Request,
STATUS_INVALID_DEVICE_REQUEST
);
return;
}
...
}
Anforderungen
Weitere Informationen
WdfRequestCompleteWithInformation