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 상태로 유지됩니다.
알림 이벤트에서 동기화하려면 다음을 수행합니다.
- IoCreateNotificationEvent를 사용하여 알림 이벤트를 엽니다. EventName 문자열을 사용하여 이벤트를 식별합니다.
- IoCreateNotificationEvent에서 반환된 PKEVENT를 사용하여 KeWaitForSingleObject를 호출하여 이벤트가 신호를 받을 때까지 기다립니다. 실행 스레드가 두 개 이상 지정된 알림 이벤트를 기다릴 수 있습니다. 중단 대신 폴링하려면 KeWaitForSingleObject에 시간 제한을 0으로 지정합니다.
- 이벤트에 더 이상 액세스할 필요가 없는 경우 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) |