DrvPrinterEvent 関数 (winddiui.h)

プリンター ドライバーによる操作を必要とする可能性があるプリンター固有のイベントを処理するときに、プリンター インターフェイス DLL の DrvPrinterEvent 関数が印刷スプーラーによって呼び出されます。

構文

BOOL DrvPrinterEvent(
  [in] LPWSTR pPrinterName,
       int    DriverEvent,
       DWORD  Flags,
       LPARAM lParam
);

パラメーター

[in] pPrinterName

NULL で終わるプリンター名文字列への呼び出し元指定のポインター。 文字列形式は、リモート プリンターを指定する場合は \Machine\PrinterName 、ローカル プリンターを指定する 場合は PrinterName にすることができます。

DriverEvent

イベントを識別する呼び出し元が指定したイベント コード。 次のイベント コードが定義されています。

イベント コード 定義
PRINTER_EVENT_ADD_CONNECTION スプーラーは AddPrinterConnection 関数の呼び出しの処理を完了したばかりで、クライアント ユーザーは以前に作成したリモート プリンターに接続できます。
PRINTER_EVENT_ATTRIBUTES_CHANGED プリンターの属性ビットが変更されました。 SetPrinter 関数に対するアプリケーションの呼び出しに応答して、スプーラーはプリンター ドライバーの DrvPrinterEvent 関数を呼び出し、呼び出しでイベント コードを渡します。 このイベント コードを使用すると、 lParam パラメーターは、古い属性と新しい属性を記述する PRINTER_EVENT_ATTRIBUTES_INFO 構造体を指します。
PRINTER_EVENT_CACHE_DELETE スプーラーは、クライアントのファイル キャッシュを削除しています。
PRINTER_EVENT_CACHE_REFRESH スプーラーは、クライアントのキャッシュされたファイルを更新しています。
PRINTER_EVENT_CONFIGURATION_CHANGE 予約済み。
PRINTER_EVENT_CONFIGURATION_UPDATE プリンターの構成が変更されました。 このイベント コードを使用すると、 lParam パラメーターは、Bidi 通知スキーマに従って書式設定された通知を含む Unicode 文字列を指します。
PRINTER_EVENT_DELETE_CONNECTION スプーラーは DeletePrinterConnection 関数の呼び出しの処理を完了したばかりで、クライアント ユーザーはプリンター接続を削除できます。
PRINTER_EVENT_DELETE スプーラーは DeletePrinter 関数の呼び出しの処理を完了したばかりで、管理者はプリンター インスタンスを削除できます。
PRINTER_EVENT_INITIALIZE スプーラーは、 AddPrinter 関数の呼び出しの処理を完了したばかりで、管理者はサーバーでプリンターを使用できるようにするか、管理者がプリンターの状態を変更できるようにする SetPrinter 関数を使用できます。 クライアント側のレンダリング接続では、クライアント コンピューターは GUID プリンターを追加したばかりです。 PRINTER_EVENT_INITIALIZE イベントは、Windows Vista 以前のリリースでの DrvPrinterEvent 呼び出しの NULL lParam パラメーター値を指定します。 Windows 7 以降のリリースでは、lParam パラメーターはユーザー トークン ハンドルです。 印刷ドライバーは、返されたトークン ハンドルを使用して、ユーザー データのクエリを実行したり、ユーザーを偽装したりできます。

Flags

呼び出し元が指定したビット フラグ。次のように定義されます。

定義
PRINTER_EVENT_FLAG_NO_UI 設定されている場合、関数はユーザー インターフェイスを表示 できません 。 印刷プロセッサ、印刷モニター、またはプリンター ドライバーのインストール中に、ユーザー インターフェイスを許可する唯一の方法は、 VendorSetup ディレクティブを使用することです。 詳細については、「 プリンター INF ファイル エントリ 」および 「カスタマイズされたプリンターセットアップ操作 」を参照してください。

注意事項

VendorSetup ディレクティブは非推奨であり、開発する新しい v3 または v4 ドライバーでは使用しないでください。 VendorSetup に関するこの情報は、参照のみ、またはこの INF ディレクティブを既に使用している既存の v3 ドライバーのメンテナンスのために提供されます。

lParam

DriverEvent パラメーターが PRINTER_EVENT_ATTRIBUTES_CHANGED に設定されていない限り、使用されません。 この場合、 lParam にはPRINTER_EVENT_ATTRIBUTES_INFO構造体のアドレスが含まれます。 ( DriverEvent パラメーターの前述の説明を参照してください)。 DriverEvent パラメーターの他のすべての値の場合、 lParam パラメーターは NULL です

戻り値

操作が成功した場合、関数は TRUE を返す必要があります。それ以外の場合は、 FALSE を返す必要があります。 ただし、現在、関数の戻り値がチェックされるのは、AddPrinter 関数の処理中にスプーラーが DrvPrinterEvent を呼び出し、DriverEvent が PRINTER_EVENT_INITIALIZE に設定されている場合だけです。 この場合、DrvPrinterEventFALSE を返した場合、スプーラーはプリンターを作成せず、代わりに AddPrinter が失敗します。

注釈

すべての プリンター インターフェイス DLL はDrvPrinterEvent 関数を提供し、関数は PRINTER_EVENT_INITIALIZE イベント コードをサポートする必要があります。 その他のすべてのイベント コードのサポートは省略可能です。

PRINTER_EVENT_INITIALIZE イベントの処理時に格納されるレジストリ設定は、 SetPrinterData を呼び出してHKEY_LOCAL_MACHINE キーの下に格納する必要があります。 PRINTER_EVENT_INITIALIZEおよびPRINTER_EVENT_DELETEイベント コードの場合、スプーラーは呼び出し元が管理特権を持っていることを確認し、呼び出し元を偽装するときに DrvPrinterEvent を 呼び出します。

これに対し、PRINTER_EVENT_ADD_CONNECTION イベントを処理するときにレジストリに設定を格納する必要がある場合、プリンター インターフェイス DLL は、ユーザーごとに格納されるように、HKEY_CURRENT_USER キーの下に設定を書き込む必要があります。 その後、ローミング プロファイルを持つユーザーが別のシステムにログオンした場合、接続はそのユーザーに従います。 DrvPrinterEvent 関数は、ユーザーが最初に接続を行ったときにのみ呼び出され、ユーザーがローミング プロファイルを使用して他のシステムにログオンする場合は呼び出されません。

PRINTER_EVENT_ADD_CONNECTIONおよびPRINTER_EVENT_DELETE_CONNECTIONイベント コードの場合、 DrvPrinterEvent 関数の実行コンテキストは呼び出し元のアプリケーション (通常は Print Folder) であり、関数はユーザー インターフェイスを表示できます。 他のすべてのイベント コードでは、実行コンテキストは印刷スプーラーであり、ユーザー インターフェイスを表示できません。

接続時にユーザー インターフェイスを表示する可能性があるドライバーの例としては、FAX ドライバーがあり、ユーザーにユーザーの名前と電話番号 (FAX 送信者) の入力を求め、接続が削除されるまで情報を保存できます。

クライアント キャッシュに格納される可能性があるファイルの種類の例として、レジストリに書き込むには情報が多すぎる大きなフォント メトリック ファイルがあります。 DrvPrinterEvent 関数のイベント コードがPRINTER_EVENT_CACHE_REFRESHされると、プリンター インターフェイス DLL は、キャッシュが最新の状態になるようにサーバーからファイルを再読み込みできます。

要件

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