欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

asp.net访问网络路径方法(模拟用户登录)

程序员文章站 2023-10-30 14:43:04
核心代码: public class identityscope : idisposable { // obtains user token...

核心代码:

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;//域ò控?中d的?需è要a用?:interactive = 2
    private bool disposed;
    /// <summary>
    /// 登?录?
    /// </summary>
    /// <param name="susername">用?户§名?</param>
    /// <param name="sdomain">域ò名?,?如?果?不?在ú域ò中d就í使1用?机ú器÷ip地?址·</param>
    /// <param name="spassword">密ü码?</param>
    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);
    }
  }

第二个参数是域名,有域名的话写域名,没有域名写目标机器的ip就可以了

using (identityscope c = new identityscope("administrator", "192.168.0.1", "11111"))
{
 string[] filelist = system.io.directory.getdirectories(@"\\192.168.0.1\foldername");
}