estrutura STORAGE_REQUEST_BLOCK (srb.h)

O STORAGE_REQUEST_BLOCK é a estrutura SRB (Bloco de Solicitação SCSI) de formato estendido. A estrutura fornece a adição de dados estendidos associados a uma função SRB.

Observação

Os modelos de driver de porta SCSI e driver de miniporto SCSI podem ser alterados ou indisponíveis no futuro. Em vez disso, use os modelos de driver do Storport e do miniportor Storport .

Sintaxe

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

Membros

Length

Especifica o tamanho do cabeçalho SRB para compatibilidade com a estrutura SCSI_REQUEST_BLOCK . Isso é igual ao deslocamento do membro Signature dessa estrutura.

Function

Defina como SRB_FUNCTION_STORAGE_REQUEST_BLOCK para indicar que esse é um SRB estendido. Ao contrário de SCSI_REQUEST_BLOCK, o identificador de função SRB está no membro SrbFunction .

SrbStatus

Retorna o status da solicitação concluída. Esse membro deve ser definido pelo driver de miniporte antes de notificar o driver específico do sistema operacional de que a solicitação foi concluída chamando ScsiPortNotification com RequestComplete. O valor desse membro pode ser um dos seguintes:

Valor Significado
SRB_STATUS_PENDING (0x00) Indica que a solicitação está em andamento. O driver de porta específico do sistema operacional inicializa SrbStatus para esse valor.
SRB_STATUS_SUCCESS (0x01) Indica que a solicitação foi concluída com êxito.
SRB_STATUS_ABORTED (0x02) Indica que a solicitação foi anulada conforme indicado pelo driver de porta. Um driver de miniporte define esse status no membro NextSrb para uma solicitação de SRB_FUNCTION_ABORT_COMMAND bem-sucedida.
SRB_STATUS_ABORT_FAILED (0x03) Indica que uma tentativa de anular a solicitação falhou. Retorne essa status para uma solicitação de SRB_FUNCTION_ABORT_COMMAND quando a solicitação especificada não puder ser localizada.
SRB_STATUS_ERROR (0x04) Indica que a solicitação foi concluída com um erro no status de barramento SCSI.
SRB_STATUS_BUSY (0x05) Indica que o driver de miniporto ou dispositivo de destino não pôde aceitar a solicitação no momento. O driver de porta específico do sistema operacional reenviará a solicitação mais tarde.
SRB_STATUS_INVALID_REQUEST (0x06) Indica que o driver de miniporto não dá suporte à solicitação fornecida.
SRB_STATUS_INVALID_PATH_ID (0x07) Indica que PathId especificado no SRB não existe.
SRB_STATUS_NO_DEVICE (0x08) Indica que o dispositivo não respondeu.
SRB_STATUS_TIMEOUT (0x09) Indica que a solicitação atingiu o tempo limite.
SRB_STATUS_SELECTION_TIMEOUT (0x0A) Indica que a seleção do dispositivo SCSI atingiu o tempo limite.
SRB_STATUS_COMMAND_TIMEOUT (0x0B) Indica que o destino não concluiu o comando dentro do limite de tempo.
SRB_STATUS_MESSAGE_REJECTED (0x0D) Indica que o destino rejeitou uma mensagem. Normalmente, isso é retornado apenas para solicitações do tipo mensagem como SRB_FUNCTION_TERMINATE_IO.
SRB_STATUS_BUS_RESET (0x0E) Indica que ocorreu uma redefinição de barramento enquanto essa solicitação estava sendo executada.
SRB_STATUS_PARITY_ERROR (0x0F) Indica que ocorreu um erro de paridade no barramento SCSI e que uma nova tentativa falhou.
SRB_STATUS_REQUEST_SENSE_FAILED (0x10) Indica que o comando request-sense falhou. Isso será retornado somente se o HBA (adaptador de barramento de host) executar o sentido de solicitação automática e o driver de miniporto definir AutoRequestSense como TRUE no PORT_CONFIGURATION_INFORMATION deste HBA.
SRB_STATUS_NO_HBA (0x11) Indica que o HBA não responde.
SRB_STATUS_DATA_OVERRUN (0x12) Indica que ocorreu um erro de estouro ou subexecutamento de dados. O driver de miniporto também deve atualizar o membro DataTransferLength do SRB para indicar quantos dados realmente foram transferidos se ocorrer uma subexecutação.
SRB_STATUS_UNEXPECTED_BUS_FREE (0x13) Indica que o destino foi desconectado inesperadamente.
SRB_STATUS_PHASE_SEQUENCE_FAILURE (0x14) Indica que o HBA detectou um erro de falha de sequência de fase ilegal.
SRB_STATUS_BAD_SRB_BLOCK_LENGTH (0x15) Indica que a solicitação falhou porque o comprimento do SRB era inválido.
SRB_STATUS_REQUEST_FLUSHED (0x16) Indica que a solicitação de status foi interrompida.
SRB_STATUS_INVALID_LUN (0x20) Indica que o valor lun no SRB é inválido.
SRB_STATUS_INVALID_TARGET_ID (0x21) Indica que o valor targetID no SRB é inválido.
SRB_STATUS_BAD_FUNCTION (0x22) Indica que não há suporte para o código da Função SRB.
SRB_STATUS_ERROR_RECOVERY (0x23) Indica que a solicitação foi concluída com um erro no barramento SCSI status e que a mensagem SCSI INITIATE RECOVERY foi recebida.
SRB_STATUS_NOT_POWERED (0x24) Um indica que a solicitação falhou porque o destino não está ligado. Para solicitações com SRB_FLAGS_NO_KEEP_AWAKE definidas em SrbFlags, as solicitações enviadas aos LUNs que são desligados falharão com esse status.
SRB_STATUS_LINK_DOWN (0x25) Indica que a solicitação falhou porque o link está inativo.
SRB_STATUS_INTERNAL_ERROR (0x30) Indica que o driver storport não pôde entregar a solicitação ao driver de miniporto ou ao dispositivo de destino. Nesses casos, status é registrado em InternalStatus.
SRB_STATUS_QUEUE_FROZEN (0x40) Um driver de miniporte nunca deve definir o membro SrbStatus para esse valor. O driver de porta do Windows pode definir esse valor para informar a um driver de classe de armazenamento que sua fila de solicitações para um periférico específico foi congelada.
SRB_STATUS_AUTOSENSE_VALID (0x80) Indica que as informações retornadas no SenseInfoBuffer são válidas.

ReservedUlong1

Reservado. Defina como 0.

Signature

A assinatura do formato SRB estendido. Isso está definido como SRB_SIGNATURE.

Version

A versão da estrutura usada. A versão atual é STORAGE_REQUEST_BLOCK_VERSION_1.

SrbLength

O comprimento desse SRB estendido, em bytes, incluindo essa estrutura, endereço e todos os dados estendidos do SRB.

SrbFunction

Especifica a operação a ser executada, que pode ser um destes valores:

Valor Significado
SRB_FUNCTION_EXECUTE_SCSI (0x00) Uma solicitação de E/S do dispositivo SCSI deve ser executada na unidade lógica de destino. Quando NumSrbExData> 0, uma ou mais das seguintes estruturas de bloco de solicitação estendida estão localizadas nos deslocamentos especificados em SrbExDataOffset: SRBEX_DATA_SCSI_CDB16, SRBEX_DATA_SCSI_CDB32, SRBEX_DATA_SCSI_CDB_VAR, SRBEX_DATA_BIDIRECTIONALSRBEX_DATA_IO_INFO
SRB_FUNCTION_IO_CONTROL (0x02) A solicitação é uma solicitação de controle de E/S, originada em um aplicativo de modo de usuário com um HBA dedicado. O SRB DataBuffer aponta para um cabeçalho SRB_IO_CONTROL seguido pela área de dados. O valor no DataBuffer pode ser usado pelo driver, independentemente do valor de MapBuffers. Somente os membros SRB Function, SrbFlags, TimeOutValue, DataBuffer e DataTransferLength são válidos, juntamente com o membro SrbExtension se o driver de miniporto solicitou extensões SRB quando inicializado. Se um driver de miniporta controlar um HBA dedicado ao aplicativo para que ele dê suporte a essa solicitação, o driver de miniporte deverá executar a solicitação e notificar o driver de porta específico do sistema operacional quando o SRB for concluído, usando o mecanismo normal de chamadas para ScsiPortNotification com RequestComplete e NextRequest.
SRB_FUNCTION_RECEIVE_EVENT (0x03) O HBA deve estar preparado para receber uma notificação de evento assíncrono do destino endereçado. O membro SRB DataBuffer indica onde os dados devem ser colocados. OBSERVAÇÃO: essa função não é enviada para o miniporto pelo Storport.
SRB_FUNCTION_SHUTDOWN (0x07) O sistema está sendo desligado. Um driver de miniporta pode receber várias dessas notificações antes que todas as atividades do sistema realmente parem. No entanto, a última notificação de desligamento ocorrerá após a última E/S de início. Dados SRB estendidos não são necessários para essa função.
SRB_FUNCTION_FLUSH (0x08) O driver de miniporta deve liberar todos os dados armazenados em cache para o dispositivo de destino. Essa solicitação será enviada ao driver de miniporto somente se definir CachesData como TRUE no PORT_CONFIGURATION_INFORMATION para o HBA. Dados SRB estendidos não são necessários para essa função.
SRB_FUNCTION_ABORT_COMMAND (0x10) Uma mensagem SCSIMESS_ABORT deve ser enviada para cancelar a solicitação apontada pelo membro NextSrb . Se essa for uma solicitação de fila marcada, uma mensagem SCSIMESS_ABORT_WITH_TAG deverá ser usada. Se a solicitação indicada tiver sido concluída, essa solicitação deverá ser concluída normalmente. Dados SRB estendidos não são necessários para essa função. OBSERVAÇÃO: essa função não é enviada para o miniporto pelo Storport.
SRB_FUNCTION_RELEASE_RECOVERY (0x11) Uma mensagem SCSIMESS_RELEASE_RECOVERY deve ser enviada ao controlador de destino. Dados SRB estendidos não são necessários para essa função. OBSERVAÇÃO: essa função não é enviada para o miniporto pelo Storport.
SRB_FUNCTION_RESET_BUS (0x12) O barramento SCSI deve ser redefinido usando a mensagem SCSIMESS_BUS_DEVICE_RESET. Um driver de miniporta recebe essa solicitação somente se uma determinada solicitação atingiu o tempo limite e uma solicitação subsequente para anular a solicitação de tempo limite também atingiu o tempo limite. Dados SRB estendidos não são necessários para essa função.
SRB_FUNCTION_TERMINATE_IO (0x14) Uma mensagem SCSIMESS_TERMINATE_IO_PROCESS deve ser enviada para cancelar a solicitação apontada pelo membro NextSrb . Se a solicitação indicada já tiver sido concluída, essa solicitação deverá ser concluída normalmente. Dados SRB estendidos não são necessários para essa função. OBSERVAÇÃO: essa função não é enviada para o miniporto pelo Storport.
SRB_FUNCTION_RESET_DEVICE (0x16) O controlador de destino SCSI deve ser redefinido usando a mensagem SCSIMESS_BUS_DEVICE_RESET. O driver de miniporta deve concluir todas as solicitações ativas para o controlador de destino. Dados SRB estendidos não são necessários para essa função.
SRB_FUNCTION_WMI (0x17) A solicitação é uma solicitação estendida de energia formatada como uma estrutura SRBEX_DATA_WMI . O deslocamento para dados de solicitação estendida está localizado em SrbExDataOffset[0].
SRB_FUNCTION_LOCK_QUEUE (0x18) Contém solicitações enfileiradas pelo driver de porta para uma unidade lógica específica, normalmente enquanto uma solicitação de energia está sendo processada. Somente os membros SRB Length, Function, SrbFlags e OriginalRequest são válidos. Quando a fila estiver bloqueada, somente as solicitações com SrbFlags ORed com SRB_FLAGS_BYPASS_LOCKED_QUEUE serão processadas. Os drivers de miniporta SCSI não processam solicitações de SRB_FUNCTION_LOCK_QUEUE .
SRB_FUNCTION_UNLOCK_QUEUE (0x19) Libera a fila do driver de porta para uma unidade lógica que foi bloqueada anteriormente com SRB_FUNCTION_LOCK_QUEUE. O SrbFlags da solicitação de desbloqueio deve ser ORed com SRB_FLAGS_BYPASS_LOCKED_QUEUE. Somente os membros SRB Length, Function, SrbFlags e OriginalRequest são válidos. Os drivers de miniporta SCSI não processam solicitações de SRB_FUNCTION_UNLOCK_QUEUE .
SRB_FUNCTION_QUIESCE_DEVICE (0x1A) A solicitação é somente entre uma classe de armazenamento e um driver de porta de armazenamento e não é enviada para o miniporto. Essa função serve como uma espera pelo driver de classe para que o driver de porta conclua todas as E/Ss pendentes.
SRB_FUNCTION_RESET_LOGICAL_UNIT (0x20) A unidade lógica deve ser redefinida, se possível. O driver de miniporto HBA deve concluir todas as solicitações ativas para a unidade lógica. Dados SRB estendidos não são necessários para essa função. O Storport dá suporte a esse tipo de redefinição, mas a porta SCSI não.
SRB_FUNCTION_POWER (0x24) A solicitação é uma solicitação estendida de energia formatada como uma estrutura SRBEX_DATA_POWER . O deslocamento para dados de solicitação estendida está localizado em SrbExDataOffset[0].
SRB_FUNCTION_PNP (0x25) A solicitação é uma solicitação estendida PnP formatada como uma estrutura de SRBEX_DATA_PNP . O deslocamento para dados de solicitação estendida está localizado em SrbExDataOffset[0].
SRB_FUNCTION_DUMP_POINTERS (0x26) Uma solicitação com essa função é enviada para um driver de miniporto storport que é usado para controlar o disco que contém os dados de despejo de memória. A solicitação coleta as informações necessárias do driver de miniporta para dar suporte ao despejo de memória e à hibernação. Consulte a estrutura de MINIPORT_DUMP_POINTERS . Um driver de miniporto físico deve definir o sinalizador STOR_FEATURE_DUMP_POINTERS no membro FeatureSupport de sua HW_INITIALIZATION_DATA para receber uma solicitação com essa função.
SRB_FUNCTION_FREE_DUMP_POINTERS (0x27) Uma solicitação com essa função é enviada a um driver de miniporto storport para liberar todos os recursos alocados durante uma solicitação anterior para SRB_FUNCTION_DUMP_POINTERS.

