Server 2008(32) : Reboot is required, because the in-memory KMDF version is older than the coinstall

Hello,

I’m trying to install an old PCI driver created with: Windows Driver Kit Version 7.1.0
The inf is using WdfCoInstaller01009.dll

The installation (using Update from device manager) failed: code 0x1
In setupact.log I got:

WdfCoInstaller: [02/04/2021 10:01.17.434] DIF_INSTALLDEVICE: Pre-Processing
WdfCoInstaller: [02/04/2021 10:01.17.465] ReadComponents: WdfSection for Driver Service Pci9x5x using KMDF lib version Major 0x1, minor 0x9
WdfCoInstaller: [02/04/2021 10:01.17.497] DIF_INSTALLDEVICE: Coinstaller version: 1.9.7600
WdfCoInstaller: [02/04/2021 10:01.17.512] DIF_INSTALLDEVICE: KMDF in-memory version: 1.7.6001
WdfCoInstaller: [02/04/2021 10:01.17.512] DIF_INSTALLDEVICE: KMDF on-disk version: 1.7.6001
WdfCoInstaller: [02/04/2021 10:01.17.543] Service Wdf01000 is running
WdfCoInstaller: [02/04/2021 10:01.17.543] DIF_INSTALLDEVICE: Reboot is required, because the in-memory KMDF version is older than the coinstaller’s version.
WdfCoInstaller: [02/04/2021 10:01.17.559] DIF_INSTALLDEVICE: Update is required, because the on-disk KMDF version is older than the coinstaller
WdfCoInstaller: [02/04/2021 10:01.17.637] VerifyMSRoot: exit: error(0) The operation completed successfully.

Before installing my driver I uninstalled an older **WDM **driver by:

  1. Uninstall + delete from device manager
  2. delete relevant inf from windows\inf
  3. Reboot

Can you please tell why am I still getting the “older KMDF” message ?

Thank you,
Zvika

The error messages explain what’s happening in detail. Did you not believe it? There is ANOTHER DRIVER on your system that uses KMDF (a number of operating system drivers in Vista use KMDF). That driver installed an older version, and that version is in memory. Because of that, the co-installer can’t upgrade to the version that you require (1.9) without a reboot. It’s just that simple.

This is partly why Microsoft changed the policy, so that each version comes with a KMDF version and sticks with it.

Hi Tim,

I tried to reboot the PC, but still got this error.
How can I keep the “ANOTHER DRIVER” and still install mine ?

Thank you,
Zvika

It should “just work”… as I’m sure you know, versions of KMDF are upwardly compatible. So… the driver using V1.7 should be fine using V1.9 (which is what you’re trying to install).

As to why this doesn’t work… ??? More debugging is clearly in order. But, it should just work.

Peter

Target your driver to KMDF 1.7 and be done with it.

Hi All,

Is it possible to know what is the other driver that needs 1.7 ?
It is not a driver that I developed.

Thank you,
Zvika

Server 2008 shipped with 1.7 included. Therefore if you target 1.7 you’re guaranteed that the framework won’t need to be updated by your installer.

Is it possible to know what is the other driver that needs 1.7 ?

Sure. You can run the kernel debugger. There are commands in the wdfkd extension that can tell you every KMDF driver that is loaded. But what good will that do you? You aren’t going to restart all of those, except by rebooting.

It is not a driver that I developed.

Right. There are now quite a number of standard Microsoft drivers that use KMDF.

Hi All,

makefile.inc contains the following:

`_LNG=$(LANGUAGE)
_INX=.
STAMP=stampinf -f $@ -a $(_BUILDARCH) -k $(KMDF_VERSION_MAJOR).$(KMDF_VERSION_MINOR)

$(OBJ_PATH)$(O)$(INF_NAME).inf: $(_INX)$(INF_NAME).inx
copy $(_INX)$(@B).inx $@
$(STAMP)
`

What is the right way to “target 1.7” ?
Should I search the define KMDF_VERSION_MINOR and set it to 7 ?

If I’m a card’s vendor, does it mean that I should provide few versions (e.g 1.7, 1.9) for a specific card ?

Thank you,
Zvika

SOURCES and Makefile! I haven’t used that in quite a while but I think you need to specify major and minor in your SOURCES:

KMDF_VERSION_MAJOR=1
KMDF_VERSION_MINOR=7

If you don’t need newer Framework features you can ship one driver running 1.7 on all platforms.

If I’m a card’s vendor, does it mean that I should provide few versions (e.g 1.7, 1.9) for a specific card ?

No. You embed the minimum version you need. A driver built to expect 1.7 will work just fine on 1.25. Very, very few drivers need anything newer than 1.7.