如何在minifilter中的IRP_Create上获取复制文件的源路径

时间:2018-11-15 14:14:02

标签: c++ c windows filesystems minifilter

我试图创建一个微型过滤器来监视所有文件的操作。将文件从一个位置复制到另一个位置时,我得到一个文件名。但是我需要找到源路径和目标路径。 以下代码块用于获取文件名。

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 :(得分:0)

CopyFile不是文件系统原始函数。您将在过滤器中看到的是用于打开源和目标的多个IRP_MJ_CREATE调用,以及用于复制数据的IRP_MJ_READ和IRP_MJ_WRITE。即使通过简单的操作,您也会看到比预期更多的东西。