From ReactOS Wiki
Jump to: navigation, search

This is the changelog for ReactOS™ version 0.3.12 (released 20 October 2010), an open-source operating system designed to be binary executable - and device driver-compatible with Microsoft™ Windows NT™ and subsequent Microsoft operating systems such as Windows 2000™ and Windows XP™. ReactOS is written by the ReactOS development team, and the last previous version of ReactOS was version 0.3.11 (released 16 December 2009).


Since the last release, ReactOS has seen considerable modification and enhancement at all levels of the operating system. Unlike past changelogs which simply compiled a long list of changes, a highly unwieldy arrangement that did not convey much in the way of useful and accessible information, this changelog will attempt to summarize and emphasize major points of interest. There will still be lists of changes, but these will serve only as further emphasis. Interested readers should find most of the relevant information in the summaries under each section.


Core Developers

  • Giannis Adamopoulos: Applications, Win32.
  • Johannes Anderwald: Kernel, sound.
  • Aleksey Bragin: Filesystem, kernel, Win32k.
  • Colin Finck: Build tools, translations, release engineer.
  • Jérôme Gardou: Win32.
  • Stefan Ginsberg: Kernel.
  • Dmitry Gorbachev: Applications.
  • Cameron Gutman: Networking, PnP.
  • Kamil Horníček: 3D Graphics, Win32.
  • Amine Khaldi: Build tools.
  • Eric Kohl: Kernel, Win32.
  • Timo Kreuzer: Win32k.
  • Matthias Kupfer: Applications, Win32.
  • Michael Martin: Kernel, USB.
  • Jeffrey Morlan: Applications, Win32.
  • Filip Narava: USB.
  • Sylvain Petreolle: Applications.
  • Hervé Poussineau: Kernel.
  • ReactOS Portable Systems Group: ARM porting, drivers, kernel.
  • Daniel Reimer: Build tools, translations.
  • Gregor Schneider: Win32.
  • Pierre Schweitzer: Filesystem, kernel.
  • James Tabor: Win32.
  • Christoph von Wittich: Win32.

Patch Submitters

  • Andrea
  • Carlo Bramini
  • James Edmeades
  • Benedikt Freisen
  • Rafal Harabien
  • Katayama Hirofumi
  • Kusanagi Kouichi
  • Radek Liška
  • Roel Messiant
  • Andrew Nguyen
  • Samuel Serapión
  • Seungju
  • Dmitry Timoshkov
  • Henri Verbeet
  • Daniel Zimmermann


  • forenkrams [AT] tuxproject [DOT] de
  • Edison Henrique Andreassy
  • Egon Ashrafinia
  • Arturs B
  • Maciej Bialas
  • Paolo Devoti
  • Andrew Faulds
  • Javier Fernández
  • Katayama Hirofumi
  • Gabriel Ilardi
  • Mario Kacmar
  • Tomoya Kitagawa
  • Igor Paliychuk
  • Javier Remacha
  • Olaf Siejka
  • Andres Traks
  • Maikel Wever
  • Sakara Yevhen
  • Marcelo Zamperetti

Support Staff

  • Danny Gotte: Web Developer.
  • Ziliang Guo: Release Engineer, Web Content Maintainer.

Generic 0.3.12 Changes

  • Hardware IDs for the following processors have been added to the internal hardware list.
    • Cyrix
    • Pentium MMX, Pro, II, M, 4
    • Core Solo, Duo, Extreme, i3, i5, i7
    • Atom
    • AMD K6, K6-3, Athlon 64, Turion64, Sempron
    • Via Nehemiah, Esther, Nano
  • NTVDM is now only built on x86 builds.


  • Calc: Units and conversion factors added.
  • Cmd: Line breaks follow DOS/Windows style (CRLF) now and various fixes to tab completion.
  • IPconfig: Media detection is now fixed.
  • MSCUtils: Column names now use resource strings instead of hardcoded strings.
  • Netstat: UDP packets are only displayed when the correct argument is passed to netstat at startup.
  • Paint: Initial selection support and angle rounding for lines and edges.
  • Regedit: Fix searching the registry.
  • Taskmgr: Usability fixes to remove outdated information and improve performance of information updates.

Control Panel Applets

  • Console: Store changes when buffer/window size or color changes.
  • Desk: Fix theme switching and screensaver selection.
  • Input: Fix changing of keyboard layout.
  • Intl: Use resource strings for 'metric' and 'Imperial' strings.
  • Sysdm: Fix creation of paging file and place constraints on file size.


