Esempio n. 1
0
        private RegistryCaptureKey GetKey(RegistryKey key)
        {
            string path;
            int    pos = key.Name.IndexOf(m_rootKey);

            if (pos != -1)
            {
                path = key.Name.Substring(pos + m_rootKey.Length);
            }
            else
            {
                path = key.Name;
            }
            if (path.StartsWith("\\"))
            {
                path = path.Substring(1);
            }

            RegistryCaptureKey captureKey = new RegistryCaptureKey(path);

            // Iterate over all values.

            foreach (string name in key.GetValueNames())
            {
                switch (key.GetValueKind(name))
                {
                case RegistryValueKind.String:
                    captureKey.Add(new RegistryCaptureStringValue(name, key.GetValue(name) as string));
                    break;

                case RegistryValueKind.DWord:
                    captureKey.Add(new RegistryCaptureDWordValue(name, (int)key.GetValue(name)));
                    break;

                case RegistryValueKind.ExpandString:
                    captureKey.Add(new RegistryCaptureExpandStringValue(name, key.GetValue(name) as string));
                    break;

                case RegistryValueKind.MultiString:
                    captureKey.Add(new RegistryCaptureMultiStringValue(name, key.GetValue(name) as string[]));
                    break;

                case RegistryValueKind.Unknown:
                case RegistryValueKind.Binary:
                case RegistryValueKind.QWord:
                    captureKey.Add(new RegistryCaptureValue(name, key.GetValue(name)));
                    break;
                }
            }

            // Iterate over sub keys.

            foreach (string subKeyName in key.GetSubKeyNames())
            {
                using (RegistryKey subKey = key.OpenSubKey(subKeyName))
                {
                    captureKey.Add(GetKey(subKey));
                }
            }

            return(captureKey);
        }