/// <summary> /// Returns a DialogResult from the specified code. /// </summary> /// <param name="code">The credential return code.</param> private DialogResult GetDialogResult(NativeCredentialsUI.ReturnCodes code) { DialogResult result; switch (code) { case NativeCredentialsUI.ReturnCodes.NO_ERROR: result = DialogResult.OK; break; case NativeCredentialsUI.ReturnCodes.ERROR_CANCELLED: result = DialogResult.Cancel; break; case NativeCredentialsUI.ReturnCodes.ERROR_NO_SUCH_LOGON_SESSION: throw new ApplicationException("No such logon session."); case NativeCredentialsUI.ReturnCodes.ERROR_NOT_FOUND: throw new ApplicationException("Not found."); case NativeCredentialsUI.ReturnCodes.ERROR_INVALID_ACCOUNT_NAME: throw new ApplicationException("Invalid account name."); case NativeCredentialsUI.ReturnCodes.ERROR_INSUFFICIENT_BUFFER: throw new ApplicationException("Insufficient buffer."); case NativeCredentialsUI.ReturnCodes.ERROR_INVALID_PARAMETER: throw new ApplicationException("Invalid parameter."); case NativeCredentialsUI.ReturnCodes.ERROR_INVALID_FLAGS: throw new ApplicationException("Invalid flags."); default: throw new ApplicationException("Unknown credential result encountered."); } return(result); }
/// <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(NativeCredentialsUI.MAX_USERNAME_LENGTH); name.Append(this.Name); StringBuilder password = new StringBuilder(NativeCredentialsUI.MAX_PASSWORD_LENGTH); int saveChecked = Convert.ToInt32(this.SaveChecked); NativeCredentialsUI.INFO info = GetInfo(owner); NativeCredentialsUI.FLAGS flags = GetFlags(); // make the api call NativeCredentialsUI.ReturnCodes code = NativeCredentialsUI.PromptForCredentials( ref info, this.Target, IntPtr.Zero, 0, name, NativeCredentialsUI.MAX_USERNAME_LENGTH, password, NativeCredentialsUI.MAX_PASSWORD_LENGTH, ref saveChecked, flags ); // set the accessors from the api call parameters this.Name = name.ToString(); foreach (char c in password.ToString()) { this.Password.AppendChar(c); } this.Password.MakeReadOnly(); this.SaveChecked = Convert.ToBoolean(saveChecked); return(GetDialogResult(code)); }