mini filter驱动一般用于杀毒,加密,数据实时备份等。无论是杀毒软件,加密软件还是备份软件等都是基于这样一个基本事实,就是监控文件内容以及文件内容的变化,怎样监控检测文件内容?就是监控文件的读写操作,比如read,write,create等,mini filter支持监控文件的所有操作。
我们可以用下面的这些函数来处理文件名相关操作。
FltGetDestinationFileNameInformation
FltGetFileNameInformationUnsafe
比如我们可以用FltGetFileNameInformation在PreWrite中区获取文件名,代码如下所示:
下面的代码先获取文件名,然后判断文件名的扩展名是不是.ssmffile,如果是,则打印出文件名,以及要写入的数据长度,偏移量等。
PFLT_FILE_NAME_INFORMATION file_name_info = NULL;
status = FltGetFileNameInformation(Data, FLT_FILE_NAME_NORMALIZED | FLT_FILE_NAME_QUERY_DEFAULT, &file_name_info);
if (NT_SUCCESS(status))
{
WCHAR *ssmfflag = L".ssmffile";
SIZE_T len = sizeof(WCHAR) * wcslen(ssmfflag);
if (file_name_info->Name.Length > wcslen(ssmfflag) &&
RtlCompareMemory((char*)ssmfflag, (char *)((char *)file_name_info->Name.Buffer + file_name_info->Name.Length - len), len) == len)
{
PT_DBG_PRINT(PTDBG_TRACE_ROUTINES, ("The file name is %wZ,the offset is %u,len is %u", file_name_info->Name, iopb->Parameters.Write.ByteOffset, writeLen));
}
}
FltReleaseFileNameInformation(file_name_info);
}