STORAGE_REQUEST_BLOCK estructura (srb.h)

El STORAGE_REQUEST_BLOCK es la estructura del bloque de solicitudes SCSI (SRB) de formato extendido. La estructura proporciona la adición de datos extendidos asociados a una función SRB.

Nota

Los modelos del controlador de puerto SCSI y del controlador de miniporte SCSI pueden modificarse o no estar disponibles en el futuro. En su lugar, use el controlador Storport y los modelos de controlador de minipuerto de Storport .

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 la compatibilidad 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 un SRB extendido. A diferencia de en SCSI_REQUEST_BLOCK, el identificador de función SRB está en el miembro SrbFunction en su lugar.

SrbStatus

Devuelve el estado de la solicitud completada. El controlador de miniport debe establecer este miembro antes de que notifique al controlador específico del sistema operativo que la solicitud ha completado llamando a ScsiPortNotification con RequestComplete. El valor de este miembro puede ser uno de los siguientes:

Valor Significado
SRB_STATUS_PENDING (0x00) Indica que la solicitud está en curso. El controlador de puerto específico del sistema operativo inicializa SrbStatus en este valor.
SRB_STATUS_SUCCESS (0x01) Indica que la solicitud se completó correctamente.
SRB_STATUS_ABORTED (0x02) 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 (0x03) Indica un intento de anular la solicitud con error. Devuelve este estado para una solicitud de SRB_FUNCTION_ABORT_COMMAND cuando no se puede encontrar la solicitud especificada.
SRB_STATUS_ERROR (0x04) Indica que la solicitud se completó con un error en el estado del bus SCSI.
SRB_STATUS_BUSY (0x05) Indica que el controlador de miniporte 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_INVALID_REQUEST (0x06) Indica que el controlador de minipuerto no admite la solicitud especificada.
SRB_STATUS_INVALID_PATH_ID (0x07) Indica que el PathId especificado en la SRB no existe.
SRB_STATUS_NO_DEVICE (0x08) Indica que el dispositivo no respondió.
SRB_STATUS_TIMEOUT (0x09) Indica el tiempo de espera de la solicitud.
SRB_STATUS_SELECTION_TIMEOUT (0x0A) Indica que se agota el tiempo de espera de la selección del dispositivo SCSI.
SRB_STATUS_COMMAND_TIMEOUT (0x0B) Indica que el destino no completó el comando dentro del límite de tiempo.
SRB_STATUS_MESSAGE_REJECTED (0x0D) Indica el destino rechazado un mensaje. Normalmente, esto solo se devuelve para las solicitudes de tipo mensaje como SRB_FUNCTION_TERMINATE_IO.
SRB_STATUS_BUS_RESET (0x0E) Indica que se ha producido un restablecimiento de bus mientras se estaba ejecutando esta solicitud.
SRB_STATUS_PARITY_ERROR (0x0F) Indica un error de paridad en el bus SCSI y que se produjo un error de reintento.
SRB_STATUS_REQUEST_SENSE_FAILED (0x10) 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 (0x11) Indica que el HBA no responde.
SRB_STATUS_DATA_OVERRUN (0x12) 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 (0x13) Indica el destino desconectado inesperadamente.
SRB_STATUS_PHASE_SEQUENCE_FAILURE (0x14) Indica que el HBA detectó un error de secuencia de fase no válido.
SRB_STATUS_BAD_SRB_BLOCK_LENGTH (0x15) Indica que se produjo un error en la solicitud porque la longitud de SRB no era válida.
SRB_STATUS_REQUEST_FLUSHED (0x16) Indica que se detuvo la solicitud de estado.
SRB_STATUS_INVALID_LUN (0x20) Indica que el valor de Lun en el SRB no es válido.
SRB_STATUS_INVALID_TARGET_ID (0x21) Indica que el valor targetID de la SRB no es válido.
SRB_STATUS_BAD_FUNCTION (0x22) Indica que no se admite el código de la función SRB.
SRB_STATUS_ERROR_RECOVERY (0x23) 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_NOT_POWERED (0x24) 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 establecida en SrbFlags, las solicitudes enviadas a los LUN que se apagan producirán un error con este estado.
SRB_STATUS_LINK_DOWN (0x25) Indica el error de solicitud porque el vínculo está inactivo.
SRB_STATUS_INTERNAL_ERROR (0x30) 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_QUEUE_FROZEN (0x40) 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 su cola de solicitudes para un periférico determinado se ha inmovilizado.
SRB_STATUS_AUTOSENSE_VALID (0x80) Indica que la información devuelta en SenseInfoBuffer es válida.

