I realized that in my existing audio driver, I'm already intercepting
*IRP_MJ_PNP* requests by doing the following in *DriverEntry*:
pDriverObject->MajorFunction[IRP_MJ_PNP] = DispatchPnp;
...so, I can intercept *IRP_MJ_WRITE*, *IRP_MJ_DEVICE_CONTROL*, etc, the same way. For any requests I don't want to handle, I can call *PcDispatchIrp*.
One thing I don't understand: if my driver supports both *KSCATEGORY_AUDIO* and a custom Device Interface, how do I tell which *IRP_MJ_XXXXXX* requests are for my custom interface and which just get forwarded to PortCls?