核心代码:
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.1foldername");
}
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:)!