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
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) |