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

Win10Pcap驱动部分学习相关推荐

  1. Windows驱动开发学习笔记(七)—— 多核同步内核重载

    Windows驱动开发学习笔记(七)-- 多核同步 基础知识 并发与同步 分析 InterlockedIncrement 原子操作相关API 内核文件 多核同步 临界区 示例一:错误的临界区 示例二: ...

  2. Windows驱动开发学习笔记(六)—— Inline HOOK

    Windows驱动开发学习笔记(六)-- Inline HOOK SSDT HOOK Inline Hook 挂钩 执行流程 脱钩 实验一:3环 Inline Hook 实验二:0环 Inline H ...

  3. Windows驱动开发学习笔记(五)—— SSDT HOOK

    Windows驱动开发学习笔记(五)-- SSDT HOOK 系统服务表 系统服务描述符表 实验一:通过代码获取SSDT表地址 通过页表基址修改页属性 方法1:修改页属性 方法2:修改CR0寄存器 实 ...

  4. Windows驱动开发学习笔记(四)—— 3环与0环通信(常规方式)

    Windows驱动开发学习笔记(四)-- 3环与0环通信(常规方式) 设备对象 创建设备对象 设置数据交互方式 创建符号链接 IRP与派遣函数 IRP的类型 其它类型的IRP 派遣函数 派遣函数注册位 ...

  5. Windows驱动开发学习笔记(三)—— 内核空间内核模块

    Windows驱动开发学习笔记(三)-- 内核空间&内核模块 内核空间 实验 第一步:编译如下代码 第二步:将 .sys 文件拷贝到虚拟机中 第三步:部署 .sys 文件并运行 第四步:创建一 ...

  6. Windows驱动开发学习笔记(二)—— 驱动调试内核编程基础

    Windows驱动开发学习笔记(二)-- 驱动调试&内核编程基础 基础知识 驱动调试 PDB(Program Debug Database) WinDbg 加载 PDB 实验:调试 .sys ...

  7. Windows驱动开发学习笔记(一)—— 环境配置第一个驱动程序

    Windows驱动开发学习笔记(一)-- 环境配置&第一个驱动程序 环境配置 第一个驱动程序 环境配置 安装VS2010:https://pan.baidu.com/s/1uZWWxCtB60 ...

  8. Android深度探索(卷1)HAL与驱动开发学习笔记(8)

    Android深度探索(卷1)HAL与驱动开发学习笔记(8) 第八章 蜂鸣器驱动   L i n u x驱动的代码重用有很多种方法.可以采用标准C程序的方式.将要重用的代码放在其他的文件(在头文件中声 ...

  9. 嵌入式驱动工程师学习路线【建议收藏】

    网上看了很多的嵌入式学习路线,有的比较片面,有的为了博人眼球东拼西凑,几乎把整个行业用得着用不着的技术都写上去了,没有侧重点,简直是劝退指南,还有的纯粹是打广告卖板子招生. 一口君曾经是某见的教学总监 ...

最新文章

  1. 报表引擎API开发入门— EJB程序数据源
  2. Java8 stream filter map
  3. .NET Core开发日志——配置
  4. Eclipse新建SpringBoot后pom.xml代码
  5. 关于CRM插件调试方面事
  6. boost::mpl模块实现upper_bound相关的测试程序
  7. 洛谷 3398 仓鼠找sugar 【模板】判断树上两链有交
  8. node源码详解(五)
  9. 【剑指offer】面试题32 - III:从上到下打印二叉树 III(Java)
  10. 人工智能的本源与展望:从亚里士多德到平行智能
  11. 从深度图里面导出边界
  12. maven文件报错(pom.xml或者jar包缺失)解决方法
  13. 如何在Mac上创建和引导Linux USB驱动器
  14. 如果计算机是中国人发明的,那编程代码很可能就应该这样写!
  15. MATLAB去除多余点的命令,如何清除matlab命令窗口中已有的内容
  16. calfcamel 的 2333
  17. 介词短语不能做宾语,但有时有的借此有句意省略就出现了介词再加上介词短语了
  18. Visual Studio 各个版本之间的功能比较
  19. 关于利用kali linux2017.2中MSFCONSOLE 利用MS17-010漏洞发起攻击的坑
  20. Python:NBA球员得分数据排行爬虫

热门文章

  1. MQTT学习笔记——MQTT协议使用
  2. 计算机笔记--【Redis高级】
  3. 涉密台式计算机密码可以输入几次,涉密打印机、扫描仪等与涉密计算机之间不采用无线方式连接 - 作业在线问答...
  4. SpaceShooter打飞机教程笔记(四)
  5. MFC设置应用程序图标
  6. 国家标准GB7713-87
  7. tfidf关键词提取_基于深度学习的个性化商品评论标签提取
  8. html页面整体缩小,浏览器缩放原理以及窗口、html页面大小
  9. 最新小程序反编译详细教程,亲测可用
  10. unity卡死或崩溃日志查询