IoRegisterContainerNotification 함수(wdm.h)

IoRegisterContainerNotification 루틴은 커널 모드 드라이버를 등록하여 지정된 이벤트 클래스에 대한 알림을 받습니다.

구문

NTSTATUS
IoRegisterContainerNotification(
    _In_ IO_CONTAINER_NOTIFICATION_CLASS NotificationClass,
    _In_ PIO_CONTAINER_NOTIFICATION_FUNCTION CallbackFunction,
    _In_reads_bytes_opt_(NotificationInformationLength) PVOID NotificationInformation,
    _In_ ULONG NotificationInformationLength,
    _Out_ PVOID * CallbackRegistration
    );

매개 변수

[in] NotificationClass

호출자(드라이버)가 알림을 요청하는 이벤트의 클래스를 지정합니다. 이 매개 변수를 다음 IO_CONTAINER_NOTIFICATION_CLASS 열거형 값으로 설정합니다.

  • IoSessionStateNotification

자세한 내용은 아래 설명 부분을 참조하십시오.

[in] CallbackFunction

호출자(드라이버)가 구현하는 콜백 함수에 대한 포인터입니다. I/O 관리자는 NotificationClass 로 표시된 클래스의 이벤트가 발생할 때 호출자에게 알리기 위해 이 함수를 호출합니다. NotificationClass = IoSessionStateNotification의 경우 이 매개 변수는 호출자가 제공한 IO_SESSION_NOTIFICATION_FUNCTION 함수에 대한 포인터입니다. 그러나 호출자는 매개 변수 형식과 일치하도록 이 함수 포인터를 형식 PIO_CONTAINER_NOTIFICATION_FUNCTION 캐스팅해야 합니다. 자세한 내용은 아래 설명 부분을 참조하십시오.

[in, optional] NotificationInformation

NotificationClass에 지정된 클래스의 이벤트에 대한 알림 정보 구조를 포함하는 호출자가 할당한 버퍼에 대한 포인터입니다. NotificationClass = IoSessionStateNotification의 경우 NotificationInformationIO_SESSION_STATE_NOTIFICATION 구조를 가리킵니다. 호출자는 IoRegisterContainerNotification을 호출하기 전에 이 구조를 작성해야 합니다. 이 호출 중에 IoRegisterContainerNotification 은 이 구조체의 데이터를 복사하며, I/O 관리자는 호출이 반환된 후 드라이버의 구조체 복사본에 액세스하지 않습니다.

[in] NotificationInformationLength

NotificationInformation에서 가리키는 버퍼에 포함된 알림 정보 구조의 크기(바이트)입니다. NotificationClass = IoSessionStateNotification의 경우 이 매개 변수를 sizeof(IO_SESSION_STATE_NOTIFICATION)로 설정합니다.

[out] CallbackRegistration

이 루틴이 컨테이너 알림 등록 개체의 주소를 쓰는 위치에 대한 포인터입니다. 이 개체는 I/O 관리자가 호출자의 컨테이너 알림 등록에 대한 정보를 저장하는 불투명한 시스템 개체입니다. 알림이 더 이상 필요하지 않으면 호출자는 이 개체 포인터를 IoUnregisterContainerNotification 루틴에 전달하여 등록을 취소합니다.

반환 값

IoRegisterContainerNotification 은 호출이 성공하면 STATUS_SUCCESS 반환합니다. 가능한 오류 반환 값은 다음과 같습니다.

반환 코드 설명
STATUS_INVALID_PARAMETER_1 매개 변수 NotificationClass 는 유효한 IO_CONTAINER_NOTIFICATION_CLASS 열거형 상수가 아닙니다.
STATUS_INVALID_PARAMETER_3 NotificationInformation에서 가리키는 구조체의 정보가 잘못되었습니다.
STATUS_INVALID_PARAMETER_4 매개 변수 NotificationInformationLength 는 지정된 NotificationClass 매개 변수 값과 함께 사용하는 데 필요한 알림 정보 구조의 크기와 같지 않습니다.
STATUS_ALREADY_COMMITTED 지정된 I/O 개체와 연결된 이벤트의 NotificationClass 알림을 수신하도록 드라이버가 이미 등록되어 있습니다.
STATUS_INSUFFICIENT_RESOURCES 운영 체제에 요청된 등록을 만들 리소스가 부족합니다.

설명

이 루틴은 잠재적으로 다양한 이벤트 클래스의 이벤트 알림을 지원할 수 있습니다. Windows 7에서 이 루틴은 커널 모드 드라이버에 드라이버가 관심이 있는 사용자 세션의 상태 변경 내용을 알리는 IoSessionStateNotification 알림만 지원합니다. 사용자 모드 애플리케이션의 경우 WTSRegisterSessionNotification 함수가 비슷한 역할을 채웁니다.

CallbackFunction 매개 변수에 대한 함수 포인터 형식은 다음과 같이 정의됩니다.

typedef NTSTATUS
  (*PIO_CONTAINER_NOTIFICATION_FUNCTION)(
    );

호출자는 CallbackFunction 매개 변수 형식과 일치하도록 콜백 함수 포인터를 이 형식으로 캐스팅해야 합니다. IoRegisterContainerNotificationNotificationClass 매개 변수에서 콜백 함수 포인터의 실제 형식을 결정합니다. NotificationClass = IoSessionStateNotification의 경우 CallbackFunction은IO_SESSION_NOTIFICATION_FUNCTION 함수를 가리킵니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 7 이상 버전의 Windows 운영 체제에서 사용할 수 있습니다.
대상 플랫폼 유니버설
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

추가 정보

IO_CONTAINER_NOTIFICATION_CLASS

IO_SESSION_NOTIFICATION_FUNCTION

IO_SESSION_STATE_NOTIFICATION

IoUnregisterContainerNotification

WTSRegisterSessionNotification