private void Do_CreateKey(RegistryEnumKeyInfo keyInfo, LACTreeNode node) { if (keyInfo != null) { RegistryAddSubKeyDlg addDlg = new RegistryAddSubKeyDlg(string.Empty, true, keyInfo); if (addDlg.ShowDialog(this) == DialogResult.OK) { IntPtr phkResult = IntPtr.Zero; int ret = RegistryInteropWrapper.ApiRegCreateKeyEx(plugin.handle.Handle, keyInfo.pKey, Marshal.StringToHGlobalUni(addDlg.KeyName), out phkResult); if (ret == 0) { if (phkResult != IntPtr.Zero) RegistryInteropWrapper.ApiRegCloseKey(plugin.handle.Handle, phkResult); if (!keyInfo.sKeyname.Trim().Equals(Properties.Resources.HKEY_THIS_MACHINE)) RegistryInteropWrapper.ApiRegCloseKey(plugin.handle.Handle, keyInfo.pKey); node.IsModified = true; node.sc.ShowControl(node); } else { container.ShowError(this, "Registry cannot create the key with the name specified.\n It is because of either the name exists or parent key info is wrong"); } } } }
private void Do_RenameKey(object ObjInfo, LACTreeNode node) { if (ObjInfo is SubKeyInfo) { SubKeyInfo keyInfo = ObjInfo as SubKeyInfo; if (keyInfo != null) { //Get the parent key to add the new key RegistryKey parentKey = ((SubKeyInfo)(node.Parent as LACTreeNode).Tag).sSubKey; RegistryAddSubKeyDlg renameDlg = new RegistryAddSubKeyDlg(keyInfo.sKey, true, parentKey); if (renameDlg.ShowDialog(this) == DialogResult.OK) { if (!string.IsNullOrEmpty(renameDlg.KeyName)) { // Create a key with the new Name RegistryKey newKey = RegistryInteropWrapperWindows.Win32CreateSubKey(parentKey, renameDlg.KeyName); // Move the old key values & subkeys to new key Do_MoveSubKeys(keyInfo.sSubKey, newKey); // Delete oldKey if (parentKey.SubKeyCount > 0) RegistryInteropWrapperWindows.Win32DeleteSubKeyTree(parentKey, keyInfo.sKey); else RegistryInteropWrapperWindows.Win32DeleteSubKey(parentKey, keyInfo.sKey); } } } } else if (ObjInfo != null && ObjInfo is RegistryEnumKeyInfo) { RegistryEnumKeyInfo keyInfo = ObjInfo as RegistryEnumKeyInfo; RegistryAddSubKeyDlg renameDlg = new RegistryAddSubKeyDlg(keyInfo.sKeyname, true, keyInfo.pKey); if (renameDlg.ShowDialog(this) == DialogResult.OK) { if (!string.IsNullOrEmpty(renameDlg.KeyName)) { //get the parent key handle RegistryEnumKeyInfo parentKeyinfo = node.Parent.Tag as RegistryEnumKeyInfo; if(parentKeyinfo != null) { if (!parentKeyinfo.sKeyname.Trim().Equals(Properties.Resources.HKEY_THIS_MACHINE)) { RegistryInteropWrapper.ApiRegOpenKeyExW(plugin.handle.Handle, plugin.pRootHandle, parentKeyinfo.sKeyname, out keyInfo.pRootKey); } else { keyInfo.pRootKey = plugin.pRootHandle; } } renameDlg.KeyName = renameDlg.KeyName.LastIndexOf(@"\") < 0 ? renameDlg.KeyName : renameDlg.KeyName.Substring(renameDlg.KeyName.LastIndexOf(@"\")+1); // Create a key with the new Name IntPtr phkResult = IntPtr.Zero; RegistryInteropWrapper.ApiRegCreateKeyEx(plugin.handle.Handle, keyInfo.pRootKey, Marshal.StringToHGlobalUni(renameDlg.KeyName), out phkResult); // Move the old key values & subkeys to new key Do_MoveSubKeys(keyInfo, phkResult); if (phkResult != IntPtr.Zero) RegistryInteropWrapper.ApiRegCloseKey(plugin.handle.Handle, phkResult); keyInfo.sKeyname = keyInfo.sKeyname.LastIndexOf(@"\") < 0 ? keyInfo.sKeyname : keyInfo.sKeyname.Substring(keyInfo.sKeyname.LastIndexOf(@"\")+1); // Delete oldKey if (keyInfo.sSubKeyCount > 0) { RegistryInteropWrapper.ApiRegDeleteTree(plugin.handle.Handle, keyInfo.pRootKey, keyInfo.pKey, keyInfo.sKeyname); } else RegistryInteropWrapper.ApiRegDeleteKey(plugin.handle.Handle, keyInfo.pRootKey, keyInfo.pKey, keyInfo.sKeyname); if (!parentKeyinfo.sKeyname.Trim().Equals(Properties.Resources.HKEY_THIS_MACHINE)) RegistryInteropWrapper.ApiRegCloseKey(plugin.handle.Handle, keyInfo.pRootKey); } } } LACTreeNode parentnode = node.Parent as LACTreeNode; parentnode.IsModified = true; parentnode.sc.ShowControl(parentnode); }
private void Do_CreateKey(SubKeyInfo keyInfo, LACTreeNode node) { if (keyInfo != null) { RegistryAddSubKeyDlg addDlg = new RegistryAddSubKeyDlg(string.Empty, true, keyInfo.sSubKey); if (addDlg.ShowDialog(this) == DialogResult.OK) { RegistryInteropWrapperWindows.Win32CreateSubKey(keyInfo.sSubKey, addDlg.KeyName); treeNode.IsModified = true; treeNode.sc.ShowControl(treeNode); } } }
private void Do_RenameKeyValue(object ValueInfo, LACTreeNode node) { try { if (ValueInfo != null && ValueInfo is SubKeyValueInfo) { SubKeyValueInfo valueInfo = ValueInfo as SubKeyValueInfo; RegistryAddSubKeyDlg renameDlg = new RegistryAddSubKeyDlg(valueInfo.sValue, false, valueInfo.sParentKey); if (renameDlg.ShowDialog(this) == DialogResult.OK) { if (!string.IsNullOrEmpty(renameDlg.KeyName)) { RegistryInteropWrapperWindows.Win32RegKeyValueData(valueInfo.sParentKey, valueInfo.sValue, out valueInfo.sDataBuf); RegistryInteropWrapperWindows.Win32DeleteSubKeyValue(valueInfo.sParentKey, valueInfo.sValue); valueInfo.sValue = renameDlg.KeyName; RegistryInteropWrapperWindows.Win32ModifySubKeyValue(valueInfo); } } } else { RegistryValueInfo regValueInfo = ValueInfo as RegistryValueInfo; try{ RegistryAddSubKeyDlg renameDlg = new RegistryAddSubKeyDlg(regValueInfo.pValueName, false, regValueInfo.pParentKey); if (renameDlg.ShowDialog(this) == DialogResult.OK) { if (!string.IsNullOrEmpty(renameDlg.KeyName)) { RegistryInteropWrapper.GetRegGetValueW(plugin.handle.Handle, regValueInfo); RegistryInteropWrapper.ApiRegDeleteValue(plugin.handle.Handle, regValueInfo.pParentKey, regValueInfo.pValueName); regValueInfo.pValueName = renameDlg.KeyName; RegistryInteropWrapper.ApiRegSetValueEx(plugin.handle.Handle, regValueInfo.pParentKey, regValueInfo.pValueName, (uint)regValueInfo.pType, regValueInfo.bDataBuf as byte[]); } } }catch{} if (!regValueInfo.sKeyname.Trim().Equals(Properties.Resources.HKEY_THIS_MACHINE)) RegistryInteropWrapper.ApiRegCloseKey(plugin.handle.Handle, regValueInfo.pParentKey); } treeNode.IsModified = true; treeNode.sc.ShowControl(treeNode); } catch (Exception ex) { Logger.LogException("Do_RenameKeyValue :", ex); } }