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 コードを返します。 それ以外の場合は、呼び出しがまだ進行中の場合は SEC_I_ASYNC_CALL_PENDING を返すか、次の 2 番目の表の次のいずれかの致命的なエラー コードが返されることがあります。
リターン コード |
説明 |
---|---|
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 [カーネル モード ドライバーのみ] |
Header | sspi.h |
関連項目
SspiAcquireCredentialsHandleAsync