asp.net访问网络路径方法(模拟用户登录)
核心代码:
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"); }