Condividi tramite


Risorse hardware

Le risorse hardware sono i percorsi del bus assegnabili e indirizzabili che consentono ai dispositivi periferici e ai processori di sistema di comunicare tra loro. Le risorse hardware in genere includono indirizzi di porta di I/O, vettori di interruzione e blocchi di indirizzi di memoria relativi al bus.

Prima che il sistema possa comunicare con un'istanza del dispositivo, il gestore PnP deve assegnare risorse hardware all'istanza del dispositivo in base alla conoscenza delle risorse disponibili e di quelle che l'istanza del dispositivo è in grado di usare. Le risorse vengono assegnate a ogni nodo del dispositivo nell'albero dei dispositivi (presupponendo che il dispositivo rappresentato richieda risorse e tali risorse siano disponibili). Il gestore PnP tiene traccia delle risorse hardware usando elenchi, associati ai nodi del dispositivo. Usa due tipi di elenchi:

Elenco dei requisiti delle risorse
I dispositivi sono in genere progettati per funzionare all'interno di intervalli di assegnazioni di risorse. Ad esempio, un dispositivo potrebbe richiedere un solo vettore di interruzione, ma potrebbe essere in grado di usare uno qualsiasi intervallo di vettori. Per ogni istanza del dispositivo, gestione PnP gestisce un elenco dei requisiti di risorsa che specifica tutti gli intervalli di risorse hardware in cui il dispositivo può funzionare. Il nome dell'elenco deriva dal fatto che la gestione PnP è necessaria per scegliere le risorse da questo elenco durante l'assegnazione al dispositivo.

Il codice in modalità kernel specifica gli elenchi dei requisiti delle risorse usando le strutture IO_RESOURCE_REQUIREMENTS_LIST (come input per le routine di sistema o in risposta agli indirizzi IRP). Il codice in modalità utente specifica gli elenchi dei requisiti delle risorse usando le strutture di gestione configurazione PnP come input per le funzioni di gestione configurazione PnP.

Elenco risorse
Quando il gestore PnP assegna risorse a un dispositivo, tiene traccia di queste assegnazioni creando un elenco di risorse assegnate per ogni istanza del dispositivo. Questi elenchi possono essere chiamati elenchi di assegnazione delle risorse, ma questo nome è in genere abbreviato negli elenchi di risorse. Il gestore PnP può modificare il contenuto dell'elenco di risorse quando i dispositivi vengono aggiunti o rimossi da un sistema e le risorse vengono successivamente riallocati. Le risorse possono essere assegnate anche da un BIOS PnP. Inoltre, il software di installazione, usando i file INF o l'input utente, può forzare l'assegnazione di risorse specifiche a un dispositivo.

Il codice in modalità kernel specifica gli elenchi di risorse usando le strutture CM_RESOURCE_LIST (come input per le routine di sistema o in risposta agli indirizzi IRP). Il codice in modalità utente specifica gli elenchi di risorse usando le strutture di gestione configurazione PnP come input per le funzioni di gestione configurazione PnP.

Il gestore PnP archivia gli elenchi di risorse e gli elenchi di risorse nel Registro di sistema, in cui possono essere visualizzati usando Regedit.exe. I driver possono accedere a questi elenchi indirettamente tramite routine Plug and Play e Plug and Play irP secondari. Le applicazioni in modalità utente possono usare funzioni di gestione configurazione PnP. I driver e le applicazioni non devono accedere direttamente a questi elenchi usando funzioni del Registro di sistema perché il formato di archiviazione è soggetto a modifiche in una versione futura.

Configurazioni logiche

Entrambi gli elenchi di requisiti delle risorse e gli elenchi di risorse contengono una o più configurazioni logiche. Ogni configurazione logica identifica un intervallo di risorse accettabili o un set di risorse specifiche per un'istanza specifica del dispositivo. Inoltre, ogni configurazione logica per un'istanza del dispositivo appartiene a uno dei tipi di configurazione logici. Di seguito sono elencati i tipi di configurazione. Diverse configurazioni logiche, dello stesso tipo o di tipi diversi, possono essere assegnate a ogni istanza del dispositivo.