ReservedUlong1

Reservado. Establecer en 0.

Signature

Firma del formato SRB extendido. Se establece en SRB_SIGNATURE.

Version

Versión de la estructura utilizada. 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 bloque de solicitudes 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 de 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 la SRB, mediante el mecanismo normal de llamadas a ScsiPortNotification 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 se deben colocar los datos. NOTA: Storport no envía esta función al miniporte.
SRB_FUNCTION_SHUTDOWN (0x07) El sistema se está apagando. Un controlador de minipuerto puede recibir varias de estas notificaciones antes de que se detenga realmente toda la actividad del sistema. 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 de 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 miniporte.
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 miniporte.
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 agotado 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 de 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 miniporte.
SRB_FUNCTION_RESET_DEVICE (0x16) El controlador de destino SCSI debe restablecerse mediante 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 energía. 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 que se bloqueó anteriormente 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 minipuerto 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 sirve 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 no lo hace el puerto SCSI.
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 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 de 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 MINIPORT_DUMP_POINTERS . Un controlador de minipuerto físico debe establecer la marca 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) Se envía una solicitud con esta función a un controlador de miniport 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 marcadores establecidos.

Marca Significado
SRB_FLAGS_NO_DATA_TRANSFER (0x00000000) Indica ninguna 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_QUEUE_ACTION_ENABLE (0x00000002) Indica que se habilitarán las acciones de cola etiquetada.
SRB_FLAGS_DISABLE_DISCONNECT (0x00000004) Indica que el HBA no debe permitir que el destino se desconecte del bus SCSI durante el procesamiento de esta solicitud.
SRB_FLAGS_DISABLE_SYNCH_TRANSFER (0x00000008) 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 la E/S asincrónica antes de realizar la transferencia.
SRB_FLAGS_BYPASS_FROZEN_QUEUE (0x00000010) Esta marca es irrelevante para los controladores de minipuerto.
SRB_FLAGS_DISABLE_AUTOSENSE (0x00000020) Indica que no se debe devolver información de sentido de solicitud.
SRB_FLAGS_DATA_IN (0x00000040) Indica que los datos se transferirán desde el dispositivo al sistema.
SRB_FLAGS_DATA_OUT (0x00000080) Indica que los datos se transferirán del sistema al dispositivo.
SRB_FLAGS_UNSPECIFIED_DIRECTION (SRB_FLAGS_DATA_IN | SRB_FLAGS_DATA_OUT) Definido para la compatibilidad con versiones anteriores con las interfaces SCSI aspi/CAM, esta marca indica que la dirección de transferencia podría ser cualquiera de las anteriores, ya que se establecen las dos 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_QUEUE_FREEZE (0x00000100) Esta marca es irrelevante para los controladores de minipuerto.
SRB_FLAGS_ADAPTER_CACHE_ENABLE (0x00000200) Indica que el adaptador puede almacenar en caché los datos.
SRB_FLAGS_FREE_SENSE_BUFFER (0x00000400) Indica que el puerto o el controlador de minipuerto han 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 (0x00000800) 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_SEQUENTIAL_REQUIRED (0x00001000) Indica que el intervalo LBA se encuentra en la zona de escritura secuencial requerida.
SRB_FLAGS_IS_ACTIVE (0x00010000) Esta marca es irrelevante para los controladores de minipuerto.
SRB_FLAGS_ALLOCATED_FROM_ZONE (0x00020000) Esta marca es irrelevante para los controladores de minipuerto y está obsoleta para los nuevos controladores de clase de Windows. En un controlador de clase heredado de Windows, esto indica si la SRB se asignó desde un búfer de zona. Si se establece esta marca, el controlador de clase debe llamar a ExInterlockedFreeToZone para liberar la SRB; de lo contrario, debe llamar a ExFreePool. Los controladores de clase nuevos deben usar listas de lookaside en lugar de búferes de zona.
SRB_FLAGS_SGLIST_FROM_POOL (0x00040000) Esta marca es irrelevante para los controladores de minipuerto. Para el controlador de clase, esto indica que se asignó memoria para una lista de dispersión y recopilación 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 (0x00080000) Esta marca es irrelevante para los controladores 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 (0x00100000) Esta marca es irrelevante para los controladores 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_PORT_DRIVER_ALLOCSENSE (0x00200000) El controlador de puerto debe asignar el búfer de sentido para la SRB.
SRB_FLAGS_PORT_DRIVER_SENSEHASPORT (0x00400000) En desuso, no lo use.
SRB_FLAGS_DONT_START_NEXT_PACKET (0x00800000) En desuso, no lo use.
SRB_FLAGS_PORT_DRIVER_RESERVED (0x0F000000) Reservado para uso del sistema.
SRB_FLAGS_CLASS_DRIVER_RESERVED (0xF0000000) Reservado para uso del sistema.

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 cola etiquetada, el HBA admite la puesta en cola interna de solicitudes a unidades lógicas (LU) y el controlador de miniporte establecido TaggedQueueing en TRUE en el PORT_CONFIGURATION_INFORMATION para este HBA.

