Winpcap驱动函数调用

时间:2013-12-28 10:48:16

标签: c++ windows winpcap

我的C++应用程序使用Winpcap来处理各种事情(主要是立即学习)。

如何检查Winpcap是否已安装,如果不是,则会在启动应用程序时抛出错误?

此外,是否有人可以了解如何调用Winpcap驱动程序函数?我知道我包含pcap。h来调用这些函数,但它们如何被转发到OS/Driver?这不是WINAPI来电或SYSCALLs是吗?

1 个答案:

答案 0 :(得分:0)

当你在你的机器上编译和链接你的可执行文件winpcap,然后在没有安装winpcap的系统上执行时,用户将得到一个典型的“程序无法启动,因为这样的东西丢失了”。像这样:

enter image description here

为了缓解这个问题,您可以假设

存在winpcap
  • 将winpcap与软件安装捆绑在一起,但需遵守软件可能考虑的任何许可注意事项。
  • 要求用户在安装软件之前或之后立即安装winpcap。

通过这样的设置,您的用户将更加了解遇到这些错误时可能出现的问题。

要避免Windows错误消息框本身,您可以

  • 通过使用LoadLibrary()显式加载winpcap,使用GetProcAddress()获取方法地址并在无法找到时挽救,以动态使用winpcap。

我相信Wireshark就是这样做的,或者至少在过去是这么做的。

对于后者,如果您可以检查HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst是否存在(它曾经是检查开发邮件列表中winpcap存在的推荐方法),甚至在您尝试使用LoadLibrary()之前也可以提供帮助确保系统上安装正确。您还可以在软件安装程序中检查是否存在此密钥(如果有的话)。

请注意,动态使用winpcap的最后一个选项是最不方便的选项。如果你只是在试验,你应该遵循官方指南。你没有说你正在使用什么编译器,但是使用winpcap的官方方式是in this document

通常winpcap与驱动程序异步交互,但作为winpcap的用户,你应该坚持使用官方界面而不是直接调用驱动程序。这是一个如何工作的高级图表。我是从NPF driver internals manual网页上获取的。我们鼓励您阅读它,并跟进具体问题。

Source: www.winpcap.org/docs/docs_412/html/group__NPF.html