Win10Pcap驱动部分学习

来源:互联网 发布:淘宝限时抢购软件 编辑:程序博客网 时间:2024/05/13 09:15

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 0
原创粉丝点击