2011-05-22 68 views
0

我想用C#爲WindowsMo​​bile PPC設備編寫一個簡單的註冊表保護程序,以幫助人們存儲選定的註冊表值並在損壞或硬重置後恢復它們。我的想法是解析選擇註冊表項/值並將它們存儲在一個正常的.reg文件中,然後可以通過任何註冊表編輯器導入它。解析註冊表二進制值爲.reg/.rgu文件格式的文本

我已經處理了大部分代碼,但是我在解析某些值到文本時遇到了一些問題。我的意思是例如二進制值表示爲十六進制。

的sooo我想從東西這樣開始:

RegistryKey RgKey = Registry.LocalMachine.OpenSubKey("\Time") 
string RgName = "TimeZoneInformation" 

string ValueType = Convert.ToString(RgKey.GetValueKind(RgName)); 
object Value = RgKey.GetValue(RgName); 

和「翻譯」的值的對象(其在一個System.byte []數組保存當然)成I像這樣(使用String []數組來存儲值,高於異常測試後,我把它們放進文件,但你可以提出更好的辦法):

[HKEY_LOCAL_MACHINE \時間] 「TimeZoneInformation」=十六進制:C4,FF, ff,ff,45,00,75,00,72,00,6f,00,70,00,61,00,20,\ 00,5a,01,72,00,6f,00,64, 00,6b,00,6f,00,77,00,61,00,20,00,28,00,63,00,7a,00,61,\ 00,73,00,20,00,73, 00,74,00,61,00,6e,00,64,00,2e,00,29,00,00,00,00,00,00,00,00,\ 00,0a,00,00, 00,05,00,03,00,00,00,00,00,00,00,00,00,00,00,45,00,75,00,72,00,6f,\ 00,70, 00,61,00,20,00,5a,01,72,00,6f,00,64,00,6b,00,6f,00,77,00,61,00,20,00,28,\ 00,63,00,7a,00,61,00,73,00,20,00,6c,00,65,00,74,00,6e,00,69,00,29,00,00,00, 00,\ 00,00,00,00,00,00,00,03,00,00,00,05,00,02,00,00,00,00,00,00,00,c4,ff, ff,ff

它可以輕鬆完成嗎?我找不到任何幫助。特別是,我不完全知道爲什麼引用示例中的行(由註冊表編輯器導出)具有此特定格式。但我試圖搞砸了這一點,只有這種格式與反斜線在每一行結束時工作時,實際上注入註冊表...

回答

0

經過幾個晚上的思考(也許我只是不夠聰明儘快做)我意識到這是一個格式化字符串的問題,而不是轉換它。這就是我所做的:

RegistryKey RgKey = Registry.LocalMachine.OpenSubKey("\\Time"); 
string RgName = "Time"; 
string Txt = null; 
string Tmp = null; 
    byte[] data = (byte[])RgKey.GetValue(RgName); 
    for (int i = 0; i < data.Length; i++) 
    { 
    if (i % 24 == 0) 
     Tmp = Tmp + "\\\n"; 
    Tmp = Tmp + String.Format("{0:X2}", data[i]); 
    if (i < data.Length - 1) 
     Tmp = Tmp + ","; 
    } 
    Txt = RgName + "=hex:" + Tmp; 
    break; 

這比我想象的要容易。我希望這會派上用場。

0

十六進制值可以是任何格式,但有十三個預定義的已知十六進制格式,例如十六進制(5),它是REG_DWORD_BIG_ENDIAN,用於解碼所有這些十六進制值,使用RegtoText,這是唯一解碼所有十六進制值的工具。