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