WdfRequestForwardToParentDeviceIoQueue 函式 (wdfrequest.h)
[僅適用於 KMDF]
WdfRequestForwardToParentDeviceIoQueue 方法會將來自子裝置 I/O 佇列的 I/O 要求重新排入至子系裝置父裝置的指定 I/O 佇列。
語法
NTSTATUS WdfRequestForwardToParentDeviceIoQueue(
[in] WDFREQUEST Request,
[in] WDFQUEUE ParentDeviceQueue,
[in] PWDF_REQUEST_FORWARD_OPTIONS ForwardOptions
);
參數
[in] Request
架構要求物件的句柄。
[in] ParentDeviceQueue
架構佇列物件的句柄。
[in] ForwardOptions
呼叫端配置 WDF_REQUEST_FORWARD_OPTIONS 結構的指標。
傳回值
如果作業成功,WdfRequestForwardToParentDeviceIoQueue 會傳回STATUS_SUCCESS。 否則,這個方法可能會傳回下列其中一個值:
傳回碼 | Description |
---|---|
|
提供WDF_REQUEST_FORWARD_OPTIONS結構的大小無效。 |
|
所提供WDF_REQUEST_FORWARD_OPTIONS結構的成員包含無效的值。 |
|
如果發生下列其中一項,則會傳回此值:
|
|
指定的 I/O 佇列不接受新的要求。 |
這個方法也可能傳回其他 NTSTATUS值。
如果驅動程式提供無效的物件句柄,就會發生錯誤檢查。
備註
在驅動程式可以呼叫 WdfRequestForwardToParentDeviceIoQueue 之前,它必須先呼叫 WdfPdoInitAllowForwardingRequestToParent。
驅動程式必須使用相同的 方法來存取數據緩衝區 , (緩衝處理、直接處理,或父裝置和子裝置都) 。
如果您的驅動程式會呼叫 WdfRequestForwardToParentDeviceIoQueue 來重新佇列 I/O 要求,則驅動程式不得使用要求物件做為其他架構物件的父代,例如定時器物件或工作項目物件。
如果您的驅動程式已呼叫 WdfDeviceInitSetRequestAttributes 來指定父裝置要求對象的內容空間,架構不會新增此內容空間來要求驅動程式在子裝置佇列中接收的物件。 驅動程式可以呼叫 WdfObjectAllocateContext ,在驅動程式呼叫 WdfRequestForwardToParentDeviceIoQueue 之前,將內容空間新增至要求物件。 另一方面,如果驅動程式針對子裝置的要求物件呼叫 WdfDeviceInitSetRequestAttributes,而且父裝置的要求物件使用等於或小於子裝置內容空間的內容空間,驅動程式就可以使用要求對象的內容空間,而不需要呼叫 WdfObjectAllocateContext。
驅動程式目前必須針對所有重新排入佇列的 I/O 要求使用 [傳送和忘記] 選項 。 因此,請注意,在架構刪除重新佇列的要求物件時,它可能已經移除原本收到要求物件的子裝置。 因此,驅動程式不得使用重新佇列要求物件的 EvtCleanupCallback 或 EvtDestroyCallback 函式來存取子裝置資源,因為資源可能會在 EvtCleanupCallback 或 EvtDestroyCallback 函式執行之前移除。
如需 WdfRequestForwardToParentDeviceIoQueue 的詳細資訊,請參閱 重新排入佇列 I/O 要求。
範例
下列程式代碼範例會先判斷收到 I/O 要求的裝置的父裝置,然後將 I/O 要求重新佇列至父裝置的預設 I/O 佇列。
WDFDEVICE device, parentDevice;
WDF_REQUEST_FORWARD_OPTIONS forwardOptions;
NTSTATUS status;
device = WdfIoQueueGetDevice(WdfRequestGetIoQueue(Request));
parentDevice = WdfPdoGetParent(device);
WDF_REQUEST_FORWARD_OPTIONS_INIT(&forwardOptions);
status = WdfRequestForwardToParentDeviceIoQueue(
Request,
WdfDeviceGetDefaultQueue(parentDevice),
&forwardOptions
);
if (!NT_SUCCESS(status)) {
WdfRequestComplete(
Request,
status
);
}
規格需求
需求 | 值 |
---|---|
目標平台 | Universal |
最低 KMDF 版本 | 1.9 |
標頭 | wdfrequest.h (包含 Wdf.h) |
程式庫 | Wdf01000.sys (請參閱 Framework Library Versioning.) |
IRQL | <=DISPATCH_LEVEL |
DDI 合規性規則 | DriverCreate (kmdf) |