2011-11-29 182 views
3

我做了一個應用程序,允許Windows用戶欺騙Mac地址。 它通過將「NetworkAdapter」:「00ff00ff00ff」鍵/值對添加到所選用戶nic的註冊表中。 問題是,每一個應用程序試圖修改Windows註冊表的Windows彈出的一個警告對話框時,例如:權限寫入LOCAL_MACHINE

enter image description here

但點擊繼續會增加成功的註冊表值和應用程序功能正常。 我可以做些什麼/或在代碼中添加更改以使對話框消失,還是可以以更好的方式進行更改? 的應用程序需要管理員權限 這裏的應用

這裏的git repo的方法:

public void SetMac(string macAddress) 
{ 
    const string Name = @"SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002bE10318}"; 
    using (RegistryKey key0 = Registry.LocalMachine.OpenSubKey(Name, RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.FullControl)) 
    { 

     string[] x = key0.GetSubKeyNames(); 
     foreach (string name in x) 
     { 
       var var1 = Registry.LocalMachine.OpenSubKey(Name,RegistryKeyPermissionCheck.ReadWriteSubTree,RegistryRights.FullControl); 
       var v = var1.OpenSubKey(name, RegistryKeyPermissionCheck.ReadWriteSubTree, RegistryRights.FullControl); 
       var z = v.GetValue("DriverDesc"); 
       if (comboBox1.Text == z.ToString()) 
       { 
        v.SetValue("NetworkAddress",comboBox2.Text); 
        MessageBox.Show(z.ToString()); 
       } 
       v.Close(); 
       var1.Close(); 
     } 
     key0.Close(); 
    } 
} 
+0

你想從網絡共享中運行這個程序嗎? – Joe

+0

不!從我的本地Windows機器上。 – jeff

+2

如果您點擊「詳細信息」,它顯示了什麼?你能用這個輸出編輯你的問題嗎? – Joe

回答

2

你需要運行在更高權限的應用程序,看到Requested registry access is not allowed

+0

我認爲你是對的,但我有一個疑問:缺乏特權應用程序應該被阻止將這些值寫入註冊表,因爲如果OP點擊繼續,它會發生。我錯了嗎? – Marco

+1

我得到同樣的對話框也.. .. – jeff

0

這裏的問題是用戶沒有權限打開目標寫入密鑰。正如abatishchev已經建議的那樣,您需要運行提升的應用程序,以便在代碼執行時用戶實際上擁有管理員組成員身份。

這看起來像CAS權限錯誤的原因是RegistryKey.OpenSubKey方法中的一個設計缺陷。當目標密鑰由於用戶權限不足而無法打開寫入時,它應該拋出UnauthorizedAccessException,但實際上會拋出SecurityException。問題最終出現是由於CAS權限不足,因爲它實際上是用戶,而不是代碼,缺乏編輯密鑰的權限。

+0

我正在運行與管理員權限的應用程序....我編輯與寫入註冊表的代碼部分的問題.. – jeff

+0

您是否檢查了管理員組有足夠的權限寫入所有目標子項?有可能只有子鍵的一個子集具有更多受限制的權限,這也可以解釋當您單擊繼續時您看到更改的原因。 –