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


IOCTL_STORAGE_PERSISTENT_RESERVE_OUT IOCTL (ntddstor.h)

Универсальный драйвер класса хранения (classpnp.sys) предоставляет интерфейс управления вводом-выводом (IOCTL) для выдачи команд постоянного резервирования. Поведение запоминающего устройства при получении команды Persistent Reserve Out описано в спецификации основных команд SCSI — 2 (SPC-2). Интерфейс IOCTL требует, чтобы вызывающий объект получил доступ на чтение и запись к физическому устройству для команд постоянного резервирования. Приложения, службы и драйверы в режиме ядра в пользовательском режиме могут использовать этот IOCTL для управления постоянными резервированиями. При вызове из драйвера этот IOCTL должен вызываться из потока, работающего в IRQL < DISPATCH_LEVEL. Этот IOCTL определяется с помощью FILE_READ_ACCESS и FILE_WRITE_ACCESS, поэтому для выполнения команды Persistent Reserve Out дескриптор устройства должен иметь разрешения на чтение и запись.

Основной код

IRP_MJ_DEVICE_CONTROL

Входной буфер

Буфер в Irp-AssociatedIrp.SystemBuffer> содержит PERSISTENT_RESERVE_COMMAND структуру. Необходимо выделить буфер из непагрегированного пула и правильно выровнять его для целевого устройства и адаптера.

PR_OUT. ServiceAction может иметь один из следующих вариантов:

  • RESERVATION_ACTION_REGISTER
  • RESERVATION_ACTION_RESERVE
  • RESERVATION_ACTION_RELEASE
  • RESERVATION_ACTION_CLEAR
  • RESERVATION_ACTION_PREEMPT
  • RESERVATION_ACTION_PREEMPT_ABORT
  • RESERVATION_ACTION_REGISTER_IGNORE_EXISTING

PR_OUT. Область может быть одной из следующих:

  • RESERVATION_SCOPE_LU
  • RESERVATION_SCOPE_ELEMENT

PR_OUT. Тип может иметь один из следующих типов:

  • RESERVATION_TYPE_WRITE_EXCLUSIVE
  • RESERVATION_TYPE_EXCLUSIVE
  • RESERVATION_TYPE_WRITE_EXCLUSIVE_REGISTRANTS
  • RESERVATION_TYPE_EXCLUSIVE_REGISTRANTS

PR_OUT. ParameterList используется для хранения структуры PRO_PARAMETER_LIST . Эта структура является обязательной и должна быть смежна с остальной частью PERSISTENT_RESERVE_COMMAND структуры.

Длина входного буфера

Длина структуры PERSISTENT_RESERVE_COMMAND .

Выходной буфер

Нет.

Длина выходного буфера

Нет.

Блок состояния

Для поля Сведения задано значение ноль.

Для поля Состояние задано одно из следующих значений.

Значение Значение
STATUS_DEVICE_BUSY (ERROR_BUSY) Команда завершилась сбоем из-за конфликта резервирования (дополнительные сведения см. в спецификации основных команд SCSI — 2 (SPC-2).
STATUS_INFO_LENGTH_MISMATCH Длина входного буфера для IOCTL меньше размера sizeof(PERSISTENT_RESERVE_COMMAND) или размер, указанный в PERSISTENT_RESERVE_COMMAND структуре данных, меньше размера sizeof(PERSISTENT_RESERVE_COMMAND).
STATUS_INVALID_DEVICE_REQUEST (ERROR_INVALID_FUNCTION) Код элемента управления вводом-выводом (IOCTL_STORAGE_PERSISTENT_RESERVE_OUT) не поддерживается драйверами хранилища.
STATUS_INVALID_PARAMETER (ERROR_INVALID_PARAMETER) Структура входного буфера имеет неправильный размер или заполнение.
STATUS_INVALID_USER_BUFFER (ERROR_INVALID_USER_BUFFER) Входной буфер неправильно выровнен для устройства или адаптера. Это состояние может быть возвращено только в том случае, если драйвер отправляет IOCTL в стек хранилища. Это состояние не возвращается, когда приложение пользовательского режима отправляет IOCTL через API DeviceIoControl , так как диспетчер ввода-вывода автоматически выравнивает буферы.
STATUS_IO_DEVICE_ERROR (ERROR_IO_DEVICE) Устройство не поддерживает команду Persistent Reserve Out.
STATUS_SUCCESS Операция выполнена успешно.

Требования

Требование Значение
Заголовок ntddstor.h (включая Ntddstor.h)