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) |
참조
피드백
다음에 대한 사용자 의견 제출 및 보기