Разбираю пример из DDK toaster и не могу понять на каком этапе система определяет какой дальше драйвер в стеке подгружать. То есть у меня есть драйвер шины, который по запросу создает новый PDO. Так вот, как система определяет какие функциональные драйверы цепляются далее? На примере: Как я понимаю, функциональный драйвер pciIde обнаруживает новое устройство storage. Создает для него PDO-драйвер и посылает IoInvalidateDeviceRelations. Дальше система опрашивает функциональные драйверы на наличие изменений и, если таковые имеются, то начинает работать с созданными PDO (посылает различные IRP_MN_QUERY_CAPABILITIES и т.д.). Я правильно все понимаю? А вот как система понимает, что к этому PDO в стек надо вешать disk, на disk - partmgr? Это тоже узнается через один из IRP_MN_QUERY_... или как?
Эта информация содержится в реестре. Кое-что можно узнать здесь http://www.wasm.ru/print.php?article=drvw2k15 Конкретно для твоего случая - \\\Реестр\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E967-E325-11CE-BFC1-08002BE10318}\
Спасибо, статья немного разъяснила дело. Однако все равно до конца не ясно. Получается, что система черпает информацию из inf файла. Получается, что если я пропишу в inf-файле: Class = DiskDrive ClassGUID = {4D36E967-E325-11CE-BFC1-08002BE10318} то драйвер шины создаст PDO, система к PDO сама добавит в стек disk и т.д.? Также в статье сказано, что система смотрит на параметр Service и по нему загружает соответствующий сервис. А где в inf-файле прописывается этот параметр. Так и писать service = disk?
Прочитай все статьи http://www.wasm.ru/series.php?sid=9. Там узнаешь про сервисы и много другого полезного.
IRP_MJ_PNP.IRP_MN_QUERY_ID IRP_MJ_PNP.IRP_MN_QUERY_TEXT или как там они правильно называются... Данные, которые положишь по этим запросам и лягут в реестр. Я так диски делал.
ams007 Понимаю, что весьма самонадеянно, но не мог бы ты исходничек кинуть. Очень интересно посмотреть..