次の方法で共有


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

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

構文

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

パラメーター

DriverVersion

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

cbSize

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

pded

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

戻り値

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

リターン コード 説明
S_OK 操作が成功しました。
E_FAIL 操作に失敗しました
E_NOTIMPL このメソッドは実装されていません。

注釈

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

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

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

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

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

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

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

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

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

プリンター グラフィックス DLL には、DrvEnablePDEVDrvDisablePDEVおよび DrvResetPDEV 関数のアドレスが DRVENABLEDATA 構造体に含まれていますが、Pscript5 のレンダリング プラグインでは、IPrintOemPS インターフェイスのメソッドとして EnablePDEVDisablePDEVResetPDEV が実装され、DRVENABLEDATA 構造体にアドレスは配置されません。

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

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

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

要件

要件
対象プラットフォーム デスクトップ
Header prcomoem.h (Prcomoem.h を含む)