それらを実装するSSPを選択しなければなりません。これには、AcquireCredentialsHandleを呼び出します。ptsExpiry);pszPrincipalは、セキュリティプリンシパルを設定します。プリンシパルは、セキュリティシステムにおいて認識されるエンティティのことです。pszPackageは、認証に使用するSSPの名前を指定します。fCredentialUseは、認証情報をどのように使用するかを表す定数を指定します。pvLogonIDは、ユーザーを識別するLUIDを指定します。通常は、NULLを指定します。pAuthDataは、認証情報を格納した構造体のアドレスを指定します。使用するSSPによっては、NULLを指定することができます。pGetKeyFnは、NULLを指定します。pvGetKeyArgumentは、NULLを指定します。phCredentialは、クレデンシャルハンドルを受け取るCredHandle構造体のアドレスを指定します。ptsExpiryは、ローカル時刻を受け取るTimeStamp構造体のアドレスを指定します。AcquireCredentialsHandleの第2引数には、次のような定数を指定することができます。TEXT("NTLM")のように指定しても構いません。定義を使用すると、NTLMSP_NAME_WのようにUNICODE文字列として解釈されます。AcquireCredentialsHandleの第3引数には、次のような定数を指定することができます。送られてきたンテキストの妥当性を確認する。サーバーの一般的な値。通信相手に認証を要求する。クライアントの一般的な値。クレデンシャルハンドルを両方の目的で使用する。相互認証をサポートするサーバーの一般的な値。SECPKG_CRED_BOTHは、NTLMとKerberos及びNegotiateでのみ指定することができます。認証に使用するプロトコルやユーザー名、暗号化アルゴリズムのIDなどが含まれています。した情報を取得したい場合は、QueryCredentialsAttributesを呼び出します。pBuffer);phCredentialは、CredHandle構造体のアドレスを指定します。ulAttributeは、取得する情報の種類を表す定数を指定します。pBufferは、情報を受け取るバッファを指定します。不要になったクレデンシャルハンドルは、FreeCredentialsHandleで開放することになります。phCredential);phCredentialは、開放したいクレデンシャルハンドルを指定します。今回のプログラムは、AcquireCredentialsHandleを呼び出す例を示しています。TEXT("クレデンシャルハンドルの取得に失敗しました。SSPを使用したいことが分かります。第1引数にNULLを指定していますが、NTLMの場合ではこれは問題ありません。この場合は、現在のスレッドあるいはプロセスのトークンからプリンしパル名が参照されます。第3引数は、NTLMの場合はSECPKG_CRED_BOTHを指定することができます。NULLでも問題ありません。この場合は、現在のスレッドあるいはプロセスのトークンから認証情報が参照されます。引数の指定が大きく変わる場合があるので注意してください。クレデンシャルハンドルに関連するユーザー名を取得することができます。不要になった場合はFreeContextBufferで開放することになります。FreeCredentialsHandleで開放することになります。