Vista \ Win7中的模拟和注册表操作

时间:2009-10-04 15:54:11

标签: c++ winapi registry impersonation

我需要创建一个在非管理员会话中运行时可以访问 HKLM 的程序。我可以访问管理员凭据,因此模拟似乎是一个选项.Win32调用的顺序是:

  1. LogonUser的
  2. ImpersonateLoggedOnUser
  3. RegOpenKeyEx
  4. RegCreateKeyEx
  5. 密钥已在XP / 2003上成功创建,并在Vista / Win7上以“拒绝访问”失败。我作为相同的默认域用户运行,并在每个方案中模拟相同的域管理员。 “访问被拒绝”由 RegCreateKeyEx 生成,显然密钥未创建。

    任何人都知道为什么会发生这种情况?

5 个答案:

答案 0 :(得分:1)

如果您拥有管理员用户的用户名/密码,您可以使用CreateProcessWithLogonW()启动帮助程序进程并使用某种IPC(管道,共享内存+事件等)与其进行通信

至于为什么它在NT6上失败,也许你的冒充并没有给你一个high IL

答案 1 :(得分:1)

Windows Vista / 7上的管理员默认情况下也没有对HKLM的写入权限,它们必须先提升。有关启动新流程的详细信息,请参阅Vista UAC: The Definitive Guide,因为您无法提升现有流程。

答案 2 :(得分:0)

在Vista / Win7中,安全性已发生变化。请参阅有关注册表虚拟化的article

答案 3 :(得分:0)

AFAIK访问Vista / Windows7中的HKLM您必须具有管理员权限。 尝试使用选项编译程序 - 需要管理员权限,或者只是以管理员身份运行程序。

答案 4 :(得分:0)

实现这一目标的方法是通过Murray和Anders建议的多个过程。首先,启动一个进程,使用带有管理员凭据的CreateProcessAsLoggedOnUser启动另一个进程。然后,您必须使用ShellExecute函数启动另一个进程,并将“runas”指定为动词。这允许在没有UAC对话的情况下进行模拟和提升。