WEB开发网
开发学院软件开发VC 文件过滤系统驱动开发Filemon学习笔 阅读

文件过滤系统驱动开发Filemon学习笔

 2007-12-30 21:37:20 来源:WEB开发网   
核心提示: 这个函数通过查找KPEB (Kernel Process Environment Block),取得进程名,文件过滤系统驱动开发Filemon学习笔(3),GetProcessNameOffset主要是调用PsGetCurrentProcess取得KPEB基址,然后搜索KPEB,通过代码:

这个函数通过查找KPEB (Kernel Process Environment Block),取得进程名,GetProcessNameOffset主要是调用PsGetCurrentProcess取得KPEB基址,然后搜索KPEB,得到ProcessName相对KPEB的偏移量,存放在全局变量ProcessNameOffset中,得到此偏移量的作用是:无论当前进程为哪个,其名字在KPEB中的偏移量不变,所以都可以通过此偏移量得到。而在入口点函数DriverEntry执行时,当前进程必为系统进程,所以在此函数中方便地根据系统进程名SYSNAME(#define SYSNAME "System")得到此偏移量。

分发函数剖析:

在入口点函数中,通过代码:

for( i = 0; i <= IRP_MJ_MAXIMUM_FUNCTION; i++ ) {
      DriverObject->MajorFunction[i] = FilemonDispatch;
}
简单地把各个分发例程设置成了FilemonDispatch; 然后我们追踪其函数体:NTSTATUS
FilemonDispatch(
  IN PDEVICE_OBJECT DeviceObject,
  IN PIRP Irp
  )
{
  //
  // Determine if its a request from the GUI to us, or one that is
  // directed at a file system driver that we've hooked
  //
  if( ((PHOOK_EXTENSION) DeviceObject->DeviceExtension)->Type == GUIINTERFACE ) {
    return FilemonDeviceRoutine( DeviceObject, Irp );
  } else {
    return FilemonHookRoutine( DeviceObject, Irp );
  }
}

函数体先判断需要处理IRP包的设备对象的类型,看是属于控制设备对象,还是属于用于挂接并监控文件读写操作的过滤设备对象。如果是属于后者 则进入:FilemonHookRoutine( DeviceObject, Irp )

上一页  1 2 3 4 5 6  下一页

Tags:文件 过滤

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接