Example #1
0
 private static extern CredUiReturnCodes CredUIPromptForCredentials(ref CreduiInfo pUiInfo, string pszTargetName,
                                                                    IntPtr Reserved, int dwAuthError,
                                                                    StringBuilder pszUserName,
                                                                    int ulUserNameMaxChars,
                                                                    StringBuilder pszPassword,
                                                                    int ulPasswordMaxChars, ref int pfSave,
                                                                    CreduiFlags dwFlags);
Example #2
0
 private static extern CredUiReturnCodes CredUIPromptForCredentials(ref CreduiInfo pUiInfo, string pszTargetName,
                                                                    IntPtr Reserved, int dwAuthError,
                                                                    StringBuilder pszUserName,
                                                                    int ulUserNameMaxChars,
                                                                    StringBuilder pszPassword,
                                                                    int ulPasswordMaxChars, ref int pfSave,
                                                                    CreduiFlags dwFlags);
Example #3
0
        internal static PSCredential CredUIPromptForCredential(string caption, string message, string userName, string targetName, PSCredentialTypes allowedCredentialTypes, PSCredentialUIOptions options, IntPtr parentHWND)
        {
            PSCredential credential = null;

            CreduiInfo structure = new CreduiInfo();

            structure.pszCaptionText = caption;
            structure.pszMessageText = message;
            StringBuilder pszUserName = new StringBuilder(userName, 0x201);
            StringBuilder pszPassword = new StringBuilder(0x100);
            bool          flag        = false;
            int           pfSave      = Convert.ToInt32(flag);

            structure.cbSize     = Marshal.SizeOf(structure);
            structure.hwndParent = parentHWND;
            CreduiFlags dwFlags = CreduiFlags.DO_NOT_PERSIST;

            if ((allowedCredentialTypes & PSCredentialTypes.Domain) != PSCredentialTypes.Domain)
            {
                dwFlags |= CreduiFlags.GENERIC_CREDENTIALS;
                if ((options & PSCredentialUIOptions.AlwaysPrompt) == PSCredentialUIOptions.AlwaysPrompt)
                {
                    dwFlags |= CreduiFlags.ALWAYS_SHOW_UI;
                }
            }
            CredUiReturnCodes codes = CredUiReturnCodes.ERROR_INVALID_PARAMETER;

            if ((pszUserName.Length <= 0x201) && (pszPassword.Length <= 0x100))
            {
                codes = CredUIPromptForCredentials(ref structure, targetName, IntPtr.Zero, 0, pszUserName, 0x201, pszPassword, 0x100, ref pfSave, dwFlags);
            }
            if (codes == CredUiReturnCodes.NO_ERROR)
            {
                string str = null;
                if (pszUserName != null)
                {
                    str = pszUserName.ToString();
                }
                SecureString password = new SecureString();
                for (int i = 0; i < pszPassword.Length; i++)
                {
                    password.AppendChar(pszPassword[i]);
                    pszPassword[i] = '\0';
                }
                if (!string.IsNullOrEmpty(str))
                {
                    credential = new PSCredential(str, password);
                }
                else
                {
                    credential = null;
                }
            }
            else
            {
                credential = null;
            }
            return(credential);
        }
Example #4
0
        /// <summary>
        /// コマンドライン(コンソール)アプリケーションで作業しているユーザーからの資格情報を要求し、その資格情報を受け入れます。ユーザーが入力した名前とパスワードは、検証のために呼び出し元のアプリケーションに戻されます。
        /// </summary>
        /// <param name="TargetName">資格情報のターゲット名</param>
        /// <param name="Reserved">予約された引数。NULLの必要があります。</param>
        /// <param name="AuthError">資格情報の入力が必要な理由を指定します。呼び出し元は、別の認証呼び出しによって返されたこのWindowsエラーパラメータを渡して、ダイアログボックスが特定のエラーに対応できるようにすることができます。</param>
        /// <param name="UserName">信任状のユーザー名</param>
        /// <param name="UserNameMaxChars"></param>
        /// <param name="Password"></param>
        /// <param name="PasswordMaxChars"></param>
        /// <param name="Save">資格情報保存の初期状態</param>
        /// <param name="Flags"></param>
        public static (CredUIReturnCodes ResultCode, string UserName, string Password, bool IsSave) CmdLinePromptForCredentials(string TargetName, IntPtr Reserved, int AuthError, string UserName, uint UserNameMaxChars, string Password, uint PasswordMaxChars, bool Save, CreduiFlags Flags)
        {
            var UserNameBuffer = new StringBuilder((int)UserNameMaxChars);

            if (!string.IsNullOrEmpty(UserName))
            {
                UserNameBuffer.Append(UserName);
            }
            var PasswordBuffer = new StringBuilder((int)PasswordMaxChars);

            if (!string.IsNullOrEmpty(Password))
            {
                PasswordBuffer.Append(Password);
            }
            var result = Interop.CredUICmdLinePromptForCredentials(TargetName, Reserved, AuthError, UserNameBuffer, UserNameMaxChars, PasswordBuffer, PasswordMaxChars, ref Save, Flags);

            return(result, UserNameBuffer.ToString(), PasswordBuffer.ToString(), Save);
        }