Информация об изменениях

Сообщение IRP_MJ_CREATE, минифильтр. Как отличить именно СОЗДАНИЕ файл от 03.01.2018 8:49

Изменено 03.01.2018 8:54 sergey77666

IRP_MJ_CREATE, минифильтр. Как отличить именно СОЗДАНИЕ файл
Вот такой код. Должно "лететь в лог" только создание файлов в обычном понимании.
Не папок.
И не открытие, а именно создание.
Но летит это всё.
Ясно, что нужно еще что-то проверять. Может кто подскажет? Желательно именно в Pre-, хотя в данном случае подошел бы и Post-.

С хуками SSDT работал, была эта проблема. Ладно, перешел на фильтры — и опять она. Неужели нельзя было хоть одно нормальное API сделать, хосспидя-ты-бозезьмой...

FLT_PREOP_CALLBACK_STATUS
PreFileOperationCallback (
    __inout PFLT_CALLBACK_DATA Data,
    __in PCFLT_RELATED_OBJECTS FltObjects,
    __deref_out_opt PVOID *CompletionContext
    ) {
    PFILE_OBJECT FileObject;
            
    if(FLT_IS_FS_FILTER_OPERATION(Data))
    {
        return FLT_PREOP_SUCCESS_NO_CALLBACK;
    }
            if (FltObjects->FileObject != NULL && Data != NULL) {
        FileObject = Data->Iopb->TargetFileObject;
                if(FileObject != NULL && Data->Iopb->MajorFunction == IRP_MJ_CREATE)
                {
                    // здесь еще проверка FltObjects->FileObject->FileName на NULL и его логирование
                }
            }
            
            
        return FLT_PREOP_SUCCESS_NO_CALLBACK;
    }
IRP_MJ_CREATE, минифильтр. Как отличить именно СОЗДАНИЕ файл
Вот такой код. Должно "лететь в лог" только создание файлов в обычном понимании.
Не папок.
И не открытие, а именно создание.
Но летит это всё.
Ясно, что нужно еще что-то проверять. Может кто подскажет? Желательно именно в Pre-, хотя в данном случае подошел бы и Post-.

Думаю так:
— перед созданием проверять, что файла нет, и по параметрам проверять, что с данными параметрами он должен быть создан (но как проверять, что его нет, не открывая его? и это не лучший вариант — а вдруг что-то помешает созданию? лучше иметь ОБА — и before, и по факту)
— а по папкам не знаю где в параметрах.

С хуками SSDT работал, была эта проблема. Ладно, перешел на фильтры — и опять она. Неужели нельзя было хоть одно нормальное API сделать, хосспидя-ты-бозезьмой...

FLT_PREOP_CALLBACK_STATUS
PreFileOperationCallback (
    __inout PFLT_CALLBACK_DATA Data,
    __in PCFLT_RELATED_OBJECTS FltObjects,
    __deref_out_opt PVOID *CompletionContext
    ) {
    PFILE_OBJECT FileObject;
            
    if(FLT_IS_FS_FILTER_OPERATION(Data))
    {
        return FLT_PREOP_SUCCESS_NO_CALLBACK;
    }
            if (FltObjects->FileObject != NULL && Data != NULL) {
        FileObject = Data->Iopb->TargetFileObject;
                if(FileObject != NULL && Data->Iopb->MajorFunction == IRP_MJ_CREATE)
                {
                    // здесь еще проверка FltObjects->FileObject->FileName на NULL и его логирование
                }
            }
            
            
        return FLT_PREOP_SUCCESS_NO_CALLBACK;
    }