共用方式為


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。 否則,這個方法可能會傳回下列其中一個值:

回傳碼 說明
STATUS_INVALID_PARAMETER
輸入參數無效。
STATUS_INFO_LENGTH_MISMATCH
WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY 結構的大小不正確。
資源不足狀態
可用的記憶體數量太低。
 

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

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

備註

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

在 KMDF 1.9 版中,佇列 參數所代表的 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;
}

需求

要求 價值
目標平臺 普遍
最低 KMDF 版本 1.9
標題 wdfio.h (包括 Wdf.h)
程式庫 Wdf01000.sys (請參閱架構連結庫版本控制。)
IRQL PASSIVE_LEVEL
DDI 合規性規則 DriverCreate(kmdf)

另請參閱

EvtIoAllocateResourcesForReservedRequest

WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY

WdfDeviceConfigureRequestDispatching