Функция 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 [только классические приложения] |
Заголовок |
|
Библиотека |
|
DLL |
|
Имя в кодировке Юникод и ANSI |
AddPrinterDriverExW (Юникод) и AddPrinterDriverExA (ANSI) |