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 メンバーの値を返します。 そうでない場合、マクロは 0 を返します。

プラグインの DEVMODEW 構造体のプライベート部分のアドレスを安全に判断するには、次の操作を行います。

  1. GET_UNIDRV_PRIVATE_DEVMODE_SIZE マクロを呼び出し、呼び出しで DEVMODEW 構造体のアドレスを渡します。

  2. (pdm)->dmDriverExtra がマクロによって返される値より大きいことを確認します。 (マクロは、UNIDRV_PRIVATE_DEVMODE構造体の wSize メンバーの値を返します。

  3. プラグインの DEVMODEW 構造体のプライベート部分のアドレスを次のように決定します。

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

    前の例では、パブリック DEVMODEW 構造体 (pdm) のアドレスから始まり、この構造体のバイト数 (pdm-dmSize>) を追加し、Unidrv プライベート DEVMODEW 構造体 (wSize) のバイト単位のサイズを追加します。 プラグインのプライベート DEVMODEW データは、このメモリ アドレスから始まります。 複数のプラグインが連結されている場合、この例で返されるアドレスは、最初のプラグインのプライベート DEVMODEW データのアドレスです。 2 番目のプラグインのプライベート DEVMODEW データは、最初のプラグインのプライベート DEVMODEW データに続き、3 番目のプラグインのプライベート DEVMODEW データは、2 番目のプラグインのプライベート DEVMODEW データのデータに従います。 n 番目のプラグインのプライベート DEVMODEW データのアドレスを決定する必要があるプラグイン開発者は、最初の n から 1 個のプラグインのプライベート DEVMODEW データのサイズを把握している必要があります。

  4. プラグインの DEVMODEW 構造体のプライベート部分が有効な OEM_DMEXTRAHEADER 構造体で始まっていることを確認します。

要件

要件
Header printoem.h (Printoem.h を含む)

こちらもご覧ください

PSCRIPT5_PRIVATE_DEVMODE