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"); }