Работа драйвера диска в WinXP

Тема в разделе "WASM.NT.KERNEL", создана пользователем asmlamo, 10 фев 2022.

  1. asmlamo

    asmlamo Active Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.704
    Любая работа с диском в Винде проходит через стек драйверов в финале все это передается самому нижнему драйверу disk.sys (если ничего не путаю).

    А данный драйвер работает с диском через int 13h или напрямую с портами ввода вывода типа in out ?
     
  2. algent

    algent Member

    Публикаций:
    0
    Регистрация:
    11 апр 2018
    Сообщения:
    40
    Да ну...
    Имхо, как и сейчас: парсинг вх. данных(скорее всего scsi команд), DMA, SGList, маппирование, прерывания и прочее.
     
  3. asmlamo

    asmlamo Active Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.704
    А как сейчас в Win10 ?
    Напрямую команды контроллера ?
    То есть через систему портов in out ?
     
  4. algent

    algent Member

    Публикаций:
    0
    Регистрация:
    11 апр 2018
    Сообщения:
    40
    disk.sys я не реверсил, поэтому и написал "имхо".
    контроллеры чаще слишком примитивны, чтобы иметь "команды".
    там куча битовых полей, каждое тупо выбирает подрежим или режим, или тип пересылок.
    Ну и поля для данных/адресов.
    "портов in out" - не видел. А mov [rdx], rax - полно. Это в регистры контроллера и если IsSecureDevice = 0.
    Иначе синхронный вызов. Ессно, очень наворочено там всё.
    Но это мелкие тактические тонкости, главное - мой пост выше.
     
  5. ormoulu

    ormoulu Active Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    937
    В теории должно быть как-то так (лет ми гугл ит фор ю):

    [​IMG]

    Под универсальным контроллером диска еще драйвера типа диска и по необходимости конкретного устройста, а под ними еще драйвер шины.

    На практике наверное Инде в курсе, я хз.
     
  6. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    и в теории и на практике именно так
    обратите внимание что до disk.sys (выше по стеку) обращение к диску идет как к файлу через IRP_MJ_READ/WRITE с дискретностью сектора от 0 до MAX_SECTORS-1
    ниже по стеку все обращения к диску disk.sys преобразует в IRP_MJ_INTERNAL_CONTROL или что тоже самое IRP_MJ_SCSI
    там передается SCSI_REQUEST_BLOCK в нем рабочая Function это SRB_FUNCTION_EXECUTE_SCSI
    в ней используются SCSIOP_READ/READ12/READ16/WRITE/WRITE12/WRITE16
    все есть в хедерах WDK а конкретно вам понадобятся вот эти
    #include <srb.h>
    #include <scsi.h>
    #include <ntddstor.h>
     
    ormoulu нравится это.