2011-02-09 276 views
7

我正在编写一个应用程序,需要创建一个隐藏于登录屏幕和控制面板用户小程序中的特殊用户帐户。通过与用户名下面的注册表项写0 DWORD值,我能够实现这个目标:无法写入HKEY_LOCAL_MACHINE Software下的注册表

HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows NT \ CURRENTVERSION \ Winlogon中\在SpecialAccounts \ UserList的

问题是,在UAC上的Windows 7下,无论我尝试什么,我都无法以编程方式向上述密钥写入值。

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

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

更多信息...当我的程序运行时,没有错误引发,它似乎写入值。我的猜测是Windows正在虚拟化我正在写的位置。我需要写入实际位置,而不是虚拟位置,如果我要隐藏此特殊用户帐户。

+0

他们可能正试图阻止什么你要怎样做。例如,由恶意软件编写的隐藏帐户会很糟糕。 – asawyer 2011-02-09 21:03:25

+0

然而,这适用于HKEY_LOCAL_MACHINE \ SOFTWARE下的所有内容,而不仅仅是我提到的特定密钥。哦,你仍然可以通过使用regedit来隐藏账户,或者使用计算机管理/用户来查看它。 – sysrpl 2011-02-09 21:06:32

+0

对不起,这只是一个关闭袖口的评论。如果我对你有一个很好的答案,我会用另一个盒子。我对这里正在发生的事情也很感兴趣。 – asawyer 2011-02-09 21:08:37

回答

12

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

你可以阅读更多关于这种类型的虚拟化here。您可以在某些API中使用KEY_WOW64_32KEY flag,以便能够在没有虚拟化的情况下使用完整的注册表。

0

这可能与他们在Vista中添加的重定向有关。如果您试图从您的代码中读取该注册表值,那么我会很好奇,如果您会收回您期望的值。你也可能想要启动RegMon,看看你是否能看到重定向可能会迫使你。

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