次の方法で共有


DrvPrinterEvent 関数 (winddiui.h)

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

構文

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

パラメーター

[in] pPrinterName

NULL で終わるプリンター名文字列への呼び出し元指定のポインター。 文字列形式には、リモート プリンターを指定するコンピューター\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 に設定した場合だけです。 この場合 DrvPrinterEvent が FALSE 返した場合、スプーラーはプリンターを作成せず、代わりに 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 ドライバーでは、ユーザーの名前と電話番号 (FAX 送信者) の入力を求め、接続が削除されるまで情報を保存できます。

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

必要条件

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