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 结构的专用部分的地址,请执行以下操作:
调用 GET_UNIDRV_PRIVATE_DEVMODE_SIZE 宏,在调用中传递 DEVMODEW 结构的地址。
验证 (pdm) -dmDriverExtra> 是否大于宏返回的值。 (宏返回 UNIDRV_PRIVATE_DEVMODE structure.)
确定插件 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 数据的大小。
验证插件的 DEVMODEW 结构的专用部分是否以有效的 OEM_DMEXTRAHEADER 结构开头。
要求
要求 | 值 |
---|---|
Header | printoem.h (包括 Printoem.h) |