Как известно, IoAttachDeviceToDeviceStack цепляет девайс к последнему attached device. А есть ли цивилизованный (т.е. через API) способ присоеденится первым? Или только "ручками"?
кто есть первый в твоем понимании? Драйвер шины, функциональный или фильтрующий драйвера? И с какой стороны? Со стороны IRP, например, драйвер шины последним получаем пакет. =)
На Win2k3 такого способа нет, думаю, что на более поздних системах тоже нет. Но могу предложить "варварский" метод: вписываем свои обработчики в DeviceObject->DriverObject->MajorFunction[IRP_MJ_XXX]. Если хочется обрабатывать завершение IRP'ов, то нужно не забыть инкрементировать DeviceObject->StackSize, захватив при этом нужный SpinLock: Код (Text): KIRQL irql = KeAcquireQueuedSpinLock(LockQueueIoDatabaseLock).