c# 访问局域网共享盘文件【转载】
- 转载自:http://www.guaik.com/cs/SOAREDF1IAIY7V2A.shtm
- public class IdentityScope : IDisposable
- {
- // obtains user token
- [DllImport("advapi32.dll", SetLastError = true)]
- static extern bool LogonUser(string pszUsername, string pszDomain, string pszPassword,
- int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
- // closes open handes returned by LogonUser
- [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
- extern static bool CloseHandle(IntPtr handle);
- [DllImport("Advapi32.DLL")]
- static extern bool ImpersonateLoggedOnUser(IntPtr hToken);
- [DllImport("Advapi32.DLL")]
- static extern bool RevertToSelf();
- const int LOGON32_PROVIDER_DEFAULT = 0;
- const int LOGON32_LOGON_NEWCREDENTIALS = 9;//域控中的需要用:Interactive = 2
- private bool disposed;
- public IdentityScope(string sUsername, string sDomain, string sPassword)
- {
- // initialize tokens
- IntPtr pExistingTokenHandle = new IntPtr(0);
- IntPtr pDuplicateTokenHandle = new IntPtr(0);
- try
- {
- // get handle to token
- bool bImpersonated = LogonUser(sUsername, sDomain, sPassword,
- LOGON32_LOGON_NEWCREDENTIALS, LOGON32_PROVIDER_DEFAULT, ref pExistingTokenHandle);
- if (true == bImpersonated)
- {
- if (!ImpersonateLoggedOnUser(pExistingTokenHandle))
- {
- int nErrorCode = Marshal.GetLastWin32Error();
- throw new Exception("ImpersonateLoggedOnUser error;Code=" + nErrorCode);
- }
- }
- else
- {
- int nErrorCode = Marshal.GetLastWin32Error();
- throw new Exception("LogonUser error;Code=" + nErrorCode);
- }
- }
- finally
- {
- // close handle(s)
- if (pExistingTokenHandle != IntPtr.Zero)
- CloseHandle(pExistingTokenHandle);
- if (pDuplicateTokenHandle != IntPtr.Zero)
- CloseHandle(pDuplicateTokenHandle);
- }
- }
- protected virtual void Dispose(bool disposing)
- {
- if (!disposed)
- {
- RevertToSelf();
- disposed = true;
- }
- }
- public void Dispose()
- {
- Dispose(true);
- }
- }
使用也很简单:
- using (IdentityScope iss = new IdentityScope("userName", "HostIp", "password"))
- {
- File.Copy("C:\\store_schema.sql", "\\\\192.168.0.111\\Share\\a.sql");
- }

浙公网安备 33010602011771号