0
我正在開發一個微過濾器。我檢查一個新的文件創建(通過拖動&下拉)在硬盤上(即D :)。我做如下:Minifilter檢查新文件在硬盤上創建?
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
當我拖動從桌面&拖放文件(S),isNewFile標誌爲TRUE
- isNewFile 1 - createDisposition:< 0x00000002>
當我從Windows資源管理器拖放&拖放文件時,isNewFile始終爲FALSE。
- isNewFile 0 - createDisposition會:< 00000001>
這有什麼錯?
謝謝大家。
這是文件唯一的IRP_MJ_CREATE嗎?或者,Windows資源管理器正在嘗試打開它來檢查它是否存在,或出於其他原因?你可能需要看看像進程管理器這樣的東西,試圖理解Explorer正在做什麼以及爲什麼它以不同的方式打開/創建文件。 – lordjeb
我測試了很多次,但我不知道當我使用全部**時,爲什麼isNewFile標誌是錯誤的原因**列出所有請求來過濾**。現在,我只使用IRP_MJ_CREATE請求,它工作正常。 – GSP