Exemplo n.º 1
0
        /// <param name="sectionName"></param>
        /// <param name="relativeRoot">
        /// The location where HKR entried will be stored, relative to 'SYSTEM\CurrentControlSet\' (or ControlSet001 for that matter)
        /// </param>
        /// <param name="pnpDriverInf"></param>
        private void ProcessAddRegSection(PNPDriverINFFile pnpDriverInf, string sectionName, string relativeRoot)
        {
            var section = pnpDriverInf.GetSection(sectionName);

            foreach (var line in section)
            {
                var values     = INIFile.GetCommaSeparatedValues(line);
                var hiveName   = values[0];
                var subKeyName = INIFile.Unquote(values[1]);
                var valueName  = INIFile.TryGetValue(values, 2);
                var valueType  = INIFile.TryGetValue(values, 3);

                var valueDataUnparsed = string.Empty;
                if (values.Count > 3)
                {
                    valueDataUnparsed = StringUtils.Join(values.GetRange(4, values.Count - 4), ",");
                }
                // byte-list is separated using commmas

                valueName = INIFile.Unquote(valueName);
                valueType = pnpDriverInf.ExpandToken(valueType);
                var valueTypeFlags = PNPDriverINFFile.ConvertFromIntStringOrHexString(valueType);
                var valueKind      = PNPDriverINFFile.GetRegistryValueKind(valueTypeFlags);
                if (valueKind == RegistryValueKind.String)
                {
                    valueDataUnparsed = pnpDriverInf.ExpandToken(valueDataUnparsed);
                }
                var valueData = HiveINIFile.ParseValueDataString(valueDataUnparsed, valueKind);

                if (hiveName == "HKR")
                {
                    var cssKeyName = relativeRoot;
                    if (subKeyName != string.Empty)
                    {
                        cssKeyName = cssKeyName + @"\" + subKeyName;
                    }
                    // Note that software key will stick from text-mode:
                    SetCurrentControlSetRegistryKey(cssKeyName, valueName, valueKind, valueData);
                }
                else if (hiveName == "HKLM" &&
                         subKeyName.StartsWith(@"SYSTEM\CurrentControlSet\", StringComparison.InvariantCultureIgnoreCase))
                {
                    var cssKeyName = subKeyName.Substring(@"SYSTEM\CurrentControlSet\".Length);

                    SetCurrentControlSetRegistryKey(cssKeyName, valueName, valueKind, valueData);
                }
            }
        }
Exemplo n.º 2
0
        private void ProcessCopyFilesSection(PNPDriverINFFile pnpDriverInf, string sectionName)
        {
            var section = pnpDriverInf.GetSection(sectionName);

            foreach (var line in section)
            {
                var values = INIFile.GetCommaSeparatedValues(line);
                var destinationFileName = values[0];
                var sourceFileName      = INIFile.TryGetValue(values, 1);
                if (sourceFileName == string.Empty)
                {
                    sourceFileName = destinationFileName;
                }
                ProcessCopyFileDirective(pnpDriverInf, sourceFileName, destinationFileName);
            }
        }