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

问题描述 投票:0回答:1

我正在尝试创建一个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;                                     
} 
c++ c windows filesystems minifilter
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.