次の方法で共有


IPrintOemUni::EnableDriver メソッド (prcomoem.h)

IPrintOemUni::EnableDriver メソッドを使用すると、Unidrv のレンダリング プラグインを使用して、一部のグラフィックス DDI 関数をフックできます。

構文

HRESULT EnableDriver(
  DWORD          DriverVersion,
  DWORD          cbSize,
  PDRVENABLEDATA pded
);

パラメーター

DriverVersion

呼び出し元が指定したインターフェイスのバージョン番号。 この値は、printoem.h の PRINTER_OEMINTF_VERSION によって定義されます。

cbSize

pdedが指す構造体の呼び出し元が指定したサイズ (バイト単位)。

pded

DRVENABLEDATA 構造体への呼び出し元指定のポインター。

戻り値

このメソッドは、次のいずれかの値を返す必要があります。

リターン コード 形容
S_OK 操作は成功しました。
E_FAIL 操作に失敗しました

備考

Unidrv のレンダリング プラグインは、IPrintOemUni::EnableDriver メソッドを実装する必要があります。

IPrintOemUni::EnableDriver メソッドを使用すると、レンダリング プラグインは、プリンター グラフィックス DLL によってエクスポートされる DrvEnableDriver 関数と同じ種類の操作を実行できます。

DrvEnableDriver 関数と同様に、IPrintOemUni::EnableDriver メソッドは、内部でサポートされているグラフィックス DDI 関数 (フック関数と呼ばれます) のアドレスを提供します。 また、他の 1 回限りの初期化操作を実行することもできます。 DrvEnableDriver 関数とは異なり、IPrintOemUni::EnableDriver の実装は省略可能です。

IPrintOemUni::EnableDriver 実装する場合は、IPrintOemUni::D isableDriver 実装する必要もあります。 前のメソッドで開始されたアクションは、後者のメソッドで完了する必要がある場合があります。 たとえば、IPrintOemUni::EnableDriverで大きなバッファーが割り当てられているが、IPrintOemUni::D isableDriverで割り当てが解除されていない場合、メモリ リークが発生する可能性があります。

このメソッドは、指定された DRVENABLEDATA 構造体を満たし、DRVFN 構造体 配列を割り当てる必要があります。 フック関数へのポインターと、フックされたグラフィックス DDI 関数を識別する winddi.h 定義のインデックス値を配列に格納する必要があります。

Unidrv のレンダリング プラグインは、Unidrv ドライバーが関数を定義する場合にのみ、グラフィックス DDI 関数をフックできます。 次のグラフィックス DDI 関数は Unidrv や Pscript5 で定義されているため、フックアウトできます。

カスタマイズされたフック関数を指定すると、ドライバーの同等のグラフィックス DDI 関数が優先されます。 フック関数は、ドライバーのグラフィックス DDI 関数にコールバックすることもできます。 詳細については、「カスタマイズされたグラフィックス DDI 関数 を参照してください。

カスタマイズされたフック関数は、同等のグラフィックス DDI 関数と同じ入力パラメーターと出力パラメーターを持ちますが、1 つの例外があります。グラフィックス DDI 関数は PDEV ポインターを受け取り、カスタマイズされたフック関数は DEVOBJ ポインター 受け取ります。 グラフィックス DDI 関数で PDEV ポインターを受け取る方法は 2 つあります。

  • dhpdev 変換先サーフェスの SURFOBJ 構造体のメンバーの内容として。 同等のカスタマイズされたフック関数の場合、宛先 SURFOBJ 構造体の dhpdev メンバーは DEVOBJ 構造体を指し、参照時に PDEVOBJ 型にキャストする必要があります。 グラフィックス DDI 関数の例は、DrvBitBlt です。

  • dhpdev パラメーターの入力引数として。 同等のカスタマイズされたフック関数は、この入力パラメーターを参照時に PDEVOBJ 型にキャストする必要があります。 グラフィックス DDI 関数の例は、DrvDitherColor です。

プリンター グラフィックス DLL には、DrvEnablePDEVDrvDisablePDEV、および DRVENABLEDATA 構造体 の DrvResetPDEV 関数のアドレスが含まれていることに注意してください。 レンダリング プラグインは、IPrintOemUni インターフェイス のメソッドとして、EnablePDEVDisablePDEVResetPDEV を明示的にエクスポートし、そのアドレスを DRVENABLEDATA 構造体に配置しません。

IPrintOemUni::EnableDriver メソッドが複数のレンダリング プラグインによってエクスポートされる場合、メソッドは、プラグインがインストール用に指定された順序で呼び出されます。

各グラフィックス DDI 関数は、1 つのレンダリング プラグインによってのみフックできます。 複数のプラグインが同じグラフィックス DDI 関数をフックしようとすると、最初のプラグインの後のすべてのフックアウトは無視されます。

レンダリング プラグインの作成とインストールの詳細については、「Microsoft のプリンター ドライバーのカスタマイズ」を参照してください。

必要条件

要件 価値
ターゲット プラットフォーム デスクトップ
ヘッダー prcomoem.h (Prcomoem.h を含む)