Edit control messages through Comctl32 v6 module
Nikolay Sivov
bunglehead at gmail.com
Tue Dec 15 04:08:47 CST 2009
On 12/13/2009 15:15, Roderick Colenbrander wrote:
>>> The main test which AJ suggested would be to 'force' native user32 to
>>> call RegisterClassNameW. There would be a dummy dll containing a
>>> RegisterClassNameW to which lets say the Button control would be
>>> redirected using a manifest.
>>>
>> If I got it right you're talking about a dummy dll with compiled in (or
>> separate doesn't matter) manifest with
>> 'windowclass' entry (and without to check it's actually used) to Button,
>> after that we trigger test application reload
>> and dump this RegisterClassNameW call someway?
>>
>>
> Yeah that's the idea. I'm quite certain that this mechanism is used to
> register the class. I just searched some more this morning and found
> stuff I didn't fnd before about subclassing. Read this
> http://msdn.microsoft.com/en-us/library/bb773183%28VS.85%29.aspx It
> talks about four new subclassing related functions which were
> introduced in XP, so it might mean that the controls are subclassed
> after all?
>
> Roderick
>
Looks like it's definitely the way it works. Finally I'm able to
reproduce that. That's what I've done:
1) a DLL with a call:
---
BOOL RegisterClassNameW(WCHAR *name)
{
wprintf(L"%s\n", name);
return FALSE;
}
---
2) an executable with main like that:
---
int _tmain(int argc, _TCHAR* argv[])
{
HWND button;
button = CreateWindowW(L"Button", NULL, WS_VISIBLE, 0, 0, 10, 10, NULL,
NULL, NULL, NULL);
printf("%s, %p\n", "blah", button);
DestroyWindow(button);
return 0;
}
---
3) A generated a hash for DLL with mt.exe and updated a DLL manifest with it
4) After that embedded a dll manifest to dll module
5) Looks like publicKeyToken attribute is necessary for this to work - I
defaulted it to publicKeyToken="1111111111111111".
The final output for .exe is:
---
Button
blah, 00000000
---
So as an additional "feature" - user32 doesn't attempt for register
default classes if a custom RegisterClassNameW() fails.
Now I'm not sure what's next step. It seems that another test is about
more than 1 dll with exported RegisterClassNameW loaded
with same application (what dll will be called to register class isn't
obvious at all).
Another question here is current Wine's actctx support ready for such
tricks?
P.S. If somebody wants a bunch of dull sources to build this testcase
let me know.
More information about the wine-devel
mailing list