Various tweaks were made to the installer to ease installing ReactOS.

  • Provide ability to overwrite GRUB or LILO instead of failing to install Freeloader.
  • Fix reading of partitions created in non-standard formats by Linux.
  • Minimum space check notification improved. Minimum space value also made configurable through text file.
  • Creation of new partitions fixed by correctly writing values of the BIOS Parameter Block.
  • Installer does not restart in second stage if ESC is pressed.
  • PathName and SystemRoot registry key values are now written by the installer.


  • Services no longer trample over other services when reporting their status.
  • DHCP: Service rewritten to be compatible with mswsock_new and not clobber network information stored in the registry. LiveCD now has working networking.
  • EventLog: Fixes to reading and displaying of log content.




  • 3dtext
  • doskey
  • explorer
  • ipconfig
  • mscutils/servman
  • rapps
  • shutdown
  • spider
  • usetup
  • winemine


  • charmap
  • dxdiag
  • fontview
  • magnify
  • mmc


  • appwiz.cpl
  • devmgr
  • intl.cpl
  • netcfgx
  • netid
  • netshell
  • notepad
  • paint
  • regedit
  • setupapi
  • shell32
  • slayer
  • sndvol32
  • sysdm.cpl
  • userenv
  • usetup
  • winemine


  • calc
  • usetup


  • advpack
  • calc
  • dxdiag
  • rapps
  • usetup


  • usetup


  • eventvwr
  • netshell
  • paint
  • spider
  • usetup


  • access.cpl
  • appwiz.cpl
  • calc
  • cmd
  • console
  • desk.cpl
  • deskadp
  • deskmon
  • devmgr
  • doskey
  • downloader
  • dxdiag
  • explorer
  • explorer-new
  • fontview
  • format
  • hdwwiz.cpl
  • input.cpl
  • intl.cpl
  • ipconfig
  • joy.cpl
  • kernel32
  • liccpa.cpl
  • main.cpl
  • mmsys.cpl
  • modemui
  • mplay32
  • msconfig
  • mscutils
  • msgina
  • mstsc
  • netcfgx
  • netid
  • netshell
  • newdev
  • notepad
  • paint
  • powercfg
  • rapps
  • rasdlg
  • reg
  • regedit
  • regsvr32
  • runonce
  • screensavers/3dtext
  • screensavers/logon
  • serialui
  • setup/reactos
  • shdoclc
  • shell32
  • shimgvw
  • sndvol32
  • solitaire
  • spider
  • sysdm.cpl
  • syssetup
  • tapiui
  • taskmgr
  • timedate.cpl
  • user32
  • userenv
  • usetup
  • usrmgr.cpl
  • vmwinst
  • welcome
  • winemine
  • winlogon


  • calc
  • explorer-new
  • intl.cpl
  • mscutils
  • netid
  • netshell
  • paint
  • rapps
  • regedit
  • shell32
  • sysdm.cpl
  • syssetup
  • usetup
  • win32csr


  • cacls
  • charmap
  • magnify
  • mscutils/devmgmt
  • mscutils/servman
  • paint
  • rapps
  • runonce
  • shutdown
  • sndrec32
  • sysdm.cpl
  • syssetup
  • usetup
  • win32csr


  • calc
  • explorer-new
  • mscutils
  • rapps
  • usetup


  • syssetup
  • usetup


  • spider
  • sysdm.cpl
  • usetup


  • calc
  • devmgr
  • explorer-new
  • intl.cpl
  • netshell
  • paint
  • rapps
  • regedit
  • runonce
  • shell32
  • sndrec32
  • syssetup
  • usetup


  • browseui
  • devmgr
  • notepad
  • paint
  • rapps
  • runonce
  • shell32
  • sndrec32
  • spider
  • sysdm.cpl
  • syssetup
  • usetup
  • usrmgr.cpl
  • welcome


  • aclui
  • browseui
  • charmap
  • cmd
  • desk.cpl
  • dxdiag
  • explorer
  • explorer-new
  • freeldr
  • input.cpl
  • kernel32
  • mscutils/devmgmt
  • mscutils/eventvwr
  • msgina
  • mstsc
  • newdev
  • notepad
  • paint
  • rapps
  • regedit
  • runonce
  • setup
  • shell32
  • shimgvw
  • sndrec32
  • sndvol32
  • solitaire
  • spider
  • sysdm.cpl
  • syssetup
  • taskmgr
  • usetup
  • winemine

Wine Syncs

ReactOS relies heavily on Wine for many of its Win32 libraries and syncs these as Wine incorporates improvements into their releases. Most of these libraries are synced to versions 1.2 or 1.3.

