我正在試驗註冊表功能,因爲我還沒有理解它們。我試圖創建兩個註冊表項,一個具有隻讀權限,另一個具有讀寫權限。我已經成功創建了它們,但在繼續前進之前,我想檢查它們是否具有適當的權限。我知道我可以通過試圖操縱它們來簡單地測試它們,但我認爲必須有一種方法來讀取註冊表項的權限。我可以讀取註冊表權限嗎?如果是這樣,怎麼樣?
有誰知道該怎麼做?
我使用VisualStudio並用C#編寫。我一直在嘗試搜索「讀取註冊表項權限」,「獲取密鑰權限」等等,但我只是獲得了關於什麼是隻讀權限等等的很多信息。有用,但對這個特定任務沒有幫助。
創建這些鍵的代碼如下:
//Create ROKey - "ReadOnlyKey"
RegistryKey rKey = Registry.CurrentUser.CreateSubKey("ROKey", RegistryKeyPermissionCheck.ReadSubTree);
//Create WRKey - "ReadWriteKey"
RegistryKey wKey = Registry.CurrentUser.CreateSubKey("WRKey", RegistryKeyPermissionCheck.ReadWriteSubTree);
編輯:
在@ itsme86的建議,我已經包括下面的代碼:
var security = rKey.GetAccessControl();
var rules = security.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount));
foreach (var rule in rules.Cast<AuthorizationRule>())
{
Console.WriteLine(rule.IdentityReference.ToString());
}
security = wKey.GetAccessControl();
rules = security.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount));
foreach (var rule in rules.Cast<AuthorizationRule>()){
Console.WriteLine(rule.IdentityReference.ToString());
}
不幸的是,我現在收到以下錯誤:
錯誤1'System.Securit y.AccessControl.AuthorizationRuleCollection'不包含'Cast'的定義,並且沒有找到接受'System.Security.AccessControl.AuthorizationRuleCollection'類型的第一個參數的擴展方法'Cast'(你是否缺少using指令或程序集參考?)C:\ Users \ DoD_Admin \ Documents \ Visual Studio 2013 \ Projects \ RegistryManipulationTest \ RegistryManipulationTest \ rKeyTestClass.cs 249 40 RegistryManipulationTest
我正在使用「System」和「Microsoft.Win32」命名空間。我應該使用另一個命名空間嗎?
編輯2:
我已經添加了「使用Linq;」到節目,現在它承認「演員」。缺點是,它不能識別AuthorizationRule類型。我試着「使用System.Web.Configuration;」,AuthorizationRule類的名字空間,但現在我被告知「名字空間'System.Web''中不存在類型或名稱空間名'Configuration'。
這當然似乎指向我的方向是正確的,但是當我打電話GetAccessControl(),它返回:「System.Security.AccessControl.RegistrySecurity」 ,兩個鍵的輸出相同。我不知道如何使用它,儘管它絕對比我多!你介意提供一個例子,我可以看到它的實現? – MrSpudtastic
@MrSpudtastic我用示例代碼更新了我的答案。 – itsme86
謝謝。我已經實現了它,但現在我得到一個錯誤。我編輯了原始問題以提供更多詳細信息。我認爲它快到了! – MrSpudtastic