【问题标题】:Using VS compiler and linker to build Windows drivers使用 VS 编译器和链接器构建 Windows 驱动程序
【发布时间】:2011-03-17 15:07:58
【问题描述】:

每当我重新审视使​​用 Visual Studio 的编译器和链接器构建 Windows 驱动程序的主题时,我会想到两件事:

  • 官方不支持。确实,整个互联网的共识是,构建Windows驱动程序的正确方法是使用Windows自带的编译器、链接器和BUILD工具。驱动程序套件。但是,Visual Studio 2008 包含 /DRIVER 链接器选项,如下所述:Use the /DRIVER linker option to build a Windows NT kernel mode driver. 它有什么作用?如果不推荐使用它来构建驱动程序,为什么将它包含在 Visual Studio 中?

  • 它有效。我几乎不敢大声说出来,以免引起正义的内核开发人员的愤怒,但事情的真相是使用 Visual Studio 构建的驱动程序做工作。我们多年来一直在我的工作场所以这种方式构建它们,生成的二进制文件已部署在数百台机器上,并且没有任何问题。但是,我知道没有证据并不是没有证据,并且到目前为止没有任何问题并不一定意味着使用 VS 构建驱动程序是安全的。

这里真正困扰我的是缺乏信息。互联网上有一些使用 VS 构建驱动程序的人的帖子,它们总是得到相同的响应 - 不支持,不要这样做,如果你真的想通过 makefile 项目将 WDK 与 VS 集成使用 VS 的 IDE。但是,我没有找到一个回复​​指出您不应该使用 VS 构建驱动程序的具体原因。

那么,有谁知道如果您使用 VS 构建驱动程序会发生什么?会出什么问题?在什么情况下?我知道您必须自己设置所有编译器和链接器选项,这没关系,但是如果我设置错误会发生什么?驱动程序会编译失败,还是链接失败,或者如果它构建得很好,它会直接崩溃还是只有当星星对齐时才会崩溃?为什么会这样,是什么原因造成的?除了没有官方支持的事实之外,还有什么理由停止使用多年来一直像魅力一样工作的 VS 构建我们的驱动程序?如果官方不支持,VS为什么要加/DRIVER开关?

【问题讨论】:

    标签: windows build driver


    【解决方案1】:

    这是常识的原因是因为由此产生的缺陷可能是微妙的。不过,其中大部分都是货物崇拜……自从出现实际问题以来。如果我没记错的话,那应该是 2005 年之前(即第一个包含编译器的 DDK)。如果我错了,请纠正我。

    一般来说,我没有看到很多反对使用 VS 编译器的内容。对于链接器,您还必须设置正确的子系统值(即无)等等......这很乏味。

    但是,请记住,WDK 编译器和工具通常在任何给定时间都领先于最新 VS 中的那些。考虑一下:WDK 包含的内容与您可以了解用于构建 Windows 本身的内容很接近。因此偏爱来自 WDK 的工具。

    技术上是可以做到的。但是,如果您在新闻组中发帖并提及这一事实,如果您首先听到的是关于该主题的课程而不是您的实际问题,请不要感到惊讶;)

    【讨论】:

    • 自从出现了实际问题?这就是我最感兴趣的——已知问题或出现问题的案例。你能提供更多信息吗?
    • @Neno Ganchev:IIRC 它与标记生成的二进制文件的页面是否分页等有关......
    【解决方案2】:

    如果官方不支持,为什么VS里要加/DRIVER开关?

    这不是将开关放入VS的问题,而是将其取出。

    WDK 和 VS 附带的 C++ 编译器/链接器是由 Microsoft 内部的同一团队从相同的源代码库(可能来自不同的分支和不同的时间点,但相同的源代码库)构建的。他们是否可以配置他们的构建,以便/DRIVER 开关不会出现在 VS 提供的链接器中?当然。是否值得维护单独的构建配置并检查正确的构建变体是否分别随 WDK 和 VS 一起交付?应该不会吧。

    至于为什么它一开始就没有得到官方支持...验证驱动程序开发工具集的专业知识在于 Windows 团队,而不是 VS 团队。 Windows 团队想要做的最后一件事是,当该版本的时间表不符合要求时,要为驱动程序开发(Windows 最终也必须帮助支持)确定 VS 版本的资格与 Windows 同步。

    再加上驱动程序开发针对的是相对较小的受众这一事实,通过 IDE 构建驱动程序开辟了额外的功能和测试场景,对我来说它没有得到官方支持也就不足为奇了。

    【讨论】:

    • 嗯,是的,我可以从组织的角度理解它,但这只是让我相信使用 VS 构建驱动程序没有已知问题,只是它没有已经过测试,可能存在未知问题,所以他们只是安全行事。我更好奇是否有有个我不知道的已知问题。
    • @Neno Ganchev:在这种情况下,MS 很可能也不知道这些问题。据我所知,这主要是传给新开发人员的“传统”。但是考虑到 WDK 的历史,这个传统不能太老了。例如,Windows 2000 DDK 不包括驱动程序。 IIRC XP DDK 是第一个包含它们的......这就是它必须出现的时间。
    猜你喜欢
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多