native user32 dll

Ulrich Weigand weigand at
Mon May 6 14:49:22 CDT 2002

Michael Cardenas wrote:

> Why would address space separation break the native user dll? Shouldn't
> wine's address space handling be the same as windows? Maybe there's
> something I'm not understanding...

Well, there's Windows and then there's Windows ;-)

In Win9x, address spaces are handled in a peculiar way: the lower
2 GB of the address space are changed on context switch, while the
upper 2 GB remain the same across all processes. 

In particular, all 16-bit segments and certain 32-bit DLLs are
de facto mapped shared across all 32-bit processes.  The user.exe
implementation relies on this fact, as I mentioned previously.

Before address space separation, we were handling things somewhat
like Win 3.1 (with win32s), in that everything shared one space.
After address space separation, we are handling things more like
Win NT, in that nothing is shared between processes by default,
except for explicit shared mappings (and shared PE sections).

In particular, 16-bit segments are not shared between processes
(like they aren't in Win NT), which means that user.exe won't work.

Implementing the weird Win9x address space handling exactly under
Linux would be difficult, and in any case we *want* to be more 
like Win NT for stability reasons ...


  Dr. Ulrich Weigand
  weigand at

More information about the wine-devel mailing list