/// <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>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); }