GetWindowLong

Тема в разделе "WASM.WIN32", создана пользователем Peretyatkov, 5 сен 2017.

Метки:
  1. Peretyatkov

    Peretyatkov New Member

    Публикаций:
    0
    Регистрация:
    4 сен 2017
    Сообщения:
    11
    Наверняка этот вопрос, хоть раз, но уже задавался. Если что простите.

    Хотелось бы обращаться к сохраняемым данным окон не через очень длинные последовательности GetWindowLong / SetWindowLong, а именно непосредственно, по тому или иному смещению, скажем от HWND.

    То есть, что-то вроде следующего:

    Код (ASM):
    1.  
    2. mov eax, HWND
    3. ...
    4. mov eax, dword ptr [eax + AnyOffset]  ;  eax = нужное значение
    5.  
    Лично мне, в отладчике найти смещение не удалось – там слишком много операций. И уже, хотя бы по этой причине, это – очень серьезная расточительность. Собственно, в связи с этим об этом и задумался.
     
  2. Indy_

    Indy_ Well-Known Member

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

    Очень странный вопрос. Что вы понимаете под последовательностями и смещениями ?

    Теневые обькты, те что связаны с GUI, реализованы частично в режиме пользователя. Сами обьеты и их базы данных храняться в ядре и для быстрой работы с обьектами эти данные отображаются на пользовательское пространство в виде очень запутанных структур. Там нет понятия смещений. Вычисление описателя это довольно хитрый и сложный механизм, большая часть данных связанных с обьектом это ядерные указатели, которые транслируются на пользовательские ссылки.

    По мойму вы запутались из за того, что у вас в уме смешалось всё, вы каким то образом отождествляете сложный и абстрактный обьект(теневой описатель) с обычной скрипт конструкцией(дереференс памяти, разыменование указателя). Обьект гуя не является структурой, на него нельзя ссылаться.

    Поймите что описатель это абстракция, это не есть указатель.
     
    Peretyatkov нравится это.
  3. Peretyatkov

    Peretyatkov New Member

    Публикаций:
    0
    Регистрация:
    4 сен 2017
    Сообщения:
    11
    Да, я понимаю что HWND это не указатель, а всего лишь описатель. Но тем не менее - хотелось бы обращаться именно так. Так попросту было бы лучше.
     
  4. Indy_

    Indy_ Well-Known Member

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

    Не вы разработали это, вы можите только изучить и использовать. Если вы хотите копаться во внутренностях обьектов, то вам нужно знать трансляции, как кернел обьекты отображаются на юзер память. Это сложный механизм. SHAREDINFO структура ключевая, часть ядра отображена(база данных) в юм. Ссылки на объекты вычисляются через эту память, как разница адресов, при этом есть куча проверок и выборок из вложенных структур.

    Зачем вам всё это, как вы хотите - не соответствует архитектуре.
     
    Mikl___ нравится это.