13

爲了一個新的屬性頁安裝到Active Directory管理單元,我需要寫入的W2K8 R2(as documented by Microsoft如何在註冊表寫入密鑰自己通過的TrustedInstaller

HKEY_LOCAL_MACHINE \ SOFTWARE \下面的註冊表項微軟\ MMC \ SnapIns {E355E538-1C2E-11D0-8C37-00C04FD8FE93} \ NodeTypes

這個密鑰由一個名爲的TrustedInstaller一個特殊的用戶擁有。我在網路上發現了很多東西。

在這裏的那一刻是它的工作原理做了以下(用戶是管理員組的成員)的方式:

  1. 我給用戶的權限,取得所有權。
  2. 用戶採取所有權
  3. 用戶寫註冊表
  4. 用戶授予所有權的管理員組。

我的項目完全用C#編寫,有兩件事我不喜歡,就像我這樣做。

  • 我使用InteropServices來調用Win32 AdjustTokenPrivileges API。有沒有人知道在純C#中做這件事的方法?
  • 在年底的TrustedInstaller不再是關鍵的主人,而我'不能給他的所有權,他保持了完全的控制,但我不希望我的安裝卡扣後爲損壞我的服務器分類-在。

所以我的問題是:我是否錯過了一些東西,是否有文件記錄的方式來修改這種記錄爲可修改的關鍵?

有現有約一個Stack overflow question,答案說的TrustedInstaller所有權,意味着關鍵是系統安裝的一部分,而不是應用程序的安裝。對於我來說,如果微軟記錄瞭如何修改應用程序安裝的密鑰。

在此先感謝。

回答

5

所以我發現我的一個問題。

當您想要獲取您添加的資源以啓用SeTakeOwnershipPrivilege時,您可以更改擁有者SID。但新的Owner Sid必須位於調用者的標記中,此外,Sid必須具有屬性SE_GROUP_OWNER。所以在我的情況下,我無法將SID所有者更改爲S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464(TrustedInstaller)。我只是能夠獲得所有權,或將所有權授予「管理員」組。我發現有一個解決方案之王,可以將任意用戶分配給所有者,即使其SID不在令牌中。 SeRestorePrivilege特權是授予給管理員和備份操作員,但不是默認啓用。使用它可以讓我將所有權歸還給TrustedInstaller。

所以它的工作原理做了以下(用戶是管理員組的成員):

  1. 我給用戶的特權採取所有權和使特權恢復
  2. 用戶取得所有權
  3. 用戶寫入註冊表
  4. 用戶將所有權交給以前的所有者TrustedInstaller。

我用InteropServices來調用Win32 AdjustTokenPrivileges API,它似乎是做在C#中的唯一途徑

我會在我的博客很快發佈一個小工具,讓回饋所有權的TrustedInstaller 。


編輯: 抱歉耽擱我只是忘記它,你可以找到Gist的代碼。

+0

+1,SeRestorePrivilege是一顆寶石。 – ongle 2014-05-19 03:53:09

+0

您有任何博客文章或示例代碼嗎?我一直試圖讓這個工作幾個小時。 – Laoujin 2014-06-22 23:44:29

+1

@Lououjin我最終把代碼放在Gist上,我希望它能幫上忙。 – JPBlanc 2014-06-23 09:01:23

3

如果在MSI安裝使用Registry table,你應該能夠編寫沒有問題的條目。這是因爲安裝過程是在TrustedInstaller帳戶下執行的(您不需要更改所有權)。

編輯:看來你是想要在一個Windows的保護制度下一個註冊表項來寫。在這種情況下,TrustedInstaller帳戶無關緊要。

基本上,一個普通MSI不能在關鍵,因爲它是由Windows保護寫。您將需要找到另一種安裝屬性頁的方法。

+0

我嘗試使用Visual Studio 10中的「部署安裝項目」生成的MSI的註冊表項來執行此操作。我要重試,但在第一次測試中,它不起作用。我是否必須用Orca在桌子上指定一些特別的東西? – JPBlanc 2011-03-29 16:48:55

+0

所以我再次測試它。這裏是我的MSI'的註冊表表_2D2C089689924663A0BDAAE6CFE4E160 2個軟件\微軟\ MMC \ SnapIns \ {E355E538-1C2E-11D0-8C37-00C04FD8FE93} \ NodeTypes \ {3bcd9db8-f84b-451C-952f-6c52b81f9ec6} * C__2D2C089689924663A0BDAAE6CFE4E160' 你確定你的斷言? – JPBlanc 2011-03-29 19:25:25

+0

安裝過程中會發生什麼?您是否創建了一個日誌來查看註冊表項的處理方式? – 2011-03-30 06:52:09

3

如果運行程序作爲管理員(不要忘記啓用'requireAdministrator'在清單中的UAC執行水平),或具有SE_RESTORE_NAME特權可以enable the privilage然後用RegCreateKeyExREG_OPTION_BACKUP_RESTORE標誌的任何其他用戶。您可以使用相同的標誌RegOpenKeyEx(見ulOptions參數),但它是無證,我會建議你最好使用RegCreateKeyEx代替。例如,返回的關鍵句柄可用於設置RegSetValueEx的值。 以這種方式您將能夠設置任何註冊表項。如果您另外啓用SE_BACKUP_NAME權限,則您將能夠讀取任何註冊表項(例如,從HKEY_LOCAL_MACHINE\SECURITYHKEY_LOCAL_MACHINE\SAM\SAM)。