Поделиться через


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 для ожидающих SSPB имеет значение 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