Поделиться через


функция обратного вызова IO_SESSION_NOTIFICATION_FUNCTION (wdm.h)

Тип функции IO_SESSION_NOTIFICATION_FUNCTION определяет подпрограмму обратного вызова, с помощью которой драйвер получает уведомления об изменениях в состоянии сеансов пользователей, интересующихся драйвером.

Синтаксис

IO_SESSION_NOTIFICATION_FUNCTION IoSessionNotificationFunction;

NTSTATUS IoSessionNotificationFunction(
  [in] PVOID SessionObject,
  [in] PVOID IoObject,
  [in] ULONG Event,
  [in] PVOID Context,
  [in] PVOID NotificationPayload,
  [in] ULONG PayloadLength
)
{...}

Параметры

[in] SessionObject

Указатель на непрозрачный системный объект, содержащий сведения о сеансе пользователя. Драйвер может передать это значение указателя в подпрограмму IoGetContainerInformation в качестве значения параметра ContainerObject.

[in] IoObject

Указатель на объект ввода-вывода, принадлежащий драйверу. Этот параметр является указателем объекта ввода-вывода, который драйвер предоставил IoRegisterContainerNotification подпрограмме, когда драйвер ранее зарегистрирован для получения уведомлений о событиях сеанса. Параметр IoRegisterContainerNotificationNotificationInformation указывает на структуру IO_SESSION_STATE_NOTIFICATION, член IoObject указывает на объект ввода-вывода.

[in] Event

Константой перечисления IO_SESSION_EVENT, указывающей, какое событие сеанса вызвало обратный вызов уведомления.

[in] Context

Значение контекста, которое драйвер ранее предоставил IoRegisterContainerNotification подпрограмме при регистрации драйвера для получения уведомлений о событиях сеанса. В вызове IoRegisterContainerNotification драйвер предоставил указатель на структуру IO_SESSION_STATE_NOTIFICATION, элемент Context содержит значение контекста.

[in] NotificationPayload

Указатель на буфер полезных данных, содержащий структуру IO_SESSION_CONNECT_INFO.

[in] PayloadLength

Размер буфера в байтах, на который указывает NotificationPayload. Размер буфера никогда не должен превышать константное значение IO_SESSION_MAX_PAYLOAD_SIZE, которое определено в файле заголовка Wdm.h.

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

Если подпрограмма успешно выполнена, она должна вернуться STATUS_SUCCESS. В противном случае он должен вернуть одно из значений состояния ошибки, определенных в файле заголовка Ntstatus.h.

Замечания

Драйвер режима ядра реализует эту подпрограмму. Диспетчер ввода-вывода вызывает эту подпрограмму, чтобы уведомить драйвер событий сеанса.

Чтобы получать уведомления о событиях сеанса, драйвер вызывает подпрограмму IoRegisterContainerNotification и задает параметр callbackFunction этой подпрограммы, чтобы указать на IO_SESSION_NOTIFICATION_FUNCTION подпрограмму драйвера. Объект ввода-вывода, который драйвер передает IoRegisterContainerNotification определяет, будет ли драйвер получать уведомления о событиях в определенном сеансе пользователя или событиях во всех сеансах. Дополнительные сведения см. в IO_SESSION_STATE_NOTIFICATION.

Примеры

Чтобы определить подпрограмму уведомлений сеанса ввода-вывода, необходимо сначала указать объявление функции, определяющее тип определяемой процедуры обратного вызова. Windows предоставляет набор типов функций обратного вызова для драйверов. Объявление функции с помощью типов функций обратного вызова помогает анализ кода для драйверов, статический проверяющий драйвер (SDV) и другие средства проверки подлинности, и это требование для написания драйверов для операционной системы Windows.

Например, чтобы определить подпрограмму уведомлений сеанса ввода-вывода с именем MyIoSessionNotification, используйте тип IO_SESSION_NOTIFICATION_FUNCTION, как показано в этом примере кода:

IO_SESSION_NOTIFICATION_FUNCTION MyIoSessionNotification;

Затем реализуйте подпрограмму обратного вызова следующим образом:

_Use_decl_annotations_
NTSTATUS
  MyIoSessionNotification(
    PVOID  SessionObject,
    PVOID  IoObject,
    ULONG  Event,
    PVOID  Context,
    PVOID  NotificationPayload,
    ULONG  PayloadLength
    )
  {
      // Function body
  }

Тип функции IO_SESSION_NOTIFICATION_FUNCTION определен в файле заголовка Wdm.h. Чтобы более точно определить ошибки при запуске средств анализа кода, обязательно добавьте в определение функции _Use_decl_annotations_ заметку. Заметка _Use_decl_annotations_ гарантирует, что используются заметки, применяемые к типу функции IO_SESSION_NOTIFICATION_FUNCTION в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в объявлении функций с помощью типов ролей функций для драйверов WDM. Сведения о _Use_decl_annotations_см. в поведению функции.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Поддерживается в Windows 7 и более поздних версиях операционной системы Windows.
целевая платформа Настольный
заголовка wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h)
IRQL Вызывается в IRQL <= APC_LEVEL.

См. также

IO_SESSION_CONNECT_INFO

IO_SESSION_EVENT

IO_SESSION_STATE_NOTIFICATION

IoGetContainerInformation

IoRegisterContainerNotification