Столкнулся с проблемой, что некоторые .inc и .lib файлы из KmdKit не работают на ХР. Может, есть у кого эти файлы? Если нет, то мне нужно знать из каких includ-файлов состоит библиотека ntoskrnl.lib. Спасибо.
Aspire Cтранно почему это они не могут работать на XP? Формат .inc и .lib от версии ОS не зависит. Это о чём?
Booster Это я о том, что библиотечный файл собирается из объектников, которые в свою очередь собираются из инклуд-файлов. Если знать инклуд-файлы, то можно эту библиотеку пересобрать. ))
Aspire Хочешь сказать обратное? К тому же .inc и .lib и не должны работать, работает компилятор и линковщик. Если не собирается, значит проблема в другом. Нужна правильная связка inc и .lib. Great Имея объявы можно сделать тонкую либу. Но если она уже есть, то зачем?
Great Есть такая утилита "lib.exe" в стандартном пакете masm32 с помощью которой и можно собирать библиотеки. Каким образом была собрана библиотека ntoskrnl.lib в KmdKit, я не знаю, но там есть одна функция, где задано ошибочное число параметров. Эта ф-ция из Вашего примера, который Вы мне давали, MmMapIoSpace принимает 3 параметра, в загаловочных файлах KmdKit она описана с 4-мя. Именно в этом проблема.
Вобщем, какая-то шляпа с этой функцией (http://msdn.microsoft.com/en-us/library/ms801998.aspx) В либе от DDK она тоже идет с 4-мя параметрами. Где взять четвертый? :\
ntoskrnl.lib была собрана корпорацией microsoft и без изменений покладена в KmdKit MmMapIoSpace определена правильно. Код (Text): invoke MmMapIoSpace, PHYSICAL_ADDRESS.LowPart, PHYSICAL_ADDRESS.HighPart, NumberOfBytes, CacheType
Booster Да блин )) Я про заголовочные, вообще-то, имел ввиду. Разные структуры в w2k и xp. Соответственно, то драйвер, который собран с инклудами для в2к не будет работать на хр. А не то, что ты подумал.
Будет. И в Vista, 2003/2008 Server тоже будет. Тут работает принцип обратной совместимости. А вот драйвер собранный с инклудами/либами от xp может не работать в w2k. Подчеркиваю, может, но не значит что не будет. Поясню на конкретном примере. Есть функция IoGetLowerDeviceObject. Её добавили в ядро в XP. Если её использовать и собрать драйвер инклудами/либами от xp, то в w2k этот драйвер не будет загружен, т.к. загрузчик не найдет IoGetLowerDeviceObject в ntoskrnl.exe. Если же накатить "Update Rollup for Windows 2000 SP4", то заработает. Разница между инклудами для разных систем микроскопическая, нужно просто её сечь и понимать что к чему.
В структурах EPROCESS для ХР и 2к, например, разница совсем не микроскопическая. И драйвер для ХР не будет работать для 2к и наоборот, как ни крути. Про "сечь и понимать" - это уже в процессе отладки.
А причём тут EPROCESS и инклуды? EPROCESS это недокументированная внутренния структура а в инклудах определены лишь API ядра которые работают с этой структурой