From ReactOS Wiki
Revision as of 20:52, 4 October 2010 by Z98 (talk | contribs)
Jump to: navigation, search

TODO: If you want to help, I could really use someone who would go through the list of bugs listed in the regression and bullet point them into actually saying what is broken, ie, what can no longer be done due to the bug. -Z98

New TODO: We have a bunch of third party libraries, not Wine libraries, but stuff like zlib or whatever. Could someone put them into a list and just state the version they got updated to? I've added a place for them under the Generic section. It may get moved eventually, but we'll leave it there as a temporary measure. -Z98

This is the changelog for ReactOS™ version 0.3.12 (date yet to be determined), 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).




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


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

Support Staff

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

Generic 0.3.12 Changes


  • 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
  • devmgr
  • intl
  • netcfgx
  • netid
  • netshell
  • notepad
  • paint
  • regedit
  • setupapi
  • shell32
  • slayer
  • sndvol32
  • sysdm
  • userenv
  • usetup
  • winemine


  • calc
  • usetup


  • advpack
  • dxdiag
  • rapps
  • usetup


  • usetup


  • Add french translations for location overrides. (Sylvain Petreolle)
  • eventvwr
  • paint
  • spider
  • usetup


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


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


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


  • calc
  • mscutils
  • usetup


  • syssetup
  • usetup


  • spider
  • sysdm
  • usetup


  • calc
  • devmgr
  • explorer-new
  • intl
  • netshell
  • paint
  • rapps
  • regit
  • runonce
  • shell32
  • sndrec32
  • syssetup
  • usetup


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


  • aclui
  • browseui
  • charmap
  • cmd
  • desk
  • dxdiag
  • explorer
  • explorer-new
  • freeldr
  • input
  • kernel32
  • mscutils/devmgmt
  • mscutils/eventvwr
  • msgina
  • mstsc
  • newdev
  • notepad
  • paint
  • rapps
  • regedit
  • runonce
  • setup
  • shell32
  • shimgvw
  • sndrec32
  • sndvol32
  • solitaire
  • spider
  • sysdm
  • 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 synched to versions 1.2 or 1.3.

Libraries Synced

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

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


  • #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
  • #5569 App tray icons are not displayed
  • #5593 GDI REGION objects are leaked when Freeciv start window is being redrawn

MSC support

As part of the effort to support compilers beyond GCC, several components of ReactOS saw fixes and corrections to the coding style. These include but are not limited to:

  • explorer
  • rtl
  • ksproxy
  • browseui
  • shell32
  • hal
  • ndk
  • ntoskrnl
  • mingw
  • win32csr
  • localspl
  • compstui

Host 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.

Core Functionality

Audio/Video Stack

The A/V stack has seen a great deal of enhancements and fixes since the last release. The work done has not only added features to better control sound playback, but preliminary support for streaming videos through various media frameworks has also been implemented.


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.


ReactOS continues to use the FAT filesystem as its default, but work has been done to add the support needed for newer ones as well as fixing longstanding issues with the current FAT driver.


The filesystem runtime library provides a set of basic functionality for filesystem drivers and allows them to avoid duplicating shared functionality while also ensuring higher level libraries inappropriate for kernel drivers do not need be linked in. FsRtl for many years had very minimal documentation, but that is changing with this release.

  • Notification of changes to volume state has been implemented.
  • Initial groundwork for volume content change notifications begun.


  • Media ejection added.
  • Various memory leaks and corruptions have been resolved.


ReactOS uses the FASTFAT driver for the FAT filesystem. The current driver is fairly old and a new one is being developed, but until it is ready FASTFAT will continue to see updates.

  • Updated to use various functionality in the FsRtl library instead of reimplementing them inside the driver.
  • Driver is now Plug n Play aware but does not support any actual PnP commands.


The new FAT driver is being implemented using the FullFAT library and wrapping its functionality inside a filesystem driver. It is currently incomplete but will replace the old FASTFAT driver in a future release.

  • Control blocks for files have been implemented.
  • Basic locking implemented.


  • Implemented finding registry keys when the registry keys are not sorted.
  • Fix a bug that caused registry corruption when a registry key got too large.

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.

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 saw several major improvements since the last release, including a new pool manager and major fixes to virtual memory management.

  • 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.


A new memory manager designed to be more conformant to the NT architecture and hopefully eliminate the instability caused by the current memory manager's corruption issues.

  • 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.


  • Fixes to how operations are done on the timer queue.
  • 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.


Development on ReactOS' graphics components continues, with increased compatibility and functionality. Several enhancements from the yarotows branch have made it into trunk and are now part of this release.


  • 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.


  • 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.


Startup of ReactOS has seen considerable modification as effort is made to port it to other architectures and new developer-centric changes are added.

  • Progress bar during boot now displays correctly.


  • Broken initialization code removed and a correct implementation added.
  • 4bpp blitting code simplified.
  • x64 portability fixes.


  • 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.

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.


  • 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.


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. However, a NT5-style USB stack consisting of the usbd library, usbehci driver, and usbhub interface has been started.


Helper library for third party USB drivers, used for querying information about USB devices.


Driver for the ehci USB protocol, currently able to register attachment of new devices to the system and changes in their status.


Initializes USB devices and their associated driver objects and handles passing of interrupts and other signals to the driver. Utilizes the usbd library and usbehci driver to fill in information about devices.

USB Requests Implemented



The current USB driver, usbdriver provides simplistic support for USB keyboards and mice in very specific configurations.

  • Support for multiple EHCI controllers added, increasing compatibility with physical hardware configurations.
  • All PCI buses are scanned for USB controllers.
  • Cleanup of devices that crashed or failed to initialize properly.


  • SWENUM, MPU401, CMIDriver, SPLITTER, STREAM drivers are no longer built and included by default as they are either not used or do not work.


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


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.


  • 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.


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.

Win32™ Personality

User mode subsystem server (CSRSS)

Kernel-mode subsystem server (Win32K)

  • 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.

