SspiAcceptSecurityContextAsync 函式 (sspi.h)
SspiAcceptSecurityContextAsync 函式可讓傳輸應用程式的伺服器元件以異步方式建立伺服器與遠端客戶端之間的 安全性內容。 遠端用戶端會呼叫 SspiInitializeSecurityContextAsync 函式,以異步方式啟動建立安全性內容的程式。
注意
此函式可作為 AcceptSecurityContext 函式的異步對應專案。
語法
SECURITY_STATUS SspiAcceptSecurityContextAsync(
SspiAsyncContext *AsyncContext,
PCredHandle phCredential,
PCtxtHandle phContext,
PSecBufferDesc pInput,
unsigned long fContextReq,
unsigned long TargetDataRep,
PCtxtHandle phNewContext,
PSecBufferDesc pOutput,
unsigned long *pfContextAttr,
PTimeStamp ptsExpiry
);
參數
AsyncContext
異步呼叫內容。
phCredential
伺服器認證的句柄。 若要擷取此句柄,伺服器會呼叫 SspiAcquireCredentialsHandleAsync 函式,並設定SECPKG_CRED_INBOUND或SECPKG_CRED_BOTH旗標。
phContext
CtxtHandle 結構的指標。 在第一次呼叫 SspiAcceptSecurityContextAsync時,此指標會 NULL。 在後續的呼叫中,phContext 會指定第一次呼叫在 phNewContext 參數中傳回的部分格式內容。
pInput
由用戶端 呼叫 SspiInitializeSecurityContextAsync所產生之 SecBufferDesc 結構的指標。 結構包含輸入緩衝區描述元。
第一個緩衝區的類型必須是 SECBUFFER_TOKEN,且包含從用戶端接收的安全性令牌。 第二個緩衝區的類型應該是 SECBUFFER_EMPTY。
fContextReq
指定伺服器建立內容所需屬性的位旗標。
如需參數值的完整清單,請參閱 AcceptSecurityContext:fContextReq。
TargetDataRep
目標上的數據表示法,例如位元組排序。 這個參數可以是 SECURITY_NATIVE_DREP 或 SECURITY_NETWORK_DREP。
phNewContext
CtxtHandle 結構的指標。 在第一次呼叫 SspiAcceptSecurityContextAsync時,此指標會收到新的內容句柄。 在後續的呼叫中,phNewContext 可以和 phContext 參數中指定的句柄相同。
pOutput
SecBufferDesc 結構的指標,其中包含輸出緩衝區描述元。 此緩衝區會傳送至用戶端,以輸入至 SspiInitializeSecurityContextAsync的其他呼叫。 即使函式傳回SEC_E_OK,仍可能會產生輸出緩衝區。 產生的任何緩衝區都必須傳送回用戶端應用程式。
在輸出中,此緩衝區會接收異步安全性內容的令牌。 令牌必須傳送至用戶端。 函式也可以傳回類型為 SECBUFFER_EXTRA的緩衝區。
pfContextAttr
一組位旗標的指標,表示已建立內容的屬性。
如需屬性的描述,請參閱 AcceptSecurityContext:pfContextAttr。
ptsExpiry
TimeStamp 結構的指標,可接收內容的到期時間。
請參閱 AcceptSecurityContext:ptsExpiry。
傳回值
如果建立安全性內容的異步要求已成功排入佇列以執行,則傳回 SEC_E_OK。 否則,它會傳回嘗試將錯誤排入佇列時所產生的錯誤。 若要擷取作業的狀態,請使用 SspiGetAsyncCallStatus。
如果已接受從用戶端接收的安全性內容,SspiGetAsyncCallStatus 會傳回下表中的 SEC_E_OK 或其中一個 SSPI 程式代碼。 否則,如果呼叫仍在進行中,或下表中的下列任何嚴重錯誤碼,可能會傳回 SEC_I_ASYNC_CALL_PENDING。
傳回碼 |
描述 |
---|---|
SEC_E_INCOMPLETE_MESSAGE 0x80090318L |
函式成功。 輸入緩衝區中的數據不完整。 應用程式必須從用戶端讀取其他數據,並再次呼叫 SspiAcceptSecurityContextAsync。 |
SEC_I_COMPLETE_AND_CONTINUE 0x00090314L |
函式成功。 伺服器必須呼叫 completeAuthToken ,並將輸出令牌傳遞至用戶端。 然後,伺服器必須等候用戶端傳回令牌,再呼叫 SspiAcceptSecurityContextAsync。 |
SEC_I_COMPLETE_NEEDED 0x00090313L |
函式成功。 伺服器必須先完成從用戶端建置訊息,才能呼叫 CompleteAuthToken。 |
SEC_I_CONTINUE_NEEDED 0x00090312L |
函式成功。 伺服器必須將輸出令牌傳送至用戶端,並等候傳回的令牌。 傳回的令牌應該傳入 pInput,以取得 SspiAcceptSecurityContextAsync 的另一個呼叫。 |
嚴重錯誤碼
傳回碼 |
描述 |
---|---|
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 |
函式失敗。 phCredential 參數中指定的 認證 句柄無效。 |
SEC_E_UNSUPPORTED_FUNCTION 0x80090302L |
函式失敗。 fContextReq 參數指定了無效的內容屬性旗標(ASC_REQ_DELEGATE或ASC_REQ_PROMPT_FOR_CREDS)。 |
言論
SspiAcceptSecurityContextAsync 函式是與 SspiInitializeSecurityContextAsync 函式的伺服器對應專案。
呼叫端負責判斷最終內容屬性是否足夠。 例如,如果要求機密性(加密),但無法建立,某些應用程式可能會選擇立即關閉連線。 如果無法建立安全性內容,伺服器必須呼叫 SspiDeleteSecurityContextAsync 函式來釋放部分建立的內容。
如需其他備註,請參閱 AcceptSecurityContext。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows 10 版本 1607 [僅限內核模式驅動程式] |
支援的最低伺服器 | Windows Server 2016 [僅限內核模式驅動程式] |
標頭 | sspi.h |
另請參閱
SspiAcquireCredentialsHandleAsync