struktur SRBEX_DATA (minitape.h)

Struktur SRBEX_DATA adalah format umum untuk berisi data SRB yang diperluas.

Catatan Driver port SCSI dan model driver miniport SCSI dapat diubah atau tidak tersedia di masa mendatang. Sebagai gantinya, sebaiknya gunakan driver Storport dan model driver miniport Storport .
 

Sintaks

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

Anggota

Type

Indikator jenis data untuk struktur data SRB yang diperluas. Nilai yang mungkin untuk Jenis adalah salah satu dari yang berikut ini.

Nilai Makna
SrbExDataTypeUnknown
Jenis data yang diperluas SRB tidak diketahui.
SrbExDataTypeBidirectional
Data yang diperluas SRB diformat sebagai struktur SRBEX_DATA_BIDIRECTIONAL .
SrbExDataTypeScsiCdb16
Data yang diperluas SRB diformat sebagai struktur SRBEX_DATA_SCSI_CDB16 .
SrbExDataTypeScsiCdb32
Data yang diperluas SRB diformat sebagai struktur SRBEX_DATA_SCSI_CDB32 .
SrbExDataTypeScsiCdbVar
Data yang diperluas SRB diformat sebagai struktur SRBEX_DATA_SCSI_CDB_VAR .
SrbExDataTypeWmi
Data yang diperluas SRB diformat sebagai struktur SRBEX_DATA_WMI .
SrbExDataTypePower
Data yang diperluas SRB diformat sebagai struktur SRBEX_DATA_POWER .
SrbExDataTypePnp
Data yang diperluas SRB diformat sebagai struktur SRBEX_DATA_PNP .
SrbExDataTypeIoInfo
Data yang diperluas SRB diformat sebagai struktur SRBEX_DATA_IO_INFO .

Length

Panjang data SRB, dalam byte, ada di anggota Data .

Data[ANYSIZE_ARRAY]

Konten blok data SRB yang diperluas.

Keterangan

Data yang diperluas SRB ada ketika array SrbExDataOffset dalam struktur STORAGE_REQUEST_BLOCK berisi lokasi offset yang valid. Driver penyimpanan awalnya mereferensikan lokasi offset memori yang terkandung dalam SrbExDataOffset sebagai struktur SRBEX_DATA . Penunjuk ke blok data kemudian ditransmisikan ke jenis struktur yang sesuai berdasarkan nilai jenis data di anggota Jenis .

Contoh fragmen kode berikut menunjukkan cara mengakses data yang diperluas untuk fungsi 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;
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Tersedia dimulai dengan Windows 8.
Header minitape.h (termasuk Storport.h, Srb.h, Minitape.h)

Lihat juga

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