通过在c#中模拟使用文件夹对话框打开网络文件夹

时间:2014-07-11 10:27:56

标签: c# .net impersonation

我正在使用以下代码冒充第三个用户并尝试访问文件夹。

Boolean success = LogonUser("username", "domain", "password", 2, 0, out userToken);

if (success)
{
     var wi = new WindowsIdentity(userToken, "WindowsAuthentication");
    using (wi.Impersonate())
      {
         if (fbdPatches.ShowDialog() == DialogResult.OK)
         {
                 // try to access folder which can be accessed only through above credentials
         }
      }
}

仍然无法访问文件夹。请帮我看看我在这里做错了什么。

1 个答案:

答案 0 :(得分:0)

LogonUser 获取用户名,域名和密码,并返回一个我们可以与WindowsIdentity一起使用的令牌。除了这些参数之外,LogonUser还想知道要使用哪个登录提供程序(默认情况下应该足以满足大多数情况),登录类型选择登录类型可能很棘手,因此选项

登录类型(LOGON32_LOGON_xxx) 整数值(来自WinBase.h)

LOGON32_LOGON_BATCH 4

LOGON32_LOGON_INTERACTIVE 2

LOGON32_LOGON_NETWORK 3

LOGON32_LOGON_NETWORK_CLEARTEXT 8

LOGON32_LOGON_NEW_CREDENTIALS 9

LOGON32_LOGON_SERVICE 5

使用NEW_CREDENTIALS选项进行登录可解决您的问题。

例如:

Boolean success = LogonUser("username", "domain", "password", 9, 0, out userToken);

Boolean success = LogonUser("username", "domain", "password", LOGON32_LOGON_NEW_CREDENTIALS, 0, out userToken);