WdfRequestCompleteWithPriorityBoost-Funktion (wdfrequest.h)
[Gilt nur für KMDF]
Die WdfRequestCompleteWithPriorityBoost-Methode schließt eine angegebene E/A-Anforderung ab und stellt eine Vervollständigung status bereit. Es gibt auch einen Wert an, den das System verwenden kann, um die Laufzeitpriorität des Threads zu erhöhen, der den E/A-Vorgang angefordert hat.
Syntax
void WdfRequestCompleteWithPriorityBoost(
[in] WDFREQUEST Request,
[in] NTSTATUS Status,
[in] CCHAR PriorityBoost
);
Parameter
[in] Request
Ein Handle für das Frameworkanforderungsobjekt, das die E/A-Anforderung darstellt, die abgeschlossen wird.
[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] PriorityBoost
Ein systemdefinierter konstanter Wert, um den die Laufzeitpriorität des ursprünglichen Threads inkrementieren soll, der den Vorgang angefordert hat. Konstante Werte sind gerätetypspezifisch und werden in Wdm.h definiert. Das Format für die Konstantennamen ist XXX_INCREMENT. Weitere Informationen zu Prioritätssteigerungswerten finden Sie unter Angeben von Prioritätssteigerungen beim Abschließen von E/A-Anforderungen.
Rückgabewert
Keine
Bemerkungen
Eine Fehlerüberprüfung tritt auf, wenn der Treiber ein ungültiges Objekthandle bereitstellt.
Ihr Treiber sollte WdfRequestCompleteWithPriorityBoost aufrufen, wenn Sie die vom Framework bereitgestellte Standardprioritätserhöhung außer Kraft setzen möchten. Beispielsweise kann der Treiber die Prioritätserhöhung auf IO_NO_INCREMENT festlegen, wenn er die Anforderung schnell abschließen konnte, möglicherweise weil er einen Fehler erkannt hat.
Nachdem ein Aufruf von WdfRequestCompleteWithPriorityBoost 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 WdfRequestCompleteWithPriorityBoost nicht versuchen darf, auf die zugehörige WDM-IRP-Struktur zuzugreifen, auch wenn er WdfObjectReference aufgerufen hat.
Weitere Informationen zum Aufrufen von WdfRequestCompleteWithPriorityBoost finden Sie unter Abschließen von E/A-Anforderungen.
Beispiele
Das folgende Codebeispiel zeigt, wie das Beispiel in WdfRequestCompleteWdfRequestCompleteWithPriorityBoost anstelle von WdfRequestComplete verwenden kann.
switch (params.Type) {
case WdfRequestTypeRead:
length = params.Parameters.Read.Length;
direction = WdfDmaDirectionReadFromDevice;
break;
case WdfRequestTypeWrite:
length = params.Parameters.Write.Length;
direction = WdfDmaDirectionWriteToDevice;
break;
default:
WdfRequestCompleteWithPriorityBoost(
Request,
STATUS_INVALID_PARAMETER,
IO_NO_INCREMENT
);
return;
}