Libraries Synced

  • activeds
  • actxprxy
  • amstream
  • atl
  • avifil32
  • cabinet
  • clusapi
  • comctl32
  • comdlg32
  • credui
  • crypt32
  • cryptdlg
  • cryptnet
  • cryptui
  • d3d8
  • d3d9
  • dbghelp
  • ddraw
  • dwmapi
  • faultrep
  • fusion
  • gdiplus
  • hhctrl.ocx
  • hlink
  • hnetcfg
  • iccvid
  • imm32
  • inetcomm
  • inetmib1
  • initpki
  • inseng
  • itircl
  • itss
  • jscript
  • localspl
  • localui
  • mapi32
  • mciavi32
  • mcicda
  • mciqtz32
  • mciseq
  • mciwave
  • mdi
  • mlang
  • mpr
  • mscms
  • mscoree
  • msctf
  • msdmo
  • msg711.acm
  • mshtml
  • msi
  • msiexec
  • msimtf
  • msnet32
  • msrle32
  • mssip32
  • msvcrt20
  • msvfw32
  • msvidc32
  • msxml
  • msxml3
  • nddeapi
  • netapi32
  • obsel
  • odbc32
  • ole32
  • oleacc
  • oleaut32
  • oledlg
  • olepro32
  • pdh
  • postorec
  • qedit
  • quartz
  • query
  • reg
  • riched20
  • rpcrt4
  • rsaenh
  • schannel
  • shdoclc
  • shdocvw
  • shlwapi
  • sti
  • tapi32
  • urlmon
  • usp10
  • uxtheme
  • version
  • widl
  • windowscodecs
  • wined3d
  • wininet
  • wintrust
  • xcopy
  • xmllite

Third Party Libraries

  • DejaVu Fonts updated to 2.31
  • FreeType updated to 2.3.12
  • Liberation Fonts updated to 1.05.2
  • libjpeg updated to 8b
  • libpng 1.4.3 added
  • libtiff 3.9.4 added
  • libxml updated to 2.7.7
  • zlib updated to 1.2.5


Despite the best efforts of the developers, regressions relative to the last release can slip in. Many times these are unavoidable, as the regressions result from the removal of a hack that pretended to implement some specific functionality. To truly improve, ReactOS must eventually discard all such shortcuts even at the cost of some usability in the short term. Hopefully as the project progresses this list will grow shorter and shorter and eventually disappear.

  • #4086 cdfs: Data inaccessible for view under Explorer
  • #4330 crashes upon restart after installing a driver for 3com Fast Etherlink network adapter
  • #4811 comctl32: dll winesync broke AbiWord toolbar
  • #5025 freeloader error while booting from GRUB with Ubuntu and Windows XP installed
  • #5035 Abiword: fonts listbox isn't shown properly
  • #5158 some keystrokes get lost if typing fast in VirtualBox
  • #5290 Slowness during file copying in 1st stage in VirtualBox
  • #5320 "Assertion 'FALSE' failed at subsystems/win32/win32k/ntuser/windc.c line 739", preceded by "Not POWNED or CLASSDC hwndCurrent" debugprint
  • #5372 "Failed to create directory L"%USERPROFILE%\\Local Settings\\" debug print in 2nd stage
  • #5443 Inkscape 0.43-2 crashes immediately upon start.
  • #5484 New windows are created on top of older ones
  • #5503 Far Manager 1.65 fails to start
  • #5504 Internet Explorer 6 errors out at setup
  • #5524 Displaced numbers on virtual desktop icons in 32bpp
  • #5530 COM ports not available anymore
  • #5554 Warning/error window is misplaced and misshaped
  • #5560 Acrobat Reader 7.1 crashes at start
  • #5569 App tray icons are not displayed
  • #5593 GDI REGION objects are leaked when Freeciv start window is being redrawn

Build Tools


  • Updated to version 2.2


RBuild is the build management system currently employed by ReactOS. The project is currently transitioning to cmake, but for the current release the project still relies on RBuild. However, a series of fairly serious flaws and issues have been uncovered during the transition and these are documented here.

  • Non-existent DLL functions can be exported.
  • Function export names are not properly decorated, allowing export names to not match the original function names.
  • If function targets are not found, RBuild will link the DLL to itself.

Some development on RBuild also took place before the decision was made to switch over to CMake.

  • Initial Visual Studio 2010 project file support.
  • Removal of code::blocks project file generation, as code::blocks is incapable of building ReactOS.


  • Build environment now uses GCC 4.4.x as the compiler.
  • -fno-unit-at-a-time hacks have been removed.
  • Auto-export of all symbols has been turned off.

Core Functionality

Audio/Video Stack

The A/V stack has seen a great deal of enhancements and fixes since the last release. Preliminary sound support was already present in the previous release, but it was highly rudimentary. Beyond simple playback not much else was controllable. Effort has gone into controlling the mixing of the playback, providing the ability to manipulate the volume and other general usability features such as pausing and restarting. These required finer control and management over the signal data that represents the sound and the sound devices that actually play it. Querying of audio devices has been implemented, allowing the system to discover the functionality a device supports and how to access them. More work however needs to be done to better use those features as well as managing the resources associated with sound playback.

In addition to increased sound playback support, work was begun on the framework for playing back broadcast media. These are generally through TV-tuners and have their own set of interfaces that must be implemented. These consist of a series of drivers and filters that determine which channel the system should capture media from and then process. Currently the broadcast standard being implemented is the Digital Video Broadcasting-Terrestrial.

A key component to all media playback is the kernel streaming component, which handles the majority of actual manipulation of media data.


