c# - 用用户名和密码模拟?

标签 c# console-application impersonation

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

 ...
context.Undo();

我在哪里声明管理员用户名和密码?

accessToken 参数对我帮助不大...

我必须为它导入 DLL 吗?

最佳答案

您需要获取用户的 token 。使用 p/invoke LogonUser来自 advapi32.dll:

    [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
}

关于c# - 用用户名和密码模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7710538/

相关文章:

winapi - 在 Windows 中将焦点设置在控制台上?

c# - C#:加载漫游配置文件并以用户身份执行程序

asp.net - Exchange Web 服务、带有 Windows 身份验证的 ASP.NET、IIS 8.5 和模拟

c# - 如何在 C# 中分段下载文件?

c# - 将字符串 "7/16/2013 7:00:00 AM"转换为日期时间

c# - 使用 C# 确定正在设置数组属性的哪个索引

windows - 如果 ImpersonateSelf() 失败后的 RevertToSelf() 会致命吗?

C#:AES 错误:填充无效且无法删除。相同的 key 和一切,帮助

C++ 控制台应用程序检测 USB 是否插入

c++ - 调用 Windows API 的 C++ 控制台程序中的内存泄漏