On Mon Jul 21 12:47:05 2025 +0000, Nikolay Sivov wrote:
So that versioned window classes gets registered as well.
Otherwise, comctl32 v6 fails to register
its window classes when comctl32 v5 classes are still being used.
This can happen, for example, when
creating a window using comctl32 v5, then unload comctl32 v5 and
not destroying the window, and then
load comctl32 v6.
Is this still true? This shouldn't happen if things are working correctly.
Yes. I think it's still true. You can use [print_v6_classes.txt](/uploads/f539fad83dd5c5088b5ea72dab2b344a/print_v6_classes.txt) and run misc tests. You can see that some comctl32 classes are not registered with "6.0.2600.2982!" prefix. ``` 00f0:fixme:class:NtUserRegisterClassExWOW name=L"SysAnimate32" hinst=0x140000000 style=0x4008 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"ComboBoxEx32" hinst=0x140000000 style=0x4000 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"SysDateTimePick32" hinst=0x140000000 style=0x4000 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"flatsb_class32" hinst=0x140000000 style=0x4000 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"SysHeader32" hinst=0x140000000 style=0x4008 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"msctls_hotkey32" hinst=0x140000000 style=0x4000 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"SysIPAddress32" hinst=0x140000000 style=0x400b clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"SysListView32" hinst=0x140000000 style=0x4008 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"SysMonthCal32" hinst=0x140000000 style=0x4000 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"NativeFontCtl" hinst=0x140000000 style=0x4000 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"SysPager" hinst=0x140000000 style=0x4000 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"msctls_progress32" hinst=0x140000000 style=0x4003 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"ReBarWindow32" hinst=0x140000000 style=0x4008 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"msctls_statusbar32" hinst=0x140000000 style=0x4009 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"SysLink" hinst=0x140000000 style=0x4003 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"SysTabControl32" hinst=0x140000000 style=0x400b clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"ToolbarWindow32" hinst=0x140000000 style=0x4008 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"tooltips_class32" hinst=0x140000000 style=0x4808 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"msctls_trackbar32" hinst=0x140000000 style=0x4000 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"SysTreeView32" hinst=0x140000000 style=0x4008 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"msctls_updown32" hinst=0x140000000 style=0x4003 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!Static" hinst=0x140000000 style=0x4088 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!Button" hinst=0x140000000 style=0x408b clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!ComboBox" hinst=0x140000000 style=0x408b clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!ComboLBox" hinst=0x140000000 style=0x24808 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!Edit" hinst=0x140000000 style=0x4088 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!ComboBox" hinst=0x140000000 style=0x408b clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!ComboLBox" hinst=0x140000000 style=0x24808 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!Edit" hinst=0x140000000 style=0x4088 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!Edit" hinst=0x140000000 style=0x4088 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!Edit" hinst=0x140000000 style=0x4088 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!Edit" hinst=0x140000000 style=0x4088 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!Edit" hinst=0x140000000 style=0x4088 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!ListBox" hinst=0x140000000 style=0x4088 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!Static" hinst=0x140000000 style=0x4088 clExtr=0x0 winExtr=0x8
```
After the fix: ``` 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!SysAnimate32" hinst=0x140000000 style=0x4008 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!ComboBoxEx32" hinst=0x140000000 style=0x4000 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!SysDateTimePick32" hinst=0x140000000 style=0x4000 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"flatsb_class32" hinst=0x140000000 style=0x4000 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!SysHeader32" hinst=0x140000000 style=0x4008 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!msctls_hotkey32" hinst=0x140000000 style=0x4000 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!SysIPAddress32" hinst=0x140000000 style=0x400b clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!SysListView32" hinst=0x140000000 style=0x4008 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!SysMonthCal32" hinst=0x140000000 style=0x4000 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!NativeFontCtl" hinst=0x140000000 style=0x4000 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!SysPager" hinst=0x140000000 style=0x4000 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!msctls_progress32" hinst=0x140000000 style=0x4003 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!ReBarWindow32" hinst=0x140000000 style=0x4008 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!msctls_statusbar32" hinst=0x140000000 style=0x4009 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!SysLink" hinst=0x140000000 style=0x4003 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!SysTabControl32" hinst=0x140000000 style=0x400b clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!ToolbarWindow32" hinst=0x140000000 style=0x4008 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!tooltips_class32" hinst=0x140000000 style=0x4808 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!msctls_trackbar32" hinst=0x140000000 style=0x4000 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!SysTreeView32" hinst=0x140000000 style=0x4008 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!msctls_updown32" hinst=0x140000000 style=0x4003 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!Static" hinst=0x140000000 style=0x4088 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!Button" hinst=0x140000000 style=0x408b clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!ComboBox" hinst=0x140000000 style=0x408b clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!ComboLBox" hinst=0x140000000 style=0x24808 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!Edit" hinst=0x140000000 style=0x4088 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!ComboBox" hinst=0x140000000 style=0x408b clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!ComboLBox" hinst=0x140000000 style=0x24808 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!Edit" hinst=0x140000000 style=0x4088 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!Edit" hinst=0x140000000 style=0x4088 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!Edit" hinst=0x140000000 style=0x4088 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!Edit" hinst=0x140000000 style=0x4088 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!Edit" hinst=0x140000000 style=0x4088 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!ListBox" hinst=0x140000000 style=0x4088 clExtr=0x0 winExtr=0x8 00f0:fixme:class:NtUserRegisterClassExWOW name=L"6.0.2600.2982!Static" hinst=0x140000000 style=0x4088 clExtr=0x0 winExtr=0x8
```
As for why datetime.c tests have been succeeding previously. It's because comctl32.dll gets unloaded and then loads again, even though a window created from a comctl32 window class is still active, probably due to some refcount issue that happens to make it work.