Функция 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 . |
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 (включая Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h) |
Библиотека | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
См. также раздел
IO_CONTAINER_NOTIFICATION_CLASS
IO_SESSION_NOTIFICATION_FUNCTION