struktur CM_RESOURCE_LIST (wdm.h)

Struktur CM_RESOURCE_LIST menentukan semua sumber daya perangkat keras sistem yang ditetapkan ke perangkat.

Sintaks

typedef struct _CM_RESOURCE_LIST {
  ULONG                       Count;
  CM_FULL_RESOURCE_DESCRIPTOR List[1];
} CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;

Anggota

Count

Jumlah deskriptor sumber daya lengkap yang ditentukan oleh struktur CM_RESOURCE_LIST ini. Anggota Daftar adalah header untuk pendeskripsi sumber daya lengkap pertama. Untuk driver WDM, Count selalu 1.

List[1]

Struktur CM_FULL_RESOURCE_DESCRIPTOR yang berfungsi sebagai header untuk deskriptor sumber daya lengkap pertama. Jika struktur CM_RESOURCE_LIST berisi lebih dari satu deskriptor sumber daya lengkap, deskriptor sumber daya lengkap kedua segera mengikuti yang pertama dalam memori, dan sebagainya. Ukuran setiap deskriptor sumber daya lengkap tergantung pada panjang array CM_PARTIAL_RESOURCE_DESCRIPTOR yang dikandungnya. Untuk informasi selengkapnya, lihat bagian Keterangan berikut ini.

Keterangan

Struktur ini menjelaskan penugasan sumber daya perangkat keras ke perangkat. IRP IRP_MN_START_DEVICE menggunakan struktur ini untuk menentukan sumber daya yang ditetapkan manajer Plug and Play ke perangkat. Driver untuk perangkat warisan menggunakan struktur ini untuk meneruskan persyaratan sumber daya mereka ke rutinitas IoReportResourceForDetection . Untuk informasi selengkapnya tentang alokasi sumber daya perangkat keras, lihat Sumber Daya Perangkat Keras.

Struktur CM_RESOURCE_LIST adalah header untuk struktur data yang lebih besar, dengan ukuran variabel, yang berisi satu atau beberapa deskriptor sumber daya lengkap. Semua data dalam struktur yang lebih besar ini menempati blok memori yang berdampingan. Setiap deskriptor sumber daya lengkap menempati subblok dalam blok yang lebih besar.

Deskriptor sumber daya lengkap dimulai dengan struktur CM_FULL_RESOURCE_DESCRIPTOR , yang berfungsi sebagai header untuk array struktur CM_PARTIAL_RESOURCE_DESCRIPTOR . Panjang array ini menentukan ukuran deskriptor sumber daya lengkap. Anggota terakhir dalam struktur CM_FULL_RESOURCE_DESCRIPTOR adalah struktur CM_PARTIAL_RESOURCE_LIST yang berisi, sebagai anggota terakhirnya, elemen pertama dalam array ini. Jika array berisi lebih dari satu elemen, elemen yang tersisa segera mengikuti, dalam memori, akhir struktur CM_PARTIAL_RESOURCE_LIST , yang juga merupakan akhir dari struktur CM_FULL_RESOURCE_DESCRIPTOR .

Kode driver dapat menggunakan aritmatika penunjuk untuk melangkah dari satu deskriptor sumber daya lengkap ke deskriptor sumber daya berikutnya. Misalnya, jika parameter bernama daftar adalah penunjuk ke struktur CM_FULL_RESOURCE_DESCRIPTOR di awal satu deskriptor sumber daya lengkap, daftar dapat diperbarui untuk menunjuk ke awal pendeskripsi sumber daya lengkap berikutnya sebagai berikut:

list = (PCM_FULL_RESOURCE_DESCRIPTOR)(list->PartialResourceList.PartialDescriptors +
                                        list->PartialResourceList.Count);

Dalam contoh ini, list->PartialResourceList.PartialDescriptors adalah penunjuk ke awal array CM_PARTIAL_RESOURCE_DESCRIPTOR , dan list->PartialResourceList.Count merupakan jumlah elemen dalam array. Untuk informasi selengkapnya tentang anggota PartialDescriptors dan Count , lihat CM_PARTIAL_RESOURCE_LIST.

Contoh

Semua driver PnP harus menangani runtime integrasi IRP_MN_START_DEVICE . Biasanya, handler driver untuk IRP ini memandu daftar sumber daya yang ditetapkan yang ditujukan oleh Parameters.StartDevice.AllocatedResources dan Parameters.StartDevice.AllocatedResourcesTranslated anggota struktur IO_STACK_LOCATION di IRP. Contoh kode berikut berisi fungsi—bernama GetAssignedResources—yang dipanggil di handler untuk memandu setiap daftar. Fungsi ini memverifikasi bahwa sumber daya yang diperlukan ditentukan dalam daftar, dan mengonfigurasi perangkat untuk menggunakan sumber daya.

Fungsi GetAssignedResources mengembalikan TRUE jika berhasil. Jika tidak, ia mengembalikan FALSE (mungkin dari pernyataan pengalihan , meskipun detailnya dihilangkan untuk menyederhanakan contoh kode).

/* Process the assigned hardware resources. */

BOOLEAN GetAssignedResources(PCM_RESOURCE_LIST reslist)
{
    PCM_FULL_RESOURCE_DESCRIPTOR list;

    list = reslist->List;

    for (int ix = 0; ix < reslist->Count; ++ix)
    {
        /* Process resources in CM_FULL_RESOURCE_DESCRIPTOR block number ix. */

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

            desc = list->PartialResourceList.PartialDescriptors + jx;

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

                ...

            }
        }

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

        list = (PCM_FULL_RESOURCE_DESCRIPTOR)(list->PartialResourceList.PartialDescriptors + 
                                              list->PartialResourceList.Count);
    }

    return TRUE;
}

Persyaratan

Persyaratan Nilai
Header wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h, Wudfwdm.h)

Lihat juga

CM_FLOPPY_DEVICE_DATA

CM_FULL_RESOURCE_DESCRIPTOR

CM_KEYBOARD_DEVICE_DATA

CM_PARTIAL_RESOURCE_LIST

CM_RESOURCE_LIST

CM_SCSI_DEVICE_DATA

CM_SERIAL_DEVICE_DATA

IRP_MN_START_DEVICE

IoConnectInterrupt

IoGetDeviceProperty

IoReportResourceForDetection