IoCreateSynchronizationEvent 함수(wdm.h)
IoCreateSynchronizationEvent 루틴은 관련이 없는 두 드라이버 간에 하드웨어에 대한 액세스를 직렬화하는 데 사용할 명명된 동기화 이벤트를 만들거나 엽니다.
구문
PKEVENT IoCreateSynchronizationEvent(
[in] PUNICODE_STRING EventName,
[out] PHANDLE EventHandle
);
매개 변수
[in] EventName
이벤트의 이름을 지정하는 null로 끝나는 유니코드 문자열이 포함된 버퍼에 대한 포인터입니다.
[out] EventHandle
이벤트 개체에 대한 핸들을 반환할 위치에 대한 포인터입니다. Windows Server 2003 이상 버전의 Windows에서 반환된 핸들은 커널 핸들입니다.
반환 값
IoCreateSynchronizationEvent 는 이벤트 개체를 만들거나 열 수 없는 경우 생성되거나 열린 이벤트 개체 또는 NULL 에 대한 포인터를 반환합니다.
설명
이벤트 개체가 아직 없는 경우 만들어집니다. IoCreateSynchronizationEvent 는 새 동기화 이벤트의 상태를 Signaled로 설정합니다. 이벤트 개체가 이미 있는 경우 단순히 열립니다. 동기화 이벤트를 사용하는 드라이버 쌍은 이 루틴에서 반환된 PKEVENT 포인터를 사용하여 KeWaitForSingleObject 를 호출합니다.
동기화 이벤트가 Signaled 상태로 설정되면 이벤트를 기다리는 단일 실행 스레드가 해제되고 이벤트가 자동으로 Not-Signaled 상태로 다시 설정됩니다.
이벤트를 해제하기 위해 드라이버는 이벤트 핸들을 사용하여 ZwClose 를 호출합니다.
사용자 모드와 커널 모드 간에 이벤트 개체를 공유하려면 주의해야 합니다. 이벤트 개체를 공유하기 위한 두 가지 기본 메서드가 있습니다.
사용자 모드 애플리케이션은 이벤트 개체를 만들고 드라이버에 IOCTL을 전송하여 개체에 핸들을 드라이버에 전달합니다. 드라이버는 이벤트 개체를 만든 프로세스의 컨텍스트에서 IOCTL을 처리해야 하며 ObReferenceObjectByHandle을 호출하여 핸들의 유효성을 검사해야 합니다. 이 메서드는 사용자와 커널 모드 간에 이벤트 개체를 공유하는 데 권장되는 방법입니다.
드라이버는 전역
\BaseNamedObjects
개체 디렉터리에 명명된 이벤트 개체를 만듭니다. 사용자 모드에서 커널 모드 이벤트에 액세스하려면 이름Global\\
Xxx를 사용합니다. 보안 설정은 애플리케이션이 이벤트를 열지 못하게 할 수 있습니다. \BaseNamedObjects 개체 디렉터리는 Microsoft Win32 하위 시스템이 초기화될 때까지 만들어지지 않으므로 부팅 시 로드된 드라이버는 DriverEntry 루틴의 \BaseNamedObjects 디렉터리에 이벤트 개체를 만들 수 없습니다.
이벤트에 대한 자세한 내용은 이벤트 개체를 참조하세요.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000부터 사용할 수 있습니다. |
대상 플랫폼 | 유니버설 |
헤더 | wdm.h(Ntddk.h 포함) |
라이브러리 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI 규정 준수 규칙 | HwStorPortProhibitedDDIs(storport), IrqlIoPassive4(wdm), PowerIrpDDis(wdm) |