我的C++
应用程序使用Winpcap
来处理各种事情(主要是立即学习)。
如何检查Winpcap
是否已安装,如果不是,则会在启动应用程序时抛出错误?
此外,是否有人可以了解如何调用Winpcap
驱动程序函数?我知道我包含pcap
。h来调用这些函数,但它们如何被转发到OS/Driver
?这不是WINAPI
来电或SYSCALLs
是吗?
答案 0 :(得分:0)
当你在你的机器上编译和链接你的可执行文件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网页上获取的。我们鼓励您阅读它,并跟进具体问题。