Compartilhar via


estrutura SRBEX_DATA (srb.h)

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

Observação o driver de porta SCSI e os modelos de driver de miniporto SCSI podem estar alterados ou indisponíveis no futuro. Em vez disso, recomendamos usar o de driver do Storport e miniporto storport modelos de driver.
 

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 SRB são formatados como uma estrutura de SRBEX_DATA_BIDIRECTIONAL.
SrbExDataTypeScsiCdb16
Os dados estendidos do SRB são formatados como uma estrutura de SRBEX_DATA_SCSI_CDB16.
SrbExDataTypeScsiCdb32
Os dados estendidos do SRB são formatados como uma estrutura de SRBEX_DATA_SCSI_CDB32.
SrbExDataTypeScsiCdbVar
Os dados estendidos SRB são formatados como uma estrutura de SRBEX_DATA_SCSI_CDB_VAR.
SrbExDataTypeWmi
Os dados estendidos SRB são formatados como uma estrutura de SRBEX_DATA_WMI.
SrbExDataTypePower
Os dados estendidos SRB são formatados como uma estrutura de SRBEX_DATA_POWER.
SrbExDataTypePnp
Os dados estendidos SRB são formatados como uma estrutura de SRBEX_DATA_PNP.
SrbExDataTypeIoInfo
Os dados estendidos do SRB são formatados como uma estrutura de SRBEX_DATA_IO_INFO.

Length

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

Data[ANYSIZE_ARRAY]

O conteúdo estendido do bloco de dados SRB.

Observações

Os dados estendidos SRB estão presentes quando o 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 de 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 tipo.

O fragmento de código de exemplo a seguir mostra como acessar os dados estendidos para a 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
de cliente com suporte mínimo Disponível a partir do Windows 8.
cabeçalho srb.h (incluem Storport.h, Srb.h, Minitape.h)

Consulte 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