Compartir a través de


Función DrvConvertDevMode (winddiui.h)

Una función drvConvertDevMode de la interfaz de impresora convierte la estructura DEVMODE W 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 llamador a una estructura DEVMODEW de entrada. Si fMode es CDM_DRIVER_DEFAULT, este puntero es null.

[out] pdmOut

Puntero proporcionado por el autor de 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, la 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) debe usarse 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.

Observaciones

En un entorno de cliente o servidor, un cliente podría estar ejecutando una versión del sistema operativo o el controlador de impresora mientras el servidor (cola de servidores) ejecuta otro, lo que significa que la definición de 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 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 (que se describe 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) apuntan 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 pcbNeededed es demasiado pequeño, el controlador debe sobrescribir el valor de tamaño proporcionado por pcbNeededed 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 DEVMODEW NULL 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 colas asume un error general.

Requisitos

Requisito Valor
de la plataforma de destino de Escritorio
encabezado de winddiui.h (incluya Winddiui.h)