Всем привет! Пытаюсь написать драйвер файловой системы. Он в общем-то начал работать, но только с теми программами, которые не используют отображение файлов на память (MapViewOfFile и все такое). Не подскажет ли кто, достаточно ли для маппинга стандартных запросов (IRP_MJ_XXX) или обязательно требуется реализовывать FAST_IO_XXX? И если без последних не обойтись, то где можно про них почитать? Хелп по DDK который у меня стоит (3790.1830) злорадно заявляет, что "Unfortunately, at the present time Fast I/O is not documented" и обещает в следующих версиях опубликовать. Заранее спасибо всем, кто захочет помочь.
для драйвера своей файловой системы - не обязательно для фильтра - обязательно в IFSkit-е есть кое-что но лучше поищи исходники FileMon-А
Исходники FileMon'а я проштудировал. Но он фильтр и поэтому имет право сделать следующее: Код (Text): retval = hookExt->FileSystem->DriverObject->FastIoDispatch->FastIoRead( FileObject, FileOffset, Length, Wait, LockKey, Buffer, IoStatus, hookExt->FileSystem ); Что и делает в общем-то. Так что назначение параметров и алгоритм работы функций понять затруднительно . TrueCrypt же вообще реализует не файловую систему, а диск. И поэтому к нему приходят только запросы на чтение/запись блоков. Так что тоже не прокатит. Сейчас раскопал пример реализации нескольких функций в DDK. Буду копаться.
btr Не обязательно FAST_IO реализовывать. Они организованны для того, чтобы делать запрос к драйверу без создания пакета IRP. Т.е. если они не реализованны, то все запросы будут транслированться в IRP. Почитать можно в .pdf в том же DDK помоему от OSR или др не помню - ищи в папке pdf.
Господа! Может кто сталкивался с такой проблемой или хотя бы имеет представление о причинах. Код (Text): HANDLE hFile = CreateFileW(L"T:\\2.txt", GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if (hFile == INVALID_HANDLE_VALUE) return; 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).