IOCTL_MOUNTMGR_CHANGE_NOTIFY IOCTL (mountmgr.h)
每当装载管理器的持久符号链接名称数据库中发生更改时,客户端会将此 IOCTL 发送到装载管理器,以便收到通知。
装载管理器维护名为 EpicNumber 的计数器,该计数器记录自上次启动以来在其永久性名称数据库中发生的更改数。 客户端使用每个更改通知请求 IRP 向装载管理器发送一个号码,装载管理器将按以下方式进行响应:
如果客户端提供的数字不等于 EpicNumber,装载管理器将返回STATUS_SUCCESS,指示自客户端上次将其编号与装载管理器的 EpicNumber 进行比较以来发生了更改。
如果客户端提供的数字等于 EpicNumber,则装载管理器将此解释为请求,以通知永久性名称数据库的下一次更改,并将更改通知 IRP 排队并返回STATUS_PENDING。 每当数据库中发生更改时,装载管理器都会完成所有挂起的更改通知 IRP,从而通知客户端更改。
如果客户端只想收到特定卷的更改,建议注册即插即用目标设备通知并监视GUID_IO_VOLUME_NAME_CHANGE。
主要代码
输入缓冲区
装载管理器客户端在 Irp-AssociatedIrp.SystemBuffer> 的缓冲区开头初始化 MOUNTMGR_CHANGE_NOTIFY_INFO 结构。
输入缓冲区长度
IRP 的 I/O 堆栈位置中的 Parameters.DeviceIoControl.InputBufferLength 指示输入缓冲区的大小(以字节为单位),该大小必须大于或等于 sizeof(MOUNTMGR_CHANGE_NOTIFY_INFO)
。
输出缓冲区
装载管理器在 Irp-AssociatedIrp.SystemBuffer> 的缓冲区开头返回MOUNTMGR_CHANGE_NOTIFY_INFO结构中的当前 EpicNumber。
输出缓冲区长度
无。
输入/输出缓冲区
不可用
输入/输出缓冲区长度
不可用
状态块
如果操作成功,则 “状态” 字段设置为“STATUS_SUCCESS”,“ 信息” 字段设置为 sizeof(MOUNTMGR_CHANGE_NOTIFY_INFO)
。
如果 InputBufferLength 小于 sizeof(MOUNTMGR_CHANGE_NOTIFY_INFO)
或 OutputBufferLength 小于 sizeof(MOUNTMGR_CHANGE_NOTIFY_INFO)
,则 “状态” 字段设置为STATUS_INVALID_PARAMETER。
注解
有关详细信息,请参阅 支持存储类驱动程序中的装载管理器请求。
要求
要求 | 值 |
---|---|
Header | mountmgr.h (包括 Mountmgr.h) |