Действительный размер структур Windows SDK

Тема в разделе "WASM.BEGINNERS", создана пользователем ADim, 11 мар 2010.

  1. ADim

    ADim New Member

    Публикаций:
    0
    Регистрация:
    6 май 2007
    Сообщения:
    28
    В том числе в MSDN описана структура INPUT_RECORD:
    Код (Text):
    1. typedef struct _INPUT_RECORD
    2. {
    3.    WORD EventType;
    4.     union
    5.     {
    6.        KEY_EVENT_RECORD KeyEvent;
    7.        MOUSE_EVENT_RECORD MouseEvent;
    8.        WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent;
    9.        MENU_EVENT_RECORD MenuEvent;
    10.        FOCUS_EVENT_RECORD FocusEvent;
    11.     } Event;
    12. } INPUT_RECORD;
    EventType может и имеет тип WORD, и значимая его часть располагается в двух байтах, но, видимо, для выравнивания членов перед объединением вставлены еще два байта. А где можно увидеть фактическое расположение членов для структур Windows? Я пока пользовался OllyDbg.
     
  2. ADim

    ADim New Member

    Публикаций:
    0
    Регистрация:
    6 май 2007
    Сообщения:
    28
    И посредством "cl /Fa /c ...", но тут приходится рассчитывать по смещениям при обращении к членам структуры.
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    макрос - FIELD_OFFSET()
     
  4. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    cl -d1reportAllClassLayout /FAsc t.cpp >s
    Код (Text):
    1. class <unnamed-tag> size(2):
    2.     +---
    3.  0  | UnicodeChar
    4.  0  | AsciiChar
    5.     +---
    6.  
    7. class _KEY_EVENT_RECORD size(16):
    8.     +---
    9.  0  | bKeyDown
    10.  4  | wRepeatCount
    11.  6  | wVirtualKeyCode
    12.  8  | wVirtualScanCode
    13. 10  | <unnamed-type-uChar> uChar
    14. 12  | dwControlKeyState
    15.     +---
    16.  
    17. class _MOUSE_EVENT_RECORD   size(16):
    18.     +---
    19.  0  | _COORD dwMousePosition
    20.  4  | dwButtonState
    21.  8  | dwControlKeyState
    22. 12  | dwEventFlags
    23.     +---
    24.  
    25. class _WINDOW_BUFFER_SIZE_RECORD    size(4):
    26.     +---
    27.  0  | _COORD dwSize
    28.     +---
    29.  
    30. class _MENU_EVENT_RECORD    size(4):
    31.     +---
    32.  0  | dwCommandId
    33.     +---
    34.  
    35. class _FOCUS_EVENT_RECORD   size(4):
    36.     +---
    37.  0  | bSetFocus
    38.     +---
    39.  
    40. class <unnamed-tag> size(16):
    41.     +---
    42.  0  | _KEY_EVENT_RECORD KeyEvent
    43.  0  | _MOUSE_EVENT_RECORD MouseEvent
    44.  0  | _WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent
    45.  0  | _MENU_EVENT_RECORD MenuEvent
    46.  0  | _FOCUS_EVENT_RECORD FocusEvent
    47.     +---
    48.  
    49. class _INPUT_RECORD size(20):
    50.     +---
    51.  0  | EventType
    52.     | <alignment member> (size=2)
    53.  4  | <unnamed-type-Event> Event
    54.     +---
     
  5. ADim

    ADim New Member

    Публикаций:
    0
    Регистрация:
    6 май 2007
    Сообщения:
    28
    reverser
    Спасибо!