Freigeben über


SRBEX_DATA-Struktur (srb.h)

Die SRBEX_DATA-Struktur ist das generalisierte Format für das Enthalten erweiterter SRB-Daten.

Hinweis Der SCSI-Porttreiber und die SCSI-Miniporttreibermodelle sind möglicherweise geändert oder in Zukunft nicht mehr verfügbar. Stattdessen wird empfohlen, die Modelle Storport-Treiber und Storport-Miniporttreiber zu verwenden.
 

Syntax

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

Member

Type

Datentypindikator für die erweiterte SRB-Datenstruktur. Die möglichen Werte für Type sind einer der folgenden:

Wert Bedeutung
SrbExDataTypeUnknown
Der erweiterte SRB-Datentyp ist unbekannt.
SrbExDataTypeBidirectional
Die erweiterten SRB-Daten sind als SRBEX_DATA_BIDIRECTIONAL-Struktur formatiert.
SrbExDataTypeScsiCdb16
Die erweiterten SRB-Daten sind als SRBEX_DATA_SCSI_CDB16-Struktur formatiert.
SrbExDataTypeScsiCdb32
Die erweiterten SRB-Daten sind als SRBEX_DATA_SCSI_CDB32-Struktur formatiert.
SrbExDataTypeScsiCdbVar
Die erweiterten SRB-Daten sind als SRBEX_DATA_SCSI_CDB_VAR-Struktur formatiert.
SrbExDataTypeWmi
Die erweiterten SRB-Daten sind als SRBEX_DATA_WMI-Struktur formatiert.
SrbExDataTypePower
Die erweiterten SRB-Daten sind als SRBEX_DATA_POWER-Struktur formatiert.
SrbExDataTypePnp
Die erweiterten SRB-Daten sind als SRBEX_DATA_PNP-Struktur formatiert.
SrbExDataTypeIoInfo
Die erweiterten SRB-Daten sind als SRBEX_DATA_IO_INFO-Struktur formatiert.

Length

Länge der SRB-Daten in Bytes, die im Data-Element vorhanden sind.

Data[ANYSIZE_ARRAY]

Der inhalt des erweiterten SRB-Datenblocks.

Hinweise

Die erweiterten SRB-Daten sind vorhanden, wenn das SrbExDataOffset-Array in der STORAGE_REQUEST_BLOCK-Struktur gültige Offsetspeicherorte enthält. Ein Speichertreiber verweist zunächst auf einen Speicheroffsetspeicherort, der in SrbExDataOffset enthalten ist, als SRBEX_DATA-Struktur . Ein Zeiger auf den Datenblock wird dann basierend auf dem Datentypwert im Type-Member in den entsprechenden Strukturtyp umgewandelt.

Das folgende Beispielcodefragment zeigt den Zugriff auf die erweiterten Daten für die SRB-Funktion von 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;
}

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar ab Windows 8.
Kopfzeile srb.h (einschließlich Storport.h, Srb.h, Minitape.h)

Weitere Informationen

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