Окно без ГУИ

Тема в разделе "WASM.WIN32", создана пользователем Proteus, 10 дек 2008.

  1. Proteus

    Proteus Member

    Публикаций:
    0
    Регистрация:
    19 июн 2004
    Сообщения:
    344
    Адрес:
    Russia
    Был какой-то класс окна, которое ничего никогда не рисует и вообще ГУИ не трогает. Только сообщения обрабатывает. Такая типа лайт версия окошка. Только название класса запамятовал, а yandex не сильно помогает.

    Никто не напомнит?
     
  2. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    message only window
     
  3. Proteus

    Proteus Member

    Публикаций:
    0
    Регистрация:
    19 июн 2004
    Сообщения:
    344
    Адрес:
    Russia
    Ну ок)) вопрос закрыт
     
  4. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Proteus
    Раз уж ты с этим работаешь, окажи услугу. Создай такое окно и попробуй найти его с помощю FindWindow/EnumWindows/GetWindow... Что выйдет? Просто хочу подтвердить одну свою догадку. Если не найдется - я расскажу в чем дело. Если найдется - знач я ошибся.
     
  5. Proteus

    Proteus Member

    Публикаций:
    0
    Регистрация:
    19 июн 2004
    Сообщения:
    344
    Адрес:
    Russia
    Ну у меня помойму Spy++ его как нечего делать видел. А он именно Enum делает)...
    А догадку лучше расскажи, интересно....
     
  6. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    Нда...
    http://www.wasm.ru/forum/viewtopic.php?id=14302, пост #24
     
  7. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    Надо полагать, Spy++ у вас наиновейшей версии ? :)
    Раньше-то он message-only в упор не видел.
    Только на живой hWnd, вписанный в "Find Window", и реагировал (кое-как).
     
  8. Proteus

    Proteus Member

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

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    kero
    Топик тот и соответствующий раздел msdn я читал давненько и не обратил внимания на то, что такие окна не перечисляются. Спасибо за наводку.

    Моя догадка подтвердилась. :)

    Все знают (или не знают ;) ), что в системе есть самое "главное" окно. Хэндл его всегда равен 0x00010002, а по своим свойствам оно является окном десктопа (DesktopWindow) и находится на вершине дерева окон. И хоть это окно принадлежит desktop'у "\Winlogon", оно не является его десктоп-окном, им является другое окно уровнем ниже. На уровень ниже распологаются окна, принадлежащие десктопам (DesktopObject) - именно их хэндлы возвращает GetDesktopWindow(). Следующими уровнями идут дочерние окна десктопов, те, что можно перечислить различными функциями, те что мы видим перед глазами (top-level и их дочки). Так вот. Оказывается, что на одном уровне с окнами десктопов есть еще окна, с классом "Message", по одному на десктоп. Все message-only окна десктопа являются дочерними к "Message"-окну. Именно по этому они не перечисляются просто так, но к их свойствам можно обращаться. Наглядно можно посмотреть на картинке:

    [​IMG]

    Окно 0x00010014 - это дефолтный десктоп, а 0x00010016 (выделено) - родитель для всех его message-only окон.
     
  10. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    Ну, пост #24 в том топике скорее о том, что такие окна все-таки перечисляются, несмотря на соответствующий раздел msdn :)

    Так эта, ваша догадка подтвердилась уже в том топике :)
    После запуска приложенной к посту #24 утилитки WinTreeSnap получаем:
    Код (Text):
    1.  !! USE WORD-UNWRAP + MONOSPACED FONT (Courier, FixedSys,..)
    2.  
    3. Foreground: 00020076
    4. Focus:      00010090
    5. Cursor:    (865,324) >
    6.  
    7.                                                                                                                                                                                         GetWindowLong GetClassLong                                                                                                                 (if unequal)
    8. Z-ord   hWnd      Parent    Owner       Tree          Status    Width  Height       X       Y   rel.X   rel.Y     ID/10    ID/16    ThreadID  ProcessID   Exec.file             hInst       WndProc     WndProc    UserData  ExStyles  Styles    C.Styles  Atom    Class                                  "SendMessage WM_GETTEXT" /GetWindowText
    9.  
    10.     0   00010014  00000000  00000000    HWND_DESKTOP  > VE 0     1280    1024       0       0       0       0         0        0    00000260  00000224    csrss.exe             bf800000    00000000   77d76658    00000000  00000000  96000000  00000008  8001    #32769                                 ""
    11.     1   0041013e  00010014  00030048     w              HE 0        0       0       0       0       0       0         0        0    0000051c  000004c0    explorer.exe          77f60000    00000000   77d3df6b    00000000  00000088  84000000  00000000  c08c    WorkerW                                ""
    12. ...
    13.    90   00010094  00010014  00020076     w            >aHE 0      960     735      66      66       0       0         0        0    000004c4  000004c0    explorer.exe          7c9c0000    00000000   ffff0115    00000000  00080080  84800000  00024008  c03f    tooltips_class32                       ""
    14.    91   00020076  00010014  00000000     w            > VE 0     1280    1024       0       0       0       0         0        0    000004c4  000004c0    explorer.exe          7c9c0000    00000000   ffff0195    00000000  00000080  96000000  00000008  c0ad    Progman                                "Program Manager"
    15.    92   0001008e  00020076  00000000     .w           > VE 0     1280     990       0       0       0       0         0        0    000004c4  000004c0    explorer.exe          7c9c0000    00000000   ffff0169    00000000  00000000  56010000  00000080  c0de    SHELLDLL_DefView                       ""
    16.    93   00010090  0001008e  00000000     ..w          > VE 3     1280     990       0       0       0       0         1        1    000004c4  000004c0    explorer.exe          7c9c0000    00000000   ffff0183    00000000  00000000  56002a40  00004008  c043    SysListView32                          "FolderView"
    17.    94   00160140  00010090  00000000     ...w           HE 0        0       0       0       0       0       0         0        0    000004c4  000004c0    explorer.exe          7c9c0000    00000000   ffff01e9    00000000  00000000  400000c2  00004008  c045    SysHeader32                            ""
    18.    95   00440106  0001008e  00000000     ..w          > VE 0     1280     990       0       0       0       0         0        0    000004c4  000004c0    explorer.exe          7d4a0000    00000000   ffff0107    0134ac50  00000000  56000000  00000008  c100    Internet Explorer_Server               ""
    19.    96   004800f6  00440106  00000000     ...w           HE 1        0       0       0       0       0       0  20116336  132f370    000004c4  000004c0    explorer.exe          7c9c0000    00000000   ffff0299    00000000  00000000  44000000  0000000b  c198    DeskMover                              ""
    20.  
    21. Message-only windows:
    22.  
    23.     0   00010016  00000000  00000000    HWND_MESSAGE    HE 0      100     100       0       0       0       0         0        0    00000260  00000224    csrss.exe             bf800000    00000000   77d3df6b    00000000  00000000  86000000  00000000  c035    Message                                ""
    24.     1   00010018  00010016  00000000     w              HE 0       50      17    1230      28       0       0         0        0    00000260  00000224    csrss.exe             bf800000    00000000   00000000    00000000  00000088  84800000  00000808  8006    #32774                                 ""
    25.     2   002f0146  00010016  00000000     w              HE 0      112      27       0       0       0       0         0        0    000004c4  000004c0    explorer.exe          77250000    00000000   7725616a    00000000  00000100  04c00000  00000000  c1a0    URL Moniker Notification Window        ""
    26.     3   000801ee  00010016  00000000     w              HD 0        0       0       0       0       0       0         0        0    000001b8  000001ac    ctfmon.exe            746e0000    00000000   746ff99e    00000000  00000000  8c000000  00000003  c0bf    CicMarshalWndClass                     "CicMarshalWndILB"
    27.     4   000200bc  00010016  00000000     w              HD 0        0       0       0       0       0       0         0        0    000004c4  000004c0    explorer.exe          746e0000    00000000   746ff99e    00000000  00000000  8c000000  00000003  c0bf    CicMarshalWndClass                     "CicMarshalWndEME"
    28.     5   000201b2  00010016  00000000     w              HD 0        0       0       0       0       0       0         0        0    000006f0  000004c0    explorer.exe          774d0000    00000000   ffff01ef    00000000  00000000  8c000000  00000000  c038    OleMainThreadWndClass                  "OLEChannelWnd"
    29.     6   000100aa  00010016  00000000     w              HD 0        0       0       0       0       0       0         0        0    00000130  000001c8    setpoint.exe          774d0000    00000000   ffff01dd    00000000  00000000  8c000000  00000000  c038    OleMainThreadWndClass                  "OleMainThreadWndName"
    30.     7   000100a4  00010016  00000000     w              HD 0        0       0       0       0       0       0         0        0    0000051c  000004c0    explorer.exe          746e0000    00000000   746ff99e    00000000  00000000  8c000000  00000003  c0bf    CicMarshalWndClass                     "CicMarshalWndMBF"
    31.     8   00030030  00010016  00000000     w              HD 0        0       0       0       0       0       0         0        0    00000128  0000011c    rundll32.exe          774d0000    00000000   ffff015b    00000000  00000000  8c000000  00000000  c038    OleMainThreadWndClass                  "OleMainThreadWndName"
    32.     9   0001009a  00010016  00000000     w              HE 0        0       0       0       0       0       0         0        0    000004c4  000004c0    explorer.exe          774d0000    00000000   ffff01b1    00000000  00000000  84000000  00000000  c0b2    CLIPBRDWNDCLASS                        ""
    33.    10   0001007e  00010016  00000000     w              HE 0        0       0       0       0       0       0         0        0    0000051c  000004c0    explorer.exe          774d0000    00000000   ffff01b1    00000000  00000000  84000000  00000000  c0b2    CLIPBRDWNDCLASS                        ""
    34.    11   00030046  00010016  00000000     w              HD 0        0       0       0       0       0       0         0        0    0000051c  000004c0    explorer.exe          774d0000    00000000   ffff01ef    00000000  00000000  8c000000  00000000  c038    OleMainThreadWndClass                  "OLEChannelWnd"
    35.    12   0003003a  00010016  00000000     w              HD 0        0       0       0       0       0       0         0        0    000004c4  000004c0    explorer.exe          774d0000    00000000   ffff01ef    00000000  00000000  8c000000  00000000  c038    OleMainThreadWndClass                  "OleMainThreadWndName"
    36.    13   0001001a  00010016  00000000     w              HE 0      100     100       0       0       0       0         0        0    00000260  00000224    csrss.exe             bf800000    00000000   77d76748    00000000  00000181  84800000  00020808  8000    #32768                                 ""
    37.  
    38. OSVERSIONINFO: Windows XP  5.01.2600 Service Pack 2
    39.  
    40.  
    41.  Status :  a - WS_EX_LAYERED,  Vis/Hid,  En/Dis,  Max/min,  0/1/2/3 => hasn't region/has NULLREGION/SIMPLEREGION/COMPLEXREGION
    42.       > :  cursor over window
    43.       # :  1-st non-topmost top-level window
    44.  Output :  wtsnap_[number of top-level windows]_[TickCount]
    45.  
    46.  
    47.  © WinTreeSnap by kero <geocities.com/xmemor>, v.2006-08-31  (init: v.2004-07-27)
     
  11. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    * Будем считать мою догадку маленьким дополнением к уже известной инфе...
     
  12. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    Twister
    Ну, раз уж заинтересовались message-only, - вот дополнительная маленькая загадка (дублирую из http://www.wasm.ru/forum/viewtopic.php?id=27477):

    .
     
  13. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Я, пожалуй, поэксперементирую на досуге, как будет время. Но, честно говоря, сколько ни дизасмил функции создания окон, ни где не встречал намеренного присвоения Parent = HWND_MESSAGE. Возможно, врет GetAncestor(), надо в него заглянуть...

    Как видно из скриншота, WnDViewer перечисляет абсолютно любые окна абсолютно любых десктопов - перечислить можно все. ;)
     
  14. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Проверил - система, и правда, изначально высталяет родителя в HWND_MESSAGE, затем вызывает цепочку хуков, и только потом ищет (если нужно) и устанавливает реальный Parent. Немного непонятно - на момент вызова хука в структуре окна довольно много вещей не инициализировано - что мешало вызвать хук чуть позже?
     
  15. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    Возможно, роль WH_CBT как раз в том, чтоб - чуть раньше? Чуть позже - это уже WH_SHELL с его HSHELL_WINDOWCREATED :)

    Но правильно ли вас понял: ваши эксперименты подтверждают, что HWND_MESSAGE назначается системой всегда, а не только тогда, когда CBT-хук ?
    Да, и как обстоят дела с другими ОС ?
     
  16. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Да, HWND_MESSAGE назначается системой всегда, на всей NT-линейке.
     
  17. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    Twister

    На https://rootkits.ru/viewtopic.php?pid=6336#p6336 попалась ваша заготовка WnDViewer_2.0

    Обнуляем имя произвольного окна, но WnDViewer показывает последнее непустое имя этого окна.

    Откуда считывали имя окна? И стоит ли оттуда?

    ---
    Добавлено во избежание недоразумений:
    никакого "исследования" не проводил, просто до запуска WnDViewer запускался FrameRector, последствия оказались налицо :)
     
  18. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Непосредственно из структуры tagWND. Надо будет поэксперементировать на досуге, я просто уже недели две не садился за WnDViewer.
     
  19. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    Twister
    Как дела?
     
  20. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    Twister
    твоя картинка №9 ушла в небытие