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경우 NotificationInformation IO_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경우 CallbackFunctionIO_SESSION_NOTIFICATION_FUNCTION 함수를 가리킵니다.
요구 사항
| 요구 | 값 |
|---|---|
| 지원되는 최소 클라이언트 | Windows 운영 체제의 Windows 7 이상 버전에서 사용할 수 있습니다. |
| 대상 플랫폼 | 보편적 |
| 헤더 | 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