zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

NetASP方法模拟网络 用户 访问 登录
2023-06-13 09:15:43 时间

核心代码:

publicclassIdentityScope:IDisposable
{
//obtainsusertoken
[DllImport("advapi32.dll",SetLastError=true)]
staticexternboolLogonUser(stringpszUsername,stringpszDomain,stringpszPassword,intdwLogonType,intdwLogonProvider,refIntPtrphToken);
//closesopenhandesreturnedbyLogonUser
[DllImport("kernel32.dll",CharSet=CharSet.Auto)]
externstaticboolCloseHandle(IntPtrhandle);

[DllImport("Advapi32.DLL")]
staticexternboolImpersonateLoggedOnUser(IntPtrhToken);
[DllImport("Advapi32.DLL")]
staticexternboolRevertToSelf();
constintLOGON32_PROVIDER_DEFAULT=0;
constintLOGON32_LOGON_NEWCREDENTIALS=9;//域ò控?中D的?需è要a用?:Interactive=2
privatebooldisposed;
///<summary>
///登?录?
///</summary>
///<paramname="sUsername">用?户§名?</param>
///<paramname="sDomain">域ò名?,?如?果?不?在ú域ò中D就í使1用?机ú器÷IP地?址·</param>
///<paramname="sPassword">密ü码?</param>
publicIdentityScope(stringsUsername,stringsDomain,stringsPassword)
{
//initializetokens
IntPtrpExistingTokenHandle=newIntPtr(0);
IntPtrpDuplicateTokenHandle=newIntPtr(0);
try
{
//gethandletotoken
boolbImpersonated=LogonUser(sUsername,sDomain,sPassword,LOGON32_LOGON_NEWCREDENTIALS,LOGON32_PROVIDER_DEFAULT,refpExistingTokenHandle);
if(true==bImpersonated)
{
if(!ImpersonateLoggedOnUser(pExistingTokenHandle))
{
intnErrorCode=Marshal.GetLastWin32Error();
thrownewException("ImpersonateLoggedOnUsererror;Code="+nErrorCode);
}
}
else
{
intnErrorCode=Marshal.GetLastWin32Error();
thrownewException("LogonUsererror;Code="+nErrorCode);
}
}
finally
{
//closehandle(s)
if(pExistingTokenHandle!=IntPtr.Zero)
CloseHandle(pExistingTokenHandle);
if(pDuplicateTokenHandle!=IntPtr.Zero)
CloseHandle(pDuplicateTokenHandle);
}
}
protectedvirtualvoidDispose(booldisposing)
{
if(!disposed)
{
RevertToSelf();
disposed=true;
}
}
publicvoidDispose()
{
Dispose(true);
}
}

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

using(IdentityScopec=newIdentityScope("administrator","192.168.0.1","11111"))
{
string[]filelist=System.IO.Directory.GetDirectories(@"\\192.168.0.1\folderName");
}