다음을 통해 공유


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)

추가 정보

IoCreateNotificationEvent

KeWaitForSingleObject

RtlInitUnicodeString

ZwClose