### NDIS Filter 驱动开发相关知识点 #### 1. 概述 - **NDIS**(Network Driver Interface Specification)是一种由微软定义的标准接口,它定义了网络适配器驱动程序与上层协议栈之间的交互方式。NDIS驱动程序可以分为三种类型:Miniport NIC驱动、Protocol驱动和Intermediate驱动(即Filter驱动)。 - **Filter驱动**是位于Miniport驱动与Protocol驱动之间的一种特殊类型的驱动程序。它可以拦截和处理通过NDIS的数据包,从而实现网络监控、安全检查等功能。 #### 2. NDIS驱动程序分类 - **NDIS Miniport NIC Driver**:这是最低层的网络驱动,直接与硬件设备交互,实现基本的数据传输功能。 - **NDIS Protocol Driver**:高层驱动,用于实现特定的协议栈(如TCP/IP),并向上层提供TDI(Transport Driver Interface)接口。 - **NDIS Intermediate Driver (Filter)**:这类驱动程序位于Miniport和Protocol驱动之间,主要用于数据包的过滤、修改等操作。 #### 3. 基于PassThru的NDIS中间层驱动程序扩展 - **PassThru**:是NDIS提供的一种API集合,用于实现数据包的透明传输。基于PassThru开发的Filter驱动可以实现数据包的监听、拦截和修改等功能。 - **数据包处理流程**:通常包括接收数据包、处理数据包、发送数据包等步骤。在PassThru模式下,Filter驱动需要正确处理这些步骤,确保数据包能够顺利通过并实现预定的功能。 #### 4. WinDBG+VMware=调试内核 - **WinDBG**:一种广泛使用的调试工具,可以用来调试用户模式和内核模式的应用程序。 - **VMware**:虚拟化平台,常用于模拟不同环境下的测试和调试场景。结合WinDBG,可以在VMware虚拟机中设置断点,跟踪内核代码执行流程,便于查找问题。 #### 5. VirtialWiFi在Vista下的编译问题 - **Virtual WiFi**:一种将单个物理无线网卡虚拟成多个逻辑无线网卡的技术。 - **编译问题**:在Vista系统下可能遇到的常见编译问题包括编译器版本不兼容、依赖库缺失等。解决这些问题通常需要检查编译环境、更新编译工具等。 #### 6. 驱动设计-INF文件 - **INF文件**:用于描述驱动程序信息的文本文件,包括驱动程序的安装路径、依赖关系等信息。 - **设计要点**:INF文件的设计需要考虑到驱动程序的兼容性和可移植性,合理安排文件结构和依赖关系。 #### 7. 无线网络管理 - **无线网络管理**:涉及无线网络连接的建立、断开、扫描可用网络等功能。 - **关键技术**:包括SSID(服务集标识)、频道选择、加密方式设置等。 #### 8. 关于IHVservice的安装 - **IHVservice**:通常是设备制造商提供的服务,用于增强硬件设备的功能。 - **安装问题**:常见的安装问题包括驱动冲突、权限不足等,解决这些问题通常需要重新配置系统环境或者升级IHVservice版本。 #### 9. 关于DebugView无法打印出DbgPrint信息 - **DebugView**:一种用于捕获DbgPrint输出的工具。 - **DbgPrint**:Windows内核模式下的调试函数,用于输出调试信息。 - **解决办法**:确保驱动程序正确调用了DbgPrint,并且DebugView正确配置以捕获输出。 #### 10. SamplePingPacketDecode - **SamplePingPacketDecode**:一个示例程序,展示了如何解析ICMP Ping数据包。 - **应用场景**:可用于理解ICMP协议工作原理,以及在网络监控或故障诊断时分析Ping数据包。 #### 11. HeaderDrawing - **HeaderDrawing**:指数据包头部的绘制,通常用于可视化网络流量分析。 - **作用**:帮助开发者直观地理解数据包结构,便于定位问题。 #### 12. 拷贝MDL中数据到缓冲区 - **MDL**(Memory Descriptor List):内存描述列表,用于描述非连续内存块。 - **拷贝方法**:可以通过NdisMCopyFromBusMemory等函数将MDL中的数据复制到连续的缓冲区中。 #### 13. MDL中数据读取 - **读取方法**:使用NdisMReadPortUchar等函数可以从MDL中读取数据。 - **注意事项**:需要注意内存对齐和数据长度等问题。 #### 14. IEEE802.1Q中的数据读取 - **IEEE802.1Q**:定义了VLAN标签的标准。 - **数据读取**:在处理包含VLAN标签的数据包时,需要正确识别并提取VLAN标签信息。 #### 15. GetLastError()为0x5 - **GetLastError()**:返回最后一次调用失败的错误代码。 - **0x5**:表示访问被拒绝。通常发生在没有足够权限访问资源时。 #### 16. IOCTL_NDIS_QUERY_GLOBAL_STATS的使用 - **IOCTL**(Input/Output Control):用于向内核发送控制命令。 - **查询全局统计信息**:通过IOCTL_NDIS_QUERY_GLOBAL_STATS可以查询整个系统的网络统计信息。 #### 17. 驱动开发教程 - **教程内容**:通常包括环境搭建、基本概念介绍、示例代码讲解等。 - **学习目标**:帮助开发者快速掌握NDIS Filter驱动开发的基础知识。 #### 18. VMware+Windgb+Win7内核驱动调试 - **调试环境**:使用VMware创建Win7虚拟机,在虚拟机中运行内核驱动程序,并利用Windgb进行调试。 - **调试技巧**:设置断点、查看寄存器状态、跟踪函数调用流程等。 #### 19. Vmware+Windgb调试示例 - **示例内容**:具体演示如何使用Windgb在VMware虚拟机中调试内核驱动。 - **实践意义**:有助于理解调试流程,提高调试效率。 #### 20. Filter发送OID请求[解决蓝屏] - **OID**(Object Identifier):对象标识符,用于指定特定的OID请求。 - **蓝屏问题**:发送OID请求时可能会触发系统蓝屏。解决办法包括检查驱动程序代码逻辑、使用正确的OID等。 #### 21. 关于_asm int 3运用 - **_asm int 3**:插入一个断点指令,常用于调试目的。 - **运用场景**:在关键代码位置插入_asm int 3,可以在调试器中设置断点,便于追踪执行流程。 #### 22. 关于Win7 Native WiFi的一点疑惑【成功创建一个MAC】 - **Native WiFi**:指Windows内置的无线网络功能。 - **创建MAC**:成功创建一个MAC地址,意味着成功配置了一个虚拟无线网卡。 #### 23. WDK中提示的Warning - **WDK**(Windows Driver Kit):用于开发Windows驱动程序的工具包。 - **Warning**:编译过程中出现的警告信息,通常不会阻止编译进程但需要关注。 - **处理方法**:根据警告信息提示,修正代码逻辑或配置文件。 #### 24. 驱动开发资料汇总 - **资料来源**:官方文档、技术博客、论坛讨论等。 - **资料类型**:包括教程、案例分析、代码示例等。 #### 25. 使用BAT文件编译驱动 - **BAT文件**:批处理脚本文件,用于自动化执行一系列命令。 - **编译驱动**:通过编写BAT脚本来自动执行编译步骤,简化开发流程。 #### 26. FilterAttach中分配NetBufferListPool - **NetBufferListPool**:用于存储NetBufferList的内存池。 - **分配方法**:在FilterAttach阶段,可以通过NdisAllocateNetBufferLists函数分配NetBufferListPool。 #### 27. DRIVER_CORRUPTED_EXPOOL bug - **DRIVER_CORRUPTED_EXPOOL**:表示驱动程序非法访问了非分页池内存。 - **解决办法**:检查代码逻辑,确保所有内存操作都是合法的。 #### 28. 中断请求级 - **中断请求级**:定义了中断处理程序执行的优先级。 - **调整策略**:合理的中断请求级设置对于提高系统性能至关重要。 #### 29. 基于NDISFilter抓包 - **抓包工具**:使用NDISFilter开发的抓包工具可以实现对网络数据包的实时捕获。 - **应用场景**:网络监控、故障排查等。 #### 30. 大数据是否需要封装在多个MDL中发送 - **MDL**:当数据量较大时,可以将其分割成多个MDL进行发送。 - **封装方法**:通过NdisAllocateSharedMemory等函数来分配和管理MDL。 #### 31. 如何区分不同的FilterModuleInstance - **实例标识**:每个FilterModuleInstance都应该有自己的唯一标识符。 - **区分方法**:通过设置不同的标识符来区分不同的实例。 #### 32. InsertHeadList和CONTAINING_RECORD - **InsertHeadList**:将指定的元素插入到链表头部。 - **CONTAINING_RECORD**:获取指向包含特定类型的记录的指针。 #### 33. 疑问:为何无线网卡无法发送数据? - **常见原因**:驱动程序错误、硬件故障、配置问题等。 - **解决思路**:检查驱动日志、使用调试工具等。 #### 34. 疑问:数据包Length增大的原因 - **Length增大**:可能是由于添加了额外的头部信息或填充数据。 - **检查方法**:对比原始数据包和处理后的数据包大小差异,定位问题所在。 #### 35. 在驱动中使用链表 - **链表使用**:链表是驱动程序中常用的数据结构之一,用于组织和管理数据。 - **应用场景**:数据包队列、缓存管理等。 #### 36. 使用DeviceIoControl通信 - **DeviceIoControl**:用于与设备驱动程序进行交互。 - **通信方式**:通过发送IOCTL命令来实现驱动与应用程序之间的通信。 #### 37. 纵横捭阖C++之从异步谈起 - **异步编程**:一种非阻塞式的编程模型,可以提高程序的响应速度。 - **应用场景**:网络编程、多线程编程等。 #### 38. Windows系统编程之异步I/O和完成端口 - **异步I/O**:允许程序在等待I/O操作完成的同时继续执行其他任务。 - **完成端口**:Windows操作系统提供的一种机制,用于高效处理大量并发的I/O操作。 #### 39. 驱动和应用层的异步通信 - **通信方式**:驱动程序和应用程序之间的异步通信可以通过共享内存、事件通知等方式实现。 - **应用场景**:数据同步、状态更新等。 #### 40. 关于DeviceIoControl实现异步的笔记【1】 - **笔记内容**:详细介绍如何使用DeviceIoControl实现异步通信的具体步骤和技巧。 - **实践意义**:有助于开发者更好地理解异步通信的实现机制。 #### 41. 关于DeviceIoControl实现异步的笔记【2】 - **笔记内容**:进一步深入探讨DeviceIoControl实现异步通信的关键技术和最佳实践。 - **学习价值**:通过实际案例加深对异步通信的理解。 #### 42. Windows NT驱动程序开发人员提示--应注意避免的事项 - **开发提示**:包括内存管理、异常处理等方面的注意事项。 - **避免事项**:例如非法内存访问、死锁等。 #### 43. 疑问:关于内存释放 - **释放原则**:遵循“谁分配,谁释放”的原则。 - **释放技巧**:使用智能指针、RAII(Resource Acquisition Is Initialization)等技术简化内存管理。 #### 44. WDK+Visual Studio 2008配置编译驱动 - **编译环境**:使用Visual Studio 2008和WDK配置驱动程序的开发环境。 - **编译步骤**:包括项目创建、依赖库配置、编译参数设置等。 #### 45. DebugPrint格式说明符 - **格式说明符**:用于控制DbgPrint输出的格式。 - **常见格式**:例如"%s"用于输出字符串,"%d"用于输出十进制整数等。 #### 46. Filter发送自定义数据详解 - **自定义数据**:Filter驱动可以发送自定义的数据包。 - **发送方法**:通过NdisBuildPacket等函数构建数据包,并通过适当的OID请求发送出去。 #### 47. 如何在内核中获得当前系统时间 - **获取方法**:使用KeQuerySystemTime或KeQueryTickCount等函数可以获得当前系统时间。 - **应用场景**:用于记录关键操作的时间戳。 #### 48. 在Filter驱动内核中获取IP地址 - **获取方法**:通过查询NDIS对象或者使用特定的OID请求可以获得IP地址。 - **应用场景**:网络监控、日志记录等。 #### 49. Ndis过滤驱动:拷贝NetBufferList数据 - **拷贝方法**:使用NdisMCopyFromBusMemory等函数可以从NetBufferList中拷贝数据。 - **注意事项**:确保内存对齐和数据长度正确。 #### 50. Filter驱动:过滤(修改)接受数据包 - **过滤方法**:Filter驱动可以通过修改NetBufferList中的数据来实现数据包的过滤或修改。 - **应用场景**:实现防火墙、入侵检测系统等功能。
剩余211页未读,继续阅读
- 粉丝: 0
- 资源: 5
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- LABVIEW程序实例-DS写数据.zip
- LABVIEW程序实例-DS写属性数据.zip
- LABVIEW程序实例-graph接受的数据类型.zip
- LABVIEW程序实例-TCP读数据.zip
- LABVIEW程序实例-Launch DS Server if Local URL.zip
- LABVIEW程序实例-web写数据.zip
- LABVIEW程序实例-TCP写数据.zip
- LABVIEW程序实例-web发布程序.zip
- LABVIEW程序实例-xy Graph.zip
- LABVIEW程序实例-按钮的机械动作.zip
- LABVIEW程序实例-While循环的先检查后执行.zip
- LABVIEW程序实例-保存二进制文件附加文件头2.zip
- LABVIEW程序实例-保存波形文件.zip
- LABVIEW程序实例-保存二进制文件附加文件头1.zip
- LABVIEW程序实例-保存二进制文件附加文件头3.zip
- LABVIEW程序实例-波形属性.zip