I’m working on my first driver, based upon Microsoft’s IddCx Indirect Display sample. I can’t seem to get it to install, and I’m having trouble figuring out what the problem might be.
On my test machine, I connect to the remote build output folder (containing .cat
, .dll
, and .inf
), right-click on the .inf
file, and choose Install. Install finishes successfully; here’s an excerpt from %WinDir%\INF\setupapi.dev.log:
>>> [Device Install (DiInstallDriver) - <dev-pc-share>\MY_DRIVER.inf]
>>> Section start 2020/04/23 21:34:01.152
cmd: "C:\WINDOWS\System32\InfDefaultInstall.exe" "<dev-pc-share>\MY_DRIVER.inf"
ndv: Flags: 0x0
ndv: INF path: <dev-pc-share>\MY_DRIVER.inf
inf: {SetupCopyOEMInf: <dev-pc-share>\MY_DRIVER.inf} 21:34:01.174
inf: Copy style: 0x0
sto: {Setup Import Driver Package: <dev-pc-share>\MY_DRIVER.inf} 21:34:01.328
inf: Provider: MyCompany
inf: Class GUID: {4D36E968-E325-11CE-BFC1-08002BE10318}
inf: Driver Version: 04/23/2020,19.41.30.482
inf: Catalog File: MY_DRIVER.cat
sto: {Copy Driver Package: <dev-pc-share>\MY_DRIVER.inf} 21:34:01.365
sto: Driver Package = <dev-pc-share>\MY_DRIVER.inf
sto: Flags = 0x00000007
sto: Destination = <appdata-local-temp>
sto: Copying driver package files to '<appdata-local-temp>'.
flq: Copying '<dev-pc-share>\MY_DRIVER.cat' to '<appdata-local-temp>\MY_DRIVER.cat'.
flq: Copying '<dev-pc-share>\MY_DRIVER.dll' to '<appdata-local-temp>\MY_DRIVER.dll'.
flq: Copying '<dev-pc-share>\MY_DRIVER.inf' to '<appdata-local-temp>\MY_DRIVER.inf'.
sto: {Copy Driver Package: exit(0x0)} 21:34:01.515
pol: {Driver package policy check} 21:34:01.534
pol: {Driver package policy check - exit(0x0)} 21:34:01.534
sto: {Stage Driver Package: <appdata-local-temp>\MY_DRIVER.inf} 21:34:01.537
inf: {Query Configurability: <appdata-local-temp>\MY_DRIVER.inf} 21:34:01.543
! inf: Using WDF schema version 2.0 when section requires version 2.25. Section = [MY_DEVICE_MODEL.Wdf]
inf: Driver package uses WDF.
inf: Driver package 'MY_DRIVER.inf' is configurable.
inf: {Query Configurability: exit(0x0)} 21:34:01.554
flq: Copying '<appdata-local-temp>\MY_DRIVER.cat' to '<driverstore-temp>\MY_DRIVER.cat'.
flq: Copying '<appdata-local-temp>\MY_DRIVER.dll' to '<driverstore-temp>\MY_DRIVER.dll'.
flq: Copying '<appdata-local-temp>\MY_DRIVER.inf' to '<driverstore-temp>\MY_DRIVER.inf'.
sto: {DRIVERSTORE IMPORT VALIDATE} 21:34:01.586
sig: {_VERIFY_FILE_SIGNATURE} 21:34:01.653
sig: Key = MY_DRIVER.inf
sig: FilePath = <driverstore-temp>\MY_DRIVER.inf
sig: Catalog = <driverstore-temp>\MY_DRIVER.cat
! sig: Verifying file against specific (valid) catalog failed.
! sig: Error 0x800b0109: A certificate chain processed, but terminated in a root certificate which is not trusted by the trust provider.
sig: {_VERIFY_FILE_SIGNATURE exit(0x800b0109)} 21:34:01.670
sig: {_VERIFY_FILE_SIGNATURE} 21:34:01.672
sig: Key = MY_DRIVER.inf
sig: FilePath = <driverstore-temp>\MY_DRIVER.inf
sig: Catalog = <driverstore-temp>\MY_DRIVER.cat
! sig: Verifying file against specific Authenticode(tm) catalog failed.
! sig: Error 0x800b0109: A certificate chain processed, but terminated in a root certificate which is not trusted by the trust provider.
sig: {_VERIFY_FILE_SIGNATURE exit(0x800b0109)} 21:34:01.680
! sig: Driver package catalog file certificate does not belong to Trusted Root Certificates, but user wants to install anyway.
sto: {DRIVERSTORE IMPORT VALIDATE: exit(0x0)} 21:34:07.844
sig: Signer Score = 0x80000000 (Unsigned)
sto: {Core Driver Package Import: MY_DRIVER.inf_amd64_df40ef6fef35ece9} 21:34:07.878
sto: {DRIVERSTORE IMPORT BEGIN} 21:34:07.888
bak: Create system restore point:
bak: Description = Device Driver Package Install: MyCompany Display adapters
bak: Time = 17625ms
bak: Status = 0x0 (SUCCESS)
sto: {DRIVERSTORE IMPORT BEGIN: exit(0x0)} 21:34:24.443
cpy: {Copy Directory: <driverstore-temp>} 21:34:24.457
cpy: Target Path = <driverstore-filerepo>\MY_DRIVER.inf_amd64_df40ef6fef35ece9
cpy: {Copy Directory: exit(0x0)} 21:34:24.469
idb: {Register Driver Package: <driverstore-filerepo>\MY_DRIVER.inf_amd64_df40ef6fef35ece9\MY_DRIVER.inf} 21:34:24.473
idb: Created driver package object 'MY_DRIVER.inf_amd64_df40ef6fef35ece9' in DRIVERS database node.
idb: Created driver INF file object 'oem5.inf' in DRIVERS database node.
idb: Registered driver package 'MY_DRIVER.inf_amd64_df40ef6fef35ece9' with 'oem5.inf'.
idb: {Register Driver Package: exit(0x0)} 21:34:24.495
idb: {Publish Driver Package: <driverstore-filerepo>\MY_DRIVER.inf_amd64_df40ef6fef35ece9\MY_DRIVER.inf} 21:34:24.495
idb: Activating driver package 'MY_DRIVER.inf_amd64_df40ef6fef35ece9'.
cpy: Published 'MY_DRIVER.inf_amd64_df40ef6fef35ece9\MY_DRIVER.inf' to 'oem5.inf'.
idb: Indexed 3 device IDs for 'MY_DRIVER.inf_amd64_df40ef6fef35ece9'.
sto: Flushed driver database node 'DRIVERS'. Time = 78 ms
sto: Flushed driver database node 'SYSTEM'. Time = 16 ms
idb: {Publish Driver Package: exit(0x0)} 21:34:24.624
sto: {DRIVERSTORE IMPORT END} 21:34:24.629
dvi: Flushed all driver package files to disk. Time = 15 ms
sig: Installed catalog 'MY_DRIVER.cat' as 'oem5.cat'.
bak: Commit system restore point:
bak: Description = Device Driver Package Install: MyCompany Display adapters
bak: Time = 0ms
bak: Status = 0x0 (SUCCESS)
sto: {DRIVERSTORE IMPORT END: exit(0x0)} 21:34:24.927
sto: {Core Driver Package Import: exit(0x0)} 21:34:24.929
sto: {Stage Driver Package: exit(0x0)} 21:34:24.930
sto: {Setup Import Driver Package - exit (0x0)} 21:34:24.963
inf: Driver Store Path: <driverstore-filerepo>\MY_DRIVER.inf_amd64_df40ef6fef35ece9\MY_DRIVER.inf
inf: Published Inf Path: C:\WINDOWS\INF\oem5.inf
inf: {SetupCopyOEMInf exit (0x0)} 21:34:24.984
<<< Section end 2020/04/23 21:34:25.012
<<< [Exit status: SUCCESS]
- After install, I don’t find my driver DLL in %WinDir%\System32\Drivers\UMDF as expected
- I also don’t find any registry settings related to my driver
After running the test app (which instantiates a software device using the driver), I see MyCompany Virtual Display Adapter (with a warning icon overlay) show up in Device Manager. Looking at properties on that item, there are no driver files…
My .inf
file looks like this:
[Version]
Signature = "$Windows NT$"
CatalogFile = MY_DRIVER.cat
Class = Display
ClassGUID = {4D36E968-E325-11CE-BFC1-08002BE10318}
ClassVer = 2.0
DriverVer = 04/24/2020,10.52.58.972
PnpLockDown = 1
Provider = %PROVIDER_STRING%
[SourceDisksNames]
1 = %DISK_NAME%,,,
[SourceDisksFiles]
MY_DRIVER.dll = 1
[DestinationDirs]
MY_DRIVER_FileList = 12, UMDF
[Manufacturer]
%MFG_NAME% = Models, NTamd64
[Models.NTamd64]
%DEVICE_NAME% = MY_DEVICE_MODEL, Root\Models
%DEVICE_NAME% = MY_DEVICE_MODEL, Models
[MY_DEVICE_MODEL]
CopyFiles = MY_DRIVER_FileList
[MY_DRIVER_FileList]
MY_DRIVER.dll
[MY_DEVICE_MODEL.HW]
AddReg = MY_DEVICE_MODEL_HwAddReg
[MY_DEVICE_MODEL_HwAddReg]
HKR,, "UpperFilters", %REG_MULTI_SZ%, "IndirectKmd"
HKR, "WUDF", "DeviceGroupId", %REG_SZ%, "MY_GROUP"
[MY_DEVICE_MODEL.Services]
AddService = WUDFRd, 0x000001fa, WUDFRD_ServiceInstall
[WUDFRD_ServiceInstall]
DisplayName = %WUDFR_DISP_NAME%
ServiceType = %SERVICE_KERNEL_DRIVER%
StartType = %SERVICE_DEMAND_START%
ErrorControl = %SERVICE_ERROR_NORMAL%
ServiceBinary = %12%\WUDFRd.sys
[MY_DEVICE_MODEL.Wdf]
UmdfService = MY_DRIVER, UMDF_ServiceInstall
UmdfServiceOrder = MY_DRIVER
UmdfKernelModeClientPolicy = AllowKernelModeClients
[UMDF_ServiceInstall]
UmdfLibraryVersion = $UMDFVERSION$
ServiceBinary = %12%\UMDF\MY_DRIVER.dll
UmdfExtensions = IddCx0102
[Strings]
DEVICE_NAME = "MyCompany Virtual Display Adapter"
DISK_NAME = "MyCompany Virtual Display Installation Disk"
MFG_NAME = "MyCompany Inc"
PROVIDER_STRING = "MyCompany"
WUDFR_DISP_NAME = "Windows Driver Foundation - User-mode Driver Framework Reflector"
REG_DWORD = 0x00010001
REG_EXPAND_SZ = 0x00020000
REG_MULTI_SZ = 0x00010000
REG_SZ = 0x00000000
SERVICE_DEMAND_START = 3
SERVICE_ERROR_NORMAL = 1
SERVICE_KERNEL_DRIVER = 1
This has been blocking me for a few weeks now. Can anyone explain what might be wrong?