KsRecalculateStackDepth 函数 (ks.h)

KsRecalculateStackDepth 函数根据已设置目标设备的所有对象重新计算基础设备对象所需的最大堆栈深度, (它们已使用 KsSetTargetDeviceObject 函数将自己添加到基础设备对象上的对象列表) 。 如果使用 KsSetDevicePnpAndBaseObject 在基础设备标头上设置了 PnP 设备对象,则计算最大堆栈深度时也会考虑该设备。

语法

KSDDKAPI VOID KsRecalculateStackDepth(
  [in] KSDEVICE_HEADER Header,
  [in] BOOLEAN         ReuseStackLocation
);

参数

[in] Header

指向以前由 KsAllocateDeviceHeader 分配的标头。

[in] ReuseStackLocation

如果此值设置为 TRUE,则转发任何 IRP 时,将重复使用当前堆栈位置。 这意味着此对象在转发 IRP 时不需要自己的堆栈位置,并且不会将额外位置添加到最大堆栈大小。 如果设置为 FALSE,则计算的堆栈大小将递增 1。 如果设置了 Pnp 对象堆栈,则重用参数也适用于该堆栈。 请注意, KsDefaultDispatchPnp 始终重用当前堆栈位置。 最小堆栈深度为 1。

返回值

备注

KsRecalculateStackDepth 函数假定已在此设备标头上调用 KsSetDevicePnpAndBaseObject,并分配了要重新计算其堆栈深度的基对象。

此函数允许通过对象转发 IRP,方法是确保在此设备上分配的任何 IRP 将具有足够的堆栈位置以允许转发它。 当设备切换出停止状态时,必须在流式处理设备上重新计算堆栈深度。 为了节省资源,还可以在释放对象时重新计算它。

要求

要求
目标平台 通用
标头 ks.h (包括 Ks.h)
Library Ks.lib

另请参阅

KsAllocateDeviceHeader

KsDefaultDispatchPnp

KsSetDevicePnpAndBaseObject

KsSetTargetDeviceObject