Теперь я изучаю API-интерфейс Windows, методы Nt*/Zw*
. Я загрузил WDK, установил его и успешно скомпилировал приложение (x64, под Win 8.1 x64, VS2013). Единственное, что он делает, это позвонить в NtOpenFile()
.Windows native development: debuggee пытается загрузить werkernel.sys из system32
Для успешной компиляции/связать его, я должен был сделать следующие изменения проекта свойств (шаблон приложения для водителей):
- Добавить включает в себя папку из WDK
- Добавить папку Lib из WDK
- Скажите компоновщик использовать ntoskrnl.lib
неожиданно, при запуске отладчика, я представил с сообщением об ошибке «программа не может начаться, потому что C: \ Windows \ System32 \ werkernel.sy s отсутствует на вашем компьютере. Попробуйте переустановить программу, чтобы устранить эту проблему « В werkernel.sys, очевидно, существует в system32 \ Drivers
EDIT:... Чтобы было ясно, упомянутая ошибка возникает также при запуске приложения, дважды щелкнув значок
Эта нагрузка происходит до того, как мой код, я ничего не могу найти где-нибудь в Интернете, ни в свойствах проекта на файл в вопросе так, чтобы подвести итог, у меня есть следующие вопросы до сих пор:.
- Почему werkernel.sys загружается вообще для моего приложения?
- Почему он загружается с системы32?
Я понимаю, что это возможно mklink werkernel.sys drivers\werkernel.sys
, но похоже, что я делаю что-то ужасно неправильно.
Я использую Visual Studio. У меня есть другое приложение (в C#), которое использует NtQueryDirectoryInformationFile() - и там все работает нормально, поэтому я не ожидал никаких проблем с кодом на C++. На самом деле я хочу использовать NtOpenFile в этом приложении C#, но я застрял с ответом 0xc000000d от NtCreateFile, поэтому решил поиграть с ним с помощью WDK, чтобы увидеть, что я делаю неправильно на управляемой стороне. –
Какова опция/SUBSYSTEM, установленная на? (Свойства проекта, в Linker, System, Subsystem.) Кроме того, вы попытались использовать [ntdll.lib как задокументировано] (https://msdn.microsoft.com/en-us/library/bb432381%28v=vs.85% 29.aspx), а не ntoskrnl.lib? –
Да, это сработало. Спасибо! Как я писал ниже, меня смутила общая страница «прокси» для перенаправления NtCreateFile на ZwCreateFile. Кажется, что там, где Zw * говорит, что нужно подключить ntoskrnl.lib, на самом деле для NT * -функций нужно связать ntdll.lib. –