bob
Гость
|
|
« : 08-06-2008 11:23 » |
|
Пытаюсь вызвать функции RtlXxx в процедуре DriverEntry. При подключенном wdm.lib или ntoskrnl.lib линкер ругается, что не нашел __imp__ObReferenceObjectByHandle (unresolved external symbol "__declspec(dllimport) void __stdcall RtlInitAnsiString(struct _STRING *,char const *)" (__imp_?RtlInitAnsiString@@YGXPAU_STRING@@PBD@Z) referenced in function "long __stdcall DriverEntry(struct _DRIVER_OBJECT *,struct _UNICODE_STRING *)" (?DriverEntry@@YGJPAU_DRIVER_OBJECT@@PAU_UNICODE_STRING@@@Z)). ntoskrnl.lib - из windows 2000 DDK. Использую MS Visual Studio 2008 Почему линкер не видит функции? Как это исправить?
|
|
|
Записан
|
|
|
|
DrGluck
|
|
« Ответ #1 : 09-06-2008 05:27 » |
|
В смысле в VS линкер ругается? А BUILDом драйвер собирается?
|
|
|
Записан
|
Good user - dead user
|
|
|
Ochkarik
|
|
« Ответ #2 : 09-06-2008 10:18 » |
|
bob, проверьте свичи компилятора и линкера.
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
bob
Гость
|
|
« Ответ #3 : 10-06-2008 06:12 » |
|
Похоже я понял причину. Как мне кажется все дело в декорировании символов, которое наверно отличается для линкера, входящего в состав 2000 DDK и линкера с++ 2008 студии. Если в wdm.h я объявляю нужные мне функции как extern "C", то все это дело прекрасно линкуется.
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #4 : 10-06-2008 07:26 » |
|
гы) а у вас часом файл не *.cpp?)))) тогда попробуйте его в *.c переименовать;)
PS а трогать руками wdm.h это как бы "дурной тон"...
|
|
« Последнее редактирование: 10-06-2008 07:28 от Ochkarik »
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
bob
Гость
|
|
« Ответ #5 : 10-06-2008 16:08 » |
|
Действительно, меняя расширение с .cpp на .c все связывается номрально без ошибок. Спасибо.
|
|
|
Записан
|
|
|
|
|