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 |
---|---|
|
輸入參數無效。 |
|
WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY 結構的大小不正確。 |
|
可用的記憶體數量太低。 |
這個方法也可能傳回其他 NTSTATUS值。 此外,如果您的驅動程式 的 EvtIoAllocateResourcesForReservedRequest 回呼函式傳回錯誤狀態值, WdfIoQueueAssignForwardProgressPolicy 會傳回該值。
如果驅動程式提供無效的物件句柄,就會發生錯誤檢查。
備註
WdfIoQueueAssignForwardProgressPolicy 方法會建立要求物件,此架構會保留低記憶體狀況,並登錄架構呼叫的回呼函式來處理低記憶體狀況。
在 KMDF 1.9 版中, Queue 參數所代表的 I/O 佇列必須是裝置的預設 I/O 佇列,或驅動程式呼叫 WdfDeviceConfigureRequestDispatching 的佇列。 驅動程式可以在呼叫 WdfDeviceConfigureRequestDispatching 之後,隨時呼叫 WdfIoQueueAssignForwardProgressPolicy。
在 KMDF 1.11 版和更新版本中, Queue 參數所代表的 I/O 佇列可以是直接從架構接收要求的任何佇列。 例如,驅動程式可能會指定要 動態轉送 IRP 的佇列。
在 WdfIoQueueAssignForwardProgressPolicy 傳回之前,架構會執行下列動作:
- 建立並儲存驅動程式為 WDF_IO_QUEUE_FORWARD_PROGRESS_POLICY 結構之 TotalForwardProgressRequests 成員指定的要求物件數目。
- 如果驅動程式先前稱為 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;
}
規格需求
需求 | 值 |
---|---|
目標平台 | Universal |
最小 KMDF 版本 | 1.9 |
標頭 | wdfio.h (包含 Wdf.h) |
程式庫 | Wdf01000.sys (請參閱 Framework Library Versioning.) |
IRQL | PASSIVE_LEVEL |
DDI 合規性規則 | DriverCreate (kmdf) |
另請參閱
EvtIoAllocateResourcesForReservedRequest