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 锁定设备的调用方使用 Irp->AssociatedIrp.SystemBuffer 再次发送IOCTL_STORAGE_EJECTION_CONTROL,从而解锁设备, 设置为 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。

要求

要求 价值
标头 ntddstor.h (包括 Ntddstor.h)

另请参阅

IOCTL_STORAGE_EJECT_MEDIA