共用方式為


SspiInitializeSecurityContextAsyncA 函式 (sspi.h)

SspiInitializeSecurityContextAsyncA 函式會從認證句柄起始用戶端、輸出 安全性內容。 函式可用來建置用戶端應用程式與遠端對等之間的安全性內容。 SspiInitializeSecurityContextAsyncA 會傳回用戶端必須傳遞至遠端對等的令牌,而對等會透過 SspiAcceptSecurityContextAsync 呼叫提交至本機安全性實作。

注意

此函式可作為 InitializeSecurityContext 函式的異步對應專案。

語法

SECURITY_STATUS SspiInitializeSecurityContextAsyncA(
  SspiAsyncContext *AsyncContext,
  PCredHandle      phCredential,
  PCtxtHandle      phContext,
  LPSTR            pszTargetName,
  unsigned long    fContextReq,
  unsigned long    Reserved1,
  unsigned long    TargetDataRep,
  PSecBufferDesc   pInput,
  unsigned long    Reserved2,
  PCtxtHandle      phNewContext,
  PSecBufferDesc   pOutput,
  unsigned long    *pfContextAttr,
  PTimeStamp       ptsExpiry
);

參數

AsyncContext

異步呼叫內容。

phCredential

AcquireCredentialsHandle所傳回之認證的句柄。 這個句柄是用來建置 安全性內容

phContext

現有 CtxtHandle 結構的指標。

pszTargetName

表示內容目標之 Null 終止字串的指標。 字串內容 安全性套件 特定,如下表所述。 這份清單並不詳盡。 其他系統 SSP 和第三方 SSP 可以新增至系統。

使用中的 SSP 意義
摘要 以 Null 結束的字串,可唯一識別所要求資源的 URI。 字串必須由 URI 中允許的字元組成,而且必須由 US ASCII 程式代碼集表示。 百分比編碼可用來代表US ASCII程式代碼集外的字元。
Kerberos 或交涉 服務主體名稱 (SPN) 或目的地伺服器 安全性內容。
NTLM 服務主體名稱 (SPN) 或目的地伺服器 安全性內容。
通道/SSL 唯一識別目標伺服器的 Null 終止字串。 安全通道會使用此值來驗證伺服器證書。 安全通道也會使用此值在重新建立連線時,在會話快取中找出會話。 只有在符合下列所有條件時,才會使用快取的會話:
  • 目標名稱相同。
  • 快取專案尚未過期。
  • 呼叫函式的應用程式程式相同。
  • 登入會話相同。
  • 認證句柄相同。

fContextReq

指出內容要求的位旗標。

如需旗標值及其意義清單,請參閱 InitializeSecurityContext:fContextReq

Reserved1

此參數是保留的,而且必須設定為零。

TargetDataRep

目標上的數據表示法,例如位元組排序。 這個參數可以是SECURITY_NATIVE_DREP或SECURITY_NETWORK_DREP。

pInput

SecBufferDesc 結構的指標,其中包含做為封裝輸入之緩衝區的指標。

Reserved2

此參數是保留的,而且必須設定為零。

phNewContext

CtxtHandle 結構的指標。

pOutput

SecBufferDesc 結構的指標,其中包含接收輸出數據的 SecBuffer 結構的指標。

pfContextAttr

要接收一組位旗標的變數指標,指出已建立內容的屬性。 如需各種屬性的描述,請參閱 內容需求

ptsExpiry

選擇性TimeStamp 結構的指標,可接收內容的到期時間。

傳回值

如果建立安全性內容的異步要求已成功排入佇列以執行,則傳回 SEC_E_OK 否則,會傳回嘗試將它排入佇列的錯誤。 若要擷取作業的狀態,請使用 SspiGetAsyncCallStatus

