다음을 통해 공유


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 호출에서 드라이버는 Context 멤버에 컨텍스트 값이 포함된 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 운영 체제용 드라이버를 작성하기 위한 요구 사항입니다.

예를 들어 MyIoSessionNotification이름이 지정된 I/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 7 이상 버전의 Windows 운영 체제에서 지원됩니다.
대상 플랫폼 바탕 화면
헤더 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