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.) wSize 成員的值
判斷外掛程式 DEVMODEW 結構私用部分的位址,如下所示。
pdmPlugin = (PBYTE)(pdm) + (pdm)->dmSize + wSize;
上述範例的開頭是公用 DEVMODEW 結構的位址 (pdm) 、將這個結構的位元元組數目新增 (pdm-dmSize>) ,然後將 Unidrv 私用 DEVMODEW 結構 () 位元組大小。 外掛程式的私人 DEVMODEW 數據會從這個記憶體地址開始。 如果有多個外掛程式鏈結在一起,此範例所傳回的位址就是第一個外掛程式的私人 DEVMODEW 數據。 第二個外掛程式的私人 DEVMODEW 數據遵循第一個外掛程式的私人 DEVMODEW 數據、第三個外掛程式的私人 DEVMODEW 數據遵循第二個外掛程式的私人 DEVMODEW 數據等。 需要判斷第 n 個外掛程式私人 DEVMODEW 數據的位址的外掛程式開發人員,必須知道前 n - 1 個外掛程式的私人 DEVMODEW 數據大小。
確認外掛程式 DEVMODEW 結構的私用部分是以有效的 OEM_DMEXTRAHEADER 結構開頭。
規格需求
需求 | 值 |
---|---|
標頭 | printoem.h (包含 Printoem.h) |