Winpcap 和 DeviceIoControl - Win7 上的错误代码 1

Posted

技术标签:

【中文标题】Winpcap 和 DeviceIoControl - Win7 上的错误代码 1【英文标题】:Winpcap and DeviceIoControl - Error code 1 on Win7 【发布时间】:2011-07-24 08:55:31 【问题描述】:

我正在尝试使用 Winpcap PacketRequest() 函数(位于 packet32.h 中)将 OID 发送到网络适配器。 它适用于 XP32,不适用于 Win7 32 和 Win7 64(在 Win7 64 中我得到最后一个错误代码 1,在 32 中我不知道 - 我目前无法访问 32 位)。 我查看了 PacketRequest() 函数的来源 - 它调用 DeviceIoControl(),这是失败的函数,因此 PacketRequest() 失败。

我是否使用了错误的 Winpcap 库? (我已经安装了WinPcap_4_1_2.exe)

为什么不能在 Win7 上运行?

提前致谢。

【问题讨论】:

【参考方案1】:

我可以看看你的启动代码吗? 听起来您正在加载 dll 并尝试调用一些内部方法,

您应该坚持使用 api,直到您完全了解 winpcap 如何在内部工作。

要将原始数据包写入网卡,您应该使用 api 函数

int pcap_sendpacket  ( pcap_t *  p,  
                       u_char *  buf,  
                       int  size ) 

http://www.winpcap.org/docs/docs_41b5/html/group__wpcapfunc.html#g51dbda0f1ab9da2cfe49d657486d50b2

在你可以这样做之前,你必须打开一个网络适配器

pcap_t* pcap_open_live  ( const char *  device,  
                          int  snaplen,  
                          int  promisc,  
                          int  to_ms,  
                          char *  ebuf) 

http://www.winpcap.org/docs/docs_41b5/html/group__wpcapfunc.html#gae6abe06e15c87b803f69773822beca8

没有看到您的代码,我帮不上什么忙。 我编写了一个使用 winpcap 的应用程序, 它适用于 xp(32/64)、vista(32/64)、win7(32/64) 没有问题。

【讨论】:

以上是关于Winpcap 和 DeviceIoControl - Win7 上的错误代码 1的主要内容,如果未能解决你的问题,请参考以下文章

DeviceIoControl 返回 ERROR_ACCESS_DENIED

带有输入无符号字符缓冲区 C++ 的 DeviceIoControl

释放 DeviceIoControl 分配的内存

Pinvoke DeviceIoControl 参数

用于 DeviceIOControl 的 SetWindowsHookEx,要使用啥 hookid?

如何使用 DeviceIOControl() 从 CD 中获取“曲目信息”?