Regression tests





  • Roel Messiant: Fix a crash when running some operations in sc without providing arguments. Also, provide usage information for the control and unknown commands. (Aleksey Bragin; #5611)
  • Aleksey Bragin: Take Ged Murphy's comments into account and change pointer arithmetic to a convenient style. (Aleksey Bragin; #5611)





  • Instead of disabling a warning when using "main" as something else then the main function, define it to mainptr (it's used as a pointer variable) globally, this approach is portable. (Timo Kreuzer)



  • Add "BDA Device Control Plug-in for MPEG2 based networks" stub (Johannes Anderwald)
  • Sorry folks (Johannes Anderwald)
  • Implement IBDA_Topology::GetNodeTypes, IBDA_Topology::GetNodeDescriptors, IBDA_Topology::GetNodeInterfaces, IBDA_Topology::GetPinTypes, IBDA_Topology::CreateTopology, IBDA_Topology::GetControlNode (Johannes Anderwald)
  • Implement stub interfaces for control node, IBDA_DigitalDemodulator, IBDA_FrequencyFilter, IBDA_LNBInfo, IBDA_SignalStatistics (Johannes Anderwald)
  • Simply construction of CBDAFrequencyFilter, CBDALNBInfo, CBDASignalStatistics (Johannes Anderwald)
  • Find IBDA_NetworkProvider in filter graph (Johannes Anderwald)
  • Check for IBaseFilter interface when constructing the CBDADeviceControl object (Johannes Anderwald)
  • Add macro to enable/disable debug output (Johannes Anderwald)
  • Query the BaseFilter for the target control pin in order to query for IKsObject interface, which is used to retrieve the real pin handle. (Johannes Anderwald)
  • Pass the NodeId to constructors of IBDA_FrequencyFilter, IBDA_SignalStatistics, IBDA_LNBInfo, IBDA_DigitalDemodulator (Johannes Anderwald)
  • Implement IBDA_DigitalDemodulator::put_ModulationType, IBDA_DigitalDemodulator::put_InnerFECMethod, IBDADigitalDemodulator::put_InnerFECRate, IBDADigitalDemodulator::put_OuterFECMethod, IBDADigitalDemodulator::put_OuterFECRate, IBDADigitalDemodulator::put_SymbolRate, IBDADigitalDemodulator::put_SpectralInversion (Johannes Anderwald)
  • Implement IBDAFrequencyFilter::put_Frequency, IBDAFrequencyFilter::put_Polarity, IBDAFrequencyFilter::put_Range, IBDAFrequencyFilter::put_Bandwidth, IBDAFrequencyFilter::put_FrequencyMultiplier (Johannes Anderwald)
  • Implement IBDALNBInfo::put_LocalOscilatorFrequencyLowBand, IBDALNBInfo::put_LocalOscilatorFrequencyHighBand, IBDALNBInfo::put_HighLowSwitchFrequency (Johannes Anderwald)
  • Implement IBDASignalStatistics::get_SignalStrength, IBDASignalStatistics::get_SignalQuality, IBDASignalStatistics::get_SignalPresent, IBDASignalStatistics::get_SignalLocked, IBDASignalStatistics::put_SampleTime, IBDASignalStatistics::get_SampleTime (Johannes Anderwald)
  • Implement IBDA_DeviceControl::StartChanges, IBDA_DeviceControl::CheckChanges, IBDA_DeviceControl::CommitChanges, IBDA_DeviceControl::GetChangeState (Johannes Anderwald)
  • IBDA_DeviceControl interface now works with SageDvbRecorder(Windows XP SP3) (Johannes Anderwald)
  • Move from using include guards to pragma once. (Amine)
  • Whilst this is non-standard and potentially makes the code less portable, it's supported by both gcc and msvc and should bringg increased compilation speed due to its optimized behaviour (doesn't need to invoke the preprocessor) (Amine)
  • Merge Wine-1.1.39 changes to shlmenu.c. (Aleksey Bragin)
  • Maarten Kroese (Aleksey Bragin)
  • SHELL_MergeMenus: Don't skip higher IDs if uIDAdjustMax is set to 0xFFFF (according to MSDN). (Aleksey Bragin)
  • Implement IBDA_PinControl::GetPinID, IBDA_PinControl::GetPinType (Johannes Anderwald)
  • Comment out enumeration of IBDA_NetworkProvider (Johannes Anderwald)
  • Set output variable to null to fixup lazy callers (Johannes Anderwald)
  • Implement IBDA_PinControl::RegistrationContext (Johannes Anderwald)
  • Register filter with IBDA_NetworkProvider when it is an input pin (Johannes Anderwald)
  • IBDA_PinControl is now working (Johannes Anderwald)
  • Perform property request by passing the request through IKsPropertySet interface. This is necessary as the pin handle might not have been created at the time the proxy plugin has been loaded (Johannes Anderwald)
  • Set Reserved of KSP_NODE request to zero as required by the documentation (Johannes Anderwald)
  • Reintegrate header branch (Timo Kreuzer)
  • DDKAPI -> NTAPI (Timo Kreuzer)
  • delete duplicate definitions (Timo Kreuzer)
  • move files to right locations (Timo Kreuzer)
  • Fix Mm64BitPhysicalAddress definition (Timo Kreuzer)
  • Add a number of missing definitions (Timo Kreuzer)
  • add XDK (Timo Kreuzer)
  • Enhance debug traces (Johannes Anderwald)


  • Extend device enumerator to support class enumerators of device interfaces (Johannes Anderwald




  • Move and update assembler functions definition macros from port.h (added by Steven around revision 7000) to config.h as it is now in Wine. (Aleksey Bragin)
  • Update related __ASM macros. (Aleksey Bragin)
  • define interlocked_xchg_add to InterlockedExchangeAdd (Timo Kreuzer)
  • partial sync of test.h (Christoph von Wittich)
  • Cast the unused 0 in the ok macro to void to make clang happy (Timo Kreuzer)
  • Fix prototype of wined3d_event_query_supported (BOOL != HRESULT) (Timo Kreuzer)



  • Latvian keyboard fixes by Arturs B., <mad_alchemist AT mail DOT ru> (Gregor Schneider; #5385)
  • partly revert r47442 and apply a working fix by guarding some prototypes of functions that exist as intrinsics in #ifdefs, so we don't use them for gcc/clang (Timo Kreuzer)
  • remove duplicated prototypes, when an inline function exists already (Timo Kreuzer)




  • DejaVu Sans Mono seems to have a bug which makes Windows and Arwinss report double max char width as compared to a real char width. Since only a monospace font could be used, measure exact char width using GetTextExtentPoint32W and use that value. (Aleksey Bragin)



  • Add battery class installer dll. (Eric Kohl)
  • Add missing 4th parameter to BatteryClassCoInstaller. (Eric Kohl)




  • Display Matching Device ID. (Eric Kohl)
  • Display some more device properties. (Eric Kohl)
  • devman.dll improvements by Viliam Lejcik: (Eric Kohl)
  • display version info for selected driver file in 'Driver File Details' dialog (Eric Kohl)
  • resource modification - changed some labels to read-only editboxes (Eric Kohl)
  • Fixes bug #4875. (Eric Kohl)


  • Use a single table for mapping privilege names to values and values to names. (Eric Kohl)
  • LsarLookupSids: Return ReferencedDomains information. (Eric Kohl)
  • Replace hard-coded privilege names by privilege names from the PSDK. (Eric Kohl)
  • Move all includes into a common header file. (Eric Kohl)
  • Create a (still incomplete) well-known-sid lookup table and use it in LsarLookupSids. (Eric Kohl)
  • Add missing file headers. (Eric Kohl)
  • Add more well known sids to the lookup list. (Eric Kohl)


  • Use WLX_PROFILE_V2_0 instead of WLX_PROFILE_V1_0 and create an environment string that is filled with a single environment variable. WIP for bug #4102. (Eric Kohl)
  • Fix the order of controls to match the expected tab order. This makes the focus stop jumping around like crazy when you press the Tab key. (Eric Kohl)


  • Improve the DNS data exchange between the basic IP settings and the advanced DNS panel (Gregor Schneider)
  • Simplify LaunchAdvancedTcpipSettings (Gregor Schneider)
  • Save DHCP and DNS settings from the basic TCP/IP panel independently of each other (Gregor Schneider; #5193)
  • Remove the hack that set DI_NEEDRESTART for all network adapters which prevented us from starting the miniport driver (Cameron Gutman)
  • Part of the fix for bug 3716 (Cameron Gutman)
  • Start the TCP/IP driver after we install a network adapter (Cameron Gutman)
  • This fixes the major bug that blocks Live CD networking but we still have some DHCP issues (DHCP starts and fails before the NIC and TCP/IP has been installed) and some other adapter detection issues that I need to look into but this is a good first step (Cameron Gutman)
  • Create the DhcpEnabled value in the registry (Cameron Gutman)



  • AccRewriteSetEntriesInAcl: Fix a bug that caused the for loop never to complete due to reuse of same variable. (Michael Martin)


  • Don't bulldoze our netsvcs key to install a service that doesn't even work yet (Cameron Gutman)
  • Add the FLG_ADDREG_APPEND flag when writing the netsvcs value because, unlike WINE, we are actually going to have values in there (Cameron Gutman)
  • Reapply r47268 to fix DHCP (Cameron Gutman)
  • Implement DeviceHandleToUsbDevice and remove IsHandleValid. (Michael Martin)
  • Add call to DeviceHandleToUsbDevice for all Direct Call functions that pass DeviceHandle. (Michael Martin)
  • Stop the processing of Asynchronous List after the Control Request has been processed by controller. (Michael Martin)
  • Misc changes. (Michael Martin)
  • Fix a FIXME in fastfat driver which also fixes a BSOD in kernel32 path winetest (Pierre Schweitzer)
  • sysreg doesn't like rain of SEMI-STUB debug (Sylvain Petreolle)



  • Revert r43057: setting environment variables per process is not useful here, a higher authority has to do this globally (Gregor Schneider; #4008)
  • Create 'Default User' and 'All Users' directories without postfix and append a postfix only if they already exist. (Eric Kohl)
  • Create the user account directory without a prefix and append a prefix if the directory already exists. (Eric Kohl)
  • Acquire the restore privilege before unloading a hive and remove it after unloading the hive. (Eric Kohl)
  • Patch is based on Gabriel Ilardi's patch. Fixes bug #2972. (Eric Kohl)
  • Create the environment variables 'ProgramFiles' and 'CommonProgramFiles' from the registry. (Eric Kohl; #2972)
  • Fixes bug #4008. (Eric Kohl; #2972)
  • Disable GDI batch code for regions. "Fixes" broken drawing for AcrobatReader. Yes, it's a "band aid over a bullet wound". I hope the man with the gun is a surgeon, too. (Timo Kreuzer)
  • CreateEnvironmentBlock: Also add the volatile environment values to the users environment block. (Eric Kohl)
  • Fix Italian commonfiles (Gabriel Ilardi)
  • Fix a typo and some Spanish environment variables (Gabriel Ilardi)
  • german translation of sendto (Egon; #5411)
  • Fix mistakenly translated strings "recent" and "sendto" in Italian and Spanish resources, plus another Spanish fix. (Gabriel Ilardi)
  • Several Czech translation updates by Radek Liska #5429. (Gabriel Ilardi)


  • Fix a number of 64bit issues, add some comments where the code is not 64 bit safe. This module should be synced with wine, but this still causes a problem with Flash videos on FF2 (likely another timer problem) (Timo Kreuzer)





  • Add a nearly complete battc driver (the only stuff missing is WMI) (Cameron Gutman)
  • Tested with our stubbed cmbatt driver but testing on Windows would be nice too (Cameron Gutman)
  • define _BATTERYCLASS_ to not get dllimport specifiers (Timo Kreuzer)
  • Fix a warning (Timo Kreuzer)


  • Fix isapnp compilation for 64-bit (Timo Kreuzer)
  • 36961 (sginsberg) (Timo Kreuzer)
  • Rewrite the ISAPnP driver based off EtherBoot source (Cameron Gutman)
  • TODO: Resource stuff (Cameron Gutman)
  • Fix a typo (Cameron Gutman)
  • Comment it out from the bootloader. (Aleksey Bragin)
  • Remove it from machine.inf. (Aleksey Bragin)
  • This "driver" introduces significant delay at every boot due to i/o space scanning every time at every boot, however there is no real benefit (it always fails). Inclusion of this driver into default boot process might be reconsidered only after it starts providing some advantages. For now please test this driver in your own working copies. (Aleksey Bragin)


  • Change the other side's to PIPE_STATUS_CLOSING_STATE in NpfsCleanup and NpfsClose so the reading/writing thread knows that the pipe is dead when we signal its event (Cameron Gutman)
  • Fixes iphlpapi_winetest hang and possibly bug #4689 (Cameron Gutman)
  • Partially revert r47370 and apply a better patch (Cameron Gutman)
  • Change ReadEvent and WriteEvent to notification events because we reset those events manually when we run out of buffer space (Cameron Gutman)
  • Fix race conditions in read IRP cancellation that resulting in random crashes and hangs (Cameron Gutman)
  • Fixes MULTIPLE_IRP_COMPLETE_REQUESTS bug checks and failed cancellations resulting in hangs during ntdll:file test (Cameron Gutman)
  • Acquire the cancel spin lock before calling IoSetCancelRoutine (Cameron Gutman)
  • Remove the old cancellation code (Cameron Gutman)
  • Don't use the CCB stored in the IRP because it could be invalid depending on the state of the IRP (Cameron Gutman)
  • Simplify thread termination (Cameron Gutman)
  • Fixes random crash during rpcrt4:ndr_marshall test (Cameron Gutman)
  • Return buffer size if the buffer is too small (Johannes Anderwald)
  • Add more buffer checks (Johannes Anderwald)
  • Clear DO_DEVICE_INITIALIZING flag (Johannes Anderwald)
  • Add invariant checks and fix a bug: Copy+Paste error misusing OldFlink (Art Yerkes)
  • Check if MmGetSystemAddressForMdlSafe failed (Johannes Anderwald)
  • Fix 2 memory leaks when creating a pipe fails (Johannes Anderwald)
  • Fix minor style issue (Johannes Anderwald)



  • HGLYPH is an ULONG. Use offset to glyph entry as HGLYPH instead of the pointer to fix 64bit build. (Timo Kreuzer)
  • 41070 (tkreuzer) (Timo Kreuzer)
  • HGLYPH is an ULONG. Use offset to glyph entry as HGLYPH instead of the pointer to fix 64bit build. (Timo Kreuzer)
  • 41070 (tkreuzer) (Timo Kreuzer)
  • Fix a number of warnings, no actual code change (Love; #5336)
  • Remove memset and memcpy implementations from pin.c (Amine Khaldi)



  • allmul produced wrong results when the higher 32 bits of any of the 64 bit operands are not zero. As the comment correctly said the definition of param locations must change (Jose; #5121)
  • since esp was altered, but the definitions were not actually changed (Jose; #5121)
  • vsnprintf: added support for ll size specifier (Jose; #5122)
  • Disable spooler service. (Sylvain Petreolle)
  • This allows bootcdregtest to start here under qemu-kvm. (Sylvain Petreolle)
  • Remove unused variables. (Amine)
  • add TrailBytes-info for codepage 1361 (Christoph von Wittich)
  • david dot hedberg at gmail dot com> (Christoph von Wittich)
  • add dsound_winetest to bootcd (Christoph von Wittich)
  • Call acpi_bus_set_power instead of acpi_power_transition (Samuel)
  • Make sure the device has power management capabilities before calling acpi_bus_set_power (Samuel)
  • Report the new power state with PoSetPowerState (Samuel)
  • Initialize PDOs with the correct device power state ( (Samuel)
  • Initialze PDOs with the correct system power state (Samuel)
  • Add a stub for GetOwnerModuleFromTcpEntry (Olaf)
  • fix palette index for the progress bar (Matthias Kupfer)
  • Make the shutdown with ACPI enabled actually work. (Samuel)
  • Stubplement WTSQueryUserToken. (Olaf)
  • Import x87 asm version of pow() from glibc. Replaces our broken implementation, fixing a bunch of winetests (oleaut32 vartest) (Timo Kreuzer)
  • add _wctype table, it's not identical to _ctype as assumed before (Timo Kreuzer)
  • point _pwctype to _wctype instead of _ctype (Timo Kreuzer)
  • implement __pctype_func and __pwctype_func (Timo Kreuzer)
  • 46502 (tkreuzer) (Timo Kreuzer)
  • define _CRTBLD (Timo Kreuzer)
  • rename float_t/double_t/long_double_t to float_s/double_s/long_double_s to avoid name conflicts (Timo Kreuzer)
  • 46511 (Timo Kreuzer)
  • Set crt="static" in freeldr, rtl, bmfs, ftfd, rtl, mini_hal (Timo Kreuzer)
  • define "CRTDLL" in ntdll, crtdll, msvcrt, msvcrt20, msvcrt40 (Timo Kreuzer)
  • 46535 (Timo Kreuzer)
  • fix behavior of _system (fixes msvcrt environ winetest) (Christoph von Wittich)
  • Don't define __int64 for clang ( (Amine)
  • Fix file and purpose in the header (Amine)
  • add clang compatible asm version of ldexp and make the code more readable (Timo Kreuzer)
  • constify strndup parameter to match standard (Timo Kreuzer)
  • fix broken pointer comparison in signal() (Timo Kreuzer)
  • mbstowcs: Fix incorrect size passed as the second parameter for call to RtlMultiByteToUnicodeN. (Michael Martin)
  • Fixes loading assemblies when manifest is in a manifest file due to parsing failure. (Michael Martin)
  • CRT update part 1/x (Samuel)
  • add support for non-underscored symbols (Samuel)
  • Add missing file (Timo Kreuzer)
  • Stubplement _controlfp_s, rand_s (Samuel)
  • Implement _invalid_parameter, _get_invalid_parameter_handler, _set_invalid_parameter_handler (Samuel)
  • Implement memmove_s, strncpy_s (Samuel)
  • Export memmove_s and memcpy_s (Sylvain Petreolle)
  • Implement rnd_s (Sylvain Petreolle)
  • Add a debug print to help bugs like 5486. (Gabriel Ilardi)
  • Merge r44143 from amd64 branch (Timo Kreuzer)
  • Initialize MmDebugPte from MiDebugMapping variable instead of using MiAddressToPte for a constant initializer. This way the page can be set dynamically. Use MmDebugPte to determine if ready for mapping physical pages. (Timo Kreuzer)
  • Move #include <precomp.h> to the top, as precompiled headers must be the first thing that is included or it won't take advantage of being precompiled (Timo Kreuzer)
  • Fix the double use of _CRTIMP. (Amine Khaldi)
  • Add amd64 versions of setjmp / longjmp (Timo Kreuzer)
  • Add amd64 versions of chkstk_asm.s, seh.s to libcntpr (Timo Kreuzer)
  • Add a number of amd64 specific math functions (Timo Kreuzer)
  • add generic c versions of cos and sin (Timo Kreuzer)
  • Remove leading underscores from amd64 symbols (Timo Kreuzer)
  • Improve NULL definition. (Amine Khaldi)
  • Add __MINGW_ATTRIB_UNUSED macro. (Amine Khaldi)
  • Convert FillBuf to static __inline. (Amine Khaldi)
  • Add logf wrapper (Timo Kreuzer)
  • Add amd64 inf files (Timo Kreuzer)
  • Get back r47063 & r47960 reverted by r48273 (Pierre Schweitzer)
  • Add diffs for msimtf and atl. (Sylvain Petreolle)
  • Add hivecls_amd64.inf (Timo Kreuzer)
  • Implement a proper version of _assert. It nows shows a message box with the details and let's the user choose to either abort, debug or ignore the assertion. (Timo Kreuzer; #5486)
  • bug 5507, bug 5511 (Timo Kreuzer; #5486)
  • Remove "implementations" of __lc_collate_cp, __lc_handle and __lc_codepage. These are not functions, but varuables, implemented as MSVCRT_* (Timo Kreuzer)
  • add ___lc_codepage_func and ___lc_handle_func taken from wine (Timo Kreuzer)
  • Fix msvcrt spec file (Timo Kreuzer)
  • Fixes compilation with gcc 4.5.1 (Timo Kreuzer)
  • Fix __MINGW_MSC_PREREQ logic. (Amine Khaldi)





  • Add required for eVb's PCI driver. Matches resource data in Windows driver, minus typos. (sir_richard)


  • Fix yet another bug in the unused csrss code. (sir_richard)
  • Bang in the new thread support in a bunch of places, including creating static server threads. It's very hacked and handle duplication doesn't work 100% reliably, but it gets the job done. (sir_richard)
  • Add CsrGetProcessLuid, CsrImpersonateClient, CsrRevertToSelf, CsrShutdownProcesses, CsrFindProcessForShutdown required for user-mode shutdown. Right now we are able to reliably enumerate user apps (in the user LUID) and then service/system apps (in the LOCAL SYSTEM LUID). (sir_richard)
  • Differentiate between first-try and second-try shutdown. In the first try, the console server should defer to the user/win32k server to attempt shutdown for a non-console app. However, if we end up with a second try because this did not happen, then the console server takes matters in its own hands and calls the CTRL-C handler (with some exceptions, such as system/service apps, or apps not belonging to the LUID). (sir_richard)
  • Split off CSRSS into a more Windows-friendly model. CSRSS.EXE is simply a stub which loads CSRSRV.DLL, where all the actual code is present. (sir_richard)
  • Don't expect ReactOS to always boot from C:\ReactOS (that's not the case for LiveCD) (Hervé Poussineau)
  • Don't enumerate the ACPI root device (Cameron Gutman)
  • Let the ACPI driver handle fixed feature buttons (Cameron Gutman)
  • Don't call PrivateCsrssInitialized (Giannis Adamopoulos)


  • Removed NtUserGetScrollInfo and replaced it, move more type names in window object to WND. (James Tabor)
  • When locking and unlocking regions, no need to use probe to check attribute space first before read or write access. The exception handling is a feature. (James Tabor)
  • set fix line endings to preserve windows line endings (Matthias Kupfer)
  • fixes issue with cancel button (Matthias Kupfer)
  • fixes problems with unattended mode (Matthias Kupfer)
  • temporarily enable device listing (setupapi) (Matthias Kupfer)
  • More movement to WND with updates to related files. Added new scroll and get/post message routines. In the mix we did moved to the MONITOR structure. (James Tabor)
  • More movement to WND with updates to related files. Removed unused code rewritten others. Review patch. (James Tabor)
  • Patch that fixes VMWare boot (and should fix QEMu/KVM boot on the testbot): (sir_richard)
  • Updated headers and related files. (James Tabor)
  • Fix the window handle De/Reference throttler issue. Used mIrc. (James Tabor)
  • System regions do not possess user attribute sections. . (James Tabor; #5124)
  • Read the patch for more information. (James Tabor; #5124)
  • Implement IntGdiSetBrushOwner for bug 5124. (James Tabor)
  • Add system region support functions. (James Tabor)
  • Merge aicom-network-branch (without NDIS changes for now) (Cameron Gutman)
  • New noteworthy improvements include (in addition to the other improvements made in the commits that were reverted in trunk): (Cameron Gutman)
  • Support for sending/receiving packets > 16KB in size (Cameron Gutman)
  • Samba-tng works (Cameron Gutman)
  • Tracert works (Cameron Gutman)
  • Major speed and stability improvements (especially for TCP connections) (Cameron Gutman)
  • Use ExAllocatePoolWithTag/ExFreePoolWithTag instead of memtrack (Cameron Gutman)
  • Fixes to region support code. . (James Tabor; #5124)
  • Remove CriticalRegion calls. (James Tabor)
  • Remove CriticalRegion calls. (James Tabor)
  • Fixed DCE masks, clipping and added support for mirror and process owned dce. (James Tabor)
  • Reference: (James Tabor)
  • Add back removed window dce support routine. Fixed list handling and implemented thread cleanup for dces. (James Tabor)
  • Add back removed window dce support routine. Fixed list handling and implemented thread cleanup for dces. (James Tabor)
  • Wrong commit msg, removed debug prints and fixed RedrawWindow. This fix one part of the leak. (James Tabor)
  • Properly assign error code when a real status error occurred. (James Tabor)
  • Free the non user event container for WaitForInputIdle. (James Tabor)
  • Fix the new GetClipRgn clipping wine test for EqualRgn and clip region note. (James Tabor)
  • If dc is window owned and not class owned do not set class if null pdce. Added debug prints to locate reentrancy issues due to a race condition. (James Tabor)
  • Add more checks to find dead windows. (James Tabor)
  • remove unused library (Ged Murphy)
  • Fix DrawMenuBar. (James Tabor)
  • Transition the physical device into D0 state when we receive IRP_MN_START_DEVICE (Cameron Gutman)
  • Actually do the power state transtion when a PDO receives IRP_MN_SET_POWER for DevicePowerState (Cameron Gutman)
  • Fill the DEVICE_CHARACTERISTICS struct based on values in the acpi_device struct (Cameron Gutman)
  • Lots of unhacking (Cameron Gutman)
  • Stub-plement NtUserSetInformationThread for UserInitiateShutdown and UserEndShutdown. I think we're supposed to notify Winlogon at some point, and check for races. Part of new shutdown code. (sir_richard)
  • Stop memory corruption when InstalledDisplayDrivers has more than one driver in the list. Note that driver loading is inherently broken right now, as the list of drivers is not parsed properly (this breaks eVb's VGA/VBE driver). (sir_richard)
  • EngCreateBitmap/IntCreateBitmap don't make much sense (code written back in 2004...). RLEs don't have scanlines by definitions, bit depth alignments and sizing is not done, newer display formats (compressed) are not supported correctly, zero-width surfaces fail because the size is ignored during scanline calculation, etc. These bugs caused eVb's test VGA display driver to fail as it needs to create a zero-depth shadow surface, which would end up with pv0Bits == NULL in the current implementation (and crash during ROPs/BitBLTs). Attempted to rewrite as much of it to 1) make Windows drivers work with it 2) continue the current hacks needed for ReactOS drawing. Note that the broken IntCreateBitmap is still used by non EngXXX interfaces to reduce the change of breakage, but keep in mind the function is entirely wrong. (sir_richard)
  • Revert accidental changes to IntCreateBitmap. (sir_richard)
  • Enable the alignment code and reduce the number of hacks, leaving only one for 1bpp top-down output (Freetype?) which doesn't seem to like when the lDelta is aligned to the correct bit-boundary. This should fix the crashes and graphic cltches recently introduced. (sir_richard)
  • Prevent a possible memory leak. (Kamil Hornicek)
  • Use SURFACE_FreeSurfaceByHandle so we don't hit the "Object must not have a handle!" assert in GDIOBJ_FreeObj. (Kamil Hornicek)
  • Fix acpi_bus_receive_event and acpi_bus_generate_event which will be used for button events later (Cameron Gutman)
  • Uncomment and fix the locking code that protects the event queue and driver list (Cameron Gutman)
  • When adding new glyph cache entry convert the glyph bitmap with proper alignment to comply with the new code in EngCreateBitmap and remove the corresponding hack from SURFMEM_bCreateDib. (Kamil Hornicek; #5244)
  • Remove a pedantic assert to allow compressed bitmaps. (Kamil Hornicek; #5255)
  • 45127 (sserapion) (Timo Kreuzer)
  • Kill debug warnings of dc ownership. (James Tabor)
  • Implement MakeInfoDC and support functions. Dedicated to Timo. (James Tabor)
  • Handle keyboard input when no windows are present (Andrey; #3560)
  • Since r43772 we now normalize VK_LCONTROL/VK_RCONTROL to VK_CONTROL rather than VK_LCONTROL (and ditto for shift/alt), so update SetKeyState to handle this. Fixes bug 4945. (Jeffrey Morlan)
  • Update text and background brush properly. Fixes wrong colors in radio buttons in Firefox. Fix by Jerome Gardou. (Timo Kreuzer; #5311)
  • rename w32k.h to win32k.h and win32k.h to win32kp.h (Giannis Adamopoulos)
  • Do not do callbacks to user mode while holding system message queue lock (Giannis Adamopoulos; #4926)
  • Fix when WH_MOUSE_LL and WH_JOURNALRECORD are called (Giannis Adamopoulos; #4926)
  • Fix a problem where application that used WH_CBT hook procedures were receiving destroy window notification on windows that were never created. The window was never created because the application had returned a non zero value when it was notified of window creation, which effectively destroys the window and returns failure for window creation. See CBTProc Function on MSDN. Fixes bug #4461. (Michael Martin)
  • When calling NtUserCallNextHookEx check that the current hook is not the first in the chain. If so don't call the hook proc and just return, as it has already been called and it makes no sense for the NextHook function to call the first hook proc. Fixes bugs #4461 and #4407. (Michael Martin)
  • The previous commit claiming to fix bug #4461 was incorrect, it may have actually fixed bug #5320. Testers please test. (Michael Martin)
  • Fix IntDumpHandleTable, it was very broken. (Timo Kreuzer)
  • bug> (Johannes Anderwald)
  • The timer implementation uses a bitmap to store window-less timers. As an optimization to find the first free index, it uses the variable "HintIndex" which points to the first timer index. In order to find the next free index, the RtlFindClearBitsAndSet function is used. When a new timer is allocated, the "HintIndex" variable is increased, which increases the search offset. Now if more than NUM_WINDOW_LESS_TIMERS (1024) timers are allocated, no more timers can be allocated because RtlFindClearBitsAndSet will claim no more index are available, because the free indexes are below the search offset. (Johannes Anderwald)
  • bug> (Johannes Anderwald)
  • fix> (Johannes Anderwald)
  • Everytime a timer gets freed, store the freed index in "HintIndex". As a result the timer implementation will always find a free timer index (when there is one) (Johannes Anderwald)
  • fix> (Johannes Anderwald)
  • Add an assert to PostTimerMessages to catch null pointer windows (Johannes Anderwald)
  • Add another assert to catch special windows (Window == 1) (Johannes Anderwald)
  • Improve check if the window is '1' (Johannes Anderwald)
  • Revert the hack done in 47059 to apply a better solution. (Michael Martin)
  • co_IntCreateWindowEx: Add the WNDS2_WMCREATEMSGPROCESSED flag to state2 member of WND after sending the WM_CREATE message. (Michael Martin)
  • By setting this flag it can be examined elsewhere to determine if the window was created successfully. (Michael Martin)
  • co_UserDestroyWindow: Examine above mentioned flag to make sure the windows was created before calling hook procedure to inform of destroying window. (Michael Martin)
  • Only call ExFreePool.. if Buffer is not NULL, which can occur if the Unicode String MessageNameUnsafe coming from user mode is incorrect. Fixes a bugcheck when using OllyDbg V2.0. (Michael Martin)
  • IntMouseInput: Add the state of virtual keys to wParam before calling MsqInsertSystemMessage. Fixes bug #5066. (Michael Martin)
  • Add and Remove MK_XBUTTON1/2 flags to CurInfo->ButtonsDown vice XBUTTON1/2. (Michael Martin)
  • Code based on patches in bug #5066. (Michael Martin)
  • Gabriel Ilardi: (Aleksey Bragin)
  • Update spanish %temp% path, part of bug 2482. (Aleksey Bragin)
  • co_UserDestroyWindow: ThreadInfo->pDeskInfo->hShell holds the hWnd of the Shells Desktop Window. Set it to NULL if that windows is being destroyed. Fixes bug #4902. (Michael Martin)
  • Fix sending WM_KILLFOCUS when we give focus to a window of a different thread (Giannis Adamopoulos ; #1546 ; #1603)
  • Fix broken parameter passing from EngMaskBitBlt to (Alpha)BltMask. It was passing the wrong surface and the wrong point. Rename some parameters to reflect what their usage is. Add ASSERTs to make sure noone passes useless parameters. Fixes crippled text in startmenu. (Timo Kreuzer; #4379)
  • The whole code is broken by design, anyway it will go away, once the new text rendering code is done. (Timo Kreuzer; #4379)
  • Modify how non-queued messages are send that originate from the Win23k subsystem. (Michael Martin)
  • Non-queued messages must go directly to the windows WNDPROC and not through the message pump (previews ROS behavior). (Michael Martin)
  • More importantly sending these messages must not cause the sending thread to block waiting for a reply. (Michael Martin)
  • Add a messaging handling function that always sends message from Win32k to the windows thread without waiting. (Michael Martin)
  • This will also allow the implementation of message call back later. (Michael Martin)
  • Modify PackParam and UnpackParam to accept a BOOL value to determine whether LParam needs to be allocated from NonPagedPool. (Michael Martin)
  • Use with new message handling as if message sent to another thread have any pointers they must be allocated from NonPagedPool. (Michael Martin)
  • Fixed broken logic in can_active_window function and co_WinPosShowWindow. (Michael Martin)
  • Fixed broken logic in co_IntSendActivateMessages. (Michael Martin)
  • The WM_ACTIVATEAPP message was being sent to every window belonging to the desktop twice. (Michael Martin)
  • Once with flag saying window was activated and again with deactivated. (Michael Martin)
  • These changes should fix bugs #969, #3171, #4501, #4676, #4677, #4948. (Michael Martin)
  • Bring back support for RLE compressed bitmaps. (Kamil Hornicek; #5276)
  • Merge the decompress functions for 4bb and 8bpp bitmaps to one generic function. (Kamil Hornicek; #5276)
  • Simplify SURFMEM_bCreateDib a bit by not allowing PNG/JPEG compression at all. (Kamil Hornicek; #5276)
  • Check the supplied scancode instead of the state buffer whether a key is up (Gregor Schneider; #3727)
  • Fixes the calculator keyboard input regression introduced with r35117 (Gregor Schneider; #3727)
  • Ref: and wine implementation (Gregor Schneider; #3727)
  • When message are sent without waiting a reply (non-queued messages) the message queues are referenced and dereferenced in the call. (Michael Martin)
  • Message removal and cleanup functions for queues expected a reference on the queue. Add checks to determine if the message is a non-queued message and if so release memory for those that had pointers and more importantly skip dereferencing the queues. Possibly fixes random crashes and memory leaks. (Michael Martin)
  • The description and changes made regarding WM_ACTIVATEAPP messages in r47126 were partially incorrect, the code was mostly correct. (Michael Martin)
  • Change the first parameter type from HWND to PWINDOW_OBJECT for IntKillTimer as it makes more sense. (Michael Martin)
  • Activate IntSetTimer, already done by James. (Michael Martin)
  • Add flag TMRF_DELETEPENDING. Destroy timers when this flag is set in ProcessTimers to allow any timers that have expired to have the WM_SYSTIMER/WM_TIMER messages posted to message queue before being destroyed. (Michael Martin)
  • Fix error in FindTimer, it was always returning a Timer and it needed to return NULL if the specified timer did not exist. (Michael Martin)
  • Fix error in PostTimerMessages, need to handle cases where the Window object is NULL which occurs when requesting messages for any window belonging to the thread. (Michael Martin)
  • In co_IntPeekMessage, simply call PostTimerMessages to have WM_SYSTIMER/WM_TIMER messages posted for expired timers. Remove call to old timer message handling. (Michael Martin)
  • TODO: Code using the old timer implementation needs removed. (Michael Martin)
  • Fixes bugs #2393, #3634, #2835. Commit dedicated to JT and Mr. Roboto. (Michael Martin)
  • Check that the thread is not in cleanup before attempting to do anything related to it. Add a couple asserts for sanity. (Michael Martin)
  • Rename co_InflateRect to RECTL_vInflateRect and move it to rect.c (Giannis Adamopoulos)
  • WM_WINDOWPOSCHANGED should contain the final window position (Giannis Adamopoulos)
  • Store the monitor work area in the monitor and not in the desktop (Giannis Adamopoulos)
  • Correctly adjust values returned from co_WinPosGetMinMaxInfo (Giannis Adamopoulos)
  • Set MasterTimer initial value to NULL and Initialize MasterTimer at the beginning of RawInputThreadMain before doing anything else. (Michael Martin)
  • Add ASSERTs to catch if MasterTimer is NULL. (Michael Martin)
  • Move the initialization of MasterTimer into InitInputImp which is called from win32k DriverEntry routine instead of initializing it in the secondary thread RawInputThreadMain. (Michael Martin)
  • Remove WS_EX_SETANSICREATOR from Ex style in co_IntCreateWindowEx (Timo Kreuzer)
  • For the Low Level Mouse Hook (WH_MOUSE_LL), input can come from the mouse driver or mouse_event. Both of which result in a call to UserSetCursorPos. (Michael Martin)
  • UserMode SetCursorPos API also ends up here. Add BOOL parameter that can be used to determine if hooks are to be called. (Michael Martin)
  • Move the code related to calling the hook procedure from MsqInsertSystemMessage into UserSetCursorPos and call the hook procedure here if needed. (Michael Martin)
  • If hook procedure returns non 0 value. Dont insert the system message. (Michael Martin)
  • Fixes a recursive call to the hook procedure resulting thread using to much stack exposed by user32 winetest for input. (Michael Martin)
  • When destroying a window, generate a mouse move message, so that the underlying window is notified about the mouse position and can update the pointer if neccessary. Fixes bug #4499 and bug #3893 (Timo Kreuzer; #4499)
  • Minor revert of 47281 to fix OO installer textboxes. (Michael Martin)
  • Delete old clipregion only and set a new one, if it could be created already, to avoid setting a NULL region. (Timo Kreuzer; #4431)
  • Refactor NtGdiGradientFill, use 1 SEH block instead of 2, replace IntGdiGradientFill with GreGradientFill, don't lock the DC in UserDrawCaption. (Timo Kreuzer)
  • Implement DestroyTimersForWindow and call it instead of MsqRemoveTimersWindow when destroying a window. (Michael Martin)
  • Fire NewMessages event when cleaning up thread so that threads dont wait for new messages that will never be received. Fixes a problem where some application that use timers dont completly exit. (Michael Martin)
  • IntSetTimer: Dont try to raise a timer from the dead. Once the TMRF_DELETEPENDING flag is set, let it be destroyed. (Michael Martin)
  • co_MsqWaitForNewMessages: Call the wait without a timeout value as now when the timer expires the NewMessages event will be set to exit the wait. (Michael Martin)
  • Message Queue specific timer code and old time queuing code is now dead. It will be removed later when we are happy with new timer implementation. (Michael Martin)
  • GreGradientFill: don't forget to unlock the DC (Timo Kreuzer)
  • Remove use of TMRF_DELETEPENDING for deleting timers as this was a bad idea. (Michael Martin)
  • Timers need to be deleted immediately as waiting for them to be deleted resulted in some processes running out of handles. (Michael Martin)
  • Fixes richedit winetest for editor. (Michael Martin)
  • Add flag TMRF_TIFROMWND for timers created from user mode so the thread stored in the timer object is from the window and not caller. (Michael Martin)
  • Fixes an issue where FireFox would not show any of its windows and looked dead. (Michael Martin)
  • When creating and deleting timers, If the window is non null and IDEvent is 0 then the IDEvent is changed to 1. (Michael Martin)
  • When modifying timer list use UserEnter and Leave instead of a Critical Region only. (Michael Martin)
  • The timer is created usingUserCreateObject. It may be a good idea to save the handle in the timer object so that it can be deleted later. (Michael Martin)
  • Dereference the object before attempting to delete it. (Michael Martin)
  • For types FNID_SENDMESSAGECALLBACK call co_IntSendMessageWithCallBack to put the message in the send queue. (Michael Martin)
  • Rewrite code for when messages have a completioncallback (Michael Martin)
  • When processing and deleting timers use a seperate timer lock instead of using the global user lock. (Michael Martin)
  • Rename co_IntCreateWindowEx to co_UserCreateWindowEx and rewrite it (Giannis Adamopoulos)
  • Fix the sequence of messages sent in co_UserCreateWindowEx (Giannis Adamopoulos)
  • Allow menus to be shown over the taskbar (Giannis Adamopoulos; #5415)
  • Call CsrInit in NtUserInitialize so we can remove PrivateCsrssInitialized (Giannis Adamopoulos)
  • Romove a reactos only syscall (NtUserGetClassLong) (Giannis Adamopoulos)
  • Remove UserGetClassLongPtr, UserGetWindow, UserGetWindowLong, IntGetOwner. Instead access objects directly (Giannis Adamopoulos)
  • In WINDOW_OBJECT store pointer to the ownder window instead of a handle (Giannis Adamopoulos)
  • CreateWindow: initialize window position after sending WM_GETMINMAXINFO message (Giannis Adamopoulos)
  • assert -> ASSERT (Gregor Schneider)
  • Free allocations with the tag that was used to allocate them (Gregor Schneider)
  • Use TAG_GDIICM tag for ICM allocations (Gregor Schneider)
  • Use TAG_PALETTE for palette entries (Gregor Schneider)
  • Remove mapping codes, the functions from pre r9000 don't even exist anymore (Gregor Schneider)
  • Use TAG_KEYBOARD for keyboard layouts (Gregor Schneider)
  • Free TAG_ACCEL and TAG_DRIVER allocations with their tags (Gregor Schneider)
  • Forgot to remove this ASSERT for r47636 (Cameron Gutman)
  • Change the number of windowless timers from 1024 to 32768. (Michael Martin)
  • When destroying windowless timers, clear the bit number (IDEvent) in the bitmap so the bit number can be reused. (Michael Martin)
  • Only create a windowless timer if there is no windowless timer matching IDEvent. (Michael Martin)
  • Fixes case where applications create too many windowless timers and/or run out of windowless timers. (Michael Martin)
  • Tag more pool allocations (Gregor Schneider)
  • Tag even more pool allocations (Gregor Schneider)
  • Remove dead code, adjust comments (Gregor Schneider)
  • Tag the remaining untagged pool allocations (Gregor Schneider)
  • Use GDITAG_RBRUSH instead of hardcoding the tag (Gregor Schneider)
  • Merge GDIOBJ related changes from yarotows (Jérôme Gardou)
  • GDIOBJ_(Share)LockObj : return NULL on NULL input, avoiding debug spew (Jérôme Gardou)
  • Set NULL process owner when setting READY_TO_DIE flag of a gdiobj (Jérôme Gardou)
  • So now GDIOBJ_ShareUnlockObj can claim ownership before trying to delete the object (Jérôme Gardou)
  • Set DC_DIBSECTION dirty flag when a DIB section is selected, not when one is created. (Jérôme Gardou)
  • Chek if there is something to do in GDIOBJ_SetOwnership before doing it (Jérôme Gardou)
  • get rid of ROS_DC::BitsPerPixel. (Jérôme Gardou)
  • 1 - It was a hack. (Jérôme Gardou)
  • 2 - Its use was inconsistent. (Jérôme Gardou)
  • co_IntSendMessageWithCallBack is called for two reasons; for messages that originate from win32k and from user mode when using Callbacks. (Michael Martin)
  • For both cases do not do anything with the sendqueue member of message struct and do not add the message to the senders dispatch message list. (Michael Martin)
  • In msgqueue related functions, check if the message is a nowait messages before attempting to remove and entry from the dispatch message list as it doesnt exist. (Michael Martin)
  • Fixes a NonPagedPool corruption that was occurring on regtest bootcd. Thanks Caemyr for testing. (Michael Martin)
  • Add Check for spwndNext being null before accessing any of the members. Fixes bugcheck when using cubicexplorer. (Michael Martin)
  • update olepro32 base address. (Sylvain Petreolle)
  • The Win32ClientInfo TEB field can be bigger than the CLIENTINFO structure. (Timo Kreuzer)
  • Only the CompletionCallback member determines if a callback is needed. Checking the SenderReturn is unwanted and this variable was never initialized which could cause bogus callback attempts. Just remove the BOOL variable SenderReturned and directly check if Message->DispatchingListEntry.Flink is NULL before attempting to remove the message from senders queue. Noticed by Timo. (Michael Martin)
  • Fix midiOutOpen and midiInOpen prototypes. (Sylvain Petreolle)
  • Change percision of win32k timers to 0.5 miliseconds. (Michael Martin)
  • Remove Destroy parameter from FindTimer as it is just odd and call RemoveTimer where needed. (Michael Martin)
  • PostTimerMessages: No need to continue looping the remainder of the timers once the target timer has been found and message posted to message queue. (Michael Martin)
  • Set caret blink rate for global server information too. (James Tabor)
  • Remove dead code as in the old SetTimer and KillTimer functions. (Michael Martin)
  • Fix typo. (Sylvain Petreolle)
  • Dedicated to Physicus (Sylvain Petreolle)
  • move set of msg-time (for messages) back to msg queue (msg time is needed for all mouse events not only mouse move) (Matthias Kupfer)
  • ClickLock will work again (Matthias Kupfer)
  • Revert changes done in 47325 which partially broke mouse hooks. (Michael Martin)
  • If the UserSetCursorPos is reached due to SetCursorPos, dont generate a mouse move message or call mouse hooks. (Michael Martin)
  • Forgotten in r47924. Change name of BOOL parameter for UserSetCursorPos to better describe its purpose as done in c source. (Michael Martin)
  • Remove old win32k timer code. (Michael Martin)
  • Get rid of rosdc::hVisRgn, as in yarotows (r46372) (Jérôme Gardou)
  • Dereference CursorIcon Object in NtUserCallOneParam (Jérôme Gardou)
  • Shared Icons need their bitmaps to be unowned (Jérôme Gardou)
  • Bye bye NtUserCreateCursorHandle. (Jérôme Gardou)
  • Thanks GedMurphy for explaining me how to suppress that. (Jérôme Gardou)
  • Please clean win32k after this commit. (Jérôme Gardou)
  • Properly initialize hVisRgn in CLIPPING_UpdateGCRegion (Jérôme Gardou)
  • This fixes a whole bunch of "IntGdiCombineRgn requires hSrc2 != NULL for combine mode 1!", and probably some bugs. (Jérôme Gardou)
  • Dedicated to encod3d. (Jérôme Gardou)
  • rewrite UserDrawIconEx, taken from yarotows, with same small modifications. (Jérôme Gardou)
  • Fixes a whole bunch of user32:cursoricon tests (Jérôme Gardou)
  • Protect access to the result pointer from KeUserModeCallback with SEH. Fixes a possible kernel mode crash. (Timo Kreuzer)
  • Copy the alpha channel as well when doing RGB<->BGR color translations. (Timo Kreuzer)
  • Fix NtGdiMaskBlt to handle patterns correctly, use SRCAND, which is more optimized, instead of DSTERASE, and set fore and background colors correctly to not destroy alpha channel. (Timo Kreuzer)
  • Remove IntEngExtEscape stub. This function is completely useless. If the driver doesn't provide a DrvEscape, the function should simply fail and must return 0, not -1. (Timo Kreuzer; #4563)
  • If a NULL surface is passed, pass on NULL pso to the driver function (Timo Kreuzer; #4563)
  • For SetTimer nIDEvent can be 0 in which case return 1. Zero still needs to be used for nIDEvent when killing the timer. Fixes bug 5553. (Michael Martin)
  • Modify windowless timers to use IDEvent values decrementing from the max number of windowless timers vice incrementing from 1. Done to match windows behavior. (Michael Martin)
  • co_IntTranslateMouseMessage: properly initialize *HitTest and only send WM_NCHITTEST when the message is going to be removed (Jan)
  • co_IntPeekMessage: Prevent possible use of uninitialized HitTest by ProcessMouseMessage() (Jan)
  • Fixes bug 2139 (Jan)
  • Allocate the DCs prgnVis in DC_AllocDC, instead of "on demand" in GdiSelectVisRgn and properly handle failure case. This fixes a possible crash, when running out of gdi handles. (Timo Kreuzer)
  • Use the object type index, not the shifted full object type to decide what to do with an object in NtGdiDeleteObjectApp. Fixes leaking derived types such as pens. (Timo Kreuzer)
  • When doing a cleanup for a DC, check, if the default brushes are set, before dereferencing them. Fixes a possible kernel mode crash. (Timo Kreuzer)
  • Remove some obsolete casts (Timo Kreuzer)
  • Move the allocation of the vis region of the DC to a later position, so that all mandatory fields are initialized before we try to delete the DC in failure case. Fixes yet another possible crash. (Timo Kreuzer)
  • Seperate DC_vSetLayout from NtGdiSetLayout and save the old value before setting the new one. (Timo Kreuzer)
  • Rework EngSetPointerShape, to first allocate the neccessary surfaces, before deleting the old ones. Also check in IntShowMousePointer if a saving surface is present. This way a failure to allocate a surface will not result in a crash, but keep the old mouse pointer. (Timo Kreuzer; #5402)
  • Mouse messages can be sent before the desktop is initialized. Check for this and return false if its not. FIxes assert when moving mouse before desktop is up. (Michael Martin)
  • Fix large amount of set-but-unused variables. Most of these seemed to be old/unfinished code, however in IntGdiPaintRgn an actual bug seems to have been found. (sir_richard)
  • Make IntGdiPaintRgn return the status of the operation, not always TRUE. (sir_richard)
  • Giannis Adamopoulos: Only dereference a class if it's valid, should fix Heroes 3 crash. (Aleksey Bragin; #5606)
  • Fix a bug, where a failure to allocate the kernel mode WINDOW_OBJECT would cause a page fault, because the WND was still allocated, but never initialized, and Wnd->rpdesktop was then dereferenced to free the WND again. (Timo Kreuzer)
  • Call HCBT_CREATEWND, WM_NCCREATE and WM_CREATE with correct style and position (Giannis Adamopoulos)


  • Deduplicate FSRTL_COMMON_FCB_HEADER_LAYOUT in ntifs.h (Amine Khaldi)
  • Move ECP_HEADER from the ntifs template to fsrtltypes.h (Amine Khaldi)
  • Make sure FORCEINLINE comes as first in declarations. (Amine Khaldi)
  • Missed this one (FORCEINLINE) (Amine Khaldi)
  • WmiTraceMessageVa is NTAPI, not __cdecl. (Amine Khaldi)
  • Introduce some _ANONYMOUS_STRUCT and NONAMELESSUNION based definitions. (Amine Khaldi)




  • When doing 1BPP -> 8BPP conversion set all 8 bits not only the LSB. (Freetype devs were notified of this issue) (Kamil Hornicek; #5244)
  • The FT_MulFix patch is not neccessary anymore, the 1BPP -> 8BPP conversion patch will be applied again right after this. (Jerome; #4537)
  • Remove setjmplongjmp.s (Timo Kreuzer)
  • Fix FT_Get_CID_Is_Internally_CID_Keyed export name to match source code. (Aleksey Bragin)


= TEST =
== PERF ==
  • Do not declare the PCR in KeGetPcr as volatile. It is only volatile as in "if there is a context switch, the PCR is different". You are in a LOT of trouble if the thread switches while your code is running in the first place, and your code is somehow running as a different thread! (sir_richard)
  • This change makes C code a lot neater, especially during PCR access, because it doesn't force reloading the PCR each time. For example, Read-Modify-Operations on the PCR, such as AND are 1 line of assembly instead of 3. (sir_richard)
  • This helps and will help further with the C HAL, as well as the C trap handlers. (sir_richard)
  • Jose Catena <> (Aleksey Bragin; #5139)
  • Fix a typo in aulldvrm (one of the dividends was always wrong). (Aleksey Bragin; #5139)
  • Replace early ZwClose system calls with ObCloseHandle(KernelMode). This avoids taking a system call for those cases and gives a slight perf boost to booting up the system. It also pushes the first system call somewhat later in the boot process, allowing for easier debugging should the interface have issues/need tracing. (sir_richard)
  • Make all trap handlers, trap exit code, fatal exit code, and exception dispatch code "no return" since it always leads to an iret or other kind of non-directly-returning mechanism. This allows the compiler to optimize better and also remove useless code at the bottom of the functions. Since __builtin_unreachable is only for GCC 4.5, we use exit(0) for now (it will never be reached) to trick GCC. (sir_richard)
  • Fix vmwinst.exe crash (bug #5134). (Dmitry Gorbachev)
  • Forgot ntdef.h (Dmitry Gorbachev)
  • Put #endif where it should be. (Dmitry Gorbachev)
  • Trying r45222 hack again... (Dmitry Gorbachev)
  • Use for GCC before 4.5, too... (Dmitry Gorbachev)
  • Comment out DECLSPEC_NORETURN for now. (Dmitry Gorbachev)
  • Make the trap entry/exit macros inlined, just as they used to be before in their pure-assembly forms. This should boost performance quite a bit by avoiding 2-3 extra calls during traps and system calls. (sir_richard)
  • Remove ABIOS checks since ReactOS does not support this, and since it doesn't look like the target kernel actually does either, we can remove this vestigal/unsupported code, saving some extra branches and checks. (sir_richard)
  • Use __builtin_trap for old GCC, too. (Dmitry Gorbachev)
  • KiEoiHelper, KiDispatchExceptionFromTrapFrame: mark noreturn. (Dmitry Gorbachev)
  • Return DECLSPEC_NORETURNs. (Dmitry Gorbachev)
  • After spending the better part of the last two days rewriting the HAL V8086 code (used for BIOS Display Reset) in C, it dawned upon me that it shouldn't even be used during bootup in the first place! The boot loader, running in real-mode, already sets video mode 12 when starting ReactOS. We then repeat the operation, but since we're in protected mode, we have to emulate the whole sheebang with V8086 mode. We now initialize bootvid without requesting a mode switch (which was broken up until a commit ago). This gives us a dirty palette and VGA state. We then call VidResetDisplay to clean up the palette and setup the VGA registers correctly, but we only reset the screen if a custom /BOOTLOGO command is used (which isn't supported yet). We therefore don't need to enter V8086 mode at all up until the switch to graphics mode from the video card driver. Note that Windows doesn't do this (Win7 might due to the new Boot Graphics Library), so we're actually booting faster! (sir_richard)
  • What to do when your SYSEXIT code has a bug? Set KiFastSystemCallDisable to TRUE so it never gets used. Now, for the first time in 3 years and 3 months (not giving a specific revision # to protect the 'innocent'), ReactOS actually fully uses the SYSENTER/SYSEXIT instructions isntead of IRETD, since my code doesn't exhibit the bug and SYSEXIT is safe to use. This should save a good hundred cycles or more per system call. (sir_richard)
  • Set WP0 bit in CR0 later, thus allowing the existing runtime patches (and this new one) to function without requiring MmSetPageProtect. Saves TLB flushes and page table walking/mapping on boot. (sir_richard)
  • Left in some debug prints to see what buildbot reports...will remove if it survives. (sir_richard)
  • Not in any way a scientific number you should bet the farm on, but we do now count the number of cycles at the very first instruction of kernel initialization, at the moment SMSS initializes the registry (when we call kernel initialization complete), and at the moment there have been 12 processes created (10 without counting idle/system), which is a bit less than a normal GUI boot. We also display the number if interrupts, system calls, and context switches it took to get us there. A purely comparative number, perhaps worthy for inclusion in testman/regression tests? (sir_richard)
  • Optimize nested interrupt cases (where a pending interrupt exists at the end of a software or system interrupt) just like the old HAL did, by jumping into a second-level handler and completing the outer trap frame instead of the nested trap frame. This saves a lot of cycles in those cases, and they do happen quite often (pending DPC at the end of an interrupt, for example). (sir_richard)
  • This is too since the C interrupt handling code is a lot more efficient than the ASM one. Numbers look good here. (sir_richard)
  • On real machines, writing the PIC mask is a relatively expensive I/O operation, and IRQL lower/raise can happen hundreds of times a second. Lazy IRQL provides an important optimization. (sir_richard)
  • Correctly handling level interrupts as level interrupts allows for faster, and more efficient, IRQ handling. (sir_richard)
  • add missing delimiters (Sylvain Petreolle)
  • Omit setting certain useless trap frame fields. (sir_richard)
  • Change instructions used to save registers on the trap frame to fix some WaW and RaW hazards. (sir_richard)
  • Merge some small changes from aicom-network-branch to fix potential memory corruption and remove unused code in oskittcp (Cameron Gutman)
  • Add a hack to WSHSetSocketInformation so we don't fail with options that aren't implemented yet (Cameron Gutman)
  • Fixes bug #5131 (Cameron Gutman)
  • Boot-time improvement since the new system driver loading code uses low-level Cm interfaces (portability side-effect: can be shared with FreeLDR) instead of the complex parse-based object-manager-based system-calls. (sir_richard)




  • Remove a ";" after an if (), that makes no sense and caused GetNt4SoundDeviceCapabilities to always return without doing anything. (Timo Kreuzer)
  • Fix warning about uninitialized variable (Timo Kreuzer)



  • Get rid of the hard-coded sector size as large sector (4KB) harddisks are already available. (Eric Kohl)
  • When a partition is formatted, choose the FAT type according to the partition type. The size of the partition does not matter here as it is up to the caller to set the right partition type according to its size. (Eric Kohl)




  • Add a device description for PNP0A00 (Cameron Gutman)
  • Fix the class GUID so devices appear in the correct category in device manager (Cameron Gutman)
  • Remove trailing spaces on some device descriptions (Cameron Gutman)
  • Remove the "(UniATA)" at the end of some device descriptions (Cameron Gutman)
  • Add -fms-extensions for arm build (Timo Kreuzer)
  • Add _NT_TIB_KPCR to compensate for a missing NT_TIB (hackfix) (Timo Kreuzer)
  • add KERNEL_STACK_SIZE & co for arm (Timo Kreuzer)
  • Add missing KeGetCurrentThread prototype for arm (Timo Kreuzer)
  • define INTERLOCKED_RESULT for X86 only (Timo Kreuzer)
  • Add _CONTEXT and _EXCEPTION_RECORD forward declarations (Timo Kreuzer)
  • remove scsiport from arm build (Timo Kreuzer)
  • Compile scsiport.c for freeldr only on x86 builds (Timo Kreuzer)
  • revert r46742 (Timo Kreuzer)
  • Reenable isapnp (Cameron Gutman)
  • Comment out the service installation for VBE and VGA so the configuration set in first-stage won't get overwritten (Cameron Gutman)
  • Nasty graphical glitches still remain in VGA mode (Cameron Gutman)
  • Fixes bug 2073 and bug 4192 (Cameron Gutman)
  • Add 'PortSubClass' values for serial and parallel ports. (Eric Kohl)


  • Implement basic Headless support in the kernel. Implement missing InbvPort routines based on WinLdrPort (using cportlib). Add header for Hdl. Terminal initializes now on COM2. Added misisng code to InbvDisplayString to also display on Headless Terminal (requires unimplemented HeadlessDispatch). Next steps are to implement the kernel log buffer, and HeadlessCmdPutString to see boot strings. (Anton)
  • Implement CmdPutString command, and add log message types. Kernel version/build, processor, and RAM, now appear on EMS screen (due to InbvDisplayString), as well as loaded drivers. Next steps are to support log entries and a flag to route debug output (a ReactOS-specific feature request). (Anton)
  • Fix support for non Headless scenarios as well. (Anton)


  • Fix attaching to processes (registers / backtraces) (Timo Kreuzer)




  • Mostly moved all the current CSRSS code into CSRSRV, with some very minor changes to get it workking. (sir_richard)
  • Add some more code from Alex's CSRSRV, such as thread dereferencing/deallocation, hacked to work. (sir_richard)
  • Make CsrTerminateProcess destroy each CSR thread in that process, otherwise we were always leaking a handle, so processes never died. Because of this, primary tokens would remain "in use", and when umpnpmgr attempted to do a "Create Process as User" for the second+ time, the call would fail since the token from the first process was still around. This fixed that regression from the mailing list. (sir_richard)
  • Move the new process/thread management functions into new, dedicated files. Export some of the functions, so that win32csr can use them by linking to csrsrv. Last change needed for barebones user-mode shutdown support. (sir_richard)




  • Rewrite harderror handling. (Timo Kreuzer)
  • The old code was a monster function, leaking memory, using ansi rather than unicode strings and not getting this right. It was also vulnerable to attacks, making csrss crash, when corrupt parameters were sent. (Timo Kreuzer)
  • Add primitive resizing support and automatic scrolling support (Adam; #2622)
  • Get rid of dynamic "LineBuffer": it wasn't being resized properly in all cases, causing corruption of Win32CsrApiHeap. Replaced with fixed buffer (painting a line with multiple TextOutW calls if necessary). (Jeffrey Morlan)
  • Fix display of harderror message box for STATUS_UNHANDLED_EXCEPTION (Timo Kreuzer)
  • Fix a FIXME: convert ASCII char to Unicode char with input codepage (Gregor Schneider)
  • Rename define parameters to make sense (prefix s - source, d - destination) (Gregor Schneider)
  • Assign remaining services to the LocalSystem account. (Eric Kohl)
  • Silence a debugprint (Timo Kreuzer)
  • Make CsrFreeConsole close the process's console handles. (Jeffrey Morlan)
  • Clean up the debris from r47314: Removed some redundant code, reorganized headers, fixed win32csr.rbuild indentation (Jeffrey Morlan)
  • Protect ProcessData->Console with the HandleTableLock. (Jeffrey Morlan)
  • Simplify locking: having a lock for each screen buffer is overkill since most programs only use one screen buffer at a time. (besides, almost all APIs were taking the console lock anyway) Reduce to just having one lock for a console. (Jeffrey Morlan)
  • Instead of keeping track of how many references a screen buffer has, keep track of handles only. When all handles to a screen buffer are closed, it should be deleted even if it's the active buffer (not yet implemented). (Jeffrey Morlan)
  • Delete even the active screen buffer when all handles are closed. Fixes a winetest. (Jeffrey Morlan)
  • Implement FILE_SHARE_* flags for console handles. Fixes some more winetests. (Jeffrey Morlan)
  • Make consistent use of RECT/SMALL_RECT structures: a RECT uses pixel coordinates relative to the window client area and is endpoint-exclusive; a SMALL_RECT uses character coordinates relative to the screen buffer and is endpoint-inclusive. (Jeffrey Morlan)
  • Allow text selections outside of the visible window (Jeffrey Morlan)
  • Implement GetConsoleSelectionInfo (Jeffrey Morlan)
  • fix tuiconsole (Jeffrey Morlan)
  • Revert 47310. Please find a way to enable kmtest only when building the testing cd image, not the installation/live one. (Aleksey Bragin)
  • Implement console pausing. [Bug 4739] (Jeffrey Morlan)
  • Split up excessively large and disorganized conio.c into 3 separate files: one for input-related functions, one for output-related functions, and one for general/miscellaneous functions. (Jeffrey Morlan)
  • Consistently store console input events internally as unicode. (Jeffrey Morlan)
  • Console input simplification: (Jeffrey Morlan)
  • Put code for processing events for line input in one place, instead of duplicating it everywhere (Jeffrey Morlan)
  • Remove "Fake" and "NotChar" fields from ConsoleInput struct. ConioProcessKey didn't actually add Fake events; they were used for the \n when converting \r to \r\n, but this is better done by the line input code. (Jeffrey Morlan)
  • Build an input line completely on the server side; this will make it practical to add history and more sophisticated editing later (Jeffrey Morlan)
  • Implement some basic line editing capability (Jeffrey Morlan)
  • Implement basic support for history in line editing (Jeffrey Morlan)
  • Reorganize code to reflect that line input is more coupled to history than it is to character input (Jeffrey Morlan)
  • Fix array subscript out of bounds error (Timo Kreuzer)
  • Fix a cast (Timo Kreuzer)
  • Delete ppcdevtree. (Amine Khaldi)




  • Use newinflib instead of inflib. (Eric Kohl)
  • Add RegDeleteKeyW stub. (Eric Kohl)
  • Convert registry generation code from ANSI APIs to UNICODE APIs. (Eric Kohl)
  • wcsicmp -> _wcsicmp, should fix buildbot build (Gregor Schneider)
  • Fix a buggy format string (%s --> %S). (Eric Kohl)
  • Add _wcsicmp to rtl.c. (Eric Kohl)
  • Partial revert of r47019 because mkhive failed on Linux machines. (Eric Kohl)
  • Comment out an ASSERT that gets trigged frequently. (Timo Kreuzer; #5320)
  • Revert remaining changes of r47019. (Eric Kohl)
  • Add RegDeleteKeyW stub. (Eric Kohl)
  • Implement RegDeleteKeyA so that it calls RegDeleteKeyW. (Eric Kohl)
  • Check parameters before accessing them, update usage information (Gregor Schneider)
  • Active the planned cleanup function to motivate people to actually free resources: mkhive currently leaks ~500kb of memory after a usual run (Gregor Schneider)
  • Improve debug print (Gregor Schneider)


  • rapps (Daniel Reimer)
    • Update openoffice 2.4 Links to a new and working mirror
    • Add Opera 9 to rapps.
    • Update OOo to 3.2.1 and the last time... fix the FF2 link.
    • Update rapps database to most recent Versions of all apps.
    • Add the non yet working FF 3.6 and AbiWord 2.8.5 to rapps to simplify testing.
    • Updated VB6, VC2005, VC2008 links according to winetricks.
    • Update the rapps download list.
    • Fix the SeaMonkey Mirror.
    • Try to fix FF2 Download.
    • Add Visual C++ 2008 SP1 runtime to rapps and rename the others correctly.
    • Added Fox Audio Player to rapps and some more fixes. (Igor Paliychuk, myself)
    • Update the rapps Database to a valid FireFox Link once more.
    • Bug 5072: PATCH: Add ReMooD to ReactOS Application Downloader. (by GhostlyDeath)
    • Update Rapps Links and add the two RosBE Addons.
    • Update some more apps. (OpenOffice 3.2.0, SciTE 2.03)
    • DosBox to 0.74, Mirror of FireFox 2, IrfanView to 4.27, RosBE to 1.5.1, uTorrent to 2.0.2.
    • Update FireFox, KDE, MirandaIM, Mono, Opera, RosBE64, SeaMonkey, ThunderBird, uTorrent, VLC in rapps.
    • Added comctl32.ocx, KDEWin, Mono, .net, Media Player Classic, Python, Steam, Tahoma Font and Windows Media Encoder 9 to rapps.
    • Update VLC to 1.1.0
    • Add SuperFinder XT to rapps.
  • media/inf (Daniel Reimer)
    • Add Cyrix, Pentium MMX, Pro, II, M, 4, Core Solo/Duo/Extreme/i*, Atom, AMD K6, K6-3, Via Nehemiah, Esther, Nano and a big bunch of Family 15 (1st gen Athlon64, Turion64, Sempron Series) AMD CPUs to cpu.inf
    • Generalize some lines to be used for a whole bunch of models. As long as we don't have a CPU driver I will keep it that way its now, because now it at least shows a approximate CPU Title in Devmgr.
    • Add more HIDs for other CPUs and Manufacturers like VIA and AMD into cpu.inf to make it show the real CPU name in the Device Manager. This does not work yet, because our ACPI always returns the Default CPU HID right now.
  • wine (Daniel Reimer)
    • Sync rpcrt4 to Wine 1.2rc6
    • Sync winemp3.acm with Wine HEAD. This one uses libmpg123 which was added in Version 1.12.3. Thx to Timo Kreuzer for telling me the magics of the crt="dll" switch.
    • Update the banner.bmp in credui
    • Fix setupapi setupcab winetest. (Samuel Serapion)
    • Another updated wine header to fix some synched winetests' build process
    • Update WIDL to Wine 1.2 rc6 + sync/modify two idl files making problems with the new widl. (Samuel Serapion)
    • update wine's unicode app to 1.2rc6. (Samuel Serapion)
    • Update the d3dx9_XX.dll files to the recent wine release version
    • Sync sccbase, slbcsp, usp10, wldap32, wuapi and xinput1_3 to Wine 1.1.40
    • Remove Esperanto and Walon languages from comctl32, comdlg32, mpr, msi, shlwapi, wininet
  • piperead (Daniel Reimer)
    • Update piperead to Version 0.3 (Jan Roeloffzen)
    • Updated piperead (Jan Roeloffzen) Bug 5146

is already added by "mingw_common". (Daniel Reimer)

  • Some more psdk updates needed for winetests. (Daniel Reimer)
  • update kernel32 nls files to be able to build it with the new unicode tool. (Daniel Reimer)
  • convert the cmd rc files to utf-8 to fix building. (Daniel Reimer)
  • Experimental try to get Itunes Setup start. By Samuel Serapion (Daniel Reimer)
  • XML Compliance Patch for the RBUILD Files. By Samuel Serapion (Daniel Reimer)
  • Bug 5501: Add Wing32 support by Carlo Bramini
  • user32: DrawText: CJK and Thai line-wrapping (Katayama Hirofumi)
  • appwiz: check if path is valid (Katayama Hirofumi)
  • The big RosBE 1.5 compatibility patch. You will need RosBE 1.5 from this point! (Colin Finck; #4810)
    • Set the minimum GCC version to 4.4.0 and minimum Binutils version to 20091016.
    • Remove the -fno-unit-at-a-time hacks.
    • Remove dgorbachev's temporary hacks for user-mode C++ applications.
    • Merge ntoskrnl's "precomp.h" and "ntoskrnl.h" again, the PCH issues have been fixed.
    • Use our "ofmt_stub.a" to be compatible with newer MinGW Runtime versions.
    • Use LD's new -exclude-all-symbols option to not auto-export all symbols in case no DEF file or __declspec(dllexport) was specified.
    • We used to patch our LD version to work around this problem.
    • Use LD's --start-group and --end-group parameters to allow a more flexible linking order.
    • Use GCC's -fno-set-stack-executable for amd64 and i386 targets to disable adding the __enable_execute_stack code.
    • Change the makefile's name to "makefile-$(ARCH).auto" for all architectures.
    • Remove some -Wno-error flags.
  • This ancient version didn't even receive the GCC 4.1 compatibility update from years ago, so it's safe to remove it. (Colin Finck)
  • Put Vizzini's "csq.h" in the Public Domain with permission from the author: (Colin Finck)
  • Make KeFlushProcessTb work. Since no MPCore support, CPU TLB is flushed instead. Maybe should use ASIDs later. (evb)
  • Fix wrong initialization of different modes and stacks. (evb)
  • NANDFlash tool for building OMAP3 FLASH Images for DevBoard and QEMU-Maemo. (evb)
  • ARM LLB for OMAP3/Beagle (test with QEMU-Maemo) and Versatile (test with QEMU). (evb)
  • Boots to blue screen with white text to indicate checkpoint. (evb)
  • Enable serial output. (evb)
  • Forgot to change SARCH back to Versatile. (evb)
  • Plugin support for booting FreeLDR when used as initrd on QEMU command-line. (evb)
  • Change ARM loading architecture to match EFI/Firmware model. LLB provides "firmware" routines, FreeLDR obtains "firmware" routines from the ARM block, and sets them as the Machine VTable. All board-specific FreeLDR code gone now. (evb)
  • Start work on UI. Serial output is now only for debugging, not usual console. (evb)
  • Need PL045 Keyboard code to handle KbHit/GetCh. (evb)
  • Have PL011 code ready for MachVideo routines, coming soon... (evb)
  • Start stub of environment functions. (evb)
  • Add config interface start (PciReadWriteConfigSpace, PciReadSlotConfig) (evb)
  • Add PDO_EXTENSION structure and PCI_FUNCTION_RESOURCES, now delete #if0 in old code since PDO_EXTENSION is now exist defintion (evb)
  • Add ID Class/Subclass to description functions (PciGetDeviceDescriptionMessage, PciGetDescriptionMessage), use from sir_richard (evb)
  • New debug: PciDebugDumpCommonConfig (evb)
  • Implement IRP_MN_QUERY_DEVICE_RELATIONS with PciFdoIrpQueryDeviceRelations and PciQueryDeviceRelations (evb)
  • Begin PciScanBus, now just dump all found device with no more work (0 QDR return) (evb)
  • Support PCI device resource dicsovery for limit and current now, so bridge + device BAR functionning (evb)
  • PciScanBus second pass enabled: PciProcessBus, most stubs now until VGA/ISA system tested (evb)
  • PciClassifyDeviceType implement as helper function (evb)
  • PCI Enumeration 100% complete! (evb)
  • Add new unified VGA/VBE miniport driver. Based on NT4 DDK Cirrus Miniport Driver Sample with my modifications (marked with // eVb) to change Cirrus parts to VGA parts if needed. Also add VBE suppor which is not in Cirrus driver, but exists in Windows VGA miniport. (evb)
  • Work-in-progress, can boot to GUI with VMWare, but banked modes not yet supported, no VDM, no Mode-X, etc... (evb)
  • Thanks to sir_richard for help with headers, comments and other English stuff. (evb)
  • Driver is only built, not yet used. (evb)
  • NOTE: Some parts of BootVid seem to use functions copied from this sample (VgaInterpretCmdStream) but under "GPL", and also buggy (Chain4 Mode test will not work on most cards and VgaIsPresent == FALSE). Someone should fix. (evb)
  • New Framebuffer (Linear) Display Driver to support new unified VGA/VBE miniport. Based on NT4 DDK Sample, with modifications by me (marked with // eVb) to support new functionality needed for 2003-era driver. (evb)
  • Also used Virtual Box Display Driver as sample, which is based on "GPL" Windows 2003 DDK sample driver. Could not use 2003 DDK sample directly because of licensing issues, and feel unsafe about VirtualBox "GPL" driver that says "PATENTED AND ONLY FOR USE IN MICROSOFT PRODUCTS". (evb)
  • Note that old driver was based off DDK sample too, but with variables renamed (some comments identical!) and code reformatted, then marked as "GPL". This is not very good way to share/use code... one day someone can teach you lesson. (evb)
  • Remove bits saying dithering supported, since code patented and removed (also, ReactOS win32k not support dithering calls!). (evb)
  • Enable non-OOB mode for Versatile. (evb)
  • Enable RAMDISK support in LLB. (evb)
  • Build commandline for OS Loader (FreeLDR). (evb)
  • Now ready to start loading freeldr.ini (evb)
  • Add support for ram disk offset (.IMG file is a RAW image, partition starts later...) (evb)
  • Fix ram disk support in FreeLDR, ARC changes had broken support for booting FreeLDR (not just the Windows) from a ram disk. ARM port now initializes ramdisk as an FS device. (evb)
  • Fix hardcoded DISKREADBUFFER and FILESYSBUFFER values. On ARM these will be dynamically selected for each board (need to improve this through LLB). (evb)
  • Now FreeLDR.ini is read, and crash happens because UI routines are all NULL. (evb)
  • Add stubs for video mach functions and update minor to 1.3. (evb)
  • Implement some simple video routines. (evb)
  • Fix usable RAM not to include loader code and ram disk (up to 32MB). (evb)
  • Add GetTime stub, bump version to 1.4. (evb)
  • Implement function for drawing character on the screen when request come from firmware. (evb)
  • Tui.c assumes all screens are x86 VGA Consoles with 8-bit character and 8-bit attribute. On ARM, call Mach function to draw character instead of drawing into ScreenMemory off-screen buffer. (evb)
  • FreeLDR menu now appears, need GetTime for counter. (evb)
  • Add PL031 RTC code for Versatile. (evb)
  • Add RTC time to TimeInfo convert. (evb)
  • Implement FirmWare GetTime function. Countdown in FreeLDR now working. (evb)
  • Switch to bootvid 8x13 font (closer to PC/VGA experience). (evb)
  • Fix LlbFwVideoGetDisplaySize return characters X/Y, not pixels. Now "Press F8 for advanced menu" shows". (evb)
  • Refactor keyboard support to match serial. Now reading a key and waiting for a key are two things. (evb)
  • Implement KbHit Firmware routine. (evb)
  • It is now possible to interact with FreeLDR using the keyboard. (evb)
  • Video Miniport driver not use ntddk.h, but miniport.h. But, Reactos miniport.h is empty! Add some definitions to miniport.h to get simple drivers to compile, so now can remove ntddk.h from VGA/VBE/XBOX miniports! (evb)
  • Video Port driver should not use either, but too many changes required. So, define __BROKEN__ to allow ntddk + miniport together. (evb)
  • Add VideoPortIsNoVesa API definition. Not implemented in ReactOS, used to disable VESA in F8 "Standard VGA Mode". Should implement for VGA-only support on broken VESA machine, and for test. (evb)
  • Fix includes in richard's driver. (evb)
  • Fix wrong calling to VideoPortCreateEvent. He got parameters all mixed up~ (evb)
  • Begin implement full PCI Bus Driver. code by me comments by sir_richard to avoid Engrish (evb)
  • DriverEntry full 100% implemented, ACPI WatchDog detect, PCI IRQ Routing detect, PCI errata/hackflag detect (PciGetDebugPorts not support, need PCI Debug Device to test) (evb)
  • Native (S)ATA, PCI BIOS Resource Lock, System Errata/Hackflag also is detect (evb)
  • HAL Hoooking enabled, callbacks stub (evb)
  • Stub PnP Interfaces: PciAddDevice, PciDriverUnload, PciDispatchIrp (evb)
  • PCI utility routines: PciUnicodeStringStrStr, PciStringToUSHORT, PciIsSuiteVersion, PciIsDatacenter, PciOpenKey, PciGetRegistryValue, PciBuildDefaultExclusionList done (evb)
  • PCI Verifier Support for future: PciVerifierInit/PciVerifierProfileChangeCallback (stub) (evb)
  • Thank you for much patience~ This 1200 first codes, have 12000 codes more to come!~~ (evb)
  • More implement of PciScanBus, now read hack flags from table (PciGetHAckFlags), and check for critical device (PciIsCriticalDeviceClass) and VGA device on PCI bridge (evb)
  • Do check for skipping some function (double decker ghost, Intel Alder SMP Pentium Pro machine, hacl flag, more), PciSkipThisfunction (evb)
  • Do check for PDO already exist for function (PciFindPdoByFunction) (evb)
  • Finish impement PciFindParentPciFdoExtension (evb)
  • Implement PciPdoCreate and add all PDO IRP stub functions, set dispatch table for major/minor command, add PciIrpInvalidDeviceRequest (evb)
  • Fix bug in PciFindPdoByFunction should check device slot info too (evb)
  • Add more enumeration codes in PciScanBus to create PDO (evb)
  • PCI_HACK_FAKE_CLASS_CODE support (evb)
  • Build PDO extension, set ready for PnP manger, now 41 QDR returned (evb)
  • Add PCI/CardBus Bridge to list (evb)
  • Detect bridge/IDE controller with no power down support, hack for Intel 82375 PCI to EISA bridge for Alpha thanks to sir_richard (evb)
  • QUERY_ID is sent to PDOs now! (evb)
  • More PciScanBus codes now to check saved PCI BIOS config header saved in registry (PciGetBiosConfig, PciSaveBiosConfig) and support load save compare (PcipIsSameDevice) if change in interrupt line (evb)
  • Also for interrupt line use HAL to get parent bus IRQ# if device connected (PciGetAdjustedInterruptLine) (evb)
  • For PCI debug HW PciIsDeviceOnDebugPath to detect, but have not real machine with this kind of device to test (evb)
  • Support PCI_HACK_NO_SUBSYSTEM and PCI_HACK_NO_SUBSYSTEM/REVISION_AFTER_D3 for when compareing (evb)
  • New config function required PciWriteDeviceConfig to update IRQ line from BIOS registry data (evb)
  • Save initial, current Command enables to PDO extension, interrupt data too (evb)
  • Can't sleep so write more source codes! add scan bus functions to get power caps (PciGetEnhancedCapabilities) and AGP caps, use PciReadDeviceCapability util function, now can get wake levels, PCI power state plus target AGP ID. Now can find PCI Device that can't sleep neither! Ha-ha! (evb)
  • Add scan bus function to set power for PCI, for now to power up (PciSetPowerManagedDevicePowerState), with support for device that is critical/broken (PciCanDisableDecodes) (evb)
  • Check spec-correct with PciStallForPowerChange after define PciPowerDelayTable for D0<->D3 crossmatrix spec timings (add PciReadDeviceConfig for support) (evb)
  • If bad spec timing use PCI verifier support (PciVerifierRetrieveFailureData) + STATUS_DEVICE_PROTOCOL_ERROR (evb)
  • Add PciVerifierFailureTable with all failure type (evb)
  • Almost the time for resource discovery of BARs! (evb)
  • Added support IOCTRL_QUERY_PUBLIC_ACCESS_RANGES, IOCTRL_SET_PALETTE_REGISTERS, IOCTRL_QUERY_CURRENT_MODE, used by test Standard VGA-only display driver. (evb)
  • Code from NT4 DDK Cirrus miniport with some mods by me. (evb)
  • Missing PCI_BUS_DRIVER_INTERNAL added to bugcodes. Thx for sir_richard to show me how to add. (evb)
  • Implement Root Bus FDO AddDevice codes, get boot config, connect to HAL or ACPI config handlers (PciQueryForPciBusInterface, PciGetConfigHandlers), read BUS FDO hack flag, get _HPP HotPlug PCI ACPI data and initialize arbiter support. (evb)
  • PciGetHotPlugParameters work but no PCI HotPlug support on my machines, so cannot test ACPI data, that part stub now (evb)
  • Add PciFdoDispatchTable, PciFdoDispatchPnpTable, PciFdoDispatchPowerTable but all stub to PciIrpNotSupported however set correct IRP Dispatch Style for the IRPS (evb)
  • Arbiter support in PciInitializeARbiters done, but PciInterfaces array is NULL (stub) at moment (evb)
  • Add PCI_SIGNATURE, PCI_STATE, PCI_DISAPTCH_STYLE type, add PciInitializeState to begin the state support (evb)
  • PCI utility functions added: PciFindParentPciFdoExtension, PciInsertEntryAtTail, PciInsertEntryAtHead, PcipLinkSecondaryExtension, PciGetDeviceProperty, PciSendIoctl (evb)
  • Need sir_richard to add arbiter.h header to define ARBITER_INSTANCE for finish support (evb)
  • This 1000 more codes done now~ (evb)
  • Implemented IRP dispatch to work in new PCI driver (PciDispatchIrp), fill out FDO IRP handlers which all stubs now, make up/down-call work (PciPassIrpFromFdoToPdo, PciPassDownIrp) (evb)
  • Added the helper debug routines (evb)
  • PCI driver receive IRP_QUERY_INTERFACE now and hit stub (evb)
  • Fix for code to handle IRP dispatching when unrecognized IRP (Thanks you sir_richard) (evb)
  • Add FDO IRP_MN_QUERY_INTERFACE support (it calls PciQueryInterface) (evb)
  • Add all PCI interface descriptor: PciLocationInterface (GUID_PNP_LOCATION_INTERFACE), PciPmeInterface (GUID_PCI_PME_INTERFACE), PciCardbusPrivateInterface (GUID_PCI_CARDBUS_INTERFACE_PRIVATE), PciLegacyDeviceDetectionInterface (GUID_LEGACY_DEVICE_DETECTION_STANDARD), AgpTargetInterface (GUID_AGP_TARGET_BUS_INTERFACE_STANDARD), PciRoutingInterface (GUID_INT_ROUTE_INTERFACE_STANDARD), BusHandlerInterface (GUID_BUS_INTERFACE_STANDARD) and stub initializer and constructor. (evb)
  • Add missing devhere.c interface file (evb)
  • Add all PCI arbiter descritptor: ArbiterInterfaceBusNumber, ArbiterInterfaceMemory, ArbiterInterfaceIo. Write constructor stub but not handled ArbitersInitialized == TRUE (evb)
  • Also add last-resort PCI interface: TranslatorInterfaceInterrupt (GUID_TRANSLATOR_INTERFACE_STANDARD) and part implement tranirq_Constructor (evb)
  • Add PciQueryInterface to find correct FDO/PDO/ROOT interface for a request and call interface constructor (evb)
  • Fix interface signatures, fix interface constructor type and PCI_INTERFACE, add interface flags (Thanks sir_richard) (evb)
  • Fix Aribtriter code (Thanks sir_richard) (evb)
  • Now another 1200 codes added, soon time for enumeration code! (evb)
  • IRP_MN_START_DEVICE implement for ROOT FDO (PciFdoStartDevice) (evb)
  • PciInitializeArbiterRanges implement to scan arbiter not yet construct since Arb library missing (evb)
  • Add PCI state machine (PciBeginStateTransition, PciCancelStateTransition, PciCommitStateTransition) andtransition array (PnpStateTransitionArray) to check if valid (evb)
  • Now IRP_MN_QUERY_DEVICE_RELATIONS sent to ROOT FDO means time to enumerate bus! (evb)
  • Add all pci bridge control function (PciBridgeIoBase, PciBridgeIoLimit, PciBridgeMemoryBase, PciBridgeMemoryLimit, PciBridgePrefetchMemoryBase, PciBridgePrefetchMemoryLimit, PciBridgeMemoryWorstCasealignment, PciBridgeIsPositiveDecode, PciBridgeIsSubtractiveDecode) (evb)
  • More support ICH0/1/2/3/4 hub (evb)
  • Add all PCI2PCI bridge limit/current resource codes (PPBridge_*), now is BAR setup okay, and Device_* must be implement (evb)
  • Support ISA+VGA legacy decode, 20+64-bit decode, ROM BAR, prefetch BAR (evb)
  • Add support for PnP IRP to PDO: IRP_MN_QUERY_BUS_INFORMATION (PciQueryBusInformation), IRP_MN_QUERY_ID (PciQueryId), IRP_MN_QUERY_DEVICE_TEXT (PciQueryDeviceText), IRP_MN_QUERY_CAPABILITIES (PciQueryCapabilities), IRP_MN_QUERY_DEVICE_RELATIONS (PciQueryTargetDeviceRelations implement, PciQueryEjectionRelations, stub) (evb)
  • Stub support for PnP IRP to PDO: IRP_MN_QUERY_RESOURCE_REQUIREMENTS (PciQueryRequirements), IRP_MN_QUERY_RESOURCES(PciQueryResources) (evb)
  • Add support for PnP IRP to FDO: IRP_MN_QUERY_CAPABILITIES (handle in PciFdoIrpQueryDeviceCapabilities) (evb)
  • Build device capability UI number (PciDetermineSlotNumber), use PIR$ (seem support broken, need to check loader) or device property for bus not root (evb)
  • Use parent attachee device and this PDO for build device/system wake states, latency, device/system power mappings (evb)
  • PCI-ID manage support: PciInitIdBuffer, PciIdPrintf, PciIdPrintfAppend (evb)
  • Debug helper: PciDebugDumpQueryCapabilities (evb)
  • Thanks richard for advise + beer (evb)
  • PCI-X driver now pass 10000 codes lines! (evb)
  • IRP_MN_QUERY_RESOURCES support for PDO (PciQueryResources, PciAllocateCmResourceList), now remain IRP_MN_QUERY_RESOURCE_REQUIREMENTS to last device stack interogration from PNPMGR (evb)
  • IRP_MN_QUERY_RESOURCE_REQUIREMENTS half support now, PciQueryRequirements, PciAllocateIoRequrementsList, full implement, but PciBuildRequirementsList return 0 always for now (evb)
  • Debug helpers: PciDebugPrintIoResReqList, PciDebugPrintIoResource, PciDebugCmResourceTypeToText (evb)
  • Now hit assert Assertion '(DeviceNode->Flags & DNF_ADDED)' failed at ntoskrnl/io/pnpmgr/pnpmgr.c line 201, too night to debug, maybe tomorow (evb)
  • Change NANDFlash again for Versatile support. Now the LLB and OS Loader are created in one binary blob (loaded with -kernel), while the RAMDISK is loaded with -initrd. (evb)
  • Now the only complication is that RAMDISK loaded at 0x80000 which will conflict with the 0x800000 range where kernel loads. Could move RAMDISK in code through LLB, but that would be very expensive (shift by 16MB up). Instead, NANDflash creates ramdisk image starting at offset 16MB. This way, emulator thinks it's loading at 0x80000, but actually loads at 0x1800000. Would be better if QEMU not hardcoded the INITRD_LOAD_ADDR... (evb)
  • Define memory map structure for Versatile board/QEMU and send to OS Loader. (evb)
  • Many hack removed. (evb)
  • Better efficency use of memory layout. (evb)
  • Region at 0x800000 now available for FreeLDR use to load kernel files. (evb)
  • Implement simple ArmDiskNormalizeSystemPath so boot is allowed to happen. (evb)
  • Use better stack address as defined in memory map. (evb)
  • Now FreeLDR loads all files correctly from disk and is ready to jump to kernel. ARMv5 paging code must be rewritten before that can happen. (evb)
  • Reading MBR from RAMDISK does not work since RAMDISK starts at BootSector (rdoffset) and disk sector functions are NULL. Build bogus signature/checksum for now, unless MBR really needed later. (evb)
  • Now FreeLDR crashes no more and arrives at FrLdrStartup to boot kernel and setup paging. (evb)
  • Make boot.s just stub to force load address, since ARM LLB already does setup. Will get rid of later. (evb)
  • Get rid of all .pagedata stuff from boot.s. Now define simpler static page tables. Will probably get rid of later. (evb)
  • Fix memory map to include framebuffer, had forgotten about it. Moved framebuffer to the nearest hole found. It happens to be 0xA0000, nice coincidence (matches x86!). (evb)
  • Switch to nicer 8x16 font instead of 8x13. Now FreeLDR UI looks 99% identical to real PC. (evb)
  • Start writing new ARMv6 Paging Code. Enable extended page tables and access bit, redefine structures, only for OS Loader for now. (evb)
  • Identity map low-memory 1MB and MMIO 2MB space at 0x10000000 for Versatile. Need to make this board-specific later. (evb)
  • Need to investigate sharing code with WinLDR. (evb)
  • MMU enabled and Printf/LCD output works!. (evb)
  • Fix text output (evb)
  • Allow for more than just one parameter on the bootROM command line (sepearate with commas). (evb)
  • Rdoffset is not hardcoded anymore, but passed on cmdline. Allows using images with different partition offsets. (evb)
  • Last code in PciScanBus: call to PciGetfunctionLimits now implement (call PcipGetfunctionLimits if PciSkipThisFunction say no) (evb)
  • PcipGetfunctionLimits support PCI_HACK_CRITICAL_DEVICE and PCI Debug Device by use IPI code (PciExecuteCriticalSystemRoutine implement) (evb)
  • PciConfigurators table define for Device, PCI-to-PCI (PP) Bridge plus CardBus Bridge but all configurator stub now (evb)
  • Configurator chain: Init (Massage) -> [WRITE INIT] (PciWriteLimitsAndRestoreCurrent) -> Restore -> SaveLimit -> SaveCurrent (evb)
  • Support ExpectedWritebackFailure (evb)
  • Fix bug in PciApplyHacks (found by me testing sir_richard code) (evb)
  • Implement logical keyboard interface. Converts scan code to ASCII codes (just ok). (evb)
  • Implement firmware ConsGetCh based on keyboard interface. (evb)
  • Implement KMI (Keyboard & Mouse Interface) PL050 driver for Versatile to init PS/2 and read keyboard scancodes. Can now press ENTER/whatever when FreeLDR gives "Cannot find freeldr.ini" error. (evb)
  • Support ATAG Linux/ARMBoot architecture defined-structures. These are used by all ARMBoot-compatible loaders (QEmu, U-boot, etc). (evb)
  • Read RAMDisk, RAM, Command Line from ATAGs (use -append boot-device=RAMDISK). (evb)
  • Make environment-get function read command-line. (evb)
  • Allocate RAM memory structure portably. (evb)
  • Validate board info on boot. (evb)
  • shellapi.h (Timo Kreuzer)
    • fix inclusion of pshpack / poppack (global and not for _WIN64)
  • DHCPCSVC (Cameron Gutman)
    • Move code from dhcp to dhcpcsvc
    • Export ServiceMain from dhcpcsvc
    • Now our DHCP service is compatible with the Windows architecture
    • Remove dhcp from build
  • INFLIB (Timo Kreuzer)
    • Merge r36443 from amd64 branch:
    • Remove references to Infp Functions that collide with inflib names, call the actual functions instead of making small functions that shared the same parameters and just called into inflib anyway, with no changes whatsoever.
  • NTOSKRNL / RTL (Eric Kohl)
    • Implement BreakOnTermination case for NtQueryInformationProcess and NtSetInformationProcess.
    • Implement RtlSetProcessIsCritical.
  • rpcndr.h (Timo Kreuzer)
    • Add a tag to NDR_SCONTEXT struct. MS headers don't have it, but gcc 4.5.x requires it, because without the tag, the struct would be from an unnamed namespace and can't be shared by different compilation units in C++.
  • sdkddkver.h (Timo Kreuzer)
    • Add UL suffix to some constants.
  • wine/commctrl.h (Timo Kreuzer)
    • Don't use #include_next, instead imclude psdk/commctrl.h
  • crt (Timo Kreuzer)
    • _mingw.h: Help compilation with clang. Patch by Amine Khaldi.
    • stdlib.h: Improve definition of __mb_cur_max and related, properly handle _M_CEE_PURE
  • DDK (Timo Kreuzer)
    • Add a number of PCI related types to ntddk.h
    • Revert r47553 because testbot doesn't like it
  • WINEMP§.ACM (Timo Kreuzer)
    • Define WIN32 to fix compilation for anything else than x86
  • NDK (Timo Kreuzer)
    • Add missing TEB member for Vista
  • WIN32K, USER32 (Timo Kreuzer; #2900)
    • Convert the window text string from UNICODE_STRING to LARGE_STRING and fix NtUserCreateWindowEx parameters. We currently still pass UNICODE only LARGE_STRINGs, as the rest of the code in win32k expects this.
    • Fixes display of large text windows, like the winzip license.
  • KERNEL32, WIN32CSR (Jeffrey Morlan)
    • Implement SetConsoleScreenBufferSize. FAR Manager now works again.
    • commit file missing from r47165
    • Implement the CREATE_NO_WINDOW flag which creates a console with an invisible window.
    • More fixes for console winetest
    • BasepInitConsole: Initialize console input EXE name
    • Make Get/SetConsoleTitle more compatible with windows; in particular, transfer title via capture buffer to allow for longer titles.
    • Tighten up capture buffer validation in win32csr
    • Implement console history (note: not too useful yet without any way to recall it)
    • Implement APIs GetConsoleCommandHistoryLength, GetConsoleCommandHistory, ExpungeConsoleCommandHistory, SetConsoleNumberOfCommands, GetConsoleHistoryInfo, SetConsoleHistoryInfo.
    • Remove stub of obsolete function SetConsoleCommandHistoryMode, which no longer exists in Windows.
    • add missing file
    • Implement ReadConsoleW's CONSOLE_READCONSOLE_CONTROL structure
    • Make pressing Insert during line input work
    • Move code for managing console handles from csrsrv to win32csr, where the rest of the console code is. No changes in functionality intended.
    • Unify the csrsrv->win32csr callbacks (now numbering 4) into one table to avoid excessive code duplication.
  • ntoskrnl\mm (Michael Martin)
    • Fix a continuous loop bug in MiWriteProtectSystemImage.
  • REACTOS.DFF (Cameron Gutman)
    • Add kmtest.sys and kmtestassist.sys to bootcd (optional)
    • Remove isapnp
  • BATTERY.INF (Cameron Gutman)
    • Added battery.inf to install battery devices
    • Remove the incorrect stub from BatteryClassSystemControl
  • TXTSETUP.SIF (Cameron Gutman)
    • Add PnP information for isapnp
    • Disable building dvb stack untill ks has the required functionality
  • WDMAUD.DRV (Johannes Anderwald)
    • Fix compilation when using USE_MMIXER_LIB
    • Fix compilation when using USE_MMIXER_LIB #2
    • Fix initialization of mmixer library
  • ntstrsafe.h] (Timo Kreuzer)
  • Fix a number of parameter types (LPSTR/LPCSTR instead of PCHAR, PCCHAR) This is not the same, PCCHAR is a char * not a const char * (Timo Kreuzer)
  • CRT (Timo Kreuzer)
    • add _mingw_mac.h from ming-w64 and include it into _mingw.h
    • Update _CRTIMP definition
    • Fix definition of _wctype
    • onexit is not _CRTIMP
  • MINGW (Timo Kreuzer)
    • Update mingw library to mingw-w64 trunk (mingw-w64-src_20100325)
  • time.h (Timo Kreuzer)
    • Add missing asctime_s and localtime_s, don't include time_s.h anymore
  • setjmp.h (Timo Kreuzer)
    • Add mingw_getsp as inline function
  • reactos.dff (Timo Kreuzer)
    • make explorer.exe and ntvdm optional
  • dbghelp.h, imagehlp.h (Timo Kreuzer)
    • fix LOADED_IMAGE, UpdateDebugInfoFile, UpdateDebugInfoFileEx, ReBaseImage
  • WIN32K, WIN32CSR (Timo Kreuzer)
    • Get rid of FASTCALL specifier for static functions and functions with no parameters.
  • GDI32 (Timo Kreuzer)
    • GetTextExtentExPointI and GetTextExtentPointI take an array of glyph indices, not characters. Pass a flag GTEF_INDICES (This is a reactos specific definition and not exactly like on Windows XP, but the real names/values are undocumented and this is the easiest way.) to NtGdiGetTextExtent/NtGdiGetTextExtentExW and handle this flag in TextIntGetTextExtentPoint to account for this.
    • Fixes bug 3481
  • MSAFD, PSDK (Cameron Gutman)
    • Merge part of r45435
    • Merge r48011 from aicom-network-branch
  • winnt.h (Timo Kreuzer)
    • Remove definition of UNW_FLAG* constants. They don't belong here.
  • WDMAUD.DRV (Johannes Anderwald)
    • Apply changes from mmixer library
    • Tested in Vbox with Winamp / ReactOS mplay32
  • MMIXER, WDMAUD_KERNEL (Johannes Anderwald)
    • Implement retrieving device path
    • Implement DllRegisterServer, DllUnregisterServer for those components
    • Add msdvbnp, msvidctl to build
    • Add msdvbnp, bdaplgin, msvidctl to bootcd
  • KSPROXY, MSDVBNP (Johannes Anderwald)
  • Remove remaining DebugBreak
  • Add debug traces
  • WINGDI.H (Timo Kreuzer)
    • Add missing GetCharWidthI, GetTextExtentExPointI, GetTextExtentPointI
  • tchar.h (Timo Kreuzer)
    • enable _tcsnlen definition
  • WIN32K, USER32 (Jerome Gardou)
  • DESK.CPL (Katayama; #5552)
    • Fix client font in the advanced appearance dialog.
  • winnt.h (Timo Kreuzer)
    • Fix definition of KNONVOLATILE_CONTEXT_POINTERS for amd64
    • Register DLLs when ReactOS is installed
  • intrin_x86.h (Timo Kreuzer)
    • cast return value of __sync_val_compare_and_swap to make clang happy
    • add __cdecl to a number of intrinsics to make them (hopefully) compatible with crt header declarations.
  • WDMAUD.DRV (Johannes Anderwald)
    • Cleanup code
    • Fix a bug which made the caller assume that a wave handle has already been open.
    • define a macro which appends a postfix depending on wether USE_MMIXER_LIB has been defined
  • DESK.CPL (Aleksey Bragin; #5620)
    • Katayama Hirofumi <>
    • Renamed GLOBAL_DATA structures to DATA.
    • Added real GLOBAL_DATA in background.c, that manages the background color.
    • Resolved conflict of background colors in background.c and appearance.c.
    • Fixed drawing the menu in draw.c.


  • Fix pointer arithmetics in the gdi batch code (&pTeb->GdiTebBatch.Buffer is a PULONG, but pTeb->GdiTebBatch.Offset is a byte offset) (Timo Kreuzer)
  • To prevent this from happening again, refactor the code to use one common routine GdiAllocBatchCommand to do most of the stuff. (Timo Kreuzer)
  • Reenable gdi batch for SelectObject (Timo Kreuzer)
  • Fixes gdi handle leak, causes some drawing problems in Acrobat reader, but those are less critical and I'll investigate those. (Timo Kreuzer)



  • Implement LookupPrivilegeValueW and LsaLookupPrivilegeValue. (Eric Kohl)
  • Move lookup code from LookupPrivilegeValueW to LsarLookupPrivilegeValue. (Eric Kohl)
  • Implement LookupPrivilegeNameW and LsaLookupPrivilegeName. (Eric Kohl)
  • Move lookup code from LookupPrivilegeNameW and LsarLookupPrivilegeValue into a separate file. (Eric Kohl)
  • Katayama Hirofumi MZ <katayama DOT hirofumi DOT mz AT gmail DOT com> (Matthias Kupfer; #5487)
  • Preperation of quick preview für themes. (Matthias Kupfer; #5487)
  • for details. (Matthias Kupfer; #5487)
  • unix has no io.h. (Sylvain Petreolle)
  • move its include to a _WIN32 block. (Sylvain Petreolle)
  • Export LsaLookupPrivilegeName. (Eric Kohl)
  • Move mockup code from advapi32 to lsasrv (LsaLookupSids --> LsarLookupSids). (Eric Kohl)
  • Make LsaLookupSids call the server function LsarLookupSids. (Eric Kohl)
  • LookupAccountNameW: Call LsaLookupNames instead of returning a dummy name. (Eric Kohl)
  • Implement LsaLookupNames. Calls LsarLookupNames. (Eric Kohl)
  • LsarLookupNames: return dummy names. (Eric Kohl)
  • Merge r45430 from amd64-bringup : Add #pragma intrinsic for msvc intrinsics. (Amine Khaldi)
  • Fix _InterlockedExchangeAdd16, _InterlockedCompareExchangePointer and _InterlockedExchangePointer intrinsics. (Amine Khaldi)


  • Use the same KPCR structure on ARM as on x86. (sir_richard)
  • Use the same addresses for KPCR and KUSER_SHARED_DATA on ARM as on x86. On ARM however, since there are no "segments", the KPCR is also mapped in user-mode, read-only, to have a static structure that can point to the current TEB. (sir_richard)


  • TODO: Add same checks to IShellLinkW interface and fix IShellLink::GetPath / SetPath / SetIdList / GetIdList logic. (Amine Khaldi)


  • Update expand utility to Wine-1.1.37. Last update happened 7 years ago and since then it was translated into 20 languages. Sorry to all the translators but the preference is given to a working untranslated version rather than a non-working localized one. (Aleksey Bragin; #4637)
  • Update README.WINE. (Aleksey Bragin)


  • Add -$(ARCH) to non-x86 bootcd and livecd image names. (Timo Kreuzer)



  • Make cmlib, newinflib and mkhive use the Wine unicode lib instead of the host_wcsfuncs lib. (Eric Kohl)
  • Only the header file include/host/wcsfuncs.h is still used to map str*W functions to wcs* functions in WIN32 builds. (Eric Kohl)
  • Remove obsolete rtl functions. (Eric Kohl)
  • Make mkhive use the newinflib instead of inflib. (Eric Kohl)
  • Remove duplicate line. WRC complains about the control id already being in use. (Eric Kohl)
  • Delete ANSI version. (Eric Kohl)
  • Convert hivedef_i386.inf to Unicode. (Eric Kohl)
  • Add Strings-Sections for several languages and add TEMP_DIR string. (Eric Kohl)
  • Please translate the TEMP_DIR string as this is the sollution for bug #2482. (Eric Kohl)


  • Implement Windows' Cp (ComPort) library. See Notes in C file. Not yet used. Based on MS Whitepaper: Building Hardware and Firmware to Complement Microsoft Windows Headless Operation. (Anton)
  • Fix typos in the description of serial port defines. (Aleksey Bragin)


  • Add missing ntstatus.h inclusion. (Amine Khaldi)
  • Group some related definitions. (Amine Khaldi)
  • Add several missing ones. (Amine Khaldi)
  • update README.WINE (Jérôme Gardou)
  • Group some related definitions. (Amine Khaldi)
  • Remove some duplicated NDIS_MINIPORT_MAJOR_VERSION/NDIS_MINIPORT_MINOR_VERSION combinations. (Amine Khaldi)
  • Add some missing NDIS_LEGACY_DRIVER guards. (Amine Khaldi)
  • Add missing NDIS_WAN_GET_STATS, NdisAllocateGenericObject, NdisFreeGenericObject, fPACKET_WRAPPER_RESERVED and NDIS_FLAGS_* definitions. (Amine Khaldi)
  • Some minor formatting. (Amine Khaldi)


  • Use PCI_COMMON_HEADER_LAYOUT for C, too, place it where it belongs (Timo Kreuzer)
  • Don't auto define NO_LEGACY_DRIVERS on reactos x64 builds. (Timo Kreuzer)


  • Display a message box if the explorer registry key cannot be loaded, (Katayama; #5407)




  • MP HAL should have HalpDefaultInterruptAffinity too. (sir_richard)


  • Fix type of PRTL_HEAP_PARAMETERS in ifssupp.h. Will be required soon (Hervé Poussineau)
  • Reintegrate header-work branch. Thanks to hours of boring work on the ddk headers (Most of it done by Amine Khaldi), we have now a decent set, which is still incomplete but already relatively close to latest WDK. (Timo Kreuzer)
  • Remove BOM from UTF-8 rc files. (Sylvain Petreolle)
  • asm.h: fix definition of HEX macro (Giannis Adamopoulos)



  • Update Wine-specific headers to Wine-1.3. (Aleksey Bragin)
  • Remove unneeded 16 bit header, and add a bit of stuff into another legacy header. (Aleksey Bragin)
  • Indicate in config.h that there is a freetype library present. (Aleksey Bragin)



  • Fix a check when queuing the mouse packet. Check that the buffer size (MouseInBuffer) is not greater or equal to MouseDataQueueSize. Fixes a NonPagedPool corruption that occurs when the mouse is moved before the desktop window is up and running. (Michael Martin)




  • Register new Win32 threads with CSRSS. Add a bunch of lookup, creation, allocation, hashing and CSR thread management routines from the unused CSRSRV in trunk. (sir_richard)



  • Fix buffer size calculation for the parser. (me)
  • Do not try to execute an empty registry instruction (me)
  • Patches by Roel Messiant. (me)
  • Stop the parser at the first NULL character. (me)
  • Hardcode GeckoCabDir to C:\ReactOS. (Sylvain Petreolle)
  • the mshtml installer now wants a REG_SZ string for it, which excludes using %SystemRoot%. (Sylvain Petreolle)
  • Fixes bootcdregtest. (Sylvain Petreolle)


  • Add new netevent.dll. It is a resource dll that will be used by the event log viewer. (Eric Kohl)


  • Add a UNICODE-aware version of the inflib library. (Eric Kohl)
  • It is not used by other components yet but usetup and mkhive will use it in the future. (Eric Kohl)
  • Use LANGID instead of LCID. (Eric Kohl)
  • Move LANGID and language macros into the host typedefs header. (Eric Kohl)
  • Remove dead code. (Eric Kohl)
  • Change Unicode string functions from wcs* to str*W because glibc (Linux build) provides the wcs* functions but they use a wchar_t size of 32 bits instead of the required 16 bits. (Eric Kohl)
  • Add a str*W to wcs* wrapper (infrosrtl.c) in order to use the wcs* function for the WIN32 build. (Eric Kohl)
  • Add required str*W functions to the host library. (Eric Kohl)
  • Fix an off-by-one bug, which lead to the crash of mkhive after parsing ~3 files on Windows or ~5 files on Linux (Gregor Schneider; #5338)
  • PINT -> INT* (Timo Kreuzer)


  • Protect IoMapTransfer from incompatible redefinition. (AmineKhaldi)


  • Don't use PEB::FastPeb(Un)LockRoutine, these members are deprecated since Windows 2003, use RtlEnter/LeaveCriticalSection instead. (Timo Kreuzer)
  • 44523 (tkreuzer) (Timo Kreuzer)


  • Use a preprocessor definition for FSRTL_COMMON_FCB_HEADER instead of using an ms extension, that wouldn't work for ISO C (Timo Kreuzer)


  • Implement GUI thread promotion during the first GUI system call in C. This is tricky due to EBP, and actually requires some tiny inline ASM magic to make it work right. (sir_richard)
  • Implement SYSENTER system calls in C as well. (sir_richard)
  • Make KiSystemStartup the real C entrypoint of the kernel, and move the "Am I being booted by FreeLDR" logic inside it -- it will then call KiRosPrepareForSystemStartup as earlier. (sir_richard)
  • Move the Double Fault and Boot Stack declaration in C code, with the proper alignment attribute. (sir_richard)
  • Although the concern that KiSystemStartup cannot be 100% C since it modifies ESP is real (Thomas' original fix of Alex's code), we don't need that much of it in assembly. Instead, write a simple trampoline (KiSwitchToBootStack) inline which switches stacks and jumps to a second-stage C function. (sir_richard)
  • Completely remove boot.S as it isn't needed anymore, ReactOS startup is back to being (nearly) 100% C. (sir_richard)
  • Workaround for GCC 4.4.x bug reported by Dmitry. (sir_richard)
  • Add dclevel flags. (James Tabor)
  • Implement KiSwapProcess in C. (sir_richard)
  • Implement KiIsNpxPresent and KiIsNpxErrataPresent in C. It's much clearer what these are doing now. (sir_richard)
  • Implement KiFlushNPXState and fix some bugs that were present in the ASM version, such as a wrong NPX state check. (sir_richard)
  • Implement working intrinsics for fxrstor, fxsave, fnsave and enable them for flushing. We'll update the FPU trap code to use these later. (sir_richard)
  • KiDispatchInterrupt crushes EBX, so maybe it should preserve it first? This only worked because KiDispatchInterrupt was only called by ASM code that already was magically aware of this fact, and preserved (or didn't use) EBX before making the call. Yuck! (sir_richard)
  • Export the C KiEoiHelper alongside the ASM Ke386EoiHelper. Yes, this is a "ReactOS-only" export, but really this interface is reserved for the HAL, and as long as we keep Ke386EoiHelper, the NT HAL should still work. (sir_richard)
  • Need to revisit/finalize this decision and whether or not we can emulate the C-interface with Ke386EoiHelper somehow (reliably). (sir_richard)
  • Remove duplicate definitions (now in time.c). (Dmitry Gorbachev)
  • Do not attempt querying the Registry Primary Handle for the Backing Hive File Size in the case where there is no actual Primary! There was no error checking so nobody noticed this happens -- it also probably resets Cluster to 0 (instead of 1), which can cause corruption in some cases. (sir_richard)
  • Implement 4 lines of support code needed to handle interrupts during V8086 mode, which were lacking since we weren't hitting this case yet. (sir_richard)
  • Note that now the KeUpdateSystemTime interface is not "compatible" with Windows anymore. This does not matter, since the only possible caller of KeUpdateSystemTime is a very specific HAL routine that needs a very specific stack layout to actually work, so the chance of anyone calling this API is absolutely zero (no, not even some experimental driver. It's absolutely impossible). (sir_richard)
  • Turn off debug print outs. (James Tabor)
  • Output PCH, not dependencies. (Dmitry Gorbachev)
  • Rework the trap macros again. This time we needed some added complexity because of the need for runtime patching at boot. We got away with it nicely and basically implement a simple "if" in ASM, which gives us a deterministic set of instructions (vs the compiler). We then patch if if needed (see next bullet). (sir_richard)
  • Support systems without SYSENTER. Nothing was actually disabling the SYSEXIT mechanism recently enabled. Now IRET is always used unless a SYSENTER machine is discovered, in which case the jmp to the IRET code is patched with a jmp to SYSEXIT code. (sir_richard)
  • Enable V8086 Fast-V86 Trap mode for Trap 6 (Invalid Opcode). Because we are now taking zero traps during V8086 mode, we can't do the "BOP lookahead", so the only trap we do get is when we hit the BOP/invalid opcode itself. (sir_richard)
  • Multiple fixes to V8086 opcode emulation code that I noticed while looking through the source. Also multiple fixes to VDM code. (sir_richard)
  • This change will only impact real hardware and VMWare, since QEMU does not support VME. On VMWare, performance increased up to 400% during bootup (80 million cycles instead of 300 million, in one test). (sir_richard)
  • Merge aicom-network-branch (still without the NDIS stuff) (Cameron Gutman)
  • Fixes some nasty bugs and hacks in our TCP implementation (Cameron Gutman)
  • Remove checks for VDM alert during GPF. This is a Windows-specific hack for VDM, which isn't implemented. (sir_richard)
  • Fix L1/L2 cache detection and write out the size and associativity. Now that KeGetCurrentProcessorNumber doesn't think your L2 cache is the number of CPUs, this can be safely done. (sir_richard)
  • The last big step. Now that the HAL is in C, we can handle interrupts in C. Do so using the proposed model that was #if'ed out, but with some improvements. (sir_richard)
  • Fix recursion when sweeping the DCE list. (James Tabor)
  • Another try at the chained interrupt dispatch problem... (sir_richard)
  • Return correct IRQ 0 vector instead of IRQL, when the timer interrupt ends. (sir_richard)
  • Fix KiEnterInterruptFrame. In the case of a V86 trap, the segments were overriden because this wasn't a kernel trap (missing if/elseif). (sir_richard)
  • Simplify KiTrapStub and write registers in order. (sir_richard)
  • Always set correct segments; the if/else branch should decide which segments to save, not whether or not to set the sane ones. Fixes boot on VirtualBox and real hardware. (sir_richard)
  • Try to fix KiEnterInterrupt once and for all. Only set segments for V8086 or user traps. (sir_richard)
  • Rework the way traps with possibly dirty DS/ES segments are handled. The FAST V86 hack is gone. Intead, created a "safe" version of IsTrapV86 and IsTrapUser that does an SS segment dereference (known good). The condition is then based on this, and the segments are saved and loaded safely. Note that for GCC 4.5 the ASM can be improved to directly branch or not to a label, instead of returning a boolean that is then further compared before branching. (sir_richard)
  • This will fix certain exceptions that were seen in KeUpdateSystemTime, and might fix the sneaking HalpTrap0D while not in V86 mode (no promises). (sir_richard)
  • Yet another fix for KiEnterInterruptTrap: Set correct DS/ES before touching the TrapFrame. (sir_richard)
  • Make this operation an inline so any possible future code will not make this mistake twice. (sir_richard)
  • Thanks to Physicus for the bug report. (sir_richard)
  • Combine all exit trap stubs into a single function with flags (same thing we did for the entry stub). Now there are only 15 lines of ASM instead of 60. (sir_richard)
  • Start redefining ARMv6 paging structures. (sir_richard)
  • Add a branch-to-self to start testing kernel code. (sir_richard)
  • Forgot to setup an IRQ stack, the kernel was working by magic since in previous incarnations of the ARM port, 0xFFFFyyyy was mapped, so a stack of 0 worked (going downwards). (sir_richard)
  • Now FreeLDR just calls the KiSystemStartup routine correctly, without any "magic", so fix the code to use a1 instead of a2 (argument 1/2). (sir_richard)
  • Get rid of fixed TLB entries on ARM, I don't think that idea makes sense (unlike IA64 or MIPS where they are lot more flexible), since they only allow 1MB sections, not pages. (sir_richard)
  • Sync up KiDispatchException with x86 code (and going back to C comment formatting). (sir_richard)
  • ARM DDK]: Use the closest possible approximation to the x86 KPCR/KPRCB (in fact, the public KPCR is identical, just the KIPCR is different, internally), instead of a mashup of PPC and MIPS structures. (sir_richard)
  • Update code to use new KPCR structure. (sir_richard)
  • Make all trap code currently spin forever, because it has not been reviewed yet. (sir_richard)
  • Make system startup match x86 code as closely as possible, instead of mixing MIPS/PPC code. Only rip out parts that are obviously x86-specific. Also fix code to use new KPCR definitions. (sir_richard)
  • Implement a DbgPrintEarly function that directly uses KDCOM to print to the serial console, instead of going through the Debug Service Interrupt. (sir_richard)
  • All calls to DbgPrint will go to DbgPrintEarly for now. (sir_richard)
  • More header fixes to match new definitions. (sir_richard)
  • Tabula rasa (clean slate) on the old-MM page routines for ARM. Get rid of all of them for now. (sir_richard)
  • Implement MmInitGlobalKernelPageDirectory as the first ARM page function in the new file. (sir_richard)
  • That's it for the kernel. (sir_richard)
  • Setup the template PTE and PDE used on ARM. (sir_richard)
  • Implement device location information override support and add the location override value for PS/2 mice. PS/2 keyboards be added next. (Eric Kohl)
  • Please translate the location override string. (Eric Kohl)
  • Move HYPER_SPACE to 0xC0500000 since it must be on its own PDE. We need to revisit some FreeLDR Mm decisions later. (sir_richard)
  • Move certain arch-specific definitions from mm.h to the arch-specific mm.h (sir_richard)
  • Allow registry configuration of large kernel stack size, with proper checks. (sir_richard)
  • Actually use calculated kernel stack size value. (sir_richard)
  • Factor out computations of NP sizes and limits into MiComputeNonPagedPoolVa. (sir_richard)
  • Fix NP size/limit calculations to use the amount of FREE RAM, not the amount of INSTALLED RAM. (sir_richard)
  • Use Windows 2003's algorithm for NP size on machines with more than 512MB of FREE RAM. (sir_richard)
  • Partly handle the case of machines with NP over 128MB. (sir_richard)
  • Factor out SecondaryColor computations into MiComputeColorInformation. (sir_richard)
  • Fix SecondaryColor computations. If the KPCR has no deta, use the default colors of 8, not just 1. Also handle cases where there is more L2 cache than we'd like -- set the secondary colors to a maximum of 1024 in that case. Finally, if the colors are not a power of two, or there are not enough (due to a registry setting), use the default of 8. (sir_richard)
  • Allocate and initialize color tables based on MmSecondaryColors (MiInitializeColorTables). (sir_richard)
  • These come after the PFN database, so modify the MmPfnAllocation to account for them. (sir_richard)
  • Add device location information override PS/2 keyboards. (Eric Kohl)
  • Please translate the location override string. (Eric Kohl)
  • partially revert changes from 45560 (Christoph von Wittich)
  • Make KiFastCallEntryHandler and KiSystemServiceHandler FASTCALL and pass the systemcall number in TrapFrame->Eax (Timo Kreuzer)
  • Refactor the mapping of the PTEs for the PFN database into MiMapPfnDatabase and move the code to portable directory. (sir_richard)
  • Move and refactor some other definitions, and make some numbers more portable by defining arch-specific subvalues. (sir_richard)

  • Fix incorrect sector size detection which caused seeking to fail when booting from a floppy (Cameron Gutman)
  • FreeLoader can load from a floppy disk now (Cameron Gutman)
  • Remove unused code. (sir_richard)
  • Fix an off-by-one-error which incorrectly causes GUI promotion to fail if the first GUI call is "0", since the limit on the GUI descriptor table will also be "0". We should check if the limit is equal to or lower, not just if it's lower. (sir_richard)
  • Make EventLog and Spooler services report their status to the SCM. (Eric Kohl)
  • Manage the PFN lists using the correct Flink/Blink semantics of the MMPFN structure, instead of typecasting a LIST_ENTRY on top of Flink and PteAddress. This allows PteAddress to be used now, and minimizes the number of differences between MMPFN and the ReactOS PHYSICAL_PAGE. (sir_richard)
  • Add MiInsertPageInFreeList to build the colored lists (not yet used) in the ARM3 PFN database. (sir_richard)
  • Remove SwapEntry parameter from MmAllocPage since it was always zero. (sir_richard)
  • Store SwapEntry as WsIndex. We can do this now since Flink is only used when the page is in a list (meaning it's not active, ie. free or zero), and non-active pages don't have a swap entry. (sir_richard)
  • Make MM init read MmProductType to determine what SKU of ReactOS this is, instead of assuming Server. If you want to go back to the old behavior, you need to change "WinNT" to "ServerNT" in the hivesys under Product Type. (sir_richard)
  • Initialize thresholds for low and high memory (in pages), low and high paged pool memory, and low and high nonpaged pool memory. These are described in the source. (sir_richard)
  • Initialize events for each of those thresholds, and populate the \KernelObject\xxxCondition events that are documented in MSDN for driver and app developers. (sir_richard)
  • Define some internal thresholds to use later, representing the minimum number of free pages under we go berserk, and the minimum number of free pages that we consider "plenty". (sir_richard)
  • Rename MiRemoveFromList to MiUnlinkFreeOrZeroedPage (Windows name). Make the function handle MmAvailablePages decrement, instead of having the caller do it. (sir_richard)
  • Remove run-time initialization of the PFN lists, just initialize them statically (also fixes the fact we forgot to initialize their names). (sir_richard)
  • Read ProductType from registry into MmProductType instead of dummy value. Remove duplicate "Mirroring" variable read. (sir_richard)
  • Don't prepend fastcall forward's target with @. Fixes binding issues in videoprt, thanks to Olaf Siejka for identifying the issue. (Aleksey Bragin)
  • Partially revert patches 45626 and 45633. (Eric Kohl)
  • Several services do not report their status to the service manager properly. Therefore we must not use any code that relies on service status information as part of the setup and boot processes as long as these issues have not been fixed. The service manager still needs to provide fake information about the service status. (Eric Kohl)
  • Use system PTEs for drivers, both boot drivers and system-loaded drivers. This removes the last user of the deprecated MmAllocateSection internal API. Another side-effect is that drivers will now have much higher load addresses (in the 0xF0000000 and higher range), as you would expect on Windows, plus increasing coverage and usage of system PTEs (which can still be optimized). (sir_richard)
  • Do not "copy" boot drivers from one set of pages to another set of pages. Instead, use system PTEs to map the boot drivers to a new VA, and set the PFNs to the original PFNs that the loader had obtained (and don't free that memory). This avoids some overhead. (sir_richard)
  • Now the only user of MmMapMemoryArea is the caching code, which I won't touch. (sir_richard)
  • Insert pages into zero list with specific MiInsertZeroListAtBack function instead of generic MiInsertInTailList. Allows us to handle insertion into colored page lists (not yet used) correctly, as well as update the page location to ZeroedPageList automatically (so don't let the callers do this anymore). Also handle memory threshold accounting. (sir_richard)
  • Temporarily disable last part of MiInsertZeroListAtBack which seems to cause issues in the 1st stage. (Aleksey Bragin)
  • Enable high/low memory events notifications. (Aleksey Bragin)
  • Reenable critical debug messages. (Eric Kohl)
  • Rewrite trap handler exit stubs in pure assembly, remove gcc inline assembly. (Timo Kreuzer)
  • Replace jmp to C handler with KiCallHandler macro, that expands to jmp on release builds for speed and call on debug builds to fix backtraces. (Timo Kreuzer)
  • Unroll the Syscall handler loop and use volatile keyword when reloading TrapFrame and DescriptorTable from the new stack to prevent the compiler from optimizing it away / moving it out of the loop. (Timo Kreuzer)
  • Bugcheck in KiTrap0DHandler, if the fault couldn't be resolved. (Timo Kreuzer)
  • Remove handling of V86 traps and edited traps in KiServiceExit, ASSERT to make sure they never happen. (Timo Kreuzer)
  • Replace code patching of the syscall exit handler with a function pointer. (Timo Kreuzer)
  • Use __debugbreak() instead of while(TRUE) in KiExitTrapDebugChecks (Timo Kreuzer)
  • Do the "funny message" (not really funny, my apologies) shenanigans after the system components have shutdown, and reset the display and call the HAL at least at DPC level (should probably do it at HIGH IRQL, really). This way, we can avoid the context switch to another process while the HAL is executing the BIOS reset display call (done solely for the benefit of the "funny messages", as the video card driver usually resets the display) and thus avoid the "invalid V86 opcode" message sometimes appearing on shutdown. Did you know the "funny messages" take up more storage space than an average embedded micro-controller OS? (sir_richard)
  • Implement CmSetLazyFlushState to disable lazy writing in the Cm. (sir_richard)
  • Implement ExSwapInWorkerThreads to in-swap any worker threads when needed. (sir_richard)
  • Add HAL stubs for HalEndOfBoot and HalSetWakeEnable since most HALs set this to NULL. (sir_richard)
  • Have I/O Manager Volume Device Objects register with the Power Manager so that they can receive dope. (sir_richard)
  • Reimplement NtShutdownSystem. (sir_richard)
  • Implement NtSetSystemPowerState for the shutdown/reboot cases. (sir_richard)
  • Use the dope from the volume device objects to flush all writeable (non-floppy) devices. Pending hard-disk changes are now flushed to disks before shutdown. (sir_richard)
  • Flush \\REGISTRY during shutdown. This flushes all pending changes. (sir_richard)
  • Call into Cc to flush lazy writer during shutdown. (sir_richard)
  • Stop killing processes on shutdown. The kernel should not be doing this. (sir_richard)
  • Don't only shutdown disk file systems, but also cdrom and tape. (sir_richard)
  • Don't only notify drivers of first-chance shutdown -- also parse the last-change shutdown list. (sir_richard)
  • Reference drivers registering for shutdown notifications so that they remain loaded for them to get the notification at shutdown. (sir_richard)
  • Notify drivers that have registered/opened the Power State callback. (sir_richard)
  • A lot of the Po* power state code is highly simplified, but provides a good roadmap to anyone interested in this functionality long-term. (sir_richard)
  • While attempting to ressucitate the user-mode shutdown code in CSRSS (disabled since 2006), it seemed clear that one of the main steps is to obtain the caller's LUID in order to kill the right processes. This LUID is obtained from the current thread's token, and we know it's the callers since we're supposed to impersonate the caller. Unfortunately, impersonation failed, making the whole process fail. (sir_richard)
  • Impersonation failed because NtImpersonateThread was actually inverting the THREAD_IMPERSONATE rights, asking the client thread for the server's permissions, and vice versa. Fixing this resulted in yet another failure. (sir_richard)
  • Analysis of this failure showed that even opening the server (ie: current) thread for THREAD_DIRECT_IMPERSONATION failed, which is unusual since the current thread should have access to all its rights. This is determined in PspCreateThread when the ETHREAD->GrantedAccess field is set. (sir_richard)
  • Continuing onto this path, tracing revealed that GrantedAccess was merely 0x1607F and not 0x1F3FF as expected, meaning that not all rights were given, including the impersonate right (0x200), explaining the failure, but not the deeper reason behind it. (sir_richard)
  • Attempting to identify which code path set this GrantedAccess, the SepAccessCheck routine came to light. A bug there caused MAXIMUM_ALLOWED accesses to fail in certain scenarios, such as when the object had no security descriptor, because MAXIMUM_ALLOWED would be granted as an absolute value, when instead of it is a flag that should grant GENERIC_ALL. Fixing that bug, the failure continued. (sir_richard)
  • Further analysis identified that the Administrators SID was being found with GENERIC_READ + WRITE + EXECUTE access, and no SID was found for GENERIC_ALL access. This happened when searching the system token's default DACL, which is assigned to the kernel (but for kernel-mode callers, this check was skipped), smss, winlogon, etc. (sir_richard)
  • The code for creating this system token was heavily hacked, so the function to create the system token, as well as NtCreateToken were refactored to use a common piece of token-creating code. Furthermode, the system token was correctly created with Local System as the user, and Administrators as one of the groups. Finally, SeDefaultDacl was used (already setup properly) instead of a badly configured Default DACL. The new shared code also correctly sets the SE_GROUP_ENABLED flag on all SE_GROUP_MANDATORY groups, and scans tokens to set the TOKEN_HAS_ADMIN_GROUP and TOKEN_HAS_TRAVERSE_PRIVILEGE flags which were not previously set. (sir_richard)
  • With the correct system token and default DACL, the Local System SID was now found, but the failure continued. This was revealed to be due to an even deeper rooted problem, as the SepIsSidInToken routine checked for SE_GROUP_ENABLED before listing a SID as "present". Although this is correct for actual groups, the User SID will never have the SE_GROUP_ENABLED flag as it is not a group. This caused any granted access ACE belonging to a user (instead of a group) to be ignored, causing either access check failures, or limited rights returned (in the MAXIMUM_ALLOWED case). (sir_richard)
  • Upon fixing this bug, the NtImpersonateThread call finally returned success, since the rights were now correct. Promptly upon calling NtOpenThreadToken to query the LUID however, the system ASSERTED with FALSE. (sir_richard)
  • The code at fault was a line in NtOpenThreadTokenEx which forcefully ASSERTed if the impersonation code path was taken, presumably because this was never tested, and ReactOS would actually always fail impersonation attempts due to the bugs fixed above. This routine was thus quickly reworked to fix some mistakes (such as forgetting to actually impersonate the client, incorrect referencing/dereferencing of thread/tokens, and assumptions about DACL creation success). (sir_richard)
  • Having fixed the NtOpenThreadTokenEx routine, the LUID query now went through for the impersonated token, but soon causing a user-mode crash, due to an incorrect parameter reference in the CsrGetProcessLuid function in the csrsrv code by Alex (which I copy/pasted to reduce code duplication). (sir_richard)
  • Fixing this final bug finally allowed the correct LUID to be queried and I was able to continue development of not-yet-commited user-mode shutdown code. (sir_richard)
  • Convert battery.inf to UTF-16 (Sylvain Petreolle)
  • Add battery.inf and fdc.inf to syssetup process. (Sylvain Petreolle)
  • Floppy disk controllers and batteries now appear correctly in device manager. (Sylvain Petreolle)
  • Dedicated to aicom ;) (Sylvain Petreolle)
  • No good deed goes unpunished. Continuing the novel/saga from a couple of days ago, it seems that now that impersonation works, various code paths are being tickled into existence. For example, it would seem parts of the system now attempt setting primary tokens. This would cause an assertion, since PspAssignPrimaryToken incorrectly dereferenced the token (leading to a double-dereference) due to an off-by-! mistake. (sir_richard)
  • List still-running processes at kernel shutdown. Useful for debugging shutdown code later. (sir_richard)
  • Quit building a useless IO_RESOURCE_REQUIREMENTS_LIST (and leaking memory) in response to IRP_MN_QUERY_RESOURCES (Cameron Gutman)
  • Actually store the IO_RESOURCE_REQUIREMENTS_LIST in Irp->IoStatus.Information in response to IRP_MN_QUERY_RESOURCE_REQUIREMENTS so the PnP manager can use it (and fixes another memory leak) (Cameron Gutman)
  • I forgot to set the exit function for systems without sysenter/sysexit support. Should fix sysreg. (Timo Kreuzer)
  • Add DPRINTs to tell if SYSENTER is detected. Requested by Christoph for testing the test machine. (Timo Kreuzer)
  • NtOpenThreadTokenEx: Initialize NewToken with NULL, so it doesn't get wrongly dereferenced. Fixes advapi32:security winetest crash. (Timo Kreuzer)
  • Update pspec file with amd64 exports, use -arch= where appropriate (Timo Kreuzer)
  • Add internal amd64 headers. (Timo Kreuzer)
  • Add support for reference strings in IoOpenDeviceInterfaceRegistryKey (Johannes Anderwald)
  • Make sure SymbolicLink is null terminated (Johannes Anderwald)
  • Rewrite boot driver loading code (not the driver code itself) to use the boot loader's BootDriverListHead, instead of parsing InOrderListHead and cherry-picking ".sys" files. This is the last incompatibility with Windows. (sir_richard)
  • Use group prioritiy, tag numbers, and tag priority to determine the correct loading order for boot drivers, instead of just parsing the linked list. Dependencies work now! (sir_richard)
  • Load any DLLs that are driver-dependent with MmCallDllInitialize. Previously, these .DLLS were ignored and drivers could lose dependencies. (sir_richard)
  • Fix MP install. (Sylvain Petreolle)
  • Simplifying MakeInfoDC. (James Tabor)
  • Implement Configuration Manager routines for building a driver list, sorting it, detecting circular dependencies and ordering, combining groups, tags, group orders and tag orders, etc. Replaces the "drvrlist" I/O interface currently in ReactOS. (sir_richard)
  • Use the new Cm interface in IopInitializeSystemDrivers to parse the ordered list of system drivers to load. Make it use ZwLoadDriver directly instead of having a hacked IopLoadDriver function. (sir_richard)
  • Drivers should not show up loading n times a reboot now (some drivers seemed to do this in the past when they failed to load). (sir_richard)
  • The system driver code could be further improved by checknig if the driver has already been loaded, or attempted and failed to load, but it is already much better now than in the past. (sir_richard)
  • Device interface strings are null terminated (Johannes Anderwald)
  • Some PnP ABI refactoring for future patches/work. (sir_richard)
  • Switch to PnP Add Device routine, currently mostly a copy of the original ReactOS code. However, PnP now tries to open all the required registry keys before attempting to start the device. Failures are reported and load cancelled. More work TBD. (sir_richard)
  • Rename IopBusTypeGuidList to PnpBusTypeGuidList to match Windows 2003 PnP Namespace instead of Windows 2000. (sir_richard)
  • Use PnpBusTypeGuidList->Lock instead of PnpBusTypeGuidListLock. (sir_richard)
  • Implement PipAllocateDeviceNode for setting up device nodes and linking them to a PDO. Only used for Root PnP now. Main ABI change is that allocate in ReactOS right now includes "insert". These will be seperate in the new PnP ABI. (sir_richard)

  • Aleksey wants an easy way to see debug messages coming from one process vs. another, which is an obvious idea that should've done a long time ago. Now you can see who is generating a given debug message (including the thread). (sir_richard)
  • In the process, fix bugs in the Event dispatcher code that used Win32 EVENT_TYPE instead of NT KOBJECTS enumeration. (sir_richard)
  • Change some comments to standard ReactOS commenting style. (Aleksey Bragin)
  • Fix a strange bug where we were only setting SharedUserData->TestRetInstruction conditionally only if lookup failed - it should be set on success. Also, bail out if the lookups failed. (Aleksey Bragin)
  • Fix a code typo which led to a security issue when the XOR algorithm for the system cookie might actually yield zero. Now it's going to loop as long as the cookie is 0, attempting to generate a non-zero one. (Aleksey Bragin)
  • Fix several bugs in Inbv (busted locking code, useless variables, magic initializers). (Aleksey Bragin)
  • Daniel Zimmermann: Fix POPF bugs in VDM mode, namely truncation of the stackpointer to 16 bit and setting proper flags in the trapframe eflags register. This fixes problems with videocards calling int 0x10 VESA BIOS extension. (Aleksey Bragin; #5608)


  • Rework respective code to handle this by using the VDM Alert field in the KPCR. (sir_richard)
  • this log message left intentionally non-descriptive (Matthias Kupfer)
  • Remove VDM Alert KPCR hack (which was buggy). Now the PKTRAP_FRAME is passed as a parameter to HalpEndSoftwareInterrupt/HalEndSystemInterrupt. This also removes the HalpNestedTrap ASM hack, since the call can now be done in C. (sir_richard)
  • Move trap entry points from C into a GAS/ML compatile assembly file (might need fine tuning for ML). The entries are generated by a shared assembly macro TRAP_ENTRY. Removed KiTrapStub, KiIsV8086TrapSafe, KiIsUserTrapSafe, KiSetSaneSegments, removed segment handling from KiEnter*Trap. (Timo Kreuzer)


  • Enable VME support. VME stands for Virtual 8086 Mode Extensions, and it's an Intel optimization that makes changes to the IF bit in EFLAGS (CLI, STI, INT, IRETD, PUSHF, POPF) completely transprent: instead of changing the real (protected) bit, which requires the OS to trap and emulate the behavior, the CPU sets a "Fake" IF bit instead. When you're dong in V8086 mode, you simply update your real flag with whatever the fake flag says. (sir_richard)


  • undef IoAllocateAdapterChannel before implementing it (Timo Kreuzer)


  • Add the possibility to break on all first chance exceptions, by passing /FIRSTCHANCE on the command line. Enable it temporary to get some more information from the sysreg crash. (Timo Kreuzer)
  • Add /KDSERIAL to the command line, to make sysreg able to bt in first stage. (Timo Kreuzer)



  • Add a macro for asserting hash lock ownership. (Aleksey Bragin)
  • Add a macro for getting an alloc page from KCB / delay alloc item. (Aleksey Bragin)
  • Add a newly allocated KCB to the tail of CmpFreeKCBList, not to its head. (Aleksey Bragin)
  • Add more assert macros for registry operations: locked or loading, exclusively locked or loading, hash and KCB locks, locked for flushing. (Aleksey Bragin)
  • Add macros for getting alloc page from KCB and delay alloc item. (Aleksey Bragin)
  • Stub support for global quota enable. (Aleksey Bragin)
  • Stub support for notifications. (Aleksey Bragin)
  • Add a source file for a future HiveList implementation. (Aleksey Bragin)
  • Implement new (correct) hive flusher lock/release routines, unused right now. (Aleksey Bragin)
  • Flusher lock fixes: wrong kind of lock,total mess (and the wrong kind of lock). Properly fixed throughout cmapi.c, but still missing in many other places. (Aleksey Bragin)
  • Add support for detecting loading of an already loaded hive. (Aleksey Bragin)
  • Start adding calls to CmpReportNotify to support registry callbacks. (Aleksey Bragin)
  • Do work needed to flush notifications for a deleted node (but CmpFlushNotify not yet implemented). (Aleksey Bragin)
  • Add support for adding each newly loaded hive to the HiveList key in the registry (but CmpAddHiveToFileList not yet implemented). (Aleksey Bragin)
  • Add some ViewLock acquire/releases where needed. (Aleksey Bragin)
  • Load the key in a faster way (Ob vs Zw) (Aleksey Bragin)
  • Add checks everywhere for HvMarkCellDirty success. In future (when log/backup file is enabled), it can return FALSE (e.g. when we are out of space). (Aleksey Bragin)
  • Change logic in CmpDoFlushAll to only flush a hive if it won't shrink (in the future, flushing may lead to hive shrinkage for efficiency). (Aleksey Bragin)
  • Add SEH2 protection to all CmApis that may deal with user-mode data. (Aleksey Bragin)
  • Add HvTrackCellRef/HvReleaseCellRef for tracking cell references in scenarios where we might need many GetCell/ReleaseCell calls. For now stubbed to only work with up to 4 static references. (Aleksey Bragin)
  • Properly unlock/free in some failure paths in some of the CM APIs. (Aleksey Bragin)
  • Add some missing HvReleaseCell in paths where it was missing. (Aleksey Bragin)
  • Try to fix hack in enumerate key. (Aleksey Bragin)
  • Fix wrong usage of KeQuerySystemTime. It was called twice to save it in 2 different places. Instead, there should be only one call, and then duplicate the value across. (Aleksey Bragin)
  • Fix logic in CmpSetValueExistingData/Key. (Aleksey Bragin)
  • Tested with winetests and .NET framework 1.1 installation which fully completes. (Aleksey Bragin)



  • Check for null pointers before attempting to copy or free memory. (Michael Martin)
  • Modify IopCreateDriver to accept the PLDR_DATA_TABLE_ENTRY instead of the DllBase and SizeOfImage from this structure. (Michael Martin)
  • Set the DriverObject->DriverSection before calling the DriverEntry routine. (Michael Martin)
  • If the DriverEntry routine fails then set the DriverObject->DriverSection back to NULL so that IopDeleteDriver doesnt attempt to unload the ModuleObject, after it was already unloaded by the caller. (Michael Martin)


  • Fix incorrect POOL_TYPE allocation in IoInvalidateDeviceRelations. This function can be called at DISPATCH_LEVEL, which requires NonPagedPool POOL_TYPE. (Michael Martin)


  • When an IRP is freed in a Completion routine the return Status is STATUS_MORE_PROCESSING_REQUIRED to let IoCompleteRequest know not to do anything further with the IRP. (Michael Martin)
  • Fix typo. (Michael Martin)


  • Acquire and Release RundownProtection on the Parent Pocess not the newly created Pcess when setting the SectionObject. (Michael Martin)
  • When deleting a Process remove the Process from the MmProcessList. Fixes random NonPaged Pool corruptions. Thanks aicom for assistance. (Michael Martin)





  • Fix SCM shutdown. Now all services are stopped (in my working copy with the CSRSS shutdown code). (sir_richard)


  • Do not build on ARM. On a side note, I offer a bountry for "if ARCH != ARM" support in .rbuild files, instead of only allowing * Use mini_hal only on i386 builds (Timo Kreuzer)
  • Unify the old setupldr settings with more recent freeldr ones. Also fixes missing _udiv/mod functions on my build. (sir_richard)



  • Experimental driver for WMX-SVGA for testing memory manager and VideoPrt issues and acceleration on QEMU. (sir_richard)



  • Fix GdiBatch, the limit is for user space not system. (James Tabor)
  • Enable font batch and fixed setting brush origion. Use the new delete object functions in win32k. (James Tabor)


  • Diagnostic commit used for troubleshooting leaking region handles. (James Tabor)
  • Updates to headers and experimental code added for regions. (James Tabor)



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