Istanze del driver

Windows consente più istanze di un driver installabile. Il sistema crea un'istanza del driver ogni volta che il driver viene aperto e distrugge l'istanza quando il driver viene chiuso. Le istanze del driver sono particolarmente utili per i driver installabili che supportano più dispositivi o aperti da più applicazioni o dalla stessa applicazione più volte.

Per consentire al driver di tenere traccia delle istanze, il sistema invia un handle di istanza del driver con ogni messaggio del driver dopo la creazione dell'istanza. Poiché questo handle identifica in modo univoco l'istanza, i driver installabili spesso associano l'handle alla memoria e ad altre risorse allocate specificamente per l'istanza.

Quando viene aperta la prima istanza, il sistema invia il DRV_LOAD, DRV_ENABLE e DRV_OPEN messaggi al driver in tale ordine. I messaggi DRV_LOAD e DRV_ENABLE notificano al driver che è ora in memoria ed è abilitato per l'operazione. Il messaggio DRV_OPEN identifica l'handle di istanza e può includere informazioni di configurazione per l'istanza. In ogni apertura successiva di un'istanza dello stesso driver, il sistema invia solo un messaggio di DRV_OPEN.

Quando si elabora un messaggio di DRV_LOAD, un driver legge in genere le impostazioni di configurazione dal Registro di sistema, configura il driver e qualsiasi hardware associato e alloca la memoria per l'uso da parte di tutte le istanze del driver. Se un driver non può completare la configurazione o allocare memoria, restituisce zero per indirizzare il sistema a rimuovere immediatamente il driver dalla memoria e impedire l'invio di eventuali messaggi successivi. Durante l'elaborazione del messaggio DRV_ENABLE, il driver prepara l'hardware per ricevere ed elaborare le richieste di input e output (I/O). La preparazione può includere l'installazione di gestori di interrupt.

Quando si elabora il messaggio di DRV_OPEN, il driver alloca memoria o risorse richieste dall'istanza specificata del driver e quindi restituisce un valore diverso da zero. Il sistema usa questo valore diverso da zero come identificatore del driver nei messaggi driver successivi per l'istanza. Il driver può usare questo identificatore per qualsiasi scopo. Ad esempio, alcuni driver usano un handle di memoria per l'identificatore per ottenere un accesso rapido alla memoria contenente informazioni sull'istanza specificata.

Molti driver installabili elaborano il secondo parametro del messaggio DRV_OPEN, fornendo al sistema e alle applicazioni il mezzo per inviare informazioni aggiuntive al driver all'apertura di un'istanza. Il parametro può essere un singolo valore o un indirizzo di una struttura contenente un set di valori. Quando si elabora DRV_OPEN, il driver controlla il parametro per determinare se si tratta di un valore e usa i valori specificati, se presenti, per completare la creazione dell'istanza.

Il sistema invia un messaggio DRV_CLOSE ogni volta che un'istanza viene chiusa. L'handle di istanza inviato con il messaggio identifica l'istanza da chiudere. Quando l'ultima istanza rimanente viene chiusa, il sistema invia i messaggi DRV_CLOSE, DRV_DISABLE e DRV_FREE in tale ordine. Il messaggio DRV_CLOSE indica al driver di chiudere l'istanza e i messaggi DRV_DISABLE e DRV_FREE notificano al driver che è ora disabilitato e verranno immediatamente liberati dalla memoria.

Quando si elabora il messaggio DRV_CLOSE, il driver libera in genere qualsiasi memoria o risorsa allocata per l'istanza. Durante l'elaborazione del messaggio di DRV_DISABLE, il driver inserisce qualsiasi hardware in uno stato inattivo, che può includere la rimozione dei gestori di interrupt. Quando si elabora il messaggio di DRV_FREE, il driver libera qualsiasi memoria o risorsa ancora allocata.

I driver installabili non sono necessari per supportare più istanze. Un driver può impedire la creazione di qualsiasi istanza restituendo zero per il messaggio di DRV_OPEN .