다음을 통해 공유


IoCreateNotificationEvent 함수(wdm.h)

IoCreateNotificationEvent 루틴은 이벤트가 발생했음을 하나 이상의 실행 스레드에 알리는 데 사용되는 명명된 알림 이벤트를 만들거나 엽니다.

구문

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

매개 변수

[in] EventName

이벤트의 이름을 지정하는 null로 끝나는 유니코드 문자열이 포함된 버퍼에 대한 포인터입니다.

[out] EventHandle

이벤트 개체에 대한 커널 핸들을 반환할 위치에 대한 포인터입니다.

반환 값

IoCreateNotificationEvent 는 이벤트 개체를 만들거나 열 수 없는 경우 생성되거나 열린 이벤트 개체 또는 NULL 에 대한 포인터를 반환합니다.

설명

이벤트 개체가 아직 없는 경우 IoCreateNotificationEvent 는 이벤트 개체를 만들어 열고 상태를 Signaled로 설정합니다.

이벤트 개체가 이미 있는 경우 IoCreateNotificationEvent 는 이벤트 개체만 엽니다.

알림 이벤트와 동기화 이벤트는 모두 실행을 조정하는 데 사용됩니다. 그러나 동기화 이벤트 자체를 다시 설정하는 동안 드라이버가 KeClearEvent 또는 KeResetEvent를 호출할 때까지 알림 이벤트는 Signaled 상태로 유지됩니다.

알림 이벤트에서 동기화하려면 다음을 수행합니다.

  1. IoCreateNotificationEvent를 사용하여 알림 이벤트를 엽니다. EventName 문자열을 사용하여 이벤트를 식별합니다.
  2. IoCreateNotificationEvent에서 반환된 PKEVENT를 사용하여 KeWaitForSingleObject를 호출하여 이벤트가 신호를 받을 때까지 기다립니다. 실행 스레드가 두 개 이상 지정된 알림 이벤트를 기다릴 수 있습니다. 중단 대신 폴링하려면 KeWaitForSingleObject에 시간 제한을 0으로 지정합니다.
  3. 이벤트에 더 이상 액세스할 필요가 없는 경우 ZwClose 를 사용하여 알림 이벤트에 대한 핸들을 닫습니다.

이벤트 개체를 공유하기 위한 두 가지 기본 메서드가 있습니다.

  • 사용자 모드 애플리케이션은 이벤트 개체를 만들고 드라이버에 IOCTL을 전송하여 개체에 핸들을 드라이버에 전달합니다. 드라이버는 이벤트 개체를 만든 프로세스의 컨텍스트에서 IOCTL을 처리해야 하며 ObReferenceObjectByHandle을 호출하여 핸들의 유효성을 검사해야 합니다. 이 메서드는 사용자와 커널 모드 간에 이벤트 개체를 공유하는 데 권장되는 방법입니다.

  • 드라이버는 전역 \BaseNamedObjects 개체 디렉터리에 명명된 이벤트 개체를 만듭니다. 사용자 모드에서 커널 모드 이벤트에 액세스하려면 이름 Global\\Xxx를 사용합니다. 보안 설정은 애플리케이션이 이벤트를 열지 못하게 할 수 있습니다. \\BaseNamedObjects 개체 디렉터리는 Microsoft Win32 하위 시스템이 초기화될 때까지 만들어지지 않으므로 부팅 시 로드된 드라이버는 DriverEntry 루틴의 \\BaseNamedObjects 디렉터리에 이벤트 개체를 만들 수 없습니다.

이벤트에 대한 자세한 내용은 이벤트 개체를 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000부터 사용할 수 있습니다.
대상 플랫폼 유니버설
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 규정 준수 규칙 HwStorPortProhibitedDDIs(storport), IrqlIoPassive4(wdm)

추가 정보

IoCreateSynchronizationEvent

KeClearEvent

KeResetEvent

KeSetEvent

KeWaitForSingleObject

RtlInitUnicodeString

ZwClose