Configurazione automatica durante l'installazione del dispositivo
Nella figura seguente viene illustrato il flusso di dati nella configurazione automatica quando viene installato un dispositivo.
Quando viene installata una stampante, lo spooler inizializza il driver chiamando
DrvPrinterEvent
e passando PRINTER_EVENT_INITIALIZE nella chiamata.Il driver usa interfacce di comunicazione bidi per ottenere i dati di interesse, inclusi i valori per le opzioni installabili, ad esempio \Printer.Configuration.DuplexUnit:Installed e \Printer.Configuration.HardDisk:Installed.
L'interfaccia di comunicazione bidi esegue una query sul monitoraggio della porta per i valori di questi attributi. Il monitoraggio delle porte potrebbe avere alcuni dei dati richiesti nella cache. A scopo illustrativo nei passaggi seguenti, si supponga che il valore per \Printer.Configuration.HardDisk:Installed si trova nella cache del monitor della porta, ma il valore per \Printer.Configuration.DuplexUnit:Installed non è.
Se il monitoraggio della porta ha una cache e ha salvato uno o più dei valori richiesti in esso, il monitoraggio della porta restituisce questi valori all'interfaccia di comunicazione bidi. Per eventuali valori non presenti nella cache, il monitoraggio delle porte restituisce ERROR_NO_DATA. Si noti che una query bidi può non riuscire se il monitoraggio della porta implementa una cache, ma la cache è vuota. Per evitare questo problema, il monitoraggio della porta deve inviare una notifica all'interfaccia di comunicazione bidi quando viene popolata la cache.
L'interfaccia di comunicazione bidi passa le informazioni ricevute dal monitoraggio della porta al driver. Se la chiamata dall'interfaccia di comunicazione bidi al monitor della porta genera un errore per qualsiasi motivo, il driver deve impostare i valori predefiniti per questi attributi. Non appena il monitoraggio delle porte riceve informazioni sugli attributi richiesti, deve inviare una notifica contenente queste informazioni all'interfaccia di comunicazione bidi.
Il driver aggiorna il Registro di sistema con il valore per \Printer.Configuration.HardDisk:Installed (ottenuto dalla cache del monitor della porta) e il valore predefinito per \Printer.Configuration.DuplexUnit:Installed.
Il monitoraggio delle porte esegue una query sul dispositivo per entrambi i valori, incluso il valore memorizzato nella cache (\Printer.Configuration.HardDisk:Installed).
Il dispositivo invia i relativi valori per gli attributi sottoposti a query al monitoraggio della porta. Per qualsiasi attributo il cui valore non era già presente nella cache o il cui valore differisce da quello nella cache, il monitoraggio della porta inserisce il nuovo valore nella cache.
Il monitoraggio della porta invia al spooler una notifica contenente tutti i valori che in precedenza non erano nella cache o che sono stati modificati. In questo esempio, il monitoraggio della porta invia una notifica al spooler sul nuovo valore per \Printer.Configuration.DuplexUnit:Installed. Si noti che se il valore memorizzato nella cache è lo stesso del nuovo valore ricevuto dal dispositivo, il monitoraggio della porta non invia una notifica al spooler.
Il spooler risponde alla notifica dal monitoraggio della porta chiamando
DrvPrinterEvent
, passando PRINTER_EVENT_CONFIGURATION_UPDATE oltre alle informazioni su tutti i valori modificati nella chiamata. Questa azione serve due scopi: per notificare al driver il valore di qualsiasi attributo il cui valore è stato inserito nella cache per la prima volta o il cui valore è stato modificato (\Printer.Configuration.DuplexUnit:Installed, in questo esempio); per aggiornare il Registro di sistema. Per ogni stampante, lo spooler serializza le chiamate aDrvPrinterEvent
, in modo che il driver non debba essere thread-safe.Poiché le informazioni sul dispositivo vengono archiviate nel Registro di sistema, il driver può soddisfare le chiamate per aggiornare le funzionalità dell'interfaccia utente o del dispositivo senza dover comunicare direttamente con il dispositivo fisico. Il driver può essere certo che le informazioni archiviate nel Registro di sistema siano corrette, perché le notifiche di modifica attivano il driver per eseguire query sul dispositivo e aggiornare lo stato di configurazione del dispositivo.
Il driver aggiorna l'interfaccia utente in base alla configurazione più recente.
Il driver può determinare quando si è verificata una modifica durante l'installazione del dispositivo, perché il messaggio di notifica trasporta il valore modificato. Tuttavia, se la notifica è troppo grande da inviare tramite il meccanismo di notifica, la notifica avrà una o più istanze di ReducedSchema, ognuna delle quali indica che una caratteristica del dispositivo è cambiata, ma senza alcun dettaglio del nuovo valore.