Vistaからは、クレデンシャルを入力するための新しい関数としてCredUIPromptForWindowsCredentialsが登場しました。この関数は、次のようなダイアログを表示します。CredUIPromptForWindowsCredentialsはWindowsへのログオンに使用される正規のダイアログを表示します。リファレンスではCredUIPromptForWindowsCredentialsの使用が推奨されています。CredUIPromptForWindowsCredentialsのプロトタイプは、次のように定義されています。dwFlags);pUiInfoは、ダイアログをカスタマイズするための情報を格納するCREDUI_INFO構造体のアドレスを指定します。NULLを指定することはできません。dwAuthErrorは、ダイアログに考慮してもらいたいエラー定数を指定します。pulAuthPackageは、使用する認証パッケージのIDを格納した変数のアドレスを指定します。0を指定しても問題ありません。pvInAuthBufferは、ダイアログの既定値としたいクレデンシャルを格納したバッファを指定します。既定値を与えたくない場合は、NULLを指定します。ulInAuthBufferSizeは、pvInAuthBufferのサイズを指定します。ppvOutAuthBufferは、入力されたクレデンシャルを受け取るバッファを指定します。pulOutAuthBufferSizeは、ppvOutAuthBufferのサイズを格納した変数のアドレスを指定します。pfSaveは、クレデンシャルを保存するように選択されたかどうかを受け取る変数のアドレスを指定します。チェックボックスを表示しない場合は、NULLを指定することができます。dwFlagsは、定義されている定数を指定します。関数が成功してOKボタンを押した場合は、ERROR_SUCCESSが返ります。ダイアログでキャンセルをした場合は、ERROR_CANCELLEDが返ります。dwFlagsに指定できる定数の一部を次に示します。ユーザー名とパスワードがプレーンテキストとして返されるようにする。「資格情報を記憶する」というチェックボックスを表示する。チェックされたかどうかは、pfSaveに返された値から確認できる。pfSaveの初期値によって、既定でチェックしておくことも可能。pvInAuthBufferに格納されているユーザー名を固定し、パスワードのみを入力可能とする。現在のプロセスのユーザー名を固定で表示し、パスワードのみを入力可能とする。別のアカウントを使用することも可能。クレデンシャルが自動で保存されるようなことはありません。これがTRUEである場合はクレデンシャルを保存します。CREDUI_INFO構造体は、次のように定義されています。*PCREDUI_INFO;cbSizeは、この構造体のサイズを指定します。hwndParentは、ダイアログの親にしたいウインドウハンドルを指定します。pszMessageTextは、ダイアログに表示したい文字列を指定します。pszCaptionTextは、ダイアログのタイトルとして表示したい文字列を指定します。hbmBannerは、ダイアログに表示したいビットマップのハンドルを指定します。CredUIPromptForWindowsCredentialsでこの構造体を使用する場合は、hbmBannerに必ずNULLを指定します。CredUIPromptForWindowsCredentialsは、入力されたクレデンシャルをppvOutAuthBufferに格納します。このバッファからユーザー名などを取得するには、CredUnPackAuthenticationBufferを呼び出します。*pcchMaxPassword);dwFlagsは、通常0を指定します。pAuthBufferは、クレデンシャルを格納したバッファを指定します。cbAuthBufferは、pAuthBufferのサイズを指定します。pszUserNameは、ユーザー名を受け取るバッファを指定します。pcchMaxUserNameは、pszUserNameのサイズを格納した変数のアドレスを指定します。pszDomainNameは、ドメイン名を受け取るバッファを指定します。pcchMaxDomainameは、pszDomainNameのサイズを格納した変数のアドレスを指定します。pszPasswordは、パスワードを受け取るバッファを指定します。pcchMaxPasswordは、pszPasswordのサイズを格納した変数のアドレスを指定します。今回のプログラムは、CredUIPromptForWindowsCredentialsでクレデンシャルを取得します。TEXT("ログオンに失敗しました。クレデンシャルを受け取るバッファを確保しておきます。プレーンテキストのユーザー名とパスワードが返されるようにします。ユーザー名とパスワードをバッファから取得します。これらの文字列は終端がNULLで終了していないため、明示的にNULL文字を追加します。第4引数のpvInAuthBufferにクレデンシャルを格納したバッファを指定する必要があります。CredPackAuthenticationBufferを呼び出せば、このようなバッファを作成することができます。CREDUIWIN_GENERIC);第1引数は0を指定します。第2引数はバッファに格納したいユーザー名を指定し、第3引数はパスワードを指定します。実際にはパスワードを指定しても、ダイアログには表示されないようです。第4引数に初期化するバッファを指定し、第5引数にバッファのサイズを格納した変数のアドレスを指定します。