The Broadcast Driver Architecture is the framework that allows use of TV-tuner cards in Windows.

  • Interfacing with broadcast devices implemented.
  • Filtering of broadcast frequencies implemented.


A library that bypasses some of the layers in the sound stack to try and speed up processing.

  • Starting and stopping audio implemented.
  • Initial implementing of sound mixing, currently does not work. Volume information can be retrieved but not set.

Kernel Streaming

The core kernel component that handles stream of media and serves as the foundation of much of the A/V functionality in NT.

  • Device initialization and registration implemented.
  • Objects allocated are placed onto a list for automatic reclamation.
  • Pin interface for controlling devices implemented, though issuing of commands still needs work.


A DirectShow filter that relays media through the user mode kernel streaming library.

  • Enumeration of supported functionality on devices implemented.
  • Signal statistics from BDA devices are delivered by KSPROXY.
  • Media stream sampling is done to determine buffer allocation strategy.
  • Multiple media samples can be dispatched simultaneously.


The driver that manages most of the audio functionality in NT.

  • Currently a "silent" buffer is used when no audio buffers are available for playback.
  • Play position is reset when an audio stream is stopped, fixing playback for when playback is stopped and started multiple times.
  • A get position request can arrive before the audio buffer is transferred. This situation is handled to avoid a divide by zero error.
  • Audio stream data is only copied to the common buffer when the pin owning it is in a running state.


The filesystem framework on ReactOS has for most of the project's history been largely absent. The main support library for filesystems, FsRtl, did not exist and all of the filesystem drivers reimplemented the functionality it was supposed to provide. This has changed recently with the initial implementation of the FsRtl. Currently the FsRtl provides support for notification of changes to the volume's state, such as a device being mounted or unmounted. Notification of changes to a volume's content has not yet been implemented but is the next step. The old FAT filesystem driver has been updated to use some of the new functionality, as has the CDFS driver, providing the ability to eject a CD.

A new FAT filesystem driver is also being implemented by creating a wrapper around the FullFAT library. However, it is still a work in progress and was not ready for this release.

Hardware Management

Progress has been made in efforts to give ReactOS better support for various hardware control specifications.


A driver for the Advanced Configuration and Power Interface was implemented, providing most of the functionality of the standard. However, it does not conform to the NT architecture due to incomplete pieces in other parts of ReactOS.

  • Enumerate attached devices.
  • Receive commands from power buttons.


The Hardware Abstraction Layer that provides support for the ACPI standard. This is separate from the current HAL used in ReactOS and is the incomplete piece needed by a NT architecture conformant ACPI driver.

  • Resource querying implemented.
  • Separation of ACPI and non-ACPI bus handling.

Battery Framework

Implementation of the components needed to interface with batteries and retrieve information about power levels. This collection of drivers is dependent on several other pieces such as Plug n Play, ACPI, and general interface drivers, so is currently not functional.

  • Control Method Batter Driver: Initial implementation of cmbatt driver, with information and status queries implemented. ACPI and PnP interaction present but dependent on the respective interfaces in other parts of ReactOS.
  • Composite Battery Driver: Battery detection and PnP notification implemented.

Legacy HAL

The legacy HAL will continue to be used for hardware that does not implement the ACPI standard.

  • i8259A programmable interrupt controller initialization implemented in C.
  • HAL now detects EISA systems with the Edge/Level Control Register.
  • Various Interrupt Request Level functions are now implemented in C instead of x86 assembly.
  • Asynchronous and Deferred Procedure Call trap handlers are now implemented in C.
  • IRQL handling rewritten to use "lazy" raising and lowering of the interrupt mask.
  • HAL no longer relies on the memory manager for allocations.
  • Various debugging related functions implemented.
  • CMOS, ISA, and SYSTEM bus handlers are now registered.
  • HAL now can detect PCI and PCI-to-PCI bridges.
  • Checks for ABIOS have been removed as it is not supported by ReactOS or Windows.

Plug n Play

  • Writing of resource list has been fixed to avoid corrupting the registry.
  • Registry values for legacy devices are now written.
  • Detected devices are now reported in response to a IRP_MN_QUERY_DEVICE TEXT.

Memory Management

The memory manager has been slowly rewritten over the past several months, with components being replaced piece by piece while the rest of the system continued on as before. To achieve this required separating the blocks of memory controlled by the new memory manager, ARM3, and the old memory manager. As more of ARM3 was completed, it took over more responsibility from the old memory manager, in the process exposing countless bugs, corruptions, and leaks in not only the old manager but broken code in higher layers of the operating system. This resulted in several major breakages at various points during the last year but the majority of them have been dealt with. For this release much of the ARM3 functionality has not been enabled to lessen the risk of major regressions slipping in. However, it is already capable of allocating most types of memory blocks such as pool memory and creating address spaces for processes. The next release will see ARM3 enabled and effectively acting as the sole memory manager.

