我刚刚接触Windows文件系统,想在Win2000下用NTDDK开发一个文件系统过滤驱动,现在处理IRP_MJ_CREATE时,想实现以下功能:监视user创建文件操作,如果是需要备份的文件则驱动层处理创建备份文件;最根本的解决方法是写一个创建文件的IRP直接下发,我想知道如何创建这个IRP呢?或者有其他办法可以实现上述功能?希望各位高手指点,不胜感激!

解决方案 »

  1.   

    PIRP 
        IoBuildAsynchronousFsdRequest(
            IN ULONG  MajorFunction,
            IN PDEVICE_OBJECT  DeviceObject,
            IN OUT PVOID  Buffer,            /* optional */
            IN ULONG  Length,                /* optional */
            IN PLARGE_INTEGER  StartingOffset,        /* optional */
            IN PIO_STATUS_BLOCK  IoStatusBlock     /* optional */
            ); PIRP
        IoBuildSynchronousFsdRequest(
            IN ULONG  MajorFunction,
            IN PDEVICE_OBJECT  DeviceObject,
            IN OUT PVOID  Buffer,            /* optional */
            IN ULONG  Length,                /* optional */
            IN PLARGE_INTEGER  StartingOffset,        /* optional */
            IN PKEVENT  Event,
            OUT PIO_STATUS_BLOCK  IoStatusBlock
            ); PIRP 
        IoAllocateIrp(
            IN CCHAR  StackSize,
            IN BOOLEAN  ChargeQuota
            ); 分配后,根据需要,查IRP结构,然后修改通过上面创建的IRP,调用IoCallDriver(..)向下传
      

  2.   

    关于安全重入,你可以在你的IRP中找一个标志,在你的处理IRP_MJ_CREATE的例程中判断这个标志,如果有就处理,没有就IoCallDriver
      

  3.   

    谢谢大家的回复,我是想“Win2000下用NTDDK开发一个文件系统过滤驱动”“写一个创建文件的IRP直接下发”,以上两位的描述不能解决这个问题,不过还是要谢谢两位;期待高手指点。
      

  4.   

    这些问题你要到 OSR 上去找答案
      

  5.   

    FileObject->FsContext
    希望能对你有帮助
      

  6.   

    软件名称:SEFS安全透明加密内核V1.02
    软件版本:1.02
    建议分类:系统安全/文件加密
    软件大小:383K
    安装平台:Win2000/xp/2003
    软件语言:简体中文/繁体中文/英文
    软件授权:共享软件
    软件主页:http://www.sefs.net
    支持邮箱:[email protected]
    软件下载:http://www.sefs.net/setup.rar软件简介:    SEFS是基于文件过滤驱动开发的透明加密平台,采用成熟的内核级驱动技术,于操作系统的内核,
    按照加密规则,实时高效强的强制加密机密资料。而这一切对上层的应用程序 完全透明。所有的加、
    解密操作均在内核受保护的内存区域完成, 高效安全。不会产生临时文件,不会有瞬间的峰值产生。
    应用程序请求对少就解密多少,性能高效。同时配套保护驱动,可防止进程注 入,内存Dump。有效
    控制合法用户对企业文档的操作,从而更加有效的保护了机密信息不被内部人员有意或无意的
    泄漏,以及二次非法传播。  
       SEFS提供应用层的全部开发实例,包括剪切板控制、截屏控制、打印控制等。友好简洁的开发接口
    将助你快速开发内网防泄密系统,极大提高产品的上市周期。技术特点:  1、规则产生的任意文件均强制加密、确保保存在硬盘上的机密为加密状态。就算硬盘或笔记本丢失也不会泄密。  2、文件加密标记识别采用指纹智能识别技术,加密标记植于文件本身,支持电子信封模式(PKCS7)和支持
         身份/身份组机制.方便交流和传输。  3、SEFS平台工作于文件系统驱动层面,可以支持内存映射文件的方式.而非一些基于API Hook方式的加密系
         统绝对无法支持内存映射文件。例如最常见的notepad(记事本)/另外可执行文件的加载执行均是通过内存
         映射文件的方式.  4、进程识别基于特征值,而非简单的基于进程名称判断。可防止进程改名、加壳等形式的攻击。  5、非授权进程无法读取密文。网络间受控文件的传输为密文。  6、FoxMail、OutLook或Ftp客户端等网络软件无法发送明文。(假设其为非授权进程的话)  7、所有的“文件另存”均为加密。不管是怎么样的文件名称。SEFS是智能识别应用程序的行为。    8、可防止线程注入。内存Dump等形式的攻击。    9、完美解决明文缓存问题,即便是密文正在被打开,也不能非法夺取明文    10、不仅透明,而且安全。在大力提高用户体验的同时,确保信息安全。    11、保护剪切板,非授权的进程不能粘贴来自涉密进程的内容,而授权进程间或、非授权进程间或授权进程粘贴
            来自任何进程的内容都是允许的。安全的同时又提供便利。    12、涉密进程打开中,禁止截屏操作。    12、涉密进程打开中,禁止打印。安装环境  * 客户端:Win2000/XP/2003 透明服务,全面兼容    * 办公类软件 Ms Office全系列(97/2000/xp/2003) Word/Excel/Access/PowerPoint   * 办公类软件 记事本(NotePad)(注:文件映射方式,HookAPI实现不能支持)  * 办公类软件 Adobeobat各种版本 和 Adobeobat Reader 各种版本  * 平面制图类:Photoshop全系列 、 CorelDraw全系列 、 画图(Mspaint)。   * 办公类软件 Ms Office全系列(97/2000/xp/2003) Word/Excel/Access/PowerPoint   * 2维CAD:AutoCAD系列、基于AutoCAD开发的系列如圆方BtoCAD   * 3维CAD:Pro/E、CATIA、Protel 99E、Power PCB   * ......  * 未列出的软件,可在一周内完成定制 
      

  7.   

    DISPACH层不能用信号量堵塞的,一般都是将IRP排队到一个队列,默认的是StartIO队列,当然也可以自己作队列了,看看WDM programing
      

  8.   

    其实这个问题在很久前的 IFS FAQ 里已经介绍的很清楚,包括处理方法以及每种方法可能带来的问题。IFS FAQ 里的 Q34 一共介绍了四种方法,包括自己从头建立 IRP发送,使用 ShadowDevice,使用特征字符串,根据线程 ID,在 XP 下使用IoCreateFileSpecifyDeviceObjectHint() 函数。并且把以上几种在不同环境下使用要处理的问题也做了简单的介绍。且在 Q33 里介绍了在 CIFS 碰到的 FILE_COMPLETE_IF_OPLOCKED 问题的解决方法。
      

  9.   

    下发例程类似于如下代码:
    NTSTATUS DefaultHandler(PDEVICE_OBJECT fdo, PIRP Irp)
    {
      IoSkipCurrentIrpStackLocation(Irp);
      PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension;
      return IoCallDriver(pdx->LowerDeviceObject, Irp);
    }