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。 否則,這個方法可能會傳回下列其中一個值:
回傳碼 | 說明 |
---|---|
|
輸入參數無效。 |
|
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 傳回之前,架構會執行下列動作:
- 建立並儲存驅動程式為 TotalForwardProgressRequests 結構 WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY 成員所指定的要求物件數目。
- 如果先前呼叫的驅動程式 WdfDeviceInitSetRequestAttributes,則每個配置都會包含 WdfDeviceInitSetRequestAttributes 指定的內容空間。
- 針對架構所建立的每個要求物件,呼叫驅動程式的 EvtIoAllocateResourcesForReservedRequest 回呼函式。
只有當架構刪除其所屬的架構佇列物件時,架構才會刪除其保留的要求物件。 如果您的驅動程式呼叫 WdfDeviceInitSetRequestAttributes,並在刪除物件時指定 EvtCleanupCallback 或 EvtDestroyCallback 回呼函式,架構會在刪除物件時,針對保留的要求對象呼叫這些回呼函式。
如需 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