public ResourceListDialog(object valueInfo, bool IsAdd) : this() { Logger.Log("ResourceListDialog, Inside Constructor", Logger.RegistryViewerLoglevel); if (valueInfo is SubKeyValueInfo) this.ValueInfo = valueInfo as SubKeyValueInfo; else this.regValueInfo = valueInfo as RegistryValueInfo; SetInputData(); }
public DWORDValueEditorDialog(object valueInfo, bool bIsAdd) : this() { if (valueInfo is SubKeyValueInfo) this.ValueInfo = valueInfo as SubKeyValueInfo; else this.regValueInfo = valueInfo as RegistryValueInfo; this.txtValuename.ReadOnly = !bIsAdd; this.bIsAdd = bIsAdd; SetInputData(); }
public StringEditorDialog(object valueInfo, bool IsAdd) : this() { if (valueInfo is SubKeyValueInfo) this.ValueInfo = valueInfo as SubKeyValueInfo; else this.regValueInfo = valueInfo as RegistryValueInfo; this.txtValueName.ReadOnly = !IsAdd; this.bIsAdd = IsAdd; SetInputData(); }
public MultiStringValueEditorDialog(object valueInfo, bool IsAdd, RegistryViewerPlugin _plugin) : this() { if (valueInfo is SubKeyValueInfo) this.ValueInfo = valueInfo as SubKeyValueInfo; else this.regValueInfo = valueInfo as RegistryValueInfo; this.txtValuename.ReadOnly = !IsAdd; this.bIsAdd = IsAdd; this.plugin = _plugin; SetInputData(); }
public static void GetValueKind(RegistryValueInfo valueInfo, string sType) { string[] splits = sType.Split(':'); switch (splits[0]) { case "hex": valueInfo.pType = (ulong)RegistryApi.REG_BINARY; break; case "dword": valueInfo.pType = (ulong)RegistryApi.REG_DWORD; break; case "qword": valueInfo.pType = (ulong)LWRegistryValueKind.REG_QUADWORD; break; case "": valueInfo.pType = (ulong)RegistryApi.REG_SZ; break; case "hex(7)": valueInfo.pType = (ulong)RegistryApi.REG_MULTI_SZ; break; case "hex(2)": valueInfo.pType = (ulong)RegistryApi.REG_EXPAND_SZ; break; case "hex(8)": valueInfo.pType = (ulong)RegistryApi.REG_RESOURCE_LIST; break; case "hex(9)": valueInfo.pType = (ulong)RegistryApi.REG_RESOURCE_REQUIREMENTS_LIST; break; default: valueInfo.pType = (ulong)RegistryApi.REG_SZ; break; } }
public static object GetFormatSpecificData(RegistryValueInfo valueInfo) { object sData = null; switch (valueInfo.pType) { case (ulong)RegistryApi.REG_BINARY: case (ulong)RegistryApi.REG_RESOURCE_LIST: case (ulong)RegistryApi.REG_UNKNOWN: case (ulong)RegistryApi.REG_FULL_RESOURCE_DESCRIPTOR: case (ulong)RegistryApi.REG_RESOURCE_REQUIREMENTS_LIST: byte[] byts = valueInfo.bDataBuf as byte[]; Array.Resize<byte>(ref byts, (int)valueInfo.pcData); sData = GetBinaryData(byts); break; case (ulong)RegistryApi.REG_EXPAND_SZ: string sTemp = new UnicodeEncoding().GetString(valueInfo.bDataBuf as byte[]); byte[] eByts = new UnicodeEncoding().GetBytes(sTemp + "\n"); List<byte> bytList = new List<byte>(); foreach (byte byt in eByts) { if (byt == 10 || byt == 13) bytList.Add((byte)00); else { bytList.Add(byt); bytList.Add((byte)00); } } eByts = new byte[bytList.Count]; bytList.CopyTo(eByts); sData = GetBinaryData(eByts); break; case (ulong)RegistryApi.REG_MULTI_SZ: string[] sArry = new UnicodeEncoding().GetString(valueInfo.bDataBuf as byte[]).Split('\n'); StringBuilder sTempArry = new StringBuilder(); List<byte> mBytList = new List<byte>(); foreach (string value in sArry) { sTempArry.Append(value); sTempArry.Append("\r\n"); } byte[] mByts = new UnicodeEncoding().GetBytes(sTempArry.ToString()); foreach (byte byt in mByts) { if (byt == 10 || byt == 13) mBytList.Add((byte)00); else { mBytList.Add(byt); mBytList.Add((byte)00); } } mByts = new byte[mBytList.Count]; mBytList.CopyTo(mByts); sData = GetBinaryData(mByts); break; case (ulong)RegistryApi.REG_DWORD: sData = String.Format("{0:X2}", BitConverter.ToUInt32(valueInfo.bDataBuf as byte[], 0)).PadLeft(8, '0'); break; case (ulong)RegistryApi.REG_PLAIN_TEXT: case (ulong)RegistryApi.REG_SZ: sData = new UnicodeEncoding().GetString(valueInfo.bDataBuf as byte[]); sData = string.Concat("\"", sData, "\""); break; case (ulong)RegistryApi.REG_QWORD: //sData = RegistryUtils.DecimalToBase(Convert.ToInt32(new ASCIIEncoding().GetString(valueInfo.bDataBuf as byte[])), 16).PadLeft(16, '0'); sData = String.Format("{0:X2}", BitConverter.ToUInt64(valueInfo.bDataBuf as byte[], 0)).PadLeft(16, '0'); sData = string.Concat("\"", sData, "\""); break; default: break; } return sData; }
public static void GetValueData(RegistryValueInfo valueInfo, string sData) { UnicodeEncoding encoder = new UnicodeEncoding(); string[] splits = sData.Split(':'); try { switch (valueInfo.pType) { case (ulong)RegistryApi.REG_SZ: case (ulong)RegistryApi.REG_EXPAND_SZ: case (ulong)RegistryApi.REG_PLAIN_TEXT: if (!String.IsNullOrEmpty(splits[0])) { byte[] sByts = encoder.GetBytes(splits[0].Substring(1)); Array.Resize<byte>(ref sByts, sByts.Length - 1); valueInfo.bDataBuf = sByts; } else valueInfo.bDataBuf = new byte[] { 0 }; break; case (ulong)RegistryApi.REG_DWORD: uint dValue = UInt32.Parse(splits[1], System.Globalization.NumberStyles.HexNumber); byte[] dwDataArry = BitConverter.GetBytes(dValue); valueInfo.bDataBuf = dwDataArry; break; case (ulong)RegistryApi.REG_QWORD: ulong qValue = UInt64.Parse(splits[1], System.Globalization.NumberStyles.HexNumber); byte[] qwDataArry = BitConverter.GetBytes(qValue); valueInfo.bDataBuf = qwDataArry; break; case (ulong)RegistryApi.REG_MULTI_SZ: string[] sDataArray = splits[2].Split(','); List<byte> bytlist = new List<byte>(); for (int idx = 0; idx < sDataArray.Length; idx += 2) bytlist.Add(Convert.ToByte(sDataArray[idx], 16)); byte[] mbyts = new byte[bytlist.Count]; bytlist.CopyTo(mbyts); valueInfo.bDataBuf = encoder.GetString(mbyts).Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries); RegistryInteropWrapper.RegModifyKeyValue(valueInfo, out mbyts); valueInfo.bDataBuf = mbyts; break; default: string[] sDataArry = splits[2].Split(','); if (sDataArry != null) { byte[] byts = new byte[sDataArry.Length]; for (int idx = 0; idx < sDataArry.Length; idx++) { if (!String.IsNullOrEmpty(sDataArry[idx])) byts[idx] = Convert.ToByte(sDataArry[idx], 16); } valueInfo.bDataBuf = byts; } break; } } catch (Exception ex) { Logger.LogException("GetValueData() for the value " + valueInfo.pValueName, ex); } }
public void On_MenuClick(object sender, EventArgs e) { MenuItem mi = sender as MenuItem; LACTreeNode node = mi.Tag as LACTreeNode; //Since both are having the different set up proreties each. made two seperate objects. //For windows supported registry SubKeyValueInfo valueInfo = null; SubKeyInfo keyInfo = null; //For linux supported registry RegistryEnumKeyInfo regKeyInfo = null; RegistryValueInfo regValueInfo = null; if (mi != null) { if(mi.Text.Trim().Equals("&Refresh")) { treeNode.IsModified = true; treeNode.sc.ShowControl(treeNode); return; } else if(mi.Text.Trim().Equals("&Help")) { ProcessStartInfo psi = new ProcessStartInfo(); psi.UseShellExecute = true; psi.FileName = CommonResources.GetString("LAC_Help"); psi.Verb = "open"; psi.WindowStyle = ProcessWindowStyle.Normal; Process.Start(psi); return; } else { if (Configurations.currentPlatform == LikewiseTargetPlatform.Windows) { keyInfo = node == null ? null : node.Tag as SubKeyInfo; valueInfo = node == null ? mi.Tag as SubKeyValueInfo : null; } else { regKeyInfo = node == null ? null : node.Tag as RegistryEnumKeyInfo; regValueInfo = node == null ? mi.Tag as RegistryValueInfo : null; node = node == null ? treeNode : node; if(!treeNode.Text.Trim().Equals(Properties.Resources.HKEY_THIS_MACHINE, StringComparison.InvariantCultureIgnoreCase)) { if (regKeyInfo != null) { RegistryInteropWrapper.ApiRegOpenKeyExW(plugin.handle.Handle, plugin.pRootHandle, regKeyInfo.sKeyname, out regKeyInfo.pKey); } else if (regValueInfo != null) { RegistryEnumKeyInfo subKeyInfo = treeNode.Tag as RegistryEnumKeyInfo; RegistryInteropWrapper.ApiRegOpenKeyExW(plugin.handle.Handle, plugin.pRootHandle, subKeyInfo.sKeyname, out regValueInfo.pParentKey); } } else { if(regKeyInfo != null) regKeyInfo.pKey = plugin.pRootHandle; else if(regValueInfo != null) regValueInfo.pParentKey = plugin.pRootHandle; } } } switch (mi.Text.Trim()) { //Modify case "Modify": if (Configurations.currentPlatform == LikewiseTargetPlatform.Windows) { valueInfo = mi.Tag is SubKeyValueInfo ? mi.Tag as SubKeyValueInfo : lvRegistryPage.SelectedItems[0].Tag as SubKeyValueInfo; if (valueInfo != null) { DoEditorWork(valueInfo, false, (ulong)valueInfo.RegDataType); } } else if (regValueInfo != null) { DoEditorWork(regValueInfo, false, regValueInfo.pType); } break; //Modify Binary Data case "Modify Binary Data": valueInfo = mi.Tag is SubKeyValueInfo ? mi.Tag as SubKeyValueInfo : lvRegistryPage.SelectedItems[0].Tag as SubKeyValueInfo; if (valueInfo != null) { SubKeyValueInfo tempValueInfo = new SubKeyValueInfo(); tempValueInfo.hKey = valueInfo.hKey; tempValueInfo.RegDataType = LWRegistryValueKind.REG_BINARY; tempValueInfo.sData = valueInfo.sData; tempValueInfo.sDataBuf = valueInfo.sDataBuf; tempValueInfo.sParentKey = valueInfo.sParentKey; tempValueInfo.sValue = valueInfo.sValue; DoEditorWork(tempValueInfo, false, (ulong)tempValueInfo.RegDataType); } else if (regValueInfo != null) DoEditorWork(regValueInfo, false, (ulong)RegistryApi.REG_BINARY); break; //Delete case "&Delete": if (Configurations.currentPlatform == LikewiseTargetPlatform.Windows) { if (keyInfo != null) Do_DeleteKey(keyInfo, node); else if (valueInfo != null) Do_DeleteKeyValue(valueInfo); } else { if (regKeyInfo != null) Do_DeleteKey(regKeyInfo, node); else if (regValueInfo != null) Do_DeleteKeyValue(regValueInfo); } break; //Rename case "&Rename": if (Configurations.currentPlatform == LikewiseTargetPlatform.Windows) { if (keyInfo != null) Do_RenameKey(keyInfo, node); else if (valueInfo != null) Do_RenameKeyValue(valueInfo, treeNode); } else { if (regKeyInfo != null) Do_RenameKey(regKeyInfo, node); else if (regValueInfo != null) Do_RenameKeyValue(regValueInfo, treeNode); } break; //Key case "Key": if (Configurations.currentPlatform == LikewiseTargetPlatform.Windows) Do_CreateKey(keyInfo, node); else Do_CreateKey(regKeyInfo, node); break; //&Import... case "&Import...": Do_ImportRegistry(); break; //&Export... case "&Export...": Do_ExportRegistry(); break; //String Value case "String Value": if (keyInfo != null) { valueInfo = new SubKeyValueInfo(); valueInfo.hKey = keyInfo.hKey; valueInfo.IsDefaultValue = false; valueInfo.RegDataType = LWRegistryValueKind.REG_SZ; valueInfo.sParentKey = keyInfo.sSubKey; DoEditorWork(valueInfo, true, (ulong)valueInfo.RegDataType); } else if (regKeyInfo != null) { regValueInfo = new RegistryValueInfo(); regValueInfo.pType = (ulong)RegistryApi.REG_SZ; regValueInfo.pParentKey = regKeyInfo.pKey; DoEditorWork(regValueInfo, true, regValueInfo.pType); } break; //DWORD Value case "DWORD Value": if (keyInfo != null) { valueInfo = new SubKeyValueInfo(); valueInfo.hKey = keyInfo.hKey; valueInfo.IsDefaultValue = false; valueInfo.RegDataType = LWRegistryValueKind.REG_DWORD; valueInfo.sParentKey = keyInfo.sSubKey; DoEditorWork(valueInfo, true, (ulong)valueInfo.RegDataType); } else if (regKeyInfo != null) { regValueInfo = new RegistryValueInfo(); regValueInfo.pType = (ulong)RegistryApi.REG_DWORD; regValueInfo.pParentKey = regKeyInfo.pKey; DoEditorWork(regValueInfo, true, regValueInfo.pType); } break; //Binary Value case "Binary Value": if (keyInfo != null) { valueInfo = new SubKeyValueInfo(); valueInfo.hKey = keyInfo.hKey; valueInfo.IsDefaultValue = false; valueInfo.RegDataType = LWRegistryValueKind.REG_BINARY; valueInfo.sParentKey = keyInfo.sSubKey; DoEditorWork(valueInfo, true, (ulong)valueInfo.RegDataType); } else if (regKeyInfo != null) { regValueInfo = new RegistryValueInfo(); regValueInfo.pType = (ulong)RegistryApi.REG_BINARY; regValueInfo.pParentKey = regKeyInfo.pKey; DoEditorWork(regValueInfo, true, regValueInfo.pType); } break; //Multi-String Value case "Multi-String Value": if (keyInfo != null) { valueInfo = new SubKeyValueInfo(); valueInfo.hKey = keyInfo.hKey; valueInfo.IsDefaultValue = false; valueInfo.RegDataType = LWRegistryValueKind.REG_MULTI_SZ; valueInfo.sParentKey = keyInfo.sSubKey; DoEditorWork(valueInfo, true, (ulong)valueInfo.RegDataType); } else if (regKeyInfo != null) { regValueInfo = new RegistryValueInfo(); regValueInfo.pType = (ulong)RegistryApi.REG_MULTI_SZ; regValueInfo.pParentKey = regKeyInfo.pKey; DoEditorWork(regValueInfo, true, regValueInfo.pType); } break; //Expandable String Value case "Expandable String Value": if (keyInfo != null) { valueInfo = new SubKeyValueInfo(); valueInfo.hKey = keyInfo.hKey; valueInfo.IsDefaultValue = false; valueInfo.RegDataType = LWRegistryValueKind.REG_EXPAND_SZ; valueInfo.sParentKey = keyInfo.sSubKey; DoEditorWork(valueInfo, true, (ulong)valueInfo.RegDataType); } else if (regKeyInfo != null) { regValueInfo = new RegistryValueInfo(); regValueInfo.pType = (ulong)RegistryApi.REG_EXPAND_SZ; regValueInfo.pParentKey = regKeyInfo.pKey; DoEditorWork(regValueInfo, true, regValueInfo.pType); } break; default: break; } } }
private void Do_RecursiveImportKey(StreamReader reader) { HKEY hKey = HKEY.HEKY_CURRENT_USER; RegistryKey sSubKey = null; List<LACTreeNode> KeyNodes = new List<LACTreeNode>(); Hostinfo hn = ctx as Hostinfo; IntPtr pRootKey = IntPtr.Zero; LACTreeNode pluginNode = plugin.GetPlugInNode(); if (pluginNode.Nodes.Count != 0 && Configurations.currentPlatform != LikewiseTargetPlatform.Windows) { Do_CloseRegKeyHandles(pluginNode.Nodes[1] as LACTreeNode); pluginNode.Nodes[1].Nodes.Clear(); } while (!reader.EndOfStream) { string currentLine = reader.ReadLine(); if (currentLine != null && currentLine.StartsWith("[")) { hKey = HKEY.HEKY_CURRENT_USER; sSubKey = null; LACTreeNode KeyNode = null; string[] splits = currentLine.Split('\\'); if (splits != null && splits.Length != 0) { if (pRootKey != IntPtr.Zero) RegistryInteropWrapper.ApiRegCloseKey(plugin.handle.Handle, pRootKey); foreach (string sName in splits) { string sKeyName = sName.EndsWith("]") ? sName.Substring(0, sName.Length - 1) : sName; sKeyName = sKeyName.StartsWith("[") ? sKeyName.Substring(1) : sKeyName; //Check for the Win defined the HKEY if (sName.StartsWith("[")) { Icon ic = Properties.Resources.Reports; if (Configurations.currentPlatform == LikewiseTargetPlatform.Windows) { switch (sKeyName.Trim().ToUpper()) { case "HKEY_CLASSES_ROOT": hKey = HKEY.HKEY_CLASSES_ROOT; KeyNode = Manage.CreateIconNode(Properties.Resources.HKEY_CLASSES_ROOT, ic, typeof(RegistryViewerClassesPage), plugin); KeyNode.Tag = HKEY.HKEY_CLASSES_ROOT; KeyNodes.Add(KeyNode); break; case "HKEY_CURRENT_CONFIG": hKey = HKEY.HKEY_CURRENT_CONFIG; KeyNode = Manage.CreateIconNode(Properties.Resources.HKEY_CURRENT_CONFIG, ic, typeof(RegistryViewerConfigPage), plugin); KeyNode.Tag = HKEY.HKEY_CURRENT_CONFIG; KeyNodes.Add(KeyNode); break; case "HKEY_CURRENT_USER": hKey = HKEY.HEKY_CURRENT_USER; KeyNode = Manage.CreateIconNode(Properties.Resources.HKEY_CURRENT_USER, ic, typeof(RegistryViewerUserPage), plugin); KeyNode.Tag = HKEY.HEKY_CURRENT_USER; KeyNodes.Add(KeyNode); break; case "HKEY_LOCAL_MACHINE": hKey = HKEY.HKEY_LOCAL_MACHINE; KeyNode = Manage.CreateIconNode(Properties.Resources.HKEY_LOCAL_MACHINE, ic, typeof(RegistryViewerMachinePage), plugin); KeyNode.Tag = HKEY.HKEY_LOCAL_MACHINE; KeyNodes.Add(KeyNode); break; case "HKEY_USERS": hKey = HKEY.HKEY_USERS; KeyNode = Manage.CreateIconNode(Properties.Resources.HKEY_USERS, ic, typeof(RegistryViewerUsersPage), plugin); KeyNode.Tag = HKEY.HKEY_USERS; KeyNodes.Add(KeyNode); break; } RegistryInteropWrapperWindows.Win32RegOpenRemoteBaseKey(hKey, out sSubKey); } else { plugin.RegRootKeySelected = Properties.Resources.HKEY_LIKEWISE_IMPORT; hKey = HKEY.HKEY_LIKEWISE; KeyNode = Manage.CreateIconNode(Properties.Resources.HKEY_LIKEWISE_IMPORT, ic, typeof(RegistryViewerLikewisePage), plugin); KeyNode.Tag = HKEY.HKEY_LIKEWISE; KeyNodes.Add(KeyNode); if (pluginNode.Nodes[1].Tag != null && pluginNode.Nodes[1].Tag is RegistryEnumKeyInfo) { RegistryEnumKeyInfo rootKeyInfo = pluginNode.Nodes[1].Tag as RegistryEnumKeyInfo; if (rootKeyInfo.pKey != IntPtr.Zero) pRootKey = rootKeyInfo.pKey; else RegistryInteropWrapper.ApiRegOpenKeyExW(plugin.handle.Handle, IntPtr.Zero, plugin.RegRootKeySelected, out pRootKey); } else { RegistryInteropWrapper.ApiRegOpenKeyExW(plugin.handle.Handle, IntPtr.Zero, plugin.RegRootKeySelected, out pRootKey); } //Create the keys under Likewise_Import if (!sKeyName.Trim().ToUpper().Equals(plugin.RegRootKeySelected)) RegistryInteropWrapper.ApiRegOpenKeyExW(plugin.handle.Handle, pRootKey, sKeyName, out pRootKey); } } else if (sSubKey != null) { sSubKey = RegistryInteropWrapperWindows.Win32CreateSubKey(sSubKey, sKeyName); } else if (pRootKey != IntPtr.Zero) { IntPtr pSubKey = IntPtr.Zero; RegistryInteropWrapper.ApiRegOpenKeyExW(plugin.handle.Handle, pRootKey, sKeyName, out pSubKey); RegistryInteropWrapper.ApiRegCloseKey(plugin.handle.Handle, pRootKey); pRootKey = pSubKey; } } } } else if (currentLine != null && currentLine.Contains("=")) { string[] splits = currentLine.Split('='); if (splits != null && splits.Length != 0) { if (Configurations.currentPlatform == LikewiseTargetPlatform.Windows) { SubKeyValueInfo valueInfo = new SubKeyValueInfo(); valueInfo.hKey = hKey; valueInfo.IsDefaultValue = false; if (splits[0].StartsWith("\"")) valueInfo.sValue = splits[0].Substring(1, splits[0].Length - 2); else if (splits[0].Equals("@")) valueInfo.sValue = ""; else valueInfo.sValue = splits[0]; valueInfo.sParentKey = sSubKey; valueInfo.hKey = hKey; RegistryHelper.GetValueKind(valueInfo, splits[1]); if ((valueInfo.RegDataType == LWRegistryValueKind.REG_BINARY) || (valueInfo.RegDataType == LWRegistryValueKind.REG_MULTI_SZ) || (valueInfo.RegDataType == LWRegistryValueKind.REG_EXPAND_SZ) || (valueInfo.RegDataType == LWRegistryValueKind.REG_RESOURCE_LIST)) { while (!reader.EndOfStream && currentLine.Contains(@"\")) { splits[1] += currentLine; currentLine = reader.ReadLine(); } splits[1] += currentLine; splits[1] = splits[1].Replace('\\', ','); splits[1] = splits[1].Replace(" ", ""); splits[1] = splits[1].EndsWith(",") ? splits[1].Substring(0, splits[1].Length - 1) : splits[1]; } RegistryHelper.GetValueData(valueInfo, splits[1]); RegistryInteropWrapperWindows.Win32AddSubKeyValue(valueInfo); } else { RegistryValueInfo regValueInfo = new RegistryValueInfo(); regValueInfo.pParentKey = pRootKey; if (splits[0].StartsWith("\"")) regValueInfo.pValueName = splits[0].Substring(1, splits[0].Length - 2); else regValueInfo.pValueName = splits[0]; RegistryHelper.GetValueKind(regValueInfo, splits[1]); if ((regValueInfo.pType == (ulong)RegistryApi.REG_BINARY) || (regValueInfo.pType == (ulong)RegistryApi.REG_MULTI_SZ) || (regValueInfo.pType == (ulong)RegistryApi.REG_EXPAND_SZ) || (regValueInfo.pType == (ulong)RegistryApi.REG_RESOURCE_LIST) || (regValueInfo.pType == (ulong)RegistryApi.REG_RESOURCE_REQUIREMENTS_LIST) || (regValueInfo.pType == (ulong)RegistryApi.REG_FULL_RESOURCE_DESCRIPTOR)) { while (!reader.EndOfStream && currentLine.Contains(@"\")) { splits[1] += currentLine; currentLine = reader.ReadLine(); } splits[1] += currentLine; splits[1] = splits[1].Replace('\\', ','); splits[1] = splits[1].Replace(" ", ""); splits[1] = splits[1].EndsWith(",") ? splits[1].Substring(0, splits[1].Length - 1) : splits[1]; } RegistryHelper.GetValueData(regValueInfo, splits[1]); RegistryInteropWrapper.ApiRegSetValueEx(plugin.handle.Handle, regValueInfo.pParentKey, regValueInfo.pValueName, (uint)regValueInfo.pType, regValueInfo.bDataBuf as byte[]); } } } } }
public static object GetFormatSpecificData(RegistryValueInfo valueInfo) { object sData = null; switch (valueInfo.pType) { case (ulong)RegistryApi.REG_BINARY: case (ulong)RegistryApi.REG_RESOURCE_LIST: case (ulong)RegistryApi.REG_UNKNOWN: case (ulong)RegistryApi.REG_FULL_RESOURCE_DESCRIPTOR: case (ulong)RegistryApi.REG_RESOURCE_REQUIREMENTS_LIST: byte[] byts = valueInfo.bDataBuf as byte[]; Array.Resize <byte>(ref byts, (int)valueInfo.pcData); sData = GetBinaryData(byts); break; case (ulong)RegistryApi.REG_EXPAND_SZ: string sTemp = new UnicodeEncoding().GetString(valueInfo.bDataBuf as byte[]); byte[] eByts = new UnicodeEncoding().GetBytes(sTemp + "\n"); List <byte> bytList = new List <byte>(); foreach (byte byt in eByts) { if (byt == 10 || byt == 13) { bytList.Add((byte)00); } else { bytList.Add(byt); bytList.Add((byte)00); } } eByts = new byte[bytList.Count]; bytList.CopyTo(eByts); sData = GetBinaryData(eByts); break; case (ulong)RegistryApi.REG_MULTI_SZ: string[] sArry = new UnicodeEncoding().GetString(valueInfo.bDataBuf as byte[]).Split('\n'); StringBuilder sTempArry = new StringBuilder(); List <byte> mBytList = new List <byte>(); foreach (string value in sArry) { sTempArry.Append(value); sTempArry.Append("\r\n"); } byte[] mByts = new UnicodeEncoding().GetBytes(sTempArry.ToString()); foreach (byte byt in mByts) { if (byt == 10 || byt == 13) { mBytList.Add((byte)00); } else { mBytList.Add(byt); mBytList.Add((byte)00); } } mByts = new byte[mBytList.Count]; mBytList.CopyTo(mByts); sData = GetBinaryData(mByts); break; case (ulong)RegistryApi.REG_DWORD: sData = String.Format("{0:X2}", BitConverter.ToUInt32(valueInfo.bDataBuf as byte[], 0)).PadLeft(8, '0'); break; case (ulong)RegistryApi.REG_PLAIN_TEXT: case (ulong)RegistryApi.REG_SZ: sData = new UnicodeEncoding().GetString(valueInfo.bDataBuf as byte[]); sData = string.Concat("\"", sData, "\""); break; case (ulong)RegistryApi.REG_QWORD: //sData = RegistryUtils.DecimalToBase(Convert.ToInt32(new ASCIIEncoding().GetString(valueInfo.bDataBuf as byte[])), 16).PadLeft(16, '0'); sData = String.Format("{0:X2}", BitConverter.ToUInt64(valueInfo.bDataBuf as byte[], 0)).PadLeft(16, '0'); sData = string.Concat("\"", sData, "\""); break; default: break; } return(sData); }
public static void GetValueData(RegistryValueInfo valueInfo, string sData) { UnicodeEncoding encoder = new UnicodeEncoding(); string[] splits = sData.Split(':'); try { switch (valueInfo.pType) { case (ulong)RegistryApi.REG_SZ: case (ulong)RegistryApi.REG_EXPAND_SZ: case (ulong)RegistryApi.REG_PLAIN_TEXT: if (!String.IsNullOrEmpty(splits[0])) { byte[] sByts = encoder.GetBytes(splits[0].Substring(1)); Array.Resize <byte>(ref sByts, sByts.Length - 1); valueInfo.bDataBuf = sByts; } else { valueInfo.bDataBuf = new byte[] { 0 } }; break; case (ulong)RegistryApi.REG_DWORD: uint dValue = UInt32.Parse(splits[1], System.Globalization.NumberStyles.HexNumber); byte[] dwDataArry = BitConverter.GetBytes(dValue); valueInfo.bDataBuf = dwDataArry; break; case (ulong)RegistryApi.REG_QWORD: ulong qValue = UInt64.Parse(splits[1], System.Globalization.NumberStyles.HexNumber); byte[] qwDataArry = BitConverter.GetBytes(qValue); valueInfo.bDataBuf = qwDataArry; break; case (ulong)RegistryApi.REG_MULTI_SZ: string[] sDataArray = splits[2].Split(','); List <byte> bytlist = new List <byte>(); for (int idx = 0; idx < sDataArray.Length; idx += 2) { bytlist.Add(Convert.ToByte(sDataArray[idx], 16)); } byte[] mbyts = new byte[bytlist.Count]; bytlist.CopyTo(mbyts); valueInfo.bDataBuf = encoder.GetString(mbyts).Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries); RegistryInteropWrapper.RegModifyKeyValue(valueInfo, out mbyts); valueInfo.bDataBuf = mbyts; break; default: string[] sDataArry = splits[2].Split(','); if (sDataArry != null) { byte[] byts = new byte[sDataArry.Length]; for (int idx = 0; idx < sDataArry.Length; idx++) { if (!String.IsNullOrEmpty(sDataArry[idx])) { byts[idx] = Convert.ToByte(sDataArry[idx], 16); } } valueInfo.bDataBuf = byts; } break; } } catch (Exception ex) { Logger.LogException("GetValueData() for the value " + valueInfo.pValueName, ex); } }