6

在 Windows Vista 及更高版本中LogonUser,即使提供的用户是管理员,也会返回非特权令牌。因此,当您使用该令牌进行模拟时,您不会被提升。给定管理员用户的正确用户名和密码,您如何运行对该管理员具有提升权限的代码?

4

2 回答 2

1

我刚刚使用了这个示例,它实际上工作正常。我想如果您想在这种情况下运行代码,您必须通过以下方式设置当前线程主体:

Thread.CurrentPrincipal = new System.Security.Principal.WindowsPrincipal(WindowsIdentity.GetCurrent());
于 2013-09-27T12:55:02.323 回答
0

如果您正在编写 Windows 服务,只要您要模拟的用户具有“作为服务登录”权限,使用LOGON32_LOGON_SERVICE代替LOGON32_LOGON_INTERACTIVE或将导致特权令牌。LOGON32_LOGON_NEW_CREDENTIALS

这并没有提供通用解决方案(如果您正在编写面向用户的应用程序,它将无法工作),但足以解决我遇到的特定问题。

于 2013-09-27T16:40:59.523 回答