Arwinss

From ReactOS Wiki
Revision as of 15:07, 2 January 2010 by EmuandCo (talk | contribs) (TODO)
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.

Usage

Checkout the arwinss branch (svn://svn.reactos.org/reactos/branches/arwinss/reactos), and compile using following command:

makex comctl32 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.

Architecture

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:

Arwinss.png


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

Hacking

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):

  • #933 "OO.114 - Installation wizard with blank text"
  • #1175 "listbox does not hide scrollbars in listbox"
  • #1239 "Winamp's Main Window Unclickable"
  • #1472 "Options are not visible 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"
  • #4443 "Firefox 3 - Can't scroll page with mouse wheel."
  • #4501 "When closing one window, Firefox gets restored if it was minimized"
  • #4612 "tn5250: can't move window"
  • #4779 "K-Meleon popup menus don't work"
  • #5069 "JPEG artifacts in installers"

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

TODO

This list is legacy and will be removed soon! A new place for this is ReactOS Assembla space http://www.assembla.com/space/reactos

  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
  23. arwinss takes ages to boot on 1st stage and 2nd stage showing: WARNING: IoReportResourceUsage at ntoskrnl\io\iomgr\iorsrce.c:700 is UNIMPLEMENTED!
  24. arwinss hangs in 2nd stage with "CMP_WaitNoPendingInstallEvents() failed! Rebooting now!"