2016-11-12 3 views
1

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

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

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

ответ

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