Work on the x64 port also required that virtual memory support be updated to support the page table entry format on x64. Support was added in both the old memory manager and ARM3 due to the concurrent nature of the work and a great deal of refactoring was also done to separate platform independent code. This was also done to benefit the effort to port ReactOS to the ARM platform, as it also has a different format for page table entries.

  • Page Table Entries work under x64.
  • Correctly report the amount of memory available to applications and drivers.
  • Massive fixes to page tables, page directories, and page frame numbers that are used for tracking virtual memory addresses and their physical memory address counterparts. Many corruptions, incorrect address resolutions, and improper usage of PTE, PDE, and PFN structures and values were dealt with.
  • Code refactored so architecture independent code can be shared across platforms.
  • Multiple logic fixes to page allocations, resolving several instances of non-free pages being allocated.
  • Global pages support removed due to currently broken code.
  • Working sets of memory use a bitmap instead of a linked list based on the Least Recently Used algorithm for organization. Only free pages use a linked list now.
  • Stubs have been added for various large page functions in case future work is done to add support.
  • Paging driver code and data implemented.
  • A check to detect potential corruption in contiguously allocated blocks of memory has been added.


  • Virtual Address Descriptor data structures implemented.
  • Page table and directory entry initialization implemented.
  • Stack frames are allocated using ARM3.
  • Paged pool allocations can be done through ARM3.
  • Memory areas managed by ARM3 are kept separate from areas controlled by the regular memory manager.
  • Protected Freed Nonpaged Pool support added. This type of pool is a debugging feature.
  • Shared user data pages are handled by ARM3.
  • New AVL tree implementation used to manage Virtual Address Descriptors.
  • Creation of the process address space is now done by ARM3.
  • IsBadRead/CodePtr fixed to work with ARM3.

Network Stack

The network stack has seen considerable amounts of refactoring and additions as its components are implemented. Various parts are also currently undergoing a rewrite with varying levels of completion.


  • Attempts to acquire the IP address now wait until after the DHCP service is running for dynamic addressing.
  • No attempt is made to close a socket already terminated by the remote peer.
  • Socket operations that can be completed immediately are carried out on a closing socket to avoid losing data in the receive buffer.


The current socket implementation on ReactOS.

  • Error codes are now properly reported, fixing many of the Winetests for this component.
  • Failures on operations are now reported instead of simply being left dangling.
  • Events are waited on instead of immediately being closed.
  • Socket information is now stored in a linked list instead of a static array, improving scalability and eliminating the risk of buffer overflows.
  • Socket information is now cleaned up after a socket is closed.
  • Support for connectionless sockets added.
  • Reading data using the peek functionality no longer causes corruptions.


  • Timer queues have been disabled to prevent the VirtualBox Intel Pro/1000 emulated network card from crashing ReactOS.
  • Protocol bindings are refreshed after a new device is added, allowing network cards to be used even if they are added after boot.
  • Network adapter initialization and binding cleaned up to avoid duplicate entries.


  • Multiple wakeups are now prevented from occurring.
  • Sent/received reports are only sent if operation completed successfully.
  • A check was added to make sure accept is not called on a socket that is not listening.


  • Reading host files now supported.


The ReactOS kernel saw several major pieces rewritten from x86 assembly to C. This allows considerably more code reuse when porting to other platforms but also resulted in several major bugs being fixed. Two especially important components rewritten were the the system call interface and trap handlers. The syscall interface suffered from an especially severe bug that prevented the use of specialized instructions for entering and leaving kernel mode. Fixing this bug has helped decrease the time needed for each syscall and due to the number of times a system will make syscalls quickly adds up. Situations where a syscall can be avoided have also see them removed or deferred, further increasing performance.

There exists code in the kernel that requires transitions to real mode in the processor in order to run. Support for Virtual 8086 has bee added, permitting their execution while remaining in protected mode. Due to the expense of these transitions, avoiding it can also help performance.

