Hello everyone
I am writing a WDM bus driver (root enumerated) from scratch for learning
purposes and mainly to see the flow PNP Irps in the whole stack. The bus
driver creates a child PDO in it’s IRP_MN_START_DEVICE handler, calls
IoInvalidateDeviceRelations() and reports it on receiving
IRP_MN_QUERY_DEVICE_RELATIONS (BusRelations). There after I am handling the
subsquent IRPs for the child PDO as per DDK but i still don’t get the
“Found New Hardware” pop up and not asked for installing a function driver.
The pdo doesn’t show up in the Device Manager under “other devices”. To my
knowledge I have handled all the “must handle” IRPs for the PDO in the
correct way as per DDK. I can’t figure out what I could possibly be
missing. Checking through Windbg, the devnode for the PDO is being created
with final state as initialized. The bus driver stops getting IRPs after
sometime.
Here are the DbgPrint logs:
BUS DRIVER: Entering DriverEntry
BUS DRIVER: Exiting DriverEntry
BUS DRIVER: Entering MyBus_AddDevice
BUS DRIVER: MyBus_AddDevice Bus’s Physical Device Object : 0x8A498F10
BUS DRIVER: MyBus_AddDevice Bus FDO’s LowerDeviceObject : 0x8A498F10
BUS DRIVER: MyBus_AddDevice Bus’s FDO : 0x89882EF0
BUS DRIVER: Exiting MyBus_AddDevice
Break instruction exception - code 80000003 (first chance)
bus!MyBus_AddDevice+0x11e:
b49ca63e cc int 3
1: kd> g
BUS DRIVER: Entering DispatchPnP
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x1b
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x18
BUS DRIVER: Entering FdoDispatchPnP
BUS DRIVER: Exiting FdoDispatchPnP
BUS DRIVER: Exiting DispatchPnP
BUS DRIVER: Entering DispatchPnP
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x1b
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0xd
BUS DRIVER: Entering FdoDispatchPnP
BUS DRIVER: FdoDispatchPnP: FDO_IRP_MN_FILTER_RESOURCE_REQUIREMENTS
BUS DRIVER: Exiting FdoDispatchPnP
BUS DRIVER: Exiting DispatchPnP
BUS DRIVER: Entering DispatchPnP
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x1b
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x0
BUS DRIVER: Entering FdoDispatchPnP
BUS DRIVER: FdoDispatchPnP: FDO_IRP_MN_START_DEVICE
BUS DRIVER: Entering ForwardAndWait
BUS DRIVER: Entering ForwardAndWaitCompletionRoutine
BUS DRIVER: Exiting ForwardAndWaitCompletionRoutine
BUS DRIVER: FdoDispatchPnP: ForwardAndWait ReturnVal 0x0
BUS DRIVER: Entering CreateChildPdo
BUS DRIVER: CreateChildPdo: ChildPdo Address: 0x8993e2d0
BUS DRIVER: Exiting CreateChildPdo
BUS DRIVER: Exiting DispatchPnP
BUS DRIVER: Entering DispatchPnP
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x1b
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x13
BUS DRIVER: Entering FdoDispatchPnP
BUS DRIVER: FdoDispatchPnP: FDO_IRP_MN_QUERY_ID
BUS DRIVER: Exiting FdoDispatchPnP
BUS DRIVER: Exiting DispatchPnP
BUS DRIVER: Entering DispatchPnP
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x1b
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x13
BUS DRIVER: Entering FdoDispatchPnP
BUS DRIVER: FdoDispatchPnP: FDO_IRP_MN_QUERY_ID
BUS DRIVER: Exiting FdoDispatchPnP
BUS DRIVER: Exiting DispatchPnP
BUS DRIVER: Entering DispatchPnP
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x1b
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x9
BUS DRIVER: Entering FdoDispatchPnP
BUS DRIVER: FdoDispatchPnP: FDO_IRP_MN_QUERY_CAPABILITIES
BUS DRIVER: Exiting FdoDispatchPnP
BUS DRIVER: Exiting DispatchPnP
BUS DRIVER: Entering DispatchPnP
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x1b
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x14
BUS DRIVER: Entering FdoDispatchPnP
BUS DRIVER: FdoDispatchPnP: FDO_IRP_MN_QUERY_PNP_DEVICE_STATE
BUS DRIVER: Exiting FdoDispatchPnP
BUS DRIVER: Exiting DispatchPnP
BUS DRIVER: Entering DispatchPnP
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x1b
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x7
BUS DRIVER: Entering FdoDispatchPnP
BUS DRIVER: FdoDispatchPnP: FDO_IRP_MN_QUERY_DEVICE_RELATIONS
BUS DRIVER: FdoDispatchPnP: ChildPdo Count: 0x1
BUS DRIVER: FdoDispatchPnP: ChildPdo Address: 0x8993e2d0
BUS DRIVER: Exiting FdoDispatchPnP
BUS DRIVER: Exiting DispatchPnP
BUS DRIVER: Entering DispatchPnP
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x1b
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x13
BUS DRIVER: Entering PdoDispatchPnP
BUS DRIVER: PdoDispatchPnP: PDO_IRP_MN_QUERY_ID
BUS DRIVER: PdoDispatchPnP: Device ID Sent: Bond\MyDevice_007
BUS DRIVER: Exiting PdoDispatchPnP
BUS DRIVER: Exiting DispatchPnP
BUS DRIVER: Entering DispatchPnP
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x1b
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x9
BUS DRIVER: Entering PdoDispatchPnP
BUS DRIVER: PdoDispatchPnP: PDO_IRP_MN_QUERY_CAPABILITIES
BUS DRIVER: Entering BusPdo_QueryCapabilitiesHandler
BUS DRIVER: Exiting BusPdo_QueryCapabilitiesHandler
BUS DRIVER: Exiting PdoDispatchPnP
BUS DRIVER: Exiting DispatchPnP
BUS DRIVER: Entering DispatchPnP
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x1b
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0xc
BUS DRIVER: Entering PdoDispatchPnP
BUS DRIVER: PdoDispatchPnP: PDO_IRP_MN_QUERY_DEVICE_TEXT
BUS DRIVER: PdoDispatchPnP: Device Text Sent: My Poor Lil Fake Device
BUS DRIVER: Exiting PdoDispatchPnP
BUS DRIVER: Exiting DispatchPnP
BUS DRIVER: Entering DispatchPnP
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x1b
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0xc
BUS DRIVER: Entering PdoDispatchPnP
BUS DRIVER: PdoDispatchPnP: PDO_IRP_MN_QUERY_DEVICE_TEXT
BUS DRIVER: Exiting PdoDispatchPnP
BUS DRIVER: Exiting DispatchPnP
BUS DRIVER: Entering DispatchPnP
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x1b
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x13
BUS DRIVER: Entering PdoDispatchPnP
BUS DRIVER: PdoDispatchPnP: PDO_IRP_MN_QUERY_ID
BUS DRIVER: PdoDispatchPnP: Device ID Sent: Bond\MyDevice_007_1
BUS DRIVER: Exiting PdoDispatchPnP
BUS DRIVER: Exiting DispatchPnP
BUS DRIVER: Entering DispatchPnP
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x1b
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x13
BUS DRIVER: Entering PdoDispatchPnP
BUS DRIVER: PdoDispatchPnP: PDO_IRP_MN_QUERY_ID
BUS DRIVER: PdoDispatchPnP: Device ID Sent: Bond\MyDevice_007
BUS DRIVER: Exiting PdoDispatchPnP
BUS DRIVER: Exiting DispatchPnP
BUS DRIVER: Entering DispatchPnP
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x1b
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x13
BUS DRIVER: Entering PdoDispatchPnP
BUS DRIVER: PdoDispatchPnP: PDO_IRP_MN_QUERY_ID
BUS DRIVER: PdoDispatchPnP: Device ID Sent: Bond\CompMyDevice_007
BUS DRIVER: Exiting PdoDispatchPnP
BUS DRIVER: Exiting DispatchPnP
BUS DRIVER: Entering DispatchPnP
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x1b
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0xb
BUS DRIVER: Entering PdoDispatchPnP
BUS DRIVER: PdoDispatchPnP: PDO_IRP_MN_QUERY_RESOURCE_REQUIREMENTS
BUS DRIVER: Exiting PdoDispatchPnP
BUS DRIVER: Exiting DispatchPnP
BUS DRIVER: Entering DispatchPnP
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x1b
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x15
BUS DRIVER: Entering PdoDispatchPnP
BUS DRIVER: PdoDispatchPnP: PDO_IRP_MN_QUERY_BUS_INFORMATION
BUS DRIVER: Entering BusPdo_QueryBusInformationHandler
BUS DRIVER: Exiting BusPdo_QueryBusInformationHandler
BUS DRIVER: Exiting PdoDispatchPnP
BUS DRIVER: Exiting DispatchPnP
BUS DRIVER: Entering DispatchPnP
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x1b
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0xa
BUS DRIVER: Entering PdoDispatchPnP
BUS DRIVER: PdoDispatchPnP: PDO_IRP_MN_QUERY_RESOURCES
BUS DRIVER: Exiting PdoDispatchPnP
BUS DRIVER: Exiting DispatchPnP
BUS DRIVER: Entering DispatchPnP
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x1b
BUS DRIVER: DispatchPnP : IRP MajorFunction = 0x7
BUS DRIVER: Entering FdoDispatchPnP
BUS DRIVER: FdoDispatchPnP: FDO_IRP_MN_QUERY_DEVICE_RELATIONS
BUS DRIVER: FdoDispatchPnP: ChildPdo Count: 0x1
BUS DRIVER: FdoDispatchPnP: ChildPdo Address: 0x8993e2d0
BUS DRIVER: Exiting FdoDispatchPnP
BUS DRIVER: Exiting DispatchPnP
Kindly suggest as to what is not being handled correctly.
P.S. I know many have suggested to write a bus driver using kmdf but I want
to do it in WDM just for learning purposes.
Thanks