【问题标题】:Minifilter Check new file create on harddisk?Minifilter 检查在硬盘上创建的新文件?
【发布时间】:2015-02-05 04:38:43
【问题描述】:

我正在开发一个微过滤器。我检查硬盘(即 D:)上的新文件创建(通过拖放)。我这样做:

isNewFile = FALSE;
if (Data
    && Data->Iopb
    && (Data->Iopb->MajorFunction == IRP_MJ_CREATE))
{
   // Get create disposition
   createDisposition = (Data->Iopb->Parameters.Create.Options >> 24) & 0x000000FF;

   // Check if new file is creating or not
   isNewFile = ((FILE_SUPERSEDE == createDisposition)
                || (FILE_CREATE == createDisposition)
                || (FILE_OPEN_IF == createDisposition)
                || (FILE_OVERWRITE == createDisposition)
                || (FILE_OVERWRITE_IF == createDisposition));

   // Write log
   PT_DBG_PRINT( PTDBG_TEST_STATUS,
                    ("isNewFile %d--createDisposition: <%08x>\n",
                                    isNewFile,
                                    createDisposition));
}

创建选项的价值

//
// Define the create disposition values at wdm.h
//
#define FILE_SUPERSEDE                  0x00000000
#define FILE_OPEN                       0x00000001
#define FILE_CREATE                     0x00000002
#define FILE_OPEN_IF                    0x00000003
#define FILE_OVERWRITE                  0x00000004
#define FILE_OVERWRITE_IF               0x00000005
#define FILE_MAXIMUM_DISPOSITION        0x00000005
  1. 当我从桌面拖放文件时,isNewFile 标志为 TRUE

    • isNewFile 1--createDisposition:
  2. 当我从 Windows 资源管理器拖放文件时,isNewFile 始终为 FALSE。

    • isNewFile 0--createDisposition:

有什么问题吗?

谢谢大家。

【问题讨论】:

  • 这是文件的唯一 IRP_MJ_CREATE 吗?或者 Windows 资源管理器是否正在尝试打开它以检查它是否存在,或者出于其他原因?您可能需要查看诸如进程资源管理器之类的内容,以尝试了解资源管理器在做什么以及为什么它以不同的方式打开/创建文件。
  • 我测试了很多次,但是我不知道为什么我使用all 列出所有要过滤的请求时isNewFile标志为false的原因。现在,我只使用 IRP_MJ_CREATE 请求,效果很好。

标签: c++ windows driver minifilter


【解决方案1】:

关于拖放,如果这发生在同一卷中,它会通过 FltSetInformationFile 作为重命名。但是如果卷不同,那么它将在@目标文件内容中创建新文件。您可以使用procmon 等工具检查此行为。

【讨论】:

  • 感谢您提供的有用工具!
猜你喜欢
  • 1970-01-01
  • 2013-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多