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


структура IO_SESSION_STATE_NOTIFICATION (wdm.h)

Структура IO_SESSION_STATE_NOTIFICATION содержит сведения, которые драйвер в режиме ядра предоставляет подпрограмме IoRegisterContainerNotification , когда драйвер регистрируется для получения уведомлений о событиях сеанса.

Синтаксис

typedef struct _IO_SESSION_STATE_NOTIFICATION {
  ULONG Size;
  ULONG Flags;
  PVOID IoObject;
  ULONG EventMask;
  PVOID Context;
} IO_SESSION_STATE_NOTIFICATION, *PIO_SESSION_STATE_NOTIFICATION;

Члены

Size

Размер структуры IO_SESSION_STATE_NOTIFICATION в байтах.

Flags

В настоящее время для этого элемента не определены флаги. Задайте нулевое значение.

IoObject

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

EventMask

Маскирование битов для событий сеанса. Эти биты маски указывают на события, для которых драйвер запрашивает уведомления.

Чтобы зарегистрироваться для получения уведомлений о событиях сеанса, драйвер в режиме ядра вызывает подпрограмму IoRegisterContainerNotification . Чтобы указать события сеанса, для которых драйвер хочет получать уведомления, драйвер задает элемент EventMask этой структуры в побитовое ИЛИ одной или нескольких констант IO_SESSION_STATE_XXX .

Задайте для этого элемента побитовое ИЛИ одной или нескольких из следующих констант IO_SESSION_STATE_XXX :

Значение Значение
IO_SESSION_STATE_ALL_EVENTS
0xffffffff
Отправлять уведомления обо всех событиях сеанса.
IO_SESSION_STATE_CREATION_EVENT
0x00000001
Отправка уведомления при создании сеанса пользователя.
IO_SESSION_STATE_TERMINATION_EVENT
0x00000002
Отправка уведомления по завершении сеанса пользователя.
IO_SESSION_STATE_CONNECT_EVENT
0x00000004
Отправка уведомления при подключении сеанса пользователя.
IO_SESSION_STATE_DISCONNECT_EVENT
0x00000008
Отправка уведомления при отключении сеанса пользователя.
IO_SESSION_STATE_LOGON_EVENT
0x00000010
Отправка уведомления при входе пользователя в сеанс.
IO_SESSION_STATE_LOGOFF_EVENT
0x00000020
Отправка уведомления при выходе пользователя из сеанса.
IO_SESSION_STATE_VALID_EVENT_MASK
0x0000003f
Отправка уведомления при возникновении любого типа события сеанса.

Context

Указатель на буфер контекста, в котором драйвер может хранить свои личные данные для регистрации уведомления определенного сеанса. Диспетчер ввода-вывода передает этот указатель в подпрограмму обратного вызова уведомлений драйвера (задается параметром CallbackFunction процедуры IoRegisterContainerNotification). Диспетчер ввода-вывода не пытается проверить указатель контекста или получить доступ к буферу, на который он указывает. Этот элемент может иметь значение NULL , если драйверу не требуется буфер контекста.

Комментарии

Эта структура используется подпрограммой IoRegisterContainerNotification . Драйвер, вызывающий IoRegisterContainerNotification , использует эту структуру для указания уведомлений о событиях сеанса, для регистрации.

Объект устройства для каждого сеанса представляет устройство, доступ к которому может получить только определенный сеанс пользователя. Если драйвер задает элемент IoObject , указывающий на объект устройства, который является объектом устройства для каждого сеанса, IoRegisterContainerNotification регистрирует драйвер для получения только уведомлений о событиях, происходящих в сеансе, представленном объектом устройства. Если IoObject указывает на объект устройства, который не является объектом устройства для каждого сеанса, или ioObject указывает на объект, который не является объектом устройства, IoRegisterContainerNotification регистрирует драйвер для получения уведомлений о событиях, происходящих во всех сеансах на компьютере.

Чтобы определить, является ли объект устройства объектом устройства для каждого сеанса, драйвер может вызвать подпрограмму IoGetDevicePropertyData для запроса ключа свойства DEVPKEY_Device_SessionId в хранилище свойств объекта устройства. Если свойство DEVPKEY_Device_SessionId существует и для свойства задано значение ненулевого идентификатора сеанса служб терминалов , то объект устройства является объектом устройства для каждого сеанса. Дополнительные сведения см. в разделе DEVPKEY_Device_SessionId.

Требования

Требование Значение
Минимальная версия клиента Поддерживается в Windows 7 и более поздних версиях операционной системы Windows.
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h, Fltkernel.h)

См. также раздел

DEVICE_OBJECT

DEVPKEY_Device_SessionId

DRIVER_OBJECT

FILE_OBJECT

IoGetDevicePropertyData

IoRegisterContainerNotification