Terminalserverdruck

Wichtig

Ab dem WDK für Windows 11 Version 22H2 werden verteilbare WDF-Co-Installer nicht mehr unterstützt. Informationen zum Umgang mit dieser Änderung finden Sie unter WDF Redistributable Co-Installer funktionieren nicht im Artikel bekannte WDK-Probleme .

Microsoft Windows unterstützt Terminaldienste, eine Technologie, die es mehreren Benutzern ermöglicht, eine Verbindung mit einem einzelnen Serversystem herzustellen. Dieses Serversystem wird als Terminalserver bezeichnet. Eine ausführliche Erläuterung der Terminaldienste finden Sie in der Dokumentation zum Windows SDK.

Wenn Sie einen Drucker-Minidriver oder -Treiber für Windows entwickeln, müssen Sie nichts Besonderes tun, um Drucker zu unterstützen, die mit Terminalservern verbunden sind. Sie müssen jedoch alle Entwurfs-, Implementierungs- und Installationsrichtlinien befolgen, die im Windows Driver Kit (WDK) angegeben sind. Insbesondere müssen Sie die folgenden Regeln verwenden:

Der gesamte benutzerdefinierte Treibercode muss erneut bereitgestellt werden. Benutzermoduscode sollte kritische Abschnittsobjekte verwenden (in der Windows SDK-Dokumentation beschrieben). Kernelmoduscode sollte Semaphore verwenden (siehe EngCreateSemaphore und verwandte Funktionen).

Druckertreiber und benutzerdefinierte Spoolerkomponenten müssen nur über Schnittstellen auf die Registrierung zugreifen, die speziell für diese Treiber und Spoolerkomponenten bereitgestellt werden, wie in den entsprechenden Abschnitten des WDK beschrieben.

Überlegungen zur Installation

Normalerweise müssen Sie für die Installation lediglich eine INF-Datei bereitstellen, die vom Druckerklasseninstallationsprogramm von Microsoft gelesen werden kann, wenn ein Benutzer den Assistenten zum Hinzufügen des Druckers aufruft. Manchmal ist auch benutzerdefinierter Setupcode (ein Co-Installer oder ein Klasseninstallationsprogramm) erforderlich. Wenn Sie benutzerdefinierten Setupcode erstellen müssen, denken Sie an Folgendes:

  • Entweder der Benutzer oder der Setupcode muss den Terminalserver in den Installationsmodus versetzen. (Weitere Informationen finden Sie in der Microsoft Windows SDK-Dokumentation.)

  • Versuchen Sie nicht, Systemdateien zu ersetzen. Der Windows-Dateischutz verhindert den Austausch von Systemdateien.

  • Vermeiden Sie es, systemneustarts so weit wie möglich zu erfordern. Verwenden Sie die folgenden Richtlinien:

    1. Ersetzen Sie keine Treiberdateien, die sich nicht geändert haben. Beispielsweise sollten Dateien, die von mehreren Geräten gemeinsam genutzt werden, nicht aktualisiert werden, wenn die aktuellste Version bereits installiert ist.

    2. Wenn eine Datei ersetzt werden muss, sollte der Setupcode Schritte ausführen, um die alte Version zu entladen und dann die neue Version zu laden (z. B. durch Beenden des Treiberdiensts, Ersetzen der Datei und neustarten des Diensts).

    3. Es ist vorzuziehen, dass ein Benutzer sich abmelden und dann erneut anmelden muss, wenn ein Systemneustart erforderlich ist.

Weitere Informationen zu Co-Installern und Klasseninstallationsprogrammen finden Sie unter Schreiben von Klasseninstallationsprogrammen und Co-Installern.

Bevor Sie benutzerdefinierten Setupcode schreiben, ist es wichtig, die Programmierrichtlinien für Terminaldienste in der Dokumentation zum Windows SDK zu lesen.

Überlegungen zur Benutzeroberfläche

Benutzerdefinierter Setupcode, der von einem Benutzer ausgeführt wird, kann eine Benutzeroberfläche anzeigen.

Fast der gesamte Druckertreibercode wird im Ausführungskontext des Spoolers ausgeführt und kann daher keine Benutzeroberfläche anzeigen. Benutzeroberflächen können nur von Druckerschnittstellen-DLLs und nur aus den folgenden Funktionen angezeigt werden:

Der gesamte andere Druckertreibercode wird im Spoolerkontext ausgeführt. In diesem Kontext ist das Aufrufen von MessageBox oder MessageBoxEx zulässig, Sie müssen jedoch MB_SERVICE_NOTIFICATION festlegen. Diese Funktionen werden in der Dokumentation zum Windows SDK beschrieben.