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 andnot 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.