[Bug 49195] Multiple 4k demoscene OpenGL demos crash on startup (failure to lookup atom 0xC019 'static' from global atom tables)
WineHQ Bugzilla
wine-bugs at winehq.org
Wed Feb 17 03:27:42 CST 2021
https://bugs.winehq.org/show_bug.cgi?id=49195
--- Comment #3 from Anastasius Focht <focht at gmx.net> ---
Hello Nikolay,
--- quote ---
I'm guessing exact values rely on the order in which they happen to be
registered by first application (explorer?) to touch user32 in give winstation?
Or maybe it's not preserved as an important compatibility artifact.
--- quote ---
when talking about global atom constants the demo scene thread
http://www.pouet.net/topic.php?which=9894 references another (Japanese) blog:
http://www5d.biglobe.ne.jp/~noocyte/Programming/Windows/WindowsTips.html
https://translate.google.com/translate?hl=&sl=ja&tl=en&u=http%3A%2F%2Fwww5d.biglobe.ne.jp%2F~noocyte%2FProgramming%2FWindows%2FWindowsTips.html
"ATOM values for various control classes" -> "System-defined Controls"
(user32.dll)
--- quote --
The DLGITEMTEMPLATEEX Structure states that these classes are system
definitions. Then is ATOM a (virtually) constant?
The value of ATOM is the value of windowClass written on the above page plus
0xBF97
(" DLGITEMTEMPLATEEX Structure " says these controls are predefined system
classes, and the ATOM values seem to be (DLGITEMTEMPLATEEX :: windowClass +
0xBF97).)
--- quote --
MSDN page refers to this kind of information:
https://web.archive.org/web/20140920223136/http://msdn.microsoft.com/en-us/library/ms645389.aspx
--- quote ---
windowClass
Type: sz_Or_Ord
A variable-length array of 16-bit elements that specifies the window class
of the control. If the first element of this array is any value other than
0xFFFF, the system treats the array as a null-terminated Unicode string that
specifies the name of a registered window class.
If the first element is 0xFFFF, the array has one additional element that
specifies the ordinal value of a predefined system class. The ordinal can be
one of the following atom values.
Value Meaning
0x0080 Button
0x0081 Edit
0x0082 Static
0x0083 List box
0x0084 Scroll bar
0x0085 Combo box
...
--- quote ---
So according to the blog's formula:
user32 'Button' atom: 0xBF97 + 0x0080 ('Button' system class ordinal) = 0xC017
user32 'Edit atom: 0xBF97 + 0x0081 ('Edit' system class ordinal) = 0xC018
user32 'Static' atom: 0xBF97 + 0x0082 ('Static' system class ordinal) = 0xC019
which matches:
https://github.com/lungetech/ICAS/blob/master/logs/volatility/win32/output/atoms.txt
--- snip ---
Offset(P) Session WindowStation Atom RefCount HIndex Pinned Name
--------- ------- ------------- ------- -------- ------ ------ ----
...
0xd48ca68 n/a n/a 0xc017 1 23 1 Button
...
0xd48ca68 n/a n/a 0xc018 1 24 1 Edit
....
0xd48ca68 n/a n/a 0xc019 1 25 1 Static
--- snip ---
Interestingly the blog is the only reference I could find about this magic
offset. Maybe it's a legacy user16/32 implementation detail from Win9x or even
Win 3.x era. Who knows.
Regards
--
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.
More information about the wine-bugs
mailing list