Нигде не могу найди нормальной информации о subj. Под каким символическим именем создавать? Как указать системе, что он такой есть? Как создать сам диск? И какие запросы необходимо обрабатывать? Доступ на уровне отдельных секторов, не более. Т.е. в начале в систему должен быть добавлен диск (к примеру L, неформатированный. Система сама должна обращаться к нему с посекторным доступом для форматирования и взаимодествия. Принцип хранения не важен. Только вопросы выше, с остальным сам разберусь (надеюсь). Приму любые советы! Лучше просто теорию, а не пример. В Солдатове и KmdTut ничего похожего не нашел.
Пример с первой ссылки, как я понял создает RAM диск файловой системе FAT12 или FAT16. Я не совсем этого хотел. Точнее совсем не этого (почти). Мне нужен именно ЛОГИЧЕСКИЙ диск, а не RAM, т.е. чтобы Win32API-функция GetDriveType() выдавала DRIVE_FIXED, а не DRIVE_RAMDISK. И принцип работы в драйвере не на основе выбора FAT12/FAT16, а на основе запросов вида "чтение сектора № 3434234" и "запись сектора № 4635". Никакие более высокоуровневые операции драйверу выполнять не надо. Никакого "самоформатирования" и т.д. Надеюсь, я так объяснил более понятно. Единственный пример, где я видел аналогичное действие: Extra Drive Creator использует свой драйвер Device\FileDisk и о нем WinObjEx выдает "A Device is an object that represents a physical, logical or virtual device". Хорошая программка, в ней модно создать диск любого размера в виде файла на винчестере. А потом отформатировать в ту ФС, в какую хочется. Вот только как и большинство местного народа хочу все сделать сам В данном случае, после стороннего толчка в нужную сторону ибо сам только начинаю изучать написание драйверов.
Ну так чтение/запись сектора № 3434234" - это, типа, и есть файловая система. Если диск заранее не "отформатировать" в соотв. с какой-то файловой системой, откуда сектора возьмутся? Пусть это будет не FAT12/FAT16, а своя собственная, но какая-то ФС должна быть. Могу ошибиться, но насколько я успел понять из беглого просмотра сайта, ничего принципиально отличного от RAM Drive там нет. Принцип можно по исходникам изучить, а детали в дизассемблере посмотреть.
Four-F Afaik OS оперирует кластерами и _логическими_ секторами (exmpl. dos int25h, int26h), а сектор - обычно ассоциируется с абсолютным чтением диска (exmpl. bios int13h). откуда сектора возьмутся Диск - блин(ы), головки с каждой стороны, на каждой стороне - дорожки, которые поделены на сектора. FS еще нету. ps при упоминании секторов необходимо добавлять логические или физические, хотя, например, физические на какой-нибудь флешке - логические, только более низкого уровня.
Сектора именно физические причем для жесткого диска. По 512 байт. Вся основная информация о диске содержится в первом секторе. Единственное, что нужно системе для взаимодействия - общий размер (его из нулевого сектора не возьмешь, если диск еще не отформатированный) и операции посекторного чтения/записи. Конечно можно и с учетом физической специфики (как q_q придложил int 13h ah = 02h "DISK - READ SECTOR(S) INTO MEMORY", там указываются сектора, головки и цилиндры), но думаю в данном случае будет достаточно операций на уровне физических секторов. И еще. Конечно 512 байт - это не более чем промышленный стандарт и его теоретически можно менять. Суть от этого не меняется.
Я может быть не совсем точно выразился, точнее нужно учитывать контекст, в котором мы говорим. Тут речь не идет о физических параметрах какого-то физического диска. Упомянутая программа Extra Drive Creator, создает виртуальные диски либо на куске памяти либо на файле. Т.е. выделяется кусок памяти в ядре или создается файл на диске. Затем в начало куска памяти или файла кладётся BootSector, соответствующий какой-то файловой системе и сообщается системе о новом диске. Если система понимает эту файловую систему она монтирует том и конструкция начинает работать. При этом драйвер, который управляет виртуальным диском на запросы типа IOCTL_DISK_GET_DRIVE_GEOMETRY, IOCTL_DISK_GET_PARTITION_INFO и т.п. возвращает TracksPerCylinder, SectorsPerTrack, BytesPerSector и т.п. атрибуты любого физического диска, но это просто эмуляция. Никаких цилиндров, дорожек и секторов то физически нет. Я просто пытался обяснить топикстартеру, что по сути виртуальный диск в файле - это тот же виртуальный диск в памяти. Строго говоря, практически я делал только RamDrive, но, IMHO, FileDrive ничем принципиально не отличается.
Нету там никаких физических секторов и не может их быть и вообще нету там ничего физического. Либо я не понимаю о чём мы говорим.
Так вначале же система пишет, что файловая система диска - RAW. Нет там еще никакой файловой системы! есть просто "физические" параметры диска (число секторов, дорожек и т.д.). Да, это эмуляция. Но благодаря ей диск уже и форматируется. Поначалу-то нет на нем файловой системы. RamDisk сразу создает FAT12/FAT16 исходя из нужного размера диска. И сразу предлагает работать ТОЛЬКО в этих ФС. А FileDrive предоставляет "чистый" диск без начальной ФС. Просто как кусок памяти (какой: оперативной или на винчестере, не важно), который рассматривается как область физического диска с посекторный доступом через контроллер. Может я чего не понимаю, но это разный принцип взаимодействия драйверов: один дает свою ФС, другой - просто доступ к "физическому" логическому диску, который можно использовать на свое усмотрение. Вообще к данному диску ДО его форматирования доступа обычным программам нет. Они его просто видят и все.
OK. Слил, поставил, понял, что ты имеешь ввиду. Согласен - это маленько отличается от рамдиска. Создать RAW-диск ты можешь вызовом одной единственной функции: Код (Text): DefineDosDevice( DDD_RAW_TARGET_PATH, "k:", "\\Device\\Beep" ); // создать DefineDosDevice( DDD_REMOVE_DEFINITION, "k:", NULL ); // убить , где k - любая свободная буква, Beep - имя любого девайса в каталоге \Device. Можешь эксплуатировать сам Extra Drive "\\Device\\ExtraDrv\\ExtraDrvX", где X - номер девайса (у меня их аж 38). Дальше система будет кидать драйверу, управляющему этим девайсом IOCTLs, которые он должен обработать (Beep естественно их не обрабатывает). IMHO, тебе нужно разобраться какие это контролы и как их обрабатывать. Дальнейших деталей я, к сожалению, не знаю.
Понял. буду разбираться. А есть хотя бы предположение в какую сторону плыть? Кроме как дизасмить драйвер самой программы.
Из опенсорсных по теме знаю только TrueCrypt: http://www.truecrypt.org/ http://sourceforge.net/projects/truecrypt/ Контролы все стандартные типа IOCTL_DISK_GET_DRIVE_GEOMETRY, IOCTL_DISK_GET_PARTITION_INFO и т.п. В исходнимках рамдиска всё это тоже есть. Видимо разница только в том, что в данном случае сама система проводит разметку диска. А что? Очень увлекательное занятие. По мне, так на порядок интереснее кодинга ЗЫ: Если чего интересного нароешь (имею в виду исходники), дай знать, пожалуйста.
Почему- то никто не вспоминает про StrongDisk, как на меня самое в точку. Что - то подобное вроде было на васме исход. клиента и драйвера