如果已接受從伺服器接收的安全性內容,SspiGetAsyncCallStatus 會傳回 SEC_E_OK 或下表中的其中一個 SSPI 代碼。 否則,如果呼叫仍在進行中,或下表中的下列任何嚴重錯誤碼,可能會傳回 SEC_I_ASYNC_CALL_PENDING

傳回碼
描述
SEC_I_COMPLETE_AND_CONTINUE
0x00090314L
客戶端必須呼叫 completeAuthToken ,並將輸出令牌傳遞至伺服器。 客戶端接著會等候傳回的令牌,並在另一個呼叫中將它傳遞至 SspiInitializeSecurityContextAsyncA。
SEC_I_COMPLETE_NEEDED
0x00090313L
客戶端必須先完成從伺服器建置訊息,才能呼叫 CompleteAuthToken
SEC_I_CONTINUE_NEEDED
0x00090312L
客戶端必須將輸出令牌傳送至伺服器,並等候傳回令牌。 傳回的令牌接著會傳入另一個對 SspiInitializeSecurityContextAsyncA 的呼叫。 輸出令牌可以是空的。
SEC_I_INCOMPLETE_CREDENTIALS 搭配 Schannel 使用。 伺服器已要求客戶端驗證,且提供的認證不包含憑證,或憑證不是由伺服器信任的證書頒發機構單位所簽發。
SEC_E_INCOMPLETE_MESSAGE
0x80090318L
未從網路讀取整個訊息的數據。 傳回這個值時,pInput 緩衝區會包含 SecBuffer 結構,其 BufferType 成員為 SECBUFFER_MISSING。 SecBuffer 的 cbBuffer 成員包含值,指出函式在函式成功之前必須從客戶端讀取的額外位元組數目。 雖然這個數位不一定正確,但使用它有助於藉由避免多次呼叫此函式來改善效能。
SEC_E_OK
0x00000000L
已接受從用戶端接收的安全性內容。 如果函式產生輸出令牌,則必須將令牌傳送至伺服器。

嚴重錯誤碼

傳回碼
描述
SEC_E_INSUFFICIENT_MEMORY
0x80090300L
記憶體不足,無法完成要求的動作。
SEC_E_INTERNAL_ERROR
0x80090304L
未對應至 SSPI 錯誤碼的錯誤發生。
SEC_E_INVALID_HANDLE
0x80100003L
傳遞至函式的句柄無效。
SEC_E_INVALID_TOKEN
0x80090308L
錯誤是因為格式不正確的輸入令牌,例如傳輸中損毀的令牌、大小不正確的令牌,或傳入錯誤安全性套件的令牌。 如果客戶端和伺服器未交涉適當的安全性套件,將令牌傳遞至錯誤的封裝可能會發生。
SEC_E_LOGON_DENIED
0x8009030CL
登入失敗。
SEC_E_NO_AUTHENTICATING_AUTHORITY
0x80090311L
無法連絡任何授權單位進行驗證。 驗證方域名可能不正確、網域無法連線,或可能有信任關係失敗。
SEC_E_NO_CREDENTIALS
0x8009030EL
安全性套件中沒有可用的認證。
SEC_E_TARGET_UNKNOWN 無法辨識目標。
SEC_E_UNSUPPORTED_FUNCTION
0x80090302L
在 fContextReq 參數中指定了無效的內容屬性旗標(ISC_REQ_DELEGATE或ISC_REQ_PROMPT_FOR_CREDS)。
SEC_E_WRONG_PRINCIPAL 接收驗證要求的主體與傳遞至 pszTargetName 參數的主體不同。 這表示相互驗證失敗。

言論

如需完整備註,請參閱 InitializeSecurityContext

要求

要求 價值
最低支援的用戶端 Windows 10 版本 1607 [僅限內核模式驅動程式]
支援的最低伺服器 Windows Server 2016 [僅限內核模式驅動程式]
標頭 sspi.h

另請參閱

SspiAcceptSecurityContextAsync

SspiAcquireCredentialsHandleAsync