KsEnableEventWithAllocator 函数 (ks.h)
KsEnableEventWithAllocator 函数支持通过IOCTL_KS_ENABLE_EVENT请求的事件,但也允许使用可选的分配器回调为参数提供缓冲区。 它响应集定义的所有事件标识符。 只能在PASSIVE_LEVEL调用此函数。
如果使用,筛选器可能需要以某种非常规方式释放缓冲区。 请注意,使用自定义分配器时,不会设置IRP_BUFFERED_IO和IRP_DEALLOCATE_BUFFER标志。
语法
KSDDKAPI NTSTATUS KsEnableEventWithAllocator(
[in] PIRP Irp,
[in] ULONG EventSetsCount,
[in] const KSEVENT_SET *EventSet,
[in, out] PLIST_ENTRY EventsList,
[in, optional] KSEVENTS_LOCKTYPE EventsFlags,
[in, optional] PVOID EventsLock,
[in, optional] PFNKSALLOCATOR Allocator,
[in, optional] ULONG EventItemSize
);
参数
[in] Irp
指定正在处理的启用请求的 IRP。 与 IRP 关联的文件对象与 事件一起存储,以便在以后禁用事件时进行比较。
[in] EventSetsCount
指示传递的事件集结构的数量。
[in] EventSet
指定指向事件集信息列表的指针。
[in, out] EventsList
如果启用事件KSEVENT_SET。事件集的 AddHandler 为 NULL,它必须指向要添加事件的KSEVENT_ENTRY项列表的标题。 此函数假定至少一部分事件的单个列表。
[in, optional] EventsFlags
指定 KSEVENTS_LOCKTYPE 标志,指定在访问事件列表时要使用的排除锁类型(如果有)。 如果未设置标志,则不进行锁定。 如果已指定处理程序,则忽略此参数。
[in, optional] EventsLock
如果KSEVENT_SET。包含要启用的事件的事件集的 AddHandler 为 NULL,然后用于同步对列表的访问。 如果在 EventsFlags 中未设置任何标志,则此值可以为 NULL。
[in, optional] Allocator
(可选)指向将用于分配内存以存储事件参数的分配函数。
[in, optional] EventItemSize
(可选)包含每个事件列表中每个KSEVENT_ITEM结构的大小。 可以扩展事件项以存储私人信息。 如果此参数为零,则假定结构大小正常。 如果它大于或等于事件项结构,则可以使用 KSEVENT_ITEM_IRP_STORAGE 宏返回指向事件项的指针,以便可以检索自定义数据。 在 64 位平台上,此参数必须是 8 的倍数。
返回值
与 KsEnableEvent 相同,如果成功,则返回STATUS_SUCCESS;如果成功,则返回特定于要启用的事件的错误。 函数始终设置IO_STATUS_BLOCK。PIRP 的信息字段。IRP 中的 IoStatus 元素为零。 它不设置IO_STATUS_BLOCK。“状态”字段,也不会完成 IRP。
注解
如果使用可选的分配器回调,则筛选器可能需要以某种非常规方式释放缓冲区。 请注意,使用自定义分配器时,不会设置IRP_BUFFERED_IO和IRP_DEALLOCATE_BUFFER标志。
要求
要求 | 值 |
---|---|
目标平台 | 通用 |
标头 | ks.h (包括 Ks.h) |
Library | Ks.lib |