【发布时间】: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
-
当我从桌面拖放文件时,isNewFile 标志为 TRUE
- isNewFile 1--createDisposition:
-
当我从 Windows 资源管理器拖放文件时,isNewFile 始终为 FALSE。
- isNewFile 0--createDisposition:
有什么问题吗?
谢谢大家。
【问题讨论】:
-
这是文件的唯一 IRP_MJ_CREATE 吗?或者 Windows 资源管理器是否正在尝试打开它以检查它是否存在,或者出于其他原因?您可能需要查看诸如进程资源管理器之类的内容,以尝试了解资源管理器在做什么以及为什么它以不同的方式打开/创建文件。
-
我测试了很多次,但是我不知道为什么我使用all 列出所有要过滤的请求时isNewFile标志为false的原因。现在,我只使用 IRP_MJ_CREATE 请求,效果很好。
标签: c++ windows driver minifilter