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


структура PSCRIPT5_PRIVATE_DEVMODE (printoem.h)

Структура PSCRIPT5_PRIVATE_DEVMODE позволяет подключаемым модулям Pscript5 определять размер частной части структуры DEVMODEW Pscript5.

Синтаксис

typedef struct _PSCRIPT5_PRIVATE_DEVMODE {
  WORD wReserved[57];
  WORD wSize;
} PSCRIPT5_PRIVATE_DEVMODE, *PPSCRIPT5_PRIVATE_DEVMODE;

Члены

wReserved[57]

Зарезервировано для системного использования.

wSize

Размер частной части структуры DEVMODEW Pscript5 в байтах.

Комментарии

Сведения об общедоступных и закрытых разделах структуры DEVMODEW см. в разделе DEVMODEW.

Printoem.h определяет макрос, который можно использовать для определения размера частной части структуры DEVMODEW Pscript5.

#define GET_PSCRIPT5_PRIVATE_DEVMODE_SIZE(pdm)\
    ( ( (pdm)->dmDriverExtra > (FIELD_OFFSET(PSCRIPT5_PRIVATE_DEVMODE, wSize) + sizeof(WORD)) ) ? \
    ((PPSCRIPT5_PRIVATE_DEVMODE)((PBYTE)(pdm) + (pdm)-> dmSize)) -> wSize : 0 )

Аргумент pdm в макросе GET_PSCRIPT5_PRIVATE_DEVMODE_SIZE является указателем на структуру DEVMODEW . Макрос определяет, превышает ли значение элемента dmDriverExtra структуры DEVMODEW смещение в байтах элемента wSizeструктуры PSCRIPT5_PRIVATE_DEVMODE . В этом случае макрос возвращает значение элемента wSize в структуре PSCRIPT5_PRIVATE_DEVMODE . В противном случае макрос возвращает ноль.

Чтобы безопасно определить адрес частной части структуры DEVMODEW подключаемого модуля, сделайте следующее:

  1. Вызовите макрос GET_PSCRIPT5_PRIVATE_DEVMODE_SIZE , передав адрес структуры DEVMODEW в вызове.

  2. Убедитесь, что значение (pdm)->dmDriverExtra больше значения, возвращаемого макросом. (Макрос возвращает значение элемента wSize структуры PSCRIPT5_PR****IVATE_DEVMODE.)

  3. Определите адрес частной части структуры DEVMODEW подключаемого модуля следующим образом.

    pdmPlugin = (PBYTE)(pdm) + (pdm)->dmSize + wSize;
    

    Предыдущий пример начинается с адреса общедоступной структуры DEVMODEW (pdm), добавляет количество байтов этой структуры (pdm-dmSize>), а затем добавляет размер частной структуры DEVMODEW Pscript5 (wSize) в байтах. Частные данные DEVMODEW подключаемого модуля начинаются с этого адреса памяти. Если есть несколько подключаемых модулей, связанных друг с другом, адрес, возвращаемый в этом примере, является адресом частных данных DEVMODEW первого подключаемого модуля.

    Частные данные DEVMODEW второго подключаемого модуля следуют за частными данными DEVMODEW первого подключаемого модуля, частные данные DEVMODEW третьего подключаемого модуля следуют за частными данными DEVMODEW второго подключаемого модуля и т. д. Разработчик подключаемого модуля, которому необходимо определить адрес частных данных DEVMODEWn-го подключаемого модуля, должен знать размеры частных данных DEVMODEW для первых n–1 подключаемых модулей.

  4. Убедитесь, что частная часть структуры DEVMODEW подключаемого модуля начинается с допустимой структуры OEM_DMEXTRAHEADER .

Требования

Требование Значение
Заголовок printoem.h (включая Printoem.h)

См. также раздел

UNIDRV_PRIVATE_DEVMODE