Я ОП. Я объединяю ответы Эрика Сеппанена и Маттео Италии, чтобы завершить его.
* NIX Платформы:
Это просто благодаря волшебству * nix специальных файлов устройств. Вы можете открыть и прочитать /dev/sda
так же, как и любой другой файл.
Просто используйте open
, lseek
, read
, write
(или pread
, pwrite
). Если вы хотите убедиться, что вы физически извлекаете данные с накопителя, а не из буферов ядра, вы можете открыть их с флагом O_DIRECT
(хотя для этого нужно выполнить выравнивание операций чтения / записи по 512 байтам).
Платформа Windows
Для Windows существуют специальные объекты \\.\PhisicalDrive<i>X</i>
с X в качестве номера диска, которые можно открыть с помощью обычного CreateFile API. Для выполнения чтения или записи просто вызовите ReadFile и WriteFile (буфер должен быть выровнен по размеру сектора).
Дополнительную информацию можно найти в разделе «Физические диски и тома» документации API CreateFile.
В качестве альтернативы вы также можете использовать функцию DeviceIoControl , которая отправляет управляющий код непосредственно в указанный драйвер устройства, заставляя соответствующее устройство выполнить соответствующую операцию.