您的位置:首页 > 编程语言

DiskPerf代码分析(供学习驱动开发的朋友参考)

2011-05-10 14:09 501 查看
DiskPerf代码分析
作者:SysinternalBoy 日期:2011-4-8
总体分析:
Diskperf过滤驱动监视磁盘的存取操作,并且获取磁盘的性能数据。该驱动支持PnP,电源管理和WMI。但该驱动不支持64位平台。

(The DiskPerf filter driver monitors disk access and captures performance data. This driver supports Plug and Play (PnP), power management, and Microsoft Windows Management Instrumentation (WMI). This driver is not 64-bit compliant.【from 《wdk》】)

主要函数分析:
1. DiskEntry函数(详细流程参见流程图DiskEntry.vsd)
NTSTATUS
DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
)
函数说明:
可安装驱动的初始化入口点。
这个方法直接被I/O管理器调用,用来创建磁盘性能驱动。这里的driver对象创建好,
然后Pnp管理器调用DiskPerfAddDevice来把它附加到启动设备上。
参数:
DriverObject – 磁盘性能驱动对象。
RegistryPath – 指向一个unicode的字符串,表示路径。
也就是注册表中,驱动特定的键。
返回值:
STATUS_SUCCESS 如果成功的话
2. DiskPerfAddDevice函数(详解DiskPerfAddDevice.vsd)
NTSTATUS
DiskPerfAddDevice(
IN PDRIVER_OBJECT DriverObject,
IN PDEVICE_OBJECT PhysicalDeviceObject
)
函数说明:
为对应得物理设备对象(PDO=Physical Device Object)创建一个新的过滤设备对
象(FiDO)。然后把这个设备对象“粘”到驱动的堆栈上去。
参数:
DriverObject – 磁盘性能驱动对象。
PhysicalDeviceObject – 下层驱动的物理设备对象。
返回值:
NTSTATUS
3. DiskPerfDispatchPnP函数(详细流程参见流程图DiskPerfDispatchPnP.vsd)
NTSTATUS
DiskPerfDispatchPnp(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
)
方法说明:
PNP分派
参数:
DeviceObject - 设备对象
Irp - I/O请求包
返回值:
NTSTATUS
4. DiskPerfRemoveDevice函数(详细流程参见DiskPerfRemoveDevice.vsd)
NTSTATUS
DiskPerfRemoveDevice(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
)
函数说明:
当设备被移除时调用此函数。
首先将把自身从WMI反注册,删除自身前把自己从
设备栈上移除。
参数:
DeviceObject – 指向设备对象的指针
Irp – 指向irp的指针
返回值:
移除设备后的状态
5. DiskPerfReadWrite函数(详细流程参见DiskPerfReadWrite.vsd)
NTSTATUS
DiskPerfReadWrite(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
)
函数说明:
这是diskperf驱动粘帖到的磁盘的读写入口点。
这个驱动收集统计信息并且设置完成方法,这样当
请求完成时可以收集额外的信息。然后调用下层的
驱动。
参数:
DeviceObject
Irp
返回值:
NTSTATUS
6. DiskPerfIoCompletion函数(详细流程参见DiskPerfCompletion.vsd)
NTSTATUS
DiskPerfIoCompletion(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PVOID Context
)
函数说明:
完成一个IRP后,本方法从系统获取控制。
它将计算IRP开始时间和当前时间的差异,
然后减小队列深度
参数:
DeviceObject –为IRP准备
Irp - 刚完成的I/O请求。
Context - 未使用
返回值:
IRP 的状态
7. DiskPerfDeviceControl函数(详细流程参见流程图DiskPerfDeviceControl.vsd)
NTSTATUS
DiskPerfDeviceControl(
PDEVICE_OBJECT DeviceObject,
PIRP Irp
)
函数说明:
设备控制分派函数,只处理磁盘性能设备控制。
所有其他的控制命令都直接发送给下层磁盘驱动。
磁盘性能驱动返回当前的性能数据快照。
参数:
DeviceObject – 活动上下文
Irp -设备控制参数快
返回值:
返回状态。
说明
1. 绿色字体为仔细研读的部分。
2. 驱动中有关电源管理、WMI的部分暂时没有仔细研究。
3. 有关IRP的同步机制以及有关的锁机制还不明白,有待进一步学习研究。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: