Я разрабатываю минифильтр. Я проверяю создание нового файла (перетаскивая & падение) на жестком диске (т.е. 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
Когда я тащу & удалить файл (ы) из проводника Windows, isNewFile всегда ЛОЖЬ.
Что-то не так?
Спасибо всем.
Что касается перетаскивания, если это происходит в том же объеме, он проходит через FltSetInformationFile при переименовании. но если том будет другим, то будет создан новый файл @ содержимое файла назначения. Вы можете проверить это поведение с помощью таких инструментов, как ProcMon.