Я пытался прочитать раздел ntfs. основная функция:
int main(int argc, char** argv)
{
BYTE sector[512];
ReadSector(L"\\\\.\\E:", 0, sector);
PrintBPB(ReadBPB(sector));
BYTE sector2[512];
ReadSector(L"\\\\.\\E:", 0, sector2);
PrintBPB(ReadBPB(sector2));
return 0;
}
Функция чтения сектора:
int ReadSector(LPCWSTR drive, long readPoint, BYTE sector[Sector_Size])
{
int retCode = 0;
DWORD bytesRead;
HANDLE device = NULL;
device = CreateFile(drive, // Drive to open
GENERIC_READ, // Access mode
FILE_SHARE_READ | FILE_SHARE_WRITE, // Share Mode
NULL, // Security Descriptor
OPEN_EXISTING, // How to create
0, // File attributes
NULL); // Handle to template
if (device == INVALID_HANDLE_VALUE) // Open Error
{
printf("CreateFile: %u\n", GetLastError());
return 1;
}
SetFilePointer(device, readPoint, NULL, FILE_BEGIN);//Set a Point to Read
if (!ReadFile(device, sector, 512, &bytesRead, NULL))
{
printf("ReadFile: %u\n", GetLastError());
}
else
{
printf("Success!\n");
}
CloseHandle(device);
}
Я думаю, что способ, которым я копирую эти байты в свой BPB bpb, в порядке.
Так что же случилось? Почему они разные? Я могу понять, что это связано с winapi, readfile, createfile, но я все еще этого не понимаю :(
Извините за мой плохой английский.





Ошибка в коде, который мы не видим: PrintBPB. По-видимому, он переключается на шестнадцатеричный вывод (для «серийного номера тома»), а затем не может вернуться к десятичному до более позднего времени.
Когда код вызывает PrintBPB во второй раз, режим вывода по-прежнему находится в шестнадцатеричном формате, а при печати «Байтов на сектор» теперь отображается 200 (0x200 — это то же значение, что и 512).
Если вам нужно знать, содержат ли два фрагмента памяти одинаковые значения, просто memcmp их. Это позволяет избежать появления ошибки в преобразовании (например, при выводе на консоль).
Проблема, похоже, внутри
PrintBPB, который, по-видимому, переключается с десятичного на шестнадцатеричный вывод (512то же значение, что и0x200). Чтобы проверить, совпадает ли содержимое, просто вызовите memcmp для необработанных двоичных данных.