Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2013.09.15;
Скачать: [xml.tar.bz2];

Вниз

Надёжность GetWindowLong(H, GWL_USERDATA)   Найти похожие ветки 

 
О-Сознание   (2013-04-03 20:17) [0]

Посмотрел, очень много кода в VCL держится на получении информации через эту функцию.
А вдруг прогер перепишет её?
Или кто-то сторонний.

Всё разрушится.

Как-то не надёжно получается. (Поправьте меня)


 
Германн ©   (2013-04-03 20:21) [1]


> А вдруг прогер перепишет её?

WinAPI-шную функцию?


 
clickmaker ©   (2013-04-03 20:21) [2]

> А вдруг прогер перепишет её?

прогер в MS? и как ее можно переписать, чтобы всё разрушилось?


 
брат Птибурдукова   (2013-04-03 20:25) [3]

Прогерия — очень редкое заболевание. Шансы на то, что её перепишет прогер, исчезающе малы.


 
О-Сознание   (2013-04-03 20:30) [4]


>  Германн ©   (03.04.13 20:21) [1]
>
>
> > А вдруг прогер перепишет её?
>
> WinAPI-шную функцию?


Перепишет информацию через SetWindowLong.
Логично же.


 
clickmaker ©   (2013-04-03 20:40) [5]

> очень много кода в VCL держится на получении информации
> через эту функцию

кстати, а какого кода? В Д7 я нашел только объявление в Windows.pas


 
О-Сознание   (2013-04-03 20:47) [6]


> clickmaker ©   (03.04.13 20:40) [5]
>
> > очень много кода в VCL держится на получении информации
> > через эту функцию
>
> кстати, а какого кода? В Д7 я нашел только объявление в
> Windows.pas
>  


Лень искать.
Чисто для примера, где обычно применяется:


uses Clipbrd;



function NewEditProc(wnd:HWND; uMsg:UINT; wParam:WPARAM; lParam:LPARAM):integer; stdcall;

var

s:string;

i:integer;

begin

if (uMsg=WM_PASTE) and Clipboard.HasFormat(CF_TEXT) then

begin

s := Clipboard.AsText;

for i:=1 to Length(s) do if (not (s[i] in ["0".."9"])) then begin uMsg:=0; break end

end;

result:=CallWindowProc(Pointer(GetWindowLong(wnd,GWL_USERDATA)),wnd,uMsg,wParam, lParam)

end;



procedure TForm1.FormCreate(Sender: TObject);

begin

SetWindowLong(Edit1.Handle,GWL_STYLE,GetWindowLong(Edit1.Handle,GWL_STYLE) or ES_NUMBER);

SetWindowLong(Edit1.Handle,GWL_USERDATA,SetWindowLong(Edit1.Handle, GWL_WNDPROC, LPARAM(@NewEditProc)))

end;



 
clickmaker ©   (2013-04-03 20:50) [7]

> Лень искать

я поискал за тебя. Ни в Д7, ни в XE3 нету использования GWL_USERDATA


 
О-Сознание   (2013-04-03 20:55) [8]


> clickmaker ©   (03.04.13 20:50) [7]
>
> > Лень искать
>
> я поискал за тебя. Ни в Д7, ни в XE3 нету использования
> GWL_USERDATA


Да не суть.
Использование GWL_USERDATA - не надёжно.


 
брат Птибурдукова   (2013-04-03 21:02) [9]

Аминь.


 
Rouse_ ©   (2013-04-03 21:13) [10]

GWL_USERDATA и DWL_USER это аналоги Tag у VCL классов.
О какой надежности ты говоришь? Это обычная переменная, не более того.
Буфером обмена тоже страшно пользоваться - его тоже постоянно все кому не лень очищают, но как-то живем...


 
clickmaker ©   (2013-04-03 21:24) [11]

Тэгами тоже ненадежно. И вообще, жить страшно


 
О-Сознание   (2013-04-03 21:40) [12]


> Rouse_ ©   (03.04.13 21:13) [10]


Это всё понятно.
GWL_USERDATA напрашивается записать туда.
Т.е. код, допустим тот что выше - не заработает.
Поэтому можно словить глюк использую такой код из чужой либы.
Почему бы не сделать защищенную глобальную переменную внутри либы?
Вместо указателя на WndProc получим нечто и всё полетит.

Зачем использовать GWL_USERDATA?


> Буфером обмена тоже страшно пользоваться - его тоже постоянно
> все кому не лень очищают, но как-то живем...


Что страшного?


 
О-Сознание   (2013-04-03 21:40) [13]

Думаю это тянет на небольшую заметку для Реймона Чена.


 
О-Сознание   (2013-04-03 21:41) [14]

* От Реймона Чена.


 
DVM ©   (2013-04-03 21:45) [15]


> О-Сознание   (03.04.13 21:40) [13]
> Думаю это тянет на небольшую заметку для Реймона Чена.

Ни на что это не тянет, паранойя это.


 
брат Птибурдукова   (2013-04-03 23:21) [16]


> Думаю это тянет на небольшую заметку для Реймона Чена
Сам себя не похвалишь — сидишь как оплёванный…


 
clickmaker ©   (2013-04-03 23:26) [17]

> От Реймона Чена.

Ага, пусть мир наконец узнает, в чем причина всех глюков от MS


 
Игорь Шевченко ©   (2013-04-03 23:42) [18]

Мне бы ваши заботы, господин учитель


 
О-Сознание   (2013-04-04 00:09) [19]


> DVM ©   (03.04.13 21:45) [15]


Читайте переводы у GunsМокера и
сравнивайте, так такие же маленькие заметки.

Да чего вы к нему привязались?
Прокомментируйте лучше 12 пост.


