IOCTL_STORAGE_PERSISTENT_RESERVE_IN 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 en. 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 al dispositivo físico para los comandos Reserva persistente en. 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, lo que requiere que un identificador de dispositivo tenga permisos de lectura para emitir el comando Reserva persistente en.
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_IN. ServiceAction puede ser uno de los siguientes:
- RESERVATION_ACTION_READ_KEYS
- RESERVATION_ACTION_READ_RESERVATIONS
PR_IN. La longitud de asignación es el tamaño (en bytes) del búfer asignado para la lista de parámetros devueltos.
Longitud del búfer de entrada
Longitud del búfer de entrada, en bytes.
Búfer de salida
Por PR_IN. ServiceAction = RESERVATION_ACTION_READ_KEYS, el búfer de salida contiene una estructura de PRI_REGISTRATION_LIST y debe tener al menos sizeof(PRI_REGISTRATION_LIST).
Por PR_IN. ServiceAction = RESERVATION_ACTION_READ_RESERVATIONS, el búfer de salida contiene una estructura de PRI_RESERVATION_LIST y debe tener al menos sizeof(PRI_RESERVATION_LIST).
Si el búfer asignado es demasiado pequeño para devolver todos los datos de reserva persistente, se devolverá correctamente y se devolverá el tamaño necesario en el campo AdditionalLength de la lista de parámetros.
Longitud del búfer de salida
Longitud del búfer de salida, en bytes.
Bloque de estado
El campo Información se establece en el tamaño del búfer de salida. Para ServiceAction = RESERVATION_ACTION_READ_KEYS, el búfer de salida es una estructura de PRI_REGISTRATION_LIST . Para ServiceAction = RESERVATION_ACTION_READ_RESERVATIONS, el búfer de salida es una estructura PRI_REGISTRATION_LIST .
El campo Estado se establece en uno de los siguientes:
Valor | Significado |
---|---|
STATUS_BUFFER_OVERFLOW (ERROR_MORE_DATA) | El búfer de salida es demasiado pequeño para contener la reserva persistente en los datos. El campo AdditionalLength del búfer de salida contendrá el tamaño de los datos que se devolverán. |
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 SCSI Primary Commands - 2 (SPC-2)**). |
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_IN) 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 o salida 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 devolverá cuando una aplicación en modo de usuario envíe 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 Reserva persistente en. |
STATUS_SUCCESS | La operación se realizó correctamente. |
Requisitos
Requisito | Valor |
---|---|
Header | ntddstor.h (incluya Ntddstor.h) |