为什么 $KMDFCOINSTALLERVERSION$ 评估为分号?

Why does $KMDFCOINSTALLERVERSION$ evaluate to semicolon?

背景

此问题与 RAMDisk Storage Driver Sample, but also applies to the Toaster Sample Driver 有关,甚至可能适用于任何使用 .INX 文件和 CoInstallers 的驱动程序。

我最初的问题是 "Why am I missing the WdfCoInstallerXXXXX.dll file when my build was successful?" 查看 ramdisk.inf 文件后,我意识到所有共同安装程序部分都是空的(用分号代替)。这让我想到了下面的问题。

问题

ramdisk.inx 文件的共同安装程序部分使用了 $KMDFCOINSTALLERVERSION$ 变量。根据 this 页面,这应该是一个有效变量。但是,在成功构建后,所有引用 $KMDFCOINSTALLERVERSION$ 变量的行在生成的 ramdisk.inf 文件中计算为分号。为什么?

附加信息

ramdisk.inx 文件中的所有其他变量,例如 $KMDFVERSION$$ARCH $,得到正确评估。

原因

事实证明,这是因为我没有安装指定的 KMDF 库版本,即使我最近安装了最新的 WDK 10。根据 this 页面,"if you omit the KMDF Version Minor, the most recent minor version is used."

换句话说,当我只支持 1.7、1.9 和 1.11 时,我尝试使用 KMDF 1.15 版。您可以检查可再发行目录以查看您支持哪个版本。我的位于 C:\Program Files (x86)\Windows Kits\Redist\wdf\x64.

修复

转到 Project->Properties->Driver Settings->Driver Model,然后 select 相应的 KMDF 版本。之后,重建,你的 .INF 文件将被正确填充,你的驱动程序包将包含适当的 WdfCoInstallerXXXXX.dll.