无法编译
微软有一个Bug,Spectre,现在被缓解了,但是代价是你要在VS2022中安装一大把的环境,否则此例子无法编译……
无法安装
devcon.exe,如图执行后得到:
但是设备管理器里找得到这个设备……
说明是安装了,但安装之后并没有执行起来
无法安装——从devcon.exe定位
devcom.exe的输出没有一点有用的信息。在devcon.exe的源代码(Windows-driver-samples\setup\devcon)中找报错的位置,修改为:
newdevMod = LoadLibrary(TEXT("newdev.dll"));
if(!newdevMod) {
MSG("");
goto final;
}
UpdateFn = (UpdateDriverForPlugAndPlayDevicesProto)GetProcAddress(newdevMod,UPDATEDRIVERFORPLUGANDPLAYDEVICES);
if(!UpdateFn)
{
MSG("");
goto final;
}
FormatToStream(stdout,inf ? MSG_UPDATE_INF : MSG_UPDATE,hwid,inf);
flags |= INSTALLFLAG_FORCE;
if(!UpdateFn(NULL,hwid,inf,flags,&reboot)) {
MSG("");
DWORD err = GetLastError();
if (err == ERROR_FILE_NOT_FOUND) {
puts("针对 FullInfPath 指定的路径不存在。");
}
if (err == ERROR_IN_WOW64) {
puts("呼叫的应用程序是在 64 位环境中尝试执行的 32 位应用程序,不允许此环境。");
}
if (err == ERROR_INVALID_FLAGS) {
puts("为 InstallFlags 指定的值无效。");
}
if (err == ERROR_NO_SUCH_DEVINST) {
puts("针对 HardwareId 指定的值不符合系统上的任何设备。 也就是说,设备未插入。");
}
if (err == ERROR_NO_MORE_ITEMS) {
puts("函式发现HardwareId值的相符项目,但指定的驱动程序与目前的驱动程序不相符,而且呼叫端未指定INSTALLFLAG_FORCE旗标。");
}
goto final;
}
FormatToStream(stdout,MSG_UPDATE_OK);
里面那些if (err == ERROR_...)
,是从微软官方文档中找的
无法安装——从日志定位
windows驱动日志输出的路径是:C:\Windows\inf\setupapi.dev.log
找到相关信息:
>>> [Device Install (UpdateDriverForPlugAndPlayDevices) - Root\SimpleAudioSample]
>>> Section start 2024/10/25 08:50:47.888
cmd: "C:\Program Files (x86)\Windows Kits\10\Tools\10.0.26100.0\x64\devcon.exe" install .\SimpleAudioSample.inf Root\SimpleAudioSample
ndv: INF path: C:\Users\Administrator\Desktop\Windows-driver-samples\audio\simpleaudiosample\x64\Debug\package\SimpleAudioSample.inf
ndv: Install flags: 0x00000001
ndv: {Update Device Driver - ROOT\MEDIA\0000}
ndv: Search options: 0x00000080
ndv: Searching single INF 'C:\Users\Administrator\Desktop\Windows-driver-samples\audio\simpleaudiosample\x64\Debug\package\SimpleAudioSample.inf'
dvi: {Build Driver List} 08:50:47.910
dvi: Searching for hardware ID(s):
dvi: root\simpleaudiosample
dvi: {Build Driver List - exit(0x00000000)} 08:50:47.916
! ndv: No matching drivers found in single INF
dvi: {DIF_SELECTBESTCOMPATDRV} 08:50:47.917
dvi: Default installer: Enter 08:50:47.918
dvi: {Select Best Driver}
! dvi: Selecting driver failed(0xe0000228)
dvi: {Select Best Driver - exit(0xe0000228)}
! dvi: Default installer: failed
! dvi: Error 0xe0000228: There are no compatible drivers for this device.
dvi: {DIF_SELECTBESTCOMPATDRV - exit(0xe0000228)} 08:50:47.922
! ndv: Unable to select best compatible driver. Error = 0xe0000228
ndv: No drivers found for device.
ndv: {Update Device Driver - exit(00000103)}
! ndv: No better matching drivers found for device 'ROOT\MEDIA\0000'.
! ndv: No devices were updated.
<<< Section end 2024/10/25 08:50:47.925
<<< [Exit status: FAILURE(0x00000103)]
No matching drivers found in single INF。缺少驱动?是文件没找到吗?删除驱动的.sys和.cer等文件试试,结果是一样的。
安装成功——修改inf文件
我并没有找到指定.sys等文件的方法,找半天都没有找到,再加上其他inf文件也是相对路径,推测不是这个原因。后面忽然想到devcon.exe输出“函式发现HardwareId值的相符项目,但指定的驱动程序与目前的驱动程序不相符,而且呼叫端未指定INSTALLFLAG_FORCE旗标”,推测可能是版本不对。删掉SIMPLEAUDIOSAMPLE,NTamd64.10.0...22000
中的.10.0...22000
,居然可以安装成功了……