共用方式為


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 指出下一個堆疊位置是不使用修改。

要求

要求 價值
目標平臺 普遍
標頭 ks.h (包括 Ks.h)
連結庫 Ks.lib