Довольно просто читать вещи напрямую ...
( Редактировать: , вы даже можете сделать это без использования специфичных для Windows заголовочных файлов - см. Ниже.)
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
FILE *volume = fopen("\\\\.\\C:", "r");
if (volume)
{
long long offset = 0; // Sector-aligned offset
setbuf(volume, NULL); // Disable buffering
if (_fseeki64(volume, offset, SEEK_SET) == 0)
{
char buf[1024]; // Multiple of sector size
size_t cb = fread(buf, sizeof(*buf), _countof(buf), volume);
// Process the data
}
fclose(volume);
}
return 0;
}
Сложная часть - это что прочитать и как это интерпретировать.
Многое о NTFS недокументировано, но некоторые его части документированы . Веселитесь, исследуя.