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


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

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

Синтаксис

typedef struct _UNIDRV_PRIVATE_DEVMODE {
  WORD wReserved[4];
  WORD wSize;
} UNIDRV_PRIVATE_DEVMODE, *PUNIDRV_PRIVATE_DEVMODE;

Члены

wReserved[4]

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

wSize

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

Комментарии

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

Printoem.h определяет макрос для определения размера частной части структуры DEVMODEW Unidrv.

#define GET_UNIDRV_PRIVATE_DEVMODE_SIZE(pdm)\
    ( ( (pdm)->dmDriverExtra > (FIELD_OFFSET(UNIDRV_PRIVATE_DEVMODE, wSize) + sizeof(WORD)) ) ? \
    ((PUNIDRV_PRIVATE_DEVMODE)((PBYTE)(pdm) + (pdm)-> dmSize)) -> wSize : 0 )

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

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

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

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

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

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

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

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

Требования

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

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

PSCRIPT5_PRIVATE_DEVMODE