KsForwardAndCatchIrp 函式 (ks.h)
KsForwardAndCatchIrp 函式會在初始化下一個堆疊位置之後,將 IRP 轉送至指定的驅動程式,並從該驅動程式重新取得 IRP 的控制權。 函式會與可堆疊且不使用檔案對象進行通訊的裝置搭配使用。
如果使用檔案物件,呼叫端必須先使用該檔案物件初始化目前堆疊位置,然後再呼叫 KsForwardAndCatchIrp 函式。 函式會先確認有新的堆疊位置要複製到 ,然後再嘗試這麼做。 如果沒有新的堆疊位置,函式會傳回STATUS_INVALID_DEVICE_REQUEST。 不論是否有新的堆疊位置存在,IRP 都不會完成。
語法
KSDDKAPI NTSTATUS KsForwardAndCatchIrp(
[in] PDEVICE_OBJECT DeviceObject,
[in] PIRP Irp,
[in] PFILE_OBJECT FileObject,
[in] KSSTACK_USE StackUse
);
參數
[in] DeviceObject
指定要轉送 IRP 的裝置。
[in] Irp
指定正轉送至指定驅動程式的 IRP。
[in] FileObject
指定要複製到下一個堆疊位置的檔案物件值。 這可以是 NULL ,以設定沒有檔案物件,但值一律會複製到下一個堆疊位置。 如果要保留目前的檔案物件,則必須在此參數中傳遞它。
[in] StackUse
指定由 KSSTACK_USE 列舉的值。 如果值為 KsStackCopyToNewLocation,參數會複製到下一個堆疊位置。 如果值為 KsStackReuseCurrentLocation,則會在轉送 IRP 且堆疊位置傳回至目前位置時重複使用目前的堆疊位置。 如果值為 KsStackUseNewLocation,則會依原樣使用新的堆疊位置。
傳回值
KsForwardAndCatchIrp 函式會傳回 IoCallDriver 的結果,如果沒有可用的堆疊深度,則會傳回無效的狀態。
備註
類型KSSTACK_USE列舉會指定將 IRP 轉送至下一個驅動程式時,IRP 堆疊的使用方式。
列舉型別 | 描述 |
---|---|
KsStackCopyToNewLocation | 指出參數要複製到下一個堆疊位置。 |
KsStackReuseCurrentLocation | 表示目前堆疊位置要重複使用。 |
KsStackUseNewLocation | 表示下一個堆疊位置是要在不修改的情況下使用。 |
規格需求
需求 | 值 |
---|---|
目標平台 | Universal |
標頭 | ks.h (包含 Ks.h) |
程式庫 | Ks.lib |