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 構造体のプライベート部分のアドレスを安全に判断するには、次の操作を行います。
GET_UNIDRV_PRIVATE_DEVMODE_SIZE マクロを呼び出し、呼び出しで DEVMODEW 構造体のアドレスを渡します。
(pdm)->dmDriverExtra がマクロによって返される値より大きいことを確認します。 (マクロは、UNIDRV_PRIVATE_DEVMODE構造体の wSize メンバーの値を返します。
プラグインの 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 データのサイズを把握している必要があります。
プラグインの DEVMODEW 構造体のプライベート部分が有効な OEM_DMEXTRAHEADER 構造体で始まっていることを確認します。
要件
要件 | 値 |
---|---|
Header | printoem.h (Printoem.h を含む) |