キュー固有のファイルをダウンロードする
ユーザーがクライアント システムからプリント サーバーへのプリンター接続を作成することを決定し、インストール アプリケーションがプリンターのインストール時にポイントのサポートと印刷で説明されているレジストリ エントリを作成した場合、次のイベントが発生します。
ユーザー アプリケーションは AddPrinterConnection を呼び出します。
クライアントのリモート印刷プロバイダー (Win32spl.dll) は、サーバーへの接続を作成します。
サーバーのスプーラーは、ドライバー ファイルをクライアントに送信します。
クライアントのWin32spl.dllは、サーバー上で EnumPrinterKey と EnumPrinterDataEx を呼び出して、プリンターのレジストリ エントリをコピーします。
サーバーのスプーラーが EnumPrinterDataEx の処理中にレジストリ値を列挙すると、プリンターの CopyFiles キーのサブキー (CopyFiles\ICM など) が検出されるたびに、次の操作が実行されます。
指定されている 場合は、ポイントと印刷 DLL を読み込み、その GenerateCopyFilePaths 関数を呼び出します。この関数は、ソース パスまたはコピー先パスを変更できます。
GenerateCopyFilePaths によって返されるソース パスと宛先パスに基づいて SourceDir キーと TargetDir キーを作成し、EnumPrinterDataEx データとしてクライアント スプーラーに返します。 (これらのキーは実際にはサーバーに存在しません)。
クライアントのWin32spl.dllは、EnumPrinterData 呼び出しと EnumPrinterDataEx 呼び出しに応答して受信したプリンター キーをキャッシュします。
CopyFiles\ICM など、プリンターの CopyFiles キーのサブキーごとに、クライアントのWin32spl.dllは次の操作を実行します。
指定されている場合は、ローカルの Point および Print DLL を読み込み、その GenerateCopyFilePaths 関数を呼び出します。この関数は、ソース パスまたはコピー先パスを変更できます。 (入力は次のとおりです。 サーバーから受信した SourceDir キーと TargetDir キー)。
Files キーに関連付けられているすべてのファイルをサーバーからダウンロードします。
イベントのログを取り、ポイントとプリントファイルを示すファイルがダウンロードします。
DLL が指定されている場合は、Point と Print DLL の SpoolerCopyFileEvent 関数を呼び出し、COPYFILE_EVENT_FILES_CHANGED イベントを指定します。
クライアント スプーラーは、PRINTER_EVENT_CACHE_REFRESH イベントを指定して、ドライバーの DrvPrinterEvent 関数を呼び出します。
クライアント スプーラーは、PRINTER_EVENT_ADD_CONNECTION イベントを指定して、ドライバーの DrvPrinterEvent 関数をもう一度呼び出します。
Point and Print DLL が指定されている場合、クライアント スプーラーは、その SpoolerCopyFileEvent 関数を呼び出して、COPYFILE_EVENT_ADD_PRINTER_CONNECTION イベントを指定します。
接続例
たとえば、インストール アプリケーションで、インストール例で説明されているサーバー レジストリ エントリが定義されているとします。 さらに、サーバーの名前が NTPRINT で、クライアントが MyClient であるとします。
NTPRINT の HpColor という名前の印刷キューに接続するには、MyClient 上のユーザー アプリケーションが次のように AddPrinterConnection を呼び出します。
AddPrinterConnection("\\NTPRINT\HpColor")
サーバーでは、スプーラーはMscms.dllを読み込み、次のように GenerateCopyFilePaths を呼び出します。
GenerateCopyFilePaths(
"HpColor",
"Color",
&SplclientInfo1,
1,
\\NTPRINT\PRINT$\Color,
&dwSourceDirSize,
"Color",
&dwDestDirSize,
COPYFILE_FLAG_SERVER_SPOOLER)
Microsoft ICM のMscms.dll モジュールでは、ソースパスまたは宛先パスは変更されないため、ERROR_SUCCESSを返すだけです。
サーバー スプーラーは、MyClient に次のキーを返します。
SourceDir: \\NTPRINT\PRINT$\Color
TargetDir: "Color"
クライアントでは、TargetDir の値は C:\Winnt\System32\Spool\Drivers\Color に拡張されます。
MyClient のスプーラーは、次の操作を実行します:
Mscms.dllをダウンロードし、次のように GenerateCopyFilePaths を呼び出します。
GenerateCopyFilePaths( "\\NTPRINT\HpColor", "Color", &SplclientInfo1, 1, \\NTPRINT\PRINT$\Color, &dwSourceDirSize, "C:\Winnt\System32\Spool\Drivers\Color", &dwDestDirSize, COPYFILE_FLAG_CLIENT_SPOOLER)
Microsoft ICM のMscms.dll モジュールでは、ソースパスまたは宛先パスは変更されないため、ERROR_SUCCESSを返すだけです。
Hpclrlsr.icm を C:\Winnt\System32\Spool\Drivers\Color にダウンロードします。
イベントのログを取り、ポイントとプリントファイルを示すファイルがダウンロードします。
COPYFILE_EVENT_FILES_CHANGED イベントを 指定して、Mscms.dllで SpoolerCopyFileEvent 関数を呼び出します。
PRINTER_EVENT_CACHE_REFRESH イベントを指定して、プリンター ドライバー の DrvPrinterEvent 関数を呼び出します。
PRINTER_EVENT_ADD_CONNECTION イベントを指定して、プリンタードライバーの の DrvPrinterEvent 関数をもう一度呼び出します。
COPYFILE_EVENT_ADD_PRINTER_CONNECTION イベントを 指定して、Mscms.dllで SpoolerCopyFileEvent 関数を呼び出します。