WdfIoQueueAssignForwardProgressPolicy 函式 (wdfio.h)

[僅適用於 KMDF]

WdfIoQueueAssignForwardProgressPolicy 方法可讓架構保證指定 I/O 佇列的向前進度

語法

NTSTATUS WdfIoQueueAssignForwardProgressPolicy(
  [in] WDFQUEUE                              Queue,
  [in] PWDF_IO_QUEUE_FORWARD_PROGRESS_POLICY ForwardProgressPolicy
);

參數

[in] Queue

架構佇列物件的句柄。

[in] ForwardProgressPolicy

驅動程式配置的 WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY 結構的指標。

傳回值

WdfIoQueueAssignForwardProgressPolicy 會在作業成功時傳回STATUS_SUCCESS。 否則,此方法可能會傳回下列其中一個值:

傳回碼 Description
STATUS_INVALID_PARAMETER
輸入參數無效。
STATUS_INFO_LENGTH_MISMATCH
WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY 結構的大小不正確。
STATUS_INSUFFICIENT_RESOURCES
可用的記憶體數量太低。
 

這個方法也可能傳回其他 NTSTATUS值。 此外,如果您的驅動程式 的 EvtIoAllocateResourcesForReservedRequest 回呼函式傳回錯誤狀態值, WdfIoQueueAssignForwardProgressPolicy 會傳回該值。

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

備註

WdfIoQueueAssignForwardProgressPolicy 方法會建立要求物件,此架構會保留低記憶體狀況,並登錄架構呼叫的回呼函式來處理低記憶體狀況。

在 KMDF 1.9 版中, Queue 參數所代表的 I/O 佇列必須是裝置的預設 I/O 佇列,或驅動程式呼叫 WdfDeviceConfigureRequestDispatching 的佇列。 驅動程式可以在呼叫 WdfDeviceConfigureRequestDispatching 之後,隨時呼叫 WdfIoQueueAssignForwardProgressPolicy

在 KMDF 1.11 版和更新版本中, Queue 參數所代表的 I/O 佇列可以是直接從架構接收要求的任何佇列。 例如,驅動程式可能會指定要 動態轉送 IRP 的佇列。

在 WdfIoQueueAssignForwardProgressPolicy 傳回之前,架構會執行下列動作:

在驅動程式呼叫 WdfIoQueueAssignForwardProgressPolicy 來建立保留的要求對象之後,每當架構嘗試建立新的要求對象失敗時,就會使用這些保留物件。 (一般而言,這類失敗是因為記憶體不足的情況所造成。)

只有當架構刪除其所屬的架構佇列物件時,架構才會刪除其保留的要求物件。 如果您的驅動程式針對其要求物件呼叫 WdfDeviceInitSetRequestAttributes 並指定 EvtCleanupCallbackEvtDestroyCallback 回 呼函式,則架構會在刪除物件時針對其保留的要求物件呼叫這些回呼函式。

如需 WdfIoQueueAssignForwardProgressPolicy 方法的詳細資訊,以及如何使用架構的保證向前進度功能,請參閱 保證 I/O 作業的向前進度

範例

此程式代碼範例會設定先前建立的 I/O 佇列來接收寫入要求,然後它可保證佇列的向前進度。

#define MAX_RESERVED_REQUESTS 10

WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY queueForwardProgressPolicy;
WDFQUEUE writeQueue;
NTSTATUS status = STATUS_SUCCESS;
...
status = WdfDeviceConfigureRequestDispatching(
             device,
             writeQueue,
             WdfRequestTypeWrite
             );
if(!NT_SUCCESS(status)) {
    return status;
}
WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY_DEFAULT_INIT(
    &queueForwardProgressPolicy,
    MAX_RESERVED_REQUESTS
    );
status = WdfIoQueueAssignForwardProgressPolicy(
             writeQueue,
             &queueForwardProgressPolicy
             );
if(!NT_SUCCESS(status)) {
    return status;
}

規格需求

需求
目標平台 Universal
最小 KMDF 版本 1.9
標頭 wdfio.h (包含 Wdf.h)
程式庫 Wdf01000.sys (請參閱 Framework Library Versioning.)
IRQL PASSIVE_LEVEL
DDI 合規性規則 DriverCreate (kmdf)

另請參閱

EvtIoAllocateResourcesForReservedRequest

WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY

WdfDeviceConfigureRequestDispatching