Добрый день, товарищи. Столкнулся с такой проблемой под Windows 7 x64: есть 2 драйвера - один из которых (Drv1) экспортирует функцию (назовем ее Func()), а второй (Drv2) ее соотвественно импортирует. Под XP x86 все замечательно работает - прогружаем Drv2, автоматически подгружается Drv1 (или сначала прогружаем Drv1, а после Drv2). Под Windows 7 x64 ситуация такая: инсталляция и запуск Drv1 происходят корректно, инсталляция Drv2 - тоже, а при запуске Drv2 выдается следующее: An instance of the service is already running. При этом, если сначала стартануть Drv2, то он ругнется приведенной фразой, а если после этого стартовать Drv1, будет идентичная ругань. При этом данные драйвера вроде бы не присутствуют в системе - по крайней мере нет ни сообщений в DbgView, ни отображения в списке тулзы DriverView. Инсталляцию и запуск делаю с помощью sc в тестовых целях. Драйвера в принципе заглушечные - только DriverEntry() с Unload() и некоторый отладочный вывод. Инсталляция - sc create Drvx type= kernel binPath= c:\Drvx.sys. Запуск - sc start Drvx. Знает ли кто, в чем может быть дело?
Добавка: дело именно в импортировании, как только комменчу вызов испортируемой функции или глушу ее в коде Drv2 - все загружается как надо.
Переформулирую и немного конкретизирую вопрос: возможно ли взаимодействие драйверов через стандартный импорт-экспорт функций в Windows 7 x64, и, если да, то отчего могут возникать приведенные выше ошибки? Или же получение адресов функций драйвера возможно только через вызов специального IOCTL у оного с возвратом от него таблицы адресов экспортируемых им функций?
Оказалось, дело было в слишком малом выравнивании - оно явно выставлялось равным 0x20 и для SectionAlignment, и для FileAlignment. Выставление выравнивания в значения по умолчанию (0x1000 и 0x200) решило проблему. Видимо, либо с 64-разрядных ОС, либо именно с Windows7 x64 такое выравнивание для драйверов недопустимо. Что удивило так это страннейший статус, выдаваемый sc, на который, как показала практика, нужно было просто забить. Товарищи админы, закройте, пожалуйста, тему.