Где windows хранит инфу о зареганых классах окон?

Тема в разделе "WASM.WIN32", создана пользователем Rockphorr, 25 янв 2018.

  1. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.518
    Адрес:
    Russia
    собственно куда пишет RegisterClassEx инфу о классе окна?
    и как получить перечень доступных классов на текущий момент ?
     
  2. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    1.786
    Rockphorr,

    Вам что, нужны интернал данные и функции, как устроен гуй на км стороне ?

    У вас обычная задача, перечисление классов/окон/есчо_чего решается штатным путём - паблик API.
     
  3. zerodawn

    zerodawn Member

    Публикаций:
    0
    Регистрация:
    16 янв 2018
    Сообщения:
    53
    По матчасти не подскажу ( в графике не шарю ), но вот код который помогает перечислять все окна: http://www.cplusplus.com/forum/windows/25280/

    Поясняю, после вызова:

    Код (Text):
    1. EnumWindows(EnumWindowsProc, NULL);
    2.  
    Для каждого окна в системе последовательно будет вызываться callback-функция EnumWindowsProc, передавая в нее всю нужную инфу об окне

    Если есть желание узнать где все хранится - Welcome to WinDbg, отдебажив EnumWindows можно как раз понять где все это лежит.
     
  4. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    1.786
    zerodawn,

    А зачем км дебаг, есть же сурки.
     
    zerodawn нравится это.
  5. unc1e

    unc1e Active Member

    Публикаций:
    2
    Регистрация:
    28 июл 2017
    Сообщения:
    251
    Глянул в реакте колл стек RegisterClass, в итоге остановился на функции UserRegisterClass. Там как бы (как я понял) существует некий список, что можно получить через GetW32ThreadInfo()->ppi->pclsPrivateList ( еще можно глянуть функцию IntFindClass)
    https://github.com/reactos/reactos/...61d1167e9a2aa3fd6/win32ss/user/ntuser/class.c
     
  6. unc1e

    unc1e Active Member

    Публикаций:
    2
    Регистрация:
    28 июл 2017
    Сообщения:
    251
  7. superakira

    superakira Active Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    242
    unc1e, Есть вероятность что многое поменялось со времен 2к) но это не точно. последн.. встречу с win32k.sys вспоминаю с дрожью))
     
  8. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    1.786
    superakira,

    Поменялось. Но по мойму инфа тс данная не нужна и понять её он не может, так что вы в пустоту говорите.
     
  9. Fail

    Fail Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2012
    Сообщения:
    349
    Так, так, Инде. Вы о _всем известных сурках_ или что то новее появилось в паблике и я это прозевал?:)
     
  10. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.518
    Адрес:
    Russia
    да, как устроен гуй в части управления и структурирования классов окон

    как я понял он наращивается по ходу подгрузки всяких dll теже комонконтролы - тривью, закладки свойств, ричэдиты всякие ...

    паблик апи говорит, как сделать свое, но ни слова как работает механизм учета всего этого хозяйства
     
  11. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    1.896
    Так а о чем там говорить? Простой ассоциативный список структур WNDCLASSEX, индексированный по хэшу от имени класса (ATOM).
     
    Indy_ нравится это.
  12. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.518
    Адрес:
    Russia
    я могу понять все, что излагается последовательно и подробно(обстоятельно)
    другой вопрос, что мне не все настолько интересно, что я брошусь сломя голову вникать
     
  13. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.518
    Адрес:
    Russia
    ну например как написать тулзу, которая смотрит для каждого процесса насколько развитая система классов с ним связана (в простейшем случае список зареганых классов каждым процессом)
     
  14. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.518
    Адрес:
    Russia
    спс, позырю
     
  15. comrade

    comrade Константин Ёпрст

    Публикаций:
    0
    Регистрация:
    16 сен 2002
    Сообщения:
    215
    Адрес:
    Russian Federation
    Так-же смотри на плагин !userexts в windbg:
    https://stackoverflow.com/a/18045541

    Введи !userexts в гугл, он тебе и исходный код даст (NT 4 source code на github). What a time to be alive.
     
  16. unc1e

    unc1e Active Member

    Публикаций:
    2
    Регистрация:
    28 июл 2017
    Сообщения:
    251
    Там внутри значит вызывается NtUserBuildHwndList (возвращает массив hwnd), затем просто тупо вызывается EnumWindowsProc куда передается каждый этот hwnd
    // Делаю проект на конференцию в вузе (баллы должны добавить к егэ), решил использовать и эту функу на нативе