SrbFlags

Indica vários parâmetros e opções para a solicitação. SrbFlags é somente leitura, exceto quando SRB_FLAGS_UNSPECIFIED_DIRECTION é definido e drivers de miniporta de adaptadores de AMD subordinados são necessários para atualizar SRB_FLAGS_DATA_IN ou SRB_FLAGS_DATA_OUT. Esse membro pode ter um ou mais desses sinalizadores definidos.

Sinalizador Significado
SRB_FLAGS_NO_DATA_TRANSFER (0x00000000) Indica nenhuma transferência de dados com essa solicitação. Se isso estiver definido, os sinalizadores SRB_FLAGS_DATA_OUT, SRB_FLAGS_DATA_IN e SRB_FLAGS_UNSPECIFIED_DIRECTION estarão claros.
SRB_FLAGS_QUEUE_ACTION_ENABLE (0x00000002) Indica que as ações de fila marcada devem ser habilitadas.
SRB_FLAGS_DISABLE_DISCONNECT (0x00000004) Indica que o HBA não deve permitir que o destino se desconecte do barramento SCSI durante o processamento dessa solicitação.
SRB_FLAGS_DISABLE_SYNCH_TRANSFER (0x00000008) Indica que o HBA, se possível, deve executar E/S assíncrona para essa solicitação de transferência. Se a E/S síncrona tiver sido negociada anteriormente, o HBA deverá renegociar a E/S assíncrona antes de realizar a transferência.
SRB_FLAGS_BYPASS_FROZEN_QUEUE (0x00000010) Esse sinalizador é irrelevante para os drivers de miniporta.
SRB_FLAGS_DISABLE_AUTOSENSE (0x00000020) Indica que as informações de sentido de solicitação não devem ser retornadas.
SRB_FLAGS_DATA_IN (0x00000040) Indica que os dados serão transferidos do dispositivo para o sistema.
SRB_FLAGS_DATA_OUT (0x00000080) Indica que os dados serão transferidos do sistema para o dispositivo.
SRB_FLAGS_UNSPECIFIED_DIRECTION (SRB_FLAGS_DATA_IN | SRB_FLAGS_DATA_OUT) Definido para compatibilidade com versões anteriores com as interfaces SCSI ASPI/CAM, esse sinalizador indica que a direção da transferência pode ser uma das anteriores, pois ambos os sinalizadores anteriores estão definidos. Se esse sinalizador estiver definido, um driver de miniporto deverá determinar a direção da transferência examinando a fase de dados do destino no barramento SCSI.
SRB_FLAGS_NO_QUEUE_FREEZE (0x00000100) Esse sinalizador é irrelevante para os drivers de miniporta.
SRB_FLAGS_ADAPTER_CACHE_ENABLE (0x00000200) Indica que o adaptador pode armazenar dados em cache.
SRB_FLAGS_FREE_SENSE_BUFFER (0x00000400) Indica que a porta ou o driver de miniporta alocou um buffer para dados de sensor. Isso informa ao driver de classe que ele deve liberar o buffer de dados de sensor depois de extrair os dados.
SRB_FLAGS_D3_PROCESSING (0x00000800) Indica que a solicitação faz parte do processamento D3. Miniportos que dão suporte ao controle de energia de runtime não devem chamar StorPortPoFxActivateComponent ou StorPortPoFxIdleComponent com essas solicitações.
SRB_FLAGS_SEQUENTIAL_REQUIRED (0x00001000) Indica que o intervalo LBA se enquadra na zona de gravação sequencial necessária.
SRB_FLAGS_IS_ACTIVE (0x00010000) Esse sinalizador é irrelevante para os drivers de miniporta.
SRB_FLAGS_ALLOCATED_FROM_ZONE (0x00020000) Esse sinalizador é irrelevante para drivers de miniporta e está obsoleto para novos drivers de classe do Windows. Para um driver de classe herdado do Windows, isso indica se o SRB foi alocado de um buffer de zona. Se esse sinalizador estiver definido, o driver de classe deverá chamar ExInterlockedFreeToZone para liberar o SRB; caso contrário, ele deve chamar ExFreePool. Os novos drivers de classe devem usar listas lookaside em vez de buffers de zona.
SRB_FLAGS_SGLIST_FROM_POOL (0x00040000) Esse sinalizador é irrelevante para os drivers de miniporta. Para o driver de classe, isso indica que a memória de uma lista de dispersão/coleta foi alocada de um pool nãopagado. Se esse sinalizador for definido, o driver de classe deverá chamar ExFreePool para liberar a memória depois que o SRB for concluído.
SRB_FLAGS_BYPASS_LOCKED_QUEUE (0x00080000) Esse sinalizador é irrelevante para os drivers de miniporta. Para o driver de porta, esse sinalizador indica que a solicitação deve ser processada se a fila de unidade lógica está bloqueada ou não. Um driver de nível superior deve definir esse sinalizador para enviar uma solicitação de SRB_FUNCTION_UNLOCK_QUEUE .
SRB_FLAGS_NO_KEEP_AWAKE (0x00100000) Esse sinalizador é irrelevante para os drivers de miniporta. Um driver de classe do Windows usa esse sinalizador para indicar ao driver de porta para falhar a solicitação em vez de ligar o dispositivo para lidar com essa solicitação.
SRB_FLAGS_PORT_DRIVER_ALLOCSENSE (0x00200000) O driver de porta precisa alocar o buffer de sensor para o SRB.
SRB_FLAGS_PORT_DRIVER_SENSEHASPORT (0x00400000) Preterido; não use.
SRB_FLAGS_DONT_START_NEXT_PACKET (0x00800000) Preterido; não use.
SRB_FLAGS_PORT_DRIVER_RESERVED (0x0F000000) Reservado para uso do sistema.
SRB_FLAGS_CLASS_DRIVER_RESERVED (0xF0000000) Reservado para uso do sistema.

