分享

.Net通过代码访问共享目录

 scholes_goal 2011-06-15
下面一个从网上收藏的代码:

   本文相关代码如下:
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 (new IdentityScope("userName", "HostIp", "password"))   
{   
      File.Copy("C:\\store_schema.sql", "\\\\192.168.0.111\\Share\\a.sql");   
}
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多