⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 实现对硬盘的监控.txt

📁 文件系统驱动开发的文档资料(IFS DDK)
💻 TXT
字号:
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 <ntifs.h>改为#include <WDM.h>,InitializeObjectAttributes参数中的OBJ_KERNEL_HANDLE注释掉)即可在win98下编译通过,我个人认为不会影响其主要功能,但是我只是编译成功了,由于98下没有Severce调用,需要做一个INF文件安装驱动程序,因此我没有实验。 
    3、现在这个例子我已经实现对硬盘各分区如C:和文件如C:\MyText.TXT的监控,对目录的监控需要修改ZwCreateFile的参数。 
    4、这个例子在Win2000下的使用方法和FileSpy一样。附件中会有FileSpy的源码,便于对照。 
    5、如果这个例子对你有所帮助,我感到不胜欣慰。 
     
    我的希望是对驱动程序开发有兴趣并有时间的同志能将此程序完善,并能将其更新。谢谢! 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -