共用方式為


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