WdfRequestCompleteWithPriorityBoost 函式 (wdfrequest.h)

[僅適用於 KMDF]

WdfRequestCompleteWithPriorityBoost 方法會完成指定的 I/O 要求,並提供完成狀態。 它也會指定值,系統可用來提升要求 I/O 作業之線程的運行時間優先順序。

語法

VOID WdfRequestCompleteWithPriorityBoost(
  [in] WDFREQUEST Request,
  [in] NTSTATUS   Status,
  [in] CCHAR      PriorityBoost
);

參數

[in] Request

架構要求物件的句柄,表示正在完成的 I/O 要求。

[in] Status

NTSTATUS 值,表示要求的完成狀態。 有效的狀態值包括,但不限於下列各項:

STATUS_SUCCESS

驅動程式已成功完成要求。

STATUS_CANCELLED

驅動程式已取消要求。

STATUS_UNSUCCESSFUL

驅動程式在處理要求時發生錯誤。

[in] PriorityBoost

系統定義的常數值,用來遞增要求作業之原始線程的運行時間優先順序。 常數值是裝置類型特定的,而且定義於 Wdm.h 中。 常數名稱的格式為 XXX_INCREMENT。 如需優先順序提升值的詳細資訊,請參閱 在完成 I/O 要求時指定優先順序提升。

傳回值

無

備註

如果驅動程式提供無效的物件句柄,就會發生錯誤檢查。

如果您想要覆寫架構提供的預設優先順序提升,驅動程式應該呼叫 WdfRequestCompleteWithPriorityBoost 。 例如,如果驅動程式能夠快速完成要求,則驅動程式可能會將優先順序提升設定為IO_NO_INCREMENT,可能是因為它偵測到錯誤。

呼叫 WdfRequestCompleteWithPriorityBoost 之後,除非驅動程式呼叫 WdfObjectReference ,否則要求句柄已不再有效,以將一或多個額外的參考計數新增至要求物件。 請注意, 在 WdfRequestCompleteWithPriorityBoost 傳回之後,驅動程式不得嘗試存取相關聯的 WDM IRP 結構,即使它已呼叫 WdfObjectReference 也一樣。

如需呼叫 WdfRequestCompleteWithPriorityBoost 的詳細資訊,請參閱 完成 I/O 要求。

範例

下列程式代碼範例示範 WdfRequestComplete 的範例如何使用 WdfRequestCompleteWithPriorityBoost ,而不是 WdfRequestComplete。

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

規格需求

需求 值
目標平台 Universal
最小 KMDF 版本 1.0
標頭 wdfrequest.h (包含 Wdf.h)
程式庫 Wdf01000.sys (請參閱 Framework Library Versioning.)
IRQL <=DISPATCH_LEVEL
DDI 合規性規則 BufAfterReqCompletedIntIoctl (kmdf) 、 BufAfterReqCompletedIntIoctlA (kmdf ) 、 BufAfterReqCompletedIoctl (kmdf) 、 BufAfterReqReqCompletedIoctlA (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) , MdlAfterReqCompleted IoctlA (kmdf) 、 MdlAfterReqCompletedRead (kmdf ) 、 MdlAfterReqCompletedReadA (kmdf ) 、 MdlAfterReqCompletedWrite) (、 MdlAfterReqCompletedWriteA (kmdf) 、 MemAfterReqCompletedIntIoctl (kmdf) , MemAfterReqCompletedIntIoctlA (kmdf ) , MemAfterReqCompletedIoctl () , MemAfterReqCompletedIoctlA (kmdf) , MemAfterReqCompletedRead (kmdf) 、 MemAfterReqCompletedReadA (kmdf) 、 MemAfterReqCompletedWrite (kmdf ) 、 MemAfterReqCompletedWriteA (kmdf) 、 NoCancelFromEvtSurpriseRemove (kmdf) 、 ReqDelete (kmdf) 、 ReqIsCancOnCancReq (kmdf ) 、 ReqNotCanceledLocal (kmdf ) 、 ReqSendFail (kmdf ) 、 RequestCompleted (kmdf ) 、 RequestCompletedLocal (kmdf)

另請參閱

WdfObjectReference

WdfRequestComplete

WdfRequestCompleteWithInformation