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、如果这个例子对你有所帮助,我感到不胜欣慰。 我的希望是对驱动程序开发有兴趣并有时间的同志能将此程序完善,并能将其更新。谢谢!

近期下载者

相关文件


收藏者