Всем доброго!!! Очередной раз с вопросом, звучит он глуповато, и все же. вот структура: Код (Text): typedef struct _HOOK_EXTENSION { FILE_SYSTEM_TYPE Type; PDEVICE_OBJECT FileSystem; unsigned LogicalDrive; BOOLEAN Hooked; PFILE_FS_ATTRIBUTE_INFORMATION FsAttributes; } HOOK_EXTENSION, *PHOOK_EXTENSION; на первый взгляд все просто и понятно, но ... так как мой основной язык программирования это Дельфи, некоторые моменты мне не понятны, а именно. Когда я пытаюсь узнать размер структуры, я получаю 20 байт, просматривая размер каждого поля, я получаю следующее 1 поле 4байта; 2-4; 3-4; 3-1; 4-4; В итоге размер структуры 21, ладно иду дальше, пытаюсь посотреть смещения полей в структуре FIELD_OFFSET, получаю теже данные. Объясните, как это может быть??? для себя я делаю вывод следующий, поле Type на самом деле занимает 2 байта, а не 4, и структуру выравнивают на 4. Если я прав, то как система определяет это?
AsmGuru62, это все понятно. Я про то как в процессе исполнения кода, я получаю нужные данные а не мусор? <font color="red]для себя я делаю вывод следующий, поле Type на самом деле занимает 2 байта, а не 4, и структуру выравнивают на 4.</font><!--color--> но ведь FIELD_OFFSET(HOOK_EXTENSION,FileSystem) дает смещение с 4-го байта, когда долже показать с 2-го.
Вообщем выравниваение структуры идет на 4, а как там уже система с ней работает ))))... Проверил в дельфи, тоже самое, отсюда вывод, знать так надо ))), тему можно закрыть.
staier, ))))))))))))))))))))) как всегда, проявил свою лучшую черту, невнимательность ))). ведь точно 17 ))))
Выравнивание структур задается директивой pragma pack Если перед описанием структуры поставить #pragma pack(push, 1), то они выравнивается на 1 байт. #pragma pack (pop) восстанавливает прежнее выравнивание.
>Когда я пытаюсь узнать размер структуры, я получаю 20 бай А ещё можно так: HOOK_EXTENSION he; printf("%d", sizeof(he.Type)+sizeof(he.FileSysystem)+... );