Asp.net 访问 共享目录

来源:互联网 发布:淘宝达人文案 编辑:程序博客网 时间:2024/04/30 15:10
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 c = new IdentityScope("userId", "192.168.0.1", "psw")){//在此就可以访问了.string[] filelist = System.IO.Directory.GetDirectories(@"//192.168.0.1/folderName");}