WordPad, NotePad - чего они хотят
От: Аноним  
Дата: 03.03.04 10:16
Оценка:
Я пишу FS драйвер для Win2000, он маунтит виртуальный диск. По сути задача состоит в том, чтоб написать read only FS. Ну вобщем с read то ничего и не получаеться. К данному моменту я отладил нормольную работу всех Query_... запросов. Но читать файлы получаеться только в lister. В WordPad, NotePad дело до read запроса не доходит, а все приходищие запросы от этих приложений я вроде бы нормально завершаю. Те запросы на открытие, нахождение и информацию о файле. Кроме того приходят запросы Query volume. Видно что-то в возвращаемой информации этим приложениям не нравиться: блокнот говорит, что ему не хватает памяти для продолжения выполнения операций. А word pad, что произошла неизвестная ошибка при доступе к файлу. Если есть идеи насчёт того, что я не так делаю поалуста отзавитесь.
Re: WordPad, NotePad - чего они хотят
От: SlavUser  
Дата: 04.03.04 14:49
Оценка:
Здравствуйте, Аноним, Вы писали:

Здесь есть много интересного про то как писать FS driver

http://chitchat.at.infoseek.co.jp/vmware/
Re: WordPad, NotePad - чего они хотят
От: Valerio Россия linkedin.com/in/boronin
Дата: 05.03.04 06:05
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А> Я пишу FS драйвер для Win2000, он маунтит виртуальный диск. По сути задача состоит в том, чтоб написать read only FS. Ну вобщем с read то ничего и не получаеться. К данному моменту я отладил нормольную работу всех Query_... запросов. Но читать файлы получаеться только в lister. В WordPad, NotePad дело до read запроса не доходит, а все приходищие запросы от этих приложений я вроде бы нормально завершаю. Те запросы на открытие, нахождение и информацию о файле. Кроме того приходят запросы Query volume. Видно что-то в возвращаемой информации этим приложениям не нравиться: блокнот говорит, что ему не хватает памяти для продолжения выполнения операций. А word pad, что произошла неизвестная ошибка при доступе к файлу. Если есть идеи насчёт того, что я не так делаю поалуста отзавитесь.


по указанной информации вряд ли Вам кто-то сможет сказать что-либо конкретное, если даже (мне) не совсем ясно, что именно у Вас:
— Вы пишите драйвер виртуального диска
— Вы пишите FSD
?

попробую угадать, Wordpad & notepad вероятно хотят от Вас поддержки memory-mapped files — что то еще сказать по Вашему вопросу сложно.
... << RSDN@Home 1.1.3 beta 1 >>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Re[2]: WordPad, NotePad - чего они хотят
От: Аноним  
Дата: 05.03.04 14:00
Оценка:
Здравствуйте, Valerio, Вы писали:

V>по указанной информации вряд ли Вам кто-то сможет сказать что-либо конкретное, если даже (мне) не совсем ясно, что именно у Вас:

V>- Вы пишите драйвер виртуального диска
V>- Вы пишите FSD
V>?

V>попробую угадать, Wordpad & notepad вероятно хотят от Вас поддержки memory-mapped files — что то еще сказать по Вашему вопросу сложно.


Попробую конкретизировать. Я пишу драйвер файловой системы (read only FSD), которая моунтит только мой виртуальный диск, который сам не умеет ничего кроме как создаваться. Особенностью системы является то, что она предоставляет доступ к файлам, всю информацию о которых, получает из приложения, работающего в user mode. С этим связаны все особенности реализации FS. То есть я не поддерживаю многих возмоностей родных win2000 файловых систем. Например кэшируемых, peging файлов, и чтение реализовано в самом приметивном варианте. Однако я не видел запросов, где бы требовалось, то что у меня не реализовано. У меня сейчас нормально работает листинг каталогов, информация о файлах и диске, и чтение из Lister. Я сравнивал спомощью IRPTraser сравнивал обработку IRP моей FS (когда например запускаешь открытие файла в word) и CDFS. Картина похожая (т.е. порядок запросов, статусы), только в определённый момент после серии query запросов меня выкидывают. Подскажите пожалуста моет ли на основании query запросов система сделать вывод, что файл читать нельзя (буферы заполняются нормольно я проверял) и какие минимальные фичи должны быть полддерживаемы FS, чтобы с ней нормально работал word, word pad.
Re[3]: WordPad, NotePad - чего они хотят
От: LehiZ  
Дата: 05.03.04 23:38
Оценка:
Я тебе отвечу совершенно точно, потому-что в свое время столкнулся с аналогичной проблемой

WordPad, NotePad используют file mapping (для динамического обновления файла или еще для чего-то ...)

Вот тебе код. Если че будет непонятно, поясню.
А вообще, рекомендую книгу "NT Filesystem Internals" (она же "Библия")

1. после завершения IRP_MJ_CREATE

