Bus Filter Driver & Verifier Problem

We are writing a PCI bus filter. The purpose of the filter is to extract
proprietary information from some of the PDOs the PCI bus driver reports.
We are seeing a strange behavior when running with driver verifier
enabled.

Without verifier our filter receives various IRP_MN_QUERY_DEVICE_RELATIONS

  • Busrelations IRPs (at least once for each PCI bridge in the system). The
    bus driver reports all the devices, we determine if the device if of
    interest to us and extract the information.
    That all works fine and without problems.

With verifier enabled our filter DOES NOT get the
IRP_MN_QUERY_DEVICE_RELATIONS - Busrelations IRPs??? Our whole scheme does
not work anymore. The code that determines if the device reported is of
interest and that extract the information is not executed, hence verifier
is useless.
We have tried to create the Busrelation IRPs and send them down in our
filter, but they come back with STATUS_NOT_SUPPORTED.

We don’t like to ship a driver on a server system that has not been tested
with verifier!!

Has someone seen this?
Is verifier blocking the IRPs and why?
Any ideas would be helpful.

Thanks
Gernot Seidler
Vibren Technologies, Inc.

(1) With Driver Verifier enabled look at the Driver Stack with !drvobj and
the all the device objects stack with !devobj. Make sure you are in the
stack correctly.

(2) Did you make sure you are using IoAttachDeviceToDeviceStack() to
connect to the Device Stack correctly.

(3) Also the Bus FDO should report the PDOs attached and call the Lower
Driver. The Lower Driver can then add to the list if needed.
You then return success.