我有 Windows WDF 设备驱动程序代码,试图使其能够预安装(在设备存在之前)。它首先检查是否存在有效的设备 ID,对于找到的任何设备 ID,它都会执行以下操作:
if (UpdateDriverForPlugAndPlayDevices(0, // No Window Handle
hwid, // Hardware ID
inffile, // FileName
INSTALLFLAG_FORCE,
&RebootRequired))
// success
但是如果没有设备存在/插入,它会这样做:
if(SetupCopyOEMInf(inffile,
NULL,
SPOST_PATH,
0,
NULL,
0,
NULL,
NULL))
// etc.
在第一种情况下(存在设备),一切都很好。但是在第二种情况下,根据微软的“预安装驱动程序包”,它应该将 INF 复制到 c:\Windows\inf\oem.inf (它这样做)然后一旦设备存在,它应该安装基于驱动程序的驱动程序在 INF 中的信息上,它没有,我必须去设备管理器,删除未知设备,然后扫描硬件更改以使其安装。
在第一种情况下(设备存在),我们的驱动程序 .sys 文件被复制到 c:\windows\system32\drivers 目录,而在第二种情况下它永远不会这样做。如果我只是将 .sys 文件单独复制到 c:\windows\system32\drivers,一切正常。我可以这样做,但这似乎很笨拙(而且有风险),因为这一切都应该自动处理,基于我对 Microsoft 的“预安装驱动程序包”文档的阅读。