From ReactOS Wiki
Revision as of 03:06, 25 December 2009 by Lone Rifle (talk | contribs) (Arwinss section is an introduction, make it so.)
Jump to: navigation, search

Arwinss is an alternative implementation of the core Win32 subsystem components. This is NOT designed to supplant the ReactOS Win32 subsystem, instead it is a temporary solution that may become irrelevant when the Win32 subsystem is finished.


Checkout the arwinss branch (svn://, and compile using following command:

makex user32 gdi32 win32k winent win32csr freetype kernel32 explorer winlogon

This will build you all needed modules of a new subsystem, which you need to copy over to the installed ReactOS version. Modified kernel32.dll is needed only for a compatible global atoms support.

If you want to build winex11 module, you need to firstly copy lib/3rdparty/libX11/libX11.a file from your working copy to the obj-i386/lib/3rdparty/libX11 directory (creating it if it doesn't exist). This will fix the winex11.drv linking issues, and you can just type

makex winex11

to build this optional module.

IMPORTANT: Set your display bit depth to 32bpp and resolution to 800x600.


Arwinss uses parts of Wine architecture, and parts of Windows NT architecture in appropriate places and in a good way.The overall call flow / architecture of Arwinss looks like this:


It consists of the following modules, one of them being optional (winex11.drv):

  • dll/3rdparty/freetype - implements usermode font rendering (FreeType library, with small ros glue), used by gdi32.dll
  • dll/win32/user32 - implements USER API
  • dll/win32/gdi32 - implements GDI API
  • dll/win32/winent.drv - implements native graphics and user drivers
  • dll/win32/winex11.drv - implements X11 X-windows graphics and user drivers
  • subsystems/win32/win32k - implements kernel mode counter part of the native graphics driver and a kernel mode USER server.
  • subsystems/win32/csrss/win32csr - implements needed parts of the CSR subsystem along with handling user input


Most of the hacking happens in winent.drv and win32k.sys, with very rare fixes to the user32/gdi32 (mainly, because it's a tested Wine's code with only minor changes).

Convention for marking changes. C++ code comments (//) mean that the place has some special mark up for debugging. A typical use is for a

// FIXME: Something

Potential Benefits

Arwinss is still not usable, in spite of that, these bugs would be fixed if it was ready (just a short list):

  • #1239 "Winamp's Main Window Unclickable"
  • #1472 "Options are not visibile in WinAMP 2.X configuration window"
  • #1546 "Two carets on the screen at one with two edit areas opened"
  • #1776 "Microsoft remote desktop client can't connect, computername can't be entered"
  • #2393 "Firefox 1.5 Download, you need move the mouse."
  • #2769 "Redraw bug using ShowWindow for a child window of a dialog"
  • #2788 "Wrong right click behaviour - unwanted multiple selection"
  • #2835 "Opera 9.64: Unable to locate timer in message queue for W..."
  • #3500 "Charmap redrawing bug"
  • #3542 "background image is clipped in some installers (abiword) in first page"
  • #3893 "Properties for Date/Time: mouse pointer disappears"
  • #3966 "can't hit enter on a selected item to open it"
  • #4612 "tn5250: can't move window"

As one can see from these bug titles it mainly boils down to drastically improved user32 and gdi32 support.


This list is legacy and will be removed soon! A new place for this is ReactOS Assembla space

  1. [Fixed] Check situation with desktop and top windows - need to ensure there is no auto "one desktop per application" creation happens!
  2. [Fixed] Check all places which use PsLookupThreadByThreadId and fix reference counting
  3. Enable commented out places in the font output code (ET_OPAQUE, etc)
  4. [Fixed] No desktop background (hacked away in win32csr)
  5. [Fixed] Fix absence of a background color in windows, and general lacking of windows painting
  6. [Fixed] Fix a "err:(dll\win32\gdi32\freetype.c:3068) FT_New_Face rets 85" problem, resulting in a hack in RosDrv_GetTextMetrics
  7. [Fixed] Fix RosGdiSelectBitmap with an incorrect user bitmap handle (probably a stock bitmap?)
  8. [Assembla #2]Make win32k/wine/queue.c (timer callback and timeout callback) multithread aware. Right now it doesn't lock its lists
  9. [Fixed] Make user/kernel handles mapping multithread aware. NOTE: It already was.
  10. [Fixed] Add some real locking to GDI_ObjGetPtr / GDI_ObjRelease. NOTE: Just added multithread safety to GDI_ObjGetPtr, but pointers to objects are not locked in any way, so release is a noop.
  11. [Fixed] Implement surface bits locking for concurrent accesses
  12. [Fixed] Implement mouse cursor support in win32k
  13. [Fixed] Implement user input in win32k and winent.drv
  14. [Fixed] Implement a locking mechanism for GDI kernel mode objects
  15. [Fixed] Add commented out CombinedClipping region back into all graphics operations
  16. [Fixed] Make /CONSOLE booting from working perfectly
  17. [Fixed] Purge user->kernel handles mapping when a process is destroyed
  18. [Fixed] Get rid of hardcoded 800x600 (and 640x480 in monitor functions) display size
  19. [Fixed] Fix black icons problem
  20. [Fixed] Fix mouse cursor being black problem
  21. [Fixed] Implement moving of windows
  22. [Assembla #5]Implement scrolling support