Любая работа с диском в Винде проходит через стек драйверов в финале все это передается самому нижнему драйверу disk.sys (если ничего не путаю). А данный драйвер работает с диском через int 13h или напрямую с портами ввода вывода типа in out ?
Да ну... Имхо, как и сейчас: парсинг вх. данных(скорее всего scsi команд), DMA, SGList, маппирование, прерывания и прочее.
disk.sys я не реверсил, поэтому и написал "имхо". контроллеры чаще слишком примитивны, чтобы иметь "команды". там куча битовых полей, каждое тупо выбирает подрежим или режим, или тип пересылок. Ну и поля для данных/адресов. "портов in out" - не видел. А mov [rdx], rax - полно. Это в регистры контроллера и если IsSecureDevice = 0. Иначе синхронный вызов. Ессно, очень наворочено там всё. Но это мелкие тактические тонкости, главное - мой пост выше.
В теории должно быть как-то так (лет ми гугл ит фор ю): Под универсальным контроллером диска еще драйвера типа диска и по необходимости конкретного устройста, а под ними еще драйвер шины. На практике наверное Инде в курсе, я хз.
и в теории и на практике именно так обратите внимание что до 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>