繁体   English   中英

无法使用 Visual Studio 的 Empty WDM 驱动程序模板中的 NDIS 相关功能

[英]Unable to use NDIS related functions from a Visual Studio's Empty WDM Driver template

我正在考虑尝试编写 NDIS 微型端口驱动程序,并在我的 VS2019 安装中创建了一个新项目,选择“Empty WDM 驱动程序”作为我的起始模板。 我可以包含 ndis.h,但许多功能似乎不可用,包括无法使用NDIS_MINIPORT_DRIVER_CHARACTERISTICSNdisMRegisterMiniportDriver等重要功能。 在实际的 ndis.h 文件中快速搜索这些显示它们在预处理器指令#if NDIS_SUPPORT_NDIS6下显示为灰色

我克隆了驱动程序示例存储库,微型端口驱动程序示例工作正常,没有任何内容并使用相同的 WDK 安装。 查看我的项目和示例之间的配置,“驱动程序设置”部分下的选项完全不同。 我对这一切还是很陌生,所以我假设这是我的一些错误配置。 在我的项目配置中我还有什么需要编辑的吗? 到目前为止,我唯一疯狂的改变是确保 linker 与 NDIS 库链接。 对于这种类型的驱动程序,也许 WDM 驱动程序模板不是我想要的,但在这种情况下,我不确定如何正确设置我的项目。 VS 只有一个 NDIS 模板,用于过滤驱动程序。

要显示所有这些 API,您需要设置目标的 NDIS 版本。 例如,如果您的目标是 Windows 7 及更高版本,那将是 NDIS 6.20,因此您可以在包含 ndis.h 之前将其放在某处:

#define NDIS620_MINIPORT 1

这就是您必须定义的全部内容; ndis.h 将代表您自动填写其他版本控制宏。

要查看所有 NDIS 版本的列表,请查看 ndis.h 的顶部。

通常,您可以敲击“WDM 模板”甚至是完全空的.C 文件,直到它成为 NDIS 驱动程序。 如果您从头开始,则应确保:

  • 定义一个 NDIS 版本宏,例如上面的/DNDIS620_MINIPORT=1
  • 使用/kernel标志编译
  • 使用推荐的一组安全标志进行编译(目前包括/GS /guard:cf /Qspectre ,但似乎经常更改,所以认为这个答案已经过时了)
  • 链接到 ndis.lib
  • 添加一个不直接接触DRIVER_OBJECTDriverEntry NdisMRegisterMiniportDriver代替

如果您使用的是通用 WDM 模板,请注意您必须替换任何DriverUnload (NDIS 有其自己的风格)并删除任何AddDevice (NDIS 代表您处理)。 您可能想要删除任何提及 IRP 的内容。 虽然 NDIS 允许您使用通过NdisRegisterDeviceEx创建的控制设备 object (CDO) 来处理IRP_MJ_DEVICE_CONTROL ,但这并不是绝对必要的,而且许多现实世界的微型端口根本不使用 IRP。

填写NdisMRegisterMiniportDriver要求的所有回调后,您将拥有 NDIS 微型端口驱动程序的骨架。 这是一个有价值的教育练习,我建议从头开始构建一个驱动程序,这样你就会看到所有部分是如何组合在一起的。 但是,如果您赶时间,您不必自己执行此操作。 我们在这里有一个示例微型端口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM