IOCTL_STORAGE_EJECTION_CONTROL IOCTL (ntddstor.h)

锁定设备以防止移除介质。 如果驱动程序可以在使用驱动器时阻止移除介质,则驱动程序将禁用或启用弹出介质的机制,从而锁定驱动器。 调用方必须使用FILE_READ_ATTRIBUTES打开设备才能发送此请求。

IOCTL_STORAGE_MEDIA_REMOVAL不同,驱动程序跟踪调用方 IOCTL_STORAGE_EJECTION_CONTROL 请求,并忽略未收到来自同一调用方锁定请求的解锁请求,从而阻止其他调用方解锁驱动器。

可移动媒体设备的驱动程序 - 可支持此 IOCTL 必须执行以下操作:

  1. 在设备对象扩展中保留由调用方标记的锁计数。
  2. 保留每个物理设备的锁计数。
  3. 使用此 IOCTL 调用时,如果设置了阻止删除介质的标志,则递增计数;如果标志是清除的,并且驱动程序以前收到了来自同一调用方的锁定请求,则递减计数。
  4. 除非所有锁计数均为零,否则阻止移除介质。
在正常情况下,使用 IOCTL_STORAGE_EJECTION_CONTROL 锁定设备的调用方通过再次发送IOCTL_STORAGE_EJECTION_CONTROL来解锁设备,并将 Irp->AssociatedIrp.SystemBuffer 设置为 FALSE 的布尔值。 但是,有时调用方无法正确解锁设备。

为了确保正确释放媒体删除锁,类驱动程序会跟踪使用IOCTL_STORAGE_EJECTION_CONTROL锁定媒体的调用方。 如果调用方在未解锁设备的情况下终止,则类驱动程序将解锁设备。

主要代码

IRP_MJ_DEVICE_CONTROL

输入缓冲区

Irp-AssociatedIrp.SystemBuffer> 处的缓冲区包含一个布尔值,其值为 TRUE,指示驱动程序应锁定驱动器中的媒体。

输入缓冲区长度

布尔值的长度。

输出缓冲区

无。

输出缓冲区长度

无。

状态块

信息” 字段设置为零。 “ 状态” 字段设置为STATUS_SUCCESS,或者可能设置为STATUS_INVALID_DEVICE_REQUEST、STATUS_NO_MEDIA_IN_DEVICE或STATUS_DEVICE_NOT_CONNECTED。

要求

要求
Header ntddstor.h (包括 Ntddstor.h)

另请参阅

IOCTL_STORAGE_EJECT_MEDIA