SspiAcceptSecurityContextAsync 함수(sspi.h)
메모
이 함수는 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
서버 자격 증명에 대한 핸들입니다. 이 핸들을 검색하기 위해 서버는 SECPKG_CRED_INBOUND 또는 SECPKG_CRED_BOTH 플래그 집합을 사용하여 SspiAcquireCredentialsHandleAsync 함수를 호출합니다.
phContext
CtxtHandle 구조체에 대한 포인터입니다.
pInput
SspiInitializeSecurityContextAsync대한 클라이언트 호출에 의해 생성된 SecBufferDesc 구조체에 대한 포인터입니다. 구조체에는 입력 버퍼 설명자가 포함됩니다.
첫 번째 버퍼는 SECBUFFER_TOKEN 형식이어야 하며 클라이언트에서 받은 보안 토큰을 포함해야 합니다. 두 번째 버퍼는 SECBUFFER_EMPTY형식이어야 합니다.
fContextReq
컨텍스트를 설정하는 데 서버에서 필요한 특성을 지정하는 비트 플래그입니다.
매개 변수 값의 전체 목록은 AcceptSecurityContext: fContextReq 참조하세요.
TargetDataRep
대상의 바이트 순서 지정과 같은 데이터 표현입니다. 이 매개 변수는 SECURITY_NATIVE_DREP 또는 SECURITY_NETWORK_DREP수 있습니다.
phNewContext
CtxtHandle 구조체에 대한 포인터입니다. SspiAcceptSecurityContextAsync대한 첫 번째 호출에서 이 포인터는 새 컨텍스트 핸들을 받습니다. 후속 호출에서 phNewContextphContext 매개 변수에 지정된 핸들과 같을 수 있습니다.
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 |
함수가 성공했습니다. 서버는 출력 토큰을 클라이언트에 보내고 반환된 토큰을 기다려야 합니다. 반환된 토큰은 SspiAcceptSecurityContextAsync에 대한 다른 호출에 대해 pInput 전달되어야 합니다. |
심각한 오류 코드
반환 코드 |
묘사 |
---|---|
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
SspiAcquireCredentialsHandleAsync