/// <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); } } }
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); } }