IOCTL_STORAGE_BREAK_RESERVATION IOCTL (ntddstor.h)
Разрыв резервирования дисков. В системе с несколькими инициаторами ("кластеризованными") один компьютер может зарезервировать ресурс диска, чтобы другой компьютер не смог получить доступ к диску. Если компьютер не освобождает ресурс своевременно, необходимо удалить резервирование диска принудительно.
Одним из способов принудительного освобождения зарезервированного ресурса диска является сброс шины. На самом деле для устройств хранения, адаптеры шины которых управляются драйвером портов SCSI, запрос IOCTL_STORAGE_BREAK_RESERVATION эквивалентен IOCTL_STORAGE_RESET_BUS, что просто сбрасывает шину, освобождая все зарезервированные ресурсы.
Для устройств хранения, адаптеры шины которых управляются драйвером порта STOR, этот код управления ввода-вывода предлагает лучший способ нарушения резервирования дисков. Этот метод называется "иерархическим сбросом". При получении запроса IOCTL_STORAGE_BREAK_RESERVATION драйвер порта STOR сначала пытается удалить резерв в логическом модуле, сбросив сам логический блок. В случае сбоя драйвер порта STOR пытается сбросить целевое устройство, которое является родительским элементом логического блока. Только при сбросе целевого устройства драйвер порта сбрасывает шину.
Сброс шины очищает все резервирования устройств и параметры скорости передачи, которые затем необходимо пересмотреть. Так как это трудоемкая операция, IOCTL_STORAGE_BREAK_RESERVATION всегда предпочтительнее простого сброса шины.
Вызывающий объект требует только доступ на чтение для сброса шины.
Для флага SrbStatus ожидающих SRB задано значение 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.
Требования
Требование | Ценность |
---|---|
заголовка | ntddstor.h (include Ntddstor.h) |