Я спрашиваю об этом, потому что у меня проблемы с пониманием чтения с выравниванием по секторам, когда мы читаем необработанное устройство.
Предположим, что мы находимся в Windows, и мы используем функцию ReadFile()
C для чтения x байтов с устройства.
Я знаю, что мы можем читать только данные, выровненные по секторам, но недавно я обнаружил функцию SetFilePointer()
, которая позволяет нам поместить указатель в x байтов устройства, которое мы ранее открыли с помощью CreateFile()
.
Мой вопрос в том, нужно ли нам читать данные, выровненные по секторам, если мы используем SetFilePointer()
, например, так:
SetFilePointer(device, 12, NULL, FILE_BEGIN);
(устройство представляет собой HANDLE
для существующего устройства, для этого примера давайте предположим, что это USB-накопитель), в этом примере мы устанавливаем указатель, указывающий на 12-й байт, начиная с FILE_BEGIN
.
Если бы я должен был прочитать эквивалент одного сектора (512 байт), начиная с этого 12-го байта, мне нужно было бы сделать мою функцию чтения такой:
ReadFile(device, sector, (512 - 12), &bytesRead, NULL)
или вот так:
ReadFile(device, sector, 512, &bytesRead, NULL)
Несмотря ни на что, спасибо!