我试图创建一个微型过滤器来监视所有文件的操作。将文件从一个位置复制到另一个位置时,我得到一个文件名。但是我需要找到源路径和目标路径。 以下代码块用于获取文件名。
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;
}
答案 0 :(得分:0)
CopyFile不是文件系统原始函数。您将在过滤器中看到的是用于打开源和目标的多个IRP_MJ_CREATE调用,以及用于复制数据的IRP_MJ_READ和IRP_MJ_WRITE。即使通过简单的操作,您也会看到比预期更多的东西。