Ndis 网络驱动编程
文章平均质量分 79
smilestone322
通过软考: 系统架构设计师和信息系统项目管理师考试
工业相机和DVR开发,熟悉windows驱动开发,camera sdk开发,3D摄像头sdk开发。
联系方式:smilestone322@sina.com
展开
-
windows WDF驱动开发总结(7)--网络驱动开发(NDIS)
<br />NDIS 网络设备接口规范<br />(1) NDIS_PROTOCOL_CHARACTERISTICS<br />函数功能:This structure is used to specify the version numbers and various callback functions for a protocol.typedef struct _NDIS_PROTOCOL_CHARACTERISTICS { UCHAR MajorNdisVersion; UCHAR Mino原创 2010-10-08 20:36:00 · 4108 阅读 · 1 评论 -
庖丁解牛---winpcap源码彻底解密系列的续集(7)
DeviceIoControl对应npf.sys中的NPF_IoControl函数; NTSTATUS NPF_IoControl(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp){ POPEN_INSTANCE Open; PIO_STACK_LOCATION IrpSp; PLIST_ENTRY原创 2011-10-27 16:51:53 · 1922 阅读 · 0 评论 -
庖丁解牛---winpcap源码彻底解密系列的续集(6)
如何设置混合模式,本文是庖丁解牛---winpcap源码彻底解密系列的续集: static intpcap_activate_win32(pcap_t *p){ NetType type; #ifdef HAVE_REMOTE char host[PCAP_BUF_SIZE + 1]; char port[PCAP_BUF_SIZE +原创 2011-10-27 16:47:54 · 2821 阅读 · 1 评论 -
庖丁解牛—winpcap源码彻底解密系列续集(13)
如何从网卡读取数据包:Winpcap从网卡获取数据是从NPF_tap开始,NPF_tap是一个回调函数,当网卡有数据包到来时,NDis调用该函数接收数据包,该函数中首先进行了过滤,源码如下;NDIS_STATUS NPF_tap (IN NDIS_HANDLE ProtocolBindingContext,IN NDIS_HANDLE MacReceiveContext,IN PVOID原创 2011-10-31 15:11:21 · 1911 阅读 · 1 评论 -
庖丁解牛—winpcap源码彻底解密系列的续集(8)
设置超时,设置mintoCopy,设置内核缓冲,设置用户缓冲,设置MTU的大小,这些实现都和设置混合模式相似。讲解如下: 如设置内核缓冲区,代码段如下pcap_win32的pcap_activate_win32函数: if (p->opt.buffer_size == 0) p->opt.buffer_size = WIN32_DEFAU原创 2011-10-27 19:22:15 · 1891 阅读 · 0 评论 -
庖丁解牛—winpcap源码彻底解密系列续集(9)
设置用户缓冲区:pcap_setuserbuffer源码如下: intpcap_setuserbuffer(pcap_t *p, int size) { unsigned char *new_buff; if (!p->adapter) { sprintf(p->errbuf,"Impossible to set user原创 2011-10-27 19:34:04 · 1934 阅读 · 0 评论 -
庖丁解牛---winpcap源码彻底解密系列续集(10)
设置读超时: PacketSetReadTimeout(p->adapter, p->md.timeout);BOOLEAN PacketSetReadTimeout(LPADAPTER AdapterObject,int timeout){ BOOLEAN Result; TRACE_ENTER("PacketSetReadTimeout原创 2011-10-27 19:48:44 · 2835 阅读 · 5 评论 -
庖丁解牛—winpcap源码彻底解密续 (12)
应用程序如何和内核驱动交互Event;/*! \brief Allocates the read event associated with the capture instance, passes it down to the kernel driver and stores it in an _ADAPTER structure. \param AdapterObjec原创 2011-10-29 16:35:41 · 1990 阅读 · 0 评论 -
庖丁解牛-----winpcap源码彻底解密(五)
庖丁解牛-----winpcap源码彻底解密(五)原创 2010-12-19 22:10:00 · 2820 阅读 · 4 评论 -
庖丁解牛—winpcap源码彻底解密系列续集(11)
庖丁解牛—winpcap源码彻底解密系列续集(11)如何发送数据包:源码解析;int pcap_sendpacket(pcap_t * p, u_char * buf, int size原创 2011-10-28 15:45:32 · 2135 阅读 · 0 评论 -
winpcap 在win7 64位上广播 以太网数据包,当存在虚拟机或无线网卡(wifi)时存在问题;
使用winpcap做局域网的设备查找功能,当原创 2014-07-11 14:39:43 · 2396 阅读 · 0 评论 -
庖丁解牛-----winpcap源码彻底解密(一)
庖丁解牛-----winpcap源码彻底解密 原创:转载请注明出处; 最近忙一个项目,需要使用winpcap抓取网络数据包,调用winpcap提供的api进行抓包后,发现丢包情况比较严重,而且cpu占用率比较大。所以下定决心,对winpcap源码进行分析,因为对驱动和对Ndis网络驱动比较熟悉,所以分析源码还不是很费劲,其实winpcap底层的npf不过是一个Ndis协原创 2010-12-18 22:50:00 · 9190 阅读 · 22 评论 -
庖丁解牛-----winpcap源码彻底解密(二)
<br />庖丁解牛-----winpcap源码彻底解密(二)<br />查找到网卡后,open网卡,设置过滤器,然后就该读写数据包了,下面就讲讲怎么发送和接收数据包了。<br />(4)pcap_sendpacket<br />pcap_sendpacket用来发送数据包,该函数只能发送单个的数据包,<br />intpcap_sendpacket(pcap_t *p, constu_char *buf, intsize)<br />{<br /> if (p->inject_op(p, buf,原创 2010-12-19 16:52:00 · 4246 阅读 · 1 评论 -
庖丁解牛-----winpcap源码彻底解密(四)
<br /><br /><br />庖丁解牛-----winpcap源码彻底解密(四)<br /><br /><br />版权申明: 原创文章,转贴请注明出处!!!!!!!!<br /><br /><br />(1) 如何设置内核缓冲区的大小,前面已经谈过设置内核缓冲区的函数是pcap_setbuff,查看winpcap的开发文档,pcap_setbuff的定义如下:<br />int pcap_setbuff(pcap_t *p,int dim);<br />Set the size of t原创 2010-12-19 21:59:00 · 6370 阅读 · 11 评论 -
庖丁解牛-----winpcap源码彻底解密(三)
庖丁解牛-----winpcap源码彻底解密(三) 上一篇讲了怎么发送数据包,这次接着讲怎么接收数据包,数据包过滤后,就被复制到内核缓冲区(kernel buffer),接收数据包的方式有2种,使用回调函数接收数据包,比如pcap_loop,pcap_dispatch,二是非回调函数的方式来接收数据包,如pcap_ next, pcap_next_ex。这一篇讲讲怎么发送数据包。原创 2010-12-19 21:40:00 · 4415 阅读 · 3 评论 -
winpcap 天生缺陷
1)winpap 在大数据量的情况下容易丢包,原因是数据包从网卡到应用程序需要经过多次copy,首先从网卡拷贝到内核缓冲区,从内核缓冲区copy到应用缓冲区;在PC cpu低的情况下丢包很明显,尤其是做千兆网络数据包捕获的时候就更加显现出来了。2)winpcap 是旁听模式,所以无法阻断UDP应用,无法流量限制,并容易数据丢包;阻断规则有可能引起网络中断或无效;3)wincpap 即使被原创 2013-05-11 22:11:53 · 3471 阅读 · 1 评论 -
windows wdf 驱动开发总结(9)--网络驱动开发(NDIS)
<br />此篇文章来自Internet,写的挺不错的,在这里转贴过来。<br />NIC1394 网卡驱动收包过程:<br /><br />网卡的发包和收包过程<br />网卡也叫“网络适配器”,英文全称为“Network Interface Card”,简称“NIC”,网卡是局域网中最基本的部件之一,它是连接计算机与网络的硬件设备。无论是双绞线连接、同轴电缆连接还是光纤连接,都必须借助于网卡才能实现数据的通信。<br /> 网卡的主要工作原理是整理计算机上发往网线上的数据,并将数据分解为适当大小的转载 2010-10-08 20:43:00 · 6169 阅读 · 0 评论 -
windows wdf 驱动开发总结(8)--网络驱动开发(NDIS)
<br />(11) IoCreateDevice<br />函数功能:creates a device object for use by a driver.<br />NTSTATUS IoCreateDevice(<br /> __in PDRIVER_OBJECT DriverObject,<br /> __in ULONG DeviceExtensionSize,<br /> __in_opt PUNICODE_STRING DeviceName,<br /> __i原创 2010-10-08 20:44:00 · 3621 阅读 · 0 评论 -
Ndis 网络发包收包
<br />版权信息:<br /><br />本文来自internet,转载这里供网络编程爱好者学习和研究使用,请尊重作者的劳动成果。未经授权而在商业上使用原作者的文章属侵权行为,后果由使用者自负,本人不承担任何法律责任。<br /> <br /> <br />window网口驱动编程<br /> <br />一、 前言<br /> <br />RTL8139 可能是目前最受欢迎的网卡,它的价格便宜,功能上也还能接受。虽然在效能上有时会略不及Intel 的 eepro100,但因为价格实在太便宜了,所转载 2010-10-13 17:48:00 · 3514 阅读 · 0 评论 -
Ndis 协议驱动-Packet源码
<br />/*++<br />Copyright (c) 1990-2000 Microsoft Corporation<br />Module Name:<br /> packet.c<br />Abstract:<br /><br />Author:<br /><br />Environment:<br /> Kernel mode only.<br />Notes:<br /><br />Future:<br /> <br />Revision History:<br /> Fixe原创 2010-10-16 10:47:00 · 2194 阅读 · 0 评论 -
linux 下libpcap和windows下winpcap 捕获网络数据包的异同
<br /> libpcap和winpcap最大的不同就是 内核缓冲区,用户缓冲区等都不能设置,没有提供这样的函数,要编译libpcap源码。<br /> 另外,linux fedora 下使用libpcap时,找不到pcap.h,查找发现安装了libpcap的库但是没有头文件。解决办法是:<br />1.如何查看是否安装libpcap? #rpm -aq libpcap<br />2.查找libpcap源,yum search pcap <br />3.安装libpcap, yum install lib原创 2011-02-12 21:43:00 · 3889 阅读 · 0 评论 -
详细分析Ndis协议驱动和Ndis中间层过滤驱动区别(Ndisprot和passthru)
<br />Ndisprot和passthru源码解析原创 2011-02-12 21:45:00 · 3108 阅读 · 3 评论 -
Ndisprot协议驱动和winpcap下npf协议驱动对比分析(1)
Ndisprot协议驱动和winpcap下npf协议驱动对比分析原创 2011-03-14 10:25:00 · 1952 阅读 · 0 评论 -
Ndisprot协议驱动和winpcap下npf协议驱动对比分析
<br />Ndisprot协议驱动和winpcap下npf协议驱动对比分析原创 2011-03-14 10:25:00 · 1860 阅读 · 1 评论 -
winpcap如何捕获多个网卡的数据包,一点小思路,欢迎讨论!(续)
winpcap同时捕获多个网卡数据包,工作已经完成。呵呵。原创 2011-08-17 17:22:34 · 1801 阅读 · 6 评论 -
如何修改winpcap源码,使之能从内核直接获取数据包,而不经过userbuff
高手指点下!原创 2011-08-28 11:29:05 · 1993 阅读 · 7 评论 -
winpcap 读包时,卡在下面的缓冲区,读不上来
今天采用winpcap读包时,发现包卡在了下面的缓冲区里面,读不出来,而且wireshark也没有抓到包,然后再发送一个包时,下面的缓冲区的包又读出来了!郁闷!没找到原因!仔细看了winpcap的源码,都是对的! http://blog.csdn.net/smilestone322/article/details/6911830原创 2011-10-21 17:17:16 · 1714 阅读 · 1 评论 -
浅谈usb的枚举过程及Ndis驱动的分层结构
一家大型企业技术面试题如下:叙述usb 枚举过程?(1)当系统重启,硬件介入或添加新设备时,会进行usb设备枚举(2)然后总线驱动程序检测到新的usb硬件;根据usb设备描述符合usb配置描述符,获取厂商(VID,PID),设备类型,版本等信息;(3)根据这些信息,Pnp管理器创建物理驱动对象(PDO),并在注册表中添加某些信息;(4)Pnp管理器查找注册表中与该PDO一致原创 2011-03-10 14:54:00 · 2984 阅读 · 1 评论 -
winpcap如何捕获多个网卡的数据包,一点小思路,欢迎讨论!
以前在使用winpcap捕获网卡的数据包时,只做了捕获一个网卡的情况,现在用户有需求,要捕获多个网卡,因为我们以前的设备是一台电脑通过一个网卡连接一个设备,现在用户需求有2个,一个是在电脑上装2个网卡,每个网卡都连接一个设备,另外一个需求是通过交换机,PC机上一个网卡通过交换机连原创 2011-08-16 10:42:14 · 5234 阅读 · 2 评论