Keyboard filter driver HCK signing requirement.

Hi All,
Is there a requirement from Microsoft that the a keyboard filter driver must be a KMDF based in order to get it HCK certified?
If yes, can some one point me to some material on this please? Thanks.

And, can the upper filter driver for keyboard class can be installed without rebooting the computer? I guess not. Correct?

Correct. Filter drivers can only be added when a device is starting up. However, you don’t have to reboot; you can disable/enable the device in Device Manager, or use “devcon restart”.

Thanks Tim.

I am aware that the keyboard class filter is installed for all keyboards. Ie, USB/BT and PS2 etc. ie, the filter would be sitting on top of the PS2 stack as well. PS2 stack by design cannot be disabled/enabled. Given this, how do I get this filter driver signed? We know that the HLK tests would pound the driver stack with a sequence of disable enable operation which the PS2 won’t be able to handle.

Can a keyboard class upper filter driver -that is installed using an inf- pass the HCK certification?
If yes, what class does this test fall into? It appears that the input class doesn’t really cover the keyboard/mouse class filter stack.
And, is there a requirement from Microsoft that the a keyboard filter driver must be a KMDF based in order to get it HCK certified?
Thanks.

WHQL tests devices. Your keyboard/mouse filter is part of an input device. That’s the class.

You aren’t going to have any PS/2 drivers unless you have a PS/2 device. And you don’t have to restart EVERY device – just the one you want to test.

Why do you think Microsoft requires keyboard filters to be KMDF? Unless you find it in a document, it’s just a rumor. I doubt they would care.

About restarting the device stack: My filter will be a keyboard class upper filter, not specific to a particular device, so it would be on top of a PS2 device if there is one present on the computer. Does the WHQL tests treat the PS2 stack differently to accommodate the disable/enable kind of PNP tests?

About the keyboard filters to be KMDF: Doron Holan has said “IIRC, I am pretty darn sure that all input drivers, filters and functional, must be KMDF to get signed”, in this thread https://community.osr.com/discussion/149218/keyboard-class-filter-drivers-and-whql

However, I couldn’t find any reference from Microsoft on this. Thus I would like to get some clarity on this.

The architecture constraints, if any, are in the Windows logo docs. This is the doc that you need to look at to know, for example what types of operations you need to support and the like.

Peter

To follow-up my own post, you can find the relevant docs here.

Device.Input.Keyboard.KernelModeDriversUseWdfKmdf
Keyboard kernel-mode drivers must use the WDF-KMDF.
Description
Third-party keyboard kernel-mode drivers must be ported to the WDF KMDF model.

Peter

About restarting the device stack: My filter will be a keyboard class upper filter, not specific to a particular device, so it would be
on top of a PS2 device if there is one present on the computer. Does the WHQL tests treat the PS2 stack differently to
accommodate the disable/enable kind of PNP tests?

I don’t understand why you’re worrying about this. If your test system does not have a PS/2 device, and very few do, then the situation will not arise. WHQL tests specific devices. It doesn’t test “class filters”, it tests specific devices that happen to have your filter installed. It does not (can not) test every combination that can possibly arise.

My filter is a keyboard class upper filter for all keyboards on the system, not specific to a particular device. Thus the INF will not be for a specific device. That’s why I would like to get some clarity on this.

Following Microsoft article shows such a class driver is possible.
https://docs.microsoft.com/en-us/windows-hardware/drivers/install/installing-a-filter-driver

If WHQL can only test a device, how do I get such a class filter driver WHQL certified? Can it even be WHQL tested for that matter?

Of course a class filter driver is possible, but all that affects is what triggers the driver to be loaded. Remember, you will get a separate instance of your driver for each device in the class. Each such device stands alone.

A class filter driver doesn’t work any different than a device filter driver, and WHQL doesn’t know the difference. All you’re trying to do is get a successful WHQL log for a device for which your filter is loaded. That’s all it takes to pass. You don’t have to demonstrate filtering EVERY kind of device, and there are no tests that are specific to class filters.