次の方法で共有


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 つあります。

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

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

プリンター グラフィックス DLL には、DRVENABLEDATA 構造体に DrvEnablePDEV、DrvDisablePDEVDrvResetPDEV 関数のアドレスが含まれていますが、レンダリング プラグインは、IPrintOemUni インターフェイスのメソッドとして EnablePDEV、DisablePDEVResetPDEV を明示的にエクスポートし、DRVENABLEDATA 構造体にアドレスを配置しないことに注意してください。

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

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

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

要件

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