SpInitLsaModeContextFn
コールバックシグネチャ
NTSTATUS SpInitLsaModeContextFn(
UINT_PTR CredentialHandle,
UINT_PTR ContextHandle,
LSA_UNICODE_STRING* TargetName,
DWORD ContextRequirements,
DWORD TargetDataRep,
SecBufferDesc* InputBuffers,
UINT_PTR* NewContextHandle,
SecBufferDesc* OutputBuffers,
DWORD* ContextAttributes,
LONGLONG* ExpirationTime,
BOOLEAN* MappedContext,
SecBuffer* ContextData
);パラメーター
| フィールド | 型 | 説明 | ||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| CredentialHandle | UINT_PTR | 省略可能。コンテキストに使用する 資格情報 へのハンドルです。ContextHandle パラメーターが NULL でない場合、CredentialHandle は NULL にできます。 | ||||||||||||||||||||||||||||||
| ContextHandle | UINT_PTR | 省略可能。このコンテキストの基になるコンテキストへのハンドルです。CredentialHandle パラメーターが NULL でない場合、ContextHandle は NULL にできます。 | ||||||||||||||||||||||||||||||
| TargetName | LSA_UNICODE_STRING* | 省略可能。コンテキストのターゲット名を格納した UNICODE_STRING へのポインターです。TargetName の内容はパッケージ固有であり、LSA では解釈されません。 | ||||||||||||||||||||||||||||||
| ContextRequirements | DWORD | クライアントが必要とするコンテキスト属性を示すフラグです。実際のコンテキスト属性は ContextAttributes パラメーターで返されます。 次の表に、有効な値を示します。
| ||||||||||||||||||||||||||||||
| TargetDataRep | DWORD | ターゲットにおけるバイト順序などのデータ表現を示すフラグです。SECURITY_NATIVE_DREP または SECURITY_NETWORK_DREP を格納します。 | ||||||||||||||||||||||||||||||
| InputBuffers | SecBufferDesc* | サーバーからの直前の応答メッセージを格納した SecBufferDesc 構造体へのポインターです。この関数が最初に呼び出されるときは、InputBuffers パラメーターは NULL です。 | ||||||||||||||||||||||||||||||
| NewContextHandle | UINT_PTR* | 新しい セキュリティコンテキスト へのハンドルを受け取るポインターです。セキュリティコンテキストの使用が終わったら、SpDeleteContext 関数を呼び出してハンドルを解放してください。 | ||||||||||||||||||||||||||||||
| OutputBuffers | SecBufferDesc* | サーバーに返すセキュリティトークンを格納した SecBufferDesc 構造体へのポインターです。 | ||||||||||||||||||||||||||||||
| ContextAttributes | DWORD* | 新しいコンテキストの属性を示すフラグへのポインターです。クライアントは ContextRequirements パラメーターで属性のセットを要求します。ContextRequirements のフラグが ContextAttributes のフラグと一致しない場合、クライアントは処理を続行するか終了するかを判断する必要があります。有効なフラグの完全な一覧については、 Context Requirements を参照してください。 | ||||||||||||||||||||||||||||||
| ExpirationTime | LONGLONG* | 新しいコンテキストの有効期限を受け取る TimeStamp へのポインターです。 | ||||||||||||||||||||||||||||||
| MappedContext | BOOLEAN* | ブール値へのポインターです。セキュリティパッケージ がユーザーモードの SSP/AP 関数を実装している場合は、MappedContext に TRUE を設定します。 | ||||||||||||||||||||||||||||||
| ContextData | SecBuffer* | ユーザーモードのセキュリティコンテキストを作成する際にコピーするデータを受け取る SecBuffer 構造体へのポインターです。ContextData のメモリは AllocateLsaHeap 関数を使用して割り当ててください。メモリは LSA によって解放されます。 |
公式ドキュメント
SpInitLsaModeContext 関数は、サーバーとクライアントの間に セキュリティコンテキスト を確立するために使用される、クライアント側のディスパッチ関数です。
SpInitLsaModeContext 関数は、クライアントが Security Support Provider Interface の InitializeSecurityContext (General) 関数を呼び出したときに呼び出されます。
戻り値
関数が成功し、それ以上の処理が不要な場合は STATUS_SUCCESS を返します。処理が完了していない場合は、SEC_I_CONTINUE_NEEDED を返す必要があります。この値が返された場合、呼び出し元は InitializeSecurityContext (General) 関数を再度呼び出す必要があります。
それ以外の理由で セキュリティコンテキスト の作成に失敗した場合は、失敗した理由を示す NTSTATUS コードを返す必要があります。
解説(Remarks)
SpAcceptLsaModeContext 関数は、コンテキストを作成するサーバー側の関数です。
SSP/AP は SpInitLsaModeContext 関数を実装する必要がありますが、実装に付ける実際の名前は開発者が自由に決められます。
SpInitLsaModeContext 関数へのポインターは、 SpLsaModeInitialize 関数から受け取る SECPKG_FUNCTION_TABLE 構造体に格納されています。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)