Как отменить операцию переименования в драйвере минифильтра

Я хочу отменить операцию переименования в моем минифильтре. Я написал код, который определяет, когда файл переименовывается, но я не понимаю, как на самом деле отменить операцию. Может ли кто-нибудь помочь мне с этим?

Вот моя процедура обратного вызова, которая обнаруживает переименование файла.

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;
}

person codeDom    schedule 12.11.2016    source источник


Ответы (1)


вам нужно заполнить 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;
}
person RbMm    schedule 12.11.2016