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

指向驱动程序拥有的 I/O 对象的指针。 此成员可以指向 DEVICE_OBJECTDRIVER_OBJECTFILE_OBJECT 结构。 I/O 对象必须在注册的生存期内保持有效。 在删除已注册的设备对象、卸载已注册的驱动程序或关闭已注册的文件对象之前,请调用 IoUnregisterContainerNotification 例程来取消注册。 驱动程序可以同时维护多个 I/O 对象的注册,但它不能为同一 I/O 对象创建多个活动注册。

EventMask

会话事件的掩码位。 这些掩码位指示驱动程序请求通知的事件。

若要注册以接收会话事件的通知,内核模式驱动程序调用 IoRegisterContainerNotification 例程。 若要指定驱动程序要接收通知的会话事件,驱动程序将此结构的 EventMask 成员设置为一个或多个 IO_SESSION_STATE_XXX 常量的按位 OR。

将此成员设置为以下一个或多个 IO_SESSION_STATE_XXX 常量按位 OR:

含义
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

指向上下文缓冲区的指针,驱动程序可在其中存储特定会话通知注册的专用数据。 I/O 管理器将此指针传递到由 IoRegisterContainerNotification 例程的 CallbackFunction 参数) 指定的驱动程序通知回调例程 (。 I/O 管理器不会尝试验证 上下文 指针或访问它指向的缓冲区。 如果驱动程序不需要上下文缓冲区,则此成员可以为 NULL

注解

IoRegisterContainerNotification 例程使用此结构。 调用 IoRegisterContainerNotification 的驱动程序使用此结构指定要注册的会话事件通知。

每会话设备对象表示只能由特定用户会话访问的设备。 如果驱动程序将 IoObject 成员设置为指向作为每个会话的设备对象的设备对象, IoRegisterContainerNotification 会将驱动程序注册为仅接收设备对象表示的会话中发生的事件的通知。 如果 IoObject 指向不是每个会话的设备对象,或者 IoObject 指向不是设备对象的对象, IoRegisterContainerNotification 将注册驱动程序以接收计算机上所有会话中发生的事件的通知。

若要确定设备对象是否是每个会话的设备对象,驱动程序可以调用 IoGetDevicePropertyData 例程来查询设备对象的属性存储中的 DEVPKEY_Device_SessionId 属性键。 如果 存在 DEVPKEY_Device_SessionId 属性,并且属性的值设置为非零 终端服务 会话标识符,则设备对象是每个会话的设备对象。 有关详细信息,请参阅 DEVPKEY_Device_SessionId

要求

要求
最低受支持的客户端 在 Windows 操作系统的 Windows 7 及更高版本中受支持。
标头 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h、Fltkernel.h)

另请参阅

DEVICE_OBJECT

DEVPKEY_Device_SessionId

DRIVER_OBJECT

FILE_OBJECT

IoGetDevicePropertyData

IoRegisterContainerNotification