Various other issues ranging from missetting special registers, which could cause data corruption and crashes when in kernel mode, and basic device driver handling, also saw fixes.

  • IRP_MN_FILTER_RESOURCE_REQUIREMENTS responses are now correctly handled, allowing drivers to acquire needed resources.
  • FPU state is now correctly not saved when a kernel debugger is not attached.
  • Debug register clearing is now fixed, preventing random hardware breakpoints from triggering.
  • Trap handling code converted to C with minimal bits of assembly.
  • Interrupt handling in kernel converted to C to match conversion done in HAL.
  • System call handling now implemented in C.
  • Entrypoint of kernel moved to KiSystemStartup.
  • KeUpdateSystemTime interface is no longer Windows compatible. No third party code should ever call it however so change should not matter.
  • Interrupts are now handled when in Virtual 8086 mode.
  • Calling KiSystemService directly with interrupts enabled no longer corrupts the trap frame, fixing some failures on QEMU and real hardware.
  • Checks have been added to avoid drivers linked with user mode DLLs.
  • Dependency checking for driver unloading implemented.
  • When a driver fails to load, the kernel no longer attempts to unload modules that were never initialized.
  • The SYSEXIT code used for returning to user mode after a system call into kernel mode has been fixed, allowing the use of the SYSENTER/SYSEXIT combination instead of IRETD. This feature is only available on Pentium II and newer processors and should help decrease the time needed for such hopping between modes for system calls.
  • All trap handling code is now marked as no-return, allowing the compiler to better optimize them.
  • The Processor Control Block is no longer volatile in KeGetPcr, making the C code cleaner as the PCR no longer needs to be constantly reloaded. This also helps performance with the removed need for loading.
  • Basic headless support has been implemented, allowing loading of the OS and interaction with just the kernel.


  • Device property retrieval now returns correct information for the device name.
  • IoReportDetectedDevice reimplemented, though a bug causes it to create a new device instance every boot.
  • Changes in device status are now reported.
  • New resource information is now reported.


  • A leaking reference that was resulting in incorrect registry name parsing and memory corruption has been fixed.
  • Opening registry values for symbolic links is fixed.
  • cmlib, newinflib and mkhive now use the Wine unicode library instead of the host_wcsfuncs library.


The registry generator.

  • newinflib is now used instead of inflib.
  • Registry generation now uses the Unicode API instead of ascii.
  • Work has been done to properly free resources, as mkhive is suffering from several memory leaks.


  • Unicode aware version of inflib added, newinflib.
  • String functions now use the str*W group instead of wcs* due to glibc on Linux builds using a 32bit wchar_t instead of 16bit. A wrapper has been added to allow continued use of wcs* functions on Windows builds.


Startup time on ReactOS has benefited considerably from optimizing for the much more resource constrained ARM platform. The code responsible for drawing menus and the like at boot time has seen considerable simplification to avoid unnecessary operations and memory transfers. In addition, the amount of memory used by Freeloader to boot the operating system has also decreased. The cumulative effect of the changes has meant that there should be a noticeable difference in how quickly ReactOS boots versus previous versions and also when compared to Windows XP.

Properly shutting down has also seen some improvement, as the operating system is better able to keep track of which processes have yet to terminate. Those that take too long are now forcibly terminated.

One other significant change was the changing of the Freeloader executable to be in the Portable Executable format instead of a raw binary. This was done to enable better support for debugging problems that can occur at boot time, as a raw binary does not offer much help in trying to see what code has been executed.

  • Progress bar during boot now displays correctly.
  • Logos now have the correct color palette and the correct logo is used for booting and shutting down.
  • Driver loading code used during booting has been switched to use low level Configuration Manager interfaces, decreasing boot time.
  • A crude timing mechanism has been added to see how many CPU cycles have passed between the first instruction of the kernel, the initialization of the registry by the SMSS, and the moment 12 processes have started up, which is approximately equivalent to getting to the GUI from boot.


  • Broken initialization code removed and a correct implementation added.
  • 4bpp blitting code simplified.
  • x64 portability fixes.
  • Initialization of bootvid no longer requires a shift into real mode, allowing for faster booting.


  • FreeLoader is now compiled into the Portable Executable format to allow for debugging.
  • FreeLoader no longer needs to be installed on the first partition of the first disk.
  • FreeLoader UI on ARM rewritten to slim down on resources needed.
  • Initial paging of memory on ARM is rewritten to be more efficient, now only using 1MB instead of 20MB.
  • x64 portability fixes.
  • Loading on the ARM platform has been changed to match EFI/Firmware model.

Session Manager Subsystem

  • SMSS can now add several system environment variables to the registry.
  • SMSS now creates a new default paging file if none exists.


  • Environment variables for user are now properly loaded upon login.

Security and Users

  • NtAcessCheck fixed to account for various error cases and improper usage.
  • Security token is now checked for what level of authorization it is trying to impersonate.
  • Success is only reported if all access requests have been granted.
  • Attempts to duplicate security tokens fail if authorization level is too low.
  • More information is now written into the user environment, including paths to global directories.
  • Creation of user specific folders has been fixed.


  • A single table is now used for mapping privilege names to values.
  • Initial implementation of a lookup table for well-known SIDs has been added.
  • Account name lookup call chain implemented, but dummy names are still returned.


The code supporting the user interface in ReactOS is currently undergoing a rewrite. However, the old code remains in place and continues to see fixes and updates as the rewrite progresses.

  • Attempting to format a non-existent drive will now fail and return instead of prompting for a disk to be inserted.


  • Clock is no longer clipped in its window.
  • 24bpp start menu icon added.


  • Confirmation dialog added for logging off.
  • Open With dialog now allows aborting of operation.
  • Localized error text now displayed as messagebox caption.
  • Success checking for ShellExecuteEx has been simplified, fixing instances where a dialog may be opened twice.
  • Alpha channels for icons are no longer destroyed when shortcuts are created, fixing overlay icons.
  • Initial file copy/move/delete dialog implementation added.
  • File association error texts added.

