Win10Pcap驱动部分学习

Win10Pcap驱动部分学习

Win10Pcap简介

win10Pcap在win10下运行。Win10Pcap与winPcap的动态库兼容,安装Win10Pacp的动态库之后,可以支持Wireshark 以及其它的依赖于winpcap的程序。

Win10Pcap特性

1.在win10 x86以及x64系统下运行稳定
2.通过NDIS6.x驱动模型实现
3.同样支持win8.1,8,7,Server 2012 R2,Server 2012以及Server 2008 R2的32位与64位系统。
4.是基于GPLv2许可的开源程序
5.支持IEEE802.1Q协议
6.支持最多10000字节的超长帧
7.与winpcap底层二进制兼容

与winpcap的区别

WinPcap是基于NDIS 5.x驱动模型开发的。Win10Pcap就是将WinPcap使用NDIS 6.x实现,以此达到在win10上稳定运行。同时添加了代码来支持IEEE802.1Q。

一些结构体

win10pcap使用的是NDIS_PROTOCOL_DRIVER_CHARACTERISTICS结构体,说明它是一个协议驱动。

NDIS_PROTOCOL_DRIVER_CHARACTERISTICS结构体

typedef struct _NDIS_PROTOCOL_DRIVER_CHARACTERISTICS {
  NDIS_OBJECT_HEADER                     Header;
  UCHAR                                  MajorNdisVersion;
  UCHAR                                  MinorNdisVersion;
  UCHAR                                  MajorDriverVersion;
  UCHAR                                  MinorDriverVersion;
  ULONG                                  Flags;
  NDIS_STRING                            Name;
  SET_OPTIONS_HANDLER                    SetOptionsHandler;
  BIND_HANDLER_EX                        BindAdapterHandlerEx;
  UNBIND_HANDLER_EX                      UnbindAdapterHandlerEx;
  OPEN_ADAPTER_COMPLETE_HANDLER_EX       OpenAdapterCompleteHandlerEx;
  CLOSE_ADAPTER_COMPLETE_HANDLER_EX      CloseAdapterCompleteHandlerEx;
  NET_PNP_EVENT_HANDLER                  NetPnPEventHandler;
  UNINSTALL_PROTOCOL_HANDLER             UninstallHandler;
  OID_REQUEST_COMPLETE_HANDLER           OidRequestCompleteHandler;
  STATUS_HANDLER_EX                      StatusHandlerEx;
  RECEIVE_NET_BUFFER_LISTS_HANDLER       ReceiveNetBufferListsHandler;
  SEND_NET_BUFFER_LISTS_COMPLETE_HANDLER SendNetBufferListsCompleteHandler;
#if (NDIS_SUPPORT_NDIS61)
  DIRECT_OID_REQUEST_COMPLETE_HANDLER    DirectOidRequestCompleteHandler;
#endif 
} NDIS_PROTOCOL_DRIVER_CHARACTERISTICS, *PNDIS_PROTOCOL_DRIVER_CHARACTERISTICS;

Header
NDIS_OBJECT_HEADER 结构体。设置其Type成员为NDIS_OBJECT_TYPE_PROTOCOL_DRIVER_CHARACTERISTICS

通过将Revision成员设置为以下之一来指定版本:
NDIS_PROTOCOL_DRIVER_CHARACTERISTICS_REVISION_2,为NDIS6.1版本添加了DirectOidRequestCompleteHandler成员。

设置size成员为NDIS_SIZEOF_PROTOCOL_DRIVER_CHARACTERISTICS_REVISION_2.

NDIS_PROTOCOL_DRIVER_CHARACTERISTICS_REVISION_1,NDIS6.0的原始版本。
设置size成员为NDIS_SIZEOF_PROTOCOL_DRIVER_CHARACTERISTICS_REVISION_1.

MajorNdisVersion
协议驱动使用的NDIS库的主版本。当前值为0x06。

MinorNdisVersion
NDIS的子版本。以下是可用的值以及其含义
0 NDIS 6
20 NDIS 6.20
30 NDIS 6.30

MajorDriverVersion
为协议驱动的主版本号保留。可以指定为任意值

MinorDriverVersion
为子版本号保留。可以指定为任意值

Flags
NDIS保留成员。驱动程序要设置为0

Name
驱动服务的宽字节字符串名字

SetOptionsHandler
ProtocolSetOptions函数指针

BindAdapterHandlerEx
ProtocolBindAdapterEx 函数指针.

UnbindAdapterHandlerEx
ProtocolUnbindAdapterEx函数指针

OpenAdapterCompleteHandlerEx
ProtocolOpenAdapterCompleteEx 函数指针.

CloseAdapterCompleteHandlerEx
ProtocolCloseAdapterCompleteEx函数指针。

NetPnPEventHandler
ProtocolNetPnPEvent 函数指针。

UninstallHandler
ProtocolUninstall 函数指针, 可以为NULL.

OidRequestCompleteHandler
ProtocolOidRequestComplete 函数指针.

StatusHandlerEx
ProtocolStatusEx 函数指针,可以为NULL

ReceiveNetBufferListsHandler
ProtocolReceiveNetBufferLists 函数指针.

SendNetBufferListsCompleteHandler
ProtocolSendNetBufferListsComplete 函数指针.

DirectOidRequestCompleteHandler
ProtocolDirectOidRequestComplete 函数指针.可选函数,如果驱动不支持direct OID请求接口,设置为空。

注意:
驱动调用NdisRegisterProtocolDriver 来注册特性,包括默认的驱动函数指针。协议驱动初始化一个NDIS_PROTOCOL_DRIVER_CHARACTERISTICS 结构体并将指针作为ProtocolCharacteristics 参数传入NdisRegisterProtocolDriver函数。

使用需求:
支持NDIS6.0或之后的版本

头文件:
Ndis.h

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值