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,而不是简单的总线重置。
调用方只需要读取访问权限即可发出总线重置。
挂起 SRB 的 SrbStatus 标志设置为 SRB_STATUS_BUS_RESET。
主要代码
输入缓冲区
Irp-AssociatedIrp.SystemBuffer> 中的缓冲区包含标识要重置的总线的STORAGE_BREAK_RESERVATION_REQUEST结构。
输入缓冲区长度
STORAGE_BREAK_RESERVATION_REQUEST 结构的长度。
输出缓冲区
无。
输出缓冲区长度
无。
状态块
“ 信息” 字段设置为零。 “状态”字段设置为STATUS_SUCCESS,或者可能设置为STATUS_INSUFFICIENT_RESOURCES、STATUS_NOT_IMPLEMENTED或STATUS_INVALID_DEVICE_REQUEST。
要求
要求 | 值 |
---|---|
Header | ntddstor.h (包括 Ntddstor.h) |