WdfRequestCompleteWithInformation-Funktion (wdfrequest.h)
[Gilt für KMDF und UMDF]
Die WdfRequestCompleteWithInformation-Methode speichert Vervollständigungsinformationen und schließt dann eine angegebene E/A-Anforderung mit einer angegebenen Vervollständigung status ab.
Syntax
void WdfRequestCompleteWithInformation(
[in] WDFREQUEST Request,
[in] NTSTATUS Status,
[in] ULONG_PTR Information
);
Parameter
[in] Request
Ein Handle für das Anforderungsobjekt.
[in] Status
Ein NTSTATUS-Wert, der die Vervollständigung status der Anforderung darstellt. Gültige status-Werte umfassen folgendes, sind jedoch nicht beschränkt auf:
STATUS_SUCCESS
Der Treiber hat die Anforderung erfolgreich abgeschlossen.
STATUS_CANCELLED
Der Treiber hat die Anforderung abgebrochen.
STATUS_UNSUCCESSFUL
Beim Treiber ist beim Verarbeiten der Anforderung ein Fehler aufgetreten.
[in] Information
Ein ULONG_PTR, der auf einen anforderungsabhängigen Wert festgelegt ist. Wenn beispielsweise eine Übertragungsanforderung erfolgreich abgeschlossen wurde, wird dies auf die Anzahl der übertragenen Bytes festgelegt. Dieses Feld ist vom Treiber nicht erweiterbar.
Rückgabewert
Keine
Bemerkungen
Eine Fehlerüberprüfung tritt auf, wenn der Treiber ein ungültiges Objekthandle bereitstellt.
Für Lese-, Schreib- und IOCTL-Anforderungen muss der Treiber WdfRequestCompleteWithInformation aufrufen.
Für eine Anforderung ohne Datenübertragung ist das Aufrufen von WdfRequestComplete stattdessen eine Option.
Das Aufrufen von WdfRequestCompleteWithInformation entspricht dem Aufrufen von WdfRequestSetInformation und dann dem Aufrufen von WdfRequestComplete.
Nachdem ein Aufruf von WdfRequestCompleteWithInformation 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 WdfRequestCompleteWithInformation nicht versuchen darf, auf die zugeordnete WDM-IRP-Struktur zuzugreifen, auch wenn er WdfObjectReference aufgerufen hat.
Wenn Ihr Treiber WdfRequestCompleteWithInformation 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 Standardprioritätssteigerungswerten finden Sie unter Angeben von Prioritätssteigerungen beim Abschließen von E/A-Anforderungen. Ihr Treiber kann WdfRequestCompleteWithPriorityBoost aufrufen, um den Standardwert der Prioritätserhöhung außer Kraft zu setzen.
Weitere Informationen zum Aufrufen von WdfRequestCompleteWithInformation finden Sie unter Abschließen von E/A-Anforderungen.
Ein Codebeispiel, das zeigt, wie WdfRequestCompleteWithInformation zum Abrufen der Anzahl kopierter Bytes verwendet wird, finden Sie im VirtualSerial2-Treiberbeispiel.
Beispiele
Das folgende Codebeispiel zeigt, wie ein Treiber für ein USB-Gerät WdfRequestCompleteWithInformation in einer CompletionRoutine-Rückruffunktion aufrufen kann.
VOID
EvtRequestReadCompletionRoutine(
IN WDFREQUEST Request,
IN WDFIOTARGET Target,
PWDF_REQUEST_COMPLETION_PARAMS CompletionParams,
IN WDFCONTEXT Context
)
{
NTSTATUS status;
size_t bytesRead = 0;
PWDF_USB_REQUEST_COMPLETION_PARAMS usbCompletionParams;
UNREFERENCED_PARAMETER(Target);
UNREFERENCED_PARAMETER(Context);
status = CompletionParams->IoStatus.Status;
usbCompletionParams = CompletionParams->Parameters.Usb.Completion;
bytesRead = usbCompletionParams->Parameters.PipeRead.Length;
if (NT_SUCCESS(status)){
TraceEvents(
TRACE_LEVEL_INFORMATION,
DBG_READ,
"Number of bytes read: %I64d\n",
(INT64)bytesRead
);
} else {
TraceEvents(
TRACE_LEVEL_ERROR,
DBG_READ,
"Read failed - request status 0x%x UsbdStatus 0x%x\n",
status,
usbCompletionParams->UsbdStatus
);
}
WdfRequestCompleteWithInformation(
Request,
status,
bytesRead
);
return;
}
Anforderungen
Weitere Informationen
WDF_USB_REQUEST_COMPLETION_PARAMS