Storage Stack

The storage stack involves all the components of the operating system that deal with disk storage, excluding filesystems. These saw considerable modifications as the project continues to integrate the UniATA driver.

  • Logical units in extended partitions are visible but are not accessible yet.
  • Querying for Native ATA channels and configuring controller to use NATA implemented.


  • Fixes for using ramdisk when booting on ARM.


  • x64 portability fixes.


  • Reduce wait time from 10000 to 500 milliseconds for sending the ATAPI_RESET command.


ReactOS currently has a USB driver based on the NT4 architecture, providing very basic functionality. Under specific configurations USB keyboards and mice could be used with it, but the setup was extremely inflexible. The NT5 USB architecture is considerably different and a new USB stack based on it has been started. The lower level of this stack is composed of several pieces. The usbd library acts as a helper library for third party USB drivers, ones that manufacturers write for their products. It provides some querying functionality to help find attached devices. I/O request packets are sent by usbhub, and usbport acts as an intermediary, sorting the messages based on which type of USB controller they are for and selecting the appropriate helper driver to handle it. These helper drivers are usbehci, usbohci, and usbuhci. Currently the new USB stack has a basic implementation of usbd, usbhub, usbport, and usbehci. They are still incomplete and ReactOS cannot yet use them to actually use USB devices, but basic discovery of devices is possible.

The old USB driver continues to see fixes and enhancements as the new USB stack will take much time to fully mature. Some notable changes include the ability to deal with multiple USB controllers instead of simply assuming only one exists in the system. This allows discovery of devices that may be attached to the other controllers instead of the operating system ignoring them.

USB Requests Implemented



  • SWENUM, MPU401, CMIDriver, SPLITTER, STREAM drivers are no longer built and included by default as they are either not used or do not work.
  • ISAPNP driver has been removed from the set of drivers loaded during booting.


  • Attaching to processes fixed.


  • ASCII functions are now used instead of converting arguments to Unicode and calling Unicode functions.


  • ReadEvent and WriteEvent have been changed to be notification events.
  • A race condition when a read IRP is cancelled has been fixed, reducing random crashes and hangs.
  • Various memory leaks have been dealt with.
  • Status information now correctly informs a reading/writing thread that a pipe is dead.
  • Various buffer checks have been added to prevent attempts to use a buffer that is too small for an operation on a named pipe.


A new PCI driver has been implemented, adding considerably more complete support for the interface and various other standards and protocols that build on top of it.

  • Interrupt Request routing implemented.
  • Handling of devices that incorrectly implement the PCI standard has been improved.
  • Querying and discovery of devices attached to PCI bus implemented.
  • Information about 176 different PCI devices and their associated errata have been added. These are needed to deal with any quirks a device may have.


  • Driver has been stubbed so will require more work before any functionality is added.


  • Initial implementation of a driver for the VMWARE SVGA-II Video Card added.
  • Various x64 portability fixes to the current VGA driver.
  • A unified VBE/VGA miniport driver has been added along with a new Framebuffer Display Driver.


  • Proper error codes are now used.



  • Resources for tracking services are created and destroyed as services start and stop.
  • Hardware profiles actually create GUIDs instead of hardcoding them to zero.
  • Computer name is used inside of eventlog.


  • ComPort library has been implemented, based off of the Microsoft whitepaper: Building Hardware and Firmware to Complement Microsoft Windows Headless Operation.


  • CRT is now linked statically for freeloader, rtl, bmfs, ftfd, and mini_hal.
  • CRT is dynamically linked for ntdll, crtdll, and included versions of msvcrt.
  • x87 assembly implementation of pow() function imported from glibc, replacing broken implementation in ReactOS.
  • Pointer comparison fixed in signal().
  • Various functions dealing with codepages and conversions between different encodings have seen fixes.
  • x64 implementations of various basic math and pointer functions added.


The kernel32 library underwent some major fixes that decreased its size and increased its performance. The majority of these issues were due to improper behavior on the part of RBuild, detailed in the appropriate section.

  • Remove all Windows 95 function exports.
  • Stub all functions that kernel32 is supposed to export.
  • Inline set/get error macros and correctly forward them to the actual functions inside ntdll. This prevents calls to these macros from taking an indirect call path due to issues in RBuild.
  • kernel32 now always attempts to connect to the console server in applications in order to setup handling of Ctrl+C.
  • Initialization of command line arguments have been moved to DLL_PROCESS_ATTACH to make it thread safe.
  • Switching between fibers fixed.
  • Various x64 portability changes.
  • NT-style debug channels are now enabled and used.


  • Leaking of regions temporarily fixed.
  • Batch support added for selecting regions for clipping.
  • Retrieving system palettes has been optimized to avoid unnecessary operations and no longer trashes the heap.


  • Exports added for a variety of functions.


  • Various fixes to loading functions for libraries and executables.
  • Service status is now reported to the service manager.
  • Various x64 portability changes.


  • New implementation of the AVL tree, a self-balancing data structure used for tracking various resources in ReactOS.
  • Various fixes to functions that operate on strings.
  • x64 portability fixes for functions that operate on the byte level.


  • Setting of regions now behaves correctly.
  • Cursor icons follow correct call chain instead of calling functions that do not exist.
  • Various x64 portability changes.
  • Scrollbar tracking now ends if mouse capture is lost.
  • Window management code saw refactoring and fixes.
  • Start user handle manager rewrite.
  • Window text string converted from UNICODE_STRING to LARGE_STRING, fixing display of large text windows.


  • A dummy PSEH implementation has been added for CLANG.
  • x64 version of PSEH has been stubbed.

