internal static extern int CredUIPromptForWindowsCredentials(ref CredentialUIInfo creditUR, int authError, ref uint authPackage, IntPtr InAuthBuffer, uint InAuthBufferSize, out IntPtr refOutAuthBuffer, out uint refOutAuthBufferSize, ref bool fSave, PromptForWindowsCredentialsFlags flags);
internal static extern CredentialUIReturnCodes CredUIPromptForCredentials(ref CredentialUIInfo creditUR, string targetName, IntPtr reserved1, int iError, StringBuilder userName, int maxUserName, StringBuilder password, int maxPassword, [MarshalAs(UnmanagedType.Bool)] ref bool pfSave, CredentialUIFlags flags);
public static CredentialResult PromptForCredentials(IntPtr owner = default, string messageText = null, string captionText = null, string userName = null, CredentialSaveOption saveCredential = CredentialSaveOption.Unselected) { var credUI = new CredentialUIInfo { hwndParent = owner, pszMessageText = messageText, pszCaptionText = captionText, hbmBanner = IntPtr.Zero, }; var save = saveCredential == CredentialSaveOption.Selected ? true : false; // Setup the flags and variables credUI.cbSize = Marshal.SizeOf(credUI); var errorcode = 0; uint authPackage = 0; var outCredBuffer = IntPtr.Zero; var flags = PromptForWindowsCredentialsFlags.GenericCredentials | PromptForWindowsCredentialsFlags.EnumerateCurrentUser; if (saveCredential != CredentialSaveOption.Hidden) { flags |= PromptForWindowsCredentialsFlags.ShowCheckbox; } // Prefill username GetInputBuffer(userName, out var inCredBuffer, out var inCredSize); // Setup the flags and variables var result = Credui.CredUIPromptForWindowsCredentials(ref credUI, errorcode, ref authPackage, inCredBuffer, inCredSize, out outCredBuffer, out var outCredSize, ref save, flags); FreeCoTaskMem(inCredBuffer); if (result == 0 && GetCredentialsFromOutputBuffer(outCredBuffer, outCredSize, out userName, out var password, out var domain)) { var credentialSaved = saveCredential == CredentialSaveOption.Hidden ? CredentialSaveOption.Hidden : (save ? CredentialSaveOption.Selected : CredentialSaveOption.Unselected); return(new CredentialResult(userName, password, domain, credentialSaved)); } return(null); }