ReservedUlong2

Reservado. Defina como 0.

RequestTag

Contém o valor de marca de fila atribuído pelo driver de porta específico do sistema operacional. Se esse membro for usado para enfileiramento marcado, o HBA oferecerá suporte ao enfileiramento interno de solicitações para LUs (unidades lógicas) e o driver de miniporto definir TaggedQueueing como TRUE no PORT_CONFIGURATION_INFORMATION para esse HBA.

RequestPriority

A atribuição de prioridade para o SRB. Este é um dos seguintes valores de _STOR_IO_PRIORITY_HINT :

Valor Significado
StorIoPriorityVeryLow (0) Prioridade muito baixa.
StorIoPriorityLow (1) Baixa prioridade.
StorIoPriorityNormal (2) Prioridade normal.
StorIoPriorityHigh (3) Prioridade alta.
StorIoPriorityCritical (4) Prioridade crítica.

RequestAttribute

Indica a mensagem de enfileiramento marcado a ser usada quando o sinalizador SRB_FLAGS_QUEUE_ACTION_ENABLE está definido. O valor pode ser um dos seguintes: SRB_SIMPLE_TAG_REQUEST, SRB_HEAD_OF_QUEUE_TAG_REQUEST ou SRB_ORDERED_QUEUE_TAG_REQUEST.