Client/Server Runtime


  • Code from CSRSS has been moved into CSRSRV.
  • CsrTerminateProcess now destroys all CSR threads in a process, fixing the issue of processes never actually dying and their resources never being freed. Besides the resource leak, other processes that wished to use exclusive resources were also starved.
  • Basic user mode shutdown support added by exporting process/thread management functions for use by Win32CSR, allowing for shutting down of processes and cleaning up after them.
  • Second attempt shutting down of applications is now more forceful and processes are forcefully terminated in most situations.


  • Hard error handling rewritten, now using Unicode strings and does not crash due to malformed arguments being passed to it.
  • Dynamic LineBuffer removed as it was not being properly resized and caused corruptions.
  • CsrFreeConsole now closes a process' console handles.
  • Locking simplified to having only one for a console.
  • Handles to a screen buffer is now tracked instead of references. When all handles have been closed, the buffer is deleted even if it is the "active" buffer.
  • RECT/SMALL_RECT structures are now used correctly/consistently. RECT uses pixel coordinates relative to the window client area and is endpoint-exclusive while SMALL_RECT uses character coordinates relative to the screen buffer and is endpoint-inclusive.
  • Text selection outside the visible window is now allowed.
  • Console pausing is now implemented.
  • Line input processing code now merged into one place instead of being duplicated in multiple places.
  • Basic line editing and line editing history implementation added.
  • Setting the console screen buffer size has been implemented.
  • CREATE_NO_WINDOW flag support added, allowing creation of invisible consoles.
  • Management of console windows moved to Win32CSR from CSRSRV.

Kernel-mode subsystem server (Win32K)

The kernel-mode side of the Win32 subsystem underwent significant modification since the last release. A great deal of progress has been made in the yarotows branch, but there was not enough time to incorporate its improvements. However, effort was made to deal with some of the more visible usability issues. Fixes to drawing of icons should mean they look better than in past releases and a new timer mechanism finally eliminates the problems with using Firefox to browse the internet.

  • Creation of bitmaps by the graphics engine is severely broken and a partial rewrite has begun on it.
  • Initial implementation of a new window object added.
  • Several fixes to Windows Hook Procedures that causes application lockups.
  • Shell can now be restarted after killing it.
  • Fix cases where windows can deadlock when waiting on another window to finish.
  • Fixes to minimizing/maximizing and setting focus of windows.
  • SendMessageCallback now implemented.
  • Timer implementation suffered from a bug where freed timers would not be available due to improper cleanup.
  • Non-queued messages are no longer expected to have a reference to a message queue.
  • Icon drawing reimplemented.
  • A kernel timer is now used to intermittently force a check on user mode timers instead of simply waiting until a message arrives before carrying out the check.
Versions / Official Changelogs / Community Changelogs
0.0.x Series 0.0.8 | 0.0.9 | 0.0.10 | 0.0.11 | 0.0.12 | 0.0.13 | 0.0.14 | 0.0.15 | 0.0.16 | 0.0.17 | 0.0.18 | 0.0.19 | 0.0.20 | 0.0.21
0.1.x Series 0.1.0 | 0.1.1 | 0.1.2 | 0.1.3 | 0.1.4 | 0.1.5
0.2.x Series 0.2.0 | 0.2.1 | 0.2.2 | 0.2.3 | 0.2.4 | 0.2.5 | 0.2.6 | 0.2.7 | 0.2.8 | 0.2.9
0.3.x Series 0.3.0 | 0.3.1 | 0.3.2 | 0.3.3 | 0.3.4 | 0.3.5 | 0.3.6 | 0.3.7 | 0.3.8 | 0.3.9 | 0.3.10 | 0.3.11 | 0.3.12 | 0.3.13 | 0.3.14 | 0.3.15 | 0.3.16 | 0.3.17
0.4.x Series 0.4.0 | 0.4.1 | 0.4.2 | 0.4.3 | 0.4.4 | 0.4.5 | 0.4.6 | 0.4.7 | 0.4.8 | 0.4.9 | 0.4.10 | 0.4.11 | 0.4.12 | 0.4.13 | 0.4.14