AddPrinter-Funktion

Die AddPrinter-Funktion fügt der Liste der unterstützten Drucker für einen angegebenen Server einen Drucker hinzu.

Syntax

HANDLE AddPrinter(
  _In_ LPTSTR *pName,
  _In_ DWORD  Level,
  _In_ LPBYTE pPrinter
);

Parameter

pName [in]

Ein Zeiger auf eine NULL-endende Zeichenfolge, die den Namen des Servers angibt, auf dem der Drucker installiert werden soll. Wenn diese Zeichenfolge NULL ist, wird der Drucker lokal installiert.

Ebene [in]

Die Version der Struktur, auf die pPrinter zeigt. Dieser Wert muss 2 sein.

pPrinter [in]

Ein Zeiger auf eine PRINTER_INFO_2 Struktur, die Informationen zum Drucker enthält. Sie müssen werte ungleich NULL für die pPrinterName-, pPortName-, pDriverName- und pPrintProcessor-Member dieser Struktur angeben, bevor Sie AddPrinter aufrufen.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ein Handle (nicht threadsicher) für ein neues Druckerobjekt. Wenn Sie mit dem Handle fertig sind, übergeben Sie es an die ClosePrinter-Funktion , um es zu schließen.

Wenn die Funktion fehlschlägt, ist der Rückgabewert NULL.

Bemerkungen

Rufen Sie diese Methode nicht in DllMain auf.

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.

Das zurückgegebene Handle ist nicht threadsicher. Wenn Aufrufer es gleichzeitig für mehrere Threads verwenden müssen, müssen sie mithilfe der Synchronisierungsfunktionen einen benutzerdefinierten Synchronisierungszugriff auf das Druckerhandle bereitstellen. Um das Schreiben von benutzerdefiniertem Code zu vermeiden, kann die Anwendung bei Bedarf ein Druckerhandle für jeden Thread öffnen.

Im Folgenden finden Sie die Member der PRINTER_INFO_2-Struktur , die festgelegt werden kann, bevor die AddPrinter-Funktion aufgerufen wird:

  • Attribute
  • pPrintProcessor
  • DefaultPriority
  • Priority
  • pKommentierung
  • pSecurityDescriptor
  • pDatatype
  • pSepFile
  • pDevMode
  • pShareName
  • pLocation
  • StartTime
  • pParameters
  • UntilTime

Die Member Status, cJobs und AveragePPM der PRINTER_INFO_2-Struktur sind für die Verwendung durch die GetPrinter-Funktion reserviert. Sie dürfen vor dem Aufruf von AddPrinter nicht festgelegt werden.

Wenn pSecurityDescriptorNULL ist, weist das System dem Drucker einen Standardsicherheitsdeskriptor zu. Der Standardsicherheitsdeskriptor verfügt über die folgenden Berechtigungen.

Wert Beschreibung
Administratoren und Hauptbenutzer Vollständige Kontrolle über die Druckwarteschlange. Dies bedeutet, dass Mitglieder dieser Gruppen die Warteschlange drucken, verwalten (kann die Warteschlange löschen, jede Einstellung der Warteschlange ändern, einschließlich der Sicherheitsbeschreibung), und die Druckaufträge aller Benutzer verwalten (Löschen, Anhalten, Fortsetzen, Neustarten). Beachten Sie, dass Power Users vor Windows XP Professional nicht vorhanden sind.
Ersteller/Besitzer Kann eigene Aufträge verwalten. Dies bedeutet, dass Benutzer, die Aufträge übermitteln, ihre eigenen Aufträge verwalten können (löschen, anhalten, fortsetzen, neu starten).
Jeder Ausführungs- und Standardlesesteuerung. Dies bedeutet, dass Mitglieder der Gruppe "Jeder" Eigenschaften der Druckwarteschlange drucken und lesen können.

Nachdem eine Anwendung ein Druckerobjekt mit der AddPrinter-Funktion erstellt hat, muss sie die PrinterProperties-Funktion verwenden, um die richtigen Einstellungen für den Druckertreiber anzugeben, der dem Druckerobjekt zugeordnet ist.

Die AddPrinter-Funktion gibt einen Fehler zurück, wenn bereits ein Druckerobjekt mit demselben Namen vorhanden ist, es sei denn, dieses Objekt ist als ausstehendes Löschen gekennzeichnet. In diesem Fall wird der vorhandene Drucker nicht gelöscht, und die AddPrinter-Erstellungsparameter werden verwendet, um die vorhandenen Druckereinstellungen zu ändern (als ob die Anwendung die SetPrinter-Funktion verwendet hätte).

Verwenden Sie die EnumPrintProcessors-Funktion , um die auf einem Server installierten Druckprozessoren aufzulisten. Verwenden Sie die EnumPrintProcessorDatatypes-Funktion , um den Satz von Datentypen aufzulisten, den ein Druckprozessor unterstützt. Verwenden Sie die EnumPorts-Funktion , um den Satz der verfügbaren Ports aufzulisten. Verwenden Sie die EnumPrinterDrivers-Funktion , um die installierten Druckertreiber aufzulisten.

Der Aufrufer der AddPrinter-Funktion muss SERVER_ACCESS_ADMINISTER Zugriff auf den Server haben, auf dem der Drucker erstellt werden soll. Das von der Funktion zurückgegebene Handle verfügt über PRINTER_ALL_ACCESS Berechtigung und kann zum Ausführen von Verwaltungsvorgängen auf dem Drucker verwendet werden.

Wenn die DrvPrinterEvent-Funktion das PRINTER_EVENT_FLAG_NO_UI-Flag übergeben wird, sollte der Treiber während drvPrinterEvent keinen Ui-Aufruf verwenden. Um UI-bezogene Aufträge zu erledigen, sollte das Installationsprogramm entweder den Eintrag VendorSetup 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 Microsoft Windows Driver Development Kit (DDK).

Die Internet Connection Firewall (ICF) blockiert standardmäßig Druckerports, aber eine Ausnahme für datei- und druckfreigabe ist aktiviert, wenn Sie AddPrinter ausführen.

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
AddPrinterW (Unicode) und AddPrinterA (ANSI)

Siehe auch

Drucken

Druckspooler-API-Funktionen

ClosePrinter

DeletePrinter

EnumPorts

EnumPrinterDrivers

EnumPrintProcessors

EnumPrintProcessorDatatypes

GetPrinter

PRINTER_INFO_2

PrinterProperties

SetPrinter