簡體   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