Использование компилятора VS и компоновщика для сборки драйверов Windows - PullRequest
2 голосов
/ 17 марта 2011

Когда я возвращаюсь к теме использования компилятора и компоновщика Visual Studio для создания драйверов Windows, мне приходят в голову две вещи:

  • Официально не поддерживается. Действительно, во всем Интернете существует единодушное мнение о том, что правильный способ создания драйверов Windows - это использование компилятора, компоновщика и инструмента BUILD, включенного в набор драйверов Windows.Однако Visual Studio 2008 включает параметр компоновщика / DRIVER, который описывается следующим образом: Use the /DRIVER linker option to build a Windows NT kernel mode driver. Что он делает?Почему он был включен в Visual Studio, если использовать его для сборки драйверов не рекомендуется?

  • Это работает. Я почти боюсь сказать это вслух, чтобы янавлечь на себя гнев праведных разработчиков ядра, но правда в том, что драйверы, созданные с помощью Visual Studio, работают.Мы создавали их таким образом в течение многих лет на моем рабочем месте, созданные двоичные файлы были развернуты на сотнях машин, и никаких проблем не было.Тем не менее, я знаю, что отсутствие доказательств не является доказательством отсутствия и что отсутствие каких-либо проблем до сих пор не означает, что создание драйверов с VS безопасно.

Что меня действительно беспокоит, так это отсутствие информации.В Интернете есть несколько сообщений от людей, которые используют VS для создания своих драйверов, которые неизменно получают один и тот же ответ - он не поддерживается, не делайте этого, интегрируйте WDK с VS посредством проекта makefile, если вы действительно хотитеиспользуйте VSE IDE.Однако я не нашел ни одного ответа, который бы указывал на конкретную причину, по которой вам не следует создавать драйверы с VS.

Итак, кто-нибудь знает, что произойдет, если вы используете VS для создания своих драйверов?Что может пойти не так?При каких обстоятельствах?Я знаю, что вы должны установить все параметры компилятора и компоновщика самостоятельно, и это нормально, но что произойдет, если я установлю их неправильно?Будет ли драйвер не скомпилирован, или не скомпонован, или, если он будет работать нормально, он вылетит сразу или только при правильном расположении звезд?Зачем это делать, что вызывает это?Есть ли какая-либо причина, чтобы прекратить сборку наших драйверов с VS, который годами работал как чудо, кроме того факта, что он официально не поддерживается?Если это официально не поддерживается, зачем устанавливать переключатель / DRIVER в VS?

Ответы [ 2 ]

1 голос
/ 17 марта 2011

Причина в том, что это здравый смысл, потому что возникающие недостатки могут быть тонкими. Большая часть этого была культом груза, хотя ... с тех пор, как появилась актуальная проблема. И если я правильно помню, это было бы до 2005 (т.е. первые DDK вообще содержали компилятор). Поправь меня, если я ошибаюсь.

В общем, я не вижу много, что говорит против использования VS-компилятора. Для компоновщика вы также должны установить правильное значение подсистемы (т.е. нет) и так далее ... это просто утомительно.

Однако имейте в виду, что компиляторы и инструменты WDK обычно опережают таковые в последних версиях VS в любой момент времени. Подумайте над этим: то, что содержит WDK, близко к тому, что вы можете использовать для создания самой Windows. Отсюда и предпочтение инструментам от WDK.

Технически это может быть сделано. Но если вы отправляете сообщение в группу новостей и упоминаете этот факт, не удивляйтесь, если вы впервые услышите урок на эту тему, а не ваш фактический вопрос;)

0 голосов
/ 17 марта 2011

Если он официально не поддерживается, зачем ставить переключатель / DRIVER в VS?

Дело не в установке переключателя в VS, а в том, чтобы его взятьout.

Компилятор / компоновщик C ++, поставляемый с WDK и VS, создается из одной и той же исходной базы (возможно, из разных веток и в разные моменты времени, но из одной исходной базы), одной и той же командой внутриMicrosoft.Могут ли они настроить свои сборки так, чтобы переключатель /DRIVER не появлялся в компоновщике, поставляемом с VS?Конечно.Стоит ли платить за поддержание отдельной конфигурации сборки и проверку того, что правильные варианты сборки поставляются с WDK и VS соответственно?Вероятно, нет.

Что касается того, почему это официально не поддерживается в первую очередь ... Опыт проверки набора инструментов для разработки драйверов лежит в команде Windows, а не в команде VS.Последнее, что хочет сделать команда Windows, - это подготовиться к выпуску версии VS для разработки драйверов (которую в конечном итоге должна была бы помочь и поддержка Windows), когда этот выпуск идет по расписанию, которое не соответствуетс Windows.

Объедините это с тем фактом, что разработка драйверов нацелена на относительно небольшую аудиторию, а создание драйверов с помощью IDE открывает дополнительные функции и тестовые сценарии, и для меня не удивительно, что это не так.официально поддерживается.

...