CM_RESOURCE_LIST struttura (wdm.h)

La struttura CM_RESOURCE_LIST specifica tutte le risorse hardware di sistema assegnate a un dispositivo.

Sintassi

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

Members

Count

Numero di descrittori di risorse completi specificati da questa struttura CM_RESOURCE_LIST . Il membro List è l'intestazione del primo descrittore completo della risorsa. Per i driver WDM, Count è sempre 1.

List[1]

Struttura CM_FULL_RESOURCE_DESCRIPTOR che funge da intestazione per il primo descrittore completo della risorsa. Se la struttura CM_RESOURCE_LIST contiene più descrittori di risorse completi, il secondo descrittore di risorse completo segue immediatamente il primo in memoria e così via. Le dimensioni di ogni descrittore di risorse complete dipendono dalla lunghezza della matrice CM_PARTIAL_RESOURCE_DESCRIPTOR che contiene. Per ulteriori informazioni, vedere la sezione Osservazioni successiva.

Commenti

Questa struttura descrive l'assegnazione di risorse hardware a un dispositivo. Un IRP_MN_START_DEVICE IRP usa questa struttura per specificare le risorse assegnate dal gestore Plug and Play a un dispositivo. I driver per i dispositivi legacy usano questa struttura per passare i requisiti delle risorse alla routine IoReportResourceForDetection . Per altre informazioni sull'allocazione delle risorse hardware, vedere Risorse hardware.

La struttura CM_RESOURCE_LIST è un'intestazione per una struttura di dati più grande, di dimensioni variabili, che contiene uno o più descrittori di risorse completi. Tutti i dati in questa struttura più grande occupano un blocco contiguo di memoria. Ogni descrittore di risorse completo occupa un blocco secondario all'interno del blocco più grande.

Un descrittore completo della risorsa inizia con una struttura CM_FULL_RESOURCE_DESCRIPTOR , che funge da intestazione per una matrice di strutture CM_PARTIAL_RESOURCE_DESCRIPTOR . La lunghezza di questa matrice determina le dimensioni del descrittore completo della risorsa. L'ultimo membro della struttura CM_FULL_RESOURCE_DESCRIPTOR è una struttura CM_PARTIAL_RESOURCE_LIST che contiene, come ultimo membro, il primo elemento di questa matrice. Se la matrice contiene più di un elemento, gli elementi rimanenti seguono immediatamente, in memoria, la fine della strutturaCM_PARTIAL_RESOURCE_LIST, che è anche la fine della struttura CM_FULL_RESOURCE_DESCRIPTOR.

Il codice driver può usare l'aritmetica puntatore per passare da un descrittore di risorse completo al successivo. Ad esempio, se un parametro denominato list è un puntatore alla struttura CM_FULL_RESOURCE_DESCRIPTOR all'inizio di un descrittore di risorse completo, l'elenco può essere aggiornato per puntare all'inizio del descrittore completo della risorsa successiva come indicato di seguito:

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

In questo esempio, list->PartialResourceList.PartialDescriptors è un puntatore all'inizio della matrice di CM_PARTIAL_RESOURCE_DESCRIPTOR ed list->PartialResourceList.Count è il numero di elementi nella matrice. Per altre informazioni sui membri PartialDescriptors e Count , vedere CM_PARTIAL_RESOURCE_LIST.

Esempio

Tutti i driver PnP devono gestire IRP_MN_START_DEVICE IRP. In genere, il gestore di un driver per questa IRP illustra gli elenchi di risorse assegnate a cui puntano parametri.StartDevice.AllocateResources e Parameters.StartDevice.AllocateResourcesTranslate membri della struttura IO_STACK_LOCATION nell'IRP. L'esempio di codice seguente contiene una funzione, denominata GetAssignedResources, chiamata nel gestore per la procedura dettagliata di ogni elenco. Questa funzione verifica che le risorse necessarie siano specificate nell'elenco e configura il dispositivo per l'uso delle risorse.

La funzione GetAssignedResources restituisce TRUE se ha esito positivo. In caso contrario, restituisce FALSE (probabilmente dall'istruzione switch , anche se i dettagli vengono omessi per semplificare l'esempio di codice).

/* 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;
}

Requisiti

Requisito Valore
Intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h, Wudfwdm.h)

Vedi anche

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