7

我正在编写一个应用程序,它需要创建一个隐藏在登录屏幕和控制面板用户小程序中的特殊用户帐户。通过DWORD将用户名的值 0 写入下面的注册表项,我可以实现此目标:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList

问题是在打开 UAC 的 Windows 7 下,无论我尝试什么,我都无法以编程方式将值写入上面的键。

据我了解,在打开 UAC 的 Windows 7 上不允许写入某些键,除非您以管理权限运行。我添加了一个应用程序清单requestedExecutionLevel level="requireAdministrator" uiAccess="false",我在程序运行时接受了 UAC 提示,我的帐户是管理员的成员,但我仍然无法写入上述注册表项。

我还需要做什么?在任何应用程序配置中,如何在 下写入键和值HKEY_LOCAL_MACHINE\SOFTWARE

更多信息......当我的程序运行时,没有抛出任何错误,并且似乎在写入值。我的猜测是 Windows 正在虚拟化我正在写入的位置。如果我要隐藏这个特殊的用户帐户,我需要写到实际位置,而不是虚拟位置。

4

4 回答 4

16

可能程序在 64 位操作系统上作为 32 位程序运行?在这种情况下,我建议您搜索您Wow6432NodeHKEY_LOCAL_MACHINE\SOFTWARE.

您可以在此处阅读有关此类虚拟化的更多信息。您可以在某些 API 中使用KEY_WOW64_32KEY 标志,以便能够在没有虚拟化的情况下使用完整的注册表。

于 2011-02-09T22:02:44.847 回答
1

将值写入注册表

string user = Environment.UserDomainName + "\\" + Environment.UserName;

RegistrySecurity rs = new RegistrySecurity();

rs.AddAccessRule(new RegistryAccessRule(user,
    RegistryRights.WriteKey | RegistryRights.ChangePermissions,
    InheritanceFlags.None, PropagationFlags.None, AccessControlType.Deny));

RegistryKey rk = null;
try
{
  rk = Registry.CurrentUser.CreateSubKey("SOFTWARE\\TEST", 
                                   RegistryKeyPermissionCheck.Default, rs);
  rk.SetValue("NAME", "IROSH);
  rk.SetValue("FROM", "SRI LANKA");
}
于 2011-07-23T15:31:48.657 回答
0

这可能与他们在 Vista 中添加的重定向有关。如果您尝试从代码中读取该注册表值,我会很好奇,如果您能取回您期望的值。您可能还想启动 RegMon 以查看是否可以看到重定向可能会强制您执行的位置。

于 2011-02-09T22:03:59.027 回答
-1
RegistryKey rk = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",true);
rk.SetValue("Name", "Value");
于 2012-06-20T03:05:56.567 回答