共用方式為


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_DREPSECURITY_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

另請參閱

AcceptSecurityContext

內容需求

ImpersonateSecurityContext

SspiAcquireCredentialsHandleAsync

SspiDeleteSecurityContextAsync

SspiGetAsyncCallStatus