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;
    }

Anforderungen

Anforderung Wert
Zielplattform Universell
KMDF-Mindestversion 1.0
Kopfzeile wdfrequest.h (einschließen von Wdf.h)
Bibliothek Wdf01000.sys (siehe Versionierung der Frameworkbibliothek.)
IRQL <=DISPATCH_LEVEL
DDI-Complianceregeln BufAfterReqCompletedIntIoctl(kmdf), BufAfterReqCompletedIntIoctlA(kmdf), BufAfterReqCompletedIoctl(kmdf), BufAfterReqCompletedIoctlA(kmdf), BufAfterReqCompletedRead(kmdf), BufAfterReqCompletedReadA(kmdf), BufAfterReqCompletedWrite(kmdf), BufAfterReqCompletedWriteA(kmdf), CompleteCanceledReq(kmdf), DeferredRequestCompleted(kmdf), DoubleCompletion(kmdf), DoubleCompletionLocal(kmdf), DriverCreate(kmdf), EvtIoStopCancel(kmdf), EvtIoStopCompleteOrStopAck(kmdf), EvtSurpriseRemoveNoRequestComplete(kmdf), InvalidReqAccess(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), MarkCancOnCancReqLocal(kmdf), MdlAfterReqCompletedIntIoctl(kmdf), MdlAfterReqCompletedIntIoctlA(kmdf), MdlAfterReqCompletedIoctl(kmdf), MdlAfterReqCompletedIoctlA(kmdf), MdlAfterReqCompletedRead(kmdf), MdlAfterReqCompletedReadA(kmdf), MdlAfterReqCompletedWrite(kmdf), MdlAfterReqCompletedWriteA(kmdf), MemAfterReqCompletedIntIoctl(kmdf), MemAfterReqCompletedIntIoctlA(kmdf), MemAfterReqCompletedIoctl(kmdf), MemAfterReqCompletedIoctlA(kmdf), MemAfterReqCompletedRead(kmdf), MemAfterReqCompletedReadA(kmdf), MemAfterReqCompletedWrite(kmdf), MemAfterReqCompletedWriteA(kmdf), NoCancelFromEvtSurpriseRemove(kmdf), ReqDelete(kmdf), ReqIsCancOnCancReq(kmdf), ReqNotCanceledLocal(kmdf), ReqSendFail(kmdf), RequestCompleted(kmdf), RequestCompletedLocal(kmdf)

Weitere Informationen

WdfObjectReference

WdfRequestComplete

WdfRequestCompleteWithInformation