繁体   English   中英

无法在HKEY_LOCAL_MACHINE \\ Software下写入注册表

[英]Cannot Write to the Registry under HKEY_LOCAL_MACHINE\Software

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

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

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

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

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

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

该程序可能在64位操作系统上以32位程序运行? 在这种情况下,我建议您搜索在HKEY_LOCAL_MACHINE\\SOFTWARE Wow6432Node子项下创建的值。

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

将值写入注册表

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");
}
RegistryKey rk = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",true);
rk.SetValue("Name", "Value");

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM