核心代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
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就可以了
1
2
3
4
|
using (IdentityScope c = new IdentityScope( "administrator" , "192.168.0.1" , "11111" )) { string [] filelist = System.IO.Directory.GetDirectories( @"\\192.168.0.1\folderName" ); } |