IO_SESSION_STATE_NOTIFICATION 구조체(wdm.h)

IO_SESSION_STATE_NOTIFICATION 구조에는 드라이버가 세션 이벤트 알림을 수신하기 위해 등록할 때 커널 모드 드라이버가 IoRegisterContainerNotification 루틴에 제공하는 정보가 포함됩니다.

구문

typedef struct _IO_SESSION_STATE_NOTIFICATION {
  ULONG Size;
  ULONG Flags;
  PVOID IoObject;
  ULONG EventMask;
  PVOID Context;
} IO_SESSION_STATE_NOTIFICATION, *PIO_SESSION_STATE_NOTIFICATION;

멤버

Size

IO_SESSION_STATE_NOTIFICATION 구조체의 크기(바이트)입니다.

Flags

현재 이 멤버에 대해 정의된 플래그가 없습니다. 0으로 설정됩니다.

IoObject

드라이버가 소유한 I/O 개체에 대한 포인터입니다. 이 멤버는 DEVICE_OBJECT, DRIVER_OBJECT 또는 FILE_OBJECT 구조를 가리킬 수 있습니다. I/O 개체는 등록 수명 동안 유효한 상태를 유지해야 합니다. 등록된 디바이스 개체를 삭제하거나, 등록된 드라이버를 언로드하거나, 등록된 파일 개체를 닫기 전에 IoUnregisterContainerNotification 루틴을 호출하여 등록을 취소합니다. 드라이버는 둘 이상의 I/O 개체에 대해 동시 등록을 유지할 수 있지만 동일한 I/O 개체에 대해 둘 이상의 활성 등록을 만들 수는 없습니다.

EventMask

세션 이벤트에 대한 비트를 마스킹합니다. 이러한 마스크 비트는 드라이버가 알림을 요청하는 이벤트를 나타냅니다.

세션 이벤트의 알림을 수신하도록 등록하기 위해 커널 모드 드라이버는 IoRegisterContainerNotification 루틴을 호출합니다. 드라이버가 알림을 수신하려는 세션 이벤트를 지정하기 위해 드라이버는 이 구조체의 EventMask 멤버를 하나 이상의 IO_SESSION_STATE_XXX 상수의 비트 OR로 설정합니다.

이 멤버를 다음 IO_SESSION_STATE_XXX 상수 중 하나 이상의 비트 OR로 설정합니다.

의미
IO_SESSION_STATE_ALL_EVENTS
0xffffffff
모든 세션 이벤트의 알림을 보냅니다.
IO_SESSION_STATE_CREATION_EVENT
0x00000001
사용자 세션을 만들 때 알림을 보냅니다.
IO_SESSION_STATE_TERMINATION_EVENT
0x00000002
사용자 세션이 종료되면 알림을 보냅니다.
IO_SESSION_STATE_CONNECT_EVENT
0x00000004
사용자 세션이 연결되면 알림을 보냅니다.
IO_SESSION_STATE_DISCONNECT_EVENT
0x00000008
사용자 세션의 연결이 끊어지면 알림을 보냅니다.
IO_SESSION_STATE_LOGON_EVENT
0x00000010
사용자가 세션에 로그온할 때 알림을 보냅니다.
IO_SESSION_STATE_LOGOFF_EVENT
0x00000020
사용자가 세션에서 로그오프할 때 알림을 보냅니다.
IO_SESSION_STATE_VALID_EVENT_MASK
0x0000003f
모든 유형의 세션 이벤트가 발생할 때 알림을 보냅니다.

Context

드라이버가 특정 세션 알림 등록에 대한 프라이빗 데이터를 저장할 수 있는 컨텍스트 버퍼에 대한 포인터입니다. I/O 관리자는 이 포인터를 드라이버의 알림 콜백 루틴( IoRegisterContainerNotification 루틴의 CallbackFunction 매개 변수로 지정됨)에 전달합니다. I/O 관리자는 컨텍스트 포인터의 유효성을 검사하거나 가리키는 버퍼에 액세스하려고 하지 않습니다. 드라이버에 컨텍스트 버퍼가 필요하지 않은 경우 이 멤버는 NULL 일 수 있습니다.

설명

이 구조체는 IoRegisterContainerNotification 루틴에서 사용됩니다. IoRegisterContainerNotification을 호출하는 드라이버는 이 구조를 사용하여 등록할 세션 이벤트 알림을 지정합니다.

세션별 디바이스 개체는 특정 사용자 세션에서만 액세스할 수 있는 디바이스를 나타냅니다. 드라이버가 세션별 디바이스 개체인 디바이스 개체를 가리키도록 IoObject 멤버를 설정하는 경우 IoRegisterContainerNotification 은 디바이스 개체가 나타내는 세션에서 발생하는 이벤트에 대한 알림만 수신하도록 드라이버를 등록합니다. IoObject가 세션별 디바이스 개체가 아닌 디바이스 개체를 가리키거나 IoObject가 디바이스 개체가 아닌 개체를 가리키는 경우 IoRegisterContainerNotification은 컴퓨터의 모든 세션에서 발생하는 이벤트에 대한 알림을 받도록 드라이버를 등록합니다.

디바이스 개체가 세션별 디바이스 개체인지 여부를 확인하기 위해 드라이버는 IoGetDevicePropertyData 루틴을 호출하여 디바이스 개체의 속성 저장소에서 DEVPKEY_Device_SessionId 속성 키를 쿼리할 수 있습니다. DEVPKEY_Device_SessionId 속성이 있고 속성 값이 0이 아닌 Terminal Services 세션 식별자로 설정된 경우 디바이스 개체는 세션별 디바이스 개체입니다. 자세한 내용은 DEVPKEY_Device_SessionId 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 7 이상 버전의 Windows 운영 체제에서 지원됩니다.
머리글 wdm.h(Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h 포함)

추가 정보

DEVICE_OBJECT

DEVPKEY_Device_SessionId

DRIVER_OBJECT

FILE_OBJECT

IoGetDevicePropertyData

IoRegisterContainerNotification