Share via


Función AddPrinterDriverEx

La función AddPrinterDriverEx instala un controlador de impresora local o remota y vincula los archivos de configuración, datos y controladores. Además de tener las funcionalidades de AddPrinterDriver, también tiene opciones que permiten una actualización estricta, una degradación estricta, la copia de archivos más recientes solo y la copia de todos los archivos (independientemente de las marcas de tiempo de archivo).

Nota:

Ya no se recomienda instalar un controlador de impresora sin un paquete de controladores. Use InstallPrinterDriverFromPackage en su lugar.

Sintaxis

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

Parámetros

pName [in]

Puntero a una cadena terminada en null que especifica el nombre del servidor en el que se debe instalar el controlador. Si este parámetro es NULL, la función instala el controlador en el equipo local.

Nivel [in]

Versión de la estructura a la que apunta pDriverInfo . Este valor puede ser 2, 3, 4, 6 o 8.

pDriverInfo [in, out]

Puntero a una estructura que contiene información del controlador de impresora. Puede ser uno de los siguientes.

Valor de Level DRIVER_INFO_* (Estructura)
2
DRIVER_INFO_2
3
DRIVER_INFO_3
4
DRIVER_INFO_4
6
DRIVER_INFO_6
8
DRIVER_INFO_8

Si el miembro pEnvironment de la estructura a la que apunta pDriverInfo es NULL, la función usa el entorno actual del autor de la llamada o cliente, no el entorno del destino o servidor.

dwFileCopyFlags [in]

Las opciones para copiar los archivos del controlador. Este parámetro puede ser uno de los valores siguientes.

Valor Significado
APD_COPY_ALL_FILES
Agregue el controlador de impresora y copie todos los archivos en el directorio printer-driver. Las marcas de tiempo de archivo se omiten con esta opción.
APD_COPY_FROM_DIRECTORY
Agregue el controlador de impresora con los nombres de archivo completos especificados en la estructura DRIVER_INFO_6 . Esta marca es ORed junto con una de las otras marcas de copia. Si se establece esta marca, Se producirá un error en AddPrinterDriverEx si los archivos no existen donde se especifican para que existan en la estructura de DRIVER_INFO_6 . No es necesario copiar los archivos en el directorio printer-driver del sistema. Vea los comentarios.
Windows 2000: Esta marca no se admite.
APD_COPY_NEW_FILES
Agregue el controlador de impresora y copie los archivos en el directorio printer-driver que son más recientes que los archivos correspondientes que están actualmente en uso. Esta marca emula el comportamiento de AddPrinterDriver.
APD_STRICT_DOWNGRADE
Agregue el controlador de impresora solo si todos los archivos del directorio printer-driver son más antiguos que los archivos correspondientes actualmente en uso.
APD_STRICT_UPGRADE
Agregue el controlador de impresora solo si todos los archivos del directorio printer-driver son más recientes que los archivos correspondientes actualmente en uso.

Valor devuelto

Si la función se ejecuta correctamente, el valor devuelto es un valor distinto de cero.

Si la función no se realiza correctamente, el valor devuelto es cero.

Si se sabe que el controlador de impresora tiene problemas para trabajar con el sistema operativo, AddPrinterDriverEx producirá uno de los siguientes códigos de error:

Código de error Significado
ERROR_PRINTER_DRIVER_BLOCKED El controlador no funciona en el sistema operativo.
ERROR_PRINTER_DRIVER_WARNED El controlador no es confiable en el sistema operativo. Sin embargo, si se especifica APD_INSTALL_WARNED_DRIVER, se instala el controlador y no se da ninguna advertencia.

Para obtener más información, vea la sección Notas.

Comentarios

Nota:

Se trata de una función de bloqueo o sincrónica que podría no devolverse inmediatamente. La rapidez con la que devuelve esta función depende de factores en tiempo de ejecución, como el estado de red, la configuración del servidor de impresión y los factores de implementación del controlador de impresora que son difíciles de predecir al escribir una aplicación. Llamar a esta función desde un subproceso que administra la interacción con la interfaz de usuario podría hacer que la aplicación parezca que no responde.

El autor de la llamada debe tener SeLoadDriverPrivilege.

Antes de llamar a la función AddPrinterDriverEx , todos los archivos requeridos por el controlador deben copiarse en el directorio printer-driver del sistema. Para recuperar el nombre de este directorio, llame a la función GetPrinterDriverDirectory .

Para determinar qué controladores de impresora están instalados actualmente, llame a la función EnumPrinterDrivers .

Si el controlador de impresora se ha agregado correctamente, la función llama a la función DrvDriverEvent (DRIVER_EVENT_INITIALIZE, Level, DRIVER_INFO_*, lparam ) para permitir que el controlador realice las inicializaciones necesarias durante la instalación de un controlador de impresora. Para obtener más información sobre DrvDriverEvent, consulte el Kit de desarrollo de controladores de Microsoft Windows (DDK)

El controlador no debe usar una llamada de interfaz de usuario durante la llamada a DrvDriverEvent. Para realizar trabajos relacionados con la interfaz de usuario, el instalador debe usar la entrada VendorSetup en el archivo .inf de la impresora o, para Plug and Play dispositivos, el instalador puede usar un co-instalador específico del dispositivo. Para obtener más información sobre VendorSetup, consulte DDK.

Los archivos a los que se hace referencia en la estructura DRIVER_INFO_6 deben ser locales en el equipo desde el que se realiza la llamada. Un nombre de archivo puede ser un nombre UNC siempre que el nombre UNC sea la máquina local.

Requisitos

Requisito Value
Cliente mínimo compatible
Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible
Windows 2000 Server [solo aplicaciones de escritorio]
Encabezado
Winspool.h (incluye Windows.h)
Biblioteca
Winspool.lib
Archivo DLL
Winspool.drv
Nombres Unicode y ANSI
AddPrinterDriverExW (Unicode) y AddPrinterDriverExA (ANSI)

Consulte también

Impresión

Funciones de la API del administrador de trabajos de impresión

AddPrinterDriver

DRIVER_INFO_2

DRIVER_INFO_3

DRIVER_INFO_4

DRIVER_INFO_6

DeletePrinterDriverEx

EnumPrinterDrivers

GetPrinterDriverDirectory