UNIDRV_PRIVATE_DEVMODE 结构 (printoem.h)

UNIDRV_PRIVATE_DEVMODE结构使 Unidrv 插件能够确定 Unidrv DEVMODEW 结构的专用部分的大小。

语法

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

成员

wReserved[4]

预留给系统使用。

wSize

Unidrv 的 DEVMODEW 结构的专用部分的大小(以字节为单位)。

注解

有关 DEVMODEW 结构的公共和私有部分的信息,请参阅 DEVMODEW

Printoem.h 定义了一个宏,用于确定 Unidrv DEVMODEW 结构的专用部分的大小。

#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 )

GET_UNIDRV_PRIVATE_DEVMODE_SIZE 宏中的 pdm 参数是指向 DEVMODEW 结构的指针。 宏确定 DEVMODEW 结构的 dmDriverExtra 成员的值是否大于 UNIDRV_PRIVATE_DEVMODE 结构的 wSize 成员的字节偏移量。 如果是这样,宏将返回UNIDRV_PRIVATE_DEVMODE结构中 wSize 成员的值。 否则,宏返回零。

若要安全地确定插件 DEVMODEW 结构的专用部分的地址,请执行以下操作:

  1. 调用 GET_UNIDRV_PRIVATE_DEVMODE_SIZE 宏,在调用中传递 DEVMODEW 结构的地址。

  2. 验证 (pdm) -dmDriverExtra> 是否大于宏返回的值。 (宏返回 UNIDRV_PRIVATE_DEVMODE structure.)

  3. 确定插件 DEVMODEW 结构的专用部分的地址,如下所示。

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

    前面的示例从公共 DEVMODEW 结构的地址 (pdm) 开始,将此结构的字节数 (pdm-dmSize>) 相加,然后将 Unidrv 专用 DEVMODEW 结构的大小 (wSize) 相加。 插件的专用 DEVMODEW 数据从此内存地址开始。 如果有多个插件链接在一起,则此示例返回的地址是第一个插件的专用 DEVMODEW 数据的地址。 第二个插件的专用 DEVMODEW 数据遵循第一个插件的专用 DEVMODEW 数据,第三个插件的专用 DEVMODEW 数据遵循第二个插件的专用 DEVMODEW 数据,等等。 需要确定第 n 个插件的专用 DEVMODEW 数据的地址的插件开发人员必须知道前 n - 1 个插件的专用 DEVMODEW 数据的大小。

  4. 验证插件的 DEVMODEW 结构的专用部分是否以有效的 OEM_DMEXTRAHEADER 结构开头。

要求

要求
Header printoem.h (包括 Printoem.h)

另请参阅

PSCRIPT5_PRIVATE_DEVMODE