TimeOutValue

Indica o intervalo, em segundos, que a solicitação pode ser executada antes que o driver de porta específico do sistema operacional possa considerá-lo com o tempo limite esgotado. Os drivers de miniporta não são necessários para solicitações de tempo porque o driver de porta já faz isso.

SystemStatus

Usado pelo driver storport, em vez de SrbStatus, para relatar o status da solicitação concluída sempre que a solicitação não puder ser entregue ao driver de miniporto. Nesses casos, SrbStatus é definido como SRB_STATUS_INTERNAL_ERROR. Esse membro é usado exclusivamente para comunicação entre o Storport e o driver de classe e não deve ser usado por drivers de miniporta.

ZeroGuard1

Uma área de proteção para proteger contra drivers que interpretam essa estrutura como SCSI_REQUEST_BLOCK. Defina como 0.

AddressOffset

O deslocamento do endereço da solicitação de armazenamento desde o início dessa estrutura. Esse deslocamento localiza uma estrutura STOR_ADDRESS que contém o endereço da solicitação.

NumSrbExData

A contagem de blocos de dados SRB estendidos para essa solicitação.

DataTransferLength

Indica o tamanho, em bytes, do buffer de dados. Se ocorrer uma subexecutação, o driver de miniporto deverá atualizar esse membro para o número de bytes realmente transferidos.

