Функция 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

Указатель на функцию обратного вызова, реализованную вызывающим (драйвером). Диспетчер ввода-вывода вызывает эту функцию, чтобы уведомить вызывающего объекта при возникновении события класса, указанного NotificationClass. Для NotificationClass = IoSessionStateNotificationэтот параметр является указателем на функцию, предоставляемую вызывающим IO_SESSION_NOTIFICATION_FUNCTION. Однако вызывающий объект должен привести этот указатель функции к типу PIO_CONTAINER_NOTIFICATION_FUNCTION, чтобы соответствовать типу параметра. Дополнительные сведения см. в следующем разделе "Примечания".

[in, optional] NotificationInformation

Указатель на выделенный вызывающим буфером, который содержит структуру сведений о уведомлении для события класса, указанного NotificationClass. Для NotificationClass = IoSessionStateNotificationNotificationInformation указывает на структуру IO_SESSION_STATE_NOTIFICATION. Вызывающий объект должен заполнить эту структуру перед вызовом IoRegisterContainerNotification. Во время этого вызова IoRegisterContainerNotification копирует данные из этой структуры, а диспетчер ввода-вывода не обращается к копии структуры драйвера после возврата вызова.

[in] NotificationInformationLength

Размер в байтах структуры сведений о уведомлениях, содержащейся в буфере, на который указывает NotificationInformation. Для NotificationClass = IoSessionStateNotificationзадайте для этого параметра значение sizeof(IO_SESSION_STATE_NOTIFICATION).

[out] CallbackRegistration

Указатель на расположение, в которое эта подпрограмма записывает адрес объекта регистрации уведомлений контейнера. Этот объект является непрозрачным системным объектом, в котором диспетчер ввода-вывода хранит сведения о регистрации уведомления контейнера вызывающего объекта. Если уведомления больше не требуются, вызывающий отменяет регистрацию путем передачи указателя этого объекта на подпрограмму IoUnregisterContainerNotification.

Возвращаемое значение

IoRegisterContainerNotification возвращает STATUS_SUCCESS, если вызов выполнен успешно. Возможные значения возвращаемых ошибок включают следующие значения:

Возвращаемый код Описание
STATUS_INVALID_PARAMETER_1 Параметр NotificationClass не является допустимой константой перечисления IO_CONTAINER_NOTIFICATION_CLASS.
STATUS_INVALID_PARAMETER_3 Сведения в структуре, на которую указывает NotificationInformation, неверны.
STATUS_INVALID_PARAMETER_4 Параметр NotificationInformationLength не равен размеру структуры сведений о уведомлении, необходимой для использования с указанным значением параметра NotificationClass NotificationClass.
STATUS_ALREADY_COMMITTED Драйвер уже зарегистрирован для получения NotificationClass уведомления о событиях, связанных с указанным объектом ввода-вывода.
STATUS_INSUFFICIENT_RESOURCES В операционной системе недостаточно ресурсов для создания запрошенной регистрации.

Замечания

Эта подпрограмма может поддерживать уведомления о событиях в различных классах событий. В Windows 7 эта подпрограмма поддерживает только уведомления IoSessionStateNotification, которые уведомляют драйвер режима ядра о изменениях состояния пользовательских сеансов, в которых заинтересован драйвер. Для приложений в пользовательском режиме функция WTSRegisterSessionNotification заполняет аналогичную роль.

Тип указателя функции для параметра CallbackFunction определяется следующим образом:

typedef NTSTATUS
  (*PIO_CONTAINER_NOTIFICATION_FUNCTION)(
    );

Вызывающий объект должен привести указатель функции обратного вызова к этому типу, чтобы он соответствовал типу параметра CallbackFunction. IoRegisterContainerNotification определяет фактический тип указателя функции обратного вызова из параметра NotificationClass. Для NotificationClass = IoSessionStateNotificationCallbackFunction указывает на функцию IO_SESSION_NOTIFICATION_FUNCTION.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Доступно в Windows 7 и более поздних версиях операционной системы Windows.
целевая платформа Всеобщий
заголовка wdm.h (include 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