// EXE IMAGE & File Mapping Support 
if (!pFileObject->FsContext)
{
    FSRTL_COMMON_FCB_HEADER* pFCB = (FSRTL_COMMON_FCB_HEADER*)ExAllocatePool(NonPagedPool, sizeof(FSRTL_COMMON_FCB_HEADER));
    if (pFCB)
    {
        RtlZeroMemory(pFCB, sizeof(FSRTL_COMMON_FCB_HEADER));
        pFCB->Resource = (PERESOURCE)ExAllocatePool(NonPagedPool, sizeof(ERESOURCE));
        ExInitializeResourceLite(pFCB->Resource);
        pFCB->PagingloResource = (PERESOURCE)ExAllocatePool(NonPagedPool, sizeof(ERESOURCE));
        ExInitializeResourceLite(pFCB->PagingloResource);
        pFCB->ValidDataLength.LowPart = 0xFFFFFFFF;
        pFCB->ValidDataLength.HighPart = 0x7FFFFFFF;
        pFileObject->FsContext = pFCB;
    }
    SECTION_OBJECT_POINTERS* pPointers = (SECTION_OBJECT_POINTERS*)ExAllocatePool(NonPagedPool, sizeof(SECTION_OBJECT_POINTERS));
    if (pPointers)
    {
        RtlZeroMemory(pPointers, sizeof(SECTION_OBJECT_POINTERS));
        pFileObject->SectionObjectPointer = pPointers;
    }
    pFileObject->PrivateCacheMap = NULL;


2. после завершения IRP_MJ_CLOSE


if (pFileObject->FsContext)
{
    FSRTL_COMMON_FCB_HEADER* pFCB = (FSRTL_COMMON_FCB_HEADER*)pFileObject->FsContext;

    ExDeleteResourceLite(pFCB->Resource);
    ExDeleteResourceLite(pFCB->PagingloResource);
    ExFreePool(pFCB);
    pFileObject->FsContext = NULL;

    if (pFileObject->SectionObjectPointer)
    {
        SECTION_OBJECT_POINTERS* pPointers = (SECTION_OBJECT_POINTERS*)pFileObject->SectionObjectPointer;
        ExFreePool(pPointers);
        pFileObject->SectionObjectPointer = NULL;
    }      
}
Re[3]: WordPad, NotePad - чего они хотят
От: Valerio Россия linkedin.com/in/boronin
Дата: 06.03.04 06:11
Оценка:
Кэш поддерживать не обязательно, однако страничный ввод-вывод обязателен для FSD и мое предположение верно — оба редактора интенсивно используют MMF, который целиком основан на paging IO и соотв Вам нужно его также поддерживать.

возможно, пригодится:
Q25 What is the difference between cached I/O, user non-cached I/O, and paging I/O?
Q48 What happens if I mix memory mapped I/O with regular file I/O? What if the file I/O is non-cached?
Q50 What are the rules for my file system/filter driver for handling paging I/O? What about paging file I/O?
... << RSDN@Home 1.1.3 beta 1 >>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Re[4]: WordPad, NotePad - чего они хотят
От: murdahlob Гондурас  
Дата: 09.03.04 10:36
Оценка:
Здравствуйте, Valerio, Вы писали:

V>Кэш поддерживать не обязательно, однако страничный ввод-вывод обязателен для FSD и мое предположение верно — оба редактора интенсивно используют MMF, который целиком основан на paging IO и соотв Вам нужно его также поддерживать.


Спасибо за помощ, вроде всё заработало (всмысле чтение в word, note pad, word pad). Пока удалось обойтись без поддержки страничного ввода вывода .
Re[5]: WordPad, NotePad - чего они хотят
От: LehiZ  
Дата: 09.03.04 10:39
Оценка:
А как получилось ?
Re[6]: WordPad, NotePad - чего они хотят
От: murdahlob Гондурас  
Дата: 10.03.04 08:27
Оценка:
Здравствуйте, LehiZ, Вы писали:

LZ>А как получилось ?


Ну вобщем бага состояла в том, как вы правиьлно догадались, что я не инициализировал SectionObject в FILE_OBJECT. Правда я дощёл до этого чуть раньше, чем мне ответили (обратился к той же библии). А по поводу реализации, как я понял все вышеуказанные текстовые редакторы требуют поддержки MMF, и минимум что нужно сделать для этого — инициализировать правильно поля в FILE_OBJECT. Что касаеться самой реализации IRP_MJ_READ, то я просто игнорировал флаги IRP_PAGING_IO (этот флаг устанавливает NotePad) и IRP_NOCACHE, получал буфер, лочил его если надо и заполнял данными. Чтение работает нормально, но думаю для нормальной реализации IRP_MJ_WRITE, при работе с Note Pad, этого не будет достаточно (почитал на ссылках, которые мне подсказали). Елси в чём не прав поправьте, коль не сложно .
Кстати, если знаете подскажите пожалуста как заставить windows приложения не искать на замаунченном мной диске свои DLL, temp файлы и т.д. Просто из-за специфики файловой системы, мне для того чтобы узнать есть файл или нет нужно обращаться к порграмме, работающей в user mode, а она лезет в сеть.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.