структура SRBEX_DATA (srb.h)

Структура SRBEX_DATA — это обобщенный формат для хранения расширенных данных SRB.

примечание модели драйверов портов SCSI и мини-порта SCSI могут быть изменены или недоступны в будущем. Вместо этого мы рекомендуем использовать драйвера Storport и минипорта Storport модели драйверов.
 

Синтаксис

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

Члены

Type

Индикатор типа данных для расширенной структуры данных SRB. Возможные значения для типа являются одним из следующих значений.

Ценность Значение
SrbExDataTypeUnknown
Расширенный тип данных SRB неизвестен.
SrbExDataTypeBidirectional
Расширенные данные SRB форматируются как структура SRBEX_DATA_BIDIRECTIONAL.
SrbExDataTypeScsiCdb16
Расширенные данные SRB форматируются как структура SRBEX_DATA_SCSI_CDB16.
SrbExDataTypeScsiCdb32
Расширенные данные SRB форматируются как структура SRBEX_DATA_SCSI_CDB32.
SrbExDataTypeScsiCdbVar
Расширенные данные SRB форматируются как структура SRBEX_DATA_SCSI_CDB_VAR.
SrbExDataTypeWmi
Расширенные данные SRB форматируются как структура SRBEX_DATA_WMI.
SrbExDataTypePower
Расширенные данные SRB форматируются как структура SRBEX_DATA_POWER.
SrbExDataTypePnp
Расширенные данные SRB форматируются как структура SRBEX_DATA_PNP.
SrbExDataTypeIoInfo
Расширенные данные SRB форматируются как структура SRBEX_DATA_IO_INFO.

Length

Длина данных SRB в байтах, присутствующих в элементе Data.

Data[ANYSIZE_ARRAY]

Расширенное содержимое блока данных SRB.

Замечания

Расширенные данные SRB присутствуют, когда массив SrbExDataOffset в структуреSTORAGE_REQUEST_BLOCK содержит допустимые расположения смещения. Драйвер хранилища изначально ссылается на расположение смещения памяти, содержащееся в SrbExDataOffset в виде структуры SRBEX_DATA. Затем указатель на блок данных приводится к соответствующему типу структуры на основе значения типа данных в элементе типа.

В следующем примере фрагмента кода показано, как получить доступ к расширенным данным для функции SRB 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;
}

Требования

Требование Ценность
минимальные поддерживаемые клиентские Доступно начиная с Windows 8.
заголовка srb.h (include Storport.h, Srb.h, Minitape.h)

См. также

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