DataBuffer

Aponta para o buffer de dados. Os drivers de miniporta não devem usar esse valor como um ponteiro de dados, a menos que o driver de miniporte defina MapBuffers como TRUE no PORT_CONFIGURATION_INFORMATION para o HBA. No caso de solicitações SRB_FUNCTION_IO_CONTROL, no entanto, os drivers de miniporto podem usar esse valor como um ponteiro de dados, independentemente do valor de MapBuffers.

ZeroGuard2

Uma área de proteção para proteger contra drivers que interpretam essa estrutura como SCSI_REQUEST_BLOCK. Defina como 0.

OriginalRequest

Aponta para o IRP para essa solicitação. Esse membro é irrelevante para os drivers de miniporta.

ClassContext

Aponta para dados de contexto de um driver de classe para essa solicitação. Esse membro é irrelevante para os drivers de miniporta.

PortContext

Aponta para os dados de contexto de um driver de porta para essa solicitação. Esse membro é irrelevante para os drivers de miniporta.

MiniportContext

Aponta para a extensão Srb. Um driver de miniporta não deverá usar esse membro se definir SrbExtensionSize como zero em HW_INITIALIZATION_DATA. A memória em MiniportContext não é inicializada pelo driver de porta específico do sistema operacional e os dados determinados pelo driver de miniport podem ser acessados diretamente pelo HBA. O endereço físico correspondente pode ser obtido chamando ScsiPortGetPhysicalAddress com o ponteiro MiniportContext .

NextSrb

Indica a STORAGE_REQUEST_BLOCK à qual essa solicitação se aplica. Apenas um pequeno subconjunto de solicitações usa um segundo SRB, por exemplo, SRB_FUNCTION_ABORT_COMMAND.

_STORAGE_REQUEST_BLOCK

SrbExDataOffset[ANYSIZE_ARRAY]

Uma matriz de deslocamentos que especifica o local dos blocos de dados estendidos para o SRB. Essa matriz estará vazia se NumSrbExData = 0.

Comentários

A partir do Windows 8, há suporte para um tipo SRB estendido com o uso da estrutura STORAGE_REQUEST_BLOCK. STORAGE_REQUEST_BLOCK estende as funções SRB, permitindo que blocos de dados estendidos para a função SRB sejam adicionados à solicitação. O suporte para solicitações SRB usando a estrutura SCSI_REQUEST_BLOCK continuará.

Se NumSrbExData> 0, os deslocamentos para os blocos de dados estendidos SRB estarão na matriz SrbExDataOffset . Cada deslocamento é relativo ao início dessa estrutura e aponta para uma estrutura SRBEX_DATA que contém o bloco de dados estendido.

O endereço do dispositivo de destino para o SRB está em uma estrutura STOR_ADDRESS indicada por AddressOffset.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 8
Cabeçalho srb.h (inclua Storport.h, Srb.h, Minitape.h)

Confira também

SCSI_REQUEST_BLOCK

STOR_ADDRESS