in ScpControl/Driver/PNPUtilLib/PNPUtil.cs [154:215]
public List<DriverStoreEntry> EnumeratePackages()
{
var ldse = new List<DriverStoreEntry>();
var output = "";
var result = PnpUtilHelper(PnpUtilOptions.Enumerate, "", ref output);
if (result)
{
// Trace.TraceInformation("O/P of Enumeration : " + Environment.NewLine + output + Environment.NewLine);
// Parse the output
// [jenda_] Didn't work on non-english Windows - changed from string recognition to counting lines
using (var sr = new StringReader(output))
{
var currentLine = "";
string[] currentLineDivided = {};
var dse = new DriverStoreEntry();
byte lineNum = 0;
while ((currentLine = sr.ReadLine()) != null)
{
currentLineDivided = currentLine.Split(':');
if (currentLineDivided.Length == 2)
{
currentLineDivided[1] = currentLineDivided[1].Trim();
switch (lineNum)
{
case 0: // [jenda_] Published name :
dse.DriverPublishedName = currentLineDivided[1];
break;
case 1: //Driver package provider :
dse.DriverPkgProvider = currentLine.Split(':')[1].Trim();
break;
case 2: // [jenda_] Class :
dse.DriverClass = currentLine.Split(':')[1].Trim();
break;
case 3: // [jenda_] Driver date and version :
var DateAndVersion = currentLine.Split(':')[1].Trim();
// date and version may be empty
if(DateAndVersion.Length > 0)
{
dse.DriverDate = DateAndVersion.Split(' ')[0].Trim();
dse.DriverVersion = DateAndVersion.Split(' ')[1].Trim();
}
break;
case 4: // [jenda_] Signer name :
dse.DriverSignerName = currentLine.Split(':')[1].Trim();
ldse.Add(dse);
dse = new DriverStoreEntry();
break;
default:
continue;
}
lineNum++;
if (lineNum > 4)
lineNum = 0;
}
}
}
}
return ldse;
}