共用方式為


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.) wSize 成員的值

  3. 判斷外掛程式 DEVMODEW 結構私用部分的位址,如下所示。

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

    上述範例的開頭是公用 DEVMODEW 結構的位址 (pdm) 、將這個結構的位元元組數目新增 (pdm-dmSize>) ,然後將 Unidrv 私用 DEVMODEW 結構 () 位元組大小。 外掛程式的私人 DEVMODEW 數據會從這個記憶體地址開始。 如果有多個外掛程式鏈結在一起,此範例所傳回的位址就是第一個外掛程式的私人 DEVMODEW 數據。 第二個外掛程式的私人 DEVMODEW 數據遵循第一個外掛程式的私人 DEVMODEW 數據、第三個外掛程式的私人 DEVMODEW 數據遵循第二個外掛程式的私人 DEVMODEW 數據等。 需要判斷第 n 個外掛程式私人 DEVMODEW 數據的位址的外掛程式開發人員,必須知道前 n - 1 個外掛程式的私人 DEVMODEW 數據大小。

  4. 確認外掛程式 DEVMODEW 結構的私用部分是以有效的 OEM_DMEXTRAHEADER 結構開頭。

規格需求

需求
標頭 printoem.h (包含 Printoem.h)

另請參閱

PSCRIPT5_PRIVATE_DEVMODE