Minifilter и IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION
От: -prus-  
Дата: 25.12.14 10:12
Оценка:
Всем привет!

Есть минифильтр. Хочу перехватывать запись в файлы. Все отлично, кроме когда запись производится через Memory-Mapped Files. Данные в файл попадают, а в фильтре их не пойму где искать.
Почитал про IRP_MJ_ACQUIRE_FOR_SECTION_SYNCHRONIZATION, зарегистрировал ее и вижу в фильтре события SyncTypeCreateSection для файла.
И как бы что дальше не пойму чего делать... IRP_MJ_WRITE не приходят в указанном случае. Пытался экспериментировать — пробовал FsRtlRegisterFileSystemFilterCallbacks для PreAcquireForSectionSynchronization, но callback не вызывается никогда.
Тыкните носом, где искать записываемые данные в этом случае или что почитать? Не могу пока понять куда даже смотреть, опыта и знаний не хватает.

Сам пример, которым пытаюсь тестировать простенький:

#include <windows.h>

#define MAX_FILESIZE    1024*1024

int
main()
{
    HANDLE  hFile;
    HANDLE  hMapping;
    PUCHAR  puchData;

    hFile = CreateFile("e:\\Tmp\\mmf_write_test.txt", 
        GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 
        NULL, 
        CREATE_ALWAYS, 
        FILE_ATTRIBUTE_NORMAL, 
        NULL);

    if( hFile == INVALID_HANDLE_VALUE )
    {
        return -1;
    }

    hMapping = CreateFileMapping(hFile, 
        NULL, 
        PAGE_READWRITE, 
        0, 
        MAX_FILESIZE, 
        NULL);

    if( hMapping == NULL )
    {
        CloseHandle(hFile);
        return -2;
    }

    puchData = (PUCHAR)MapViewOfFile(hMapping, 
        FILE_MAP_WRITE, 
        0, 
        0, 
        0);

    if( puchData == NULL )
    {
        CloseHandle(hMapping);
        CloseHandle(hFile);
        return -2;        
    }

    memset(puchData, 0x41, MAX_FILESIZE);

    UnmapViewOfFile(puchData);
    CloseHandle(hMapping);
    CloseHandle(hFile);
     
    return 0;
}


Заранее благодарен капец как!
С уважением,
Евгений
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.