according to my understanding:
1.upper filter driver is a device object in the:
“a-FDO’s-Device-obj”.AttachedDevice
2.lower filter driver is a device object in the:
“a-PDO’s-Device-obj”.AttachedDevice
if points 1 and 2 are true:
FDO and PDO are logical concepts.
two drivers cooperate to create a “logical device instance.”
eg. SCSI disk PDO (scsiport.sys) + SCSI disk FDO(disk.sys) = SCSI DISK
Partition Manager is an upper-level filter driver.
Hence it attaches to SCSI DISK FDO(disk.sys).
Here Partition Mngr. is suppose to intercept QDR and pass to volume driver.
Questions>
a. QDR is a pnp function. And thus handled by “a PDO”.
Partition mngr. which has been attached to a FDO will never see it.
How then does it captures?
b. Partition mngr. is suppose to communicate with volume mngr. with “private interface”.
what is a private interface? according to my understanding the only way drivers communicate is via IOCTLS or FSCTLS.
Questions>
a. QDR is a pnp function. And thus handled by “a PDO”.
Partition mngr. which has been attached to a FDO will never see it.
How then does it captures?
Query Device Relations (bus relations) is sent to an FDO (really to the top
device on a stack), effectively making it a bus, and tells the OS the PDO’s
of its children. The OS then sends some PnP irps to query some properties of
the PDO’s, like the device id, and instance id, resource requirements, and
then layers the FDO and filters over the PDO, eventually sending a PnP start
irp to the top of a stack, which propagates down to the PDO.
If I call it correctly , when PartMgr startting up it will call
IoRegisterPlugPlayNotification to register a device interface change
notification , so , if VolMgr come into being PrtMgr will get the
interface.