如何在TrustedInstaller中编写自己的注册表项
为了将新的属性页安装到Active Directory SnapIn中,我需要写入W2K8 R2的以下注册表项( 如Microsoft所述 )
HKEY_LOCAL_MACHINE SOFTWARE 微软 MMC SnapIns {E355E538-1C2E-11D0-8C37-00C04FD8FE93} NodeTypes
此密钥由名为TrustedInstaller的特殊用户拥有。 我在NET arround上发现了很多东西。
目前,这是它的工作方式,执行以下操作(用户是管理员组的成员):
- 我授予用户获得所有权的权限。
- 用户取得所有权
- 用户编写注册表
- 用户授予管理员组的所有权。
我的项目完全用C#编写,有两件事我不喜欢这样做。
所以我的问题是:我是否遗漏了某些东西,是否有记录的方法来修改这样一个被记录为可修改的密钥?
存在一个Stack溢出问题 ,答案说TrustedInstaller所有权,意味着密钥是系统安装的一部分而不是应用程序安装。 对我来说,如果Microsoft记录了如何修改它的应用程序安装的密钥。
提前致谢。
所以我发现了我的一个问题。
如果要对添加的资源取得所有权以启用SeTakeOwnershipPrivilege,则允许您更改所有者SID。 但是新的所有者Sid必须在调用者的令牌中,此外,Sid必须具有属性SE_GROUP_OWNER。 所以在我的情况下,我无法将SID所有者更改为S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464 (TrustedInstaller)。 我只能取得所有权,或者为“管理员”组提供所有权。 我发现有一个解决方法的王者,你可以将任意用户分配为所有者,即使它的SID不在令牌中。 授予管理员和备份操作员的SeRestorePrivilege权限,但默认情况下未启用 。 Enbling允许我将所有权归还给TrustedInstaller。
因此它可以执行以下操作(用户是管理员组的成员):
- 我授予用户获取所有权并启用还原权限的权限
- 用户取得所有权
- 用户编写注册表
- 用户将权限授予前一个所有者TrustedInstaller。
我使用InteropServices来调用Win32 AdjustTokenPrivileges API,它似乎是在C#中实现它的唯一方法
我将很快在我的博客上发布一个小工具,允许将所有权归还给TrustedInstaller。
编辑:对不起,我忘记了,您可以在Gist上找到代码。
如果在MSI安装程序中使用Registry表 ,则应该能够毫无问题地编写该条目。 这是因为安装过程是在TrustedInstaller帐户下执行的(您不需要更改所有权)。
编辑:您似乎正在尝试写入Windows保护系统下的注册表项。 在这种情况下,TrustedInstaller帐户无关紧要。
基本上,常规MSI无法写入该密钥,因为它受Windows保护。 您需要找到另一种安装属性页的方法。
如果您以管理员身份运行程序(不要忘记在清单中启用'requireAdministrator'
作为UAC执行级别)或任何其他具有SE_RESTORE_NAME
权限的用户,您可以启用权限,然后将RegCreateKeyEx与REG_OPTION_BACKUP_RESTORE
标志一起使用。 您可以在RegOpenKeyEx中使用相同的标志(请参阅ulOptions
参数),但它没有记录,我建议您最好使用RegCreateKeyEx 。 返回的键句柄可用于设置RegSetValueEx
的值,例如。 在这种方式下,您将能够设置任何注册表项 。 如果您另外启用了SE_BACKUP_NAME
权限,则可以读取任何注册表项(例如,从HKEY_LOCAL_MACHINESECURITY
或HKEY_LOCAL_MACHINESAMSAM
)。
上述就是C#学习教程:如何在TrustedInstaller中编写自己的注册表项分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1001565.html