estructura de STORAGE_REQUEST_BLOCK (storport.h)
El STORAGE_REQUEST_BLOCK es la estructura de bloque de solicitud SCSI (SRB) de formato extendido. La estructura proporciona la adición de datos extendidos asociados a una función SRB.
Nota
Los modelos de controlador de puerto SCSI y controlador de minipuerto SCSI pueden modificarse o no estar disponibles en el futuro. En su lugar, se recomienda usar los modelos del controlador Storport y del controlador storport miniport .
Sintaxis
typedef struct _STORAGE_REQUEST_BLOCK {
USHORT Length;
UCHAR Function;
UCHAR SrbStatus;
ULONG ReservedUlong1;
ULONG Signature;
ULONG Version;
ULONG SrbLength;
ULONG SrbFunction;
ULONG SrbFlags;
ULONG ReservedUlong2;
ULONG RequestTag;
USHORT RequestPriority;
USHORT RequestAttribute;
ULONG TimeOutValue;
union {
ULONG SystemStatus;
ULONG RequestTagHigh4Bytes;
} DUMMYUNIONNAME;
ULONG SystemStatus;
ULONG ZeroGuard1;
ULONG AddressOffset;
ULONG NumSrbExData;
ULONG DataTransferLength;
PVOID POINTER_ALIGN DataBuffer;
PVOID POINTER_ALIGN ZeroGuard2;
PVOID POINTER_ALIGN OriginalRequest;
PVOID POINTER_ALIGN ClassContext;
PVOID POINTER_ALIGN PortContext;
PVOID POINTER_ALIGN MiniportContext;
_STORAGE_REQUEST_BLOCK POINTER_ALIGN *NextSrb;
struct _STORAGE_REQUEST_BLOCK;
ULONG SrbExDataOffset[ANYSIZE_ARRAY];
} STORAGE_REQUEST_BLOCK, *PSTORAGE_REQUEST_BLOCK;
Miembros
Length
Especifica el tamaño del encabezado SRB para que sea compatible con la estructura SCSI_REQUEST_BLOCK . Esto es igual al desplazamiento del miembro Signature de esta estructura.
Function
Establézcalo en SRB_FUNCTION_STORAGE_REQUEST_BLOCK para indicar que se trata de una SRB extendida. A diferencia de en SCSI_REQUEST_BLOCK, el identificador de la función SRB está en el miembro SrbFunction en su lugar.
SrbStatus
Devuelve el estado de la solicitud completada. El controlador de minipuerto debe establecer este miembro antes de que notifique al controlador específico del sistema operativo que la solicitud ha completado llamando a StorPortNotification con RequestComplete. El valor de este miembro puede ser uno de los siguientes:
Valor | Significado |
---|---|
SRB_STATUS_PENDING | Indica que la solicitud está en curso. El controlador de puerto específico del sistema operativo inicializa SrbStatus en este valor. |
SRB_STATUS_SUCCESS | Indica que la solicitud se completó correctamente. |
SRB_STATUS_ABORTED | Indica que la solicitud se anuló según lo indicado por el controlador de puerto. Un controlador de minipuerto establece este estado en el miembro NextSrb para una solicitud de SRB_FUNCTION_ABORT_COMMAND correcta. |
SRB_STATUS_ABORT_FAILED | Indica un intento de anular la solicitud con errores. Devuelve este estado para una solicitud de SRB_FUNCTION_ABORT_COMMAND cuando no se puede encontrar la solicitud especificada. |
SRB_STATUS_ERROR | Indica que la solicitud se completó con un error en el estado del bus SCSI. |
SRB_STATUS_BUSY | Indica que el controlador de minipuerto o el dispositivo de destino no pudieron aceptar la solicitud en este momento. El controlador de puerto específico del sistema operativo volverá a enviar la solicitud más adelante. |
SRB_STATUS_INTERNAL_ERROR | Indica que el controlador storport no pudo entregar la solicitud al controlador de miniport o al dispositivo de destino. En tales casos, el estado se registra en InternalStatus. |
SRB_STATUS_INVALID_REQUEST | Indica que el controlador de minipuerto no admite la solicitud especificada. |
SRB_STATUS_NO_DEVICE | Indica que el dispositivo no respondió. |
SRB_STATUS_TIMEOUT | Indica que se agota el tiempo de espera de la solicitud. |
SRB_STATUS_SELECTION_TIMEOUT | Indica que se agota el tiempo de espera de la selección del dispositivo SCSI. |
SRB_STATUS_COMMAND_TIMEOUT | Indica que el destino no completó el comando dentro del límite de tiempo. |
SRB_STATUS_MESSAGE_REJECTED | Indica que el destino rechazó un mensaje. Normalmente, esto solo se devuelve para estas solicitudes de tipo de mensaje como SRB_FUNCTION_TERMINATE_IO. |
SRB_STATUS_BUS_RESET | Indica que se ha producido un restablecimiento de bus mientras se ejecuta esta solicitud. |
SRB_STATUS_PARITY_ERROR | Indica un error de paridad en el bus SCSI y que se produjo un error de reintento. |
SRB_STATUS_REQUEST_SENSE_FAILED | Indica que se produjo un error en el comando request-sense. Esto solo se devuelve si el adaptador de bus host (HBA) realiza la detección de solicitudes automáticas y el controlador de miniporte establece AutoRequestSense en TRUE en el PORT_CONFIGURATION_INFORMATION para este HBA. |
SRB_STATUS_NO_HBA | Indica que el HBA no responde. |
SRB_STATUS_DATA_OVERRUN | Indica que se ha producido un error de saturación de datos o de ejecución insuficiente. El controlador de minipuerto también debe actualizar el miembro DataTransferLength del SRB para indicar la cantidad de datos que se transfirieron realmente si se produce una ejecución inferior. |
SRB_STATUS_UNEXPECTED_BUS_FREE | Indica el destino desconectado inesperadamente. |
SRB_STATUS_PHASE_SEQUENCE_FAILURE | Indica que el HBA detectó un error de secuencia de fase no válido. |
SRB_STATUS_REQUEST_FLUSHED | Indica que se ha detenido la solicitud de estado. |
SRB_STATUS_BAD_FUNCTION | Indica que no se admite el código de la función SRB. |
SRB_STATUS_INVALID_PATH_ID | Indica que el pathId especificado en la SRB no existe. |
SRB_STATUS_INVALID_TARGET_ID | Indica que el valor targetID de la SRB no es válido. |
SRB_STATUS_INVALID_LUN | Indica que el valor de Lun en la SRB no es válido. |
SRB_STATUS_ERROR_RECOVERY | Indica que la solicitud se completó con un error en el estado del bus SCSI y que se recibió el mensaje SCSI INITIATE RECOVERY. |
SRB_STATUS_AUTOSENSE_VALID | Indica que la información devuelta en SenseInfoBuffer es válida. |
SRB_STATUS_QUEUE_FROZEN | Un controlador de minipuerto nunca debe establecer el miembro SrbStatus en este valor. El controlador de puerto de Windows puede establecer este valor para informar a un controlador de clase de almacenamiento de que se ha inmovilizado su cola de solicitudes para un periférico determinado. |
SRB_STATUS_NOT_POWERED | Indica que se produjo un error en la solicitud porque el destino no está encendido. En el caso de las solicitudes con SRB_FLAGS_NO_KEEP_AWAKE establecidas en SrbFlags, las solicitudes enviadas a LUN que están apagadas producirán un error con este estado. |
SRB_STATUS_LINK_DOWN | Indica que se produjo un error en la solicitud porque el vínculo está inactivo. |
SRB_STATUS_BAD_SRB_BLOCK_LENGTH | Indica que se produjo un error en la solicitud porque la longitud de SRB no era válida. |
ReservedUlong1
Reservado. Establecer en 0.
Signature
Firma del formato SRB extendido. Se establece en SRB_SIGNATURE.
Version
Versión de la estructura usada. La versión actual es STORAGE_REQUEST_BLOCK_VERSION_1.
SrbLength
Longitud de esta SRB extendida, en bytes, incluida esta estructura, dirección y cualquier dato extendido de SRB.
SrbFunction
Especifica la operación que se va a realizar, que puede ser uno de estos valores:
Valor | Significado |
---|---|
SRB_FUNCTION_EXECUTE_SCSI (0x00) | Se debe ejecutar una solicitud de E/S de dispositivo SCSI en la unidad lógica de destino. Cuando NumSrbExData> 0, una o varias de las siguientes estructuras de bloques de solicitud extendidas se encuentran en los desplazamientos especificados en SrbExDataOffset: SRBEX_DATA_SCSI_CDB16, SRBEX_DATA_SCSI_CDB32, SRBEX_DATA_SCSI_CDB_VAR, SRBEX_DATA_BIDIRECTIONAL, SRBEX_DATA_IO_INFO |
SRB_FUNCTION_IO_CONTROL (0x02) | La solicitud es una solicitud de control de E/S, que se origina en una aplicación en modo de usuario con un HBA dedicado. SRB DataBuffer apunta a un encabezado SRB_IO_CONTROL seguido del área de datos. El controlador puede usar el valor de DataBuffer , independientemente del valor de MapBuffers. Solo los miembros SRB Function, SrbFlags, TimeOutValue, DataBuffer y DataTransferLength son válidos, junto con el miembro SrbExtension si el controlador de miniporte solicitó extensiones SRB cuando se inicializó. Si un controlador de minipuerto controla un HBA dedicado a la aplicación para que admita esta solicitud, el controlador de miniporte debe ejecutar la solicitud y notificar al controlador de puerto específico del sistema operativo cuando se haya completado el SRB, mediante el mecanismo normal de llamadas a StorPortNotification con RequestComplete y NextRequest. |
SRB_FUNCTION_RECEIVE_EVENT (0x03) | El HBA debe estar preparado para recibir una notificación de eventos asincrónica del destino direcciondo. El miembro SRB DataBuffer indica dónde deben colocarse los datos. NOTA: Storport no envía esta función al miniport. |
SRB_FUNCTION_SHUTDOWN (0x07) | El sistema se está apagando. Un controlador de minipuerto puede recibir varias de estas notificaciones antes de que toda la actividad del sistema se detenga realmente. Sin embargo, la última notificación de apagado se producirá después de la última E/S de inicio. Los datos extendidos de SRB no son necesarios para esta función. |
SRB_FUNCTION_FLUSH (0x08) | El controlador de minipuerto debe vaciar los datos almacenados en caché para el dispositivo de destino. Esta solicitud se envía al controlador de minipuerto solo si establece CachesData en TRUE en el PORT_CONFIGURATION_INFORMATION para el HBA. Los datos extendidos de SRB no son necesarios para esta función. |
SRB_FUNCTION_ABORT_COMMAND (0x10) | Se debe enviar un mensaje SCSIMESS_ABORT para cancelar la solicitud a la que apunta el miembro NextSrb . Si se trata de una solicitud de cola etiquetada, se debe usar un mensaje de SCSIMESS_ABORT_WITH_TAG en su lugar. Si se ha completado la solicitud indicada, esta solicitud debe completarse normalmente. Los datos extendidos de SRB no son necesarios para esta función. NOTA: Storport no envía esta función al miniport. |
SRB_FUNCTION_RELEASE_RECOVERY (0x11) | Se debe enviar un mensaje SCSIMESS_RELEASE_RECOVERY al controlador de destino. Los datos extendidos de SRB no son necesarios para esta función. NOTA: Storport no envía esta función al miniport. |
SRB_FUNCTION_RESET_BUS (0x12) | El bus SCSI debe restablecerse con el mensaje SCSIMESS_BUS_DEVICE_RESET. Un controlador de minipuerto recibe esta solicitud solo si una solicitud determinada ha agotado el tiempo de espera y una solicitud posterior para anular la solicitud de tiempo de espera también ha agotado el tiempo de espera. Los datos extendidos de SRB no son necesarios para esta función. |
SRB_FUNCTION_TERMINATE_IO (0x14) | Se debe enviar un mensaje SCSIMESS_TERMINATE_IO_PROCESS para cancelar la solicitud a la que apunta el miembro NextSrb . Si la solicitud indicada ya se ha completado, esta solicitud debe completarse normalmente. Los datos extendidos de SRB no son necesarios para esta función. NOTA: Storport no envía esta función al miniport. |
SRB_FUNCTION_RESET_DEVICE (0x16) | El controlador de destino SCSI debe restablecerse con el mensaje SCSIMESS_BUS_DEVICE_RESET. El controlador de minipuerto debe completar las solicitudes activas para el controlador de destino. Los datos extendidos de SRB no son necesarios para esta función. |
SRB_FUNCTION_WMI (0x17) | La solicitud es una solicitud extendida de energía con formato de estructura SRBEX_DATA_WMI . El desplazamiento a los datos de solicitud extendida se encuentra en SrbExDataOffset[0]. |
SRB_FUNCTION_LOCK_QUEUE (0x18) | Contiene las solicitudes que pone en cola el controlador de puerto para una unidad lógica determinada, normalmente mientras se procesa una solicitud de alimentación. Solo los miembros SRB Length, Function, SrbFlags y OriginalRequest son válidos. Cuando la cola está bloqueada, solo se procesarán las solicitudes con SrbFlags ORed con SRB_FLAGS_BYPASS_LOCKED_QUEUE . Los controladores de minipuerto SCSI no procesan SRB_FUNCTION_LOCK_QUEUE solicitudes. |
SRB_FUNCTION_UNLOCK_QUEUE (0x19) | Libera la cola del controlador de puerto para una unidad lógica bloqueada previamente con SRB_FUNCTION_LOCK_QUEUE. Los SrbFlags de la solicitud de desbloqueo deben ser ORed con SRB_FLAGS_BYPASS_LOCKED_QUEUE. Solo los miembros SRB Length, Function, SrbFlags y OriginalRequest son válidos. Los controladores de miniporte SCSI no procesan SRB_FUNCTION_UNLOCK_QUEUE solicitudes. |
SRB_FUNCTION_QUIESCE_DEVICE (0x1A) | La solicitud solo está entre una clase de almacenamiento y un controlador de puerto de almacenamiento y no se envía a miniport. Esta función actúa como espera por parte del controlador de clase para que el controlador de puerto complete todas las E/S pendientes. |
SRB_FUNCTION_RESET_LOGICAL_UNIT (0x20) | La unidad lógica debe restablecerse, si es posible. El controlador de minipuerto HBA debe completar las solicitudes activas de la unidad lógica. Los datos extendidos de SRB no son necesarios para esta función. Storport admite este tipo de restablecimiento, pero el puerto SCSI no. |
SRB_FUNCTION_POWER (0x24) | La solicitud es una solicitud extendida de energía con formato de estructura SRBEX_DATA_POWER . El desplazamiento a los datos de solicitud extendida se encuentra en SrbExDataOffset[0]. |
SRB_FUNCTION_PNP (0x25) | La solicitud es una solicitud extendida de PnP con formato de estructura SRBEX_DATA_PNP . El desplazamiento a los datos de solicitud extendida se encuentra en SrbExDataOffset[0]. |
SRB_FUNCTION_DUMP_POINTERS (0x26) | Una solicitud con esta función se envía a un controlador de miniport storport que se usa para controlar el disco que contiene los datos del volcado de memoria. La solicitud recopila información necesaria del controlador de minipuerto para admitir el volcado de memoria y la hibernación. Consulte la estructura de MINIPORT_DUMP_POINTERS . Un controlador de minipuerto físico debe establecer la marca de STOR_FEATURE_DUMP_POINTERS en el miembro FeatureSupport de su HW_INITIALIZATION_DATA para recibir una solicitud con esta función. |
SRB_FUNCTION_FREE_DUMP_POINTERS (0x27) | Una solicitud con esta función se envía a un controlador de miniport de Storport para liberar los recursos asignados durante una solicitud anterior para SRB_FUNCTION_DUMP_POINTERS. |
SrbFlags
Indica varios parámetros y opciones para la solicitud. SrbFlags es de solo lectura, excepto cuando se establece SRB_FLAGS_UNSPECIFIED_DIRECTION y se requieren controladores de miniporte de adaptadores DMA subordinados para actualizar SRB_FLAGS_DATA_IN o SRB_FLAGS_DATA_OUT. Este miembro puede tener uno o varios de estos indicadores establecidos.
Marca | Significado |
---|---|
SRB_FLAGS_QUEUE_ACTION_ENABLE | Indica que se habilitarán las acciones de la cola etiquetada. |
SRB_FLAGS_DISABLE_AUTOSENSE | Indica que no se debe devolver información de sentido de solicitud. |
SRB_FLAGS_DATA_IN | Indica que los datos se transferirán desde el dispositivo al sistema. |
SRB_FLAGS_DATA_OUT | Indica que los datos se transferirán desde el sistema al dispositivo. |
SRB_FLAGS_UNSPECIFIED_DIRECTION | Si se define para la compatibilidad con versiones anteriores con las interfaces SCSI de ASPI/CAM, esta marca indica que la dirección de transferencia podría ser cualquiera de las anteriores, ya que se establecen ambas marcas anteriores. Si se establece esta marca, un controlador de minipuerto debe determinar la dirección de transferencia examinando la fase de datos del destino en el bus SCSI. |
SRB_FLAGS_NO_DATA_TRANSFER | Indica que no hay transferencia de datos con esta solicitud. Si se establece, las marcas SRB_FLAGS_DATA_OUT, SRB_FLAGS_DATA_IN y SRB_FLAGS_UNSPECIFIED_DIRECTION están claras. |
SRB_FLAGS_DISABLE_SYNCH_TRANSFER | Indica el HBA, si es posible, que debe realizar E/S asincrónica para esta solicitud de transferencia. Si la E/S sincrónica se negoció anteriormente, el HBA debe renegociar para la E/S asincrónica antes de realizar la transferencia. |
SRB_FLAGS_DISABLE_DISCONNECT | Indica que el HBA no debe permitir que el destino se desconecte del bus SCSI durante el procesamiento de esta solicitud. |
SRB_FLAGS_BYPASS_FROZEN_QUEUE | Esta marca es irrelevante para los conductores de minipuerto. |
SRB_FLAGS_NO_QUEUE_FREEZE | Esta marca es irrelevante para los conductores de minipuerto. |
SRB_FLAGS_IS_ACTIVE | Esta marca es irrelevante para los conductores de minipuerto. |
SRB_FLAGS_ALLOCATED_FROM_ZONE | Esta marca es irrelevante para los controladores de miniporte y está obsoleta para los nuevos controladores de clase de Windows. En un controlador de clase heredado de Windows, esto indica si el SRB se asignó desde un búfer de zona. Si se establece esta marca, el controlador de clase debe llamar a ExInterlockedFreeToZone para liberar el SRB; de lo contrario, debe llamar a ExFreePool. Los controladores de clase nuevos deben usar listas de búsqueda en lugar de búferes de zona. |
SRB_FLAGS_SGLIST_FROM_POOL | Esta marca es irrelevante para los conductores de minipuerto. Para el controlador de clase, esto indica que la memoria de una lista de dispersión y recopilación se asignó desde un grupo no paginado. Si se establece esta marca, el controlador de clase debe llamar a ExFreePool para liberar la memoria una vez completada la SRB. |
SRB_FLAGS_BYPASS_LOCKED_QUEUE | Esta marca es irrelevante para los conductores de minipuerto. En el controlador de puerto, esta marca indica que la solicitud debe procesarse si la cola de unidades lógicas está bloqueada o no. Un controlador de nivel superior debe establecer esta marca para enviar una solicitud de SRB_FUNCTION_UNLOCK_QUEUE . |
SRB_FLAGS_NO_KEEP_AWAKE | Esta marca es irrelevante para los conductores de minipuerto. Un controlador de clase de Windows usa esta marca para indicar al controlador de puerto que produce un error en la solicitud en lugar de encender el dispositivo para controlar esta solicitud. |
SRB_FLAGS_FREE_SENSE_BUFFER | Indica que el puerto o el controlador de minipuerto ha asignado un búfer para los datos de detección. Esto informa al controlador de clase de que debe liberar el búfer de datos de detección después de extraer los datos. |
SRB_FLAGS_D3_PROCESSING | Indica que la solicitud forma parte del procesamiento D3. Los miniportes que admiten el control de energía en tiempo de ejecución no deben llamar a StorPortPoFxActivateComponent o StorPortPoFxIdleComponent con estas solicitudes. |
SRB_FLAGS_ADAPTER_CACHE_ENABLE | Indica que el adaptador puede almacenar en caché los datos. |
ReservedUlong2
Reservado. Establecer en 0.
RequestTag
Contiene el valor de la etiqueta de cola asignado por el controlador de puerto específico del sistema operativo. Si este miembro se usa para la puesta en cola etiquetada, el HBA admite la puesta en cola interna de solicitudes a unidades lógicas (LU) y el controlador de miniporte establece TaggedQueueing en TRUE en el PORT_CONFIGURATION_INFORMATION para este HBA.
RequestPriority
Asignación de prioridad para el SRB. Puede ser uno de los siguientes valores.
Valor | Significado |
---|---|
StorIoPriorityVeryLow (0) | Prioridad muy baja. |
StorIoPriorityLow (1) | Prioridad baja. |
StorIoPriorityNormal (2) | Prioridad normal. |
StorIoPriorityHigh (3) | Prioridad alta. |
StorIoPriorityCritical (4) | Prioridad crítica. |
RequestAttribute
Indica el mensaje tagged-queuing que se va a usar cuando se establece la marca SRB_FLAGS_QUEUE_ACTION_ENABLE . El valor puede ser uno de los siguientes: SRB_SIMPLE_TAG_REQUEST, SRB_HEAD_OF_QUEUE_TAG_REQUEST o SRB_ORDERED_QUEUE_TAG_REQUEST.
TimeOutValue
Indica el intervalo, en segundos, que la solicitud se puede ejecutar antes de que el controlador de puerto específico del sistema operativo considere que agota el tiempo de espera. Los controladores de minipuerto no son necesarios para las solicitudes de tiempo porque el controlador de puerto ya lo hace.
DUMMYUNIONNAME
Unión incrustada.
DUMMYUNIONNAME.SystemStatus
Se usa para almacenar información de estado de error del sistema en condiciones de error de SrbStatus (por ejemplo, SRB_STATUS_INTERNAL_ERROR).
DUMMYUNIONNAME.RequestTagHigh4Bytes
Se usa para almacenar cuatro bytes altos de etiqueta única si la característica de etiqueta única está habilitada.
SystemStatus
Lo usa el controlador Storport, en lugar de SrbStatus, para notificar el estado de la solicitud completada siempre que no se pueda entregar la solicitud al controlador de miniport. En tales casos, SrbStatus se establece en SRB_STATUS_INTERNAL_ERROR. Este miembro se usa exclusivamente para la comunicación entre Storport y el controlador de clase y no debe ser utilizado por los controladores de miniport.
ZeroGuard1
Un área de protección para protegerse contra los controladores que interpretan esta estructura como SCSI_REQUEST_BLOCK. Establecer en 0.
AddressOffset
Desplazamiento de la dirección de solicitud de almacenamiento desde el principio de esta estructura. Este desplazamiento busca una estructura de STOR_ADDRESS que contiene la dirección de la solicitud.
NumSrbExData
Recuento de bloques de datos SRB extendidos para esta solicitud.
DataTransferLength
Indica el tamaño, en bytes, del búfer de datos. Si se produce una ejecución inferior, el controlador de minipuerto debe actualizar este miembro al número de bytes transferidos realmente.
DataBuffer
Apunta al búfer de datos. Los controladores de minipuerto no deben usar este valor como puntero de datos a menos que el controlador de miniporte establezca MapBuffers en TRUE en el PORT_CONFIGURATION_INFORMATION para el HBA. Sin embargo, en el caso de las solicitudes de SRB_FUNCTION_IO_CONTROL, los controladores de minipuerto pueden usar este valor como puntero de datos independientemente del valor de MapBuffers.
ZeroGuard2
Un área de protección para protegerse contra los controladores que interpretan esta estructura como SCSI_REQUEST_BLOCK. Establecer en 0.
OriginalRequest
Apunta al IRP para esta solicitud. Este miembro es irrelevante para los conductores de miniport.
ClassContext
Apunta a los datos de contexto del controlador de clase para esta solicitud. Este miembro es irrelevante para los conductores de miniport.
PortContext
Apunta a los datos de contexto del controlador de puerto para esta solicitud. Este miembro es irrelevante para los conductores de miniport.
MiniportContext
Apunta a la extensión Srb. Un controlador de minipuerto no debe usar este miembro si establece SrbExtensionSize en cero en HW_INITIALIZATION_DATA. La memoria en MiniportContext no se inicializa mediante el controlador de puerto específico del sistema operativo y el HBA puede acceder a los datos determinados por el controlador de miniporte directamente. La dirección física correspondiente se puede obtener llamando a StorportGetPhysicalAddress con el puntero MiniportContext .
NextSrb
Indica el STORAGE_REQUEST_BLOCK al que se aplica esta solicitud. Solo un pequeño subconjunto de solicitudes usan un segundo SRB, por ejemplo, SRB_FUNCTION_ABORT_COMMAND.
_STORAGE_REQUEST_BLOCK
SrbExDataOffset[ANYSIZE_ARRAY]
Matriz de desplazamientos que especifica la ubicación de los bloques de datos extendidos para la SRB. Esta matriz está vacía si NumSrbExData = 0.
Comentarios
A partir de Windows 8, se admite un tipo SRB extendido con el uso de la estructura de STORAGE_REQUEST_BLOCK. STORAGE_REQUEST_BLOCK amplía las funciones SRB, lo que permite agregar bloques de datos extendidos para la función SRB a la solicitud. La compatibilidad con solicitudes SRB mediante la estructura de SCSI_REQUEST_BLOCK continuará.
Si NumSrbExData 0, los desplazamientos de los bloques de datos extendidos de SRB se encuentran en la matriz SrbExDataOffset>. Cada desplazamiento es relativo al principio de esta estructura y apunta a una estructura de SRBEX_DATA que contiene el bloque de datos extendido.
La dirección del dispositivo de destino para la SRB está en una estructura de STOR_ADDRESS indicada por AddressOffset.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Disponible en Windows 8 y versiones posteriores de Windows. |
Encabezado | storport.h (incluya Storport.h, Srb.h, Minitape.h) |