Impossible OS Docs

user32 Export Master Table

What is it?

The user32 master table is the single checklist of every user32.dll export Impossible OS has to provide for Windows programs that make windows, pump messages and draw controls. Each row names an export, its category, the roadmap that owns it, whether it is done, and notes. It holds 1,114 rows and none is done: there is no user32.dll today. The table plans names and owners only; the NtUser system call numbers behind them live in the Win32k Shadow SSDT Master Table.

How does it work?

The table is split into tiers so the work can be sequenced without losing sight of completeness:

Tier Rows What it covers
Tier 1 23 The core window class and message pump: RegisterClassExA/W, CreateWindowExA/W, ShowWindow, DestroyWindow, GetMessageA/W, TranslateMessage, DispatchMessageA/W, PostMessage, SendMessage, PostQuitMessage and similar
Tier 2 11 The stub suite from the Win32 GDI and USER32 roadmap: GetDC and ReleaseDC, cursor and icon loading, GetSystemMetrics, InvalidateRect, and the open, save and colour dialogs
Tier 3 1,080 Every other named export, parsed from Wine's user32.spec as a scaffold

A further 54 exports in the Wine spec have no name, only an ordinal. They are counted in the methodology section as a bucket, not as rows, to be listed when a real Windows 11 user32.dll is dumped.

What the columns mean. Done is [x] only when a PE program can call the export and it behaves as documented, [/] when partial and [ ] when missing. Owner is the roadmap section that will implement it, or NO_OWNING_TODO when no section has claimed it yet.

Where the code stands. The kernel's PE loader knows only kernel32.dll and ntdll.dll (pe.c), so a program that imports user32.dll gets every thunk set to 0. The shadow SSDT that user32 calls will enter exists as a 1,024-slot table at indices 0x1000 to 0x13FF (ssdt.h, ssdt.c), with no services behind it yet.

What are its interfaces?

Interface Status
C:\Windows\System32\user32.dll (the published import name) Planned
Tier 1 and Tier 2 exports Planned; 0 of 34 done
Tier 3 exports Planned; 0 of 1,080 done
Shadow SSDT, 0x1000 to 0x13FF Table present, empty

How do I use it?

Before implementing a user32 export, find its row, make sure its Owner names a real open section (open one in the owning roadmap if it says NO_OWNING_TODO), and flip Done only when a PE test calls it. When refreshing the table, dump the export directory of a pinned Windows 11 build with llvm-readobj --coff-exports or dumpbin /exports and record the new, renamed and ordinal-only exports against the Wine scaffold.

What is not implemented yet?

Every row. The tiers are worked through their owners:

How does it compare with Windows 11 and Linux?

Windows 11 documents user32 through the SDK headers and Microsoft Learn, with no single list of exports; the export directory of the DLL is the only complete inventory. Linux has no user32; Wine reimplements it for Windows programs, and its spec file is the scaffold here. Impossible OS keeps an explicit, owned row for every export so progress can be counted.

See also

Impossible OS is free software under the GPL-3.0-only license. Last updated Edit this page on GitHub