共用方式為


下載佇列特定檔案

如果使用者決定從用戶端系統建立印表機連線到列印伺服器,而且如果安裝應用程式已建立 印表機安裝期間支援點和列印中所述的登錄專案,就會發生下列事件:

  1. 使用者應用程式會呼叫 AddPrinterConnection

  2. 用戶端的遠端列印提供者 (Win32spl.dll) 會建立與伺服器的連線。

  3. 伺服器的多工緩衝處理常式會將驅動程式檔案傳送至用戶端。

  4. 用戶端Win32spl.dll呼叫伺服器上的 EnumPrinterKey 和 EnumPrinterDataEx,以複製印表機的登錄專案。

  5. 當伺服器的多工緩衝處理程式在處理 EnumPrinterDataEx 期間列舉登錄值時,它會在每次遇到印表機 CopyFiles 機碼的子機碼時執行下列作業,例如 CopyFiles\ICM

    • 載入 Point 和 Print DLL,如果指定,並呼叫其 GenerateCopyFilePaths 函式,其可以修改來源和/或目的地路徑。

    • 根據GenerateCopyFilePaths傳回的來源和目的地路徑,建立SourceDirTargetDir索引鍵,並將它們傳回給用戶端多工緩衝處理常式做為 EnumPrinterDataEx 資料。 (這些金鑰實際上不存在於 server.)

  6. 用戶端的Win32spl.dll會快取接收的印表機金鑰,以回應 EnumPrinterData 和 EnumPrinterDataEx 呼叫。

  7. 針對印表機 CopyFiles 金鑰的每個子機碼,例如 CopyFiles\ICM,用戶端的 Win32spl.dll會執行下列作業:

    • 如果提供本機 Point 和 Print DLL,並呼叫其 GenerateCopyFilePaths 函式,即可修改來源和/或目的地路徑。 (輸入是從 server.) 收到的 SourceDirTargetDir 金鑰

    • 從伺服器下載與 檔案 金鑰相關聯的所有檔案。

    • 記錄事件,指出已下載 Point 和 Print 檔案。

    • 如果提供 DLL,請呼叫 Point 和 Print DLL 的 SpoolerCopyFileEvent 函式,並指定COPYFILE_EVENT_FILES_CHANGED事件。

  8. 用戶端多工緩衝處理常式會呼叫驅動程式的 DrvPrinterEvent 函式,並指定PRINTER_EVENT_CACHE_REFRESH事件。

  9. 用戶端多工緩衝處理常式會再次呼叫驅動程式的 DrvPrinterEvent 函式,並指定PRINTER_EVENT_ADD_CONNECTION事件。

  10. 如果提供 Point 和 Print DLL,用戶端多工緩衝處理常式會呼叫其 SpoolerCopyFileEvent 函式,並指定COPYFILE_EVENT_ADD_PRINTER_CONNECTION事件。

連接範例

例如,假設安裝應用程式已定義安裝範例中所述的伺服器登錄專案。 此外,假設伺服器名為 NTPRINT,而用戶端名為 MyClient。

若要連線到名為 HPColor on NTPRINT 的列印佇列,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。

  • 記錄事件,指出已下載 Point 和 Print 檔案。

  • 在 Mscms.dll 中呼叫 SpoolerCopyFileEvent 函式,並指定COPYFILE_EVENT_FILES_CHANGED事件。

  • 呼叫印表機驅動程式的 DrvPrinterEvent 函式,並指定PRINTER_EVENT_CACHE_REFRESH事件。

  • 再次呼叫印表機驅動程式的 DrvPrinterEvent 函式,並指定PRINTER_EVENT_ADD_CONNECTION事件。

  • 在 Mscms.dll 中呼叫 SpoolerCopyFileEvent 函式,並指定COPYFILE_EVENT_ADD_PRINTER_CONNECTION事件。