File system driver

Тема в разделе "WASM.NT.KERNEL", создана пользователем btr, 21 май 2007.

  1. btr

    btr New Member

    Публикаций:
    0
    Регистрация:
    21 май 2007
    Сообщения:
    4
    Всем привет!
    Пытаюсь написать драйвер файловой системы. Он в общем-то начал работать, но только с теми программами, которые не используют отображение файлов на память (MapViewOfFile и все такое). Не подскажет ли кто, достаточно ли для маппинга стандартных запросов (IRP_MJ_XXX) или обязательно требуется реализовывать FAST_IO_XXX? И если без последних не обойтись, то где можно про них почитать? Хелп по DDK который у меня стоит (3790.1830) злорадно заявляет, что "Unfortunately, at the present time Fast I/O is not documented" и обещает в следующих версиях опубликовать.

    Заранее спасибо всем, кто захочет помочь.
     
  2. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    для драйвера своей файловой системы - не обязательно
    для фильтра - обязательно

    в IFSkit-е есть кое-что
    но лучше поищи исходники FileMon-А
     
  3. btr

    btr New Member

    Публикаций:
    0
    Регистрация:
    21 май 2007
    Сообщения:
    4
    Исходники FileMon'а я проштудировал. Но он фильтр и поэтому имет право сделать следующее:
    Код (Text):
    1. retval = hookExt->FileSystem->DriverObject->FastIoDispatch->FastIoRead(
    2.             FileObject, FileOffset, Length,
    3.             Wait, LockKey, Buffer, IoStatus, hookExt->FileSystem );
    Что и делает в общем-то. Так что назначение параметров и алгоритм работы функций понять затруднительно :dntknw:.
    TrueCrypt же вообще реализует не файловую систему, а диск. И поэтому к нему приходят только запросы на чтение/запись блоков. Так что тоже не прокатит.

    Сейчас раскопал пример реализации нескольких функций в DDK. Буду копаться.
     
  4. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    btr
    Не обязательно FAST_IO реализовывать. Они организованны для того, чтобы делать запрос к драйверу без создания пакета IRP. Т.е. если они не реализованны, то все запросы будут транслированться в IRP. Почитать можно в .pdf в том же DDK помоему от OSR или др не помню - ищи в папке pdf.
     
  5. btr

    btr New Member

    Публикаций:
    0
    Регистрация:
    21 май 2007
    Сообщения:
    4
    Господа!
    Может кто сталкивался с такой проблемой или хотя бы имеет представление о причинах.
    Код (Text):
    1. HANDLE hFile = CreateFileW(L"T:\\2.txt", GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
    2. if (hFile == INVALID_HANDLE_VALUE)
    3.     return;
    4. HANDLE hMap = CreateFileMapping(hFile, 0, PAGE_READ_ONLY, 0, 10, 0);
    T: - диск, соотвествующий моему устройству.
    CreateFileW отрабатывает нормально и возвращает вполне рабочий HANDLE. Я могу получать размер этого файла, применять к нему ReadFile и т.д. Но вот CreateFileMapping не срабатывает ни при каких условиях. GetLastError возвращает какой-то мифический код 193 ("%1 is not a valid Win32 application"). Причем в драйвер никакие запросы не приходят.
    Собственно вопрос: Может ли это как-то зависеть от флагов, выставленных в парметрах устройства? Сейчас оно у меня объявлено как FILE_DEVICE_DISK_FILE_SYSTEM (пробовал и FILE_DEVICE_NETWORK_FILE_SYSTEM), режим доступа - Neither (пытался так же DO_DIRECT_IO).
     
  6. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    btr
    А что за FILE_ATTRIBUTE_NORMAL, 1); ?
     
  7. btr

    btr New Member

    Публикаций:
    0
    Регистрация:
    21 май 2007
    Сообщения:
    4
    Пардон, промахнулся. 0 конечно