Минифильтр Проверить создание нового файла на жестком диске?

Я разрабатываю минифильтр. Я проверяю создание нового файла (перетаскивая & падение) на жестком диске (т.е. 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: <0x00000002>
  2. Когда я тащу & удалить файл (ы) из проводника Windows, isNewFile всегда ЛОЖЬ.

    • isNewFile 0 — createDisposition: <0x00000001>

Что-то не так?

Спасибо всем.

0

Решение

Что касается перетаскивания, если это происходит в том же объеме, он проходит через FltSetInformationFile при переименовании. но если том будет другим, то будет создан новый файл @ содержимое файла назначения. Вы можете проверить это поведение с помощью таких инструментов, как ProcMon.

0

Другие решения


По вопросам рекламы [email protected]