访问其他用户C#WPF的共享文件夹
我有一些问题。我正在用c#(WPF)编写应用程序,我的应用程序需要当前登录到PC的用户的权限,并且应用程序需要启动。现在,我需要添加另一个拥有登录/通过权限的用户的权限,但不删除当前登录的用户权限。访问其他用户C#WPF的共享文件夹,c#,wpf,dns,directory,share,C#,Wpf,Dns,Directory,Share,我有一些问题。我正在用c#(WPF)编写应用程序,我的应用程序需要当前登录到PC的用户的权限,并且应用程序需要启动。现在,我需要添加另一个拥有登录/通过权限的用户的权限,但不删除当前登录的用户权限。 我需要这个文件从PC复制到另一个用户的共享文件夹。PC在域中运行。我无法使用登录,因为此方法将删除当前登录到PC用户的帐户。创建模拟类 class UserImpersonation2:IDisposable { [DllImport("advapi32.dll")] public
我需要这个文件从PC复制到另一个用户的共享文件夹。PC在域中运行。我无法使用登录,因为此方法将删除当前登录到PC用户的帐户。创建模拟类
class UserImpersonation2:IDisposable
{
[DllImport("advapi32.dll")]
public static extern bool LogonUser(String lpszUserName,
String lpszDomain,
String lpszPassword,
int dwLogonType,
int dwLogonProvider,
ref IntPtr phToken);
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern bool CloseHandle(IntPtr handle);
WindowsImpersonationContext wic;
IntPtr tokenHandle;
string _userName;
string _domain;
string _passWord;
public UserImpersonation2(string userName, string domain, string passWord)
{
_userName = userName;
_domain = domain;
_passWord = passWord;
}
const int LOGON32_PROVIDER_DEFAULT = 0;
const int LOGON32_LOGON_INTERACTIVE = 2;
public bool ImpersonateValidUser()
{
bool returnValue = LogonUser(_userName, _domain, _passWord,
LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,
ref tokenHandle);
Console.WriteLine("LogonUser called.");
if (false == returnValue)
{
int ret = Marshal.GetLastWin32Error();
Console.WriteLine("LogonUser failed with error code : {0}", ret);
return false;
}
Console.WriteLine("Did LogonUser Succeed? " + (returnValue ? "Yes" : "No"));
Console.WriteLine("Value of Windows NT token: " + tokenHandle);
// Check the identity.
Console.WriteLine("Before impersonation: "
+ WindowsIdentity.GetCurrent().Name);
// Use the token handle returned by LogonUser.
WindowsIdentity newId = new WindowsIdentity(tokenHandle);
wic = newId.Impersonate();
// Check the identity.
Console.WriteLine("After impersonation: "
+ WindowsIdentity.GetCurrent().Name);
return true;
}
#region IDisposable Members
public void Dispose()
{
if(wic!=null)
wic.Undo();
if (tokenHandle != IntPtr.Zero)
CloseHandle(tokenHandle);
}
#endregion
}
然后使用它:
const string file = @"\\machine\test\file.txt";
using (UserImpersonation user = new UserImpersonation("user", "domain", "password"))
{
if (user.ImpersonateValidUser())
{
StreamReader reader = new StreamReader(file);
Console.WriteLine(reader.ReadToEnd());
reader.Close();
}
}
Font:此文件的可能副本必须在登录到appl时授予特权。在那一刻,我不知道UNC路径(机器名)。我只有通行证和登录证。在这个领域有一些个人电脑。我需要像LogonUser impersonate这样的东西,但这会删除当前登录的用户权限。现在我完全困惑了,你不知道PC/共享?如果我理解正确的话。您需要模拟某人,并让他们授予“您”对其共享的写入权限,这样您就可以复制该文件。或者您需要模拟他们,让他们将文件从您正在共享的内容复制到他们的共享中。不得不说,这看起来非常复杂,非常脆弱,根本不是一个好主意。我读到我可以使用kerberos实现这一点,但我找不到任何推动的例子:/