我需要创建一个在非管理员会话中运行时可以访问 HKLM 的程序。我可以访问管理员凭据,因此模拟似乎是一个选项.Win32调用的顺序是:
密钥已在XP / 2003上成功创建,并在Vista / Win7上以“拒绝访问”失败。我作为相同的默认域用户运行,并在每个方案中模拟相同的域管理员。 “访问被拒绝”由 RegCreateKeyEx 生成,显然密钥未创建。
任何人都知道为什么会发生这种情况?
答案 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对话的情况下进行模拟和提升。