> Игорь Шевченко ©   (03.04.13 23:42) [18]
>
> господин учитель


Я не учу, а спрашиваю.


 
О-Сознание   (2013-04-04 00:11) [20]


> брат Птибурдукова   (03.04.13 23:21) [16]
>
>
> > Думаю это тянет на небольшую заметку для Реймона Чена
> Сам себя не похвалишь — сидишь как оплёванный…


Левое слово пока в тред не вставишь, зря на ДМ заходил.


 
имя   (2013-04-04 01:44) [21]

Удалено модератором


 
DVM ©   (2013-04-04 10:18) [22]


> О-Сознание   (04.04.13 00:09) [19]


> Да чего вы к нему привязались?
> Прокомментируйте лучше 12 пост.

А чего там комментировать? GWL_USERDATA такая же переменная как и любая другая, только привязанная к структурам окна. Разумеется в нее можно записать, т.к. есть отдельная функция для этого. Как впрочем можно записать и в любую другую область памяти, тем самым нарушив работу какого то кода.
Тебя не беспокоит, что вообще можно попортить многие структуры в Windows, указатели на которые ты получаешь под видом хэндлов? И ничего живут люди и программы.

Тебя беспокоит тот факт, то эту переменную кто-то кроме тебя одновременно с с тобой станет использовать для одного и того же окна? Ну так документировать надо данный факт, еще проверять, не записано ли там что-то перед использованием. А вообще эта переменная исключительно для пользовательского конечного кода, библиотеки не должны ее использовать.


 
О-Сознание   (2013-04-04 11:18) [23]


> DVM ©   (04.04.13 10:18) [22]
>
>
> > О-Сознание   (04.04.13 00:09) [19]
>
>
> > Да чего вы к нему привязались?
> > Прокомментируйте лучше 12 пост.
>
> А чего там комментировать? GWL_USERDATA такая же переменная
> как и любая другая, только привязанная к структурам окна.
>  Разумеется в нее можно записать, т.к. есть отдельная функция
> для этого. Как впрочем можно записать и в любую другую область
> памяти, тем самым нарушив работу какого то кода.
> Тебя не беспокоит, что вообще можно попортить многие структуры
> в Windows, указатели на которые ты получаешь под видом хэндлов?
>  И ничего живут люди и программы.
>
> Тебя беспокоит тот факт, то эту переменную кто-то кроме
> тебя одновременно с с тобой станет использовать для одного
> и того же окна? Ну так документировать надо данный факт,
>  еще проверять, не записано ли там что-то перед использованием.
>  А вообще эта переменная исключительно для пользовательского
> конечного кода, библиотеки не должны ее использовать.
>


Вот об этом и говорю.
Не должны, но могут.

Портить хэндлы явный пример не правильного использования.
А юзер-дата - общая штука.

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


 
clickmaker ©   (2013-04-04 11:22) [24]

> некто возьмёт и поместит код выше в либу, забудет, а потом
> будет удивляться почему не работает ничего

ССЗБ


 
брат Птибурдукова   (2013-04-04 11:29) [25]


> некто возьмёт и поместит код выше в либу, забудет, а потом
> будет удивляться почему не работает ничего
ага, "не будем показывать пальцем", как говорится


 
Игорь Шевченко ©   (2013-04-04 12:52) [26]

There"s no limit to how bad things can get


 
О-Сознание   (2013-04-05 20:02) [27]


> брат Птибурдукова   (04.04.13 11:29) [25]
>
>
> > некто возьмёт и поместит код выше в либу, забудет, а потом
> > будет удивляться почему не работает ничего
> ага, "не будем показывать пальцем", как говорится


Ты за словами следить не пробовал?
Например, обработать приватные поля окна в WndProc делают через эту
функцию. Потом копируют и удивляются.


> clickmaker ©   (04.04.13 11:22) [24]
>
> > некто возьмёт и поместит код выше в либу, забудет, а потом
> > будет удивляться почему не работает ничего
>
> ССЗБ


Дык про это и речь, чтобы их не было.


 
Rouse_ ©   (2013-04-05 20:12) [28]


> О-Сознание   (05.04.13 20:02) [27]

Ты чего боишься то в итоге? То что тебе извне перепишут GWL_USERDATA?
А то что тебя извне могут открыть под отладчиком и вообще перекроить логику работы твоей программы - не боишься?
Плюнь и забудь - данное поле предназначено для программистов. Если программист переписывает данное поле, то не важно есть там твое значение или нет - программист явно знает что он делает.


 
брат Птибурдукова   (2013-04-05 20:21) [29]


> Ты за словами следить не пробовал?
И за словами, и за байтами, и за двойными словами следил… Теперь вот с этой ихней 64-битностью и за квад-словами следить придётся иногда.


 
картман ©   (2013-04-05 21:34) [30]

http://www.youtube.com/watch?v=Be1ZHRri78I


 
О-Сознание   (2013-04-07 17:31) [31]


> Rouse_ ©   (05.04.13 20:12) [28]
>
>
> > О-Сознание   (05.04.13 20:02) [27]
>  программист явно знает
> что он делает.
>


Ну-ну.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2013.09.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.002 c
15-1365008140
Технарь
2013-04-03 20:55
2013.09.15
Девайс с браузером для ТВ


2-1357291115
Pcrepair
2013-01-04 13:18
2013.09.15
Проблемы с передачей параметров в поток через TStringList


15-1365193803
Юрий
2013-04-06 00:30
2013.09.15
С днем рождения ! 6 апреля 2013 суббота


15-1364759274
xayam
2013-03-31 23:47
2013.09.15
Стереограмма


6-1269263709
DevilDevil
2010-03-22 16:15
2013.09.15
Считать HTML c VKontakte





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский