I would like to deploy a .inf based USB driver with my installer.
I guess the .inf needs to be placed in %SystemRoot%\inf, but there is also a .cat (WHQL certification I guess?), and .sys files. What do I do with those?
EDIT: Resolved, thanks to the helpful answers. I was able to P/Invoke the function, so I have a post-install action which runs the following code:
namespace DriverPackageInstallAction { static class Program { [DllImport('DIFXApi.dll', CharSet = CharSet.Unicode)] public static extern Int32 DriverPackagePreinstall(string DriverPackageInfPath, Int32 Flags); /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { DirectoryInfo assemblyDir = new DirectoryInfo(Application.ExecutablePath); DirectoryInfo installDir = assemblyDir.Parent; int result = DriverPackagePreinstall(installDir.FullName + @'\Driver\XYZ.inf', 0); if (result != 0) MessageBox.Show('Driver installation failed.'); } } }
I would start by reading about SetupAPI and DIFx. The Windows Driver Kit includes samples of both, including a DIFx-based merge module and a DIFx-based WiX library. The source for the command-line devcon utility, which is based on SetupAPI, is also included in the WDK samples.