我编写了minifilter驱动程序,用于防止写入PE文件。我在post-create回调中检查文件内容。如果格式匹配,我会尝试拨打FltCancelFileOpen
并返回STATUS_ACCESS_DENIED
。
但是可以通过使用CreateDisposition = FILE_OVERWRITE/FILE_OVERWRITE/FILE_SUPERSEDE
打开文件来劫持此内容。在这种情况下,在调用post-create-callback时,文件已被截断。
如何克服这个问题?
答案 0 :(得分:1)
更好的选项将检查预创建回调和拒绝文件打开,并对现有文件具有写访问权限。您可以通过从预创建中返回FLT_PREOP_COMPLETE
并在CallbackData->IoStatus.Status
中设置相应的错误来实现此目的。
答案 1 :(得分:0)
试试这个:
FltCancelFileOpen( FltObjects->Instance, FltObjects->FileObject );
Data->IoStatus.Status = STATUS_ACCESS_DENIED;
Data->IoStatus.Information = 0;
并返回
FLT_POSTOP_FINISHED_PROCESSING;
在GitHub的microsoft扫描仪示例中的完整示例