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


Функция DrvConvertDevMode (winddiui.h)

Функция DLL интерфейса принтера DrvConvertDevMode преобразует структуру DEVMOD EW принтера из одной версии в другую.

Синтаксис

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

Параметры

[in] pPrinterName

Указатель на строку имени принтера, предоставленного вызывающим абонентом. Дополнительные сведения об этом параметре см. в следующем разделе "Примечания".

[in] pdmIn

Вызывающий указатель на входную структуру DEVMODEW. Если fMode CDM_DRIVER_DEFAULT, этот указатель NULL.

[out] pdmOut

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

[in, out] pcbNeeded

Указатель, предоставленный вызывающим объектом, на размер буфера в байтах, на который указывает pdmOut. В выходных данных библиотека DLL интерфейса принтера должна перезаписать полученное значение размера с фактическим размером преобразованной структуры DEVMODEW. Если полученный буфер слишком мал, библиотека DLL интерфейса принтера должна перезаписать полученное значение размера с требуемым размером буфера.

[in] fMode

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

CDM_CONVERT

Функция должна преобразовать содержимое входной структуры DEVMODEW (на которую указывает pdmIn) в новую структуру DEVMODEW и поместить результат в структуру DEVMODEW, на которую указывает pdmOut. Начальное содержимое полученной выходной структуры DEVMODEW (указывает на pdmOut) должно использоваться для определения выходной версии.

CDM_CONVERT351

Функция должна преобразовать содержимое входной структуры DEVMODEW (на которую указывает pdmIn), создав выходную структуру DEVMODEW, совместимую с Windows NT 3.51, и поместить результат в структуру DEVMODEW, на которую указывает pdmOut.

Если драйвер не поддерживает структуру DEVMODEW для Windows NT 3.51, функция должна преобразовать входную DEVMODEW в текущую версию.

CDM_DRIVER_DEFAULT

Функция должна скопировать текущую версию своей структуры DEVMODEW по умолчанию в буфер, на который указывает pdmOut.

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

Если операция выполнена успешно, функция должна вернуть TRUE; в противном случае он должен вызвать SetLastError для задания кода ошибки и возврата FALSE.

Замечания

В среде клиента или сервера клиент может работать с одной версией операционной системы или драйвера принтера во время выполнения сервера (spooler), что означает, что определение структуры DEVMODEW принтера может быть несогласованным между клиентом и сервером. Функция DrvConvertDevMode должна быть способна выполнять преобразования из одной версии структуры DEVMODEW принтера в другую.

При преобразовании из одной версии DEVMODEW в другую необходимо включить как общедоступные, так и частные члены DEVMODEW.

Имя принтера, на которое указывает pPrinterName, можно использовать в качестве входного аргумента функции OpenPrinter (описанную в документации по пакету SDK для Microsoft Windows), которая может вызываться для получения сохраненных значений по умолчанию при получении флага CDM_DRIVER_DEFAULT. Обратите внимание, что строка имени принтера не должна быть изменена каким-либо образом перед вызовом OpenPrinter. Кроме того, вызов OpenPrinter должен находиться в том же потоке, что и для вызова DrvConvertDevMode.

Функция должна убедиться, что pdmIn и pdmOut (если применимо) указывают на допустимые структуры DEVMODEW. В противном случае функция должна вызывать SetLastError(ERROR_INVALID_PARAMETER) и возвращать FALSE. Если выходной размер DEVMODEW, указанный pcbNeeded слишком мал, драйвер должен перезаписать значение размера, предоставленное pcbNeed с необходимым размером буфера, вызвать SetLastError(ERROR_INSUFFICIENT_BUFFER) и вернуть FALSE.

Функция DrvConvertDevMode выполняется в контексте spooler и поэтому не должна отображать пользовательский интерфейс.

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

Требования

Требование Ценность
целевая платформа Настольный
заголовка winddiui.h (include Winddiui.h)