Función DrvConvertDevMode (winddiui.h)

La función DrvConvertDevMode de una interfaz de impresora convierte la estructura DEVMODEW de una impresora de una versión a otra.

Sintaxis

BOOL DrvConvertDevMode(
  [in]      LPTSTR   pPrinterName,
  [in]      PDEVMODE pdmIn,
  [out]     PDEVMODE pdmOut,
  [in, out] PLONG    pcbNeeded,
  [in]      DWORD    fMode
);

Parámetros

[in] pPrinterName

Puntero proporcionado por el autor de la llamada a una cadena de nombre de impresora. Para obtener más información sobre este parámetro, vea la siguiente sección Comentarios.

[in] pdmIn

Puntero proporcionado por el autor de la llamada a una estructura DEVMODEW de entrada. Si fMode es CDM_DRIVER_DEFAULT, este puntero es NULL.

[out] pdmOut

Puntero proporcionado por el autor de la llamada a un búfer para recibir una estructura DEVMODEW de salida. Si fMode es CDM_CONVERT el búfer contiene, en la entrada, una estructura DEVMODEW válida que indica la versión del controlador de destino.

[in, out] pcbNeeded

Puntero proporcionado por el autor de la llamada al tamaño, en bytes, del búfer al que apunta pdmOut. En la salida, el archivo DLL de la interfaz de impresora debe sobrescribir el valor de tamaño recibido con el tamaño real de la estructura DEVMODEW convertida. Si el búfer recibido es demasiado pequeño, el archivo DLL de la interfaz de impresora debe sobrescribir el valor de tamaño recibido con el tamaño de búfer necesario.

[in] fMode

Marca de bits proporcionada por el autor de la llamada que indica el tipo de operación que se va a realizar. Puede ser una de las marcas siguientes:

CDM_CONVERT

La función debe convertir el contenido de la estructura DEVMODEW de entrada (a la que apunta pdmIn) en una nueva estructura DEVMODEW y colocar el resultado en la estructura DEVMODEW a la que apunta pdmOut. El contenido inicial de la estructura DEVMODEW de salida recibida (a la que apunta pdmOut) se debe usar para determinar la versión de salida.

CDM_CONVERT351

La función debe convertir el contenido de la estructura DEVMODEW de entrada (a la que apunta pdmIn), creando una estructura DEVMODEW de salida compatible con Windows NT 3.51 y colocar el resultado en la estructura DEVMODEW a la que apunta pdmOut.

Si el controlador no admite una estructura DEVMODEW para Windows NT 3.51, la función debe convertir la entrada DEVMODEW a la versión actual.

CDM_DRIVER_DEFAULT

La función debe copiar la versión actual de su estructura DEVMODEW predeterminada en el búfer al que apunta pdmOut.

Valor devuelto

Si la operación se realiza correctamente, la función debe devolver TRUE; de lo contrario, debe llamar a SetLastError para establecer un código de error y devolver FALSE.

Comentarios

En un entorno de cliente o servidor, un cliente podría estar ejecutando una versión del sistema operativo o controlador de impresora mientras el servidor (cola de servidores) ejecuta otro, lo que significa que la definición de la estructura DEVMODEW de una impresora podría ser incoherente entre el cliente y el servidor. La función DrvConvertDevMode debe ser capaz de realizar conversiones de una versión de la estructura DEVMODEW de la impresora a otra.

Al convertir de una versión DEVMODEW a otra, se deben incluir los miembros DEVMODEW públicos y privados.

El nombre de la impresora al que apunta pPrinterName se puede usar como argumento de entrada para la función OpenPrinter (descrita en la documentación de Microsoft Windows SDK), a la que se puede llamar para obtener valores predeterminados almacenados cuando se recibe la marca CDM_DRIVER_DEFAULT. Tenga en cuenta que la cadena de nombre de impresora no debe modificarse de ninguna manera antes de una llamada a OpenPrinter. Además, una llamada a OpenPrinter debe estar en el mismo subproceso que se usó para llamar a DrvConvertDevMode.

La función debe comprobar que tanto pdmIn como pdmOut (si procede) apunten a estructuras DEVMODEW válidas. Si no lo hacen, la función debe llamar a SetLastError(ERROR_INVALID_PARAMETER) y devolver FALSE. Si el tamaño DEVMODEW de salida especificado por pcbNeeded es demasiado pequeño, el controlador debe sobrescribir el valor de tamaño proporcionado por pcbNeeded con el tamaño de búfer necesario, llame a SetLastError(ERROR_INSUFFICIENT_BUFFER) y devuelva FALSE.

La función DrvConvertDevMode se ejecuta en el contexto del administrador de trabajos y, por tanto, no debe mostrar una interfaz de usuario.

Cuando se llama a DrvConvertDevMode con un puntero de estructura NULL DEVMODEW en el parámetro pdmOut para obtener el tamaño del búfer, se espera que el controlador establezca el último error en ERROR_INSUFFICIENT_BUFFER. Si el último error no se establece en este valor, el administrador de trabajos de cola asume un error general.

Requisitos

Requisito Value
Plataforma de destino Escritorio
Encabezado winddiui.h (incluya Winddiui.h)