Bagikan melalui


struktur SCSI_ADAPTER_BUS_INFO (ntddscsi.h)

Struktur SCSI_ADAPTER_BUS_INFO digunakan bersama dengan permintaan IOCTL_SCSI_GET_INQUIRY_DATA untuk mengambil data pertanyaan SCSI untuk semua perangkat pada bus SCSI tertentu.

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 _SCSI_ADAPTER_BUS_INFO {
  UCHAR         NumberOfBuses;
  SCSI_BUS_DATA BusData[1];
} SCSI_ADAPTER_BUS_INFO, *PSCSI_ADAPTER_BUS_INFO;

Anggota

NumberOfBuses

Berisi jumlah bus pada adaptor tempat data pertanyaan dilaporkan.

BusData[1]

Berisi array panjang variabel dari struktur SCSI_BUS_DATA yang menyimpan data pertanyaan.

Keterangan

SCSI_ADAPTER_BUS_INFO adalah struktur header yang menjelaskan tata letak buffer output permintaan IOCTL_SCSI_GET_INQUIRY_DATA . Permintaan ini mengembalikan data pertanyaan SCSI untuk semua unit logis pada semua bus yang terkait dengan adaptor bus host SCSI (HBA) tertentu. Anggota BusData dari SCSI_ADAPTER_BUS_INFO berisi array panjang variabel struktur SCSI_BUS_DATA . Array ini memiliki satu elemen untuk setiap bus SCSI pada adaptor, sehingga ukurannya sama dengan jumlah bus yang ditunjukkan dalam anggota NumberOfBuses SCSI_ADAPTER_BUS_INFO.

Dalam kebanyakan kasus, NumberOfBuses akan memiliki nilai 1. Bus SCSI awal dibatasi hingga 36 target (bukan batas saat ini sebesar 128), sehingga beberapa vendor memproduksi HBA dengan beberapa bus, untuk meningkatkan jumlah maksimum target. Untuk mendukung HBA yang lebih lama ini, Windows menyediakan mekanisme untuk mengambil data pertanyaan dari HBA dengan beberapa bus. Untuk adaptor dengan satu bus, NumberOfBuses akan menjadi satu, dan anggota BusData dari SCSI_ADAPTER_BUS_INFO hanya akan memiliki satu elemen, tetapi HBA dengan beberapa bus akan menghasilkan data untuk beberapa struktur SCSI_BUS_DATA, dan NumberOfBuses akan lebih besar dari 1.

Segera setelah array di BusData adalah data pertanyaan untuk semua perangkat di semua bus milik HBA. Anggota InquiryDataOffset dari setiap struktur SCSI_BUS_DATA menyediakan offset ke data pertanyaan untuk bus SCSI yang sesuai.

Data pertanyaan untuk setiap bus SCSI mencakup informasi tentang semua unit logis di bus tersebut. Setiap data pertanyaan unit logis diformat dalam struktur jenis SCSI_INQUIRY_DATA, dan semua struktur SCSI_INQUIRY_DATA untuk bus tertentu ditautkan bersama oleh anggota NextInquiryDataOffset . Akan ada daftar terpisah untuk setiap bus SCSI, dan anggota NextInquiryDataOffset dari struktur terakhir di setiap daftar berisi nilai nol.

Contoh pseudocode berikut menggambarkan cara melangkah melalui bus SCSI pada HBA, dan unit logis untuk setiap bus, membaca dan mencetak data pertanyaan untuk setiap unit logis:

VOID
PrintInquiryData(PCHAR  DataBuffer)
{
    PSCSI_ADAPTER_BUS_INFO  adapterInfo;
    PSCSI_INQUIRY_DATA inquiryData;
    ULONG i, j;

    adapterInfo = (PSCSI_ADAPTER_BUS_INFO) DataBuffer;
    for (i = 0; i < adapterInfo->NumberOfBuses; i++) {
       inquiryData = (PSCSI_INQUIRY_DATA) (DataBuffer +
          adapterInfo->BusData[i].InquiryDataOffset);
       while (adapterInfo->BusData[i].InquiryDataOffset) {
          printf(" %d   %d  %3d    %s    %.28s ",
             i,
             inquiryData->TargetId,
             inquiryData->Lun,
             (inquiryData->DeviceClaimed) ? "Y" : "N",
             &inquiryData->InquiryData[8]);
          for (j = 0; j < 8; j++) {
             printf("%02X ", inquiryData->InquiryData[j]);
          }
          printf("\n");
          if (inquiryData->NextInquiryDataOffset == 0) {
             break;
          }
          inquiryData = (PSCSI_INQUIRY_DATA) (DataBuffer +
             inquiryData->NextInquiryDataOffset);
       }
    }
    printf("\n\n");
}

Anda harus menggunakan anggota NextInquiryDataOffset untuk menemukan data pertanyaan untuk unit logis berikutnya. Jangan mencoba melakukan ini dengan aritmatika pointer. Posisi setiap struktur SCSI_INQUIRY_DATA berpotensi berbeda untuk setiap driver miniport HBA, karena tergantung pada persyaratan penyelarasan data.

Persyaratan

Persyaratan Nilai
Header ntddscsi.h (termasuk Ntddscsi.h)

Lihat juga

IOCTL_SCSI_GET_INQUIRY_DATA

SCSI_BUS_DATA

SCSI_INQUIRY_DATA