SspiInitializeSecurityContextAsyncW 函式 (sspi.h)
SspiInitializeSecurityContextAsyncW 函式會從認證句柄起始用戶端、輸出 安全性內容。 函式可用來建置用戶端應用程式與遠端對等之間的安全性內容。 SspiInitializeSecurityContextAsyncW 會傳回用戶端必須傳遞至遠端對等的令牌,而對等會透過 SspiAcceptSecurityContextAsync 呼叫提交至本機安全性實作。
注意
此函式可作為 InitializeSecurityContext 函式的異步對應專案。
語法
SECURITY_STATUS SspiInitializeSecurityContextAsyncW(
SspiAsyncContext *AsyncContext,
PCredHandle phCredential,
PCtxtHandle phContext,
PSECURITY_STRING 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 |