【问题标题】:Prevent file overwriting in pre-create-callback / post-create-callback防止在 pre-create-callback / post-create-callback 中覆盖文件
【发布时间】:2013-01-29 11:06:10
【问题描述】:

我编写了用于防止写入 PE 文件的 minifilter 驱动程序。我在创建后回调中检查文件内容。如果格式匹配,我尝试调用FltCancelFileOpen 并返回STATUS_ACCESS_DENIED

但这可以通过使用CreateDisposition = FILE_OVERWRITE/FILE_OVERWRITE/FILE_SUPERSEDE 打开文件来劫持。在这种情况下,文件在调用 post-create-callback 时已经被截断。

如何克服这个问题?

【问题讨论】:

  • 您不能在让文件系统尝试创建文件之前检查文件是否存在,如果存在,请检查文件格式,如有必要,请立即拒绝请求?

标签: windows driver minifilter


【解决方案1】:

更好的选择是检查预创建回调并拒绝以对现有文件的写访问权限打开文件。您可以通过从预创建返回 FLT_PREOP_COMPLETE 并在 CallbackData->IoStatus.Status 中设置适当的错误来做到这一点。

【讨论】:

  • 在预创建回调中发出另一个文件打开操作是不可行的。此外,由于 FAT 和 NTFS 文件系统中的文件名隧道,文件打开可能会在预创建中失败。我认为在预创建中将 FILE_OVERWRITE/FILE_SUPERSEDE 替换为 FILE_OPEN,将 FILE_OVERWRITE_IF 替换为 FILE_OPEN_IF(相同的配置而不截断)更合适。然后在创建后检查文件内容并模拟 FILE_OVERWRITE/FILE_SUPERSEDE/FILE_OVERWRITE_IF 截断文件。
【解决方案2】:

试试这个:

 FltCancelFileOpen( FltObjects->Instance, FltObjects->FileObject );
 Data->IoStatus.Status = STATUS_ACCESS_DENIED;
 Data->IoStatus.Information = 0;

然后返回

FLT_POSTOP_FINISHED_PROCESSING;

GitHub 上 microsoft 的扫描仪示例中的完整示例

【讨论】:

    猜你喜欢
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    • 2019-10-14
    • 2021-12-14
    • 2020-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多