次の方法で共有


キュー固有のファイルをダウンロードする

ユーザーがクライアント システムからプリント サーバーへのプリンター接続を作成することを決定し、インストール アプリケーションがプリンターのインストール時にポイントのサポートと印刷で説明されているレジストリ エントリを作成した場合、次のイベントが発生します。

  1. ユーザー アプリケーションは AddPrinterConnection を呼び出します。

  2. クライアントのリモート印刷プロバイダー (Win32spl.dll) は、サーバーへの接続を作成します。

  3. サーバーのスプーラーは、ドライバー ファイルをクライアントに送信します。

  4. クライアントのWin32spl.dllは、サーバー上で EnumPrinterKey と EnumPrinterDataEx を呼び出して、プリンターのレジストリ エントリをコピーします。

  5. サーバーのスプーラーが EnumPrinterDataEx の処理中にレジストリ値を列挙すると、プリンターの CopyFiles キーのサブキー (CopyFiles\ICM など) が検出されるたびに、次の操作が実行されます。

    • 指定されている 場合は、ポイントと印刷 DLL を読み込み、その GenerateCopyFilePaths 関数を呼び出します。この関数は、ソース パスまたはコピー先パスを変更できます。

    • GenerateCopyFilePaths によって返されるソース パスと宛先パスに基づいて SourceDir キーと TargetDir キーを作成し、EnumPrinterDataEx データとしてクライアント スプーラーに返します。 (これらのキーは実際にはサーバーに存在しません)。

  6. クライアントのWin32spl.dllは、EnumPrinterData 呼び出しと EnumPrinterDataEx 呼び出しに応答して受信したプリンター キーをキャッシュします。

  7. CopyFiles\ICM など、プリンターの CopyFiles キーのサブキーごとに、クライアントのWin32spl.dllは次の操作を実行します。

    • 指定されている場合は、ローカルの Point および Print DLL を読み込み、その GenerateCopyFilePaths 関数を呼び出します。この関数は、ソース パスまたはコピー先パスを変更できます。 (入力は次のとおりです。 サーバーから受信した SourceDir キーと TargetDir キー)。

    • Files キーに関連付けられているすべてのファイルをサーバーからダウンロードします。

    • イベントのログを取り、ポイントとプリントファイルを示すファイルがダウンロードします。

    • DLL が指定されている場合は、Point と Print DLL の SpoolerCopyFileEvent 関数を呼び出し、COPYFILE_EVENT_FILES_CHANGED イベントを指定します。

  8. クライアント スプーラーは、PRINTER_EVENT_CACHE_REFRESH イベントを指定して、ドライバーの DrvPrinterEvent 関数を呼び出します。

  9. クライアント スプーラーは、PRINTER_EVENT_ADD_CONNECTION イベントを指定して、ドライバーの DrvPrinterEvent 関数をもう一度呼び出します。

  10. 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 関数を呼び出します。