DrvEnablePDEV 関数 (winddi.h)

DrvEnablePDEV 関数は、物理デバイスの特性の説明を GDI に返します。

構文

DHPDEV DrvEnablePDEV(
  [in]           DEVMODEW *pdm,
  [in]           LPWSTR   pwszLogAddress,
                 ULONG    cPat,
  [in, optional] HSURF    *phsurfPatterns,
                 ULONG    cjCaps,
  [out]          ULONG    *pdevcaps,
                 ULONG    cjDevInfo,
  [out]          DEVINFO  *pdi,
                 HDEV     hdev,
  [in]           LPWSTR   pwszDeviceName,
                 HANDLE   hDriver
);

パラメーター

[in] pdm

ドライバー データを含む DEVMODEW 構造体へのポインター。

Windows NT 4.0 をサポートするドライバーの場合、GDI が 0 に設定された DEVMODEW メンバーを使用してハードウェアを呼び出すとき、DrvEnablePDEV はハードウェアの既定のモードを返す必要があります: dmBitsPerPeldmPelsWidthdmPelsHeightdmDisplayFrequency

[in] pwszLogAddress

プリンター ドライバーの場合は、ドライバーが書き込む場所のユーザー名である論理アドレス文字列を指します。 たとえば、"LPT1" や "My Printer" などがあります。

ディスプレイ ドライバーは、このパラメーターを無視する必要があります。

cPat

プリンター ドライバーの場合は、 phsurfPatterns が指すバッファー内のサーフェス ハンドルの数を指定します。 ドライバーは、バッファーの末尾を超えてメモリにアクセスできません。

ディスプレイ ドライバーは、このパラメーターを無視する必要があります。

[in, optional] phsurfPatterns

ディスプレイ ドライバーは、このパラメーターを無視する必要があります。

プリンター ドライバーの場合、ドライバーが標準の塗りつぶしパターンを表すサーフェス ハンドルで塗りつぶすバッファーを指します。 次のパターンを順番に定義する必要があります。

Pattern 説明
HS_HORIZONTAL 水平ハッチ。
HS_VERTICAL 垂直ハッチ。
HS_FDIAGONAL 45 度の上向きハッチ (左から右)。
HS_BDIAGONAL 45 度下向きハッチ (左から右)。
HS_CROSS 水平および垂直クロスハッチ。
HS_DIAGCROSS 45 度のクロスハッチ。
 
メモ 以前のバージョンのドライバー開発キット (DDK) では、ドライバーのサポートを必要とする既定のハッチ パターンの数が減っていました。 その結果、HS_DDI_MAXは、通常、パターン配列のサイズを宣言するためにドライバーによって使用され、削減されました。
 
GDI は、標準パターンのブラシを実現するために、これらのサーフェスの 1 つで DrvRealizeBrush を呼び出します。

これらの各サーフェスは、ラスター デバイス用のモノクロ (1 ピクセルあたり 1 ビット) GDI ビットマップである必要があります。 デバイス ドライバーは、デバイス画面に書き込まれるときに最も標準的なパターンのように見えるパターンを選択する必要があります。

GDI は、ベクター デバイスのサポート ルーチンでこれらのブラシを使用する必要はありません。 したがって、サーフェスは、 DrvRealizeBrush が標準パターンとして認識するデバイスでサポートされるサーフェスにすることができます。

cjCaps

pdevcaps によって指されるバッファーのサイズを指定します。 ドライバーは、バッファーの末尾を超えてメモリにアクセスすることはできません。

[out] pdevcaps

デバイスの機能を記述するために使用される GDIINFO 構造体へのポインター。 GDI は 、DrvEnablePDEV を呼び出してこの構造体をゼロ初期化します。

cjDevInfo

pdi が指す DEVINFO 構造体のバイト数を指定します。 ドライバーは、DEVINFO でこのバイト数以下を変更する必要があります。

[out] pdi

ドライバーと物理デバイスを記述する DEVINFO 構造体へのポインター。 ドライバーは、理解しているメンバーのみを変更する必要があります。 GDI は、 DrvEnablePDEV の呼び出しの前に、この構造体に 0 を設定します。

hdev

デバイスに対する GDI 提供のハンドル。 このハンドルは、 EngGetDriverName などの一部の GDI コールバックへの入力として使用する必要があります。

[in] pwszDeviceName

デバイスのユーザーが読み取り可能な名前である null で終わる文字列へのポインター。

hDriver

出力デバイスへのハンドル。 ディスプレイ ドライバーの場合、これはディスプレイ デバイス ハンドルです。 プリンター ドライバーの場合、このパラメーターは、スプーラーの呼び出しでプリンターのハンドルとして使用する必要があります。

戻り値

戻り値は、関数が成功した場合に有効なデバイスを識別する PDEV へのハンドルです。 つまり、 DrvEnablePDEV は、成功すると、ドライバー定義のプライベート デバイス インスタンス情報にハンドルを返します。 それ以外の場合は NULL 返します。

解説

グラフィックス デバイス ドライバーは、異なる論理アドレスに接続された複数の物理デバイスをサポートしている場合があります。 ドライバーは、異なる描画サーフェスの同時使用もサポートする必要があります。

DrvEnablePDEV の目的は次のとおりです。

  1. デバイスの物理的な特性を GDI に通知します。
  2. 現在のデバイス インスタンスを記述するプライベート PDEV 構造体を作成するには (受信した DEVMODE 構造体とデバイス名に基づく)。
GDI はその後、他のグラフィックス DDI 関数を呼び出すときに、ドライバーがデバイス インスタンスを識別できるように、 入力として DrvEnablePDEV によって返されるハンドルを (通常は SURFOBJ 構造体内で) 提供します。

1 つの論理デバイスで、次のように区別できるいくつかの PDEV を管理できます。

  1. ハードウェアの種類 -- 1 つのデバイス ドライバーで "LaserWhiz"、"LaserWhiz II"、"LaserWhiz Super" がサポートされる場合があります。
  2. 論理アドレス -- 1 つのデバイス ドライバーは、"LPT1"、"COM2"、"\SERVER1\PSLAZER" などに接続されているプリンターをサポートできます。 複数の VGA ディスプレイを同時にサポートできるディスプレイ ドライバーは、ポート番号に従ってそれらを区別する場合があります。たとえば、0x3CEや0x2CEなどです。
  3. サーフェス -- プリンター ドライバーは、2 つの印刷ジョブを同時に処理できます。 2 つのサーフェスは、印刷される 2 つのページを表します。 同様に、ディスプレイ デバイス ドライバーは、同じデバイス上で 2 つのデスクトップをサポートする場合があります。
この関数の呼び出しを受け取る場合、ドライバーは PDEV をサポートするためにメモリを割り当てる必要があります。 ただし、GDI が DrvEnableSurface を呼び出すまで、実際のサーフェスをサポートする必要はありません。

デバイスサーフェスにビットマップを割り当てる必要がある場合、これらの割り当ては必要になるまで行う必要はありません。 多くの場合、アプリケーションは実際にデバイスに書き込む前にデバイス情報を要求しますが、大きなビットマップなどのリソースの割り当てを待機すると、メモリを節約できます。

GDI は、この関数を呼び出す前に phsurfPatterns が指すバッファーをゼロ初期化します。

グラフィックス ドライバーには DrvEnablePDEV が必要です。

要件

   
対象プラットフォーム デスクトップ
Header winddi.h (Winddi.h を含む)

関連項目

DEVINFO

DEVMODEW

DrvEnableSurface

DrvRealizeBrush

EngCreatePalette

GDIINFO