_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

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

[in, out] PointerToPointerToItem

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

[in] NewSize

要为项分配的字节数。

[in] OldSize

项当前占用的字节数。

[in] Tag

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

返回值

返回成功或STATUS_INSUFFICIENT_RESOURCES。

注解

请注意, KsEditKsEditSized 是为了使 _KsEdit 更易于使用的宏而创建的。 虽然 _KsEdit 允许调整项的大小,但 KsEdit 不允许。 宏 KsEdit 调用 _KsEdit,将 size of (** PointerToPointerToItem) 指定为这两个大小。

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

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

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

KsEditSized 调用_KsEdit其接收的参数相同,不同之处在于 ObjectObject-Bag> 替换,并且指针的类型转换到 PVOID。

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

要求

要求
最低受支持的客户端 在 Microsoft Windows XP 及更高版本的操作系统以及 DirectX 8.0 及更高版本的 DirectX 中可用。
目标平台 通用
标头 ks.h (包括 Ks.h)
Library Ks.lib
IRQL PASSIVE_LEVEL