Точный размер раздела?

Тема в разделе "WASM.BEGINNERS", создана пользователем test555, 14 ноя 2009.

  1. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Возьмем WinHex. Он может открыть логический раздел как файл.
    И он корректно считает размер раздела.

    Запустил в отладочнике, поймал его на вызове DeviceIoControl с кодом IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS
    Посмотрел что это за структура:

    Код (Text):
    1. typedef struct _VOLUME_DISK_EXTENTS {
    2.   DWORD       NumberOfDiskExtents;
    3.   DISK_EXTENT Extents[ANYSIZE_ARRAY];
    4. }VOLUME_DISK_EXTENTS, *PVOLUME_DISK_EXTENTS;
    и

    Код (Text):
    1. typedef struct _DISK_EXTENT {
    2.   DWORD         DiskNumber;
    3.   LARGE_INTEGER StartingOffset;
    4.   LARGE_INTEGER ExtentLength;
    5. }DISK_EXTENT, *PDISK_EXTENT;
    Ну тут стало ясно почти все, кроме двух моментов:
    1. После запроса получается буфер:
    Код (Text):
    1. 0012F1C0  01 00 00 00 00 00 00 00  .......
    2. 0012F1C8  05 00 00 00 DA 02 00 00  ...Ъ..
    3. 0012F1D0  00 00 00 00 00 00 00 00  ........
    4. 0012F1D8  00 00 00 F2 00 00 00 00  ...т....
    (размер возвращенных данных = 20h);

    Вопрос: почему он выровнял все по границе 8 байт? То NumberOfDiskExtents = 1, номер DiskNumber = 5 (This is the same number that is used to construct the name of the disk, for example, the X in PhysicalDriveX or HarddiskX.)
    Сходится, ну и по 8 байт четверенное слово... Почему он так выравнивает данные?

    2. Получает что размер раздела равен
    Код (Text):
    1. 00 00 00 00 F2 00 00 00
    , т.е. 4060086272, это почти правда.
    Но вот винхекс показывает 4060082176, т.е.
    Код (Text):
    1. F1FFF000
    , что на 1000H меньше. Вот это и непонятно. Что за арифметика такая?

    Но винхекс показывает корректные данные, т.к. если загнать цикл
    Код (Text):
    1. While Readfile(.. returned, nil) and (returned>0)
    То он в сумме прочтет именно то количество байт, которое показывает винхекс.

    Кто-нибудь знает, что за арифметика такая? Причем 2 Гб флешка показывает всезде одинаковый размер, а какая-то (не уверен на 100%) с разницей 512.. Магия?
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    test555
    Обсуждалось в поиск.
     
  3. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Pavia, дак это я и постил ))
    Вопрос так и не решен.. что-то запутался со скази-командами тогда...
    А тут нашел кое какой запрос, и думал что через него юзается..