共用方式為


使用者模式初始化

分散式 (用戶端/伺服器) 應用程式會使用 安全性套件 來取得已驗證的連線,以及交換訊息。 應用程式會呼叫安全性支援提供者介面 (SSPI) 函式,這些函式會對應至 SSP/AP 所實作的函式,以及 由使用者模式 SSP/AP 實作的函式。 此對應是由安全性提供者 DLL (Secur32.dll 或Security.dll) 所執行,可動態載入用戶端和伺服器進程。 DLL 也可以使用 Secur32.lib 以靜態方式連結。 DLL 和 LIB 都隨附于 Microsoft Windows 軟體發展工具組 (SDK) 。

如果正確註冊包含安全性套件的 SSP/AP DLL,系統就會處理將安全性套件載入用戶端或伺服器進程。

伺服器會藉由監視埠,等候用戶端傳送訊息,開始取得與用戶端的安全連線的程式。 用戶端會呼叫 SSPI 函式 InitializeSecurityCoNtext (General) ,開始取得與伺服器的安全連線的程式。 此函式會對應至自訂安全性套件的 SpInitLsaModeCoNtext 函 式。 SpInitLsaModeCoNtext 會將權杖傳回給用戶端,並將權杖轉送至伺服器。

從用戶端接收權杖時,伺服器會呼叫 SSPI 函式 AcceptSecurityCoNtext (General) ,此函式會分派至安全性套件的 SpAcceptLsaModeCoNtext 函 式。 如果 SpAcceptLsaModeCoNtext 函式成功,而且不需要再進行處理才能建立安全性內容,則函式應該會將STATUS_SUCCESS傳回給呼叫端。 如果需要其他處理,函式應該會傳回SEC_I_CONTINUE_NEEDED,並將權杖傳回給伺服器。 伺服器會將權杖轉送至用戶端,該用戶端會再次呼叫 InitializeSecurityCoNtext (General)

在建立或失敗驗證的連線之前,可能會視需要重複此呼叫週期。 在此程式期間,如果 SpAcceptLsaModeCoNtextSpInitLsaModeCoNtext 函式成功,而且不需要再處理 安全性內容,則函式應該會將STATUS_SUCCESS傳回給呼叫端。 如果需要額外的處理,函式應該會傳回SEC_I_CONTINUE_NEEDED,並將權杖傳回給負責轉送的呼叫端。

安全性套件所實作的通訊協定會決定重複此迴圈的次數。 例如,在支援三次相互驗證的安全性套件中,呼叫順序如下所示:

  1. 用戶端會藉由呼叫 InitializeSecurityCoNtext (General) 取得權杖,並將它傳送至伺服器。 伺服器會第一次 呼叫 AcceptSecurityCoNtext (General) ,並取得它傳送給用戶端的回復權杖。
  2. 用戶端會在第二次呼叫 InitializeSecurityCoNtext (General) 中使用從伺服器收到的權杖,並取得最終權杖。 用戶端會將此權杖傳送至伺服器。
  3. 伺服器會收到在 最後呼叫 AcceptSecurityCoNtext (General) 中所使用的第 2 個回合所產生的權杖。

SpAcceptLsaModeCoNtextSpInitLsaModeCoNtext 函式成功,而且不需要再進行處理才能建立安全性內容時,函式應該會將STATUS_SUCCESS傳回給呼叫者。 此外,如果自訂安全性套件支援使用者模式 SSP/AP 所實作的函式,SpAcceptLsaModeCoNtextSpInitLsaModeCoNtext必須透過MappedCoNtext參數傳回TRUEMappedCoNtext值不會傳回給應用程式;LSA 會攔截它。

當 MappedCoNtext為 true時,LSA 會呼叫 SSP/AP DLL 的SpUsermodeInitialize 函式。 此函式提供每個安全性套件所實作之使用者模式函式的指標資料表。 系統會使用SpUsermodeInitialize所傳回的函式資料表,呼叫每個套件的SpInstanceInit函式。 SpInstanceInit 會收到 使用者模式 SSP/AP 所呼叫之 LSA 函式的指標資料表。