Сообщение IRP_MJ_CREATE, минифильтр. Как отличить именно СОЗДАНИЕ файл от 03.01.2018 8:49
Изменено 03.01.2018 8:54 sergey77666
IRP_MJ_CREATE, минифильтр. Как отличить именно СОЗДАНИЕ файл
Вот такой код. Должно "лететь в лог" только создание файлов в обычном понимании.
Не папок.
И не открытие, а именно создание.
Но летит это всё.
Ясно, что нужно еще что-то проверять. Может кто подскажет? Желательно именно в Pre-, хотя в данном случае подошел бы и Post-.
С хуками SSDT работал, была эта проблема. Ладно, перешел на фильтры — и опять она. Неужели нельзя было хоть одно нормальное API сделать, хосспидя-ты-бозезьмой...
Не папок.
И не открытие, а именно создание.
Но летит это всё.
Ясно, что нужно еще что-то проверять. Может кто подскажет? Желательно именно в 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 сделать, хосспидя-ты-бозезьмой...
Не папок.
И не открытие, а именно создание.
Но летит это всё.
Ясно, что нужно еще что-то проверять. Может кто подскажет? Желательно именно в 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;
}