Не удается открыть источник файл ntddk h
I'm been trying to get into driver development (queue the "don't do that") I have been looking at this msdn page and after installing the WDK (Windows Driver Kit) 10 I am still unable to compile the example that they use on that page.
I have looked at other SO questions but I am unable to find the installed directory of the WDK. When I attempt to run the setup I am greeted by this:
How can I solve this?
Firstly - is the file on your computer - use the search utility to find the ntddk.h file. Generally you need to configure your project to point to the DDK - this is a project configuration. You've not provided a lot of information barring 'the DDK seems to be installed' here.
Sorry, I should've mentioned that searching for the file yields no result. I find this weird since it says the WDK is installed.
I had to manually trawl for the file, but it was in c:\program files (x86)\Windows Kits\10\Include\10.0.10586.0\km . You're probably missing some settings in the example to get it to work
This appears to be a serious problem with the latest WDK. I installed 10.0.14393.0 (fresh) and even creating an empty kernel mode driver project fails to set up the include directories properly. Hand crafting it doesn't seem to help either as it complains about 10.0.14393.0 not being installed. Or have any of you had any luck.
..I think there's something foobared; I tried to install the 10.0.14393.0 Windows SDK (not the WDK) and it failed claiming "insufficient privileges" - and that's running as Admin. Something ain't right I tell you.
ОТВЕТЫ
Ответ 1
Вам нужно добавить путь заголовков WDK к вашим каталогам include vcxproj:
Свойства vcxproj → C/С++ → Общие → Дополнительные каталоги Include
P.S.: Убедитесь, что вы установили SDK 10 вместе с WDK 10.
P.P.S: Без SDK вы получите ошибку Cannot open include file: 'ntdef.h'
Ответ 2
Лучший отвечающий
6 Answers 6
You need to add WDK headers path to your vcxproj include directories:
vcxproj properties -> C/C++ -> General -> Additional Include Directories
P.S.: Make sure you install SDK 10 together with WDK 10.
P.P.S: Without SDK you will get Cannot open include file: 'ntdef.h' error
Solved it by selecting a different "Windows SDK Version" in Visual Studio under Project Properties -> General.
In the directory C:\Program Files (x86)\Windows Kits\10\Include I have 5 folders with Windows SDKs. The newest (10.0.17763.0) did not have a km subfolder. After changing the Windows SDK Version from 10.0.17763.0 to 10.0.17134.0 in Visual Studio the ntddk.h header was found.
Предполагаемая причина
В процессе отладки проблемы оказалось, что (из-за версии SDK) процесс сборки устанавливал $(LastTargetPlatformVersion) в 10.0.10586. Хотя установленный WDK предоставляет необходимые версии файлов сборки только для версии 10.0.14393. Похоже, это несколько задуманное поведение.
Лучший отвечающий
Rule of thumb
When you need to build with the latest (or specific) version of WDK, check that corresponding version of Win SDK is installed.
Ответы
Оказывается, я отстал от жизни :)
Времена сборки драйверов из командной строки уже прошли. Теперь сборка выполняется исключительно из Visual Studio.
- Visual Studio 2015 Community или выше с поддержкой разработки универсальных приложений Windows и языка C++ (по умолчанию в программе установки ВЫКЛЮЧЕНЫ)
- Windows Driver Kit (WDK) версии 10
Что касается Visual, моя версия Visual не предлагает такие проекты, как драйверы. У меня установлена Visual Studio Enterprise 2015 версии 14.0.24720.00 Update 1. Также есть у меня WDK версии 10.
Типы проектов появятся после установки WDK. Убедитесь также, что у Вас установлены следующие компоненты VS:
Все ответы
Лучше спросите у самого человека, который написал данный код на хабре.
После установки WDK в меню Пуск должна появиться группа ярлыков для установки требуемых переменных окружения. Сборка драйвера должна производиться из командной строки, которая откроется запуском одного из этих ярлыков. В соответствии с выбранной версией ОС и ее разрядностью подключится автоматически нужный файл ntddk.h (их в WDK несколько). Искать его вручную не нужно :) Читайте документацию WDK, там подробно описана процедура сборки драйверов. Есть книги на русском языке, посвященные этому вопросу.
Сборка драйвера должна производиться из командной строки, которая откроется запуском одного из этих ярлыков.
Ярлыков там много. Какой именно ярлык нужно запустить, чтобы открыть командную строку, из которой "сборка драйвера должна производиться"?
А где взять документацию по WDK? И какие "книги на русском языке, посвященные этому вопросу" Вы могли бы порекомендовать мне?
Ярлыков много, потому что вариантов сборки может быть несколько. Во-первых, целевая платформа (x86, x64, ARM), во-вторых, конфигурация (Release, Debug). У меня сейчас WDK не установлен, поэтому точно назвать не могу. Если перечислите названия ярлыков и укажете свою систему и разрядность - скажу точно.
Документация либо ставится вместе с WDK, либо интегрируется в документацию Visual Studio. В крайнем случае есть MSDN Library в Интернете.
Пару книг назову завтра, когда доберусь до рабочего места.
Вы ответили только на второй мой вопрос. Как насчет названий ярлыков? И о какой конфигурации Вы пишете? У Вас разве установлена отладочная версия Windows?
- Солдатов В.П. Программирование драйверов Windows - хорошая книга для новичка в разработке драйверов
- П. Орвик, Г. Смит. Windows Driver Foundation: разработка драйверов - книга подробно описывает относительно новую модель Microsoft для построения драйвера в современных версиях Windows
я смогу Вам помочь со вставкой вашего скриншота.
О верификации аккаунта, внимательно изучите аналогичный вопрос
Да, я Жук, три пары лапок и фасеточные глаза :))
Оказывается, я отстал от жизни :)
Времена сборки драйверов из командной строки уже прошли. Теперь сборка выполняется исключительно из Visual Studio.
- Visual Studio 2015 Community или выше с поддержкой разработки универсальных приложений Windows и языка C++ (по умолчанию в программе установки ВЫКЛЮЧЕНЫ)
- Windows Driver Kit (WDK) версии 10
Что касается Visual, моя версия Visual не предлагает такие проекты, как драйверы. У меня установлена Visual Studio Enterprise 2015 версии 14.0.24720.00 Update 1. Также есть у меня WDK версии 10.
И так, по порядку. Для того чтобы собрать драйвер из указанного Вами примера, создаем проект при помощи данного шаблона:
Проект создается почти пустым (исходников нет, один только "недоделанный" INF-файл, который нужен для установки драйвера встроенными средствами Windows).
Добавляем новый файл в проект и вводим исходный код Вашего примера:
Добавленные строки требуются для того чтобы компилятор не "ругался" по поводу неиспользуемых параметров.
Далее, для успешной сборки драйвера, требуется скорректировать имеющийся INF-файл:
И, наконец, выбираем требуемую конфигурацию и разрядность драйвера:
Собираем проект и наблюдаем в выходном каталоге файлы драйвера:
- Предложено в качестве ответа Maksim Marinov Microsoft contingent staff, Moderator 25 января 2016 г. 12:20
Что касается Visual, моя версия Visual не предлагает такие проекты, как драйверы. У меня установлена Visual Studio Enterprise 2015 версии 14.0.24720.00 Update 1. Также есть у меня WDK версии 10.
Типы проектов появятся после установки WDK. Убедитесь также, что у Вас установлены следующие компоненты VS:
Visual не находит эти файлы, хотя они лежат в той же самой папке, то в C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\km.
Поэтому, не собирается драйвер.
Начинается какая-то "сказка про белого бычка" :) Про включаемые файлы WDK я Вам уже говорил еще в самом начале данной темы: вариант включаемого файла выбирается автоматически в соответствии с архитектурой целевой системы драйвера.
Я написал Вам полную инструкцию в картинках, Вы можете ее повторить (без каких-либо изменений)? Если нет, значит есть какая-то ошибка в Ваших действиях.
И это при том, что WDK я скачал из Интернета и УСТАНОВИЛ.
Установку нужно запускать при закрытой (не запущенной) студии. Если не получится, запустите ее через аплет Панели управления "Программы и компоненты".
И, кстати, я надеюсь, что Вы запускаете программу установки именно той версии Visual Studio, которая у Вас уже установлена, а не другую? Помнится, Вы писали, что у Вас Enterprise?
Это может быть, если параллельно запущен установщик другой программы, например каких-либо обновлений Windows. Подождите, пока обновления установятся, потом повторите попытку.
Послушайте, Иван. Честно говоря, это уже "скучно". Если Вы не умеете пользоваться системой, о каких драйверах может идти речь? Мы общаемся уже неделю. Можно было уже 10 раз переустановить не только VS, но всю систему. Считаю, что вопрос данной темы исчерпан. Читайте книги и документацию MSDN. Появятся конкретные вопросы - пишите.
Мне УДАЛОСЬ установить нужные компоненты. Вот какой теперь результат сборки драйвера:
1>------ Rebuild All started: Project: TestDriver, Configuration: Debug Win32 ------
1> Building 'TestDriver' with toolset 'WindowsKernelModeDriver10.0' and the 'Desktop' target platform.
1> Stamping Debug\TestDriver.inf [Version] section with DriverVer=01/29/2016,0.17.17.431
1> TestDriver.c
1> TestDriver.vcxproj -> C:\Users\Lenovo\Documents\Visual Studio 2015\Projects\TestDriver\Debug\TestDriver.sys
1> Done Adding Additional Store
1> Successfully signed: C:\Users\Lenovo\Documents\Visual Studio 2015\Projects\TestDriver\Debug\TestDriver.sys
1>
1> .
1> Signability test failed.
1>
1> Errors:
1> 22.9.7: DriverVer set to a date in the future (postdated DriverVer not allowed) in \testdriver.inf.
1>
1> Warnings:
1> None
1>Debug\inf2catOutput.log : Inf2Cat error -2: "Inf2Cat, signability test failed." Double click to see the tool output.
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========
Suspected cause
In process of debugging the issue it appeared that (because of SDK version) build process was setting $(LatestTargetPlatformVersion) to 10.0.10586. While the installed WDK provides needed versions of build files only for 10.0.14393 version. Looks like this is somewhat intended behavior.
Все ответы
Лучше спросите у самого человека, который написал данный код на хабре.
После установки WDK в меню Пуск должна появиться группа ярлыков для установки требуемых переменных окружения. Сборка драйвера должна производиться из командной строки, которая откроется запуском одного из этих ярлыков. В соответствии с выбранной версией ОС и ее разрядностью подключится автоматически нужный файл ntddk.h (их в WDK несколько). Искать его вручную не нужно :) Читайте документацию WDK, там подробно описана процедура сборки драйверов. Есть книги на русском языке, посвященные этому вопросу.
Сборка драйвера должна производиться из командной строки, которая откроется запуском одного из этих ярлыков.
Ярлыков там много. Какой именно ярлык нужно запустить, чтобы открыть командную строку, из которой "сборка драйвера должна производиться"?
А где взять документацию по WDK? И какие "книги на русском языке, посвященные этому вопросу" Вы могли бы порекомендовать мне?
Ярлыков много, потому что вариантов сборки может быть несколько. Во-первых, целевая платформа (x86, x64, ARM), во-вторых, конфигурация (Release, Debug). У меня сейчас WDK не установлен, поэтому точно назвать не могу. Если перечислите названия ярлыков и укажете свою систему и разрядность - скажу точно.
Документация либо ставится вместе с WDK, либо интегрируется в документацию Visual Studio. В крайнем случае есть MSDN Library в Интернете.
Пару книг назову завтра, когда доберусь до рабочего места.
Вы ответили только на второй мой вопрос. Как насчет названий ярлыков? И о какой конфигурации Вы пишете? У Вас разве установлена отладочная версия Windows?
- Солдатов В.П. Программирование драйверов Windows - хорошая книга для новичка в разработке драйверов
- П. Орвик, Г. Смит. Windows Driver Foundation: разработка драйверов - книга подробно описывает относительно новую модель Microsoft для построения драйвера в современных версиях Windows
я смогу Вам помочь со вставкой вашего скриншота.
О верификации аккаунта, внимательно изучите аналогичный вопрос
Да, я Жук, три пары лапок и фасеточные глаза :))
Оказывается, я отстал от жизни :)
Времена сборки драйверов из командной строки уже прошли. Теперь сборка выполняется исключительно из Visual Studio.
- Visual Studio 2015 Community или выше с поддержкой разработки универсальных приложений Windows и языка C++ (по умолчанию в программе установки ВЫКЛЮЧЕНЫ)
- Windows Driver Kit (WDK) версии 10
Что касается Visual, моя версия Visual не предлагает такие проекты, как драйверы. У меня установлена Visual Studio Enterprise 2015 версии 14.0.24720.00 Update 1. Также есть у меня WDK версии 10.
И так, по порядку. Для того чтобы собрать драйвер из указанного Вами примера, создаем проект при помощи данного шаблона:
Проект создается почти пустым (исходников нет, один только "недоделанный" INF-файл, который нужен для установки драйвера встроенными средствами Windows).
Добавляем новый файл в проект и вводим исходный код Вашего примера:
Добавленные строки требуются для того чтобы компилятор не "ругался" по поводу неиспользуемых параметров.
Далее, для успешной сборки драйвера, требуется скорректировать имеющийся INF-файл:
И, наконец, выбираем требуемую конфигурацию и разрядность драйвера:
Собираем проект и наблюдаем в выходном каталоге файлы драйвера:
- Предложено в качестве ответа Maksim Marinov Microsoft contingent staff, Moderator 25 января 2016 г. 12:20
Что касается Visual, моя версия Visual не предлагает такие проекты, как драйверы. У меня установлена Visual Studio Enterprise 2015 версии 14.0.24720.00 Update 1. Также есть у меня WDK версии 10.
Типы проектов появятся после установки WDK. Убедитесь также, что у Вас установлены следующие компоненты VS:
Visual не находит эти файлы, хотя они лежат в той же самой папке, то в C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\km.
Поэтому, не собирается драйвер.
Начинается какая-то "сказка про белого бычка" :) Про включаемые файлы WDK я Вам уже говорил еще в самом начале данной темы: вариант включаемого файла выбирается автоматически в соответствии с архитектурой целевой системы драйвера.
Я написал Вам полную инструкцию в картинках, Вы можете ее повторить (без каких-либо изменений)? Если нет, значит есть какая-то ошибка в Ваших действиях.
И это при том, что WDK я скачал из Интернета и УСТАНОВИЛ.
Установку нужно запускать при закрытой (не запущенной) студии. Если не получится, запустите ее через аплет Панели управления "Программы и компоненты".
И, кстати, я надеюсь, что Вы запускаете программу установки именно той версии Visual Studio, которая у Вас уже установлена, а не другую? Помнится, Вы писали, что у Вас Enterprise?
Это может быть, если параллельно запущен установщик другой программы, например каких-либо обновлений Windows. Подождите, пока обновления установятся, потом повторите попытку.
Послушайте, Иван. Честно говоря, это уже "скучно". Если Вы не умеете пользоваться системой, о каких драйверах может идти речь? Мы общаемся уже неделю. Можно было уже 10 раз переустановить не только VS, но всю систему. Считаю, что вопрос данной темы исчерпан. Читайте книги и документацию MSDN. Появятся конкретные вопросы - пишите.
Мне УДАЛОСЬ установить нужные компоненты. Вот какой теперь результат сборки драйвера:
1>------ Rebuild All started: Project: TestDriver, Configuration: Debug Win32 ------
1> Building 'TestDriver' with toolset 'WindowsKernelModeDriver10.0' and the 'Desktop' target platform.
1> Stamping Debug\TestDriver.inf [Version] section with DriverVer=01/29/2016,0.17.17.431
1> TestDriver.c
1> TestDriver.vcxproj -> C:\Users\Lenovo\Documents\Visual Studio 2015\Projects\TestDriver\Debug\TestDriver.sys
1> Done Adding Additional Store
1> Successfully signed: C:\Users\Lenovo\Documents\Visual Studio 2015\Projects\TestDriver\Debug\TestDriver.sys
1>
1> .
1> Signability test failed.
1>
1> Errors:
1> 22.9.7: DriverVer set to a date in the future (postdated DriverVer not allowed) in \testdriver.inf.
1>
1> Warnings:
1> None
1>Debug\inf2catOutput.log : Inf2Cat error -2: "Inf2Cat, signability test failed." Double click to see the tool output.
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========
Приносим извинения. Запрошенное содержимое было удалено. Вы будете автоматически перенаправлены через 1 секунду.
Вопрос
Сразу уточню, что операционная система у меня Windows 10.
Мое дело
В моем случае это было связано с разными версиями Win SDK и WDK . У меня были SDK 10.0.10586 и WDK 10.0.14393. Установка SDK 10.0.14393 решила проблему для меня.
Примечание
Win SDK устанавливается с макетом по умолчанию VS2015, но по какой-то причине он не получает обновлений в процессе обновлений VS.
Решил это, выбрав другую «версию Windows SDK» в Visual Studio в разделе «Свойства проекта» -> «Общие».
В каталоге C:\Program Files (x86)\Windows Kits\10\Include у меня 5 папок с Windows SDK. Самый новый (10.0.17763.0) не имел km подпапки. После изменения версии Windows SDK с 10.0.17763.0 на 10.0.17134.0 в Visual Studio ntddk.h заголовок был найден.
Существует макрос $ (DDK_INC_PATH), который можно добавить для включения каталогов вашего проекта (свойства vcxproj -> Каталоги VC ++ -> Включить каталоги)
как у этого макроса фокусировка? В моем случае я заметил, что он указывал на версию, в которой не было подпапки KM
Я тоже столкнулся с подобной проблемой. Ниже сработало для меня:
Шаг 1. Информация о целевой платформе Windows, для которой вы собираетесь разработать драйвер. Вы можете проверить версию Windows в своей системе, перейдя в Настройки-> Система-> О программе-> Спецификация Windows.
Шаг 2. Убедитесь, что вы установили совместимые «Windows SDK» и «WinSDK», соответствующие целевой версии платформы Windows.
Шаг 3 : Убедитесь, что «ntddk.h» существует в $ (DDK_INC_PATH). Этот макрос препроцессора обычно оценивается как «C: \ Program Files (x86) \ Windows Kits \ 10 \ Include \\ km». Если вы не видите папку «km», внимательно следуйте ссылкам, указанным в шаге 2 выше.
Шаг 4 : Убедитесь, что свойства проекта -> Свойства конфигурации -> Общие -> Набор инструментов платформы использует "WindowsKernelModeDriver".
Я пытаюсь войти в развитие драйвера (очередь "не делай этого" ) Я смотрел эту страницу msdn и после установки WDK (драйвер Windows Kit) 10 Я все еще не могу скомпилировать пример, который они используют на этой странице.
Я рассмотрел другие вопросы SO, но я не могу найти установленный каталог WDK. Когда я пытаюсь запустить настройку, меня приветствует следующее:
Как я могу это решить?
Мой случай
В моем случае это было связано с различными версиями Win SDK и WDK. У меня был SDK 10.0.10586 и WDK 10.0.14393. Установка SDK 10.0.14393 решила проблему для меня.
Боковое примечание
Win SDK устанавливается с компоновкой по умолчанию VS2015, но по какой-то причине он не получает обновления в процессе обновления VS.
Ответ 3
Существует макрос $ (DDK_INC_PATH), который можно добавить для включения каталогов вашего проекта (свойства vcxproj → VC++ Каталоги → Включить каталоги)
Ответ 4
Решил ее, выбрав другую "версию Windows SDK" в Visual Studio в разделе "Свойства проекта" → "Общие".
В каталоге C:\Program Files (x86)\Windows Kits\10\Include меня есть 5 папок с Windows SDK. В новейшей версии (10.0.17763.0) не было подпапки km . После изменения версии Windows SDK с 10.0.17763.0 на 10.0.17134.0 в Visual Studio был найден заголовок ntddk.h .
My case
In my case it was due to different versions of Win SDK and WDK. I had SDK 10.0.10586 and WDK 10.0.14393. Installing SDK 10.0.14393 solved the issue for me.
Side note
Win SDK gets installed with default layout of VS2015, but for some reason it doesn't get updates in process of VS updates.
There is a macros $(DDK_INC_PATH) that can be added to include directories of your project (vcxproj properties -> VC++ Directories -> Include Directories)
how is this macro focusing? I noticed in my case, that it was pointing to a version which did not have the subfolder KM
I also faced the similar problem. Below worked for me:
Step 1: Aware of Targeted Windows Platform for which you are going to develop driver. You can check 'Windows Version' on your system by looking at Settings->System->About->Windows Specification
Step 2: Make sure you install compatible "Windows SDK" and "WinSDK" matchingto targeted windows platform version.
Step 3: Verify "ntddk.h" exists at $(DDK_INC_PATH). This pre-processor macro typically evaluates to "C:\Program Files (x86)\Windows Kits\10\Include\\km". If you do not see 'km' folder then carefully follow the links mentioned in step 2 above.
Step 4: Verify Project Properties -> Configuration Properties -> General -> Platform Toolset is using "WindowsKernelModeDriver" .
Я пытался заняться разработкой драйверов (очередь «не делайте этого»). Я смотрел эту страницу msdn, и после установки WDK (Windows Driver Kit) 10 я все еще не могу скомпилировать пример, что они использовать на этой странице.
Я просмотрел другие вопросы SO, но не могу найти установленный каталог WDK. Когда я пытаюсь запустить установку, меня приветствует следующее:
Как я могу это решить?
Во-первых - это файл на вашем компьютере - воспользуйтесь утилитой поиска, чтобы найти ntddk.h файл. Обычно вам нужно настроить свой проект так, чтобы он указывал на DDK - это конфигурация проекта. Вы не предоставили здесь много информации, кроме «похоже, что DDK установлен».
Извините, я должен был упомянуть, что поиск файла не дал результата. Я нахожу это странным, поскольку в нем говорится, что WDK установлен.
Мне пришлось вручную искать файл, но он был в формате c:\program files (x86)\Windows Kits\10\Include\10.0.10586.0\km . Вероятно, вам не хватает некоторых настроек в примере, чтобы заставить его работать
Похоже, это серьезная проблема с последней версией WDK. Я установил 10.0.14393.0 (свежий), и даже создание пустого проекта драйвера режима ядра не позволяет правильно настроить подключаемые каталоги. Ручная работа, похоже, тоже не помогает, так как жалуется, что 10.0.14393.0 не устанавливается . Или кому-нибудь из вас повезло .
.. Я думаю, что здесь что-то пошло наперекосяк; Я попытался установить Windows SDK 10.0.14393.0 (не WDK), и он не смог заявить о «недостаточных привилегиях» - и он работает как администратор. Что-то не так, говорю вам .
Вам нужно добавить путь заголовков WDK к вашим каталогам включения vcxproj: свойства vcxproj -> C / C ++ -> Общие -> Дополнительные каталоги
включения
PS: Убедитесь, что вы устанавливаете SDK 10 вместе с WDK 10.
PPS: Без SDK вы получите Cannot open include file: 'ntdef.h' ошибку
Практическое правило
Если вам нужно выполнить сборку с использованием последней (или конкретной) версии WDK, убедитесь, что установлена соответствующая версия Win SDK.
Правило большого пальца
Когда вам нужно создать последнюю (или конкретную) версию WDK, убедитесь, что установлена соответствующая версия Win SDK.
Ответы
Оказывается, я отстал от жизни :)
Времена сборки драйверов из командной строки уже прошли. Теперь сборка выполняется исключительно из Visual Studio.
- Visual Studio 2015 Community или выше с поддержкой разработки универсальных приложений Windows и языка C++ (по умолчанию в программе установки ВЫКЛЮЧЕНЫ)
- Windows Driver Kit (WDK) версии 10
Что касается Visual, моя версия Visual не предлагает такие проекты, как драйверы. У меня установлена Visual Studio Enterprise 2015 версии 14.0.24720.00 Update 1. Также есть у меня WDK версии 10.
Типы проектов появятся после установки WDK. Убедитесь также, что у Вас установлены следующие компоненты VS:
Предполагаемая причина
В процессе отладки проблемы выяснилось, что (из-за версии SDK) процесс сборки устанавливал для $ (LatestTargetPlatformVersion) значение 10.0.10586. В то время как установленный WDK предоставляет необходимые версии файлов сборки только для версии 10.0.14393. Похоже, это несколько преднамеренное поведение.
Вопрос
Сразу уточню, что операционная система у меня Windows 10.
Читайте также: