Драйвер логического диска. С чего начать?

Тема в разделе "WASM.NT.KERNEL", создана пользователем Xerx, 2 фев 2007.

  1. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    Нигде не могу найди нормальной информации о subj. Под каким символическим именем создавать? Как указать системе, что он такой есть? Как создать сам диск? И какие запросы необходимо обрабатывать?
    Доступ на уровне отдельных секторов, не более. Т.е. в начале в систему должен быть добавлен диск (к примеру L:), неформатированный. Система сама должна обращаться к нему с посекторным доступом для форматирования и взаимодествия. Принцип хранения не важен. Только вопросы выше, с остальным сам разберусь (надеюсь). Приму любые советы! Лучше просто теорию, а не пример.

    В Солдатове и KmdTut ничего похожего не нашел.
     
  2. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    http://support.microsoft.com/kb/257405
     
  3. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    http://www.ramdisk.tk/

    Там тоже где-то исходники лежат.
     
  4. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    Пример с первой ссылки, как я понял создает 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". Хорошая программка, в ней модно создать диск любого размера в виде файла на винчестере. А потом отформатировать в ту ФС, в какую хочется.
    Вот только как и большинство местного народа хочу все сделать сам ;) В данном случае, после стороннего толчка в нужную сторону ибо сам только начинаю изучать написание драйверов.
     
  5. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Ну так чтение/запись сектора № 3434234" - это, типа, и есть файловая система. Если диск заранее не "отформатировать" в соотв. с какой-то файловой системой, откуда сектора возьмутся? Пусть это будет не FAT12/FAT16, а своя собственная, но какая-то ФС должна быть.

    Могу ошибиться, но насколько я успел понять из беглого просмотра сайта, ничего принципиально отличного от RAM Drive там нет. Принцип можно по исходникам изучить, а детали в дизассемблере посмотреть.
     
  6. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Four-F
    Afaik OS оперирует кластерами и _логическими_ секторами (exmpl. dos int25h, int26h), а сектор - обычно ассоциируется с абсолютным чтением диска (exmpl. bios int13h).

    откуда сектора возьмутся
    Диск - блин(ы), головки с каждой стороны, на каждой стороне - дорожки, которые поделены на сектора. FS еще нету.

    ps при упоминании секторов необходимо добавлять логические или физические, хотя, например, физические на какой-нибудь флешке - логические, только более низкого уровня.
     
  7. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    Сектора именно физические причем для жесткого диска. По 512 байт. Вся основная информация о диске содержится в первом секторе. Единственное, что нужно системе для взаимодействия - общий размер (его из нулевого сектора не возьмешь, если диск еще не отформатированный) и операции посекторного чтения/записи.

    Конечно можно и с учетом физической специфики (как q_q придложил int 13h ah = 02h "DISK - READ SECTOR(S) INTO MEMORY", там указываются сектора, головки и цилиндры), но думаю в данном случае будет достаточно операций на уровне физических секторов.

    И еще. Конечно 512 байт - это не более чем промышленный стандарт и его теоретически можно менять. Суть от этого не меняется.
     
  8. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Я может быть не совсем точно выразился, точнее нужно учитывать контекст, в котором мы говорим.

    Тут речь не идет о физических параметрах какого-то физического диска.

    Упомянутая программа Extra Drive Creator, создает виртуальные диски либо на куске памяти либо на файле. Т.е. выделяется кусок памяти в ядре или создается файл на диске. Затем в начало куска памяти или файла кладётся BootSector, соответствующий какой-то файловой системе и сообщается системе о новом диске. Если система понимает эту файловую систему она монтирует том и конструкция начинает работать. При этом драйвер, который управляет виртуальным диском на запросы типа IOCTL_DISK_GET_DRIVE_GEOMETRY, IOCTL_DISK_GET_PARTITION_INFO и т.п. возвращает TracksPerCylinder, SectorsPerTrack, BytesPerSector и т.п. атрибуты любого физического диска, но это просто эмуляция. Никаких цилиндров, дорожек и секторов то физически нет.

    Я просто пытался обяснить топикстартеру, что по сути виртуальный диск в файле - это тот же виртуальный диск в памяти. Строго говоря, практически я делал только RamDrive, но, IMHO, FileDrive ничем принципиально не отличается.
     
  9. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Нету там никаких физических секторов и не может их быть и вообще нету там ничего физического. Либо я не понимаю о чём мы говорим.
     
  10. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    Так вначале же система пишет, что файловая система диска - RAW. Нет там еще никакой файловой системы! есть просто "физические" параметры диска (число секторов, дорожек и т.д.). Да, это эмуляция. Но благодаря ей диск уже и форматируется. Поначалу-то нет на нем файловой системы. RamDisk сразу создает FAT12/FAT16 исходя из нужного размера диска. И сразу предлагает работать ТОЛЬКО в этих ФС. А FileDrive предоставляет "чистый" диск без начальной ФС. Просто как кусок памяти (какой: оперативной или на винчестере, не важно), который рассматривается как область физического диска с посекторный доступом через контроллер.

    Может я чего не понимаю, но это разный принцип взаимодействия драйверов: один дает свою ФС, другой - просто доступ к "физическому" логическому диску, который можно использовать на свое усмотрение. Вообще к данному диску ДО его форматирования доступа обычным программам нет. Они его просто видят и все.
     
  11. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    OK. Слил, поставил, понял, что ты имеешь ввиду. Согласен - это маленько отличается от рамдиска.

    Создать RAW-диск ты можешь вызовом одной единственной функции:

    Код (Text):
    1. DefineDosDevice( DDD_RAW_TARGET_PATH, "k:", "\\Device\\Beep" );  //  создать
    2. DefineDosDevice( DDD_REMOVE_DEFINITION, "k:", NULL );            //  убить
    , где k - любая свободная буква, Beep - имя любого девайса в каталоге \Device. Можешь эксплуатировать сам Extra Drive "\\Device\\ExtraDrv\\ExtraDrvX", где X - номер девайса (у меня их аж 38). Дальше система будет кидать драйверу, управляющему этим девайсом IOCTLs, которые он должен обработать (Beep естественно их не обрабатывает). IMHO, тебе нужно разобраться какие это контролы и как их обрабатывать. Дальнейших деталей я, к сожалению, не знаю.
     
  12. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    Понял. буду разбираться.
    А есть хотя бы предположение в какую сторону плыть? Кроме как дизасмить драйвер самой программы.
     
  13. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Из опенсорсных по теме знаю только TrueCrypt:
    http://www.truecrypt.org/
    http://sourceforge.net/projects/truecrypt/

    Контролы все стандартные типа IOCTL_DISK_GET_DRIVE_GEOMETRY, IOCTL_DISK_GET_PARTITION_INFO и т.п. В исходнимках рамдиска всё это тоже есть. Видимо разница только в том, что в данном случае сама система проводит разметку диска.

    А что? Очень увлекательное занятие. По мне, так на порядок интереснее кодинга ;)

    ЗЫ: Если чего интересного нароешь (имею в виду исходники), дай знать, пожалуйста.
     
  14. Voodoo

    Voodoo New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2003
    Сообщения:
    297
    Адрес:
    Новосибирск
  15. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Точно, забыл про него.
     
  16. trash_master

    trash_master New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2006
    Сообщения:
    319
    Адрес:
    Україна
    Почему- то никто не вспоминает про StrongDisk, как на меня самое в точку. Что - то подобное вроде было на васме исход. клиента и драйвера
     
  17. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    http://www.strongdisk.ru/
    http://www.strongdisk.com/

    Не могло оно быть в исходниках.
     
  18. Xerx

    Xerx Алексей

    Публикаций:
    0
    Регистрация:
    17 фев 2005
    Сообщения:
    528
    Адрес:
    Russia
    Обязательно. Я тут ссылки и выложу, как уже делают. Но только то, что сам проверю.
     
  19. ksu_ant

    ksu_ant New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2005
    Сообщения:
    273
  20. trash_master

    trash_master New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2006
    Сообщения:
    319
    Адрес:
    Україна
    Four-F
    Я не писал что он в исходниках, а что- то подобное было. ksu_ant как раз правильно подметил