【发布时间】:2018-07-10 17:43:07
【问题描述】:
我正在尝试使用微过滤器阻止对文件 (C:\pass\secret.txt) 的访问。
当我尝试删除此文件时,我按预期收到“拒绝访问消息框”。 但我仍然可以在命令提示符下使用“del”命令删除文件。
命令提示符的作用与我尝试过的 powershell、资源管理器或任何其他程序有何不同?
我看到了这个帖子minifilter-driver-not-blocking-file-edition,但正如我所说,其他所有内容都被阻止了。
FltPreOperationCallback 函数:
FLT_PREOP_CALLBACK_STATUS PtPreOperationPassThrough(_Inout_ PFLT_CALLBACK_DATA Data, _In_ PCFLT_RELATED_OBJECTS FltObjects, _Flt_CompletionContext_Outptr_ PVOID *CompletionContext) {
NTSTATUS status;
UNREFERENCED_PARAMETER( FltObjects );
UNREFERENCED_PARAMETER( CompletionContext );
if (PtDoRequestOperationStatus(Data)) {
status = FltRequestOperationStatusCallback(Data, PtOperationStatusCallback, (PVOID)(++OperationStatusCtx));
if (!NT_SUCCESS(status)) {
PT_DBG_PRINT(PTDBG_TRACE_OPERATION_STATUS, ("PassThrough!PtPreOperationPassThrough: FltRequestOperationStatusCallback Failed, status=%08x\n", status));
}
}
if (Data->Iopb->MajorFunction == IRP_MJ_WRITE || Data->Iopb->MajorFunction == IRP_MJ_SET_INFORMATION || Data->Iopb->MajorFunction == IRP_MJ_CREATE) {
UNICODE_STRING ourFile;
RtlInitUnicodeString(&ourFile, L"\\pass\\secret.txt");
if (RtlCompareUnicodeString(&Data->Iopb->TargetFileObject->FileName, &ourFile, FALSE) == 0) {
DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL, "PtPreOperationPassThrough: %wZ\n", &Data->Iopb->TargetFileObject->FileName);
Data->IoStatus.Status = STATUS_ACCESS_DENIED;
Data->IoStatus.Information = 0;
return FLT_PREOP_COMPLETE;
}
}
return FLT_PREOP_SUCCESS_WITH_CALLBACK;
}
【问题讨论】:
-
驱动器 C 上的文件系统是什么?
-
如果您关闭所有这些环境并在重新启动它们后重试,差异是否仍然存在?
-
@stark 这是 NTFS (Windows 10 x64 Pro)
-
@Yunnosch 是的。我什至尝试了自己的 C++ 应用程序来删除这个文件,但它被阻止了。
标签: c command-line minifilter