/// <summary> /// Accepts credentials in a console window /// </summary> /// <param name="Target">A descriptive text for where teh credentials being asked are used for</param> /// <returns>NetworkCredential object containing the user name, </returns> public static NetworkCredential PromptForCredentialsConsole(string target) { var user = String.Empty; var password = String.Empty; var domain = String.Empty; // Setup the flags and variables StringBuilder userPassword = new StringBuilder(), userID = new StringBuilder(); bool save = true; NativeCode.CredentialUIFlags flags = NativeCode.CredentialUIFlags.CompleteUsername | NativeCode.CredentialUIFlags.ExcludeCertificates | NativeCode.CredentialUIFlags.GenericCredentials; // Prompt the user NativeCode.CredentialUIReturnCodes returnCode = NativeCode.CredUICmdLinePromptForCredentials(target, IntPtr.Zero, 0, userID, 100, userPassword, 100, ref save, flags); password = userPassword.ToString(); StringBuilder userBuilder = new StringBuilder(); StringBuilder domainBuilder = new StringBuilder(); returnCode = NativeCode.CredUIParseUserName(userID.ToString(), userBuilder, int.MaxValue, domainBuilder, int.MaxValue); switch (returnCode) { case NativeCode.CredentialUIReturnCodes.Success: // The username is valid. user = userBuilder.ToString(); domain = domainBuilder.ToString(); break; case NativeCode.CredentialUIReturnCodes.InvalidAccountName: // The username is not valid. user = userID.ToString(); domain = null; break; case NativeCode.CredentialUIReturnCodes.InsufficientBuffer: // One of the buffers is too small. throw new OutOfMemoryException(); case NativeCode.CredentialUIReturnCodes.InvalidParameter: // ulUserMaxChars or ulDomainMaxChars is zero OR userName, user, or domain is NULL. throw new ArgumentNullException("userName"); } return(new NetworkCredential(user, password, domain)); }