如何在C#.Net 3.5 SP1中显示身份validation对话框

我想访问网络共享文件。 如何显示系统validation对话框,以便用户可以输入用户名和密码?

ps:通过UNC,在WinForm中。

我正在编写一个探索控件,我想在用户双击网络共享文件夹后显示该对话框。

您目前如何访问共享? 通过UNC还是先将它映射到驱动器号? 一个想法是使用CONNECT_INTERACTIVE和CONNECT_PROMPT标志将其映射到wnetaddconnection2 api调用。

不确定我是否理解正确,您想要显示Windows身份validation对话框吗?

试试这个:

///  /// Leverages the windows UI to prompt for a password ///  internal static class Authentication { public struct CREDUI_INFO { public int cbSize; public IntPtr hwndParent; public string pszMessageText; public string pszCaptionText; public IntPtr hbmBanner; } [DllImport("credui")] private static extern CredUIReturnCodes CredUIPromptForCredentials(ref CREDUI_INFO creditUR, string targetName, IntPtr reserved1, int iError, StringBuilder userName, int maxUserName, StringBuilder password, int maxPassword, [MarshalAs(UnmanagedType.Bool)] ref bool pfSave, CREDUI_FLAGS flags); [Flags] enum CREDUI_FLAGS { INCORRECT_PASSWORD = 0x1, DO_NOT_PERSIST = 0x2, REQUEST_ADMINISTRATOR = 0x4, EXCLUDE_CERTIFICATES = 0x8, REQUIRE_CERTIFICATE = 0x10, SHOW_SAVE_CHECK_BOX = 0x40, ALWAYS_SHOW_UI = 0x80, REQUIRE_SMARTCARD = 0x100, PASSWORD_ONLY_OK = 0x200, VALIDATE_USERNAME = 0x400, COMPLETE_USERNAME = 0x800, PERSIST = 0x1000, SERVER_CREDENTIAL = 0x4000, EXPECT_CONFIRMATION = 0x20000, GENERIC_CREDENTIALS = 0x40000, USERNAME_TARGET_CREDENTIALS = 0x80000, KEEP_USERNAME = 0x100000, } public enum CredUIReturnCodes { NO_ERROR = 0, ERROR_CANCELLED = 1223, ERROR_NO_SUCH_LOGON_SESSION = 1312, ERROR_NOT_FOUND = 1168, ERROR_INVALID_ACCOUNT_NAME = 1315, ERROR_INSUFFICIENT_BUFFER = 122, ERROR_INVALID_PARAMETER = 87, ERROR_INVALID_FLAGS = 1004, } ///  /// Prompts for password. ///  /// The user. /// The password. /// True if no errors. internal static bool PromptForPassword(out string user, out string password) { // Setup the flags and variables StringBuilder userPassword = new StringBuilder(), userID = new StringBuilder(); CREDUI_INFO credUI = new CREDUI_INFO(); credUI.cbSize = Marshal.SizeOf(credUI); bool save = false; CREDUI_FLAGS flags = CREDUI_FLAGS.ALWAYS_SHOW_UI | CREDUI_FLAGS.GENERIC_CREDENTIALS; // Prompt the user CredUIReturnCodes returnCode = CredUIPromptForCredentials(ref credUI, Application.ProductName, IntPtr.Zero, 0, userID, 100, userPassword, 100, ref save, flags); user = userID.ToString(); password = userPassword.ToString(); return (returnCode == CredUIReturnCodes.NO_ERROR); } } 

使用此对话框获得的凭据,然后您可以按照Phil Harding的说明调用LogonUser。

不确定你是在做asp.net还是win表单,但在asp.net中你可以在web.config中设置身份validation标记(或者在winforms中设置app.config)

     

要么