使用用户名和密码进行模拟?

WindowsIdentity identity = new WindowsIdentity(accessToken); WindowsImpersonationContext context = identity.Impersonate(); ... context.Undo(); 

我在哪里声明一个administraotr UserName和Passowrd?

accessToken参数对我帮助不大……

我必须为它导入DLL吗?

您需要获取用户的令牌。 使用advapi32.dll中的p / invoke LogonUser

  [DllImport("advapi32.dll", SetLastError = true)] public static extern bool LogonUser( string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out IntPtr phToken); 

例:

 IntPtr userToken = IntPtr.Zero; bool success = External.LogonUser( "john.doe", "domain.com", "MyPassword", (int) AdvApi32Utility.LogonType.LOGON32_LOGON_INTERACTIVE, //2 (int) AdvApi32Utility.LogonProvider.LOGON32_PROVIDER_DEFAULT, //0 out userToken); if (!success) { throw new SecurityException("Logon user failed"); } using (WindowsIdentity.Impersonate(userToken)) { // do the stuff with john.doe's credentials } 

它正是你必须使用的accessoken。 为了得到它你需要调用LogonUser方法:

哎呀没有意识到我只是在这里有VB.net代码。 想象一下它在C#;)在这里c#

外部方法声明:

 Private Declare Auto Function LogonUser Lib "advapi32.dll" (ByVal lpszUsername As [String], _ ByVal lpszDomain As [String], ByVal lpszPassword As [String], _ ByVal dwLogonType As Integer, ByVal dwLogonProvider As Integer, _ ByRef phToken As IntPtr) As Boolean 

和执行:

 _Token = New IntPtr(0) Const LOGON32_PROVIDER_DEFAULT As Integer = 0 'This parameter causes LogonUser to create a primary token. Const LOGON32_LOGON_INTERACTIVE As Integer = 2 Const LOGON32_LOGON_NEWCREDENTIALS As Integer = 9 _Token = IntPtr.Zero ' Call LogonUser to obtain a handle to an access token. Dim returnValue As Boolean = LogonUser(_User, _Domain, _Password, LOGON32_LOGON_NEWCREDENTIALS, LOGON32_PROVIDER_DEFAULT, _Token) If False = returnValue Then Dim ret As Integer = Marshal.GetLastWin32Error() Console.WriteLine("LogonUser failed with error code : {0}", ret) Throw New System.ComponentModel.Win32Exception(ret) End If _Identity = New WindowsIdentity(_Token) _Context = _Identity.Impersonate() 

您需要P /调用LogonUser() API。 它接受用户名,域和密码并返回一个令牌。