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 には、DrvEnablePDEV、DrvDisablePDEV、および DRVENABLEDATA 構造体 の DrvResetPDEV 関数のアドレスが含まれていることに注意してください。 レンダリング プラグインは、IPrintOemUni インターフェイス のメソッドとして、EnablePDEV、DisablePDEV、ResetPDEV を明示的にエクスポートし、そのアドレスを DRVENABLEDATA 構造体に配置しません。
IPrintOemUni::EnableDriver メソッドが複数のレンダリング プラグインによってエクスポートされる場合、メソッドは、プラグインがインストール用に指定された順序で呼び出されます。
各グラフィックス DDI 関数は、1 つのレンダリング プラグインによってのみフックできます。 複数のプラグインが同じグラフィックス DDI 関数をフックしようとすると、最初のプラグインの後のすべてのフックアウトは無視されます。
レンダリング プラグインの作成とインストールの詳細については、「Microsoft のプリンター ドライバーのカスタマイズ」を参照してください。
必要条件
要件 | 価値 |
---|---|
ターゲット プラットフォーム の | デスクトップ |
ヘッダー | prcomoem.h (Prcomoem.h を含む) |