Поделиться через


Функция AddPrinterDriverEx

Функция AddPrinterDriverEx устанавливает локальный или удаленный драйвер принтера и связывает файлы конфигурации, данных и драйверов. Помимо возможностей AddPrinterDriver, он также имеет параметры, которые позволяют строго обновлять, строго переходить на более раннюю версию, копировать только новые файлы и копировать все файлы (независимо от меток времени файлов).

Примечание

Установка драйвера принтера без пакета драйверов больше не рекомендуется. Вместо этого используйте InstallPrinterDriverFromPackage .

Синтаксис

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

Параметры

pName [in]

Указатель на строку, завершающуюся значением NULL, которая указывает имя сервера, на котором должен быть установлен драйвер. Если этот параметр имеет значение NULL, функция устанавливает драйвер на локальном компьютере.

Level [in]

Версия структуры, на которую указывает pDriverInfo . Это значение может быть 2, 3, 4, 6 или 8.

pDriverInfo [вход, выход]

Указатель на структуру, содержащую сведения о драйвере принтера. Это может быть один из следующих вариантов.

Значение уровня Структура DRIVER_INFO_*
2
DRIVER_INFO_2
3
DRIVER_INFO_3
4
DRIVER_INFO_4
6
DRIVER_INFO_6
8
DRIVER_INFO_8

Если элемент pEnvironment структуры, на который указывает pDriverInfo , имеет значение NULL, функция использует текущую среду вызывающего объекта или клиента, а не среду назначения или сервера.

dwFileCopyFlags [in]

Параметры для копирования файлов драйверов. Этот параметр может принимать одно из указанных ниже значений.

Значение Значение
APD_COPY_ALL_FILES
Добавьте драйвер принтера и скопируйте все файлы в каталог printer-driver. Метки времени файла игнорируются при использовании этого параметра.
APD_COPY_FROM_DIRECTORY
Добавьте драйвер принтера, используя полные имена файлов, указанные в структуре DRIVER_INFO_6 . Этот флаг является ORed в сочетании с одним из других флагов копирования. Если этот флаг установлен, AddPrinterDriverEx завершится ошибкой, если файлы не существуют там, где они указаны для существования в структуре DRIVER_INFO_6 . Файлы не нужно копировать в системный каталог драйвера принтера. См. примечания.
Windows 2000: Этот флаг не поддерживается.
APD_COPY_NEW_FILES
Добавьте драйвер принтера и скопируйте в каталог printer-driver файлы, которые новее всех соответствующих файлов, используемых в настоящее время. Этот флаг эмулирует поведение AddPrinterDriver.
APD_STRICT_DOWNGRADE
Добавьте драйвер принтера, только если все файлы в каталоге printer-driver старше всех соответствующих файлов, используемых в настоящее время.
APD_STRICT_UPGRADE
Добавьте драйвер принтера, только если все файлы в каталоге printer-driver новее всех соответствующих файлов, используемых в настоящее время.

Возвращаемое значение

Если функция выполнена успешно, возвращаемое значение будет ненулевым.

Если функция выполняется неудачно, возвращается нулевое значение.

Если известно, что драйвер принтера не работает с операционной системой, addPrinterDriverEx завершится ошибкой с одним из следующих кодов ошибок:

Код ошибки Значение
ERROR_PRINTER_DRIVER_BLOCKED Драйвер не работает в операционной системе.
ERROR_PRINTER_DRIVER_WARNED Драйвер ненадежный в операционной системе. Однако если указано APD_INSTALL_WARNED_DRIVER, драйвер устанавливается и предупреждение не выводится.

Дополнительные сведения см. в разделе «Примечания».

Комментарии

Примечание

Это блокирующая или синхронная функция, возвращаемая не сразу. Скорость возврата этой функции зависит от факторов времени выполнения, таких как состояние сети, конфигурация сервера печати и факторы реализации драйвера принтера, которые трудно предсказать при написании приложения. Вызов этой функции из потока, который управляет взаимодействием с пользовательским интерфейсом, может привести к тому, что приложение не отвечает.

Вызывающий объект должен иметь SeLoadDriverPrivilege.

Перед вызовом функции AddPrinterDriverEx все файлы, необходимые драйверу, должны быть скопированы в системный каталог printer-driver. Чтобы получить имя этого каталога, вызовите функцию GetPrinterDriverDirectory .

Чтобы определить, какие драйверы принтеров установлены в данный момент, вызовите функцию EnumPrinterDrivers .

Если драйвер принтера успешно добавлен, функция вызывает функцию DrvDriverEvent (DRIVER_EVENT_INITIALIZE, Level, DRIVER_INFO_*, lparam), чтобы разрешить драйверу выполнять инициализацию, необходимую во время установки драйвера принтера. Дополнительные сведения о DrvDriverEvent см. в пакете microsoft Windows Driver Development Kit (DDK)

Драйвер не должен использовать вызов пользовательского интерфейса во время вызова DrvDriverEvent. Для выполнения заданий, связанных с пользовательским интерфейсом, установщик должен либо использовать запись VendorSetup в INF-файле принтера, либо для Plug and Play устройств установщик может использовать совместное установщик для конкретного устройства. Дополнительные сведения о VendorSetup см. в разделе DDK.

Файлы, на которые ссылается структура DRIVER_INFO_6 , должны быть локальными для компьютера, с которого выполняется вызов. Имя файла может быть UNC-именем, если UNC-имя является локальным компьютером.

Требования

Требование Значение
Минимальная версия клиента
Windows 2000 Professional [только классические приложения]
Минимальная версия сервера
Windows 2000 Server [только классические приложения]
Заголовок
Winspool.h (включая Windows.h)
Библиотека
Winspool.lib
DLL
Winspool.drv
Имя в кодировке Юникод и ANSI
AddPrinterDriverExW (Юникод) и AddPrinterDriverExA (ANSI)

См. также раздел

Вывод на печать

Функции API очереди печати принтера

AddPrinterDriver

DRIVER_INFO_2

DRIVER_INFO_3

DRIVER_INFO_4

DRIVER_INFO_6

DeletePrinterDriverEx

EnumPrinterDrivers

GetPrinterDriverDirectory