SspiInitializeSecurityContextAsyncW 関数 (sspi.h)
SspiInitializeSecurityContextAsyncW 関数は、資格情報ハンドルからクライアント側の送信 セキュリティ コンテキスト を開始します。 この関数は、クライアント アプリケーションとリモート ピアの間にセキュリティ コンテキストを構築するために使用されます。 SspiInitializeSecurityContextAsyncW は、クライアントがリモート ピアに渡す必要があるトークンを返します。このトークンは、ピアが SspiAcceptSecurityContextAsync 呼び出しを通じてローカル セキュリティ実装に送信します。
手記
この関数は、InitializeSecurityContext 関数に対応する非同期関数として機能します。
構文
SECURITY_STATUS SspiInitializeSecurityContextAsyncW(
SspiAsyncContext *AsyncContext,
PCredHandle phCredential,
PCtxtHandle phContext,
PSECURITY_STRING pszTargetName,
unsigned long fContextReq,
unsigned long Reserved1,
unsigned long TargetDataRep,
PSecBufferDesc pInput,
unsigned long Reserved2,
PCtxtHandle phNewContext,
PSecBufferDesc pOutput,
unsigned long *pfContextAttr,
PTimeStamp ptsExpiry
);
パラメーター
AsyncContext
非同期呼び出しコンテキスト。
phCredential
AcquireCredentialsHandleによって返される資格情報
phContext
既存の CtxtHandle 構造体へのポインター。
pszTargetName
コンテキストのターゲットを示す null で終わる文字列へのポインター。 文字列の内容は、次の表に示すように、セキュリティ パッケージ 固有の
使用中の SSP | 意味 |
---|---|
ダイジェスト | 要求されたリソースの URI を一意に識別する null で終わる文字列。 文字列は、URI で許可される文字で構成され、US ASCII コード セットで表現できる必要があります。 パーセント エンコードは、US ASCII コード セットの外部の文字を表すために使用できます。 |
Kerberos の またはネゴシエート | サービス プリンシパル名 (SPN) または移行先サーバーの セキュリティ コンテキスト。 |
NTLM を |
サービス プリンシパル名 (SPN) または移行先サーバーの セキュリティ コンテキスト。 |
Schannel/SSL | ターゲット サーバーを一意に識別する null で終わる文字列。 Schannel は、この値を使用してサーバー証明書を確認します。 Schannel は、接続を再確立するときに、この値を使用してセッション キャッシュ内のセッションを検索します。 キャッシュされたセッションは、次のすべての条件が満たされている場合にのみ使用されます。
|
fContextReq
コンテキストの要求を示すビット フラグ。
フラグ値とその意味 一覧については、「InitializeSecurityContext: fContextReq」を参照してください。
Reserved1
このパラメーターは予約されており、0 に設定する必要があります。
TargetDataRep
ターゲット上のバイト順序などのデータ表現。 このパラメーターには、SECURITY_NATIVE_DREPまたはSECURITY_NETWORK_DREPを指定できます。
pInput
パッケージへの入力として指定されたバッファーへのポインターを含む SecBufferDesc 構造体へのポインター。
Reserved2
このパラメーターは予約されており、0 に設定する必要があります。
phNewContext
CtxtHandle 構造体へのポインター。
pOutput
出力データを受け取る SecBuffer 構造体へのポインターを含む SecBufferDesc 構造体へのポインター。
pfContextAttr
確立されたコンテキストの属性を示すビット フラグのセットを受け取る変数へのポインター。 さまざまな属性の詳細については、「コンテキスト要件の」を参照してください。
ptsExpiry
省略可能なです。 コンテキストの有効期限を受け取る TimeStamp 構造体へのポインター。
戻り値
セキュリティ コンテキストを確立する非同期要求が実行のために正常にキューに登録された場合は、SEC_E_OK を返します。それ以外の場合は、キューに入ろうとして生成されたエラーを返します。 操作の状態を取得するには、SspiGetAsyncCallStatusを使用します。
サーバーから受信したセキュリティ コンテキストが受け入れられた場合、SspiGetAsyncCallStatus は SEC_E_OK または次の表のいずれかの SSPI コードを返します。 それ以外の場合は、呼び出しがまだ進行中の場合、または次の 2 番目の表のいずれかの致命的なエラー コードが SEC_I_ASYNC_CALL_PENDING 返される可能性があります。
リターン コード |
形容 |
---|---|
SEC_I_COMPLETE_AND_CONTINUE 0x00090314L |
クライアントは CompleteAuthToken |
SEC_I_COMPLETE_NEEDED 0x00090313L |
クライアントは、CompleteAuthToken |
SEC_I_CONTINUE_NEEDED 0x00090312L |
クライアントは、サーバーに出力トークンを送信し、戻りトークンを待機する必要があります。 返されたトークンは、SspiInitializeSecurityContextAsyncA への別の呼び出しで渡されます。 出力トークンは空にすることができます。 |
SEC_I_INCOMPLETE_CREDENTIALS | Schannel で使用します。 サーバーはクライアント認証を要求しており、指定された資格情報に証明書が含まれていないか、サーバーによって信頼されている証明機関によって証明書が発行されませんでした。 |
SEC_E_INCOMPLETE_MESSAGE 0x80090318L |
メッセージ全体のデータがネットワークから読み取られなかった。 この値が返されると、pInput バッファーには、SECBUFFER_MISSING の BufferType メンバーを持つ SecBuffer 構造体が含まれます。 SecBuffer の cbBuffer メンバーには、この関数が成功する前に関数がクライアントから読み取る必要がある追加バイト数を示す値が含まれています。 この数値は常に正確であるとは限りませんが、使用すると、この関数の複数の呼び出しを回避することでパフォーマンスを向上させることができます。 |
SEC_E_OK 0x00000000L |
クライアントから受信したセキュリティ コンテキストが受け入れられました。 関数が出力トークンを生成した場合は、トークンをサーバーに送信する必要があります。 |
致命的なエラー コード
リターン コード |
形容 |
---|---|
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 |
セキュリティ パッケージでは、資格情報を使用できません。 |
SEC_E_TARGET_UNKNOWN | ターゲットが認識されませんでした。 |
SEC_E_UNSUPPORTED_FUNCTION 0x80090302L |
fContextReq パラメーターに無効なコンテキスト属性フラグ (ISC_REQ_DELEGATEまたはISC_REQ_PROMPT_FOR_CREDS) が指定されました。 |
SEC_E_WRONG_PRINCIPAL | 認証要求を受け取ったプリンシパルは、pszTargetName パラメーターに渡されたプリンシパルと同じではありません。 これは、相互認証の失敗を示します。 |
備考
完全な解説については、「InitializeSecurityContext
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 10 バージョン 1607 [カーネル モード ドライバーのみ] |
サポートされる最小サーバー | Windows Server 2016 [カーネル モード ドライバーのみ] |
ヘッダー | sspi.h |
関連項目
SspiAcceptSecurityContextAsync
SspiAcquireCredentialsHandleAsync の