次の方法で共有


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

サーバー資格情報へのハンドル。 このハンドルを取得するために、サーバーは SECPKG_CRED_INBOUND または SECPKG_CRED_BOTH フラグを設定して SspiAcquireCredentialsHandleAsync 関数を呼び出します。

phContext

CtxtHandle 構造体へのポインター。 SspiAcceptSecurityContextAsync最初の呼び出しでは、このポインターは NULLです。 後続の呼び出しでは、phContext は、最初の呼び出しによって phNewContext パラメーターで返される部分形式のコンテキストを指定します。

pInput

SspiInitializeSecurityContextAsyncへのクライアント呼び出しによって生成された SecBufferDesc 構造体へのポインター。 構造体には、入力バッファー記述子が含まれています。

最初のバッファーは SECBUFFER_TOKEN 型で、クライアントから受信したセキュリティ トークンを含む必要があります。 2 番目のバッファーは、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 コードを返します。 それ以外の場合は、呼び出しがまだ進行中の場合、または次の 2 番目の表のいずれかの致命的なエラー コードが 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 の

コンテキスト要件の

ImpersonateSecurityContext の

SspiAcquireCredentialsHandleAsync の

SspiDeleteSecurityContextAsync

SspiGetAsyncCallStatus