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 호출합니다. |