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

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

Изменено 03.01.2018 8:50 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-.

С хуками 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;
    }