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 elimina l'istanza quando il driver viene chiuso. Le istanze del driver sono particolarmente utili per i driver installabili che supportano più dispositivi o che vengono 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 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 che hanno allocato in modo specifico 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 dell'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 riesce a completare la configurazione o allocare memoria, restituisce zero per indirizzare il sistema a rimuovere immediatamente il driver dalla memoria e impedire l'invio di messaggi successivi. Quando si elabora il messaggio di DRV_ENABLE, il driver prepara l'hardware per ricevere e elaborare richieste di input e output (I/O). La preparazione può includere l'installazione dei gestori di interruzioni.

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 ottenere l'accesso rapido alla memoria contenente informazioni sull'istanza specificata.

Molti driver installabili elaborano il secondo parametro del messaggio di DRV_OPEN, fornendo al sistema e alle applicazioni il mezzo per inviare informazioni aggiuntive al driver quando si apre 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 è 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 viene chiusa un'istanza. L'handle dell'istanza inviato con il messaggio identifica l'istanza da chiudere. Quando l'ultima istanza rimanente viene chiusa, il sistema invia i messaggi di DRV_CLOSE, DRV_DISABLE e DRV_FREE in tale ordine. Il messaggio DRV_CLOSE indirizza il driver a chiudere l'istanza e i messaggi di DRV_DISABLE e DRV_FREE notificano al driver che è ora disabilitato e verrà immediatamente liberato dalla memoria.

Quando si elabora il messaggio di DRV_CLOSE, il driver libera in genere qualsiasi memoria o risorsa allocata per l'istanza. Quando si elabora il messaggio DRV_DISABLE, il driver inserisce qualsiasi hardware in uno stato inattivo, che può includere la rimozione dei gestori di interruzioni. 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 .