/// <summary>Returns the flags for dialog display options.</summary>
        private CREDUI.FLAGS GetFlags()
        {
            CREDUI.FLAGS flags = CREDUI.FLAGS.GENERIC_CREDENTIALS;

            // GRRRR... can't seem to get this to work...
            // if (incorrectPassword) flags = flags | CredUI.CREDUI_FLAGS.INCORRECT_PASSWORD;
            if (AlwaysDisplay)
            {
                flags = flags | CREDUI.FLAGS.ALWAYS_SHOW_UI;
            }
            if (ExcludeCertificates)
            {
                flags = flags | CREDUI.FLAGS.EXCLUDE_CERTIFICATES;
            }
            if (KeepName)
            {
                flags = flags | CREDUI.FLAGS.KEEP_USERNAME;
            }
            if (!Persist)
            {
                flags = flags | CREDUI.FLAGS.DO_NOT_PERSIST;
            }
            else
            {
                flags = flags | CREDUI.FLAGS.EXPECT_CONFIRMATION;
                if (SaveDisplayed)
                {
                    flags = flags | CREDUI.FLAGS.SHOW_SAVE_CHECK_BOX;
                }
            }
            return(flags);
        }
        /// <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));
        }
        /// <summary>Returns the flags for dialog display options.</summary>
        private CREDUI.FLAGS GetFlags()
        {
            CREDUI.FLAGS flags = CREDUI.FLAGS.GENERIC_CREDENTIALS;

            if (this.IncorrectPassword)
            {
                flags = flags | CREDUI.FLAGS.INCORRECT_PASSWORD;
            }

            if (this.AlwaysDisplay)
            {
                flags = flags | CREDUI.FLAGS.ALWAYS_SHOW_UI;
            }

            if (this.ExcludeCertificates)
            {
                flags = flags | CREDUI.FLAGS.EXCLUDE_CERTIFICATES;
            }

            if (this.Persist)
            {
                flags = flags | CREDUI.FLAGS.EXPECT_CONFIRMATION;
                if (this.SaveDisplayed)
                {
                    flags = flags | CREDUI.FLAGS.SHOW_SAVE_CHECK_BOX;
                }
                else
                {
                    flags = flags | CREDUI.FLAGS.PERSIST;
                }
            }
            else
            {
                flags = flags | CREDUI.FLAGS.DO_NOT_PERSIST;
            }

            if (this.KeepName)
            {
                flags = flags | CREDUI.FLAGS.KEEP_USERNAME;
            }

            return(flags);
        }