SspiInitializeSecurityContextAsyncA 関数 (sspi.h)

SspiInitializeSecurityContextAsyncA 関数は、資格情報ハンドルからクライアント側の送信セキュリティ コンテキストを開始します。 関数は、クライアント アプリケーションとリモート ピアの間にセキュリティ コンテキストを構築するために使用されます。 SspiInitializeSecurityContextAsyncA は、クライアントがリモート ピアに渡す必要があるトークンを返します。これにより、ピアは SspiAcceptSecurityContextAsync 呼び出しを通じてローカル セキュリティ実装に送信されます。

注意

この関数は、InitializeSecurityContext 関数に対応する非同期関数として機能します。

構文

SECURITY_STATUS SspiInitializeSecurityContextAsyncA(
  SspiAsyncContext *AsyncContext,
  PCredHandle      phCredential,
  PCtxtHandle      phContext,
  LPSTR            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 とサード パーティの SP をシステムに追加できます。

使用中の 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 を 呼び出し、出力トークンをサーバーに渡す必要があります。 その後、クライアントは返されたトークンを待機し、別の呼び出しで 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
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 [カーネル モード ドライバーのみ]
Header sspi.h

こちらもご覧ください

SspiAcceptSecurityContextAsync

SspiAcquireCredentialsHandleAsync