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

こちらもご覧ください

SspiAcceptSecurityContextAsync

SspiAcquireCredentialsHandleAsync