Freigeben über


AddPrinterDriverEx-Funktion

Die AddPrinterDriverEx-Funktion installiert einen lokalen oder Remotedruckertreiber und verknüpft die Konfigurations-, Daten- und Treiberdateien. Neben den Funktionen von AddPrinterDriver verfügt es auch über Optionen, die ein striktes Upgrade, striktes Downgrade, nur das Kopieren neuerer Dateien und das Kopieren aller Dateien (unabhängig von Dateizeitstempeln) ermöglichen.

Hinweis

Die Installation eines Druckertreibers ohne Treiberpaket wird nicht mehr empfohlen. Verwenden Sie stattdessen InstallPrinterDriverFromPackage .

Syntax

BOOL AddPrinterDriverEx(
  _In_    LPTSTR pName,
  _In_    DWORD  Level,
  _Inout_ LPBYTE pDriverInfo,
  _In_    DWORD  dwFileCopyFlags
);

Parameter

pName [in]

Ein Zeiger auf eine NULL-endende Zeichenfolge, die den Namen des Servers angibt, auf dem der Treiber installiert werden soll. Wenn dieser Parameter NULL ist, installiert die Funktion den Treiber auf dem lokalen Computer.

Ebene [in]

Die Version der Struktur, auf die pDriverInfo verweist. Dieser Wert kann 2, 3, 4, 6 oder 8 sein.

pDriverInfo [in, out]

Ein Zeiger auf eine Struktur, die Druckertreiberinformationen enthält. Dies kann einer der folgenden Sein:

Wert von Level DRIVER_INFO_*-Struktur
2
DRIVER_INFO_2
3
DRIVER_INFO_3
4
DRIVER_INFO_4
6
DRIVER_INFO_6
8
DRIVER_INFO_8

Wenn der pEnvironment-Member der Struktur, auf die pDriverInfo verweist, NULL ist, verwendet die Funktion die aktuelle Umgebung des Aufrufers/Clients, nicht die Umgebung des Ziels/Servers.

dwFileCopyFlags [in]

Die Optionen zum Kopieren der Treiberdateien. Dieser Parameter kann einen der folgenden Werte annehmen.

Wert Bedeutung
APD_COPY_ALL_FILES
Fügen Sie den Druckertreiber hinzu, und kopieren Sie alle Dateien im Verzeichnis printer-driver. Die Zeitstempel der Datei werden mit dieser Option ignoriert.
APD_COPY_FROM_DIRECTORY
Fügen Sie den Druckertreiber mithilfe der vollqualifizierten Dateinamen hinzu, die in der DRIVER_INFO_6-Struktur angegeben sind. Dieses Flag wird in Verbindung mit einem der anderen Kopierflags aufgehoben. Wenn dieses Flag festgelegt ist, schlägt AddPrinterDriverEx fehl, wenn die Dateien nicht vorhanden sind, wo sie von der DRIVER_INFO_6-Struktur als vorhanden angegeben werden. Die Dateien müssen nicht in das Verzeichnis printer-driver des Systems kopiert werden. Weitere Informationen finden Sie in den Hinweisen.
Windows 2000: Dieses Flag wird nicht unterstützt.
APD_COPY_NEW_FILES
Fügen Sie den Druckertreiber hinzu, und kopieren Sie die Dateien im Verzeichnis printer-driver, die neuer als alle entsprechenden Dateien sind, die derzeit verwendet werden. Dieses Flag emuliert das Verhalten von AddPrinterDriver.
APD_STRICT_DOWNGRADE
Fügen Sie den Druckertreiber nur hinzu, wenn alle Dateien im Verzeichnis printer-driver älter als die entsprechenden Dateien sind, die derzeit verwendet werden.
APD_STRICT_UPGRADE
Fügen Sie den Druckertreiber nur hinzu, wenn alle Dateien im Verzeichnis printer-driver neuer sind als die entsprechenden Dateien, die derzeit verwendet werden.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ein Wert ungleich null.

Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null.

Wenn bekannt ist, dass der Druckertreiber Probleme mit dem Betriebssystem hat, schlägt AddPrinterDriverEx mit einem der folgenden Fehlercodes fehl:

Fehlercode Bedeutung
ERROR_PRINTER_DRIVER_BLOCKED Der Treiber funktioniert nicht auf dem Betriebssystem.
ERROR_PRINTER_DRIVER_WARNED Der Treiber ist auf dem Betriebssystem unzuverlässig. Wenn jedoch APD_INSTALL_WARNED_DRIVER angegeben ist, wird der Treiber installiert, und es wird keine Warnung ausgegeben.

Weitere Informationen finden Sie in den Hinweisen.

Bemerkungen

Hinweis

Dies ist eine blockierende oder synchrone Funktion, die möglicherweise nicht sofort zurückgegeben wird. Wie schnell diese Funktion zurückgibt, hängt von Laufzeitfaktoren wie Netzwerk-status, Druckserverkonfiguration und Druckertreiberimplementierungsfaktoren ab, die beim Schreiben einer Anwendung schwer vorherzusagen sind. Das Aufrufen dieser Funktion aus einem Thread, der die Interaktion mit der Benutzeroberfläche verwaltet, könnte dazu führen, dass die Anwendung nicht mehr reagiert.

Der Aufrufer muss über das SeLoadDriverPrivilege verfügen.

Vor dem Aufrufen der AddPrinterDriverEx-Funktion müssen alle dateien, die vom Treiber benötigt werden, in das Verzeichnis printer-driver des Systems kopiert werden. Rufen Sie die GetPrinterDriverDirectory-Funktion auf, um den Namen dieses Verzeichnisses abzurufen.

Rufen Sie die Funktion EnumPrinterDrivers auf, um zu ermitteln, welche Druckertreiber derzeit installiert sind.

Wenn der Druckertreiber erfolgreich hinzugefügt wurde, ruft die Funktion DrvDriverEvent (DRIVER_EVENT_INITIALIZE, Level, DRIVER_INFO_*, lparam ) auf, damit der Treiber alle Initialisierungen ausführen kann, die während der Installation eines Druckertreibers erforderlich sind. Weitere Informationen zu DrvDriverEvent finden Sie im Microsoft Windows Driver Development Kit (DDK).

Der Treiber sollte während des Aufrufs von DrvDriverEvent keinen Benutzeroberflächenaufruf verwenden. Um UI-bezogene Aufträge zu erledigen, sollte das Installationsprogramm entweder den VendorSetup-Eintrag in der INF-Datei des Druckers verwenden, oder für Plug & Play Geräte kann das Installationsprogramm einen gerätespezifischen Co-Installer verwenden. Weitere Informationen zu VendorSetup finden Sie im DDK.

Die Dateien, auf die in der DRIVER_INFO_6-Struktur verwiesen wird, müssen auf dem Computer lokal sein, von dem aus der Aufruf erfolgt. Ein Dateiname kann ein UNC-Name sein, solange der UNC-Name der lokale Computer ist.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server)
Windows 2000 Server [nur Desktop-Apps]
Header
Winspool.h (Einschließen von Windows.h)
Bibliothek
Winspool.lib
DLL
Winspool.drv
Unicode- und ANSI-Name
AddPrinterDriverExW (Unicode) und AddPrinterDriverExA (ANSI)

Siehe auch

Drucken

Druckspooler-API-Funktionen

AddPrinterDriver

DRIVER_INFO_2

DRIVER_INFO_3

DRIVER_INFO_4

DRIVER_INFO_6

DeletePrinterDriverEx

EnumPrinterDriver

GetPrinterDriverDirectory