Как записать данные на диск в ядре?

Тема в разделе "WASM.NT.KERNEL", создана пользователем NeuronViking, 29 апр 2009.

  1. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    ... если не пользоваться драйверами ФС? как-то через функции БИОСа возможно это сделать в ядре ВинНТ? Какие могут быть вообще варианты? Напримр, стек ФС поврежден (БСОД), а мне нужно сохранить свои данные на диск в любом случае. Следовательно тупо использовать IoCreateFile/IoWriteFile и IOCTLы ФС я не могу...
     
  2. NDIS

    NDIS NDIS

    Публикаций:
    0
    Регистрация:
    16 авг 2007
    Сообщения:
    41
    Адрес:
    Москва
    Ну так и говори мол пишу малваре, помогите как там и что написать, чтоб бабла срубить побольше...
     
  3. tylerdurden

    tylerdurden New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    322
    in/out, порты и тащить с собой дровера винтов
     
  4. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    не малваре.

    - что значит тащить с собой дровера винтов? можно подробнее как это работает и как этим пользоваться?
     
  5. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    NeuronViking
    google.ru?q=программирование дисковых подсистем
    вроде еще на реверсинге.нет были, а все такой же.
     
  6. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    censored
    спасибо за ссылку.
    спрашиваю потому, что возможно где-то уже есть кусок _рабочего_ кода. бабла я здесь срубить не смогу т.к. тема в рамках проекта за не очень большую инженерскую ЗП, поэтому если кто-то поделится своим опытом и временем бесплатно - скажу спасибо.
     
  7. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    ну что же, похоже здесь один и только один способ:

    "Put a reserved IDE controller in PIO mode and wrote out the whole dump that way - 1 page at a time"

    пожелайте мне удачи в создании этого чудовища ;(
     
  8. Dian

    Dian Member

    Публикаций:
    0
    Регистрация:
    19 июн 2008
    Сообщения:
    222
    таких куском целый линух :)
     
  9. ntcdm

    ntcdm New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2007
    Сообщения:
    247
    А почему бы не попробовать как это делает винда ? Записать в страничный файл а потом скинуть на диск при следующей загрузке ?
     
  10. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    по условию задачи страничного файла в системе нет и не может быть.
     
  11. ntcdm

    ntcdm New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2007
    Сообщения:
    247
    а что если выделить на диске специальную неразмеченную область и скидывать туда?
     
  12. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    я рассматриваю два варианта:

    1. использовать тот же метод что и Винда - через IoWriteDiskDump, предварительно настроив список секторов; это недокументированные функции и структур, о которых нигде в сети нет информации... т.е. дебагер + ида + голова; в этом случае писать можно хоть на ФАТ, хоть на НТФС - используя функции дамп-драйвера винды.

    2. использовать программирование PCI IDE контроллера и в PIO режиме писать постранично на неразмеченную область - никогда такие вещи не делал; даже не представляю какие трудности возникнут при попытки использовать функции PCI EIDE в защищенном режиме.