public void queryKey() { if (!hKeyQueried) { IntPtr subKeyNamesUnmanaged; int cSubKeys; IntPtr regValuesUnmanaged; int cValues; regQuery(hKey, out subKeyNamesUnmanaged, out cSubKeys, out regValuesUnmanaged, out cValues); var subKeyNames = new KeyName[cSubKeys]; var keyNameStride = Marshal.SizeOf(typeof(KeyName)); for (int i = 0; i < cSubKeys; i++) { var p = new IntPtr(subKeyNamesUnmanaged.ToInt64() + i * keyNameStride); subKeyNames[i] = (KeyName)Marshal.PtrToStructure(p, typeof(KeyName)); } Items.Clear(); for (int i = 0; i < cSubKeys; i++) { Items.Add(new RegTreeViewItem(RegTreeViewItemType.FOLDER) { Title = subKeyNames[i].Name, Parent = this }); } OriginalValues.Clear(); Values.Clear(); var regValueStride = Marshal.SizeOf(typeof(RegValue)); for (int i = 0; i < cValues; i++) { var p = new IntPtr(regValuesUnmanaged.ToInt64() + i * regValueStride); var regValue = (RegValue)Marshal.PtrToStructure(p, typeof(RegValue)); OriginalValues.Add(regValue); Values.Add(new RegValueItem(regValue)); } hKeyQueried = true; } }
public static extern void regDelValue(IntPtr hKey, KeyName name);
public static extern void regSetKeyStringValue(IntPtr hKey, KeyName name, KeyName data);
public static extern void regDelKey(IntPtr parentKey, KeyName name);
public static extern void regNewKey(IntPtr parentKey, KeyName name, out IntPtr newKey);
public static extern void regOpen(IntPtr parentKey, KeyName name, out IntPtr output);