diskSpy
所属分类:磁盘编程
开发工具:Delphi
文件大小:895KB
下载次数:247
上传日期:2007-02-06 16:53:08
上 传 者:
qiaodong999
说明: 一个高效的磁盘操作监控程序源代码, 可监视任何对硬盘的操作,记录详细过程.
(an efficient disk operations monitoring program source code, can monitor any of the hard drive operation, a detailed record of the process.)
文件列表:
248300\FILESPY\SRC\DIRS (384, 2000-07-20)
248300\Dirs (46, 2002-04-30)
248300\KENERL\MAKEFILE (267, 1997-10-02)
248300\FILESPY\SRC\INSTALL\MAKEFILE (269, 2000-07-20)
248300\Install\MAKEFILE (269, 2000-07-20)
248300\FILESPY\SRC\KERNEL\MAKEFILE (252, 2000-07-20)
248300\FILESPY\SRC\UNINST\MAKEFILE (269, 2000-07-20)
248300\UnInstall\MAKEFILE (269, 2000-07-20)
248300\FILESPY\SRC\USER\MAKEFILE (249, 2000-07-20)
248300\User\MAKEFILE (249, 2000-07-20)
248300\FILESPY\SRC\INSTALL\SOURCES (232, 2000-07-20)
248300\Install\SOURCES (232, 2000-07-20)
248300\FILESPY\SRC\KERNEL\SOURCES (736, 2000-07-20)
248300\FILESPY\SRC\UNINST\SOURCES (231, 2000-07-20)
248300\UnInstall\SOURCES (231, 2000-07-20)
248300\FILESPY\SRC\USER\SOURCES (735, 2000-07-20)
248300\User\SOURCES (735, 2000-07-20)
248300\KENERL\Sources (210, 2002-05-08)
248300\KENERL\Makefile.inc (144, 1999-04-25)
248300\KENERL\DebugPrint.h (1053, 1999-03-29)
248300\FILESPY\SRC\KERNEL\FILESPY.H (6807, 2000-07-20)
248300\FILESPY\SRC\KERNEL\fspyKern.h (14007, 2000-07-20)
248300\FILESPY\SRC\USER\fspyLog.h (14292, 2000-07-20)
248300\User\fspyLog.h (457, 2002-04-30)
248300\FILESPY\SRC\INSTALL\fspyServ.h (719, 2000-07-20)
248300\Install\fspyServ.h (718, 2002-04-30)
248300\KENERL\MyFileSpy.h (1292, 2002-05-08)
248300\KENERL\MySpyKer.h (2541, 2002-05-13)
248300\KENERL\RESOURCE.H (456, 2002-04-30)
248300\KENERL\DebugPrint.c (30689, 1999-05-19)
248300\KENERL\Dispatch.c (15228, 2002-05-13)
248300\FILESPY\SRC\KERNEL\FILESPY.C (113205, 2000-07-20)
248300\FILESPY\SRC\KERNEL\fspyLib.c (56875, 2002-04-12)
248300\FILESPY\SRC\USER\fspyLog.c (31789, 2000-07-20)
248300\FILESPY\SRC\USER\fspyUser.c (19172, 2000-07-20)
248300\User\fspyUser.c (5311, 2002-05-10)
248300\KENERL\Init.c (11692, 2002-05-10)
248300\FILESPY\SRC\INSTALL\INSTALL.C (8215, 2000-07-20)
248300\Install\INSTALL.C (8222, 2002-05-08)
248300\FILESPY\SRC\UNINST\UNINST.C (4380, 2000-07-20)
... ...
怎样实现对硬盘的监控
TigerZD
MyFileSpy是我根据IFS KIT包里的File Spy例子修改而成,主要是为了初学者能很容易的掌握监控硬盘的驱动程序的实现原理。
为了便于理解,我将File Spy中与FASTIODISPATCH有关的全部删去,完全用标准的WDM中的回调例程来实现;并且将与控制台打印有关的也删去。因此可以清楚的看到,实现对硬盘的监控主要有以下几步:
1、使用ZwCreateFile打开到设备的文件句柄,如:
// open the file object for the given device
status = ZwCreateFile(
&fileHandle,
SYNCHRONIZE|FILE_READ_DATA,
&objectAttributes,
&openStatus,
NULL,
0,
FILE_SHARE_READ|FILE_SHARE_WRITE,
FILE_OPEN,
FILE_SYNCHRONOUS_IO_NONALERT/*|FILE_DIRECTORY_FILE*/,////可以设置为打开目录
NULL,
0);
2、打开获得文件句柄的卷对象。即:
// get a pointer to the volumes file object
status = ObReferenceObjectByHandle(
fileHandle,
FILE_READ_DATA,
*IoFileObjectType,
KernelMode,
(PVOID*)&volumeFileObject,
NULL);
3、获得我们想挂接的对象的设备对像,使用
nextDriverDeviceObject =
IoGetRelatedDeviceObject( volumeFileObject );
4、根据想挂接的设备对像的类型建立合适的新设备对象,并将其挂接到设备调用链中。即:
status = IoCreateDevice(
DeviceObject->DriverObject,
sizeof(DEVICE_EXTENSION),
NULL,
nextDriverDeviceObject->DeviceType,
0,
FALSE,
&attachedDeviceObject);
//...
// Add our device object to chain
devext->NextDriverDeviceObject = IoAttachDeviceToDeviceStack(
attachedDeviceObject,
nextDriverDeviceObject );
至此,我们就完成了对指定设备对象的连接,在我们自己的驱动程序的Dispatch例程中就会截获对指定设备对象的所有IO调用。例子中我只是在IRP_MJ_CREATE调用中简单的打印了一下信息。
对挂接的设备对象解除挂接时,使用IoDetachDevice(devext->NextDriverDeviceObject);
需要说明的是:
1、这个例子还不完善,主要是为了容易看懂,有些清理工作没有完成。
2、虽说这个例子是IFS KIT包里的,但是在我删去FASTIODISPATCH的调用后,现在这个例子只需做简单的改动(将#include 改为#include ,InitializeObjectAttributes参数中的OBJ_KERNEL_HANDLE注释掉)即可在win***下编译通过,我个人认为不会影响其主要功能,但是我只是编译成功了,由于***下没有Severce调用,需要做一个INF文件安装驱动程序,因此我没有实验。
3、现在这个例子我已经实现对硬盘各分区如C:和文件如C:\MyText.TXT的监控,对目录的监控需要修改ZwCreateFile的参数。
4、这个例子在Win2000下的使用方法和FileSpy一样。附件中会有FileSpy的源码,便于对照。
5、如果这个例子对你有所帮助,我感到不胜欣慰。
我的希望是对驱动程序开发有兴趣并有时间的同志能将此程序完善,并能将其更新。谢谢!
近期下载者:
相关文件:
收藏者: