Как получить исходный путь скопированного файла на IRP_Create в минифильтре - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь создать минифильтр для отслеживания всех операций с файлами. При копировании файла из одного места в другое я получаю имя файла. Но мне нужно найти исходный путь и целевой путь. следующий блок кода используется для получения имени файла.

FLT_PREOP_CALLBACK_STATUS MiniPreCreate(PFLT_CALLBACK_DATA Data,PCFLT_RELATED_OBJECTS FltObjects , PVOID * CompletionContext){
PFLT_FILE_NAME_INFORMATION FileNameInfos;
NTSTATUS status;
WCHAR Name[200] = {0};
status=FltGetFileNameInformation(Data,FLT_FILE_NAME_NORMALIZED|FLT_FILE_NAME_QUERY_DEFAULT,&FileNameInfos);
if(NT_SUCCESS(status))
{
    status = FltParseFileNameInformation(FileNameInfos);
    if(NT_SUCCESS(status))
    {
        if(FileNameInfos->Name.MaximumLength<260)
        {
            RtlCopyMemory(Name,FileNameInfos->Name.Buffer,FileNameInfos->Name.MaximumLength);
            DbgPrint("Minifilter ::File Name %ws  \n",Name);

        }
    }
    FltReleaseFileNameInformation(FileNameInfos);
}
return FLT_PREOP_SUCCESS_WITH_CALLBACK;                                     
} 

1 Ответ

0 голосов
/ 23 апреля 2019

CopyFile не является примитивной функцией файловой системы.В вашем фильтре вы увидите несколько вызовов IRP_MJ_CREATE для открытия источника и места назначения, а также IRP_MJ_READ и IRP_MJ_WRITE для копирования данных.Вы, вероятно, увидите гораздо больше, чем ожидаете, даже для простой операции.

...