RequestPriority

Asignación de prioridad para la SRB. Este es uno de los siguientes valores de _STOR_IO_PRIORITY_HINT :

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 etiquetado-cola 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 puede ejecutarse 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 la solicitud no se pueda entregar 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 conductores 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 conductores que interpretan esta estructura como SCSI_REQUEST_BLOCK. Establecer en 0.

OriginalRequest

Apunta al IRP para esta solicitud. Este miembro es irrelevante para los controladores de minipuerto.

ClassContext

Apunta a datos de contexto del controlador de clase para esta solicitud. Este miembro es irrelevante para los controladores de minipuerto.

PortContext

Apunta a datos de contexto del controlador de puerto para esta solicitud. Este miembro es irrelevante para los controladores de minipuerto.

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. El controlador de puerto específico del sistema operativo no inicializa la memoria en MiniportContext y el HBA puede acceder directamente a los datos determinados por el controlador de miniporte. La dirección física correspondiente se puede obtener llamando a ScsiPortGetPhysicalAddress con el puntero MiniportContext .

NextSrb

Indica el STORAGE_REQUEST_BLOCK al que se aplica esta solicitud. Solo un pequeño subconjunto de solicitudes usa un segundo SRB, por ejemplo, SRB_FUNCTION_ABORT_COMMAND.

_STORAGE_REQUEST_BLOCK

SrbExDataOffset[ANYSIZE_ARRAY]

Matriz de desplazamientos que especifican 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 STORAGE_REQUEST_BLOCK. STORAGE_REQUEST_BLOCK amplía las funciones de SRB, lo que permite agregar bloques de datos extendidos para la función SRB a la solicitud. La compatibilidad con las solicitudes de 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 SRBEX_DATA que contiene el bloque de datos extendido.

La dirección del dispositivo de destino para la SRB se encuentra en una estructura STOR_ADDRESS indicada por AddressOffset.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 8
Encabezado srb.h (incluya Storport.h, Srb.h, Minitape.h)

Consulte también