/// <summary>Returns a DialogResult indicating the user action.</summary>
        /// <param name="owner">The System.Windows.Forms.IWin32Window the dialog will display in front of.</param>
        /// <remarks>Sets the name, password and SaveChecked accessors to the state of the dialog as it was dismissed by the user.</remarks>
        private DialogResult ShowDialog(IWin32Window owner)
        {
            // set the api call parameters
            StringBuilder name = new StringBuilder(CREDUI.MAX_USERNAME_LENGTH);

            name.Append(Name);

            StringBuilder password = new StringBuilder(CREDUI.MAX_PASSWORD_LENGTH);

            password.Append(Password);

            int saveChecked = Convert.ToInt32(SaveChecked);

            CREDUI.INFO  info  = GetInfo(owner);
            CREDUI.FLAGS flags = GetFlags();

            // make the api call
            CREDUI.ReturnCodes code = CREDUI.PromptForCredentials(ref info, Target, IntPtr.Zero, 0, name, CREDUI.MAX_USERNAME_LENGTH, password, CREDUI.MAX_PASSWORD_LENGTH, ref saveChecked, flags);

            // clean up resources
            if (Banner != null)
            {
                Win32.DeleteObject(info.hbmBanner);
            }

            // set the accessors from the api call parameters
            Name        = name.ToString();
            Password    = password.ToString();
            SaveChecked = Convert.ToBoolean(saveChecked);
            return(GetDialogResult(code));
        }
Exemple #2
0
        /// <summary>Confirmation action to be applied.</summary>
        /// <param name="value">True if the credentials should be persisted.</param>
        public void Confirm(bool value)
        {
            CREDUI.ReturnCodes confirmCredentials = CREDUI.ConfirmCredentials(Target, value);

            switch (confirmCredentials)
            {
            case CREDUI.ReturnCodes.NO_ERROR:
                break;

            case CREDUI.ReturnCodes.ERROR_INVALID_PARAMETER:
                // for some reason, this is encountered when credentials are overwritten
                break;

            default:
                throw new ApplicationException("Credential confirmation failed. " + confirmCredentials);
            }
        }
        /// <summary>Returns a DialogResult from the specified code.</summary>
        /// <param name="code">The credential return code.</param>
        private DialogResult GetDialogResult(CREDUI.ReturnCodes code)
        {
            DialogResult result;

            switch (code)
            {
            case CREDUI.ReturnCodes.NO_ERROR:
                result = DialogResult.OK;
                break;

            case CREDUI.ReturnCodes.ERROR_CANCELLED:
                result = DialogResult.Cancel;
                break;

            case CREDUI.ReturnCodes.ERROR_NO_SUCH_LOGON_SESSION:
                throw new ApplicationException("No such logon session.");
                break;

            case CREDUI.ReturnCodes.ERROR_NOT_FOUND:
                throw new ApplicationException("Not found.");
                break;

            case CREDUI.ReturnCodes.ERROR_INVALID_ACCOUNT_NAME:
                throw new ApplicationException("Invalid account name.");
                break;

            case CREDUI.ReturnCodes.ERROR_INSUFFICIENT_BUFFER:
                throw new ApplicationException("Insufficient buffer.");
                break;

            case CREDUI.ReturnCodes.ERROR_INVALID_PARAMETER:
                throw new ApplicationException("Invalid parameter.");
                break;

            case CREDUI.ReturnCodes.ERROR_INVALID_FLAGS:
                throw new ApplicationException("Invalid flags.");
                break;

            default:
                throw new ApplicationException("Unknown credential result encountered.");
                break;
            }
            return(result);
        }