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 で終わる文字列へのポインター。 次の表に示すように、文字列の内容は セキュリティ パッケージ 固有です。 このリストは全てを網羅しているわけではありません。 追加のシステムSPとサードパーティSSPをシステムに追加できます。
使用中の 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 コードを返します。 それ以外の場合は、呼び出しがまだ進行中の場合は SEC_I_ASYNC_CALL_PENDING を返すか、次の 2 番目の表の次のいずれかの致命的なエラー コードが返されることがあります。
リターン コード |
説明 |
---|---|
SEC_I_COMPLETE_AND_CONTINUE 0x00090314L |
クライアントは CompleteAuthToken を 呼び出し、出力トークンをサーバーに渡す必要があります。 その後、クライアントは返されたトークンを待機し、別の呼び出しで SspiInitializeSecurityContextAsyncA に渡します。 |
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 0x000000000L |
クライアントから受信したセキュリティ コンテキストが受け入れられました。 関数が出力トークンを生成した場合は、トークンをサーバーに送信する必要があります。 |
致命的なエラー コード
リターン コード |
説明 |
---|---|
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 [カーネル モード ドライバーのみ] |
Header | sspi.h |