Функция IoCreateNotificationEvent (wdm.h)

Подпрограмма IoCreateNotificationEvent создает или открывает именованное событие уведомления, используемое для уведомления одного или нескольких потоков о выполнении события.

Синтаксис

PKEVENT IoCreateNotificationEvent(
  [in]  PUNICODE_STRING EventName,
  [out] PHANDLE         EventHandle
);

Параметры

[in] EventName

Указатель на буфер, содержащий строку Юникода, завершающуюся null, которая называет событие.

[out] EventHandle

Указатель на расположение, в котором возвращается дескриптор ядра для объекта события.

Возвращаемое значение

IoCreateNotificationEvent возвращает указатель на созданный или открытый объект события или значение NULL , если объект события не удалось создать или открыть.

Комментарии

Если объект события еще не существует, IoCreateNotificationEvent создает и открывает его и устанавливает для него состояние Signaled.

Если объект события уже существует, IoCreateNotificationEvent просто открывает объект события.

Для координации выполнения используются как события уведомлений, так и события синхронизации. Однако во время сброса события синхронизации событие уведомления остается в состоянии Signaled до тех пор, пока драйвер не вызовет KeClearEvent или KeResetEvent.

Чтобы синхронизировать событие уведомления, выполните приведенные далее действия.

  1. Откройте событие уведомления с помощью IoCreateNotificationEvent. Определите событие с помощью строки EventName .
  2. Дождитесь передачи сигнала о событии путем вызова KeWaitForSingleObject с PKEVENT, возвращенным IoCreateNotificationEvent. Несколько потоков выполнения могут ждать заданного события уведомления. Чтобы опросить вместо остановок, укажите для параметра Timeout нулевое значение KeWaitForSingleObject.
  3. Закройте дескриптор события уведомления с помощью ZwClose , если доступ к событию больше не нужен.

Существует два main метода совместного использования объектов событий:

  • Приложение пользовательского режима создает объект события и передает дескриптор к объекту драйверу, отправляя драйверу IOCTL. Драйвер должен обрабатывать IOCTL в контексте процесса, создавшего объект события, и должен проверить дескриптор, вызвав ObReferenceObjectByHandle. Этот метод рекомендуется использовать для совместного использования объектов событий в пользовательском режиме и режиме ядра.

  • Драйвер создает именованный объект события в глобальном \BaseNamedObjects каталоге объектов. Чтобы получить доступ к событию режима ядра из пользовательского режима, используйте имя Global\\Xxx. Обратите внимание, что параметры безопасности могут препятствовать открытию события приложением. Каталог \\BaseNamedObjects объектов не создается до тех пор, пока подсистема Microsoft Win32 не инициализируется, поэтому драйверы, загруженные во время загрузки, не могут создавать объекты событий в каталоге \\BaseNamedObjects в подпрограммах DriverEntry .

Дополнительные сведения о событиях см. в разделе Объекты событий.

Требования

Требование Значение
Минимальная версия клиента Доступно начиная с Windows 2000.
Целевая платформа Универсальное
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Правила соответствия DDI HwStorPortProhibitedDIs(storport), IrqlIoPassive4(wdm)

См. также раздел

IoCreateSynchronizationEvent

KeClearEvent

KeResetEvent

KeSetEvent

KeWaitForSingleObject

RtlInitUnicodeString

ZwClose