我想在我的minifilter中取消重命名操作。我写过了 检测文件何时重命名的代码,但我不清楚如何 实际上取消了操作。任何人都可以帮我解决这个问题吗?
这是我的回调例程,用于检测文件重命名。
FLT_PREOP_CALLBACK_STATUS
PreSetInformation(
_Inout_ PFLT_CALLBACK_DATA Cbd,
_In_ PCFLT_RELATED_OBJECTS FltObjects,
_Flt_CompletionContext_Outptr_ PVOID *CompletionContext
)
{
if (Cbd->Iopb->Parameters.SetFileInformation.FileInformationClass == FileRenameInformation)
{
WCHAR buf[MAX_PATH] = { 0 };
PFILE_RENAME_INFORMATION renameInfo = Cbd->Iopb->Parameters.SetFileInformation.InfoBuffer;
memcpy(buf, renameInfo->FileName, renameInfo->FileNameLength);
DbgPrint("renameInfo %ws\n", buf);
if (anCondition(buf))
{
// TO DO: cancel a rename
}
}
return FLT_PREOP_SUCCESS_NO_CALLBACK;
}
答案 0 :(得分:2)
您需要填写Cbd->IoStatus
和return FLT_PREOP_COMPLETE
所以在你的代码中:
if (anCondition(buf))
{
// TO DO: cancel a rename
Cbd->IoStatus.Status = <some_status>;
Cbd->IoStatus.Information = <some_information>;//usually 0
return FLT_PREOP_COMPLETE;
}