struktur IO_RESOURCE_REQUIREMENTS_LIST (miniport.h)

Struktur IO_RESOURCE_REQUIREMENTS_LIST menjelaskan serangkaian konfigurasi sumber daya yang dapat digunakan oleh perangkat. Setiap konfigurasi mewakili berbagai sumber daya mentah, dari berbagai jenis, yang dapat digunakan oleh perangkat.

Sintaks

typedef struct _IO_RESOURCE_REQUIREMENTS_LIST {
  ULONG            ListSize;
  INTERFACE_TYPE   InterfaceType;
  ULONG            BusNumber;
  ULONG            SlotNumber;
  ULONG            Reserved[3];
  ULONG            AlternativeLists;
  IO_RESOURCE_LIST List[1];
} IO_RESOURCE_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST;

Anggota

ListSize

Jumlah total byte yang merupakan struktur IO_RESOURCE_REQUIREMENTS_LIST , array IO_RESOURCE_LIST , dan array IO_RESOURCE_DESCRIPTOR yang terakhir.

InterfaceType

Menentukan jenis antarmuka. Ini harus menjadi salah satu jenis yang ditentukan oleh INTERFACE_TYPE, dalam Wdm.h atau Ntddk.h. (Tidak digunakan oleh driver WDM.)

BusNumber

Nomor bus berbasis nol yang ditetapkan sistem. (Tidak digunakan oleh driver WDM.)

SlotNumber

Nomor slot sistem. (Tidak digunakan oleh driver WDM.)

Reserved[3]

Tidak digunakan.

AlternativeLists

Jumlah daftar alternatif (atau konfigurasi) sumber daya perangkat keras yang dijelaskan oleh struktur IO_RESOURCE_REQUIREMENTS_LIST ini. Anggota Daftar adalah header untuk daftar alternatif pertama.

List[1]

Struktur IO_RESOURCE_LIST yang berfungsi sebagai header untuk daftar alternatif pertama sumber daya perangkat keras. Jika struktur IO_RESOURCE_REQUIREMENTS_LIST menjelaskan lebih dari satu daftar alternatif, daftar alternatif kedua segera mengikuti daftar alternatif pertama dalam memori, dan sebagainya. Ukuran setiap daftar alternatif tergantung pada panjang array IO_RESOURCE_DESCRIPTOR yang dikandungnya. Untuk informasi selengkapnya, lihat bagian Keterangan berikut ini.

Keterangan

Struktur ini digunakan oleh runtime integrasi IRP_MN_FILTER_RESOURCE_REQUIREMENTS dan IRP_MN_QUERY_RESOURCE_REQUIREMENTS untuk menjelaskan satu atau beberapa konfigurasi alternatif sumber daya perangkat keras.

Struktur IO_RESOURCE_REQUIREMENTS_LIST adalah header untuk struktur data yang lebih besar, dengan ukuran variabel, yang menentukan satu atau beberapa daftar sumber daya alternatif. Semua data dalam struktur yang lebih besar ini menempati blok memori yang berdampingan, yang ukurannya ditentukan oleh anggota ListSize . Setiap daftar alternatif menempati subblokir dalam blok yang lebih besar.

Setiap daftar alternatif dimulai dengan struktur IO_RESOURCE_LIST , yang berfungsi sebagai header untuk array struktur IO_RESOURCE_DESCRIPTOR . Panjang array ini menentukan ukuran daftar, yang dapat bervariasi dari satu daftar alternatif ke daftar berikutnya. Kode driver dapat menggunakan aritmatika penunjuk untuk melangkah dari satu daftar alternatif ke daftar berikutnya. Misalnya, jika parameter bernama daftar adalah penunjuk ke struktur IO_RESOURCE_LIST di awal satu daftar alternatif, daftar dapat diperbarui untuk menunjuk ke awal daftar berikutnya sebagai berikut:

list = (PIO_RESOURCE_LIST)(list->Descriptors + list->Count);

Dalam contoh ini, list->Descriptors adalah penunjuk ke awal array IO_RESOURCE_DESCRIPTOR , dan list->Count merupakan jumlah elemen dalam array. Untuk informasi selengkapnya tentang Deskriptor dan Menghitung anggota, lihat IO_RESOURCE_LIST.

Contoh

Jika driver berisi handler untuk IRP IRP_MN_FILTER_RESOURCE_REQUIREMENTS , handler biasanya memandu daftar sumber daya yang ditujukan oleh bidang IoStatus.Information di IRP. Contoh kode berikut berisi fungsi—bernama FilterResources—yang dipanggil di handler untuk memandu daftar. Fungsi ini memverifikasi bahwa sumber daya tertentu ditentukan dalam daftar, atau mengubah persyaratan sumber daya dalam daftar tanpa mengubah ukuran daftar. (Fungsi yang mengubah ukuran daftar perlu mengalokasikan buffer untuk daftar yang diperbarui, menulis daftar ke buffer ini, memperbarui bidang IoStatus.Information di IRP untuk menunjuk ke daftar yang diperbarui, dan membebaskan buffer yang berisi daftar asli.)

Fungsi FilterResources mengembalikan TRUE (mungkin dari pernyataan pengalihan , meskipun detailnya dihilangkan untuk menyederhanakan contoh kode) jika menemukan sumber daya yang dicari dalam daftar, atau jika membuat perubahan pada daftar yang tidak mengubah ukuran daftar. Jika tidak, ia mengembalikan FALSE.

/* Modify the resource list in place (without changing its size). */

BOOLEAN FilterResources(PIO_RESOURCE_REQUIREMENTS_LIST reqlist)
{
    PIO_RESOURCE_LIST list;

    list = reqlist->List;

    for (int ix = 0; ix < reqlist->AlternativeLists; ++ix)
    {
        /* Process resources in IO_RESOURCE_LIST block number ix. */

        for (int jx = 0; jx < list->Count; ++jx)
        {
            PIO_RESOURCE_DESCRIPTOR desc; 

            desc = list->Descriptors + jx;

            switch (desc->Type)
            {
               /* Process element jx in Descriptors array. */

               ...

            }
        }

        /* Advance to next IO_RESOURCE_LIST block in memory. */

        list = (PIO_RESOURCE_LIST)(list->Descriptors + list->Count);
    }

    return FALSE;
}

Persyaratan

Persyaratan Nilai
Header miniport.h (termasuk Wdm.h, Ntddk.h, Ntifs.h, Miniport.h)

Lihat juga

IO_RESOURCE_DESCRIPTOR

IO_RESOURCE_LIST

IRP_MN_FILTER_RESOURCE_REQUIREMENTS

IRP_MN_QUERY_RESOURCE_REQUIREMENTS