Функция 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, то используется для синхронизации доступа к списку. Это значение может иметь значение NULL , если в EventsFlags не установлен флаг.
[in, optional] Allocator
При необходимости указывает на функцию выделения, которая будет использоваться для выделения памяти для хранения параметров события.
[in, optional] EventItemSize
При необходимости содержит размер каждой структуры KSEVENT_ITEM в каждом списке событий. Элемент события может быть расширен для хранения личных сведений. Если этот параметр равен нулю, предполагается, что размер структуры является нормальным. Если он больше или равен структуре элемента события, KSEVENT_ITEM_IRP_STORAGE макрос можно использовать для возврата указателя на элемент события, чтобы можно было получить пользовательские данные. На 64-разрядных платформах этот параметр должен быть кратным 8.
Возвращаемое значение
То же, что и KsEnableEvent, который возвращает STATUS_SUCCESS в случае успешного выполнения, или ошибку, относяющуюся к включенному событию в случае сбоя. Функция всегда задает IO_STATUS_BLOCK. Информационное поле ПИРП. Элемент IoStatus в IRP равен нулю. Он не задает IO_STATUS_BLOCK. Поле состояния и не завершает IRP.
Комментарии
Если используется необязательный обратный вызов распределителя, фильтру может потребоваться освободить буфер каким-то нестандартным способом. Обратите внимание, что флаги IRP_BUFFERED_IO и IRP_DEALLOCATE_BUFFER не устанавливаются при использовании пользовательского распределителя.
Требования
Требование | Значение |
---|---|
Целевая платформа | Универсальное |
Верхняя часть | ks.h (включая Ks.h) |
Библиотека | Ks.lib |