共用方式為


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