_KsEdit函数 (ks.h)

KsEdit 函数保证通过对象包动态分配给定项并与 AVStream 对象关联。

语法

KSDDKAPI NTSTATUS _KsEdit(
  [in]      KSOBJECT_BAG ObjectBag,
  [in, out] PVOID        *PointerToPointerToItem,
  [in]      ULONG        NewSize,
  [in]      ULONG        OldSize,
  [in]      ULONG        Tag
);

参数

[in] ObjectBag

在检查中使用的KSOBJECT_BAG(等效于类型 PVOID)。 如果项目不包含在对象包中,KsEdit 动态分配项目的足够内存,复制旧内容,并将新分配的内存放在此对象包中。

[in, out] PointerToPointerToItem

指向正在编辑的项的指针的指针。

[in] NewSize

要为项分配的字节数。

[in] OldSize

项当前占用的字节数。

[in] Tag

包含用于分配的池标记。 驱动程序通常将池标记指定为最多四个字符的字符串,用单引号分隔。 字符串通常按反向顺序指定。 标记中每个字符的 ASCII 值必须介于 0 和 127 之间。

返回值

返回成功或STATUS_INSUFFICIENT_RESOURCES。

言论

请注意,KsEditKsEditSized 是创建宏,以便更轻松地使用 _KsEdit。 虽然 _KsEdit 允许调整项的大小,但 KsEdit 则不能。 宏 KsEdit 调用 _KsEdit,将 大小指定为两种大小(** PointerToPointerToItem)。

例如,请考虑需要在创建时修改其分配器框架的引脚。 由于描述符是静态编码的,并且新引脚可以使用它,因此解决方案是修改引脚描述符,如下所示:

KsEdit(Pin, &Pin->Descriptor, Tag);
Pin->Descriptor->AllocatorFraming = NewAllocatorFraming;

KsEdit 调用可确保 Pin->描述符 是与 Pin关联的动态内存。 请注意,任意修改描述符和其他 AVStream 结构可能会导致不良结果。 在 AVStream 结构上使用 KsEdit 时,微型驱动程序应谨慎行事。

KsEditSized 调用 _KsEdit 接收的参数相同,但 Object 替换为 Object->Bag,指针为 TYPEcast 到 PVOID。

请注意,调用 _KsEdit时,调用方必须保存与包关联的互斥体。 有关详细信息,请参阅 AVStream 中的 对象包 和互斥体。

要求

要求 价值
最低支持的客户端 Microsoft Windows XP 及更高版本的作系统以及 DirectX 8.0 及更高版本的 DirectX 版本中提供。
目标平台 普遍
标头 ks.h (包括 Ks.h)
Ks.lib
IRQL PASSIVE_LEVEL