IOCTL_STORAGE_BREAK_RESERVATION IOCTL (ntddstor.h)

中断磁盘预留。 在多发起程序(“clustered”)系统中,单个计算机可以保留磁盘资源,以便其他计算机无法访问该磁盘。 如果计算机没有或无法及时释放资源,则需要强制删除磁盘的预留。

强制系统释放预留磁盘资源的一种方法是重置总线。 事实上,对于总线适配器由 SCSI 端口驱动程序管理的存储设备,IOCTL_STORAGE_BREAK_RESERVATION请求等效于 IOCTL_STORAGE_RESET_BUS,后者只需重置总线,即可释放其所有保留资源。

对于总线适配器由 STOR 端口驱动程序管理的存储设备,此 I/O 控制代码提供了破坏磁盘预留的更好技术。 该技术称为“分层重置”。收到IOCTL_STORAGE_BREAK_RESERVATION请求后,STOR 端口驱动程序首先尝试通过重置逻辑单元本身来删除逻辑单元上的保留。 如果失败,STOR 端口驱动程序将尝试重置逻辑单元的父级的目标设备。 只有在重置目标设备失败时,端口驱动程序才会重置总线。

重置总线会清除所有设备预留和传输速度设置,然后必须重新协商这些设置。 由于这是一项耗时的作,因此IOCTL_STORAGE_BREAK_RESERVATION始终优先于简单的总线重置。

调用方只需要读取访问权限才能发出总线重置。

挂起 SBS 的 SrbStatus 标志设置为SRB_STATUS_BUS_RESET。

主要代码

IRP_MJ_DEVICE_CONTROL

输入缓冲区

Irp->AssociatedIrp.SystemBuffer 的缓冲区包含用于标识要重置的总线的 STORAGE_BREAK_RESERVATION_REQUEST 结构。

输入缓冲区长度

STORAGE_BREAK_RESERVATION_REQUEST 结构的长度。

输出缓冲区

没有。

输出缓冲区长度

没有。

状态块

信息 字段设置为零。 状态 字段设置为STATUS_SUCCESS,或者可能设置为STATUS_INSUFFICIENT_RESOURCES、STATUS_NOT_IMPLEMENTED或STATUS_INVALID_DEVICE_REQUEST。

要求

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

另请参阅

IOCTL_STORAGE_RESET_BUS

STORAGE_BREAK_RESERVATION_REQUEST