Minifilter在硬盘上检查新文件?

时间:2015-02-05 04:38:43

标签: c++ windows driver minifilter

我正在开发一个微型过滤器。我检查硬盘上的新文件创建(通过拖放)(即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:&lt; 0x00000002&gt;
  2. 当我拖延时从Windows资源管理器中删除文件,isNewFile始终为FALSE。

    • isNewFile 0 - createDisposition:&lt; 0x00000001&gt;
  3. 有什么不对吗?

    谢谢大家。

1 个答案:

答案 0 :(得分:0)

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