/// <summary>Confirmation action to be applied.</summary> /// <param name="value">True if the credentials should be persisted.</param> public void Confirm(bool value) { switch (Credui.ConfirmCredentials(this.Target, value)) { case Credui.ReturnCodes.NoError: break; case Credui.ReturnCodes.ErrorInvalidParameter: // for some reason, this is encountered when credentials are overwritten break; default: throw new ApplicationException("Credential confirmation failed."); } }
/// <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.MaxUsernameLength); name.Append(this.Name); StringBuilder password = new StringBuilder(Credui.MaxPasswordLength); password.Append(this.Password); int saveChecked = Convert.ToInt32(this.SaveChecked); Credui.Info info = this.GetInfo(owner); Credui.Flags flags = this.GetFlags(); // make the api call Credui.ReturnCodes code = Credui.PromptForCredentials( ref info, this.Target, IntPtr.Zero, 0, name, Credui.MaxUsernameLength, password, Credui.MaxPasswordLength, ref saveChecked, flags ); // clean up resources if (this.Banner != null) { Gdi32.DeleteObject(info.HbmBanner); } // set the accessors from the api call parameters this.Name = name.ToString(); this.Password = password.ToString(); this.SaveChecked = Convert.ToBoolean(saveChecked); return(CredentialsDialog.GetDialogResult(code)); }
/// <summary>Returns a DialogResult from the specified code.</summary> /// <param name="code">The credential return code.</param> private static DialogResult GetDialogResult(Credui.ReturnCodes code) { DialogResult result; switch (code) { case Credui.ReturnCodes.NoError: result = DialogResult.OK; break; case Credui.ReturnCodes.ErrorCancelled: result = DialogResult.Cancel; break; case Credui.ReturnCodes.ErrorNoSuchLogonSession: throw new ApplicationException("No such logon session."); case Credui.ReturnCodes.ErrorNotFound: throw new ApplicationException("Not found."); case Credui.ReturnCodes.ErrorInvalidAccountName: throw new ApplicationException("Invalid account name."); case Credui.ReturnCodes.ErrorInsufficientBuffer: throw new ApplicationException("Insufficient buffer."); case Credui.ReturnCodes.ErrorInvalidParameter: throw new ApplicationException("Invalid parameter."); case Credui.ReturnCodes.ErrorInvalidFlags: throw new ApplicationException("Invalid flags."); default: throw new ApplicationException("Unknown credential result encountered."); } return result; }