Hi. I’m working on a disk filter driver (like many others) and the things I read keep me going around in circles. It’s a simple raid driver, designed to duplicate IRPs to multiple disks. It’s in the loadordergroup “PnP filter” and class “Diskdrive”.
I don’t understand the install process for a driver; there are too many ways. API calls like inDIFxAPI, SetupCopyOEMInf, pnputil and enum.exe (toaster example), “rundll32 setupapi.dll,InstallHinfSection”, right click install, and probably more I don’t know about.
I can install my driver using either right click install or rundll32.exe setupapi methods and the DefaultInstallSection of the inf file (though it ignores my request to suppress reboot mode in the former). The service works after the reboot.
But I read that you’re not supposed to install plug and play devices with the Default section (something about not properly registering, signing, etc), and that the proper method is to use pnputil.exe. So I rewrote my inf file without a default install section. Then I was able to inf2cat it and install with pnputil.exe. The only problem is that now the service doesn’t start, because I assume I have to install a device that will trigger windows to recognize. But that brings another problem, I don’t want to attach to a specific device.
So I’m confused.
- If it’s not a specific device driver, is it even PnP?
- If it isn’t PnP, what is it? A class driver? Does a class driver make sense in “PnP Filter” ?
- Does that mean I should be using the inf file after all? If so, are there additional steps I should be taking to properly register?
- Do I need to change DefaultInstall to ClassInstall32? I read that this is supposed to be only if I’m creating a new class? What class should this be?
- Do I have to be concerned about this “legacy” install method for future support?
- This is supposed to be raid, so how can I ensure the PnP stack puts my driver in before any writes are sent?
Thanks,