Функция 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) |