Compartir a través de


IOCTL_STORAGE_PERSISTENT_RESERVE_OUT IOCTL (ntddstor.h)

El controlador de clase de almacenamiento genérico (classpnp.sys) expone una interfaz de control de E/S (IOCTL) para emitir comandos de reserva persistente. El comportamiento del dispositivo de almacenamiento cuando se recibe un comando de reserva persistente se describe en la especificación SCSI Primary Commands - 2 (SPC-2). La interfaz IOCTL requiere que el autor de la llamada tenga acceso de lectura y escritura al dispositivo físico para los comandos De reserva persistente. Las aplicaciones en modo de usuario, los servicios y los controladores en modo kernel pueden usar este IOCTL para controlar las reservas persistentes. Si se llama desde un controlador, se debe llamar a este IOCTL desde un subproceso que se ejecuta en IRQL < DISPATCH_LEVEL. Este IOCTL se define con FILE_READ_ACCESS y FILE_WRITE_ACCESS, lo que requiere que un identificador de dispositivo tenga permisos de lectura y escritura para emitir el comando De reserva persistente.

Código principal

IRP_MJ_DEVICE_CONTROL

Búfer de entrada

El búfer de Irp-AssociatedIrp.SystemBuffer> contiene una estructura de PERSISTENT_RESERVE_COMMAND. Debe asignar el búfer del grupo no paginado y debe alinearlo correctamente para el dispositivo de destino y el adaptador.

PR_OUT. ServiceAction puede ser uno de los siguientes:

  • 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. El ámbito puede ser uno de los siguientes:

  • RESERVATION_SCOPE_LU
  • RESERVATION_SCOPE_ELEMENT

PR_OUT. El tipo puede ser uno de los siguientes:

  • RESERVATION_TYPE_WRITE_EXCLUSIVE
  • RESERVATION_TYPE_EXCLUSIVE
  • RESERVATION_TYPE_WRITE_EXCLUSIVE_REGISTRANTS
  • RESERVATION_TYPE_EXCLUSIVE_REGISTRANTS

PR_OUT. ParameterList se usa para contener la estructura PRO_PARAMETER_LIST . Esta estructura es necesaria y debe ser contigua con el resto de la estructura PERSISTENT_RESERVE_COMMAND .

Longitud del búfer de entrada

Longitud de una estructura de PERSISTENT_RESERVE_COMMAND .

Búfer de salida

Ninguno.

Longitud del búfer de salida

Ninguno.

Bloque de estado

El campo Información se establece en cero.

El campo Estado se establece en uno de los valores siguientes.

Valor Significado
STATUS_DEVICE_BUSY (ERROR_BUSY) Error en el comando debido a un conflicto de reserva (para obtener más información, consulte la especificación 2 (SPC-2) de comandos principales SCSI).
STATUS_INFO_LENGTH_MISMATCH La longitud del búfer de entrada para el IOCTL es menor que sizeof(PERSISTENT_RESERVE_COMMAND) o el tamaño especificado en la estructura de datos de PERSISTENT_RESERVE_COMMAND es menor que sizeof(PERSISTENT_RESERVE_COMMAND).
STATUS_INVALID_DEVICE_REQUEST (ERROR_INVALID_FUNCTION) El código de control de E/S (IOCTL_STORAGE_PERSISTENT_RESERVE_OUT) no es compatible con los controladores de almacenamiento.
STATUS_INVALID_PARAMETER (ERROR_INVALID_PARAMETER) La estructura del búfer de entrada tiene un tamaño incorrecto o se rellena.
STATUS_INVALID_USER_BUFFER (ERROR_INVALID_USER_BUFFER) El búfer de entrada no está alineado correctamente para el dispositivo o el adaptador. Este estado solo se puede devolver cuando un controlador envía un IOCTL a la pila de almacenamiento. Este estado no se devuelve cuando una aplicación en modo de usuario envía el IOCTL a través de la API DeviceIoControl , ya que el Administrador de E/S alinea automáticamente los búferes.
STATUS_IO_DEVICE_ERROR (ERROR_IO_DEVICE) El dispositivo no admite el comando De reserva persistente.
STATUS_SUCCESS La operación se realizó correctamente.

Requisitos

Requisito Valor
Header ntddstor.h (incluya Ntddstor.h)