Функция 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