Automatische Konfiguration während der Geräteinstallation
Die folgende Abbildung zeigt den Datenfluss in der automatischen Konfiguration, wenn ein Gerät installiert ist.
Wenn ein Drucker installiert ist, initialisiert der Spooler den Treiber, indem er PRINTER_EVENT_INITIALIZE im Aufruf aufruft
DrvPrinterEvent
und übergibt.Der Treiber verwendet bidi-Kommunikationsschnittstellen , um die für ihn relevanten Daten abzurufen, einschließlich Werten für installierbare Optionen wie \Printer.Configuration.DuplexUnit:Installed und \Printer.Configuration.HardDisk:Installed.
Die bidi-Kommunikationsschnittstelle fragt den Portmonitor nach Werten dieser Attribute ab. Der Portmonitor enthält möglicherweise einige der angeforderten Daten im Cache. Nehmen Sie zur Veranschaulichung in den folgenden Schritten an, dass sich der Wert für \Printer.Configuration.HardDisk:Installed im Cache des Portmonitors befindet, der Wert für \Printer.Configuration.DuplexUnit:Installed jedoch nicht.
Wenn der Portmonitor über einen Cache verfügt und mindestens einen der angeforderten Werte darin gespeichert hat, gibt der Portmonitor diese Werte an die Bidi-Kommunikationsschnittstelle zurück. Für alle Werte, die sich nicht im Cache befinden, gibt der Portmonitor ERROR_NO_DATA zurück. Beachten Sie, dass bei einer bidi-Abfrage ein Fehler auftreten kann, wenn der Portmonitor einen Cache implementiert, der Cache jedoch leer ist. Um dieses Problem zu vermeiden, sollte der Portmonitor die bidi-Kommunikationsschnittstelle benachrichtigen, wenn der Cache aufgefüllt ist.
Die bidi-Kommunikationsschnittstelle übergibt die vom Portmonitor empfangenen Informationen an den Treiber. Wenn der Aufruf von der bidi-Kommunikationsschnittstelle an den Portmonitor aus irgendeinem Grund zu einem Fehler führt, sollte der Treiber Standardwerte für diese Attribute festlegen. Sobald der Portmonitor Informationen zu den angeforderten Attributen empfängt, sollte er eine Benachrichtigung mit diesen Informationen an die bidi-Kommunikationsschnittstelle senden.
Der Treiber aktualisiert die Registrierung mit dem Wert für \Printer.Configuration.HardDisk:Installed (abgerufen aus dem Cache des Portmonitors) und dem Standardwert für \Printer.Configuration.DuplexUnit:Installed.
Der Portmonitor fragt das Gerät nach beiden Werten ab, einschließlich des zwischengespeicherten Werts (\Printer.Configuration.HardDisk:Installed).
Das Gerät sendet seine Werte für die abgefragten Attribute an den Portmonitor. Für jedes Attribut, dessen Wert noch nicht im Cache vorhanden war oder dessen Wert sich von dem im Cache unterscheidet, platziert der Portmonitor den neuen Wert in seinem Cache.
Der Portmonitor sendet eine Benachrichtigung an den Spooler, die alle Werte enthält, die sich zuvor nicht im Cache befanden oder die sich geändert haben. In diesem Beispiel sendet der Portmonitor eine Benachrichtigung an den Spooler über den neuen Wert für \Printer.Configuration.DuplexUnit:Installed. Beachten Sie, dass der Portmonitor keine Benachrichtigung an den Spooler sendet, wenn der zwischengespeicherte Wert mit dem neuen Wert übereinstimmt, der vom Gerät empfangen wurde.
Der Spooler antwortet auf die Benachrichtigung vom Portmonitor, indem er aufruft
DrvPrinterEvent
, PRINTER_EVENT_CONFIGURATION_UPDATE zusätzlich zu Informationen zu allen geänderten Werten im Aufruf übergibt. Diese Aktion dient zwei Zwecken: Um den Treiber über den Wert eines Attributs zu benachrichtigen, dessen Wert zum ersten Mal im Cache platziert wurde oder dessen Wert sich geändert hat (\Printer.Configuration.DuplexUnit:Installed, in diesem Beispiel); , um die Registrierung zu aktualisieren. Für jeden Drucker serialisiert der Spooler seine Aufrufe anDrvPrinterEvent
, sodass der Treiber nicht threadsicher sein muss.Da Geräteinformationen in der Registrierung gespeichert werden, kann der Treiber Aufrufe zum Aktualisieren von Benutzeroberflächen- oder Gerätefunktioneninformationen erfüllen, ohne direkt mit dem physischen Gerät kommunizieren zu müssen. Der Treiber kann sicher sein, dass die in der Registrierung gespeicherten Informationen korrekt sind, da Änderungsbenachrichtigungen den Treiber auslösen, um das Gerät abzufragen und den Gerätekonfigurationsstatus zu aktualisieren.
Der Treiber aktualisiert die Benutzeroberfläche gemäß der neuesten Konfiguration.
Der Treiber kann bestimmen, wann während der Geräteinstallation eine Änderung aufgetreten ist, da die Benachrichtigung den geänderten Wert enthält. Wenn die Benachrichtigung jedoch zu groß ist, um über den Benachrichtigungsmechanismus gesendet zu werden, verfügt die Benachrichtigung über eine oder mehrere ReducedSchema-Instanzen, von denen jede angibt, dass sich ein Gerätemerkmal geändert hat, jedoch ohne Details zu seinem neuen Wert.