Добываем WinApi хидеры

Парсить хидеры хорошо! Из них можно генерировать базы для трешгенов или инклуды для сокрытия импорта.

Основная проблема парсинга хидеров из DDK — это макросы:

Аналогов __out_data_source превеликое множество, даже вне описания параметров:

С горем пополам, отпарсив импорт из пары хидеров, мы поняли что это путь в никуда. Обилее макросов, дефайнов и прочего плохо-перевариваемого регулярками дерьма! Необходимо свежее решение!

Воруем хидеры с MSDN

Для начала скачаем оффлайн-справку

  • Открываем VisualStudio
  • Help -> Set Help Preference -> Launch in Help Viewer
  • Manage Content -> Desktop Application -> Update

winapi

Парсим справку

Это банальные zip архивы, распакуем их в нужное место. Как и в прошлый раз нас выручают php и регулярные выражения. Далее мы выдираем код из всех файлов:
Немного позднее, я стал выдирать имя из поля Header и складывать файлы сообразно ему.

header

Больше никаких сложных макросов!

Посмотреть на готовый результат можно на нашем GitHub

Что дальше?

Мы получили все хидеры в пригодном для парсинга варианте! Теперь можно собрать свежую базу для вашего генератора мусора!

Отписывайте ошибки парсинга и ваши предложения сюда.

6 thoughts on “Добываем WinApi хидеры

    1. Хотел придержать до будущих статей)
      Самым простым будет выдрать готовую базу из утилиты от rohitab

  1. Накатал по вашей на водке скриптик
    https://pastebin.com/fPpkpT79
    Итоговый результат вот такой:
    https://pastebin.com/3V2aTnmd
    Что мне лично не нравится — некоторые типы не соответствуют виндовым, например [REG_ERROR]. Нужно искать их в хидерах и править.
    Я чтото неправильно делаю?

    1. Нужен нормальный xml парсер, там множественные дефайны и искомый тип приходится «раскручивать» до базовых, обратите внимание на:
      Variable Name = «[REG_ERROR]» Type = «Alias»
      Думаю это можно было и без меня сделать.

Добавить комментарий