Tipi di configurazione logica per gli elenchi dei requisiti delle risorse

Configurazione di base
Elenco dei requisiti delle risorse che identificano gli intervalli di risorse forniti da un dispositivo Plug and Play. Un driver deve restituire questo elenco quando riceve l'IRP_MN_QUERY_RESOURCE_REQUIREMENTS IRP. La configurazione di base per un dispositivo non PnP può essere descritta in un file INF. In questo caso, il software di installazione del dispositivo legge il file INF e chiama le funzioni di gestione configurazione PnP per creare un elenco dei requisiti.

Configurazione filtrata
Elenco dei requisiti delle risorse fornito a uno stack di driver, eventualmente modificato, restituito dallo stack di driver, in risposta all'IRP_MN_FILTER_RESOURCE_REQUIREMENTS IRP. Il gestore PnP usa la configurazione filtrata risultante come base per l'allocazione delle risorse.

Eseguire l'override della configurazione
Elenco dei requisiti delle risorse che esegue l'override delle configurazioni di base. In genere, un programma di installazione del dispositivo crea una configurazione di override se il file INF del dispositivo include una sezione INF DDInstall.LogConfigOverride. Una configurazione di override non viene rimossa se il dispositivo viene rimosso fisicamente dal sistema.

Tipi di configurazione logica per elenchi di risorse

Configurazione di avvio
Elenco di risorse che identifica le risorse assegnate a un'istanza del dispositivo quando il sistema viene avviato. Per i dispositivi PnP, questa è la configurazione fornita dal BIOS. Per i dispositivi non PnP, queste risorse potrebbero essere selezionate dai jumper sulla scheda. Un driver deve restituire questo elenco di risorse quando riceve l'IRP_MN_QUERY_RESOURCES IRP. Una configurazione di avvio può essere parzialmente vuota se il BIOS non può determinare tutte le risorse usate da un dispositivo. Il gestore PnP può modificare questo elenco se un dispositivo viene rimosso o riavviato. Per i dispositivi non PnP, questo tipo di configurazione può essere usato anziché una configurazione forzata, in tal caso ha una priorità di configurazione inferiore rispetto a una configurazione forzata equivalente. Per ogni istanza del dispositivo può esistere una sola configurazione di avvio.

Configurazione forzata
Elenco di risorse che identifica le risorse che un'istanza del dispositivo deve usare. Una configurazione forzata impedisce alla gestione PnP di assegnare altre risorse all'istanza del dispositivo. Un programma di installazione del dispositivo può creare una configurazione forzata in base alle informazioni contenute in un INF o ricevute da un utente. Una configurazione forzata non viene rimossa se il dispositivo viene rimosso fisicamente dal sistema. Per ogni istanza del dispositivo può esistere una sola configurazione forzata.

Configurazione allocata
Elenco di risorse che identifica le risorse attualmente in uso da un'istanza del dispositivo. Per ogni istanza del dispositivo può esistere una sola configurazione allocata.

I driver di dispositivo sono responsabili della determinazione della configurazione di base del dispositivo compatibile con PnP, della configurazione filtrata e della configurazione di avvio e per la restituzione di tali informazioni in risposta agli INDIRIZZI di rete inviati dal gestore PnP. Per altre informazioni, vedere Aggiunta di un dispositivo PnP a un sistema in esecuzione. Il software di installazione driver può creare configurazioni di override, configurazioni forzate e, per dispositivi non PnP, configurazioni di avvio. Il gestore PnP gestisce la configurazione allocata di ogni istanza del dispositivo.

Una priorità viene assegnata a ogni configurazione quando viene creata. Se il gestore PnP rileva che un'istanza del dispositivo è stata assegnata a diverse configurazioni logiche dello stesso tipo, tenta di usare quella con la priorità più alta prima. Se tale configurazione comporta conflitti di risorse, prova la configurazione con la priorità inferiore successiva. Per un elenco delle priorità di configurazione, vedere CM_Add_Empty_Log_Conf.