2015-07-23 2 views
0

Я написал простой драйвер потока, чтобы узнать драйверы устройств, поскольку у меня есть только функции DLLEntry, Init и DeInit, а также я экспортировал все функции в файле .def.Устройство xxx_init не получает вызов

Я также добавил настройки реестра для драйвера в HKLM/Drivers/Sample.

Я написал приложение для проверки его работы, где я назвал ActivateDeviceEx следующим путем.

Моя функция DLLntry получает вызов, но функция Init не вызывается. Я использую макросы RETAILMSG для печати отладочной информации.

Я также видел пост 1, где он также сталкивается с такой же вопрос

Но я не понял, что мы должны сделать для того, чтобы работать ...

+0

Вы проверили ответ, указанный в указанном вами сообщении? – spt025

+0

Нет ничего похожего на ответ там. –

ответ

0

Тот факт, что DllEntry вызывается, но Init не указывает на проблему с функцией экспорта. Водитель поток must export at least the following:

  • Init
  • Deinit
  • Открыть
  • Закрыть
  • Read
  • Написать
  • Seek
  • IOControl

Кроме того, если значение Flags в реестре не включает DEVFLAGS_NAKEDENTRIES, каждая функция должна иметь префикс имени устройства, поэтому, если драйвер поддерживает, скажем, XYZ-устройство, функции должны быть названы XYZ_Init, XYZ_Deinit и т. Д.

+0

Я только реализовал Init и DeInit и пытался просто вызвать createFile API из Windows, этого будет недостаточно. Есть ли какое-либо требование, что мы должны реализовать все вышеперечисленные функции в драйвере ... –

+0

Согласно связанной статье, да, это требование, чтобы все эти функции были реализованы. Например, CreateFile требует, чтобы драйвер поддерживал XXX_Open. На самом деле не так много, чтобы добавить ряд однострочных функций, которые просто возвращают значение «success», и это был бы хороший первый шаг к полностью функционирующему драйверу. Функция XXX_Open показывает успех, возвращая ненулевое значение. Для получения дополнительной информации о других функциях проверьте связанную статью MSDN. –