estrutura SRBEX_DATA (srb.h)

A estrutura SRBEX_DATA é o formato generalizado para conter dados SRB estendidos.

Nota O driver de porta SCSI e os modelos de driver de miniporta SCSI podem ser alterados ou indisponíveis no futuro. Em vez disso, recomendamos usar os modelos de driver storport e driver de miniporto Storport .
 

Sintaxe

typedef struct _SRBEX_DATA {
  SRBEXDATATYPE Type;
  ULONG         Length;
  UCHAR         Data[ANYSIZE_ARRAY];
} SRBEX_DATA, *PSRBEX_DATA;

Membros

Type

Indicador de tipo de dados para a estrutura de dados SRB estendida. Os valores possíveis para Type são um dos seguintes.

Valor Significado
SrbExDataTypeUnknown
O tipo de dados estendido SRB é desconhecido.
SrbExDataTypeBidirectional
Os dados estendidos do SRB são formatados como uma estrutura SRBEX_DATA_BIDIRECTIONAL .
SrbExDataTypeScsiCdb16
Os dados estendidos do SRB são formatados como uma estrutura SRBEX_DATA_SCSI_CDB16 .
SrbExDataTypeScsiCdb32
Os dados estendidos do SRB são formatados como uma estrutura SRBEX_DATA_SCSI_CDB32 .
SrbExDataTypeScsiCdbVar
Os dados estendidos do SRB são formatados como uma estrutura SRBEX_DATA_SCSI_CDB_VAR .
SrbExDataTypeWmi
Os dados estendidos do SRB são formatados como uma estrutura de SRBEX_DATA_WMI .
SrbExDataTypePower
Os dados estendidos do SRB são formatados como uma estrutura SRBEX_DATA_POWER .
SrbExDataTypePnp
Os dados estendidos do SRB são formatados como uma estrutura SRBEX_DATA_PNP .
SrbExDataTypeIoInfo
Os dados estendidos do SRB são formatados como uma estrutura SRBEX_DATA_IO_INFO .

Length

Comprimento dos dados SRB, em bytes, presentes no membro Dados .

Data[ANYSIZE_ARRAY]

O conteúdo estendido do bloco de dados SRB.

Comentários

Os dados estendidos do SRB estão presentes quando a matriz SrbExDataOffset na estrutura STORAGE_REQUEST_BLOCK contém locais de deslocamento válidos. Um driver de armazenamento inicialmente faz referência a um local de deslocamento de memória contido em SrbExDataOffset como uma estrutura SRBEX_DATA . Um ponteiro para o bloco de dados é convertido no tipo de estrutura apropriado com base no valor do tipo de dados no membro Type .

O fragmento de código de exemplo a seguir mostra como acessar os dados estendidos para uma função SRB de SRB_FUNCTION_PNP.

BOOLEAN CheckIo( _In_ PSCSI_REQUEST_BLOCK Srb)
{
    BOOLEAN result = TRUE;
    ULONG function;
    PSTORAGE_REQUEST_BLOCK SrbEx = (PSTORAGE_REQUEST_BLOCK)Srb;
    PSRBEX_DATA SrbExData = NULL;

    function = (SrbEx->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK) ? SrbEx->SrbFunction : Srb->Function;

    switch (function)
    {
        case SRB_FUNCTION_PNP:
        {
            STOR_PNP_ACTION PnpAction;
            BOOLEAN ForAdapter;

            if (SrbEx->Function == SRB_FUNCTION_STORAGE_REQUEST_BLOCK)
            {
                PSRBEX_DATA_PNP SrbExDataPnp = NULL;

                SrbExData = (PSRBEX_DATA) ((PUCHAR)SrbEx + SrbEx->SrbExDataOffset[0]);
                if (SrbExData->Type == SrbExDataTypePnp)
                {
                    SrbExDataPnp = (PSRBEX_DATA_PNP) SrbExData;
                    ForAdapter = (SrbExDataPnp->SrbPnPFlags == SRB_PNP_FLAGS_ADAPTER_REQUEST);
                    PnpAction = SrbExDataPnp->PnPAction;
                }
                else
                {
                    ForAdapter = FALSE;
                    result = FALSE;
                }
            }
            else
            {
                PSCSI_PNP_REQUEST_BLOCK PnpSrb = (PSCSI_PNP_REQUEST_BLOCK)Srb;

                ForAdapter = (PnpSrb->SrbPnPFlags == SRB_PNP_FLAGS_ADAPTER_REQUEST);
                PnpAction = PnpSrb->PnPAction;
           }

           if (ForAdapter)
           {
               switch (PnpAction)
               {
                   case StorRemoveDevice:
                       //
                       // ...
                       //
                       Srb->SrbStatus = SRB_STATUS_SUCCESS;
                       break;

                   default:
                       Srb->SrbStatus = SRB_STATUS_INVALID_REQUEST;
                       result = FALSE;
                       break:
            }
        }

        default:
            break; 
    }

    return result;
}

Requisitos

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

Confira também

SRBEX_DATA_BIDIRECTIONAL

SRBEX_DATA_IO_INFO

SRBEX_DATA_PNP

SRBEX_DATA_POWER

SRBEX_DATA_SCSI_CDB16

SRBEX_DATA_SCSI_CDB32

SRBEX_DATA_SCSI_CDB_VAR

SRBEX_DATA_WMI