При любой попытке хоть что-то поставить в тело функции вся система рухнет в синий экран. Кто-нибудь с этим сталкивался?
SYSTEM_THREAD_EXCEPTION_NOT_HANDLED Годал на адресе исключения, звёзды сказали что у тебя не XPSP2, не XPSP3, не Vista, не Win2k8.
SysProger Ну AddDevice обычная CALLBACK-функция, которую вызывает PNP Manager при обнаружении PDO нового устройства. Если вы в AddDevice сбрасываете флаг DO_DEVICE_INITIALIZING после вызова IoAttachDeviceToDeviceStack, то в стек устройств уже могут проходить IRP-пакеты и диспетчерские функции могут зафейлить. А так, давайте код драйвера, так в слепую ничего не скажешь. Clerk Почему? В этой области не может быть драйверов?
Osen Знаком адрес 0x804D7000 ? Моё любимое число, так это адрес загрузки ядра, исключение в ядре происходит, либо бсод врёт. А в тех 4-х ядрах это указатель не на начало инструкции, значит либо ядро другое либо адрес неверный.
Clerk О, спасибо, что просвятил. Ну тогда может быть из-за AddDevice произошел переход на этот адрес, а т.к. это середина инструкции, то будет исключение. Тогда можно предположить, что в той же AddDevice или DispatchXxx используется вызов функции с неправильной конвенцией вызова, что приводит после RET переход по левому адресу.
Проблему с неправильным запуском AddDevice я уже решил. Тут вот созрела другая проблема: я пишу драйвер класса "Sample" для несуществующего устройства. Проблема в том, что функция IoAttachDeviceToDeviceStack в AddDevice не работает из-за pdo. Этот pdo должен быть как-то определён в классе Sample? Также из-за pdo не пашет IoRegisterDeviceInterface. Эта функция тоже использует pdo. Символическую ссылку она создаёт, но обратиться по ней к устройству невозможно.