Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Программа 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