IO_SESSION_NOTIFICATION_FUNCTION 콜백 함수(wdm.h)

IO_SESSION_NOTIFICATION_FUNCTION 함수 형식은 드라이버가 관심 있는 사용자 세션의 상태 변경 알림을 받는 콜백 루틴을 정의합니다.

구문

IO_SESSION_NOTIFICATION_FUNCTION IoSessionNotificationFunction;

NTSTATUS IoSessionNotificationFunction(
  [in] PVOID SessionObject,
  [in] PVOID IoObject,
  [in] ULONG Event,
  [in] PVOID Context,
  [in] PVOID NotificationPayload,
  [in] ULONG PayloadLength
)
{...}

매개 변수

[in] SessionObject

사용자 세션에 대한 정보를 포함하는 불투명 시스템 개체에 대한 포인터입니다. 드라이버는 이 포인터 값을 ContainerObject 매개 변수 값으로 IoGetContainerInformation 루틴에 전달할 수 있습니다.

[in] IoObject

드라이버가 소유한 I/O 개체에 대한 포인터입니다. 이 매개 변수는 드라이버가 이전에 세션 이벤트의 알림을 수신하도록 등록했을 때 드라이버가 IoRegisterContainerNotification 루틴에 제공한 I/O 개체 포인터입니다. IoRegisterContainerNotification 루틴의 NotificationInformation 매개 변수는 IoObject 멤버가 I/O 개체를 가리키는 IO_SESSION_STATE_NOTIFICATION 구조를 가리킵니다.

[in] Event

알림 콜백을 발생시킨 세션 이벤트를 나타내는 IO_SESSION_EVENT 열거형 상수입니다.

[in] Context

드라이버가 세션 이벤트의 알림을 수신하도록 등록했을 때 드라이버가 이전에 IoRegisterContainerNotification 루틴에 제공한 컨텍스트 값입니다. IoRegisterContainerNotification 호출에서 드라이버는 컨텍스트 멤버에 컨텍스트 값이 포함된 IO_SESSION_STATE_NOTIFICATION 구조체에 대한 포인터를 제공했습니다.

[in] NotificationPayload

IO_SESSION_CONNECT_INFO 구조를 포함하는 페이로드 버퍼에 대한 포인터입니다.

[in] PayloadLength

NotificationPayload가 가리키는 버퍼의 크기(바이트)입니다. 버퍼 크기는 Wdm.h 헤더 파일에 정의된 상수 값 IO_SESSION_MAX_PAYLOAD_SIZE 초과할 필요가 없습니다.

반환 값

루틴이 성공하면 STATUS_SUCCESS 반환해야 합니다. 그렇지 않으면 Ntstatus.h 헤더 파일에 정의된 오류 상태 값 중 하나를 반환해야 합니다.

설명

커널 모드 드라이버는 이 루틴을 구현합니다. I/O 관리자는 이 루틴을 호출하여 드라이버에게 세션 이벤트를 알립니다.

세션 이벤트의 알림을 받기 위해 드라이버는 IoRegisterContainerNotification 루틴을 호출하고 이 루틴의 CallbackFunction 매개 변수를 드라이버의 IO_SESSION_NOTIFICATION_FUNCTION 루틴을 가리키도록 설정합니다. 드라이버가 IoRegisterContainerNotification 에 전달하는 I/O 개체는 드라이버가 특정 사용자 세션 또는 모든 세션의 이벤트에 대한 알림을 받을지 여부를 결정합니다. 자세한 내용은 IO_SESSION_STATE_NOTIFICATION 참조하세요.

예제

I/O 세션 알림 루틴을 정의하려면 먼저 정의하려는 콜백 루틴의 유형을 식별하는 함수 선언을 제공해야 합니다. Windows는 드라이버에 대한 콜백 함수 형식 집합을 제공합니다. 콜백 함수 형식을 사용하여 함수를 선언하면 드라이버에 대한 코드 분석, SDV( 정적 드라이버 검증 도구 ) 및 기타 확인 도구에서 오류를 찾을 수 있으며 Windows 운영 체제용 드라이버를 작성하기 위한 요구 사항입니다.

예를 들어 이름이 지정된 MyIoSessionNotificationI/O 세션 알림 루틴을 정의하려면 이 코드 예제와 같이 IO_SESSION_NOTIFICATION_FUNCTION 형식을 사용합니다.

IO_SESSION_NOTIFICATION_FUNCTION MyIoSessionNotification;

그런 다음 다음과 같이 콜백 루틴을 구현합니다.

_Use_decl_annotations_
NTSTATUS
  MyIoSessionNotification(
    PVOID  SessionObject,
    PVOID  IoObject,
    ULONG  Event,
    PVOID  Context,
    PVOID  NotificationPayload,
    ULONG  PayloadLength
    )
  {
      // Function body
  }

IO_SESSION_NOTIFICATION_FUNCTION 함수 형식은 Wdm.h 헤더 파일에 정의됩니다. 코드 분석 도구를 실행할 때 오류를 보다 정확하게 식별하려면 함수 정의에 Use_decl_annotations 주석을 추가해야 합니다. Use_decl_annotations 주석을 사용하면 헤더 파일의 IO_SESSION_NOTIFICATION_FUNCTION 함수 형식에 적용되는 주석이 사용됩니다. 함수 선언에 대한 요구 사항에 대한 자세한 내용은 WDM 드라이버에 함수 역할 형식을 사용하여 함수 선언을 참조하세요. Use_decl_annotations 대한 자세한 내용은 함수 동작에 주석을 추가하세요.

요구 사항

   
지원되는 최소 클라이언트 Windows 운영 체제의 Windows 7 이상 버전에서 지원됩니다.
대상 플랫폼 데스크톱
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h 포함)
IRQL IRQL <= APC_LEVEL 호출합니다.

참고 항목

IO_SESSION_CONNECT_INFO

IO_SESSION_EVENT

IO_SESSION_STATE_NOTIFICATION

IoGetContainerInformation

IoRegisterContainerNotification