资讯
安全
论坛
下载
读书
程序开发
数据库
系统
网络
电子书
微信学院
站长学院
QQ
手机软件
考试
安全
|
web开发
|
软件开发
|
移动开发
|
数据库
|
网络
|
系统
|
网站
|
考试认证
|
其他
|
读书频道
>
网站
>
网页设计
>
网络分析技术揭秘:原理、实践与WinPcap深入解析
3.1.1 驱动对象(DRIVER_OBJECT)
12-08-11
叶孤城
收藏
我要投稿
本文所属图书 >
网络分析技术揭秘:原理、实践与WinPcap深入解析
本书结合著名的开源软件库WinPcap来说明网络分析技术的实现原理及使用方法。其中包括WinPcap内核驱动,编译与使用,数据包的捕获、发送、内核过滤与接收,以及网络流量的统计与网络状态的分析等重要内容,而且作...
立即去当当网订购
由于WinPcap的内核驱动程序是一个协议驱动程序,因此涉及了一些编写Windows驱动程序与NDIS协议驱动程序的基础知识。为了更好地理解WinPcap的内核驱动程序,本章将对此驱动程序所涉及的基础知识进行简要介绍,为后续章节的理解奠定基础。
3.1Windows驱动程序基础知识
本节主要描述与编写WinPcap驱动程序相关的,且经常使用的一些Windows驱动程序的基本要素。
3.1.1驱动对象(DRIVER_OBJECT)
每个驱动程序都有唯一的驱动对象与之相对应,该驱动对象在驱动程序被加载时由内核的对象管理程序所创建。驱动对象用DRIVER_OBJECT数据结构体表示,其作为驱动程序的一个实例被内核加载,内核I/O管理器对一个驱动程序只加载一个实例。
驱动对象的数据结构体DRIVER_OBJECT的具体定义如下:
typedef struct _DRIVER_OBJECT {
CSHORT Type;
CSHORT Size;
/*
*DeviceObject为每个驱动程序所创建的一个或多个设备对象的链表,
*Flags提供一个扩展的标识来定位驱动对象
*/
PDEVICE_OBJECT DeviceObject;
ULONG Flags;
/*下列各成员字段描述驱动程序从什么地方被加载*/
PVOID DriverStart;
ULONG DriverSize;
PVOID DriverSection;
PDRIVER_EXTENSION DriverExtension;
/*驱动名称*/
UNICODE_STRING DriverName;
/*指向注册表中硬件信息的路径*/
PUNICODE_STRING HardwareDatabase;
/*如果驱动支持“fast I/O”,就指向一个“fast I/O”的派遣函数数组*/
PFAST_IO_DISPATCH FastIoDispatch;
/*
*描述该特定驱动的入口点
*主函数(MajorFunction)派遣函数表必须是对象最后的成员
*/
PDRIVER_INITIALIZE DriverInit;
PDRIVER_STARTIO DriverStartIo;
PDRIVER_UNLOAD DriverUnload;
PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];
} DRIVER_OBJECT;
typedef struct _DRIVER_OBJECT *PDRIVER_OBJECT;
下面分别描述驱动对象中驱动程序可访问成员的具体含义。
PDEVICE_OBJECT DeviceObject:每个驱动对象会有一个或多个设备对象。每个设备对象都有一个指针(NextDevice)指向下一个设备对象,最后一个设备对象的指针指向空。DeviceObject指向驱动对象的第一个设备对象。在成功调用IoCreateDevice函数后该成员会被自动更新。一个驱动程序可使用该成员与设备对象(DEVICE_OBJECT)的NextDevice成员遍历该驱动对象的所有设备对象。在驱动被卸载的时候,需要遍历每个设备对象,并将其删除。
PUNICODE_STRING HardwareDatabase:指向注册表中硬件配置信息的路径,用Unicode字符串表示。该字符串内容一般为\REGISTRY\MACHINE\HARDWARE\DESCRIPTION\SYSTEM。
PFAST_IO_DISPATCH FastIoDispatch:指向一个定义驱动快速I/O结构体的入口点,该成员只用于文件系统驱动与网络传输驱动。
PDRIVER_INITIALIZE DriverInit:是DriverEntry例程的入口点,由I/O管理器设置。
PDRIVER_STARTIO DriverStartIo:是StartIo例程的的入口点,如果需要,由DriverEntry例程设置,否则为NULL。
PDRIVER_UNLOAD DriverUnload:指向驱动卸载时所用回调函数的入口点。
PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION+1]:一个函数指针数组,数组MajorFunction中的每个成员保存着一个指针,每个指针指向一个处理,对应输入/输出请求包(I/O Request Package,IRP)IRP_MJ_XXX的派遣函数DispatchXxx。
派遣函数(DispatchXxx)的原型如下:
NTSTATUS (*PDRIVER_DISPATCH) (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
点击复制链接 与好友分享!
回本站首页
分享到:
更多
您对本文章有什么意见或着疑问吗?请到
论坛讨论
您的关注和建议是我们前行的参考和动力
上一篇:
1.3 功能
下一篇:
1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
112 |
1.6 本书概要
112 |
1.5.5 软件
112 |
1.5.4 可扩展性
112 |
1.5.3 融合
112 |
1.5.2 虚拟化
112 |
1.5.1 以太网的使用
112 |
1.5 云网络的特征
112 |
1.4 什么是云网络
3.2.3 Bootstrap栅格系统
3.4.4 自适应显示/隐藏页面内容
3.3.1 固定式布局
2.1.1 下载Bootstrap
3.3.2 流式布局
3.4.6 响应式Bootstrap
3.4.2 设计响应式图片
3.2.4 响应式Bootstrap栅格系统
文章
下载
读书
·
Win2000下关闭无用端口
·
禁止非法用户登录综合设置 [win9x篇]
·
关上可恶的后门——消除NetBIOS隐患
·
网络入侵检测系统
·
潜伏在Windows默认设置中的陷井
·
调制解调器的不安全
·
构建Windows 2000服务器的安全防护林
·
SQL Server 2000的安全配置
·
Windows优化大师注册机源码
·
Aspcode动画教程
·
WIN 2000服务器防止ICMP数据包攻击教程
·
实现网络隐身的简单方法
·
手工进行克隆帐号
·
用W32DASM破解网页合并器的密码
·
注册表操作动画教程
·
冰河陷阱v1.2
·
黑客攻防技术宝典:Web实战篇(第2版)
·
超级网管员——网络安全
·
代码大全(第二版)
·
软件之道:软件开发争议问题剖析
·
CSS插件工具箱
·
CSS入门经典(第3版)
·
C#并行编程高级教程:精通.NET 4 Pa
·
CMMI+敏捷整合开发
关于我们
|
联系我们
|
广告服务
|
投资合作
|
版权申明
|
在线帮助
|
网站地图
|
作品发布
|
Vip技术培训
版权所有:
红黑联盟
--致力于做最好的IT技术学习网站