Skip to content

Commit 6f51468

Browse files
committed
Allow search driver file name
1 parent 376ded3 commit 6f51468

File tree

4 files changed

+113
-3
lines changed

4 files changed

+113
-3
lines changed

Rapr/DSEForm.Designer.cs

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Rapr/DSEForm.cs

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,13 @@ private void SetupListViewColumns()
236236
var date = (DateTime)groupKey;
237237
return date == DateTime.MinValue.Date ? "" : date.ToString("yyyy-MM");
238238
};
239+
240+
// Setup DriverFiles column formatting - converts list to comma-separated string
241+
this.binaryFilesColumn.AspectToStringConverter = files =>
242+
{
243+
var fileList = files as List<string>;
244+
return fileList != null && fileList.Count > 0 ? string.Join(", ", fileList) : string.Empty;
245+
};
239246
}
240247

241248
private void BuildLanguageMenu()
@@ -1380,9 +1387,36 @@ private void UpdateSearchFilter()
13801387
this.lstDriverStoreEntries.EmptyListMsg = this.lstDriverStoreEntries.Objects != null ? Language.Message_No_Match_Result : Language.Message_No_Entries;
13811388
}
13821389

1383-
TextMatchFilter filter = TextMatchFilter.Contains(this.lstDriverStoreEntries, textBoxSearch.Text);
1384-
this.lstDriverStoreEntries.ModelFilter = filter;
1385-
this.lstDriverStoreEntries.DefaultRenderer = new HighlightTextRenderer(filter);
1390+
string searchText = textBoxSearch.Text;
1391+
1392+
// Create custom filter that searches all string properties including hidden columns
1393+
this.lstDriverStoreEntries.ModelFilter = new ModelFilter(delegate (object obj)
1394+
{
1395+
if (!(obj is DriverStoreEntry entry))
1396+
{
1397+
return false;
1398+
}
1399+
1400+
// Helper function to check if a string contains the search text
1401+
bool Contains(string value) => value?.IndexOf(searchText, StringComparison.OrdinalIgnoreCase) >= 0;
1402+
1403+
return Contains(entry.DriverPublishedName) ||
1404+
Contains(entry.DriverInfName) ||
1405+
Contains(entry.DriverClass) ||
1406+
Contains(entry.DriverPkgProvider) ||
1407+
Contains(entry.DriverSignerName) ||
1408+
Contains(entry.DriverVersion?.ToString()) ||
1409+
Contains(entry.DriverDate.ToString("d")) ||
1410+
Contains(entry.DeviceName) ||
1411+
Contains(entry.DeviceId) ||
1412+
Contains(entry.InstallDate?.ToString("d")) ||
1413+
Contains(entry.DriverExtensionId.ToString()) ||
1414+
(entry.DriverFiles?.Any(f => Contains(f)) ?? false);
1415+
});
1416+
1417+
// Use TextMatchFilter for highlighting visible columns
1418+
TextMatchFilter textFilter = TextMatchFilter.Contains(this.lstDriverStoreEntries, searchText);
1419+
this.lstDriverStoreEntries.DefaultRenderer = new HighlightTextRenderer(textFilter);
13861420
}
13871421
}
13881422

Rapr/Utils/DriverStoreEntry.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,11 @@ private static string SanitizeFolderName(string name, int maxLength)
176176
/// </summary>
177177
public DateTime? InstallDate { get; set; }
178178

179+
/// <summary>
180+
/// List of driver files (sys, DLLs) in the driver package
181+
/// </summary>
182+
public List<string> DriverFiles { get; set; }
183+
179184
public override string ToString()
180185
{
181186
return $"PublishedName: {this.DriverPublishedName}, InfName: {this.DriverInfName}, Class: {this.DriverClass}, Version: {this.DriverVersion}, DeviceName: {this.DeviceName}";

Rapr/Utils/NativeDriverStore.cs

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ internal static bool EnumDriverPackages(
194194
DriverSize = DriverStoreRepository.GetFolderSize(new DirectoryInfo(Path.GetDirectoryName(driverStoreFilename))),
195195
BootCritical = GetObjectPropertyInfo<bool?>(driverStoreHandle, driverStoreFilename, DeviceHelper.DEVPKEY_DriverPackage_BootCritical),
196196
InstallDate = GetObjectPropertyInfo<DateTime?>(driverStoreHandle, driverStoreFilename, DeviceHelper.DEVPKEY_DriverPackage_ImportDate),
197+
DriverFiles = EnumerateDriverPackageBinaryFiles(driverStoreHandle, driverStoreFilename),
197198
};
198199

199200
driverStoreEntries.Add(driverStoreEntry);
@@ -262,6 +263,65 @@ internal static ProcessorArchitecture GetProcessorArchitecture(IntPtr driverStor
262263
}
263264
}
264265

266+
/// <summary>
267+
/// Enumerate binary files in a driver package
268+
/// </summary>
269+
internal static List<string> EnumerateDriverPackageBinaryFiles(IntPtr driverStoreHandle, string driverPackageInfPath)
270+
{
271+
List<string> binaryFiles = new List<string>();
272+
273+
IntPtr driverPackageHandle = NativeMethods.DriverPackageOpen(
274+
driverPackageInfPath,
275+
GetProcessorArchitecture(driverStoreHandle),
276+
null,
277+
DriverPackageOpenFlags.FilesOnly,
278+
IntPtr.Zero);
279+
280+
if (driverPackageHandle == IntPtr.Zero)
281+
{
282+
return binaryFiles;
283+
}
284+
285+
try
286+
{
287+
GCHandle handle = GCHandle.Alloc(binaryFiles);
288+
try
289+
{
290+
NativeMethods.DriverPackageEnumFilesW(
291+
driverPackageHandle,
292+
IntPtr.Zero,
293+
DriverPackageEnumFilesFlags.Binaries | DriverPackageEnumFilesFlags.Copy,
294+
EnumBinaryFiles,
295+
GCHandle.ToIntPtr(handle));
296+
}
297+
finally
298+
{
299+
handle.Free();
300+
}
301+
}
302+
finally
303+
{
304+
NativeMethods.DriverPackageClose(driverPackageHandle);
305+
}
306+
307+
return binaryFiles;
308+
}
309+
310+
private static bool EnumBinaryFiles(IntPtr driverPackageHandle, IntPtr pDriverFile, IntPtr lParam)
311+
{
312+
List<string> binaryFiles = (List<string>)GCHandle.FromIntPtr(lParam).Target;
313+
314+
DriverFile driverFile = Marshal.PtrToStructure<DriverFile>(pDriverFile);
315+
316+
// Only collect binary files (drivers, DLLs, etc.)
317+
if (driverFile.Type == DriverFileType.Binary && !string.IsNullOrEmpty(driverFile.DestinationFile))
318+
{
319+
binaryFiles.Add(driverFile.DestinationFile);
320+
}
321+
322+
return true; // Continue enumeration
323+
}
324+
265325
public bool ExportDriver(DriverStoreEntry driverStoreEntry, string destinationPath)
266326
{
267327
if (driverStoreEntry == null)

0 commit comments

Comments
 (0)