Difference between revisions of "ChangeLog-0.3.12"

From ReactOS Wiki
Jump to: navigation, search
Line 365: Line 365:
* #5530  COM ports not available anymore
* #5530  COM ports not available anymore
* #5554  2nd stage, misplaced warning message for empty name, wrong sized too.
* #5554  2nd stage, misplaced warning message for empty name, wrong sized too.
* #5556  Clock hint doesn't show month in 3 languages
* #5569  Techlogica HTTP Server tray icon not displayed
* #5569  Techlogica HTTP Server tray icon not displayed
* #5593  GDI REGION objects are leaked when Freeciv start window is being redrawn
* #5593  GDI REGION objects are leaked when Freeciv start window is being redrawn

Revision as of 20:15, 28 September 2010

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 TODO: I could also use someone who could in the translations section list the components that got translated for each language instead of the current random sentences there. -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.
  • 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.
  • Gregor Schneider: Win32.
  • Pierre Schweitzer: Filesystem, kernel.
  • James Tabor: Win32.
  • Christoph von Wittich: Win32.

Patch Submitters

  • Andrea
  • Radek Liška
  • Carlo Bramini
  • Benedikt Freisen
  • Rafal Harabien
  • Katayama Hirofumi
  • Kusanagi
  • Roel Messiant
  • Samuel Serapión
  • Seungju


  • 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

Generic 0.3.12 Changes


  • Calc: Units and conversion factors added.
  • MSCUtils: Column names now use resource strings instead of hardcoded strings.
  • 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.


  • 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


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


  • calc


  • advpack
  • rapps
  • usetup


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



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


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


  • mscutils
  • usetup


  • syssetup
  • usetup


  • usetup
  • spider
  • sysdm


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


  • devmgr
  • shell32
  • 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


  • Polish, Czech and Estonian translations of required disk space by Maciej Bialas, Radek Liska and Andres Traks (Gabriel Ilardi; #5429, #3302)

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


  • #4086 CDFS - Data Corruption
  • #4330 ReactOS crashes upon restart after installing a 3Com NIC-driver
  • #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 Not POWNED or CLASSDC hwndCurrent
  • #5372 Failed to create directory L"%USERPROFILE%\\Local Settings\\... in 2nd stage
  • #5443 Inkscape 0.43-2 crashes immediately upon start.
  • #5484 Desktop Open Window Offset
  • #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 2nd stage, misplaced warning message for empty name, wrong sized too.
  • #5569 Techlogica HTTP Server tray icon 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




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 Components

Audio Stack

The audio stack has seen continued development by Johannes Anderwald. While basic sound playback has been around for a few months, Johannes has continued implementing controls for volume and adding support for various types of audio devices. The audio stack is composed of several pieces, including but not limited to ks (kernel streaming), ksuser, sysaudio, dsound, and wdmaud.


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


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

Kernel and Executive (NTOSKRNL)


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 has seen considerable enhancement by Pierre Schweitzer with the addition of notifications for changes to volume contents and state. These service as foundations for better notification to the user about things that happen to the disk and should help increase usability as more code takes advantage of the functionality. One such change is the ability to eject mounted volumes.


The filesystem for CDs has seen several fixes to how it dealt with volume names.

  • Implement CdfsIsNameLegalDOS8Dot3 and use it to check filenames. It avoids calling Rtl* functions that need NLS. (Modified merge of 35501). (Pierre Schweitzer, Aleksey Bragin; #2404)

FAT Driver

The current FASTFAT driver has been updated to make more use of the functionality added to the FSRTL, as well as implement some support for plug-n-play functionality.


  • Implement finding the correct leaf with the key name that is being searched for when registry keys are not sorted. Fixes bug #4895. (Michael Martin)
  • Fixed a bug in CmpSelectLeaf that caused registry corruption. (Michael Martin)

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.

NT System Library (NTDLL)

  • Implement LdrLockLoaderLock and LdrUnlockLoaderLock. (Michael Martin)
  • Fix loading assemblies of modules when loaded from threads. (Michael Martin)
  • Add support for finding and loading dlls from the path environment variable. Fixes OpenOffice 3.0 install. (Michael Martin)

Power Management

Progress has been made in efforts to give ReactOS better support for power management, whether it be simply shutting down the system to detecting battery levels.


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.


The runtime includes the core libraries that provide access to basic functionality such as memory access to applications. It also implements many of the data structures used by other parts of the operating system.


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


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.


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.


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.


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

Win32™ Personality

User mode subsystem server (CSRSS)

Kernel-mode subsystem server (Win32K)

  • Fix a bug in NtUserCallNextHookEx that caused the first hook procedure to be called instead of the next in chain. Fixes #4461 and #4407. (Michael Martin)
  • Fix a bug that caused WH_CBT hook procedures to receive destroy window notifications on windows that were never really created. (Michael Martin)
  • When the desktop window is destroyed, set the appropriate member of pDeskInfo to NULL so that a shell can be restarted. Fixes #4902. (Michael Martin)
  • Change how non-queued message are sent from Win32K subsystem. Always send these messages to the windows send message queue or to the WndProc vice sending some to the post message queue. Fixes message deadlocks due to messages sent from Subsystem. Fixes #4948. (Michael Martin)
  • Fix broken logic in can_active_window and co_WinPosShowWindow that caused wrong windows to receive focus when switching/closing top windows. Fixes #969, #3171, #4676 and #4677. (Michael Martin)
  • Complete and activate the win32 timer rewrite started by James Tabor. Fixes #2393, #363, and #2835. (Michael Martin)
  • Fix recursive call bug for Low Level Mouse Hooks (WH_MOUSE_LL) that resulted in thread running out of stack space. (Michael Martin)
  • Implement message callbacks (SendMessageCallback). (Michael Martin)



RPC Server


Win32™ Libraries











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.




















Regression tests






  • Allocate memory for the TCP table properly (Jan)
  • Only netstat -a should show UDP connections (Jan)


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





  • Add asm.h containing macros to make assembly code both GAS and ML compatible at the same time. (Timo Kreuzer)


  • Switch KDSERIAL debug builds to new boot method, old boot method tends to bugcheck (Gregor Schneider)
  • Use newinflib instead of inflib. (Eric Kohl)
  • Pass the user-selected language to the inf parser. (Eric Kohl)
  • Convert registry code from ANSI APIs to UNICODE APIs. (Eric Kohl)
  • Check for required minimum disk space eventually warn the user. R.T.Sivakumar (Gabriel Ilardi; #3302, #5440)
  • Make the required minimum disk space configurable from the txtsetup.sif file. (Eric Kohl)
  • Made the 'Copying file...' status line message left aligned like all the other status line messages. (Eric Kohl)
  • The last error messages were swapped in some languages, spotted by Paolo Devoti. (Gabriel Ilardi; #5440)
  • Set the type of the install partition even if it was not created by usetup. (Eric Kohl)
  • Fix for bug #4368. (Eric Kohl, #4368)
  • Make InfpGetIntField's 3rd parameter an INT* (Samuel Serapion) (Timo Kreuzer)
  • Remove code that was corrupting disk data and causing setup to fail in rare cases (Cameron Gutman)
  • Write the MBR in all cases (Windows setup behavior too) (Cameron Gutman)
  • We can overwrite GRUB and LILO now but we still can't boot because we have trouble reading the partition table if it was made in Linux (Cameron Gutman)
  • Update the GAS compatible fathelp.S file to reflect the latest changes to the original file (freeldr PE conversion). This version is tested and works. (Timo Kreuzer)
  • Add the option to write only the VBR so FreeLoader can easily be chain loaded by GRUB or another boot loader (Cameron Gutman)
  • The VBR (volume boot sector) contains a structure called BPB (bios parameter block) that describes the disk and the partition. The HiddenSectors member contains the number of the first sector of the partition. This is used by the VBR code to load the secondary sector containing additional boot code that is located at secor 14 relative to the partition start. Previously we were copying the BPB (plus additionally the OemName, which makes no sense) from the old VBR. Now Linux is a bit lame and doesn't put the correct value into the HiddenSectors field. Instead it sets it to the number of sectors per track which seems to be the default value. When now the linux partition manager decides to do a non standard partitioning, aligning the partition to 0x800, then the VBR fails to load it's 2nd sector. Fix this by correcting the value in the BPB with the value from the partition info. (Timo Kreuzer; #2733)
  • NtAdjustPrivilegesToken: Probe and capture parameters before use. (Eric Kohl; #5497)
  • fdc.inf: Fix a typo in the class guid. (Eric Kohl)
  • hdc.inf: Add missing manufacturer string. (Eric Kohl)
  • Improvements to NtAdjustPrivilegesToken part 2: (Eric Kohl; #5497)
  • Check for invalid parameter combinations. (Eric Kohl; #5497)
  • Count privileges that will be changed before changing them. (Eric Kohl; #5497)
  • Return required buffer size. (Eric Kohl; #5497)
  • Fail if the provided buffer is too small. (Eric Kohl; #5497)
  • When creating fresh partitions, set the HiddenSectors mamber. Fixes fat32 installation. (Timo Kreuzer)
  • Allocate a drive layout buffer that is large enough to keep a primary partition table (4 partition entries) plus 26 logical drives (2 partition entries each). Total 56 partition entries. This should be enough for everybody until we support GPT partition tables. ;-) (Eric Kohl; #5270)
  • Fix the ChangeResourceSetting and the Reset configurator callback parameter names (sir_richard)
  • Part support for resource change with PciComputeNewCurrentSettings... full support for PciSetResources, PciUpdateHardware, PcipUpdateHardare (sir_richard)
  • IRP_MN_START_DEVICE for PDO (PciPdoIrpStartDevice) implement (sir_richard)
  • PciNextPartialDescriptor, PciDebugPrintCmResList, PciDebugPrintPartialResource helpers implement (sir_richard)
  • Now full PDO support almost done, PCIX driver ready for test (sir_richard)
  • Thanks to cgoodman assert fix (sir_richard)
  • PnP forever recursion in enumerate, must fix to finish (sir_richard)
  • Christoph von Wittich: Add a debug print, and improve an existing one. (Amine Khaldi)
  • Sylvain Petreolle: Improve debug prints for disk space check. (Amine Khaldi)






  • Bail out when detecting invalid root path, instead of asking to insert a disk (Gregor Schneider; #4067)
  • Fix "potentially insecure" usage of non-string-literals in printf. (Timo Kreuzer)


  • Remove the system environment variable PROCESSOR_ARCHITECTURE from the hivesys*.inf files. (Eric Kohl)
  • Let SMSS add the system environment variables PROCESSOR_ARCHITECTURE and PROCESSOR_IDENTIFIER to the registry. (Eric Kohl)
  • Remove the system environment variable OS from the hivesys*.inf files. (Eric Kohl)
  • Change the type of the system environment variable PATHEXT in the hivesys*.inf files from REG_EXPAND_SZ to REG_SZ. (Eric Kohl)
  • Let SMSS add the system environment variables OS and NUMBER_OF_PROCESSORS to the registry. (Eric Kohl)
  • Add the system environment variables PROCESSOR_LEVEL and PROCESSOR_REVISION. (Eric Kohl)
  • Create a new default paging file if no paging files exist. (Eric Kohl)
  • Set the calculated paging file sizes in the registry. (Eric Kohl)
  • Remove predefined paging file name from the hivesys*.inf files. (Eric Kohl)
  • Fixes bug #4048. (Eric Kohl)



  • Add missing newline to a TRACE message. (Eric Kohl)
  • Move environment creation to a separate file. (Eric Kohl)
  • Impersonate the new user and create the 'Volatile Environment' key for the new user. (Eric Kohl)
  • Fixed bug of the month. I'm surprised that winlogon worked at all. (Eric Kohl)
  • Store all environment variables that were passed from msgina.dll in the volatile environment key. (Eric Kohl)
  • Add the APPDATA environment variable to the volatile environment. Unfortunately SHGetFolderPath does not seem to expand the appdata path. Bug or Feature?? (Eric Kohl)
  • Create the environment block for the shell process after the volatile environment key has been filled, so its variables are included. (Eric Kohl)
  • Yet another step to fixing bug #4102. (Eric Kohl)
  • Add a hack to fix the APPDATA environment variable. This hack will be removed after bug #5372 has been fixed. Fixes bug #4102. (Eric Kohl)
  • Set the APPDATA environment variable without loading shell32.dll. (Eric Kohl)
  • This should fix bug #5398. (Eric Kohl)
  • Create window station with all access rights. (Aleksey Bragin)
  • NtInitializeRegistry expects not just CM_BOOT_FLAG_ACCEPTED, but a number of the accepted control set to be added to it. After fixing this, NtInitializeRegistry won't fail with STATUS_INVALID_PARAMETER (someone should check return status for errors...) anymore. As a result lazy flushing is enabled. (Aleksey Bragin)
  • Fix comments copypasta. (Aleksey Bragin)



  • Fix incorrect frame buffer size calculation. (sir_richard)
  • Fix typo. (sir_richard)
  • PutChar should be a UCHAR routine, this way we can print characters above 127 (extended ASCII). This is needed for the progress bar, for example. (sir_richard)
  • ARM SDK]: Use real Versatile base addresses instead of the old hacked FreeLDR base addresses. (sir_richard)
  • Remove all deprecated video machine routines that are not used anymore. (sir_richard)
  • If all went well, the ARM port should now boot on Versatile platforms up until the ARM3 initialization code. (sir_richard)


  • Add DHCP to the service list to be loaded by svchost in the netsvcs group (Cameron Gutman)
  • Add the correct registry keys in the DHCP service key for loading by svchost (Cameron Gutman)
  • Remove dhcp.exe from bootcd (Cameron Gutman)
  • Part 3 of 3 (Cameron Gutman)
  • revert 47055 (Christoph von Wittich)
  • Add the 176 different PCI devices that Windows knows about, and the erratas that need to be applied to make those devices work correctly. This information is processed by eVb's PCI Bus driver. 3rd-party device manufacturers, as well as Microsoft online support pages, sometimes instruct users to add new entries to this list as well, and new entries are also added by 3rd-party driver .INF files. Probably 30% of computers in the world have at least one of these devices installed. (sir_richard)
  • Windows Bus Drivers/HAL/Kernel require Arbiter data in the registry placed by the installer, otherwise they will not load. Add this Arbiter data. (sir_richard)




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


  • Disable building of SWENUM, MPU401, CMIDriver, SPLITTER, STREAM to reduce build time (Johannes Anderwald)
  • Those modules are either unused or don't work yet due to missing functionality (Johannes Anderwald)



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




  • Stub interfaces for CBasicAudio, CKsClockForwarder, CVPConfig, CVPVBIConfig, CKsDataTypeHandler, CKsInterfaceHandler, CKsProxy, CKsQualityForwarder (Johannes Anderwald)
  • Implement KsSynchronousDeviceControl, KsOpenDefaultDevice, KsGetMultiplePinFactoryItems, KsGetMediaTypeCount, DllGetClassObject (Johannes Anderwald)
  • Fix file headers for Christoph (Johannes Anderwald)
  • Add debug spam (Johannes Anderwald)
  • IsEqualIID uses REFIID (Johannes Anderwald)
  • Fix IID_IUnknown definition 3/X (Johannes Anderwald)
  • Implement IPersistPropertyBag interface (Johannes Anderwald)
  • Implement IKsObject interface (Johannes Anderwald)
  • Implement enumerating supported property/method/event set from driver and loading the corresponding ksproxy plugins (Johannes Anderwald)
  • Enumerate input / output pins and their names (Johannes Anderwald)
  • Start implementing input / output pin (Johannes Anderwald)
  • Implement IEnumPins interface for CKsProxy filter (Johannes Anderwald)
  • Implement IEnumMediaTypes interface (Johannes Anderwald)
  • Implement IKsObject, IKsPropertySet, IKsControl interface for CInputPin (Johannes Anderwald)
  • Verify connection format for CInputPin (Johannes Anderwald)
  • Delegate interface requests to ksproxy plugins (Johannes Anderwald)
  • Implement CKsProxy::FindPin (Johannes Anderwald)
  • Silence traces in IEnumPins interface (Johannes Anderwald)
  • Partly implement IKsObject interface for COutputPin (Johannes Anderwald)
  • Retrieve pin communication and pass it to constructor of CInputPin (Johannes Anderwald)
  • Implement IKsPinEx and IMemInputPin interface for CInputPin (Johannes Anderwald)
  • The DVBT network provider can now connect to the BDA Source Filter (Johannes Anderwald)
  • Recreate resource file with visual studio (Johannes Anderwald)
  • Copy extra format buffer in IEnumMediaTypes::Next (Johannes Anderwald)
  • Create the pin handle in IPin::ReceiveConnection (Johannes Anderwald)
  • Implement IPin::Disconnect for the input pin (Johannes Anderwald)
  • Enumerate media formats and pass it to constructor of CEnumMediaTypes (Johannes Anderwald)
  • Check if the passed format is null in CInputPin::CheckFormat (Johannes Anderwald)
  • Copy extra format buffer after KSDATAFORMAT in the pin connection request (Johannes Anderwald)
  • Implement KsGetMediaType function (Johannes Anderwald)
  • Implement ISpecifyPropertyPages, IKsPropertySet, IKsControl, IStreamBuilder, IKsPinFactory for the output pin (Johannes Anderwald)
  • Implement IPin::ReceiveConnection, IPin::EnumMediaTypes for output pin (Johannes Anderwald)
  • Stub interfaces for IReferenceClock, IMediaSeeking, IKsTopology, IKsAggregateControl, IKsClockPropertySet, ISpecifyPropertyPages, IPersistStream for proxy filter (Johannes Anderwald)
  • Implement IAMDeviceRemoval, IKsControl, IAMFilterMiscFlags, IKsPropertySet interface for proxy filter (Johannes Anderwald)
  • Fix trunk (Johannes Anderwald)
  • Fix the resource parsing loops to correct a memory corruption issue (Cameron Gutman)
  • Return the correct failure status if ExAllocatePool fails (Cameron Gutman)
  • Use the possible resources not the current resources for IRP_MN_QUERY_RESOURCE_REQUIREMENTS (Cameron Gutman)
  • Initialize MaximumVector for IRQs, MaximumChannel for DMA, and Alignment for Port (Cameron Gutman)
  • Comment out a reference to non existent "resource." file (Sylvain Petreolle)
  • in the visual studio generated resource file. (Sylvain Petreolle)
  • Update more menu types and flags. (James Tabor)
  • Implement IKsClockPropertySet, IReferenceClock, IMediaSeeking, IKsTopology interface for CKsProxy (Johannes Anderwald)
  • Implement more of IBaseFilter::SetSyncSource for CKsProxy (Johannes Anderwald)
  • Add missing AddRef to IBaseFilter::QueryFilterInfo for CKsProxy (Johannes Anderwald)
  • Add support for IPersist interface (Johannes Anderwald)
  • Create clock handle when request for IKsClockPropertySet / IReferenceClock arrives (Johannes Anderwald)
  • Print out requested format (Johannes Anderwald)
  • Implement IPersist::GetClassID, IBaseFilter::QueryVendorInfo for CKsProxy (Johannes Anderwald)
  • Implement ISpecifyPropertyPages interface for CInputPin (Johannes Anderwald)
  • Implement IKsInterfaceHandler::KsSetPin, IKsInterfaceHandler::KsProcessMediaSamples, IKsInterfaceHandler::KsCompleteIo (Johannes Anderwald)
  • Implement IKsDataTypeHandler::KsIsMediaTypeInRanges, IKsDataTypeHandler::KsSetMediaType (Johannes Anderwald)
  • Instantiate the IKsInterfaceHandler for the CInputPin (Johannes Anderwald)
  • Update log2lines to ver. 2.2. Jan Roeloffzen, bug #4342. (Dmitry Gorbachev)
  • Implement IKsPinPipe for CInputPin & COutputPin (Johannes Anderwald)
  • Implement IKsPinFactory, IStreamBuilder for CInputPin (Johannes Anderwald)
  • Implement IKsAggregateControl, IQualityControl stub for CInputPin & COutputPin (Johannes Anderwald)
  • fix file headers (Christoph von Wittich)
  • Start implementing IKsAllocator interface (Johannes Anderwald)
  • Retrieve the default format for the input and output pin (Johannes Anderwald)
  • Instantiate the kernel pin when an interface request for IMemInputPin / IKsPropertySet / IKsObject request arrives (Johannes Anderwald)
  • Implement IKsPin::KsCreateSinkPinHandle for the input pin (Johannes Anderwald)
  • Partly implement IKsPin::KsPropagateAcquire for input / output pin (Johannes Anderwald)
  • Fix asserts in IKsControl::KsProperty, IKsControl::KsMethod, IKsControl::KsEvent (Johannes Anderwald)
  • Simplify CInputPin::CheckFormat (Johannes Anderwald)
  • Store the currently used pin medium / interface and connection format (Johannes Anderwald)
  • Implement IAMBufferNegotiation::SuggestAllocatorProperties, IAMBufferNegotiation::GetAllocatorProperties for the output pin (Johannes Anderwald)
  • Pass pin's communication to output pin (Johannes Anderwald)
  • Implement IMediaFilter::Pause, IMediaFilter::Run for CKsProxy (Johannes Anderwald)
  • CKsProxy is now able to deliver signal statistics for BDA devices (app: SageDvbRecorder, OS: WinXP SP3) (Johannes Anderwald)
  • Add german translation. (Eric Kohl)
  • Install class installer DLL. (Eric Kohl)
  • Register class installer. (Eric Kohl)
  • Register class icon. The Device Manager does not recognize it yet. (Eric Kohl)
  • Add cpu.inf and usb.inf to inf.rbuild (Cameron Gutman)
  • Implement IKsAllocator interface (Johannes Anderwald)
  • Implement IMediaSample interface (Johannes Anderwald)
  • Implement querying the output pin for IMemInputPin and determine allocator properties. Currently the allocation strategy is limited to 16 Buffers with a size of 2048 * 188 (MPEG2 TS Payload size). Needs more work to determine a reasonable value (Johannes Anderwald)
  • Implement overriding allocator if properties are not matching (Johannes Anderwald)
  • Implement IPin::BeginFlush, IPin::EndFlush, IPin::EndOfStream, IPin::NewSegment for the OutputPin (Johannes Anderwald)
  • Implement a I/O thread which queues the media sample to the kernel pin via IKsInterfaceHandler and then transmitts it to the connected input pin via IMemInputPin interface. (Johannes Anderwald)
  • Implement setting pin state via a friend function, in order to synchronize the starting / stopping of the I/O thread (Johannes Anderwald)
  • Fix a bug in IAMFilterMiscFlags::GetMiscFlags function (Johannes Anderwald)
  • ksproxy (CLSID_Proxy) is now able to connect to MPEG-2 splitter and deliver samples. Needs more investigation why the render filter is not releasing the samples back to allocator, which causes the I/O thread to hang. WIP (Johannes Anderwald)
  • Fix debug prints. (Dmitry Gorbachev)
  • HACK: Return the oldest used sample when the allocator runs out of samples. Fixes playback as the render does not seem to release the media samples (Johannes Anderwald)
  • Start implementing IKsClockForwarder interface (Johannes Anderwald)
  • Fix a few bugs in KsOpenDefaultDevice (Johannes Anderwald)
  • Implement IMediaSample::GetMediaType (Johannes Anderwald)
  • Always use the CKsAllocator interface for allocating samples (Johannes Anderwald)
  • Check in IMemAllocator::GetBuffer if the allocator is commited (Johannes Anderwald)
  • Silence debug prints in IMediaSample (Johannes Anderwald)
  • Implement IBaseFilter::Stop (Johannes Anderwald)
  • Fix race conditions in IBaseFilter::Run, IBaseFilter::Run, IBaseFilter::Stop (Johannes Anderwald)
  • Check for invalid argument in IBaseFilter::Stop (Johannes Anderwald)
  • Call InitializeIOThread when pin state is set to acquired (Johannes Anderwald)
  • Grab current filter handle by obtaining IKsObject interface of the parent filter. Required as the filter handle might be closed by using IAMDeviceRemoval interface (Johannes Anderwald)
  • CLSID_Filter is now fully functional (Windows XP SP3) (Johannes Anderwald)
  • Add support for IKsClockForward interface which is an alias for IKsObject (Johannes Anderwald)
  • CKsClockForwarder is now functional (Johannes Anderwald)
  • Silent traces (Johannes Anderwald)
  • Load ksproxy plugins for input / output pins (Johannes Anderwald)
  • Check if the input / output pin has any methods while enumerating them (Johannes Anderwald)
  • Implement sending multiple media samples to tv tuner at once in order to avoid the kernel irp queue running out (Johannes Anderwald)
  • Create pin handle when other pin is connecting to the output pin (Johannes Anderwald)
  • Defer loading proxy plugins when the pin is about to connect (Johannes Anderwald)


  • Fix KsCreateAllocator, KsCreateClock, KsCreateTopologyNode function type (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)




  • LdrpProcessImportDirectoryEntry: Don't try to fixup functions if an import address table is empty. Fixes Panzer General 2. Most of the work of discovering, fixing and testing this problem was performed by Olaf Siejka. (Aleksey Bragin)
  • Report service status to the service manager. (Eric Kohl)
  • Patch is partially based on code by Dmitry Gorbachev. (Eric Kohl)
  • Don't use #pragma once for pch files. (Sylvain Petreolle)
  • Fix usage of PEB::KernelCallbacktable. It's a PVOID. (Timo Kreuzer)
  • 44524 (tkreuzer) (Timo Kreuzer)
  • The harderror message for STATUS_DLL_NOT_FOUND expects an ANSI dll name. (Timo Kreuzer)
  • Add RtlCreateBootStatusDataFile() stub. (Eric Kohl)
  • Add _setjmp, _setjmpex and longjmp exports on amd64 (Timo Kreuzer)
  • Comment out RtlWalkFrameChain for amd64 (Timo Kreuzer)
  • Add amd64 stubs for LdrInitializeThunk and KiUserApcDispatcher (Timo Kreuzer)
  • LdrPerformRelocations: Delta is a LONG_PTR rather than ULONG_PTR (Timo Kreuzer; #5577)
  • Call LdrProcessRelocationBlockLongLong from LdrProcessRelocationBlock instead of duplicating the code (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)




  • Silence a lot of non-critical service manager error messages (ERR->TRACE). (Eric Kohl)
  • Create a service status handle when a service starts and destroy it after it has been stopped. (Eric Kohl)
  • ULONG -> ULONG_PTR (Timo Kreuzer)
  • Merge from amd64-branch: (Timo Kreuzer)
  • 44036 (sserapion) (Timo Kreuzer)
  • Seems that windows cares about manifests and a mismatched processor architecture is not good. Fix amd64 paint in windows. (Timo Kreuzer)
  • 44772 (sserapion) (Timo Kreuzer)
  • Fix warning cast to 'unsigned int' loses precision. (Timo Kreuzer)
  • Merge from amd64-branch: (Timo Kreuzer)
  • 34803 (sserapion) (Timo Kreuzer)
  • Fix more warnings. (Timo Kreuzer)
  • Convert pciidex to use spec file. (Timo Kreuzer)
  • 34864 (tkreuzer) // checkme vielleicht schon gemerged? (Timo Kreuzer)
  • Katayama Hirofumi: Create GUID instead of hardcoding to 0 every time. (Aleksey Bragin; #5364)
  • Katayama Hirofumi: Use a real computer name instead of an empty string when reporting events in ReportEventA and W. (Aleksey Bragin; #5358)
  • Remove unused code. (Eric Kohl)
  • Move event tracing functions to the proper file. (Eric Kohl)
  • Implement _osplatform (Sylvain Petreolle)
  • Import _makepath_s and _wmakepath_s from Wine. (Sylvain Petreolle)
  • Passes msvcrt data and dir tests. (Sylvain Petreolle)
  • LookupAccountSidA: (Eric Kohl)
  • Change variable prefixes according to the variable type. (Eric Kohl)
  • Initialize Unicode strings after the call to LookupAccountSidW because the string length is not set properly otherwise. (Eric Kohl)
  • Add cmbatt.sys, battc.sys, and battery.inf to bootcd (Cameron Gutman)
  • We still need to implement compbatt.sys (Cameron Gutman)
  • PS: Janderwald, you stole my commit number ;) (Cameron Gutman)
  • Fix several compiler issues on my main build box. Some of the Unicode translations in kernel32 fail to compile, while other libraries don't build because old C library names (without the underscore) are used. (sir_richard)



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



  • Miscellaneous implementations and forwards. (James Tabor)
  • Reset a services thread and process ids when the service has been stopped. Fixes one more test. (Eric Kohl)
  • acivate server based search for doxygen (Danny Götte)
  • Update Doxyfile to version 1.6.2 with the following changes: (Timo Kreuzer)
  • INHERIT_DOCS enabled (Timo Kreuzer)
  • SEPARATE_MEMBER_PAGES enabled: will prevent incredible huge html files generated from large headers. (Timo Kreuzer)
  • Add *.cc and *.hxx extensions (Timo Kreuzer)
  • REFERENCED_BY_RELATION enabled (Timo Kreuzer)
  • VERBATIM_HEADERS disabled (Timo Kreuzer)
  • ENABLE_PREPROCESSING enabled, so we can see macros, too (Timo Kreuzer)
  • Quickfix the region leak, by commenting out the user mode part in DeleteRegion. Thanks to Caemyr for finding the guilty revision. (Timo Kreuzer)
  • Clean up RPCSS. (Dmitry Gorbachev)
  • Split the initial status code for drivers and services. (Eric Kohl)
  • You can easily test services by uncommenting '#define USE_SERVICE_STATUS_PENDING'. (Eric Kohl)
  • Adding batch support for ExtSelectClipRgn and update to the batch object structure. (James Tabor)
  • GetFontUnicodeRanges was introduced in Windows 2000, (Love; #5031)
  • Use default LOGFONT in EnumFontFamilies if none is given. (Jérôme Gardou)
  • 3000 gdi32:font winetests (Jérôme Gardou)
  • Fix parameter check in GetTextExtentExPointA/W. (Kamil)
  • Don't destroy the heap when calling GetSystemPaletteEntries. Note to whoever wrote "//make this work": (&array[x]) is defintely not equal to (&array + x). This is why we don't use pointers-to-arrays, among other reasons. (sir_richard)
  • Reformat GetSystemPaletteEntries away from grotesque 5-space identation (who does that?). (sir_richard)
  • Optimize GetSystemPaletteEntries by not zeroing over fields that get overwritten anyway. (sir_richard)
  • Simplify loop control, remove not-needed local variable in GetSystemPaletteEntries. (sir_richard)
  • Improvements to NtAdjustPrivilegesToken part 3: (Eric Kohl)
  • Simplify the privilege modification code. (Eric Kohl)



  • Print maximum 128 frames. Some formatting changes. (Dmitry Gorbachev)
  • Bug fix CTRL-C handler registration/deregistration/notification, needed for correct console shutdown behavior. (sir_richard)
  • As indicated by the comment, kernel32 should always connect to the console server, even for non-console apps (the latter will just basically ignore the request). This is needed to (at minimum) setup the Ctrl-C handler, as otherwise, only "true console" apps will have a handler, even though internally, all apps have such a handler. This is what CSRSS needs to call internally for shutting down non-GUI apps, for example. (The default CTRL-C handler will just call ExitProcess). (sir_richard)
  • Remove debug output. (sir_richard)
  • GetConsoleProcessList is implemented, this prevents the console winetest from crashing (Kamil Hornicek)
  • sync parameter validation for SearchPath with wine 1.1.40 (Christoph von Wittich)
  • reduce diff to wine (Christoph von Wittich)
  • Add some amd64 exports (Timo Kreuzer)
  • merge from amd64 branch: (Timo Kreuzer)
  • 38333 (Timo Kreuzer)
  • Add RtlAddFunctionTable export for amd64 (Timo Kreuzer)
  • Daniel Zimmerman: Update GetShortPathNameW to Wine (Gregor Schneider; #4553)
  • Code committed in revision 846 was lazily initializing command line options with a first call to GetCommandLine. However, this is not really thread-safe. Move initialization to DLL_PROCESS_ATTACH, where it should actually happen. (Aleksey Bragin; #5347)
  • Revert 47139 by cgutman: Don't try to be smarter than usbdriver's author. He especially put registering HCD interface before so that any error handling function would work correctly and free up allocated resources. Fixes one crash in VMWare. A proper solution for the problem which 47139 tried to "fix" will be committed next. (Aleksey Bragin)
  • SwitchToFiber: instead of doing a ret to the return address on the stack (which wouldn't work for a newly created fiber) store the returnaddress in the Eip field old fiber context and do a jmp to the Eip of the new fiber. (Timo Kreuzer)
  • BasepInitializeContext: set the Eip member of the Context to BaseFiberStartup for fibers (Timo Kreuzer)
  • CreateFiberEx: initialize the fiber context, instead of an unused context on the stack. (Timo Kreuzer)
  • BaseFiberStartup: Use GetCurrentFiber, not GetFiberData to get the current fiber. (Timo Kreuzer)
  • Fixes kernel32_wintest fiber (Timo Kreuzer)
  • OpenConsoleW: Don't crash when wsName is null (Giannis Adamopoulos)
  • Protect GlobalLock, GlobalUnlock and GlobalSize with SEH, use IsBadReadPtr in GlobalLock. Inspired by wine code. Fixes user32_winetest dde crash. (Timo Kreuzer)
  • add newinflib to arm builds (Timo Kreuzer)
  • Implement UTF7 Support. (Katayama)
  • Perform case insensitive comparison against the selected language id. (Sylvain Petreolle)
  • GetConsoleProcessList: Use capture buffer; only copy IDs if buffer has enough room for all of them; return total number of processes. (Jeffrey Morlan)
  • WaitNamedPipeW: Free Unicode buffer when leaving the function (Gregor Schneider)
  • ReplaceFileW: (Gregor Schneider)
  • Initialize Unicode string structure, so that only allocated buffers are freed when leaving the function (Gregor Schneider)
  • Fixes several heap warnings in kernel32:file test (Gregor Schneider)
  • Return nothing from InternalCopyDeviceFindDataA/W functions (Gregor Schneider)
  • Add missing info needed for the comctl32 sync (Ged Murphy)
  • This part includes alpha support for imagelists and tango icons for the common toolbars (Ged Murphy)
  • I'll do the second part later today. It has a propsheet bug and I'm a bit busy at the mo. (Ged Murphy)
  • Move UTF8 to the bottom of the file. Thanks to Christoph for the tip (Ged Murphy)
  • DWORD -> SIZE_T in ReadProcessMemory (Timo Kreuzer)
  • Merge r34770, r36475, r36990, r37019, r43852, r43952, r43954, r43979, r43981, r46868 from amd64 branch: (Timo Kreuzer)
  • Multiple ULONG / SIZE_T fixes (Timo Kreuzer)
  • Use UlongToHandle / HandleToUlong to convert between DWORD ProcessId and ClientId.UniqueProcess (Timo Kreuzer)
  • implement amd64 version of _dump_context (Timo Kreuzer)
  • Make IsConsoleHandle 64bit safe (Timo Kreuzer)
  • Update kernel32.pspec with a lot of Win7 (commented out) and some amd64 specific exports, add some more comments and fix sorting (Timo Kreuzer)
  • Implement amd64 version of BaseThreadStartupThunk and BaseProcessStartThunk (Timo Kreuzer)
  • Stub amd64 version of SwitchToFiber (Timo Kreuzer)
  • Implement amd64 version of BasepInitializeContext (Timo Kreuzer)
  • Fix a check in ContainsPath. (Gabriel; #5478)
  • While working on the CMAKE branch, Amine and myself discovered a rather serious issue in kernel32 (and perhaps other libraries as well). Unlike rbuild, CMake does not allow you to export non-existant DLL functions (try it: add "poopyhead" in kernel32's exports under RBuild, and will it export "poopyhead", God knowing what that will actually link to). (sir_richard)
  • As an additional feature on top of the "allow non-existing functions to be exported" "feature", because rbuild generates and links STDCALL function names without the proper decoration (vs. enforcing decoration at linking, but only removing it at export-time), this allows the definition (as an export) of a STDCALL function that is completely different from the actual function itself. (sir_richard)
  • For example, the 5-parameter Foo function is normally Foo@20, while the 3-parameter Foo function woudl be Foo@12. Linking one against the other would fail (say, 2 parameters were added to Foo in a newer version). However, under RBUILD, both of these would appear as "Foo", and the linker/compiler would happilly connect the caller of Foo@3 (that has pushed 3 parameters) to the receiving side of Foo@5 (that is about to pop 5 parameters). (sir_richard)
  • Even -if- decorations WERE to be applied, Foo@12 would STILL succeed, because of the first feature, which would enable the export of Foo@12 even though no such function exist. (sir_richard)
  • In a further, bizare, twist of fate, the behavior of this RBUILD "feature", when the target function is not found, is to link the exported DLL TO ITSELF. (sir_richard)
  • Therefore, one can see how, previously to this patch, kernel32.dll would import a dozen functions from itself (all the non-existing functions). (sir_richard)
  • To really seal the deal, the behavior of exported functions used by kernel32, but that are actually forwarded to another DLL deserves a special mention. (sir_richard)
  • GetLastError, for example, merely forwards to RtlGetLastWin32Error, so it is normal behavior to use a #define in the C code so that all internal calls to the function are routed correctly. (sir_richard)
  • This did not happen, so instead, kernel32 tried importing/linking/exporting GetLastError, but this symbol is not found in the binary, because it is only a forwarder. (sir_richard)
  • This caused kernel32 to import from itself (the behavior when an exported symbol is not found). When importing from itself, the loader would now find the _forwarded_ for GetLastError, and correctly link with ntdll. (sir_richard)
  • What should be a one-liner of assembly (inline TEB access) thus became a triple-call indirection (GetLastError@0->StubLastError@0->__impGetLastError@0->__impRtlGetLastWin32Error->RtlGetLastWin32Error. (sir_richard)
  • While analyzing these issues, we also realized a strange macro SetLastErrorByStatus that manually tried to perform what there already exists a function for: RtlSetLastNtStatusFromWin32Error. (sir_richard)
  • And, in an exciting coda, we also realized that our Server 2003 Kernel32 exports more than a dozen Windows 95 APIs, through an auto-stub generation mechanism within winebuild, that gets linked as an object behind the scenes. (sir_richard)
  • Removed all Win95 exports, cleaned up exports. (sir_richard)
  • Fixed up set/get error macros by making them inline and/or calling the correct ntdll function. (sir_richard)
  • Removed bizare calls to Wine-internal/specific APIs from our core Win32 DLL. (sir_richard)
  • Wrote stubs for all functions which should be exported, and set the correct number of parameters for them. (sir_richard)
  • Kernel32 is smaller, loads faster, does not export Windows 95 functions, does not export non-existing functions, and does not import from itself anymore. (sir_richard)
  • Note: This is one of the many failings of RBUILD the CMAKE system has helped us discover. I believe these issues are serious enough to warrant an immediate sync with trunk, but rest assured, there are many more completely broken, infinitely-regressing things that we discovered while switching to CMAKE. (sir_richard)
  • Aleksey wants debug channels, I agree this is the way forward. Leverage existing NT infrastructure to enable Windows-compatible debug channel support, instead of using a UNIX-based 3rd party library. Same debug channel names as before have been re-added, but using NT Debug Filters. (sir_richard)
  • Go back to spec file. Don't worry it's fixed. (Timo Kreuzer)
  • Convert default locales to actual locale identifiers, before passing to IsValidLocale(). Fixes corrupted file size strings in explorer. (Rafal Harabien; #5557)


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


  • Zero the entire struct not just the lpNetworkEvents member (Cameron Gutman)
  • Write the error codes returned from AFD to the iErrorCode array (Cameron Gutman)
  • Fixes hundreds of ws2_32_winetest sock failures (only 104 failures now) (Cameron Gutman)
  • Dedicated to Physicus (Cameron Gutman)
  • Remove an incorrect change (Cameron Gutman)
  • Create a new function called TranslateNtStatusError to translate NTSTATUS to winsock error codes (Cameron Gutman)
  • Call the TranslateNtStatusError in MsafdReturnWithErrno and also use it to translate AFD's poll event error codes (Cameron Gutman)
  • Pass a valid pointer for lpErrno to WSPBind when performing an implicit bind (Cameron Gutman)
  • Remove the hack in MsafdReturnWithErrno for dealing with stupid callers that provide don't provide a valid Errno pointer (Cameron Gutman)
  • Fix a broken call to WSPBind that I missed in r47378 (Cameron Gutman)
  • Fix many times where we wait for an operation but don't update our status and return if it failed (Cameron Gutman)
  • Fix the overlapped pending case in writing which was completely broken (callers would detect an error but GetLastError would return 0 because we didn't store the error in the lpErrno variable) (Cameron Gutman)
  • Fix many times where we pass a pointer to an event that we close without waiting (Cameron Gutman)
  • Fix a bug in WSPEnumNetworkEvents when we would set WSAEINVAL in the lpErrno variable but not return SOCKET_ERROR so the error got ignored (Cameron Gutman)
  • Remove an unintended change (Cameron Gutman)
  • Use a linked list to store the socket information instead of allocating a massive array (1024 elements!) for each process in DllMain to hold all of the pointers (Cameron Gutman)
  • Fix a massive memory leak (free the socket information which we leaked for every socket we allocated) (Cameron Gutman)
  • This improves performance because we don't have to look through an array of stale socket information pointers (which we never actually removed from the socket information array in the old code) and the new code queues the socket information at the head of the list which makes newer sockets faster to access (Cameron Gutman)
  • I hate making the same mistake twice in one day (Cameron Gutman)
  • Validate that we found the corresponding socket information in our socket information list (Cameron Gutman)
  • Fixes a crash in Firefox 2 when it tries to call accept() with a closed socket (Cameron Gutman)
  • Fix 2 more callers who don't pass a valid lpErrno pointer (Cameron Gutman)
  • Check the return value of WSPSocket (Cameron Gutman)
  • Return WSAEWOULDBLOCK if there are no connections that can be accepted instead of silently returning 0 which is not INVALID_SOCKET so the caller treats it as a valid socket pointer and passes it to other functions which caused wide-spread mayhem since we never checked whether the socket handle the caller passed was valid until my last commit (Cameron Gutman)
  • Fix a bug in GetSocketStructure that resulted in us missing the last entry of the list (Cameron Gutman)
  • Remove an "optimization" which was supposed to find an unused socket entry (which it almost never did) but now just corrupts the linked list by trashing our NextSocket pointer (Cameron Gutman)
  • Add locking to protect the socket list (Cameron Gutman)
  • Handle the case (again) where we get passed an invalid lpErrno pointer to a WSP function (Cameron Gutman)
  • Fixes some crashes I encountered when running Opera 9 (Cameron Gutman)
  • Update lpcbBytesReturned when FIONREAD is called (Cameron Gutman)
  • Fix the value inside lpErrno when XxxSocketInformation() fails (Cameron Gutman)
  • Pass the unrecognized IOCTLs to the winsock helper (no behavior change for this yet because wshtcpip's WSHIoctl is unimplemented) (Cameron Gutman)
  • I hate catching these things as the commit is going out (Cameron Gutman)


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


  • Enable exports for _gmtime64, _localtime64, _time64 (Timo Kreuzer)
  • enable exports for __pctype_func, __pwctype_func, _wctype (Timo Kreuzer)
  • Convert to spec. (Samuel)
  • bring back _swprintf export (Timo Kreuzer)
  • export _ftol only on i386 (Timo Kreuzer)
  • fix _setjmp (2nd argument) and redirect setjmp (Timo Kreuzer)
  • Add exports for ceilf, cosf, logf (Timo Kreuzer)


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




  • Fix random hang in livecd while booting (Dmitry Gorbachev ; #4142)
  • Don't restart in second stage if the user presses ESC (Gregor Schneider; #4960)
  • Set registry values 'PathName' and 'SystemRoot' in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion. (Eric Kohl ; #4414)


  • Add corrected behavior for SetWindowRgn, delete region object after setting windows region. . (James Tabor; #4980)
  • After a successful call to SetWindowRgn, the system owns the region specified by the region handle hRgn. The system does not make a copy of the region. Thus, you should not make any further function calls with this region handle. In particular, do not delete this region handle. The system deletes the region handle when it no longer needed. (James Tabor; #4980)
  • References : http://msdn.microsoft.com/en-us/library/dd145102(VS.85).aspx (James Tabor; #4980)
  • Trap handlers in C patch 6 of X: (sir_richard)
  • Keyboard hotkey issues need looking after. , 1009, 3560 and 4609. (Kusanagi; #642)
  • Input.c header modified. (Kusanagi; #642)
  • Revert 44988, fix crash in win user32 wine test. (James Tabor)
  • Make ValidateRect a direct call, update related. Update UpdateWindow and some code sorting. Getting ready for WND switch. (James Tabor)
  • Remove WINDOWOBJECT_NEED_INTERNALPAINT from service. (James Tabor)
  • More movement to WND support. (James Tabor)
  • ReactOS uses DCX_KEEPCLIPRGN to prevent the deletion of regions so user support can manage them. Comctl32 depends on this since it does not delete the regions after calling DefWindowProc. (James Tabor)
  • Remove 16 bit'isms. Added back removed code and commented it out with added notes. (James Tabor)
  • Jason Edmeades : Combo should preselect all text on first WM_SETFOCUS. (James Tabor)
  • Kusanagi Kouichi : Consolidate empty string. (James Tabor)
  • Alexandre Julliard : Don' t forward WM_SETCURSOR to the desktop window. Modified. (James Tabor)
  • Dmitry Timoshkov : In a DLGTEMPLATEEX resource dialog version goes before signature. (James Tabor)
  • Due to truck freeze, there might have slipped in miscellaneous patches. (James Tabor)
  • Fail HwFindAdapter if VESA is disabled (Cameron Gutman)
  • This should allow VGA to take over but it doesn't work due to a bug in videoprt (Cameron Gutman)
  • Silent traces (Johannes Anderwald)
  • Andrew Nguyen : Ensure That WM_INITDIALOG passes the first tabstop control handle to the dialog procedure. (James Tabor)
  • Henri Verbeet : Also show dialogs right after a WM_TIMER message. (James Tabor)
  • Fix a crash in user32 winetest msg. (James Tabor)
  • Fix include directories (Hervé Poussineau)
  • Fix timer crash when calling proc. (James Tabor)
  • Link SCSI miniport drivers only to scsiport (Hervé Poussineau)
  • merge r46045 (Timo Kreuzer)
  • Send WM_CANCELMODE in EnableWindow. (James Tabor)
  • reduce diff to wine (Christoph von Wittich)
  • reduce diff to wine (Christoph von Wittich)
  • Add a hack to disable ACPI if VMware is detected (Cameron Gutman)
  • This hack circumvents the main blocker that prevents enabling ACPI in trunk (Cameron Gutman)
  • Define NDEBUG and demote several non-critical debug prints to DPRINT (Cameron Gutman)
  • Don't acquire the mutex in the ISR handler because we're at a raised IRQL (Cameron Gutman)
  • Fixes VirtualBox Additions with ACPI enabled (Cameron Gutman)
  • Check that the device number is not invalid (Cameron Gutman)
  • ACPI now crashes later on VMware (Cameron Gutman)
  • Check that the memory location that we are trying to read is valid (Cameron Gutman)
  • Remove the VMware hack (Cameron Gutman)
  • ACPI works on all tested VMs now (QEMU, VirtualBox, and VMware) (Cameron Gutman)
  • Just a resource code issue remains and prevents us from enabling ACPI by default (Cameron Gutman)
  • Set the resource pointer back to the start of the list before looping a second time (Cameron Gutman)
  • Remove the duplicate OSL (Cameron Gutman)
  • Disable more debug prints (Cameron Gutman)
  • ROS with ACPI has been booted successfully on VirtualBox (with additions), QEMU, and VMware (Cameron Gutman)
  • Enable ACPI (Cameron Gutman)
  • Please send all complaints to roswarrior ;) (Cameron Gutman)
  • reduce diff to wine (Christoph von Wittich)
  • reduce diff to wine (James Tabor)
  • More fix of TEB::KernelCallbackTable usage (Timo Kreuzer)
  • Merge from amd64 branch: (Timo Kreuzer)
  • 45124 (Timo Kreuzer)
  • NtUserTranslateMessage: HKL -> UINT in 2nd parameter (Timo Kreuzer)
  • 45126 (tkreuzer) (Timo Kreuzer)
  • Sébastien Ramage : End scrollbar tracking if the mouse capture is lost. (James Tabor)
  • Reduce diff to wine. (James Tabor)
  • Fix SetSysColorTemps prototype and implementation for 64 bit compatibility. (Aleksey Bragin)
  • Fix SetSysColorTemps prototype and implementation for 64 bit compatibility, part 2/2. (Aleksey Bragin)
  • Samuel Serapion (Aleksey Bragin)
  • Assorted rbuild syntax fixes. (Aleksey Bragin)
  • Samuel Serapion (Aleksey Bragin)
  • Add IdlInterface module type. (Aleksey Bragin)
  • Once again, fix INF files (Matthias Kupfer)
  • Revert r46582, to see if it fixes the regtests (Timo Kreuzer)
  • Merge changes to ketypes.h and ntimage.h from the last revert back. (Timo Kreuzer)
  • Merge back most changes to ntifs.h from lastt revert (Timo Kreuzer)
  • Add Wow64* functions declarations to winbase.h (Aleksey Bragin)
  • Export Wow64* functions in kernel32, because 32bit Windows also exports them. (Aleksey Bragin)
  • Dmitry Timoshkov : Do not ask DrawFrameControl() to modify the passed in rectangle. (James Tabor)
  • Nikolay Sivov : Set WM_EXITMENULOOP wParam same way as for WM_ENTERMENULOOP. (James Tabor)
  • If MSDN says "BOOLEAN", let it be "BOOLEAN". Fixes build. (Aleksey Bragin)
  • Fix uninitialized variable (Timo Kreuzer)
  • Pass a pointer to a structure, that holds the CallBack procedure and data, as the 5th parameter to NtUserMessageCall. (Michael Martin)
  • Fix a bug In User32CallSendAsyncProcForKernel, the ArgumentLength is the size of SENDASYNCPROC_CALLBACK_ARGUMENTS. (Michael Martin)
  • Remove a reactos only export (PrivateCsrssInitialized) (Giannis Adamopoulos)
  • Don't call NtUserGetClassLong (Giannis Adamopoulos)
  • Move implementation of AnyPopup to user mode (Giannis Adamopoulos)
  • Fix a small bug in GetParent and in IsChild (Giannis Adamopoulos)
  • ntstatus.h is in psdk, not in ddk folder. (Timo Kreuzer)
  • How did this work?) (Timo Kreuzer)
  • Merge from amd64 branch: (Timo Kreuzer)
  • 36987: (Timo Kreuzer)
  • Fix user32 compilation errors. (Samuel Serapion) (Timo Kreuzer)
  • 36988: (Timo Kreuzer)
  • Make user32 compile and link by defining Get/SetClass/WindowLongPtrA/W (Stefan Ginsberg) (Timo Kreuzer)
  • 41480: (Timo Kreuzer)
  • Fix 64bit issues, add a wine compatibility hack (Timo Kreuzer) (Timo Kreuzer)
  • 41540: (Timo Kreuzer)
  • Make parameters for NtUserCallOneParam and NtUserCallTwoParam DWORD_PTR instead of DWORD (Timo Kreuzer) (Timo Kreuzer)
  • 43965: (Samuel Serapion) (Timo Kreuzer)
  • Fix several user32 warnings. (Timo Kreuzer)
  • As a bonus implement GetWindowLongPtrA/W. (Timo Kreuzer)
  • Tested to work in trunk. (Timo Kreuzer)
  • 43992: (Timo Kreuzer)
  • 45124: (Timo Kreuzer)
  • 47472: (Timo Kreuzer)
  • Remove wine hack and allow user32 to compile again. (Samuel Serapion) (Timo Kreuzer)
  • 47878: (Timo Kreuzer) (Timo Kreuzer)
  • Use UlongToHandle instead of LongToHandle (Timo Kreuzer)
  • case to ULONG_PTR instead of using HandleToUlong (Timo Kreuzer)
  • SetSysColorsTemp: don't truncate the pointer sized n value, remove a comment (Timo Kreuzer)
  • IntGetClsWndProc: fix a bug (Timo Kreuzer)
  • IntGetWindowLong: pass !unicode to IntGetWndProc (Timo Kreuzer)
  • 47882: (Timo Kreuzer)
  • Make the uiLo and uiHi members of the KMDDELPARAM structure UINT_PTRs (Timo Kreuzer) (Timo Kreuzer)
  • Rewrite support of cursors, icons and bitmaps in user32.dll, based from WINE implementation. (Jérôme Gardou)
  • One file to rule them all. (Jérôme Gardou)
  • Now user32::cursoricon winetests don't crash anymore. (Jérôme Gardou)
  • Partly merge 48026 (Jérôme Gardou)
  • There is no exported "CopyCursor", it's a macro. (Jérôme Gardou)
  • There is no "NtUserCreateCursorIconHandle" function in win32k. Use correct functions to create a cursorIcon handle. (Jérôme Gardou)
  • Bring in WINE's CreateIconIndirect (Jérôme Gardou)
  • WINE creates an alpha bitmap on icon creation, we do it when drawing it, so we need to create a bitmap which holds alpha information. (Jérôme Gardou)
  • Add error handling to CreateIconIndirect. (Jérôme Gardou)


  • 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 support for reading the hosts file (Cameron Gutman)
  • Fix an off-by-one error which prevented reading the last value in the services file (Cameron Gutman)
  • Fixes bug 4410 and bug 4880 (Cameron Gutman)
  • implement WSAAddressToStringA/W (taken from wine) (Christoph von Wittich)
  • set LastError to 0 when WSASendTo was successful (Christoph von Wittich)
  • Update the catalog ID when we locate the matching provider (Cameron Gutman)
  • mswsock from aicom-network-branch can successfully create sockets now (Cameron Gutman)
  • DWORD -> DWORD_PTR (Timo Kreuzer)
  • Fix CryptReleaseContext parameter, wine uses an outdated version (< NTDDI_WINXP) (Timo Kreuzer)
  • Fix buffer overrun in getservbyname. (Alexander)
  • Check the return value of WSPSelect instead of the error number because the error number doesn't have to be initialized if the function doesn't return SOCKET_ERROR (Cameron Gutman)
  • Fix a crash when running with ws2_32 debugging on (Cameron Gutman)
  • Create a temporary variable and pass that to WSAIoctl for the bytes returned value instead of passing argp and corrupting the value we just retrieved (Cameron Gutman)






  • Include ntifs, instead of ntddk, needed by NDK (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)


  • New PCI driver, for the future. Needed for embedded support (ARM/etc) and anything other than your 3 emulators and neighboor's custom-made-to-barely-boot-your-OS machine. (sir_richard)
  • Fix the Vector value of the interrupt resource (Cameron Gutman)
  • Actually set the device to use the interrupt that the PnP manager gave us (Cameron Gutman)
  • Handle IRP_MN_QUERY_DEVICE_RELATIONS for TargetDeviceRelation for PCI's child PDOs (Cameron Gutman)
  • Fix a crash that occurs when a device is started which requires no resources (Cameron Gutman)
  • Don't set DO_BUS_ENUMERATED_DEVICE on child PDOs because the PnP manager does it for us (Cameron Gutman)
  • Forward IRPs to our PDO instead of just completing them (Cameron Gutman)
  • Handle IRP_MN_START_DEVICE on the way back up the stack (allows the PDO code to assign resources to the bus) (Cameron Gutman)
  • Add some synchronous IRP forwarding copied from i8042prt (Cameron Gutman)
  • Store correct bus and slot information in resource lists that we give in response to IRP_MN_QUERY_RESOURCES and IRP_MN_QUERY_RESOURCE_REQUIREMENTS (Cameron Gutman)
  • Fixes bug 4354 (Cameron Gutman)
  • Implement IRP_MN_REMOVE_DEVICE handling for FDOs (Cameron Gutman)
  • Add the 40 different PCI erratas ("hack flags") that Windows can apply to broken PCI devices. eVb's driver knowss to apply these by parsing the PCI\Parameters list. These are the actual internal symbolic names used by Microsoft, which accidentally leaked out in the Vista Errata Manager .INF file. (sir_richard)
  • Add the PCI_ENABLE_BRIDGE definitions that can be present in PCI_COMMON_CONFIG/type1/BridgeControl. Microsoft does not document these in the public PCI headers, but the definitions were found in the Singularity headers. eVb's PCI driver uses these. (sir_richard)
  • Add PCI IRQ Routing Table structure to Shared, Internal PCI Header (based off the Microsoft Spec and the Apple SMBIOS Header). (sir_richard)
  • Remove HAL-internal PCI definitions from the existing "Shared/Internal" PCI Header which existed in NTOS's private include directory, and move them to HAL-internal headers. (sir_richard)
  • Remove remaining shared PCI definitions from that same header, and put them in the new Shared/Internal PCI Header. (sir_richard)
  • Remove duplicated PCI definitions from FreeLDR, and use thw new Shared/Internal PCI Header. (sir_richard)
  • Add pciclass.rc to use the pciclass.mc/res-generated file by MC. eVb can now start committing his driver. (sir_richard)
  • Update hack flags. (sir_richard)
  • Joint patch (sir_richard)


  • Fix 17 different bugs in the new PCI driver. ACPI and PCI IRQ Routing table detection now works, ACPI table mapping doesn't crash anymore, PciGetRegistryValue doens't always fail, some DPRINTs fixed, added missing "continues", "breaks", and early-"returns". Fixed missing, or extra "!"s. If you're going to try being clever with do while FALSE loops, get 'em right! (sir_richard)
  • The driver now works up to the point where eVb has last committed his code. (sir_richard)
  • By sir_richard: : - Implement PciIsSlotPresentInParentMethod for ACPI query, and PcoDecodeEnable utility function. (sir_richard)
  • Implement PciConfigureIdeController based on WDHC Whitepaper "How Windows Switches a Controller to Native Mode". Check for PciEanbleNativeModeATA in registry, InitSafeBootMode, and call the ACPI driver to evaluate if NATA is present on the slot. Only configure the controller if both channels support native mode, as this is a Windows restriction. (sir_richard)
  • Implement PciApplyHacks for enumeration and resource update cases. In the first case, we handle legacy DEC Alpha Intel i82375 and i82378 PCI-to-(E)ISA bridges with invalid class codes. In the second, we configure IDE controllers for Native mode, except the OPTi Viper-M, which is known to cause issues. We also support cards with legacy VGA decodes by telling the arbiter to enable full access to the rangesm and finally we completely disable the decodes on Compaq PCI Hotplug Controllers (Revision 17) on PAE systems, as they have bugs handling 64-bit addresses. Finally, on resource updates, we apply a vendor-specific errata to the IBM 20H2999 PCI Docking Bridge (Hotplug) used on Thinkpad 600 Series laptops, and we attempt to avoid issues that can happen on certain devices that are plugged into an ICH1/2/3/4 Intel Hub when it has been configured to do subtractive decode. Full information on these workarounds can be seen in the comments. Finally, we also enable CardBUS devices for ACPI-compliant mode, by crossing out the LegacyBaseAddress in the CardBUS Type 2 PCI Configuration Header. (sir_richard)
  • Miscelleaneous code cleanups. (sir_richard)
  • By eVb: More PciScanBus support, for debug PCI caps that driver use are dump, and detect nonBIOS configure device (spec is said that CacheLineSize != 0, LatencyTimer != 0 (on PCI-X, != 64)), if found NeedsHotPlugConfiguration to be set (sir_richard)
  • By eVb: Support PCI_HACK_VIDEO_LEGACY_DECODE (call ario_ApplyBrokenVideoHack, but no arb support to do work) (sir_richard)
  • Stefan Ginsberg: Fix a typo in the if expression. (Aleksey Bragin)


  • Add a mostly stubbed PCMCIA driver (Cameron Gutman)
  • pcmcia.c is complete but fdo.c and pdo.c are completely unimplemented (Cameron Gutman)
  • Check if the IOCTL interface should be enabled (not used yet) (Cameron Gutman)



  • MAXIMUM_VOLUME_LABEL_LENGTH is in bytes, not in characters. Fix struct definition and access beyond the buffer. Spotted by Carlo Bramini. (Aleksey Bragin; #5505)
  • Trim trailing spaces from the volume label name, instead of stopping at the first encountered space. Fix by Carlo Bramini. (Aleksey Bragin; #5505)
  • Working with Pierre Schweitzer for yet another NonPaged Pool corruption fix. When copying VolumeLabel the VolumeLabelLength is in Unicode, so theres no need to mulitply it by size of WCHAR. (Michael Martin)
  • Several fixes for directory information query. (Pierre)
  • Fixed a null access memory under certain circumstances. (Pierre)
  • Added support for media ejection. (Pierre)


  • Added use of FsRtlNotifyVolumeEvent() when successfully mounting a volume (Pierre Schweitzer)
  • Finally, purpose of that patch is to implement volumes events notifications. Behaviour and implementation is correct till PpSetCustomTargetEvent(). The PnP notifications manager should be rewritten to match Microsoft's one. Furthermore, it appears that in Windows, those notifications are asynchronous. (Pierre Schweitzer)
  • Check PathName length before accessing it. This fixes ntdll_winetest file test BSOD. But the test crashes a bit farther. (Pierre Schweitzer)
  • Import DnsNameCompare, DnsValidateName, DnsRecord* functions from Wine. (Samuel)
  • Fixes dnsapi:name tests. (Samuel)
  • Forgot to svn add this in previous commit, my bad. (Sylvain Petreolle)
  • Fix a check in VfatCreateFile. (Pierre; #4571)
  • Pierre Schweitzer (Aleksey Bragin)
  • Fix volume opening on FAT volume. Commented out a directory check as it doesn't match realized tests, in spite of what's in WDK. (Aleksey Bragin)
  • Make our FAT driver PNP aware. (Pierre)
  • On PNP requests it should handle, it will return STATUS_NOT_IMPLEMENTED. (Pierre)
  • On the others, it will pass them to lower driver. (Pierre)
  • This is the first step outside the kernel into getting IoGetRelatedTargetDevice (and so notifications) working. (Pierre)
  • It doesn't work at the moment, as class2 doesn't handle PNP. (Pierre)
  • Fix for a stupid mistake" (Pierre)
  • Fixed calls to CcMapData(), CcPinRead(). (Pierre)
  • Fixed an endless loop in FCB management under certain circumstances. (Pierre)


  • Implement close and cleanup infrastructure. (Aleksey Bragin)
  • Add necessary FCB and VCB counters. (Aleksey Bragin)
  • Add missing op and file locks initialization. (Aleksey Bragin)
  • A lot of small cleanups, improvements, and other things, bringing fastfat_new much closer to a minimally working state. (Aleksey Bragin)
  • Implement opening an existing DCB. (Aleksey Bragin)
  • Add a bunch of useful macros and helper functions and use them throughout the code. (Aleksey Bragin)
  • Implement in-memory setendoffile set information class. On-disk to be done. (Aleksey Bragin)
  • Implement user fs ctrl wrapper with stubs. (Aleksey Bragin)
  • Fill up QueryVolumeInfo with classes it should handle. Silence up a warning about classes it should reject. (Aleksey Bragin)
  • Plug in a commented out notification call in case of cleanup. (Aleksey Bragin)
  • Implement a case of device info query. (Aleksey Bragin)
  • Implement lock control. (Aleksey Bragin)
  • Implement asynchronous and delayed close operations. (Aleksey Bragin)
  • Fix a logical bug in FatiClose code, which led to always closing the file object (and freeing respective FCB/VCB/CCB), and then checking flags and queuing a delayed close. Instead, it should only try to close if it's not marked as a delayed close. (Aleksey Bragin)
  • Support stuff added (queues, mutex for closing lists, etc). (Aleksey Bragin)
  • Misc cleanup, debug silencing. (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)





  • Fix IID_IUnknown definition 2/X (Johannes Anderwald)
  • Fix a malicous bug in KsAddItemToObjectBag which caused inifite loops while iterating through object bags (Johannes Anderwald)
  • Use a different mutex than the device mutex for object bags (Johannes Anderwald)
  • Initialize device / object bag mutex when initializing the device (Johannes Anderwald)
  • Initialize object bag lists when initializing the device (Johannes Anderwald)
  • Set device / system power state before calling device Add's routine (Johannes Anderwald)
  • Check if object driver extension has already been allocated in KsInitializeDevice (Johannes Anderwald)
  • Hack KsFilterFactoryUpdateCacheData to return STATUS_SUCCESS (Johannes Anderwald)
  • PinnacleSys PCTV DVB-T tv tuner now successfully initializes and registers its device interfaces (Johannes Anderwald)
  • Enable registered device interfaces when device successfully initializes (Johannes Anderwald)
  • Fix totally broken KsFilterFactorySetDeviceClassesState implementation (Johannes Anderwald)
  • Fix a bad cast in KsGetDevice which led to a crash (Johannes Anderwald)
  • Store IKsFilter in create item storage which is needed later by the pin property handler (Johannes Anderwald)
  • There is no need to copy the existing pin factories, just add pin factories which are added dynamically (Johannes Anderwald)
  • Handle possible null values for node types & names (Johannes Anderwald)
  • Put allocated objects into object bags which can be released later automatically (Johannes Anderwald)
  • Fix access IKsFilterFactory interface in IKsFilterFactory_Create (Johannes Anderwald)
  • graphedt can now 'open' tv tuner and enumerate pins / communication / interface. Code required for devenum not yet commited (Johannes Anderwald)
  • Refactor & bugfix handling of KSPROPERTY_PIN_INTERFACES (Johannes Anderwald)
  • Refactor & bugfix IKsFilter_fnAddProcessPin for filter centric pins (Johannes Anderwald)
  • Fix handling of filter pin property sets (Johannes Anderwald)
  • Copy filter pin templates when filter is initialized. (Johannes Anderwald)
  • Pins are now able to instantiated but processing is pin requests is not yet implemented (Johannes Anderwald)
  • Partly implement pin property handling by using supplied pin descriptor properties (Johannes Anderwald)
  • Dynamically allocate connection format and put in pin's object bag (Johannes Anderwald)
  • Remove bogus assert as pins don't have to provide a PinDispatchCreate function (Johannes Anderwald)
  • Tuner device filter and capture device filter now successfully connect and instantiate corresponding input / output pins (Johannes Anderwald)
  • Instantiated pins use as the control mutex the mutex from the filter (Johannes Anderwald)
  • Fix KsAcquireControl & KsReleaseControl (Johannes Anderwald)
  • Fix handling of IRP_MN_QUERY_INTERFACE (Johannes Anderwald)
  • Filter centric ks filters expect an array of KSPROCESSPIN_INDEXENTRY. Allocate array when intializing filter / new pin factory is added (Johannes Anderwald)
  • Store result of pin intersection handler when result is STATUS_BUFFER_OVERFLOW (Johannes Anderwald)
  • Implement setting / retrieving of master clock (Johannes Anderwald)
  • Implement setting / retrieving pin state (Johannes Anderwald)
  • Partly implement setting pin data format (Johannes Anderwald)
  • Implement IKsReferenceClock interface (Johannes Anderwald)
  • Implement KsPinGetReferenceClockInterface (Johannes Anderwald)
  • Add sanity checks to KsGetPinFromIrp (Johannes Anderwald)
  • Partly implement handling IOCTL_KS_READ_STREAM / IOCTL_KS_WRITE_STREAM (Johannes Anderwald)
  • Supply filter property sets when an IOCTL_KS_PROPERTY request arrives (Johannes Anderwald)
  • Release again filter mutex when closing the pin (Johannes Anderwald)
  • Implement allocating a clock (Johannes Anderwald)
  • Tuner pin fails with STATUS_IO_DEVICE_ERROR when set to KSSTATE_RUN, needs more investigation (Johannes Anderwald)
  • Add hack to IKsClock_DispatchDeviceIoControl (Johannes Anderwald)
  • Store device state before calling SetDeviceState (Johannes Anderwald)
  • Partly implement KsPinGetLeadingEdgeStreamPointer, KsStreamPointerDelete, KsStreamPointerClone, KsStreamPointerAdvanceOffsets (Johannes Anderwald)
  • Implement a worker routine to dispatch read/write stream requests for pin centric filters (Johannes Anderwald)
  • Tv tuner is now able to transfer MPEG2 TS to user mode, WIP, needs more testing (Johannes Anderwald)
  • Implement IKsDevice::GetAdapterObject, IKsDevice::ArbitrateAdapterChannel (Johannes Anderwald)
  • Store device interface guid in the symbolic link list entry, which is used by KsFilterFactoryUpdateCacheData (Johannes Anderwald)
  • Implement KsFilterFactoryUpdateCacheData, which is used to dynamically propagate format / medium changes to directshow components (Johannes Anderwald)
  • Move stream pointer preparation to an own function, which is called by KsPinGetLeadingEdgeStreamPointer / KsStreamPointerClone / KsStreamPointerAdvanceOffsets (Johannes Anderwald)
  • Fix locating correct offset in KsStreamPointerScheduleTimeout, KsStreamPointerCancelTimeout, KsStreamPointerGetNextClone (Johannes Anderwald)
  • Further BDA support is on hold until ReactOS supports s/g in hal (Johannes Anderwald)
  • Disable debugging traces (Johannes Anderwald)
  • Fix tons of bugs in KsMergeAutomationTable (Johannes Anderwald)
  • Implement removing instantiated filter from filter factory when filter is about to be closed (Johannes Anderwald)
  • Fix a memory corrupion bug in KspHandleDataIntersection (Johannes Anderwald)
  • Return status success from unimplemented IKsClock_DispatchClose (Johannes Anderwald)
  • Implement handling of KSPROPERTY_PIN_CONSTRAINEDDATARANGES property (Johannes Anderwald)
  • Forward unhandled irps to lower device object (Johannes Anderwald)
  • Fix asserts in KspHandleDataIntersection. The function is still a grotesk hack (Johannes Anderwald)
  • Simply handling of property requests by merging filter properties into filter descriptor (Johannes Anderwald)
  • Implement KsMethodHandler, KsMethodHandlerWithAllocator, KsFastMethodHandler (Johannes Anderwald)
  • Fix a bug in KsPinGetFirstCloneStreamPointer (Johannes Anderwald)
  • Implement handling of KSPROPSETID_Topology (KspTopologyHandler) (Johannes Anderwald)
  • Implement dispatching of enable/disable event properties for filters/pins (Johannes Anderwald)
  • Add new pins to list of instantiated pins when a new pin is created (Johannes Anderwald)
  • Remove pin on close and decrement instance count. Fixes instantiating pin for 2nd time (Johannes Anderwald)
  • Rewrite handling of pin property/method/events (Johannes Anderwald)
  • ks is now able to deliver signal statistics in XP SP3 (Johannes Anderwald)
  • Fix typo (Johannes Anderwald)
  • Store object interface functions in KSBASIC_HEADER OuterUnknown (Johannes Anderwald)
  • Implement KsDeviceRegisterAdapterObject, KsRegisterAggregatedClientUnknown, KsGetOuterUnknown (Johannes Anderwald)
  • Partly implement clock property functions (Johannes Anderwald)
  • Rewrite KsValidateConnectRequest, KsPinPropertyHandler to handle KSPIN_DESCRIPTOR_EX, which is used by IKsFilter implementation (Johannes Anderwald)
  • Dispatch unsupported interface requests to the clients registered inner aggregate (device / filter factory / filter / pin) (Johannes Anderwald)
  • Rewrite filter functions which deal with KSPIN_DESCRIPTO, as the client can dynamically modify the PinDescriptors array (Johannes Anderwald)
  • Handle matching create requests which differentiate in case (Johannes Anderwald)
  • Implement pin allocator framing property handler (Johannes Anderwald)
  • KSSTREAM_POINTER_OFFSET doesn't have an Alignment member on 64 bit systems. Comment the use out in these cases. It should probably be removed completely, as it's only an alignment / dummy value, but I leave this to the expert in this field. (Timo Kreuzer)
  • ULONG -> ULONG_PTR for pointer casts (Timo Kreuzer)
  • Fix memory leak (Johannes Anderwald)
  • Perform all allocations / frees in dedicated alloc / free function (Johannes Anderwald)
  • Fix bogus debug print leading to buffer overflow (Johannes Anderwald)
  • Simplify KsTopologyPropertyHandler by using KspReadMediaCategory helper (Johannes Anderwald)
  • Return correct status code in case of an overflow (Johannes Anderwald)







  • Allow connection requests for connectionless sockets (they associate a default remote address with the socket required for use in AfdConnectedSocketWriteData and AfdConnectedSocketReadData) (Cameron Gutman)
  • Add a check for a disconnected socket (Cameron Gutman)
  • Add some sanity checks (Cameron Gutman)
  • Fix signaling socket termination events on disconnect (Cameron Gutman)
  • Fixes bug 4951 (Cameron Gutman)
  • Fix a typo in r47156 (Cameron Gutman)
  • Fixes Firefox regression (bug 5384) (Cameron Gutman)
  • Thanks to mjmartin for testing (Cameron Gutman)
  • Track the status for each poll event in our FCB and copy it back when we get an IOCTL_AFD_ENUM_NETWORK_EVENTS IRP (Cameron Gutman)
  • Remove some useless PollReeval calls (Cameron Gutman)
  • It is legal to send a NULL event object pointer to AFD (this is sent by msafd to cancel an existing event select) (Cameron Gutman)
  • Implement IOCTL_AFD_GET_TDI_HANDLES (Cameron Gutman)
  • Revert r42674 and part of r47156 (Cameron Gutman)
  • Fix a copy-paste mistake and remove an unused variable (Cameron Gutman)
  • Fix a typo (Cameron Gutman)
  • Fix read data corruption when peeking at network data (TDI_RECEIVE_PEEK is specified for a stream socket) (Cameron Gutman)
  • Forgetting to save really sucks. Sorry again for the wasted commit. (Cameron Gutman)
  • BytesAvailable needs to be updated even when peeking so we don't run off the end of our buffer (Cameron Gutman)
  • There is nothing to say about this... (Cameron Gutman)


  • Fix ne2000 compilation (treat pointer size as ULONG_PTR, correct function prototypes) (Timo Kreuzer)
  • 36958 (sginsberg) (Timo Kreuzer)


  • fix some ULONG to pointer casts (Timo Kreuzer)
  • 34870 (tkreuzer) (Timo Kreuzer)
  • define some fastcall functions to the normal functions on amd64 (Timo Kreuzer)
  • 36011 (tkreuzer) (Timo Kreuzer)
  • Fix a ULONG to pointer cast. (Timo Kreuzer)
  • 36012 (tkreuzer) (Timo Kreuzer)
  • Pass ULONG* to MiniQueryInformation for the number of written bytes instead of ULONG_PTR* (Timo Kreuzer)
  • 41502 (tkreuzer) (Timo Kreuzer)
  • Pass ULONG* to MiniQueryInformation for the number of written bytes instead of ULONG_PTR* (Timo Kreuzer)
  • 41502 (tkreuzer) (Timo Kreuzer)
  • Convert to spec (Timo Kreuzer)
  • Provide a IRP_MJ_CREATE and IRP_MJ_CLOSE handler for miniport drivers so IoGetDeviceObjectPointer doesn't fail (and consequently, IoSetDeviceInterfaceState) (Cameron Gutman)
  • Remove a forgotten debug print (Cameron Gutman)
  • Implement miniport timer queuing (Cameron Gutman)
  • Add some BUGCODE_ID_DRIVER bug check cases for missing interrupt deregistration, missing timer cancellation, and invalid IRQL when calling NdisMAllocateSharedMemory (Cameron Gutman)
  • Only dequeue the timer in the DPC if the Period is 0 (which means that it's NOT a periodic timer so we only get called once) (Cameron Gutman)
  • Attempt to dequeue the timer before inserting it so we don't end up with multiple copies of the same timer on the timer queue if somebody calls NdisMSet(Periodic)Timer twice (Cameron Gutman)
  • Hold the miniport lock when we work with the timer queue (Cameron Gutman)
  • Use the return value of KeSetTimer(Ex) to determine whether we need to queue the timer in our queue, otherwise we just use the entry that is already there (Cameron Gutman)
  • Add more assertions (Cameron Gutman)
  • Dequeue the timer earlier so the timer queue will be in a valid state if any timers are modified during the miniport's timer callback (Cameron Gutman)
  • Refresh the protocol bindings after a new miniport is added (Cameron Gutman)
  • Adapters added after boot work now (Cameron Gutman)
  • One step closer to Live CD networking (Cameron Gutman)
  • Convert NDIS_ERROR_CODE from a typedef to a define. (Amine Khaldi)
  • Add some missing NDIS_STATUS_* definitions. (Amine Khaldi)
  • Guard several definitions against NDIS_LEGACY_DRIVER. (Amine Khaldi)
  • Improve NDIS_REQUEST. (Amine Khaldi)
  • Group related definitions. (Amine Khaldi)
  • Update several Ndis* function declarations. (Amine Khaldi)
  • Add missing NdisInterlocked{Push,Pop}EntryList and NdisGetCurrentSystemTime macros. (Amine Khaldi)
  • Guard several definitions against NDIS_SUPPORT_60_COMPATIBLE_API. (Amine Khaldi)
  • __GNU_EXTENSION -> __MINGW_EXTENSION conversions. (Amine Khaldi)
  • Group some related definitions. (Amine Khaldi)
  • Update NDIS_RW_LOCK. (Amine Khaldi)
  • Improve NDIS_TIMER_FUNCTION. (Amine Khaldi)
  • Add several missing Ndis* function declarations. (Amine Khaldi)
  • Guard several definitions against NDIS_LEGACY_DRIVER and NDIS_LEGACY_MINIPORT. (Amine Khaldi)
  • Convert some function declarations into macros. (Amine Khaldi)
  • Verify that each adapter has been initialized before passing it to the protocol's BindAdapter function (Cameron Gutman)
  • Also verify that each adapter has not already been bound to the protocol (Cameron Gutman)
  • Miniport drivers can now function without a reboot (needed to use 3rd-party NIC drivers on the live CD) (Cameron Gutman)
  • typedef NDIS_STATUS for ntddndis.h (Amine Khaldi)
  • Group some related definitions in ndis.h (Amine Khaldi)
  • Some _ANONYMOUS_* -> __MINGW_EXTENSION conversions. (Amine Khaldi)
  • Guard some definitions against NDIS_LEGACY_DRIVER. (Amine Khaldi)
  • Add some missing definitions. (Amine Khaldi)
  • NDIS_MINIPORT_BLOCK : PVOID Signature; -> NDIS_OBJECT_HEADER Header; (Amine Khaldi)
  • Add missing xfilter.h inclusion. (Amine Khaldi)
  • Add some missing function declarations. (Amine Khaldi)
  • Convert some function declarations into macros. (Amine Khaldi)
  • Guard some definitions against NDIS_LEGACY_MINIPORT. (Amine Khaldi)
  • Update the ndis header guard. (Amine Khaldi)
  • Fix timer queuing (Cameron Gutman; #5461)
  • for details (Cameron Gutman; #5461)
  • Revert 48750, I was misinformed. (Aleksey Bragin)


  • fix some pointer to ULONG casts (Timo Kreuzer)
  • 34874 (tkreuzer) (Timo Kreuzer)
  • class2: fix ULONG to pointer cast (Timo Kreuzer)
  • 34877 (tkreuzer) (Timo Kreuzer)
  • fix LARGE_INTEGER to pointer cast (Timo Kreuzer)
  • 35781 (tkreuzer) (Timo Kreuzer)
  • fix a pointer to ULONG cast (Timo Kreuzer)
  • 41500 (tkreuzer) (Timo Kreuzer)
  • fix a pointer to ULONG cast (Timo Kreuzer)
  • 41500 (tkreuzer) (Timo Kreuzer)
  • Return STATUS_INVALID_ADDRESS if the caller tries to get a non-local address (Cameron Gutman)
  • Return STATUS_ADDRESS_ALREADY_EXISTS if the caller uses an address that is in use (Cameron Gutman)
  • Apply the static IP address configuration data (Cameron Gutman)
  • Make sure DHCP is enabled before reading IP information (Cameron Gutman)
  • Read the IP information from the interface key inside the Tcpip service key (confirmed on XP) (Cameron Gutman)
  • Fix a logic error in my code (no idea how I missed it) (Cameron Gutman)
  • Restores static IP functionality (still waiting on janderwald to fix netcfgx's DNS value writing) (Cameron Gutman)
  • Disassociate the address file from the connection endpoint before dereferencing/closing it to avoid a double dereference of the address file (not as harmful in this case as in the connection endpoint case) (Cameron Gutman)
  • Don't allocate pool if there is nothing in the route table (Cameron Gutman)
  • Fixes bug 5493 (Cameron Gutman)
  • Process the timer event directly from the DPC instead of queuing a work item then raising to DISPATCH_LEVEL later when acquiring a spin lock (Cameron Gutman)
  • Optimize the spin lock operations in NBTimeout and IPDatagramReassemblyTimeout for being called at DISPATCH_LEVEL (Cameron Gutman)
  • Patches to allow Windows PCI Bus Driver to start working somewhat (need to implement HalAdjustResourceList for PCI to make it go further): (sir_richard)


  • Convert to spec. Taken from amd64 branch (by Samuel Serapión) (Timo Kreuzer)






  • Reduce pause between SelectDrive and ATAPI_RESET from 10000 to 500 (as it is in the old ATAPI driver). (Aleksey Bragin)
  • Really perform a controller hard-reset if it can't recover from a soft reset. Fixes VirtualBox one IDE controller configuration (master - IDE, slave - ATAPI). (Aleksey Bragin; #5145)
  • Detach the device object from the stack before deleting it (Cameron Gutman)
  • Add a hack that selects the correct display number to use which allows other drivers to take over if one driver's HwFindAdapter fails (Cameron Gutman)
  • This allows ROS to work on non-VESA 2.0 compliant video cards if /NOVESA is specified (Cameron Gutman)
  • NOTE: VGA seems to have regressed quite a bit. The mouse doesn't show up but still works. (Cameron Gutman)
  • Adjust timings in WaitOnBaseBusy, WaitForDrq, WaitShortForDrq to match old atapi driver. Thanks Caemyr for testing and finding optimal values (which are slightly below the values used in this commit). The proper solution would be to implement adaptive delays scaling. (Aleksey Bragin; #4995)
  • Merge from amd64 branch: (Timo Kreuzer)
  • 44634: Make x86 specific optimizations x86 specific, use macros otherwise. (Samuel Serapion) (Timo Kreuzer)
  • 44639: Try to fix numerous pointer to ULONG casts. (Samuel Serapion) (Timo Kreuzer)
  • 47846/47847: Remove all the byteswap "optimisations" and use portable RTL byteswap functions (Timo Kreuzer) (Timo Kreuzer)




  • When doing pointer arithmetic, ULONG_PTR is your friend (Timo Kreuzer)
  • 37234 (tkreuzer) (Timo Kreuzer)
  • Return SPS_ACCEPT_NOEXCLUDE from DrvSetPointerShape because we completed the requested operation successfully (Daniel)
  • Fixes bug 4347 (Daniel)


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


  • Begin implementation of VMWARE SVGA-II Video Card Driver. (sir_richard)
  • Implement GetEventLogInformation. (Eric Kohl)
  • OpenBackupEventLogA, OpenEventLogA, RegisterEventSourceA and ReportEventA: Call the ANSI RPC-Server Function directly instead of converting arguments to Unicode and calling the matching Unicode Function. (Eric Kohl)
  • OpenEventLogW: Fix argument checks. (Eric Kohl)
  • Merge r45400 from aicom-network-branch to fix the crash that occurs when Steam starts (Cameron Gutman)


  • Committing on behalf of eVb> - Patch to make VideoPort INT10 Services return VP_STATUS instead of NT_STATUS. It is not the same thing. (sir_richard)
  • Make videoprt compile for 64-bit (Timo Kreuzer)
  • Disable Int10 support as it uses x86 specific structures (is this support still available on amd64?) (Timo Kreuzer)
  • Disable VideoPortEnable/DisableInterrupt -- HalEnable/DisableSystemInterrupt are not apparently present on NT AMD64, so need to figure out what else to use (and if these routine are still present on amd64 videoprt) (Timo Kreuzer)
  • The following this time for real: (Timo Kreuzer)
  • 40927 (tkreuzer) (Timo Kreuzer)
  • Also check for the BASEVIDEO option set and return true in that case also (Cameron Gutman)
  • Fixes a bug with boot time (F8) options on my WC (Cameron Gutman)
  • Merge r40926 from amd64 branch: (Timo Kreuzer)
  • return ERROR_INVALID_FUNCTION on amd64, not ERROR_INVALID_ACCESS from VideoPortEn/DisableInterrupt. Fixes compilation of videoprt for amd64. (Timo Kreuzer)



  • Fix a number of warnings, no actual code change (Love; #5336)
  • Remove memset and memcpy implementations from pin.c (Amine Khaldi)
  • Don't build the pin descriptor as this will make problems with dynamic audio devices which dynamically adjust their audio pins (Johannes Anderwald)
  • Remove dead code (Johannes Anderwald)
  • Perform all allocations / frees in dedicated alloc / free function (Johannes Anderwald)


  • Initialize the i8259A PIC controllers in C, and add register structures and enumerations to document the bits. These were taken from ISA System Architecture 3rd Edition and EISA System Architecture 2nd Edition by Mindshare. (sir_richard)
  • Add code to detect EISA systems with ELCR (Edge/Level Control Register). Since the current HAL does not support these, warn users about any level/shared interrupts, since they are likely to cause trouble. (sir_richard)
  • header cleanup (Christoph von Wittich)
  • spaces -> tabs in rbuild file (Christoph von Wittich)
  • Cleanup part 1/x (Timo Kreuzer)
  • Rename each architectures default hal to "hal" and delete the stubbed "hal" module. (Timo Kreuzer)
  • Delete halamd64 (will later reuse the x86 hal) (Timo Kreuzer)
  • Rename "halmp" to "halmps" as it's called on windows (Timo Kreuzer)
  • Set HalInitSystem as entry point (Timo Kreuzer)
  • Move pcibus.c into hal_generic.rbuild (Timo Kreuzer)
  • Use a common .pspec file (Timo Kreuzer)
  • Use a directory.rbuild for halx86 as it was done for the other architectures already (Timo Kreuzer)
  • Move some code from hal_generic to hal_generic_up (Timo Kreuzer)
  • No code change (Timo Kreuzer)
  • Merge from amd64-branch: (Timo Kreuzer)
  • 44886 KxAcquireSpinLock: check for already owned lock only on debug builds, fix check in inner loop, don't call Kii386SpinOnSpinLock inside the inner loop, but instead of it, simplify the code. Stubplement Kii386SpinOnSpinLock in C (Timo Kreuzer)
  • 44893 Move spinlock inline functions into their own header, so they can be shared with hal. (Timo Kreuzer)
  • Merge HalpAcquireSystemHardwareSpinLock and HalpReleaseCmosSpinLock from Timo's AMD64 branch, and delete ASM implementations. (sir_richard)
  • Implement KeGetCurrentIrql, KeRaiseIrqlToDpcLevel, KeRaiseIrqlToSynchLevel, HalClearSoftwareInterrupt in C instead of ASM. (sir_richard)
  • Document and implement KiI8259MaskTable in C using actual bit positions. Each mapping is best to the best of my ability. (sir_richard)
  • Implement KfRaiseIrql in C, remove ASM version. (sir_richard)
  • Implement HalEnableSystemInterrupt and HalDisableSystemInterrupt in C instead of ASM. (sir_richard)
  • Implement and document the HalpSpecialDismissTable. Explain how each IRQ should be handled and what the special cases are. Implement said special cases (based on ISA System Architecture, 3rd Edition). (sir_richard)
  • Implement HalBeginSystemInterrupt in C instead of ASM, it jumps into one of the IRQ handlers registered in the HalpSpecialDismissTable. (sir_richard)
  • You really need to get your compiler version shit together. I was told GCC 4.4 is what's used in ReactOS, yet the build server insists on using an old and broken version of GCC that doesn't support half the things we're trying to do here! Hackfix the Mask Table by providing ugly and incomprehensible hex magic numbers for the mappings, if a GCC older than 4.4 is used. (sir_richard)
  • Okay, this one was my fault, forgot to built the nasty-ass HALMPS. Move the CMOS lock routines to the shared CMOS file. (sir_richard)
  • KfLowerIrql in C instead of ASM. Add the SWInterruptLookUpTable and SWInterruptHandlerTable to the code and keep the same mechanism as the ASM code used. (sir_richard)
  • Implement HalRequestSoftwareInterrupt in C instead of ASM. Remove deprecated ASM code that was unused. (sir_richard)
  • Implement HalEndSystemInterrupt and HalpEndSoftwareInterrupt. Remove more ASM code/tables that aren't unused anymore. (sir_richard)
  • Implement the APC and DPC software interrupt traps in C instead of ASM. Delete all contents of irq.S except the two GENERATE_TRAP_HANDLER stubs. (sir_richard)
  • Move the HalpApcInterrupt and HalpDispatchInterrupt to pic.c now that there is a C-macro to generate such stubs. Remove irq.S from build/sources. (sir_richard)
  • Rewrite all V8086-related code in C instead of ASM. Delete v86.s. Makes uses of new macros and developments in NTOS, but should now only end up getting called at shutdown and for bugchecks. (sir_richard)
  • Implement the profile and clock interrupt trap/handlers in C instead of ASM. This allows the kernel to remove the ugly hacks based on internal knowledge of how the assembly/stack of the HAL is supposed to look like. Everything is now done through a clean C interface. (sir_richard)
  • Fix HalpFlushTlb. Thanks to Stefan Ginsberg <stefan100@reactos.org> (sir_richard)
  • Mark ECX as clobbered in HalpNestedTrap, otherwise if the compiler decides to store IRQL in ECX, it will then be overriden with our ECX parameter. With this clobber, the compiler will use another register, such as EAX, to hold the IRQL. (sir_richard)
  • Rewrite IRQL handling. Alex's original code (lately translated to C) was a copy of the MicroChannel (MCA), Checked-Build HAL, an unexplained choice considering MCA is not supported or even available anymore. Windows, on machines with a PIC, uses a mechanism called Lazy IRQL, in which the PIC is only programmed "lazily", meaning that lowering and raising the IRQL does not actually change the interrupt mask. Therefore, lower priority interrupts will still come in at high IRQL. At this point, the HAL will detect this, only now mask the PICs, and lie that the lower interrupt was "spurious", while setting a pending bit. When the IRQL is lowered, the bit is detected, and a software/delayed "INT" is done with the correct IRQ vector number. More details are available in the typical resources. (sir_richard)
  • Implement support for Level interrupts, which are used by certain EISA cards, and more particularly, all PCI hardware. Level interrupts were not previously handled correctly, being treated as edge/latched interrupts instead. (sir_richard)
  • fix HalEndSystemInterrupt prototype. (Sylvain Petreolle)
  • Add debugging feature to HalpTrap06 error that sometimes happen. Please post/email/IM your trap frame should you see this error. (sir_richard)
  • Move Reactos logon sound to WindowsLogon sound scheme. (Sylvain Petreolle)
  • Fixes bug 5002. (Sylvain Petreolle)
  • Use _setjmp/longjmp instead of saving a trapframe in HalpBiosCall (Timo Kreuzer)
  • Restore fs in HalpTrap06. Should fix crash on 1st stage with VBox. (Timo Kreuzer)
  • Use it in HalpAssignPCISlotResources. (Daniel)
  • Replace the inline assembly for entering V86 and the actual V86 stub with real assembly. This is neccesary for compiler portability. Also creating 16 bit V86 assembly using 32 bit inline assembly is rather hackish. (Timo Kreuzer)
  • Add a mini-HAL static library (Hervé Poussineau)
  • Mostly the same thing as the real one, except interrupts and DMA (Hervé Poussineau)
  • UP/MP cleanup: (Timo Kreuzer)
  • remove KxAcquireSpinLock from halp.h, use the one from ntoskrnl instead (Timo Kreuzer)
  • Use generic/spinlock.c in hal_generic_up and hal_generic_mp (Timo Kreuzer)
  • Delete mp/spinlock.c (Timo Kreuzer)
  • Move cmos spinlock functions to spinlock.c to make sure they are compiled for both up and mp (Timo Kreuzer)
  • Move wrappers around fastcall functions to misc.c, as they are identical on up/mp. (Timo Kreuzer)
  • Move architecture specific files into appropriate folders (Timo Kreuzer)
  • Move UP specific files into up folder (Timo Kreuzer)
  • Add some files for amd64, just enough to make compilation start. (Timo Kreuzer)
  • Add Phase 0 HAL Heap Allocation/Mapping/Unmapping APIs, remove current broken APIs that depend on Mm having been initialized. These APIs use the HAL Heap that's typically at 0xFFC00000. FreeLDR seems to map this region correctly. (sir_richard)
  • Although currently implemented for ACPI support (to come), these APIs can now also be used to enable DMA in Phase 0 like NT, instead of only in Phase 1 like ReactOS. (sir_richard)
  • Implement helper registry routine. (sir_richard)
  • Implement function to set ACPI mode the "Windows way", which is to enable/disable the firmware mapper. PnP Manager should probably check this in the future. (sir_richard)
  • Split HalReportResouceUsage into per-platform function, since PC/AT HAL and ACPI HAL have different requirements. As a bonus, the ACPI HAL now identifies itself as ACPI Compatible, instead of using the "PC Compatible" moniker. (sir_richard)
  • Implement HalpGetNMICrashFlag so you can do NMI crashes now. (sir_richard)
  • Implement basic HalpRegistryPciDebuggingDeviceInfo for the day someone implements the Kd routines. (sir_richard)
  • HalpInitializePciBus needs to be different between "Bus Handler HALs" (non-ACPI/embedded) and "Non-Bus Handler HALs" (ACPI/x64). On ACPI, all we do is setup the raw PCI Stubs and NMI crashing. PC/AT will need more involved code. (sir_richard)
  • Smarter .rbuild separation so that ACPI and PC/AT hal don't rebuild the generic library twice. Now generic stays generic, and generic_pcat/acpi are add-on libaries just like generic_up and generic_mp. (sir_richard)
  • Fucken' A, I knew I'd forget one. (sir_richard)
  • HalpActiveProcessors is KAFFINITY, not LONG. Also, MP HAL lacked it. (sir_richard)
  • Move all HAL-specific names to halacpi.c and halpcat.c. This includes the PnP Device Name (e_isa_up vs acpipic_up", the HAL Name, and whether or not the firmware mapper should be disabled (tells I/O Manager to skip legacy detection). (sir_richard)
  • Implement HalpReportUsage! On ACPI, all is implemented, on PC/AT, we don't yet parse the ROM blocks in the registry (but does FreeLDR even put them in?), and I don't think we'll ever enable 16-bit port decoding since FreeLDR never detects ISA vs EISA machines (so we always run as ISA). (sir_richard)
  • Fill out the "????" entries in HalpDefaultIoSpace... more typical Alex "I copied something without knowing what it meant"-magic. (sir_richard)
  • Whoever came up with this MINIHAL idea... (sir_richard)
  • Remove an unnecessary hack now that PnP manager doesn't suck (as much ;)) (Cameron Gutman)
  • Fix a possible overflow of the hal heap in HalpMapPhysicalMemory64 and simplify the code. (Timo Kreuzer)
  • Give mini-hal it's own rbuild file (Timo Kreuzer)
  • Export HalPutDmaAdapter (Cameron Gutman)
  • Return the correct value if the PCI slot number is invalid (Cameron Gutman)
  • Use the bus number from the PCI BIOS instead of doing a manual probe if we can because it is much more accurate (our probing code doesn't detect buses without devices present) (Cameron Gutman)
  • Don't probe for devices at invalid locations on PCI type 2 buses (Cameron Gutman)
  • Check for a valid bus number so we don't return the wrong value (Cameron Gutman)
  • comment out some amd64 specific stuff from rbuild files. (Timo Kreuzer)
  • Fix a typo. (Aleksey Bragin)
  • Fix compiler preprocessor checks for the IRQL masks so other compilers than GCC get proper entries too. (Stefan Ginsberg)
  • Replace IRQL_DEBUG with DBG so we always check for incorrect IRQL on debug. I believe incorrect IRQL raise/lower is a common and serious enough error to always be checked for on debug builds without defining some special debug option. (Stefan Ginsberg)
  • Several Italian translation updates by Paolo Devoti. (Gabriel Ilardi; #5438)
  • Include the correct headers for amd64 vs i386 (Timo Kreuzer)
  • Move memory functions from halinit.c to new memory.c (Timo Kreuzer)
  • HalpAllocPhysicalMemory: MemoryFirmwareTemporary -> LoaderFirmwareTemporary (same value, different enum) (Timo Kreuzer)
  • Move all amd64 specific files to one amd64 folder (Timo Kreuzer)
  • Compile x86 specific timer code only on x86 (Timo Kreuzer)
  • Use KeRegisterInterruptHandler instead of manual idt manipulation (Timo Kreuzer)
  • add missing stubs for amd64 (Timo Kreuzer)
  • Delete empty folder (Timo Kreuzer)
  • Bus support in the HAL actually creates a further wedge between the different x86 HALs: There are actually two dinstinct implementations. On the ACPI HAL, the system is assumed not to have things like special ISA, MCA, EISA buses, and a PCI driver is used in combination with the ACPI Interface for PCI Bus support. On non-ACPI systems, the legacy "Bus Handler" library is used, and the HAL provides a core set of CMOS, EISA, ISA, MCA and PCI bus handlers, each with their own routines and specific code. Additionally, PCI IRQ Routing and other PCI bus internals are handled directly by the HAL -- on the ACPI HAL, the PCI Bus support is implemented through a "Fake"/static bus handler, just to keep the functions shared. On ReactOS, both the ACPI and non-ACPI HAL were currently using a mix of both HAL bus handling types, mostly implemented the "ACPI way" (with a fake PCI bus handler and such). (sir_richard)
  • As a result, none of the Hal*Bus HALDISPATCH routines were implemented, which bus drivers expect to find when they're not on ACPI systems (ReactOS today). eVb's new PCI driver was crashing, for example. (sir_richard)
  • Furthermore, legacy systems suffer, because the ACPI HAL Bus routines (that we currently have) expect perfect ACPI-style-compliant systems, not the legacy crap from the early 90ies. This works fine in VMs and new hardware, but old hardware is left behind. (sir_richard)
  • This patch basically corrects the first part of the problem, by making the bus handling support separate between ACPI and non-ACPI HALs. For now, the code remains 100% the same in functionality between both. (sir_richard)
  • However, I have started adding the first few elements: (sir_richard)
  • Implement HalRegisterBusHandler HALDISPATCH routine. (sir_richard)
  • On legacy HALs, register the CMOS, ISA, SYSTEM handlers. (sir_richard)
  • Add cmosbus.c. Stub all bus-specific bus handler routines in the xxxbus.c files. (sir_richard)
  • No real functionality change occurs with this patch, yet. (sir_richard)
  • Kill debug spew. (sir_richard)
  • Add missing PCI Bus Handler support functions, used on non-ACPI systems (ISA-PCI support and such). (sir_richard)
  • Detect, initialize, and create bus handlers for, all PCI buses that are found on the machine. (sir_richard)
  • Detect PCI-to-PCI Bridges, Extended CardBus Addressing, read Chipset Hacks from Registry, and scan for IRQ lines used by PCI Devices. Scan for PCI-IDE controllers, broken Intel PCI Bridges/Controllers. Scan for OHCI and UHCI USB controllers. Warn the user that if any of these are found, the current HAL does not handle certain types of these devices (these checks are based on the ones the Legacy Windows HAL makes). (sir_richard)
  • Detect IDE controllers. Their interrupts should not be masked. (sir_richard)
  • Detect, check for, and warn about, chipset hacks that need to be applied for the machine. (sir_richard)
  • Implement partly HalpFixupPciSupportedRanges to detect PCI Bridges, and PCI-to-PCI Bridges. The point is we want buses to be cramped down to the addresses supported by the parent bus/bridge. This is NOT currently done, so we warn users of these systems. (sir_richard)
  • Implement HalpGetPciBridgeConfig to detect PCI-to-PCI/CardBus bridges, warn if they are found. (sir_richard)
  • Modify the debug messages to be more accurate as to what exactly is unsupported. (sir_richard)
  • Plug in the data from pcidata.c that was committed months ago to display a beautiful enumeration of all PCI devices on the machine. This will allow debug logs not only to contain nearly full hardware information, but also identify the VM the tester/reporter is using (based on the device's subsystem ID). (sir_richard)
  • Display all the warning DPRINTs in-line with the PCI enumeration code, resulting in a much easier to read and comprehensive review of the machine. (sir_richard)
  • First use of bus handler support: HalGetBusDataByOffset now uses bus handlers. Please report any problems. (sir_richard)
  • Use Bus Handler support for HalSetBusDataByOffset. Please report any problems. (sir_richard)
  • Implement system bus (and ISA) vector/interrupt translation. (sir_richard)
  • Forgot file. (sir_richard)
  • Implement PCI Vector/IRQL translation too. (sir_richard)
  • Implement Bus Handler support for HalGetInterruptVector too. The new functionality now includes support for checking against reserved HAL vectors instead of blindling assining IRQLs/Vectors to callers. A warning is printed on the debug log when the old HAL would've returned different values. Please test. If you have issues, the problem is in the DRIVERS, not this code. (sir_richard)
  • Implement system bus address translation. (sir_richard)
  • Implement ISA BUS address translation. (sir_richard)
  • Implement HalTranslateBusAddress using Bus Handler support. The old HAL would just return whatever the caller gave (no translation was done). For example, with the new HAL, this now results in the translation of 0xCF800 in I/O space to fail (not sure which driver requests this), because this is not a valid I/O address on PC/AT systems (highest is 0xFFFF). (sir_richard)
  • This change also allows for the PCI driver to override the translation mechanism (which will piggy-back to the system bus translator) with its own. Please test. (sir_richard)
  • Implement HalAdjustResourceList using Bus Handler support. Previous HAL said this was "deprecated" and faked success. Although correct on ACPI HALs, this is a legacy HALs, so Bus Handlers have a chance to do ajdustment. (sir_richard)
  • Use Bus Handlers for HalpAssignSlotResources. Warn that current PCI Slot assignment code is frelled. (sir_richard)
  • Add PAGED_CODE(); (sir_richard)
  • Use Bus Handler support for HalFindBusAddressTranslation. Implement HalpContextToBusHandler to support this. Seems to work fine with bootvid (only user). (sir_richard)
  • All the HAL's bus functions now use Bus Handlers on Legacy systems. There are still big issues with PCI cards. (sir_richard)
  • eVb: PCI-x should work now. (sir_richard)
  • More PCI-related HAL patches may follow later. (sir_richard)
  • Stub support for future timer latency watchdog. (Aleksey Bragin)
  • Change older-style comments to standard ReactOS commenting style. (Aleksey Bragin)
  • Add missing call to HalInitPnpDriver during I/O manager initialization. The HAL PnP driver was never getting initialized. (Aleksey Bragin)
  • Add HAL callback for HalInitPnpDriver. It's going to be needed in future for eVb's PCI driver to fully work (interrupt translation, among other things). (Aleksey Bragin)
  • Don't include PCI IDs database into mini-HAL. (Aleksey Bragin)
  • Partly implement HalpAdjustPCIResourceList required for legacy HAL. No actual adjustment is done yet, since the Range package is not implemented. (sir_richard)
  • Implement most of HalpGetISAFixedPCIIrq, other than the legacy PCI IRQ Routing Miniport callbacks, which aren't yet implemented by ReactOS. (sir_richard)
  • The Windows PCI Bus Driver seems to work now. (sir_richard)


  • Revert changes to HalpGetPCIData made in r47162. There is no need to introduce ReactOS-specific behavior of this function. It's much better to aim real NT compatibility, and develop your drivers against NT first and only then hack ReactOS. (Aleksey Bragin)
  • Changes to buses scanning are left as they are. (Aleksey Bragin)



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


  • KeGetCurrentProcessorNumber should not return a 32-bit DWORD combined of "ProcessorNumer", "VdmAlert" and "SecondLevelCacheAssociativity" because those 3 fields are probably not equal to a processor number. Having an L2 Cache will no longer result in ReactOS believing you have a 32000 core CPU. (sir_richard)
  • Fix IID_IUnknown definition 3/X (Johannes Anderwald)
  • Add missing SUITE_TYPE definitions. (sir_richard)
  • Add missing video IOCTLs. (sir_richard)
  • Add some missing definitions. (sir_richard)
  • SEH-Protect the call to RSetServiceStatus in SetServiceStatus. This keeps services from crashing when the connection to the service manager fails. (Eric Kohl)
  • Add MEMORY_BARRIER missing from ioaccess.h. (sir_richard)
  • Merge 46183 from header-branch. (sir_richard)
  • Fix Wmilib.h. (sir_richard)
  • Add ACPI_INTERFACE_STANDARD2. ACPI_INTERFACE_STANDARD is left as an excercise to the reader. (sir_richard)
  • Add ACPI_INTERFACE_STANDARD. (sir_richard)
  • Add missing IoWMIRegistrationControl flags. (sir_richard)
  • Fix a typo (Cameron Gutman)
  • There should not be a DDK-specific ntstatus.h. This is a PSDK header file ("api") in WDK lingo. Overwrite the current outdated PSDK ntstatus.h (which was actually getting used even by drivers due to build system intelligence, so the ddk ntstatus.h was being ignored) with the new DDK ntstatus.h. (sir_richard)
  • Fix a signedness warning (Cameron Gutman)
  • Add missing include. (Michael Martin)
  • Remove PUSB_DEVICE_HANDLE as its not used in this header. Its defined in hubbusif. (Michael Martin)
  • A better fix for r46738. (Amine)
  • Cast the string parameter of ASSERTMSG to PCHAR to allow passing string constants which are PCCHAR without a warning. (Timo Kreuzer)
  • Make RtlLargeIntegerDivide FORCEINLINE instead of __inline to avoid multiple definitions (Timo Kreuzer)
  • 2nd try, this time adding half of the structures. (Timo Kreuzer)
  • In an incredibly daring move, add even more types to ntddk.h (Timo Kreuzer)
  • try to work around the testbot brokenness with an #if 0" (Timo Kreuzer)
  • Merge the rest of the old header-branch version of ntddk.h, but with a large number of additional types #if 0'ed out (Timo Kreuzer)
  • Fix definition of USE_DMA_MACROS (Timo Kreuzer)
  • Update ntifs.h to reflect XDK changes. (Amine Khaldi)
  • Remove ntddscsi.h (Amine Khaldi)
  • Move ntddndis.h to PSDK. (Amine Khaldi)
  • Move netevent.h to PSDK. (Amine Khaldi)
  • Update DDK to reflect the XDK changes. (Amine Khaldi)
  • Update DDK to reflect the XDK changes. (Amine Khaldi)
  • Update wdm.h to reflect XDK changes. (Amine Khaldi)
  • Make functions in ntstrsafe.h static, so they can be used in more than one file. Maybe that encourages people using it instead of unsafe and banned apis. (Timo Kreuzer)
  • Move several headers to PSDK where they belong. (Amine Khaldi)
  • Add _ANONYMOUS_UNION. (Amine Khaldi)
  • De-duplicate __GNU_EXTENSION definition from several headers. (Amine Khaldi)
  • Remove semicolons after the closing bracket of extern "C" (Amine Khaldi)
  • Add a missing one in ioaccess.h (Amine Khaldi)
  • Apply a consistent formatting. (Amine Khaldi)
  • Move several headers to PSDK where they belong. (Amine Khaldi)
  • Update XDK generated headers to reflect the recent changes. (Amine Khaldi)
  • Update some header guards. (Amine Khaldi)
  • Add some missing new lines at the end of files. (Amine Khaldi)
  • Fix PUSB_DEVICE_HANDLE guard. (Amine Khaldi)
  • Introduce some _ANONYMOUS_STRUCT and NONAMELESSUNION based definitions. (Amine Khaldi)
  • De-duplicate __GNU_EXTENSION. (Amine Khaldi)
  • Apply a consistent formatting. (Amine Khaldi)
  • Define DECLSPEC_EXPORT when it's not already defined. (Amine Khaldi)




  • Add WM_DWM* message defines. (Aleksey Bragin)
  • Add commoncontrols.idl from Wine-1.1.36 (needed for newer comctl32). (Aleksey Bragin)
  • Merge Wine-1.1.36 changes to commctrl.h. (Aleksey Bragin)
  • Work on ksproxy.h, WIP (Johannes Anderwald)
  • KSM_PIN is defined in bdasup.h not bdatypes.h (Johannes Anderwald)
  • Add IReferenceClockTimerControl, IAMDeviceRemoval. IDistributorNotify, IAMClockAdjust, IAMStreamControl, IDeferredCommand interface (Johannes Anderwald)
  • Add AM_STREAM_INFO_FLAGS, AM_STREAM_INFO struct (Johannes Anderwald)
  • Modify VMRGUID struct so that gnu compilers can digest it too (Johannes Anderwald)
  • Remove useless KSINTERFACESETID_Standard define from ks.h (Johannes Anderwald)
  • Define LOCALE_INVARIANT macro (Johannes Anderwald)
  • Add BDA interfaces (Johannes Anderwald)
  • Revert remaining parts of patches 45626 and 45633. (Eric Kohl)
  • Add axextendenums.h header (Johannes Anderwald)
  • Add TVAudioMode enumeration (Johannes Anderwald)
  • Add tuner.idl (Johannes Anderwald)
  • Implement VideoPortIsNoVesa (Cameron Gutman)
  • add extern GUID_NULL (Christoph von Wittich)
  • We forget that AE_BUFFER_OVERFLOW is normal and expected since our buffer length is 0 so don't fail if that status is returned (Cameron Gutman)
  • For any device that actually had resources we would return STATUS_SUCCESS without building a resource list and if the device didn't have resources we would end up freeing a NULL pointer, storing stack trash in Irp->IoStatus.Information, and then returning STATUS_SUCCESS (Cameron Gutman)
  • Fixes reporting device resources (and possibly the VBox additions crash with ACPI enabled) (Cameron Gutman)
  • Add new menu structures. (James Tabor)
  • Add GdiConvertToDevmodeW declaration (needed for comdlg32). Arwinss PSDK changes should really be merged in. (Aleksey Bragin)
  • Add a few types required for ksproxy (Johannes Anderwald)
  • Add missing function declarations (Johannes Anderwald)
  • A few more types for ks.h needed for ksproxy (Johannes Anderwald)
  • Fix KSPROPSETID_Stream definition (Johannes Anderwald)
  • fix callback definition (Christoph von Wittich)
  • Link buslogic.sys against libcntpr. This should fix "undefined reference" errors reported on the forum. (Dmitry Gorbachev)
  • Manually merge header changes from arwinss branch. (Aleksey Bragin)
  • Manually merge header changes from arwinss branch. Undocumented values are wrapped into #ifdef _WINE so they don't affect non-Wine code. (Aleksey Bragin)
  • Undocumented flags shouldn't be defined multiple times in user32 and win32k. Put them in winuser.h for now, should be factored out into a separate file later. (Aleksey Bragin)
  • Add KsFilterFactorySetDeviceClassesState prototype (Johannes Anderwald)
  • Fix _KSNODE_DESCRIPTOR definition (Johannes Anderwald)
  • Add clock property handler prototypes (Johannes Anderwald)
  • Add KS_DATARANGE_BDA_TRANSPORT Type (Johannes Anderwald)
  • Replace WINE's commctrl.h with mingw-w64's commctrl.h (Timo)
  • Move WINE-specific hacks to reactos/wine/commctrl.h (Timo)
  • Fixes bug 4958 (Timo)
  • add missing definitions (Christoph von Wittich)
  • add missing definitions (Christoph von Wittich)
  • Fix braces around initializers for GUIDs (Love; #5336)
  • add LVSIL_GROUPHEADER definition to commctrl.h (Timo Kreuzer)
  • Merge 47681 and 47682 from header branch (Timo Kreuzer)
  • Add missing file headers (Timo Kreuzer)
  • Fix defintition of POINTER_64 (Timo Kreuzer)
  • by Amine Khaldi (Timo Kreuzer)
  • Merge RtlIpv4StringToAddressW fix from network branch. (Sylvain Petreolle)
  • Deduplicate/improve architecture related definitions. (Amine Khaldi)
  • Move the amd64 check before the i386 one, and also check for __i386__ (Amine Khaldi)
  • Copy atsmedia.h from our dxsdk to our psdk (replacing the one that's already there) (Amine Khaldi)
  • Add some missing file-headers. (Amine Khaldi)
  • Add some missing file-headers. (Amine Khaldi)
  • Fix a typo (_AMD64 -> _AMD64_) (Timo Kreuzer)
  • ntstatus.h: add STATUS_INVALID_CRUNTIME_PARAMETER (Timo Kreuzer)
  • winnt.h: fix 64 bit definition of SLIST_ENTRY (Timo Kreuzer)
  • Add several missing VER_* definitions. (Amine Khaldi)
  • Fix EVENT_FILTER_DESCRIPTOR redefinition. (Amine Khaldi)
  • Update DPFLTR_TYPE enum. (Amine Khaldi)
  • Import ntddscsi.h from mingw-w64. (Amine Khaldi)
  • Add the missing WSANO_ADDRESS definition (Cameron Gutman)
  • Fix WS2TCPIP_INLINE : extern inline -> static inline (Amine Khaldi)
  • Remove svn:mergeinfo property (Timo Kreuzer)
  • Merge 44257 from amd64 branch: (Timo Kreuzer)
  • PFN_TYPE -> PFN_NUMBER (Timo Kreuzer)
  • Fix a couple of typos (Amine Khaldi)
  • Add missing netevent.h definitions. (Amine Khaldi)
  • Fix a couple of FIXMEs : UNALIGNED and RESTRICTED_POINTER definitions (Amine Khaldi)
  • Fix IOCTL_STORAGE_* redefinitions. (Amine Khaldi)
  • Leftover from the r45430 merge. (Amine Khaldi)
  • Forgot to commit this. (Amine Khaldi)
  • Make FORCEINLINE extern (not static) (Amine Khaldi)
  • Declare WspiapiLegacyFreeAddrInfo, WspiapiLegacyGetAddrInfo and WspiapiLegacyGetNameInfo as static __inline. (Amine Khaldi)
  • Rename _WINIOCTL_H to _WINIOCTL_ (Amine Khaldi)
  • Mark TraceMessageVa as WMIAPI. (Amine Khaldi)
  • usbuser.h : Add missing #endif (Amine Khaldi)
  • Add missing privilege names. (Eric Kohl)
  • Fix GetTextCharsetInfo prototype according to MS Platform SDK. (Aleksey Bragin)
  • Get back to old/compatible way of declaring dummy unions and structs for IMAGE_RESOURCE_DIRECTORY_ENTRY. Also, second nameless structure is called DUMMYSTRUCTNAME3 to be compatible with Wine's code which, for some reason, expects WORD Id wrapped into yet another struct, depending on endiannes. (Aleksey Bragin)
  • Make some winuser.h functions conforming to MS PSDK. (Aleksey Bragin)
  • add missing LPCOLORREF to windef.h (Timo Kreuzer)
  • De-duplicate __GNU_EXTENSION definition from several headers. (Amine Khaldi)
  • Add missing extern "C" opening bracket in ddkernel.h and remove the semicolon from the closing one. (Amine Khaldi)
  • Add __GNU_EXTENSION definition to ddraw.h and remove the semicolon after the closing bracket of extern "C" (Amine Khaldi)
  • Add missing extern "C" closing bracket in ddrawi.h (Amine Khaldi)
  • Remove semicolons after the closing brackets of extern "C" in dinput.h, dmemmgr.h and sti.h (Amine Khaldi)
  • Apply a consistent formatting. (Amine Khaldi)
  • ddrawi.h : Fix pUnkOuter. (Amine Khaldi)
  • Add some missing imm.h definitions. (Amine Khaldi)
  • Move INPUTCONTEXT and ImmLockIMC to the wine imm.h (Amine Khaldi)
  • Add wingdi.h inclusion. (Amine Khaldi)
  • Add include guards in wine/ddk/imm.h and inlude it from wine/imm.h (Timo Kreuzer)
  • Add WINELIB_NAME_AW and DECL_WINELIB_TYPE_AW to the wine specific imm.h. (Amine Khaldi)
  • Add some missing headers' headers. (Amine Khaldi)
  • Update some header guards. (Amine Khaldi)
  • Add missing new line at the end of driverspecs.h (Amine Khaldi)
  • Add missing DISPLAY_BRIGHTNESS and some related definitions. (Amine Khaldi)
  • Improve _MSC_VER related conditions. (Amine Khaldi)
  • Comment on #endif (for readability). (Amine Khaldi)
  • DECLSPEC_ALIGN : moar underscores ! (Amine Khaldi)
  • Apply a consistent formatting. (Amine Khaldi)
  • Add BS_TYPEMASK definition. (Aleksey Bragin)
  • Get rid of unused variable. (sir_richard)
  • Properly guard d3d9types.h and d3dtypes.h against DIRECT3D_VERSION versions. (Amine Khaldi)
  • Make Services.exe and Winlogon.exe wait for the LSA server to be up and running. Otherwise calls to any LSA function might fail. (Eric Kohl; #5497)
  • Thanks to Roel Messiant for testing and analyzing the debug logs. (Eric Kohl; #5497)





  • Add pciclass.mc 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: http://www.reactos.org/archives/public/ros-dev/2008-July/010498.html http://www.reactos.org/archives/public/ros-dev/2008-July/010499.html (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: http://www.osronline.com/ddkx/w98ddk/keycnt_4ilz.htm 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)
  • Update libxml to 2.7.7 (Samuel)
  • Resync zlib to 1.2.5. (Samuel)
  • 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)


  • Add winsock headers required for the new mswsock code (Cameron Gutman)


  • 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)
  • Cleanup old files (Timo Kreuzer)
  • Remove setjmplongjmp.s (Timo Kreuzer)
  • Correction to last commit message: the conversion patch was already applied (Timo Kreuzer)
  • Update to 2.3.12, conversion patch already applied (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 <jc1@diwaves.com> (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)






  • Don't try to close the connection again if it has already been terminated by the remote peer (Cameron Gutman)
  • Fixes waiting for binding during ws2_32 sock winetest (Cameron Gutman)
  • Handle socket operations that can be completed immediately before terminating the socket to avoid losing data sitting in the receive buffer (Cameron Gutman)
  • Merge second part of the comctl32 Wine 1.2 sync. (Ged Murphy)
  • All code currently omits the reactos specific patches. It's been a long time since we synched this lib so it's possible we no longer need them. Time will tell. (Ged Murphy)
  • This bug seems to have gone now. Tried to replicate it the devmgmt treeview. (Ged Murphy)
  • Add "bootcdregtest" in the list of well-known targets. (Aleksey Bragin)
  • Fix a major bug in socket closure. Prior to this, a socket with pending IRPs that could not be satisfied when the socket was closed would be destroyed without completing the pending requests. Now, we check all of our IRP queues if we get a SEL_FIN signal and kill all the requests that cannot be satisfied immediately. (Cameron Gutman)
  • Maybe it's just me but Firefox 2 seems much more responsive after this fix (like actually usable!) (Cameron Gutman)
  • Dereference the connection endpoint again if it was associated with an address file as the connection endpoint to fix a reference leak (Cameron Gutman)
  • Set the network mask and destination address in TCPGetInterfaceData (Cameron Gutman)
  • Fix a reference leak when aborting a listen request (Cameron Gutman)


  • Add a sanity check (Cameron Gutman)
  • Dedicated to Caemyr (Cameron Gutman)
  • Improve the reactos-hack, by changing the ";" after an "if (...)" to "(void)0;" to tell the compiler that we intentionally do nothing in the if body. (Timo Kreuzer)
  • Use RtlUlongByteSwap / RtlUshortByteSwap for byte swapping. They are portable and intrinsics on x86. (Timo Kreuzer)
  • Don't add leading underscores to symbols on amd64 builds (Timo Kreuzer)
  • Disable routing because oskit needs to let our code do that (Cameron Gutman)
  • Comment out the ACK hack and restore the default BSD behavior (Cameron Gutman)
  • Prevent multiple wakeups for the same event which caused nasty problems for the SEL_FIN event because we dereferenced our connection context 3 times which not only caused the connection endpoint to be freed while holding its spin lock but made the reference count negative (Cameron Gutman)
  • Only tell the caller how much we sent/received if it completed successfully (Cameron Gutman)
  • Set SO_DONTROUTE on accepted sockets too (Cameron Gutman)
  • Disable the core routing code (Cameron Gutman)
  • Make our MSS calculation much better by sharing the existing code (Cameron Gutman)
  • Check for a shutdown connection that we missed a few times (Cameron Gutman)
  • Remove some junk and stop playing with flags behind oskit's back (Cameron Gutman)
  • Fix an invalid parameter check (Cameron Gutman)
  • Enable a check to ensure that accept doesn't get called for a socket that isn't listening (Cameron Gutman)
  • Use the queue manipulation function instead of manually changing the queue (Cameron Gutman)
  • Signal that we accepted/connected a socket (Cameron Gutman)


  • Hackfix corruption of audio buffer list which made the playback thread spin forever on an already played buffer. (Johannes Anderwald)
  • Tested with Winamp / VLC / mplay32 with Vbox 3.1.2 (Johannes Anderwald)
  • Implement basic version of PNP_CreateKey. (Eric Kohl)
  • Implement RCreateServiceA. (Eric Kohl)
  • Make CreateServiceA call RCreateServiceA instead of CreateServiceW. (Eric Kohl)
  • Make mmebuddy more 64bit compliant. Based on r40127 by Samuel Serapion with some modifications by me. (Timo Kreuzer)
  • 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)


  • KiConvertToGuiThread() "accesses memory in an unpredictable fashion". (Dmitry Gorbachev)
  • Put back the boot logo from the old bootvid (Cameron Gutman)
  • Rewrite the old broken progress bar code and enable the progress bar (Cameron Gutman)
  • The progress bar works now :) (Cameron Gutman)
  • NOTE: Someone should fix the copyright year on the boot logo (Cameron Gutman)
  • Update boot logo copyright year (Gabriel)
  • Don't set the RTL_QUERY_REGISTRY_REQUIRED flag for the Service key entry of the query table because it will cause RtlQueryRegistryValues to fail if the service key is absent which we don't want because we handle that case later (Cameron Gutman)
  • Never suppose that buffer in UNICODE_STRING is null terminated. Fixes display artifacts on list of loaded drivers (Hervé Poussineau)
  • Better fix for correct display of loaded drivers (Hervé Poussineau)
  • Use the correct file name for services which have differing service and image names (Cameron Gutman)
  • Fixes the file name of the display miniports on the SOS screen (VGA.SYS -> VGAMP.SYS and VBE.SYS -> VBEMP.SYS) (Cameron Gutman)
  • Fix a memory leak of the allocated IO_STATUS_BLOCK (Cameron Gutman)
  • Don't free unallocated memory (Cameron Gutman)
  • Send the IRP with the correct MajorFunction (Cameron Gutman)
  • Use IoBuildAsynchronousFsdRequest instead of IoBuildSynchronousFsdRequest (fixes potiential null pointer access when attempting to set the wait event which is NULL) (Cameron Gutman)
  • Set the correct stack parameters for the IRPs (Cameron Gutman)
  • NtAccessCheck (Eric Kohl)
  • Probe parameters. (Eric Kohl)
  • Fail if generic access rights have not been mapped. (Eric Kohl)
  • NtAccessCheck: (Eric Kohl)
  • Fix returned status if the token is not an impersonation token. (Eric Kohl)
  • Add a check for the token impersonation level. (Eric Kohl)
  • Hack fix for gdibatch, please retest Acrobat reader 7. (James Tabor)
  • Fail if you query a primary token for its impersonation level. (Eric Kohl)
  • Handle devices that are run by their own bus drivers (Cameron Gutman)
  • This could be done a bit nicer but it works (Cameron Gutman)
  • merge from amd64 branch: (Timo Kreuzer)
  • 34741 (tkreuzer) (Timo Kreuzer)
  • Construct a valid device path for ZwOpenFile (Cameron Gutman)
  • Button events are now recognized by the power manager (tested on VirtualBox) (Cameron Gutman)
  • NtAccessCheck: Check for a valid security descriptor. (Eric Kohl)
  • Detect floppy controllers, parallel ports, and the ISA bus (Cameron Gutman)
  • Don't always use the value name as the device description (Cameron Gutman)
  • Fixes bug 3416 (Cameron Gutman)
  • Fix definition of _wctype (Timo Kreuzer)
  • Add a missing OBJ_CASE_INSENSITIVE attribute so IopIsAcpiComputer doesn't always fail (Cameron Gutman)
  • Revert part of r46495 and replace it with much better code (Cameron Gutman)
  • Don't use REG_OPTION_VOLATILE because it causes ACPI to be reinstalled after every boot (Cameron Gutman)
  • Fix a nasty bug that discarded any response to IRP_MN_FILTER_RESOURCE_REQUIREMENTS so drivers never got the resources they needed (Cameron Gutman)
  • Set the IRP_SYNCHRONOUS_API flag on IRPs created by IoBuildSynchronousFsdRequest (Cameron Gutman)
  • Reintegrate header branch part 5/x (Timo Kreuzer)
  • Formatting and properties (Timo Kreuzer)
  • delete xmldsodid.h (Timo Kreuzer)
  • Reintegrate header branch part 6/x (Timo Kreuzer)
  • ntdef.h and winnt.h: add GROUP_AFFINITY, formatting (Timo Kreuzer)
  • Reintegrate header branch part 7/x (Timo Kreuzer)
  • Merge the rest and see what happens.... (Timo Kreuzer)
  • revert r46552 and r46553 (Timo Kreuzer)
  • Move SINGLE_GROUP_LEGACY_API definition to wdm.h (Timo Kreuzer)
  • Fix Mm64BitPhysicalAddress (Timo Kreuzer)
  • Add definition of PUOW to wdm.h (Timo Kreuzer)
  • Merge bdasup.h (Timo Kreuzer)
  • merge ntdef.h formatting changes (Timo Kreuzer)
  • Add RtlLargeInteger macros to wdm.h (Timo Kreuzer)
  • merge part of the wdm changes. Mostly formatting and adding a few definitions. (Timo Kreuzer)
  • Revert 46550: Windows does not set this flag. ReactOS shouldn't either. Setting UserEvent is already enough in this case. (Aleksey Bragin)
  • merge wdm.h second attempt. This time taking more care of vista definitions. (Timo Kreuzer)
  • Move IoAttachDeviceToDeviceStackSafe to ntddk.h (Timo Kreuzer)
  • Merge ntdef.h (Timo Kreuzer)
  • Merge winnt.h (Timo Kreuzer)
  • Define PPEB in ntddk.h (Timo Kreuzer)
  • Don't try to detect ACPI in IopEnumerateDetectedDevices because the only reason we got there is because ACPI is NOT present (as reported by IopIsAcpiComputer) (Cameron Gutman)
  • Disable ACPI until the resource detection problems are resolved (Cameron Gutman)
  • Move kernel-mode check around, so we won't run it twice when calling NtAccessCheck. (Eric Kohl)
  • Fix a wrong check for security descriptors with a NULL-DACL. (Eric Kohl)
  • Capture the security descriptor before passing it to SepAccessCheck. (Eric Kohl)
  • Move the security descriptor check and the impersonation level check from SepAccessCheck to SeAccessCheck. (Eric Kohl)
  • Move subject context locking to SeAccessCheck because NtAccessCheck already locks it. (Eric Kohl)
  • Do not use the captured security descriptor in NtAccessCheck yet, because SeCaptureSecurityDescriptor seems to create broken SDs. (Eric Kohl)
  • Change PnpRootCreateDevice's ServiceName parameter to be a full service name so it can be used by IoReportDetectedDevice (for reporting devices without the "LEGACY_" prefix) and change all of its callers accordingly (Cameron Gutman)
  • Remove the broken implementation of IoReportDetectedDevice and replace it with a fully working implementation (Cameron Gutman)
  • There is still a bug that it creates a new device instance every boot, but unlike the previous code, at least it creates one ;-) (Cameron Gutman)
  • Store the device's assigned resources (raw and translated) in the RESOURCEMAP key (Cameron Gutman)
  • Implement IopUpdateResourceMap which is responsible for updating the key with new resource information and setting the DNF_RESOURCE_ASSIGNED flag (Cameron Gutman)
  • Fix IoGetDeviceProperty which was returning incorrect information for DevicePropertyPhysicalDeviceObjectName (Cameron Gutman)
  • Take a look at HKLM\Hardware\ResourceMap\PnP Manager\PnpManager and see the beautiful resource lists ;) (Cameron Gutman)
  • NOTE: Regedit has a bug so the "\Device\" prefix is hidden but you will see that it is there if you look with explorer's NT object viewer (Cameron Gutman)
  • Add 2 parameters to IopUpdateResourceMap to allows for updating different keys (Cameron Gutman)
  • Implement IopDetectResourceConflict and IopCheckForResourceConflict but don't report the conflicts until we get a resource arbiter (Cameron Gutman)
  • Halfplement IoReportResourceForDetection (Cameron Gutman)
  • Fix certain scenarios in which a device node can have a NULL instance path which causes registry corruption when we try to write registry keys for that device node (Cameron Gutman)
  • Create the 'Control' subkey and add the ActiveService value inside it (Cameron Gutman)
  • Fix a memory leak (Cameron Gutman)
  • TODO: Fill AllocConfig and FilteredConfigVector (Cameron Gutman)
  • Implement IoOpenDeviceInterfaceRegistryKey (Cameron Gutman)
  • Dedicated to Janderwald (Cameron Gutman)
  • Check the SeTakeOwnership privilege only if WRITE_OWNER access is desired. (Eric Kohl)
  • Move the check for token ownership from SepAccessCheck because this check grants access rights rather than checking them. (Eric Kohl)
  • Add the check for ACESSS_SYSTEM_SECURITY. (Eric Kohl)
  • Keep the desired access rights that have not been granted yet in the variable RemainingAccess. (Eric Kohl)
  • Handle the MAXIMUM_ALLOWED case if the DACL is empty. (Eric Kohl)
  • Implement the calculation of access rights for the MAXIMUM_ALLOWED case. (Eric Kohl)
  • Check access rights according to the DACL. Granted rights are removed from the remaining rights variable. (Eric Kohl)
  • Return success only if there are no more remaining rights. Return failure otherwise. (Eric Kohl)
  • Remove outdated code. (Eric Kohl)
  • Pass IRPs down to the root PDO if we don't handle it (Cameron Gutman)
  • Don't complain if we get an IRP that we don't expect. We are the parent bus driver for the device so we are responsible for completing those IRPs. (Cameron Gutman)
  • Revert part of r46707 (Cameron Gutman)
  • Remove a hack in PnpRoot that assembled a CM_RESOURCE_LIST from a CM_PARTIAL_RESOURCE_DESCRIPTOR but also corrupted proper resource lists (such as from detected devices in IoReportDetectedDevice) (Cameron Gutman)
  • Add a simple resource arbiter that finds an unused resource in the range provided in the resource requirements list. It's not perfect but it's a start. (Cameron Gutman)
  • Start enforcing resource conflicts (Cameron Gutman)
  • Fix incorrect code that was writing a CM_PARTIAL_RESOURCE_DESCRIPTOR instead of a CM_RESOURCE_LIST (the hack above was compensating for this) which result in BootConfig being a REG_PARTIAL_RESOURCE_DESCRIPTOR type on certain devices and a REG_RESOURCE_LIST on others (Cameron Gutman)
  • Fix a broken check for no partial resource descriptors (Cameron Gutman)
  • Remove a leftover debug print (Cameron Gutman)
  • Remove an unused member from PNPROOT_DEVICE (Cameron Gutman)
  • Don't build a bogus resource list if no resources are required (Cameron Gutman)
  • Fixes a crash during resource arbitration because the created resource requirements list was malformed (Cameron Gutman)
  • Don't manually write a device description for detected devices (Cameron Gutman)
  • Instead, let PnpRoot report it in response to IRP_MN_QUERY_DEVICE_TEXT (Cameron Gutman)
  • Fix the type passed to ZwSetValueKey (Cameron Gutman)
  • Ignore inherit only ACEs in a DACL. (Eric Kohl)
  • Fix a case where we miss copying back the IO_STATUS_BLOCK into the UserIosb buffer (Cameron Gutman)
  • Fixes the registry corruption caused when PnP wrote an invalid resource list (passed back via UserIosb->Information) to the registry (Cameron Gutman)
  • Hopefully this also fixes a few other nasty bugs in other areas related to this issue (Cameron Gutman)
  • Move the code from my previous commit before signalling the user event (Cameron Gutman)
  • Sorry for the wasted commit number (Cameron Gutman)
  • Revert r46720 and fix the issue properly (Cameron Gutman)
  • Write the assigned resources to the registry (Cameron Gutman)
  • Create registry values for legacy drivers (Cameron Gutman)
  • Handle raw devices properly (Cameron Gutman)
  • Don't set DNF_STARTED before actually calling IopStartDevice (Cameron Gutman)
  • Don't set DNF_STARTED for legacy drivers inside IopCreateDeviceNode (Cameron Gutman)
  • Fixes missing entries in Device Manager for raw devices (Cameron Gutman)
  • Cache the next instance value in the the registry so we don't have to go searching for an unused instance number every time we add a new device (Cameron Gutman)
  • Make legacy device keys volatile (Cameron Gutman)
  • Store the allocated resources for reported devices (Cameron Gutman)
  • Don't set the DNF_STARTED flag before calling IopStartDevice (Cameron Gutman)
  • Use IopDeviceNodeSetFlag to set the DNF_HAS_BOOT_CONFIG flag (Cameron Gutman)
  • Set DNF_START_FAILED and print a warning if we fail to start a device (Cameron Gutman)
  • Clear the DNF_ASSIGNING_RESOURCES flag before failing (Cameron Gutman)
  • TODO: Release device resources when start fails (Cameron Gutman)
  • Add back FASTCALL macro in the pspec file for amd64 builds (Timo Kreuzer)
  • Hackfix the device manager issue (Cameron Gutman)
  • Replace the broken CM_RESOURCE_LIST_SIZE with a better function that actually works with resource lists that have device-specific data in them (fixes missing device specific data when resources are retrieved with IoGetDeviceProperty) (Cameron Gutman)
  • Separate the resource code out of pnpmgr.c and into pnpres.c (Cameron Gutman)
  • Simplify resource assigning to simply calling one function, IopAssignDeviceResources, which takes care of the registry configuration, translation, etc. (Cameron Gutman)
  • Set the DNF_NEED_ENUMERATION_ONLY flag only AFTER the device is actually started not before (Cameron Gutman)
  • Set DNF_START_FAILED if IRP_MN_START_DEVICE fails (Cameron Gutman)
  • Fix a bug in IoReportDetectedDevice that wrote the AllocConfig value to wrong place (Cameron Gutman)
  • Missed this from my last commit (Cameron Gutman)
  • Add a stub for IRP_MN_REMOVE_DEVICE in PnpRoot (Cameron Gutman)
  • Revert 2 incorrect changes from r46983 (DNF_ENUMERATED added to the DNF_ADDED assertion and setting the DNF_RESOURCE_REPORTED flag in IopStartDevice2) (Cameron Gutman)
  • Set the DNF_LEGACY_DRIVER flag if the AddDevice handler is missing (Cameron Gutman)
  • Add a helper function called IopSendRemoveDevice which sends IRP_MN_REMOVE_DEVICE to a device object (Cameron Gutman)
  • Call IopSendRemoveDevice if IRP_MN_START_DEVICE fails (Cameron Gutman)
  • Set the DNF_STARTED and DNF_ADDED flags for legacy drivers (Cameron Gutman)
  • Enable the DNF_ADDED assertion in IopStartDevice2 (Cameron Gutman)
  • Disable gdi batch for SelectObject with fonts. Fixes font regression. (Timo Kreuzer)
  • Revert r46682 (Cameron Gutman)
  • The NULL terminator is not supposed to be included in the length (Cameron Gutman)
  • Fixes corruption when printing the symbolic link (Cameron Gutman)
  • Create a helper function named OpenRegistryHandlesFromSymbolicLink which opens handles to various paths associated with a symbolic link (Cameron Gutman)
  • Store the Linked value in IoSetDeviceInterfaceState (Cameron Gutman)
  • Implement checking if an interface is enabled by reading the Linked value (Cameron Gutman)
  • Interfaces reported from IoGetDeviceInterfaces are only active ones now (unless the caller explicitly says that they want disabled ones too) (Cameron Gutman)
  • Fix file type description (Johannes Anderwald)
  • Fix length calculation of symbolic links with reference strings attached (Cameron Gutman)
  • Fixes opening registry keys for symbolic links with reference strings (such as audio devices) (Cameron Gutman)
  • Rewrite IoOpenDeviceInterfaceRegistryKey using the same helper function that is used in IoGetDeviceInterfaces and IoSetDeviceInterfaceState to reduce complexity and chance of bugs (tested and confirmed working) (Cameron Gutman)
  • Revert r46748 (Cameron Gutman)
  • Fixes bug #5321 (AC97) (Cameron Gutman)
  • On backtraces, print the address of the call instruction (assumed 5 bytes lentgh) instead of the return address, which in many cases does not make sense. (WinDbg does it this way, too) (Timo Kreuzer; #5301)
  • Fix Ke386SaveFpuState to store the fpu state in the buffer, but in the pointer to the buffer (Timo Kreuzer; #5301)
  • Anable Ke386SaveFpuState to save the floating point state in KiNpxHandler and KiTrap13Handler, so we know what error we got. (Timo Kreuzer; #5301)
  • Disable saving debug registers in the trap frame, as long as the kernel doesn't support this (Timo Kreuzer; #5301)
  • Fixes ntdll_winetest exception / OllyDbg freeze/reboot (Timo Kreuzer; #5301)
  • Fix a horrible casting bug (Cameron Gutman)
  • EventCategoryData1 is a pointer to a GUID not a pointer to a UNICODE_STRING (Cameron Gutman)
  • Convert the GUID into a UNICODE_STRING properly by using RtlStringFromGUID and pass that string to RtlCompareUnicodeString (Cameron Gutman)
  • Fix another bug which results in us sending EventCategoryHardwareProfileChange and EventCategoryTargetDeviceChange events to everyone registered for PnP notifications (Cameron Gutman)
  • Fixes sending EventCategoryDeviceInterfaceChange notifications that happen after calling IoRegisterPlugPlayNotification (Cameron Gutman)
  • Fix RtlWalkFrameChain to do usermode back traces for threads that are not system threads. Also use _SEH2_YIELD when leaving the SEH block. (Timo Kreuzer)
  • Fix a typo that results in ISRs being called at an unsafe IRQL (Interrupt->Irql instead of Interrupt->SynchronizeIrql) in certain situations (when Interrupt->Irql < Interrupt->SynchronizeIrql) that can result in ISR synchronization issues (Cameron Gutman)
  • In kdbg 'thread list', don't try to read from the kernel stack if there isn't one. (Bug 5318) (Jeffrey Morlan)
  • Implement Ke386IoSetAccessProcess, Ke386SetIoAccessMap, and Ke386QueryIoAccessMap (Samuel)
  • Don't enable the kernel debugger if the DEBUG option was not set (Cameron Gutman)
  • Fixes displaying the BSOD when not booting in debug mode (broken in r41534) (Cameron Gutman)
  • Fix a typo (Cameron Gutman)
  • Safe mode with networking has an OptionValue of 2 not 1 (Cameron Gutman)
  • Currently unused (for now ;)) (Cameron Gutman)
  • Fix paramter parsing in KdbpGetCommandLineSettings. Fixes KDSERIAL (Timo Kreuzer)
  • Fix a bug that broke /NODEBUG and /CRASHDEBUG (Cameron Gutman)
  • Free the string buffer after the DPRINT1 that prints the contents of the string (Cameron Gutman)
  • Fixes debug print corruption found by kmtest (Cameron Gutman)
  • Print a warning instead of crashing when a driver provides a NULL pointer in the MajorFunction array (Cameron Gutman)
  • Implement SeFreePrivileges(). (Eric Kohl)
  • Implement SeAppendPrivileges(). (Eric Kohl)
  • Use PnpDetermineResourceListSize to determine the resource list size and remove the broken IopCalculateResourceListSize function (Cameron Gutman)
  • Set the Status variable to STATUS_SUCCESS in PIP_RETURN_DATA (Cameron Gutman)
  • Fixes testbot (Cameron Gutman)
  • Fix stack skipping logic in IofCompleteRequest (lassy)
  • Fixes displaying MULTIPLE_IRP_COMPLETE_REQUESTS bug check (lassy)
  • Do not use _SEH2_YIELD in NtSetInformationProcess, NtQueryInformationThread and NtSetInformationThread while a thread or process is still being referenced. (Eric Kohl)
  • Make NtDuplicateToken fail if the caller tries to create a new impersonation token with a raised impersonation level. This fixes a winetest. (Eric Kohl)
  • Revert the hack in r47514 (Cameron Gutman)
  • The ASSERT is there to make sure the PFN lock is held (Cameron Gutman)
  • Fix the issue properly by holding the PFN lock while initializing (Cameron Gutman)
  • NtDuplicateToken: If the called does not provide any desired access rights the duplicate token will inherit the granted rights of the original token. (Eric Kohl)
  • merge 46805 from amd64 branch: (Timo Kreuzer)
  • Implement KeRegisterInterruptHandler and KeQueryInterruptHandler for amd64 (Timo Kreuzer)
  • NtDuplicateToken: Fail, if a primary token is to be created from an impersonation token and and the impersonation level of the impersonation token is below SecurityImpersonation. (Eric Kohl)
  • Print the base address of the process that we killed to make debugging much easier (Cameron Gutman)
  • Implement IRP_MN_REMOVE_DEVICE handling for PnP root PDOs (Cameron Gutman)
  • Set the resource list pointer to NULL after we free it (Cameron Gutman)
  • Fixes a double-free issue in the resource conflict resolution code (Cameron Gutman)
  • Use the current partition descriptor to check for container partitions. Logical units in extended partitions become visible again but you cannot access them yet. (Eric Kohl)
  • This fixes the first half of bug #2564. (Eric Kohl)
  • Fix a string termination bug in the device interface code (Cameron Gutman)
  • Thanks to janderwald for spotting the bug (Cameron Gutman)
  • Merge 47800 from yarotows branch. (Jérôme Gardou)
  • Changelog should have been: (Jérôme Gardou)
  • Resource translation isn't very effective when we don't store the translated value in the translated descriptor (Fix a typo) (Cameron Gutman)
  • Update base address of comdlg32. (Sylvain Petreolle)
  • Apply compilation fix for amd64 (Timo Kreuzer)
  • Remove a superfluous assert (requested by sir_richard). (Kamil Hornicek)
  • Check that the caller passed a valid PDO pointer to IoOpenDeviceRegistryKey (Cameron Gutman)
  • Add a macro to check for a valid PDO and use it in IoOpenDeviceRegistryKey(). (Pierre Schweitzer)
  • Requested by sir_richard. (Pierre Schweitzer)
  • Move the PDO check in IoOpenDeviceRegistryKey() to the function begin. (Pierre Schweitzer)
  • Requested by sir_richard. (Pierre Schweitzer)
  • Implemented FsRtlNotifyVolumeEvent() (Pierre Schweitzer)
  • Implemented IoReportTargetDeviceChange(), IoReportTargetDeviceChangeAsynchronous() (Pierre Schweitzer)
  • Craplemented PpSetCustomTargetEvent() to match our actual PnP manager notifications system. This is to be rewritten (Pierre Schweitzer)
  • Added support for custom notifications in IopNotifyPlugPlayNotification() (Pierre Schweitzer)
  • Added use of FsRtlNotifyVolumeEvent() in RawUserFsCtrl() to notify volume state changes (Pierre Schweitzer)
  • Added use of IoEvent library to ntoskrnl (Pierre Schweitzer)
  • NtDuplicateToken: Fail, if TokenType is neither TokenImpersonation nor TokenPrimary. (Eric Kohl)
  • Implement volume mount notification in RawFS (Pierre Schweitzer)
  • Update kdbg/kdb_cli.c accordingly. (Amine Khaldi)
  • Warn only once about FsRtlPrivateLock and FsRtlFastUnlockSingle being stubplemented. (Gabriel Ilardi)
  • Merging some stuff from pierre-fsd/arty-newcc branches: (Pierre Schweitzer)
  • Implemented FsRtlDissectDbcs(), FsRtlIsDbcsInExpression(), FsRtlIsFatDbcsLegal(), FsRtlIsHpfsDbcsLegal() (Pierre Schweitzer)
  • Implemented FsRtlIsNameInExpressionPrivate() (Pierre Schweitzer)
  • Rewritten FsRtlIsNameInExpression() (Pierre Schweitzer)
  • Updated comments (Pierre Schweitzer)
  • About FsRtlIsNameInExpressionPrivate(), it comes with a fix there isn't in branch, which avoids reading string more than its own length, and this helps getting rid of a workaround later in code. (Pierre Schweitzer)
  • Reapply the idea of r44368. Remove the "kernel32" library reference in all .rbuild files of user-mode modules, because this one * KeQuerySystemTime and KeQueryInterruptTime are not implemenetd on amd64 (Timo Kreuzer)
  • Apply a workaround for WDK headers (Timo Kreuzer)
  • Remove the old amd64 compilation hack (Timo Kreuzer)
  • Define PD_COUNT, PDE_COUNT, PTE_COUNT for amd64, we should probably use PTE_PER_PAGE... instead (Timo Kreuzer)
  • Fix incompatible declaration of MmResidentAvailablePages (Timo Kreuzer)
  • Prevent duplicate definitions (Timo Kreuzer)
  • Fix ExInitializeRundownProtectionCacheAware parameter (ULONG -> SIZE_T) (Timo Kreuzer)
  • Fix some amd64 KGDT constant names (Timo Kreuzer)
  • Merge 48064 from yarotows (Jérôme Gardou)
  • This had nothing to do in yarotows in the first place (Jérôme Gardou)
  • SVN wins again... What's that? (Jérôme Gardou)
  • Revert everything that's not related to 48064 of 48065. (Jérôme Gardou)
  • Some ULONG vs SIZE_T fixes (Timo Kreuzer)
  • Merge 36852, 37322, 37333, 37334, 43428, 43451, 44259, 46404 from amd64 branch. (Timo Kreuzer)
  • Multiple ULONG/ULONG_PTR/SIZE_T issues (Timo Kreuzer)
  • Use SLIST_ENTRY instead of SINGLE_LIST_ENTRY with InterlockedPushEntrySList (Timo Kreuzer)
  • Use %p to print pointer sized values (Timo Kreuzer)
  • ULONG -> ULONG_PTR (Timo Kreuzer)
  • ULONG -> SIZE_T (Timo Kreuzer)
  • Comment out a broken C_ASSERT on amd64 to make it compile. (Timo Kreuzer)
  • if out another broken C_ASSERT on amd64 (Timo Kreuzer)
  • Add MM_HIGHEST_VAD_ADDRESS for amd64 (Timo Kreuzer)
  • if out RtlpCaptureStackLimits on amd64 as well (Timo Kreuzer)
  • Add some missing constants for amd64 (Timo Kreuzer)
  • Fix compilation of kd64 (Timo Kreuzer)
  • Make MmAllocationFragment a SIZE_T (Timo Kreuzer)
  • Don't use freeldrhack on amd64 (Timo Kreuzer)
  • Add KiGetLinkedTrapFrame for amd64 (Timo Kreuzer)
  • Add MiAddressToPti (Timo Kreuzer)
  • Fix MmCreateProcessAddressSpace, MmInitializeHandBuiltProcess prototype (ULONG -> ULONG_PTR) (Timo Kreuzer)
  • if out some C_ASSERTs for other architectures than x86 (Timo Kreuzer)
  • define InitializeSListHead to RtlInitializeSListHead on amd64 (Timo Kreuzer)
  • Don't implement MiSyncARM3WithROS on amd64 (Timo Kreuzer)
  • Implement RtlPcToFileHeader, RtlpGetStackLimits (Timo Kreuzer)
  • Add missing declarations (Timo Kreuzer)
  • Fix epic naming fail (DhcpEnabled -> EnableDHCP (Cameron Gutman)
  • Bring over all current amd64 specific code from the amd64 branch (Timo Kreuzer)
  • Make MmIsAddressValid portable by using _MI_PAGING_LEVELS macro. (Timo Kreuzer)
  • Fix MiAddressToPti and implement MiAddressToPxi for amd64 (Timo Kreuzer)
  • Replace #error with DPRINT and ASSERT(FALSE) in MiInitializeLargePageSupport (Timo Kreuzer)
  • Implement amd64 specific MmCreateProcessAddressSpace (Timo Kreuzer)
  • Add MmProtectToPteMask for amd64 (copied from x86) (Timo Kreuzer)
  • Remove amd64 version of MmInitializeHandBuiltProcess (Timo Kreuzer)
  • ◙ Fix MiInitializePageTable (Timo Kreuzer)
  • ◙ Comment out some more code for amd64 (Timo Kreuzer)
  • Fixed FsRtlIsNameInExpression to make it properly handle * in expressions (Pierre; #5541)
  • Fix formatting (Pierre; #5541)
  • Fixes everything (Pierre; #5541)
  • Deferred success... (Timo Kreuzer)
  • Stop using the new paged pool code, before ExpLoadInitialProcess is called. For so far unknown reasons, it causes evil things to happen. Fixes "Assertion NewSize < pool->UserSize failed" (Timo Kreuzer; #5551)
  • Move to the next entry in the thread IRP list before calling IoCancelIrp because if everything works as expected and IoCompleteRequest is called, we could end up with the IRP ripped out from under us before can move to the next element (Cameron Gutman; #5550)
  • for details. (Cameron Gutman; #5550)
  • Revert 48546. The code was correct, and there is more of same code in other places which firstly cancels the IRP and then moves to the next entry. The actual bug is somewhere else. (Aleksey Bragin; #5550)
  • Fixed IoGetRequestorProcess, IoGetRequestorProcessId, IoGetRequestorSessionId (Pierre)
  • Pass user buffer in NtNotifyChangeDirectoryFile (Pierre)
  • Fixed magic value in IoGetPagingIoPriority (Pierre)
  • Simplified IopGetRelatedTargetDevice implementation (Pierre)
  • Added notification in case of success in NtSetVolumeInformationFile() (Pierre)
  • Some fixes to IRP cancelation process: (Pierre)
  • Renamed IopRemoveThreadIrp() to IopDisassociateThreadIrp() to match Windows 2k3 (Pierre)
  • Made dead IRP global, to make its debug easier. (Pierre)
  • IopDisassociateThreadIrp(), Handle dead IRP at dispatch level, using IoCompletionLock. (Pierre)
  • IopDisassociateThreadIrp(), Use the proper error code to write the entry to logs. (Pierre)
  • IoCancelIrp(), removed non needed ASSERT, which is even not present on Windows, removed corresponding var as well. (Pierre)
  • IoCancelIrp(), fixed parameters to KeBugCheckEx() call. (Pierre)
  • IoCancelThreadIo() is pageable. (Pierre)
  • IoCancelThreadIo() under Windows isn't using given thread, but using current. Do the same here. (Pierre)
  • All that stuff doesn't fix bug #5550, it comes from outside. (Pierre)
  • Initialize the Parent member of the new Vad to NULL. This also initializes the Balance to 0 aka RtlBalancedAvlTree (Timo Kreuzer)
  • Should fix the failed assertion that randomly occurs. (Timo Kreuzer)
  • Implement support for /BURNMEMORY option. (Jay; #4957)
  • Don't stop boot on bad memory type (Jay; #4957)
  • Fix handling of next instruction in kdbg. (Daniel; #4457)
  • Add missing parentheses. Fixes "cont" (Timo Kreuzer)
  • Add a special case to IopInitializeDevice for raw devices (Cameron Gutman)
  • Call IopInitializeDevice to set up our device node and ready it to start (Cameron Gutman)
  • Fixes assertions hit by ACPI and PCIX (Cameron Gutman)
  • Shutdown the system if we receive a SYS_BUTTON_POWER event (Cameron Gutman)
  • Register for GUID_DEVICE_LID arrival events so we can receive lid events (Cameron Gutman)
  • The trailing NULL is NOT included in the string length (Cameron Gutman)
  • IopNotifyPlugPlayNotification needs a pointer to an actual GUID not a UNICODE_STRING (Cameron Gutman)
  • The Power Manager can now see ACPI power devices again (Cameron Gutman)
  • ROS will now do a graceful shutdown and power off if the power button is pressed and ACPI is enabled (Cameron Gutman)
  • Append the DLL name and NULL terminate the string more nicely (Cameron Gutman)
  • Don't overwrite the ACPI hardware key on every boot (Cameron Gutman)
  • Fix a typo that broke handling of DevicePropertyEnumeratorName inside IoGetDeviceProperty (Cameron Gutman)
  • Rewrite MiFindEmptyAddressRangeDownTree. The old implementation's "most awesome loop" duplicated both the initialization and the interation steps. It was also overcomplicated. The new implementation additionally returns the parent for the following table insertion, so this doesnt need to be done in an extra search. The return value is changed from NTSTATUS to TABLE_SEARCH_RESULT (Timo Kreuzer)
  • Modify MiInsertNode to accept a parent and TABLE_SEARCH_RESULT instead of searching for a free location. (Timo Kreuzer)
  • Modify MiCreatePebOrTeb to make use of the new features (Timo Kreuzer)
  • Handle failed allocation of the PEB/TEB (Timo Kreuzer)
  • Fixes a failed assertion that Olaf got (Timo Kreuzer)
  • I tested this code quite some time and no problems were found (Timo Kreuzer)
  • Revert the change from REG_SZ to REG_MULTI_SZ because it turns out that Windows does it this same way (research fail?) (Cameron Gutman)
  • Fix to PpSetCustomTargetEvent(), not to make caller wait forever in case it provided an event it waits for (Pierre)
  • Fix a regression in ACPI function from r48581 (Cameron Gutman)
  • Enable ACPI for testing purposes (will be disabled next commit) (Cameron Gutman)
  • Disable ACPI again (Cameron Gutman)
  • When a node is removed, check the NodeHint of the table to see if it matches the one being removed. If so update the NodeHint to the PreviousNode. FIxes VAD corruption messages. (Michael Martin)
  • Revert 48640, as it was incorrect. (Michael Martin)
  • Modified version of r48640: (Timo Kreuzer)
  • update the NodeHint to the root node when deleting a node (Timo Kreuzer)
  • remove this code from MmCleanProcessAddressSpace (Timo Kreuzer)
  • Fixed wrong prototype for IopParseDevice(). (Pierre)
  • 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)


  • 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 (Daniel Reimer)
  • These should be all CPUs out there we support.... (Daniel Reimer)
  • Generalize some lines to be used for a whole bunch of models. (Daniel Reimer)
  • Reduced size about 10kb that way. 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. (Daniel Reimer)
  • Update zlib from 1.2.3 to 1.2.5 (Daniel Reimer)
  • DejaVu Fonts 2.30 -> 2.31 (Daniel Reimer)
  • Liberation Fonts 1.04 -> 1.05.2 (Daniel Reimer)
  • Update openoffice 2.4 Links to a new and working mirror (Daniel Reimer)
  • Add Opera 9 to rapps. (Daniel Reimer)
  • Update OOo to 3.2.1 and the last time... fix the FF2 link. (Daniel Reimer)
  • Update rapps database to most recent Versions of all apps. (Daniel Reimer)
  • Add the non yet working FF 3.6 and AbiWord 2.8.5 to rapps to simplify testing. (Daniel Reimer)
  • Updated VB6, VC2005, VC2008 links according to winetricks. (Daniel Reimer)
  • Update the rapps download list. (Daniel Reimer)
  • Fix the SeaMonkey Mirror. (Daniel Reimer)
  • Try to fix FF2 Download. (Daniel Reimer)
  • Add Visual C++ 2008 SP1 runtime to rapps and rename the others correctly. (Daniel Reimer)
  • Added Fox Audio Player to rapps and some more fixes. (Igor Paliychuk, myself) (Daniel Reimer)
  • Update the rapps Database to a valid FireFox Link once more... (Daniel Reimer)
  • Bug 5072: PATCH: Add ReMooD to ReactOS Application Downloader. (by GhostlyDeath) (Daniel Reimer)
  • Update Rapps Links and add the two RosBE Addons. (Daniel Reimer)
  • 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. (Daniel Reimer)
  • http transport support commented out. (Daniel Reimer)
  • Remove unix functions that are no longer needed. (Daniel Reimer)
  • Comment out check in cpsf.c that caused 2nd stage dll registrations to fail. (Daniel Reimer)
  • All rpcrt4 tests no longer crash. (Daniel Reimer)
  • Forgot to remove some now useless header (Daniel Reimer)
  • Additionally I added a * to all Autosyncs which lie a bit back already. Will look through them and check which are still recent. (Daniel Reimer)
  • Update some more apps. (OpenOffice 3.2.0, SciTE 2.03) (Daniel Reimer)
  • DosBox to 0.74, Mirror of FireFox 2, IrfanView to 4.27, RosBE to 1.5.1, uTorrent to 2.0.2. (Daniel Reimer)
  • Update FireFox, KDE, MirandaIM, Mono, Opera, RosBE64, SeaMonkey, ThunderBird, uTorrent, VLC in rapps. (Daniel Reimer)
  • Update the banner.bmp in credui. (Daniel Reimer)
  • Added comctl32.ocx, KDEWin, Mono, .net, Media Player Classic, Python, Steam, Tahoma Font and Windows Media Encoder 9 to rapps. (Daniel Reimer)
  • Remove Esperanto and Walon languages from comctl32, comdlg32, mpr, msi, shlwapi, wininet (Daniel Reimer)
  • Tidy up tree from duplicate files. (Daniel Reimer)
  • 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. (Daniel Reimer)
  • Update some psdk Headers (Daniel Reimer)
  • Fix libtiff's external functions. (Daniel Reimer)
  • Fix setupapi setupcab winetest. (Samuel Serapion) (Daniel Reimer)
  • Update libjpeg from 6b to 8b. (Daniel Reimer)
  • Add a new libpng 1.4.3 to main tree, linked dynamically, as libjpeg is, too. (Daniel Reimer)
  • Add libtiff 3.9.4, linked dynamically, too. (Daniel Reimer)
  • Enable both libs in wine/config.h which results in working png and tiff support in windowscodecs.dll (Daniel Reimer)
  • Update VLC to 1.1.0 (Daniel Reimer)
  • Sync format_msg from kernel32 (Samuel Serapion) (Daniel Reimer)
  • Winetest now passes with 0 errors. (Daniel Reimer)

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

  • Add SuperFinder XT to rapps. (Daniel Reimer)
  • Some more psdk updates needed for winetests. (Daniel Reimer)
  • Another updated wine header to fix some synched winetest's build process. (Daniel Reimer)
  • Update WIDL to Wine 1.2 rc6 + sync/modify two idl files making problems with the new widl. (Samuel)
  • Silence zlibs warnings (Samuel Serapion) (Daniel Reimer)
  • Update readme.wine (Daniel Reimer)
  • update wine's unicode app to 1.2rc6. (Samuel Serapion) (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)
  • Update the d3dx9_XX.dll files to the recent wine release version. Mostly stubs, but many games appreciate their existance. (Daniel Reimer)
  • Update log2lines to Version 1.11 (Jan Roeloffzen) Bug 4342 (Daniel Reimer)
  • Added -P Pipeline option for Powershell support, see below (Daniel Reimer)
  • Renaming some structs to avoid potential naming conflicts with windows.h (Daniel Reimer)
  • stdin/out -> stdIn/Out for redirecting (Daniel Reimer)
  • Fixed potential mem leak (Daniel Reimer)
  • Bug 4342: Update log2lines to Version 1.12b. (Jan Roeloffzen) (Daniel Reimer)
  • Update piperead to Version 0.3 (Jan Roeloffzen) (Daniel Reimer)
  • A little more tracing and cleanup (Daniel Reimer)
  • Updated piperead (Jan Roeloffzen) Bug 5146 (Daniel Reimer)
  • Added Pipe client function, based on msdn example (Daniel Reimer)
  • Improved option handling (try piperead -h) (Daniel Reimer)
  • logging, error handling (Daniel Reimer)
  • Integrated in build (pipetools.mak) (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)
  • Sync sccbase, slbcsp, usp10, wldap32, wuapi and xinput1_3 to Wine 1.1.40 (Daniel Reimer)
  • 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. (Colin Finck; #4810)
  • Remove the -fno-unit-at-a-time hacks. (Colin Finck; #4810)
  • Remove dgorbachev's temporary hacks for user-mode C++ applications. (Colin Finck; #4810)
  • Merge ntoskrnl's "precomp.h" and "ntoskrnl.h" again, the PCH issues have been fixed. (Colin Finck; #4810)
  • Use our "ofmt_stub.a" to be compatible with newer MinGW Runtime versions. (Colin Finck; #4810)
  • Use LD's new -exclude-all-symbols option to not auto-export all symbols in case no DEF file or __declspec(dllexport) was specified. (Colin Finck; #4810)
  • We used to patch our LD version to work around this problem. (Colin Finck; #4810)
  • Use LD's --start-group and --end-group parameters to allow a more flexible linking order. (Colin Finck; #4810)
  • Use GCC's -fno-set-stack-executable for amd64 and i386 targets to disable adding the __enable_execute_stack code. (Colin Finck; #4810)
  • Change the makefile's name to "makefile-$(ARCH).auto" for all architectures. (Colin Finck; #4810)
  • Remove some -Wno-error flags. (Colin Finck; #4810)
  • We don't need "csq.h" twice in our tree. (Colin Finck)
  • 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)
  • sedwards> I talked to vizini (Colin Finck)
  • sedwards> it's public domain (Colin Finck)
  • sedwards> do what you will (Colin Finck)
  • sedwards> slap your name on it (Colin Finck)
  • sedwards> and submit it (Colin Finck)
  • Colin_Finck> I can just do a commit to put it under PD now and everything will be alright? (Colin Finck)
  • sedwards> yes, the author who wishes to remain anonymous is quite fine with that (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)
  • More cleanup/work needed. (evb)
  • Will post Wiki on testing info soon. (evb)
  • Fix bugs. (evb)
  • Enable serial output. (evb)
  • Forgot to change SARCH back to Versatile. (evb)
  • More fixes (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 pciclass.mc 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)
  • Fix bugs. (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)
  • Now pass 7000 SLOC ^_^;~ Good night! (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)
  • More fixes (evb)
  • Flesh out more code. (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) (Timo Kreuzer)
  • DHCPCSVC] (Cameron Gutman)
  • Move code from dhcp to dhcpcsvc (Cameron Gutman)
  • Export ServiceMain from dhcpcsvc (Cameron Gutman)
  • Now our DHCP service is compatible with the Windows architecture (Cameron Gutman)
  • Remove dhcp from build (Cameron Gutman)
  • Restore SVN history (Cameron Gutman)
  • Part 2 of x (Cameron Gutman)
  • INFLIB] (Timo Kreuzer)
  • Merge r36443 from amd64 branch: (Timo Kreuzer)
  • 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. (Timo Kreuzer)
  • NTOSKRNL / RTL] (Eric Kohl)
  • Implement BreakOnTermination case for NtQueryInformationProcess and NtSetInformationProcess. (Eric Kohl)
  • Implement RtlSetProcessIsCritical. (Eric Kohl)
  • 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++. Yeah whatever... (Timo Kreuzer)
  • sdkddkver.h] (Timo Kreuzer)
  • Add UL suffix to some constants. (Timo Kreuzer)
  • wine/commctrl.h] (Timo Kreuzer)
  • Don't use #include_next, instead imclude psdk/commctrl.h (Timo Kreuzer)
  • _mingw.h] (Amine)
  • Help compilation with clang. (Amine)
  • ReactOS-amd64.rbuild] (Timo Kreuzer)
  • The old explorer won't compile for amd64 without massive hacking, so remove it from the build. (Timo Kreuzer)
  • DDK} (Timo Kreuzer)
  • Add a number of PCI related types to ntddk.h (Timo Kreuzer)
  • Revert r47553 because testbot doesn't like it (Timo Kreuzer)
  • WINEMP§.ACM] (Timo Kreuzer)
  • Define WIN32 to fix compilation for anything else than x86 (Timo Kreuzer)
  • NDK] (Timo Kreuzer)
  • Add missing TEB member for Vista (Timo Kreuzer)
  • stdlib.h] (Timo Kreuzer)
  • Improve definition of __mb_cur_max and related (Timo Kreuzer)
  • properly handle _M_CEE_PURE (Timo Kreuzer)
  • HHCTRL.OCX] (Christoph von Wittich)


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


  • SepAccessCheck: Deny access if the DACL is is empty (but not NULL). (Eric Kohl)


  • The kernel normally does not save FPU state during Ring 0 transitions since the FPU should not be used. The one exception is when a kernel debugger is attached. Unfortunately, the latter check in ReactOS results in even "print on the serial line" to count as "debugger attached", and thus FPU state was almost always saved, slowing down traps significantly. (Sir_Richard)
  • The kernel also does not typically save DRx (debug) registers unless they were in use. During an exception dispatch, they are zeroed out, and later during trap exit, if any debug register is set, DR7 is updated to enable that hardware breakpoint. Unfortunately, the code to clear the debug registers had a bug: DR2 was never cleared. Because DR2 ended up being a random stack value during trap frame generation, this caused a bogus address to be added to DR2, and DR7 would then enable the 2nd hardware breakpoint. This caused the kernel to always save DRx state, which is slow, and worse, could cause random hardware breakpoints to fire. (Sir_Richard)
  • Start implementing trap handling in C. ASM trap handlers will now only be 5 lines of assembly including a function call to a C handler. All C handling code uses maximum two arguments and is all FASTCALL for efficiency. (Sir_Richard)
  • Implement C versions of TRAP_PROLOG and TRAP_EPILOG. Implement C version of Ki386EoiHelper. Implement C version of CommonDispatchException (and helper) and KiFatalSystemException. Implement C version of CHECK_FOR_APC_DELIVER. Implement trap debugging checks as a separate entity instead of always doing them. (Sir_Richard)
  • Add missing intrinsics for DS/ES/GS segment query. (Sir_Richard)
  • The kernel is now ready for some trap handling to be done in C. Due to the FPU/Debug fixes and relaxation of paranoid debug checks, the C code will likely be faster than the original assembly. (Sir_Richard)
  • define _tcscpy_s and _tsplitpath_s again for native VC++ builds (Martin Fuchs)
  • Trap Handlers in C Patch 2 of X ( (Sir_Richard)
  • Convert Trap 0, 1, 3, 4, 5, 8, 10, 11, 12, 15, 17, 2C (Assertion) and 2D (Debug) to C. Tested INT3 and still works as expected, and obviously DbgPrint is still functionning (0x2D). The other traps are mainly programming errors such as bound overflow or integer overflow, so we need some test cases, but they should work. Note the 3-4 lines of C for what used to be dozens of ASM lines. (Sir_Richard)
  • Fix infinite loop in KiCheckForApcDelivery. (Sir_Richard)
  • Trap Handlers in C Patch 3 of X ( (Sir_Richard)
  • Fix a bug in the assertion handler. (Sir_Richard)
  • Implement page fault trap (14) in C instead of ASM. (Sir_Richard)
  • Implement V8086 trap entry/exit, we were hitting these during page faults in Ke386CallBios for video reset during GUI boot. (Sir_Richard)
  • Trap handlers in C Patch 4 of X: (sir_richard)
  • Implement trap 6 (invalid opcode) in C. (sir_richard)
  • Trap handlers in C Patch 5 of X: (sir_richard)
  • Convert trap 19 (XMMI exception) to C. (sir_richard)
  • avoid warning messages on Explorer startup when missing configuration files (Martin Fuchs)
  • Implement Trap 7 and 16 in C. These are the last two FPU/NPX traps. Not really good with x86 FPU stuff, so there might be some mistakes to look over later. (sir_richard)
  • Fixed a bug in Trap 19 handler (forgot to write CR0 back). (sir_richard)
  • Implement KiAdjustEsp0 in C. (sir_richard)
  • Temporarily remove FPU save/restore instructions since they seem to be smashing the stack and breaking boot. (sir_richard)
  • Simplify trap exit code. (sir_richard)
  • Move some stuff in appropriate headers. (sir_richard)
  • Write V86 fast entry/exit traps, needed for later. (sir_richard)
  • Implement all V8086 Opcode emulation in C instead of ASM. (sir_richard)
  • Update credits. (James Tabor)
  • Rewrite BIOS Call (V8086) Entry/Exit routines in C. Only 4 lines of ASM stub remain. This wasn't fun... the stack dancing alone gives you headaches. Who ever thought of dynamically sized trap frames! (sir_richard)
  • Trap handlers in C patch 7 of X: (sir_richard)
  • Implement GPF handler (trap 13) in C. This was by far the most complex one of them, since it also servces two complex purposes: to handle V86 emulation since the real-mode code will generate GPFs during privileged instructions, and it will detect an illegal IRET, check if it's the known V8086 Exit IRET, and then jump to V86 exit code. (sir_richard)
  • Get rid of even more V8086 assembly since the GPF handler is now C. Deleted the entire V8086 assembly file. (sir_richard)
  • Get rid of a bunch of helper ASM functions that nobody is using anymore since almost all the trap handlers are in C. (sir_richard)
  • my once a year commit, update email address (Steven Edwards)
  • Trap Handlers in C Patch 8 of X: (sir_richard)
  • Implement KiCoprocessorError in C. (sir_richard)
  • Make NMI handler fully C, now that the other parts are C too. (sir_richard)
  • Delete more ASM macros and code that are now unused. (sir_richard)
  • Put ASM macros back since the HAL also uses them. (sir_richard)
  • Fix a logic bug in KiExitTrap: Always only restore segments if we came from user-mode (since they might be bogus on a kernel transition as they're not always saved), even if the caller wants segment restore. (sir_richard)
  • Small perf boot: do a JMP, not a CALL into C handling code. (sir_richard)
  • Make KiGetTickCount/KiCallbackReturn handled in C (as stubs). (sir_richard)
  • Implement KeSynchronizeExecution in C. Move Kei386SpinOnSpinLock to C stub. (sir_richard)
  • Implement overall architecture for handling hardware interrupts in C. Not used yet, since it needs C code in HAL. (sir_richard)
  • Switch to a slightly (perhaps, hopefully?) safer version of V86 entry/exit to see if this fixes the buildbot boot (suffice it to say, the original code works fine on my test machine, but since half the developers seem to be using GCC 4.4 and the others GCC 4.1, I wouldn't be surprised if there's compiler subtleties involved). (sir_richard)
  • Bring back a simplified GPF handler just for V8086 opcode detection and V8086 exit, to see if this resolves testbot booting. (sir_richard)
  • A trap can get us into a state where DS/ES are invalid, making any pointer dereference (on DS/ES segmented memory, not SS, the stack) crash (and probably double-fault). Therefore, we have to be careful to switch to a good DS/ES before touching the TrapFrame pointer, which we don't have in ESP like the ASM code, but in a DS/ES-segmented register. For V8086 traps we can switch to the good DS/ES immediately, but for other kinds of traps, we actually need to save the current (bad) segments first. So we save them on the stack now, then switch to the good ones, then store the stack values into the trap frame. This is what happens on a non-optimized (-O0) build. On an optimized build, the segments will end up in registers instead, which is fine too (they'll be direct values). The order of instructions is guaranteed since the segment macros are volatile. (sir_richard)
  • The GPF and Invalid Opcode handlers are performance critical when talking about V8086 traps, because they control the main flow of execution during that mode (GPFs will be issued for any privileged instruction we need to emulate, and invalid opcode might be generated for BOPs). Because of this, we employ a fast entry/exit macro into V8086 mode since we can make certain assumptions. We detect, and use, such scenarios when the V8086 flag is enabled in EFLAGS. However, because we can land in a GPF handler with an invalid DS/ES, as some V8086 code could trample this during BIOS calls for example, we must make sure that we are on a valid DS/ES before dereferencing any pointer. We fixup DS/ES either in KiEnterTrap (for normal entry/exit) or, for V86, in KiEnterV86Trap. Notice the problem: we need to detect which of these to use early on but we can't touch the EFLAGS in the frame because DS/ES could be invalid. Thankfully SS is always guaranteed valid, so stack dereferences are game! We therefore read the EFLAGS here, in assembly, where we can touch ESP as we please. We save this in EDX, which will be used as the second argument for the FASTCALL C trap entry. When we make the fast V86 check, we use the parameter instead of the trap frame, leading us to using the correct trap entry function, which fixes up DS/ES and lets us go on our merry way... (sir_richard)
  • Make appropriate changes to GENERATE_TRAP_HANDLERS macro. (sir_richard)
  • Switch to using well-known NT trap handler names (hex-based, double-zeroed) instead of decimal-based trap handler names which are confusing. (sir_richard)
  • Clean up some debug spew. (sir_richard)
  • Enable a few definitions for amd64, too (Timo Kreuzer)
  • Add a dummy PSEH2 for amd64 (Timo Kreuzer)
  • Fix some bugs and cleanup V8086 code in regards to flags usage. (sir_richard)
  • Add VDM debug spew to see why there's now an invalid opcode on Windows builds of VMWare and certain QEmu combinations. (Note: the double fault issue is fixed, this is a new issue). (sir_richard)
  • KiExitV86Mode is supposed to return a pointer to the protected mode KTRAP_FRAME. Instead it was returning the value of TrapFrame->Edi, which would be identical to PmTrapFrame->Ebp, which doesn't have any particular meaning. Fix it by returning PmTrapFrame directly. Fixes 2nd stage boot. (Timo Kreuzer)
  • Remove debug spew (but keep Flag macros and fixes which fixed other bugs), thanks Timo. (sir_richard)
  • Perf improvements: (sir_richard)
  • Optimize trap entry/exit by manually copying registers to the trap frame the correct way from the first time. Avoids conversion between PUSHA and KTRAP_FRAMEs and makes trap frames compatible the whole time (other than being slightly faster). (sir_richard)
  • Provide compiler with hints on likely code paths during trap entry and exit, which makes the code more linear and improves performance. The following assumptions (known to be true) are made: (1) Interrupts happen more often than system calls (per unit of time), so prioritize paths we take during interrupts. (2) The CPU spends most of its time in Ring 3, so prioritize traps from user-mode. (3) V8086 mode, debugging, 16-bit stacks, are uncommon, so de-prioritize them. (sir_richard)
  • Use KTRAP_FRAME offset names recommended by Timo instead of substraction which was confusing some people (still seems clearer to me). (sir_richard)
  • Fix bug in illegal instruction trap handling. (Timo)
  • Merge from amd64-branch: (Timo Kreuzer)
  • 34969 Some ULONG / SIZE_T fixes, handle amd64 in PspCreateThread (Timo Kreuzer)
  • 34986 Fix several 64 bit issues (Timo Kreuzer)
  • 35968 Fix Size parameter of CmpAllpcate (ULONG->SIZE_T). (Timo Kreuzer)
  • 35970 Fix pointer <-> ULONG cast (Timo Kreuzer)
  • 35971 Fix pointer <-> ULONG cast fixes (Timo Kreuzer)
  • 36332 fix 64 bit warnings (Timo Kreuzer)
  • 37435 Fix several ULONG/ULONG_PTR issues. Add a parameter to DefaultQueryInfoBufferCheck for ULONG_PTR/SIZE_T ResultLength (Timo Kreuzer)
  • 39522 ExInitializeSystemlookasideList: Use InitializeSListHead instead of directly accessing the members. ExpAllocateLocallyUniqueId: use InterlockedCompareExchange64 instead of non-portable ExfInterlockedCompareExchange64 (Timo Kreuzer)
  • 37433 fix InterlockedExchangePointer usage (Timo Kreuzer)
  • 38105 Use KeGetCurrentPrcb() instead of KeGetPcr()->Prcb / KeGetPcr()->CurrentPrcb (Timo Kreuzer)
  • 39160 Use wbinvd instruction for amd64, too. (Timo Kreuzer)
  • KiTrap0DHandler: fix buffer overrun (Spotted by Amine Khaldi) and optimize the code by checking the counter variable, instead of Instruction, this works the same, but the compiler can make sense of it and safe one comparison. (Timo Kreuzer)
  • Fix buffer overrun in ExFreePoolWithTag when dealing with a PoolType other than NonPagedPool and PagedPool. Spotted by Amine Khaldi. (Timo Kreuzer)
  • Fix possible NULL pointer dereference. Spotted by Amine Khaldi. (Timo Kreuzer)
  • Implement KeUpdateSystemTime and KeUpdateRunTime in C instead of ASM. Based off eVb's ARM implementation, with multiple bugs fixed (incorrect update of system counters, incorrect expiration of timers, remove non-used debug features, use locks when needed). (sir_richard)
  • Implement KiComputeTimerTableIndex in C instead of ASM. Based off eVb's ARM implementation, bugfixed to do correct math instead. (sir_richard)
  • As a side effect, this should fix timers on ARM ;-) (sir_richard)
  • Implement KiServiceExit2, C Version. This is used for exiting to user-mode with full state restore (as in NtContinue, thread startup, NtRaiseException...). (sir_richard)
  • Implement system service exit (for system calls or KiServiceExit2) in KiExitTrap. Both iret (for user calls), jmp (for kernel calls) and sysexit (for user fast calls) are implemented. (sir_richard)
  • Implement KiThreadStartup in C instead of ASM. It is the first caller of the new KiServiceExit2. Threads now start up in C! (sir_richard)
  • Implement "Edited Trap Frame" exit. This funky trick is actually how NT emulates longjmp/setjmp when doing an NtContinue: it allows arbitrary return with a new CS/ESP. (sir_richard)
  • Implement C version of KiServiceExit, the second system call exit routine. This one sets a new EAX value to be returned to the caller and is used by system calls. (sir_richard)
  • Implement NtContinue in C instead of ASM. Due to the changes above, this can now be done in C and use the new KiServiceExit. (sir_richard)
  • Implement the special NtRaiseException in C as well, just like we did for NtContinue. (sir_richard)
  • Kei386EoiHelper now jumps into the C KiEoiHelper. All interrupt exit is now done through the C trap exit code. (sir_richard)
  • The ASM KiServiceExit/KiServiceExit2 are no more. All system call exit is now done through the C trap exit code. (sir_richard)
  • We don't actually need wrappers for NtContinue/NtRaiseException. These are now fully portable C code, so move them appropriately. (sir_richard)
  • Convert system call handling to C. Only kernel system calls are done this way for now, not SYSENTER calls from user-mode. A small ASM trampoline is used inline for the call itself. (sir_richard)
  • 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)
  • All system calls are now handled in C. This code will be further optimized/refined soon. (sir_richard)
  • Try backing out a change to see if thix fixes BuildBot. (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)
  • Make KiUserTrap use the MODE_MASK instead of hard-coding a check for Ring 0 CS (which is slower and not as correct). (sir_richard)
  • Fix initialization of PICs. (Dmitry Gorbachev)
  • Cleanup the traphdlr.c vs. trap_x.h mess into something much more structured. trap_x.h is now all inlined C functions which pretty much replace the asmmacros.S file. It is meant to be used outside the kernel as well (such as by the HAL, which requires trap entry/exit too). (sir_richard)
  • Split the GENERATE_TRAP_HANDLER in two separate macros. The original builds the name of the function (and makes it global), while the TRAP_HANDLER_PROLOG is actually the code. (sir_richard)
  • Make TRAP_HANDLER_PROLOG handle software traps, in which the interrupt stack must be faked. (sir_richard)
  • Optimize TRAP_HANDLER_PROLOG by not pushing an error code and then making space on the stack without the error code -- just make space with the error code in the first place (nobody reads the value, so having it zero or garbage isn't important). (sir_richard)
  • Implement a C/Extended ASM macro for generating trap stubs, removing the need to do this in ASM. The macro covers all possible entries, from SYSENTER to a fake sotware interrupt (needed for HAL changes later). By being somewhat in C, it makes the code cleaner to read and uses C expressions to make its decisions, making the code more maintanable as well. It also removes the need for separate assembly files. (sir_richard)
  • Modify the semantics of how a fast system call (SYSENTER) is processed in the stub, by moving more work in the C handler, such as setting up FS and getting the correct argument stack. Saves us some cycles too (and allows the trap stub macro to be more generic). (sir_richard)
  • Refactor some stub code and add a couple of more possible trap exit mechanisms (needed for HAL). Later we should really combine all the exit macros into one, as we've done for the entry macro. (sir_richard)
  • Remove said hacks and have a normal C implementation of KeUpdateSystemTime. It exits the interrupt through a soft interrupt exit. (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)
  • Implement KiUnexpectedInterruptTail and KiUnexpectedInterrupt in C as well. (sir_richard)
  • Implement the KiInterruptTemplate in C since we now have a C entrry macro. Add a new KI_HARDWARE_INT flag for the C entry macro to generate the appropriate labels for runtime patching of the KINTERRUPT pointer to work, and issue an absolute instead of relative jmp. (sir_richard)
  • Remove thousands of lines of assembly that are not needed anymore. (sir_richard)
  • Put all interrupt code in irqobj.c (platform-specific). (sir_richard)
  • DPC Interrupt is really the thread scheduler interrupt (DPC work happens in C), which mostly does contexts switching and scheduling decisions, so move it to ctxswitch.S (sir_richard)
  • Implement chained interrupt dispatch. For level interrupts, the first interrupt handler should process the interrupt and no other handlers are called. Edge interrupts are another matter, but since they aren't yet supported, I haven't implemented that code path (it wasn't implemented previously). I seriously hope we don't have edge/chained interrupts because the HAL/NTOS could never handle this! (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)
  • Fix certain parts of ARM3 which made the assumption that a PDE shares the same structure as a PTE. This is true on all architectures except ARM. We now define a new MMPDE type specifically for PDEs. On x86 it is defined to MMPTE with no changes. (sir_richard)
  • Combine ARM3 phase 0 and 1 even it means calling back into TurdMM for one function call. (sir_richard)
  • Separate out platform-specific parts of ARM3 initialization instead of having everything in an arch-specific file. (sir_richard)
  • Allow registry configuration of large kernel stack size, with proper checks. (sir_richard)
  • Actually use calculated kernel stack size value. (sir_richard)
  • Found a leak fix patch from years ago (Ged Murphy)
  • Update log2lines to ver. 2.1. Jan Roeloffzen, bug #4342. (Dmitry Gorbachev)
  • MxGetNextPage is not platform-specific, so share it. (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)
  • Move more functions from the i386 ARM3 directory to the portable/shared directory, since they apply to all architectures. (sir_richard)
  • 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)
  • Make the PFN database actually 2 PFN Databases: MmPfnDatabase[0] which is the ReactOS mapping of PHYSICAL_PAGE structures, and MmPfnDatabase[1] which will be the ARM3 mapping of MMPFN structures. The latter is as-of-yet unused, but memory for it is now being reserved. (sir_richard)
  • Fix floppy controller detection (Cameron Gutman; #4391)
  • Simplify waiting in Get_Byte and Send_Byte (Cameron Gutman; #4391)
  • for details (Cameron Gutman; #4391)
  • Fix a stupid bug: x86 has 1024 PDEs, and ARM has 4096 PDEs, not the other way around. (sir_richard)
  • Map the ARM3 PFN database as well, now. (sir_richard)
  • Start initializing the ARM3 PFN database entries, right now for pages that have been mapped directly through PTE/PDE manipulation. (sir_richard)
  • Fix broken MI_PFNENTRY_TO_PFN macro. (sir_richard)
  • Remove bogus assertion. (sir_richard)
  • Get rid of page locking mechanism for MDL since I can't see a reason this would make sense, since these pages won't be scheduled for page out anyway, and that is the only code that looked at this value. (sir_richard)
  • Push vector as error code on the stack in KiUnexpectedInterrupt* instead of putting it into eax, because we must not clobber it. Spotted by jcatena. (Timo Kreuzer)
  • Allocate the trap frame on the stack by decreasing esp before modifying any members. (Timo Kreuzer)
  • While doing it after is a tiny optimization (no need to wait for esp to be ready) and would work with all real traps (which clear cli), it doesn't work with Zw calls that directly call KiSystemService with interrupts enabled. This caused random trap frame corruption when an interrupt fired after members of the trap frame have been set but before esp was adjusted. Should hopefully fix most random failures on real hardware and qemu. (Timo Kreuzer)
  • 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)
  • Build the actual ARM3 PFN database. (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)
  • Move some more initialization code to ARM3 instead of mm. (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)
  • Add missing InbvIndicateProgress routine to update the progress bar while drivers are loading. Make boot and system driver initialization call it for each new driver. This updates the progress bar in the 25-75% range which was defined prior to IoInitSystem. (sir_richard)
  • Fix InbvUpdateProgressBar code to correctly handle the floor and ceiling. (sir_richard)
  • Remove shutdown "funny messages", do correct shutdown (should fix the ACPI shutdown issues) procedure. Display the shutdown screen on systems without ACPI (just like Windows does). (sir_richard)
  • Add a resource header with IDB_ definitions for all the embedded bitmaps, instead of using magic numbers and guessing which is which. (sir_richard)
  • Fix the boot logo initialization code as it was all wrong. 5 is the logo to be used during shutdown, for example, not the full logo background (which is supposed to be in 1, with a special palette that's faded in). Also handle server vs workstation scenarios. (sir_richard)
  • Booting in the new WinNT mode now correctly displays the blue background screen when in debug (/SOS) mode, and the header/footer also has the correct color, as does the separator band. (sir_richard)
  • Remove logo files that are simply not needed for ReactOS (Compute Cluster Edition, Tablet PC, etc...) (sir_richard)
  • Fix logo files (mostly) to have correct palettes. Note that 1.bmp is still quite different from Windows (no fade). (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)
  • Rewrite Trap exits stubs in raw assembly (2nd try) and remove inline assembly. Bugcheck in KiTrap0DHandler, when the fault was not handled. Replace code patching for sysexit vs iret with a function pointer. Slightly refactor KiSystemServiceHandler/KiFastCallEntryHanlder. Unroll the loop in the systemcall handler and use volatile keyword when reloading TrapFrame and DescriptorTable from the new stack after converting to gui thread to prevent the compiler from optimizing it away (or moving it out of the loop). Add an asm macro KiCallHandler, which expands to call on debug builds to make sure backtraces work as expected and to jmp on release builds for improved performance. Modify KiExitV86Trap to always exit and add DECLSPEC_NORETURN. Use __debugbreak() instead of while(TRUE) on errors in KiExitTrapDebugChecks. (Timo Kreuzer)
  • The old code hat 2 issues: one was restoring segments in KiExitV86Trap when they shouldn't be, leading to a bugcheck. And the other was a long hang (5 mintes or more) in 3rd stage on qemu when selecting RosDbg, caused by the KiFastCallExitHandler function pointer being initialized with a pointer to the iret handler. Initializing it in code solved the issue. To figure out why is left as an exercise to the reader. (Timo Kreuzer)
  • 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)
  • Implement IopInitializePnpServices to replace PnpInit. Mostly the same work is done, but using new PnP ABI. (sir_richard)
  • Implement new helper: IopCreateRegistryKeyEx. (sir_richard)
  • Try moving towards new ABI. Lots of debug spam will be generated by various device node flags in incorrect states, and hacks that had to be made to maintain current functionality. Also document things being done at the wrong place. One small step... (sir_richard)
  • 1MB is not 1000 * 1KB... (sir_richard)
  • Read almost all the Memory Management variables into the system configuration vector. These includes pool limits, percentages, debugging flags, behavioral changes, and others. (sir_richard)
  • Minimal stubbed support for some large page functionality in case it gets implemented later and these things would've been ignored. One critical change is that now the MmProcessList is initialized, and the system process is added to it. Other processes should be added later. (sir_richard)
  • Add stubbed support for parsing the registry list of drivers that should have large pages enabled. (sir_richard)
  • Initialize the loaded module list before working set work. (sir_richard)
  • Reload the boot drivers much earlier, as part of ARM3 initialization. (sir_richard)
  • Start doing some minor MmResidentAvailablePages accounting during bootup. (sir_richard)
  • Start doing the math required for computing the appropriate MmSystemCacheWsMinimum on the booting system (based on RAM). (sir_richard)
  • Now that we use the HAL heap, add the code to scan it for I/O mappings. These are dangerous because we need to sync up caching attributes (not yet used in ReactOS, so not a problem for now). (sir_richard)
  • Add more header definitions, and helper definitions such as PDE_MAPPED_VA instead of doing the math by hand. (sir_richard)
  • Move MmPageEntireDriver and MmResetDriverPaging to sysldr.c since drvmgmt.c is more for Driver Verifier-style functionality. (sir_richard)
  • Recommit rest of ntifs.h and wdm.h from header merge revert (Timo Kreuzer)
  • Enable MmPageEntireDriver by implementing MiSetPagingOfDriver. (sir_richard)
  • Call MiEnablePagingOfDriver from MmLoadSystemImage and implement it. All the work is done other than actually enabling paging, which requires system working set support. (sir_richard)
  • Implement MiWriteProtectSystemImage and MiComputeDriverProtection. All the work is done other than actually setting the bits on the pages, since I wanted to avoid too many changes. (sir_richard)
  • MmCheckSystemImage returns STATUS_INVALID_IMAGE_PROTECT, not STATUS_INVALID_IMAGE_FORMAT, so the branch in MmLoadSystemImage needs to check for the correct status code. (sir_richard)
  • Support FLG_SHOW_LDR_SNAPS for the kernel loader. (sir_richard)
  • Support unload of system modules by parsing the LoadedImports (implement MiDereferenceImports which was just a stub) and calling MiCallDllUnloadAndUnloadDll. (sir_richard)
  • Fix a bug in MiClearImports. (sir_richard)
  • remove svn:mergeinfo (Timo Kreuzer)
  • MiFindExportedRoutineByName should validate the ordinal to make sure it's not higher than the function count. (sir_richard)
  • Use MM_SYSLDR_ defines instead of magic pointer casts. Use appropriate pool tags. (sir_richard)
  • Set the LoadedImport count early-on during image referencing, so that failure will correctly de-reference the imports. By setting it to zero, failures would've leaked driver-dependent DLLs already loaded but now useless. (sir_richard)
  • Do the same checks as Windows to avoid drivers linked with user-mode DLLs. (sir_richard)
  • Allow "coverage" and "irt" to be linked with Win32K drivers as well. (sir_richard)
  • When the linker is fixed not to generate corrupt drivers, add the appropriate code to scan IMAGE_DIRECTORY_ENTRY_IAT for updating thunks. A hack exists in ReactOS now to permit loading these hacked drivers, but Windows is not so generous and will crash with a ReactOS driver. (sir_richard)
  • Implement and call MiUseLargeDriverPage. (sir_richard)
  • Implement and call MiBuildImportsForBootDrivers. We now have full dependency tracking for correct unloading. (sir_richard)
  • Implement and call MiLocateKernelSections. Pool code and paging paths will require this information later. Loader work done for now. (sir_richard)
  • Implement MiRemoveAnyPage and MiRemovePageByColor, but only using the list heads, and not the color list heads. Unused. (sir_richard)
  • Fixup unused MiInsertPageInFreeList variables ot match the other functions (ColorTable vs ColorHead). (sir_richard)
  • Acquire PFN lock before setting up hyperspace PTE/page. (sir_richard)
  • Flush TLB after setting up hyperspace. (sir_richard)
  • Use new MiRemoveAnyPage interface instead of MmAllocPage(MC_SYSTEM), as the first test of the new Page API/ABI. (sir_richard)
  • Add support for creating software PTEs. (sir_richard)
  • Restore previous correct ASM behavior of checking for success codes, not only STATUS_SUCCESS, after a page fault. For example, a demand zero fault returns STATUS_PAGE_FAULT_DEMAND_ZERO upon success, and the new C code would treat it as a failure. Fixes a bug. (sir_richard)
  • HEADERS: Add PDE_TOP. It is defined for IA64/AMD64 but not for i386 (in the public headers). Add a note that these addresses are bogus on PAE systems. (sir_richard)
  • We might get page faults before memory areas are setup, since so much ARM3 work now gets done before the memory areas are ready to go. Since obviously these faults cannot be caused by non-ARM3 Mm, we assume them to be ARM3 faults (as long as they happened in KSEG0_BASE). Fixes a bug where early page faults in ARM3 PTEs would get treated as non-ARM3 faults and fail. (sir_richard)
  • MmSystemPageDirectory is an array of page directories, not just a value. On x86 there's just one page directory, but that's not the case on other architectures/PAE, so fix this bug. (sir_richard)
  • Compute MiHighestUserPte, MiHighestUserPde, MiSessionImagePteStart, MiSessionImagePteEnd, MiSessionBasePte, MiSessionLastPte since these internal variables did not exit yet. Useful for debugging and also future PFN support. Just computes some values, no behavior changes. (sir_richard)
  • User pages are not used until Phase 1, they should not be setup in Phase 0. Fixes premature initalization. (sir_richard)
  • Fix 4MB assumptions and use PDE_MAPPED_VA instead, which accurately describes the address space mapped by a PDE (which is different on PAE, x64, ARM, etc). (sir_richard)
  • Fix MiInsertPageInFreeList, it was using the ARM3 PFN Database macro, even though we are still using the Mm PFN Database. Also, it was lacking the code to notify the zero-page thread, and to increase available pages. (sir_richard)
  • Add assertions to the paged pool and demand zero page faults, to catch possible errors and corruptions. These paths are not yet taken in today's builds, so they do not affect any runtime code. (sir_richard)
  • Add assertions regarding the portability of certain code, which will need changes on ARM/x64. These should probably be C_ASSERT's but I don't want to break Timo's build. (sir_richard)
  • Define MM_NOIRQL (found in assertions) instead of magical -1. (sir_richard)
  • Add MI_IS_SESSION_PTE macro. (sir_richard)
  • Export the MiXxxPte variables. (sir_richard)
  • Fix some typos in comments. (sir_richard)
  • Move MiFindContiguousPages to ARM3/contmem.c since I don't know what it was doing in freelist.c. No code change. (sir_richard)
  • When grabbing physically contigous pages from the zero or free list, make sure to re-initialize their PFN entries correctly, since their data might be stale. Fixes potential weird memory corruption bugs. (sir_richard)
  • Physically contiguous memory allocations are not guaranteed to be zeroed, so do not zero the pages. (sir_richard)
  • When allocating contigous memory, mark the PFN entries appropriately after mapping the I/O ranges. (sir_richard)
  • When freeing contiguous memory, assert that all the freed pages correspond to PFN entries that we expect to have allocated for this purpose. Detects (not neccessarily fixes) memory corruption issues in contiguous memory allocations. (sir_richard)
  • These changes mostly affect certain network card and sound card systems/real hardware, they fix possible bugs and detect corruption that was otherwise going by unnoticed. (sir_richard)
  • Fix definition of unused MI_MAKE_SOFTWARE_PTE macro. (sir_richard)
  • Correctly setup the PFN entries for freshly allocated paged pool pages. Fixes a problem where the page could've still had stale/garbage data. (sir_richard)
  • Add some extra assertions in the code to catch memory corruption and detect invalid logic. (sir_richard)
  • Fix some typos in the code (comments/whitespace). (sir_richard)
  • Make the dreaded page fault message that breaks paged pool on some systems more verbose for future debugging. (sir_richard)
  • Re-implement IoGetDeviceProperty. Main changes are usage of existing (and new) helper functions for registry/IRP access, much better factored code, correct implementation of DevicePropertyPhysicalDeviceObjectName, fixed implementation of DevicePropertyBootConfigurationTranslated and DevicePropertyBootConfiguration (do not crash the system anymore), and support for more device properties. (sir_richard)
  • Fix caller of IoGetDeviceProperty in pnpres.c to work with new function behavior (which matches WDK documentation and test cases). (sir_richard)
  • Implement helper function PnpBusTypeGuidGet, should be used later in other PnP code, but now used only for this patch. (sir_richard)
  • Implement helper function PnpDetermineResourceListSize, ditto. N.B. Current IopCalculateResourceListSize function is broken and callers should use this one instead. (sir_richard)
  • Implement helper function PpIrpQueryCapabilities, should be used later in device node code, but now only used for this patch. (sir_richard)
  • Implement helper function PnpDeviceObjectToDeviceInstance, ditto. (sir_richard)
  • Main purpose of this patch is to unblock the new PCIx driver. (sir_richard)
  • Root Bus PDO should not override Status with STATUS_NOT_IMPLEMENTED and instead use the current IRP status (which drivers/PnP will typically set to STATUS_NOT_SUPPORTED). Found by testing the new PCIx driver (probably fixes other bus drivers too). (sir_richard)
  • Implement MiDecrementShareCount (to start replacing MmReleasePageMemoryConsumer calls for pages that were grabbed through ARM3, not Mm). (sir_richard)
  • Implement MiInitializePfn (to initialize pages grabbed through ARM3/MiRemoveAnyPage instead of Mm/MmAllocPage). (sir_richard)
  • For stack pages, use new ARM3 PFN alloc/free routines, as a first test/beginning of the new ARM3 ABI. (sir_richard)
  • Implement and start using the Pending-Deletion PFN flag. (sir_richard)
  • As a result, for stack pages, the Transition page state will now be seen, and the new routine for re-inserting pages into the free list will now be used. Tracking of page table references is also done now for these pages (but we don't free the PT since this doesn't seem safe yet). (sir_richard)
  • Fix Implementation of BreakOnTermination -- Process Flags should be accessed with interlocked bit semantics, not through C bitfield extension. (sir_richard)
  • Revert 47425 and apply a better fix. (sir_richard)
  • Timo/Physicus: Please validate for AMD64. (sir_richard)
  • Write down the PTE attribute flags for X86/AMD64. Timo/Physicus: Please double-check. (sir_richard)
  • Write down the array that converts from the MM_ protection flags arleady defined, into the appropriate PTE attribute flags that are architecture-specific. (sir_richard)
  • This will allow constant-time conversion of NT attributes into PTE attributes. Win32 attributes to NT attributes conversion won't be needed until VAD support. (sir_richard)
  • Implement MiAllocatePfn, it is a simpler wrapper that grabs a page, sets its protection, and initializes its PFN entry. (sir_richard)
  • Use MiAllocatePfn in MiLoadImageSection instead of MmAllocPage. Other than doing a better job at initializing the page, it creates our first caller of this function, great for testing, since this is a rather high-demand function, especially at boot. (sir_richard)
  • Please test. (sir_richard)
  • Re-enable the APC debug check in the system call exit code that somehow got removed in 46247. (Stefan Ginsberg)
  • Use an inline for emitting the iret instruction in C code for portability. (Stefan Ginsberg)
  • Simplify the MSC assembly in KiSwitchToBootStack. (Stefan Ginsberg)
  • Fix assertion hit during install (Johannes Anderwald)
  • Fix identation (Johannes Anderwald)
  • Remove superflous spaces (Johannes Anderwald)
  • Allocate non-paged pool pages with MiRemoveAnyPage instead of MmAllocPage. (sir_richard)
  • Implement a MI_MAKE_HARDWARE_PTE macro for the generation of valid kernel PTEs instead of always taking the ValidKernelPte and changing its flags. This macro will take into account the protection mask (up until now ignored) and use the array previously implemented to determine the correct hardware PTE settings. Assertions are also added to validate correct usage of the macro, and later revisions will fill out NT-specific fields to help deal with transition PTEs, page faults, etc. (sir_richard)
  • Make the stack code the first user of this macro, for the stack PTEs. Good testing base as we create kernel stacks very often. (sir_richard)
  • The NT MM ABI specifies that in between the allocation of a new PTE and its initialization as a valid PFN, the PTE entry should be an invalid PTE, and should only be marked valid after the PFN has been initialized. For stack PTEs, do this -- first allocating the page, making it invalid, then initializing the PFN, and then writing the valid page. (sir_richard)
  • Build paged pool demand-zero PTE with MI_MAKE_SOFTWARE_PTE macro. (sir_richard)
  • Handle paged pool demand-zero fault fulfillment with MI_MAKE_HARDWARE_PTE macro. (sir_richard)
  • Use MiRemoveAnyPage instead of MmAllocPage, in paged pool demand-zero fault fulfillment. (sir_richard)
  • These changes affect code paths that are not currently in-use. (sir_richard)
  • When expanding paged pool, use MiRemoveAnyPage, not MmAllocPage. (sir_richard)
  • When expanding paged pool, initialize the PFN entry for the allocated page. Note we might be in arbitrary process space, so the PTE is not necessary valid for the process causing the expansion. (sir_richard)
  • Implement MiInitializePfnForOtherProcess to handle the case above. (sir_richard)
  • Change two static ASSERTs into C_ASSERTs. Might break non-x86 builds for a bit (vs breaking them at boot, which is worse). (sir_richard)
  • Paged pool should start working soon. (sir_richard)
  • Implement MiDeleteSystemPageableVm. (sir_richard)
  • The paged pool free code was behaving incorrectly, assuming that paged pool was "locked down" and never paged out/reused (a valid NT operation mode), while the allocation code was assuming paged pool was a volatile, reusable, pageable resource (normal NT operation mode). The free code now assumes normal operation mode, and actually frees the freed paged pool pages, by using MiDeleteSystemPageableVm. (sir_richard)
  • I have a feeling this will make ARM3 paged pool work. (sir_richard)
  • In MiDeleteSystemPageableVm, should also handle the case where the PTE is demand-zero. This can happen if the caller allocated, say, 12KB (3 pages) of paged pool, only touched 4KB (1 page), and then frees the allocation -- the other 2 pages will still be demand-zero at this point. (sir_richard)
  • In MiInitializePfnForOtherProcess, should increment the sharecount of the page table PFN entry, not the PFN entry of the PTE itself. Spotted by Stefan100. (sir_richard)
  • Don't assume that ANY fault in the system address range, not associated to a memory area, might be ARM3. Instead, since this hack only exists for early boot page pool support, make only treat this as an ARM3 fault when it happens in the paged pool area or higher. Leads to more direct Mm crashes when invalid page access happens, instead of infinite "PAGE FAULT ON PAGE TABLES". (sir_richard)
  • Define the POOL_HEADER for x64. (sir_richard)
  • Define POOL_BLOCK_SIZE definition to set the minimum pool block size. In NT, this is equal to a LIST_ENTRY structure, because the Pool Allocator must be able to store a LIST_ENTRY into a freed pool block. This also determines the alignment of pool allocations. So 8 on x86, 16 on x64. (sir_richard)
  • Don't depend on LIST_ENTRY, but use POOL_BLOCK_SIZE instead (on IA64, if we ever want to support this, the pool block size is different from a LIST_ENTRY/POOL_HEADER). (sir_richard)
  • The following ASSERTs must hold: the POOL_HEADER must be as big as the the smallest pool block (POOL_BLOCK_SIZE), which must be at least as big as a LIST_ENTRY structure. 8 == 8 == 8 on x86, 16 == 16 == 16 on x64. (sir_richard)
  • Use logical math operations on the various block<->entry<->free_list_head operations in the pool code, instead of works-by-chance-and-assumption pointer math operations. This will now allow pool implementations where the pool header is not the size of a pool block (and the size of a LIST_ENTRY, by definition, although, even that, could change, if we choose to implement a cache-aligned overhead). (sir_richard)
  • Defensive programming on the pool macros. (sir_richard)
  • Add some paranoid-invariant list access checks to the pool code. They serve a dual purpose: catch pool corruption by broken drivers/kernel code, as well as catch malicious modification of the pool links as part of a kernel-mode exploit. (sir_richard)
  • Not yet used, thanks to Arthur for the idea. (sir_richard)
  • See comment for more information. (sir_richard)
  • Fix Exp*PoolList macros. Also make then non-inlined, so we can see who called them in a stack trace. (sir_richard)
  • Enable them. (sir_richard)
  • This boots on my system -- if it doesn't boot on yours, someone is corrupting your nonpaged pool. Reverting this patch is NOT the solution to your woes. (sir_richard)
  • Kill debug spew. (sir_richard)
  • Fix up POOL_PREV_BLOCK based on suggestion by hpoussin. (sir_richard)
  • Fix up NTAPI location in function definition. (sir_richard)
  • Implement even more stringent header checks: ExpCheckPoolHeader and ExpCheckPoolBlocks. Normally we would only want this on a DBG build, but I am enabling them for now until I can fix paged pool. If your machine crashes, reverting this commit is NOT the solution (boots for me). (sir_richard)
  • Add a AllowPagedPool BOOLEAN that will allow us to selectively enable when the ARM3 pool can be used, playing around with the situation that causes the corruption, and perhaps making it easier to find/fix. (sir_richard)
  • Even after allowing ARM3 paged pool, we should still use the old allocator to free allocations made by the old allocator! (sir_richard)
  • Kill some debug spew. (sir_richard)
  • Fix for the the bug that broke ARM3 paged pool (and has been corrupting ReactOS paged pool behind the scenes for years): (sir_richard)
  • When a KCB (key stuff) is allocated, the key name associated with it receives an NCB (name stuff). In case this name is already used, a cache exists, and an existing NCB is grabbed, and its reference count is increased. When the KCB goes away, its NCB loses a reference. When all references are gone, the NCB is destroyed. Simple enough. (sir_richard)
  • It turns out that what was currently happening is that an NCB would get dereferenced to 0, deleted, but still remained attached to a valid KCB (shouldn't happen). When that KCB went away, the NCB's reference count was dropped to... -1, and then -2, -3, -4, etc. Remember this is a FREED NCB. In other words, freed pool, that might now belong to someone else, was getting "-1" operations on it. So any value stored in that freed pool would get decremented by one. In ARM3 paged pool, because the allocator keeps a linked list, what would happen is that the FLINK pointer would be 0xE0F01234 instead of 0xE1A01234. What happened is that "0xE1A0" was treated as the reference count of the freed NCB, and it kept getting dereferenced down to 0xE0F0. (sir_richard)
  • Proving this was easy, by adding an ASSERT(Ncb->RefCount >= 1) to the routine that dereferences NCBs. Obviously, we should not try to dereference an NCB that has a reference count of 0, because that NCB is now gone. Adding this ASSERT immediately caught the error, regardless of which pool implementation was being used, so this was a problem in ReactOS today, right now. (sir_richard)
  • My first thought was that we were taking references to NCBs without incrementing the reference count. The NCB gets referenced in two places: when it gets created, and everytime a cached NCB is re-used for a new KCB (all this in CmpGetNameControlBlock). (sir_richard)
  • After adding some tracing code, I discovered that CmpGetNameControlBlock would sometimes return an NCB that was cached, but without referencing it. I did not understand why, since the code says "if (Found) Ncb->RefCount++". (sir_richard)
  • Further analysis showed that what would happen, on this particular instance, is that NCB "Foo" was being Found, but NCB "Bar" was returned instead. Therefore, causing some serious issues: First, NCB Foo was receiving too many references. Secondly, NCB Bar was not being referenced. (sir_richard)
  • Worse though, it turns out this would happen when "Foo" was the CORRECT NCB, and "Bar" was an INCORRECT NCB. What do we mean by correct and incorrect? Well, because NCBs are hashed, it's possible for two NCB hashes to be VERY SIMILAR, but only ONE OF THOSE NCBs will be the right one -- for example, HKLM\Software\Hello vs HKLM\Software\Hell. (sir_richard)
  • In our case, when a KCB for "Hello" was searching for the "Hello" NCB, the "Hello NCB would get a reference, but the "Hell" NCB would be returned. In other words, whenever a HASH COLLISION happened, the incorrect NCB was returned, probably messing up registry code in the process. Subsequently, when the KCB was dereferneced, it was attached to this incorrect, under-referenced NCB. (sir_richard)
  • Since in ANY hash collision with "Hell", in our example, the "Hell" NCB would come first, subsequent searches for "Hellmaster", "Hellboy", "Hello World" would all still return "Hell". Eventually when all these KCBs would go away, the "Hell" NCB would reach even -18 references. (sir_richard)
  • The simple solution? When the CORRECT NCB is found, STOP SEARCHING! By adding a simple "break" statement. Otherwise, even after the correct NCB is found, further, incorrect, collided NCBs are found, and eventually the last one ("Hell", in our example) got returned, and under-referenced, while "Hellmaster" and "Hellboy" were not returned, but LEAKED REFERENCES. (sir_richard)
  • There you have it folks, MEMORY CORRUPTION (USE-AFTER-FREE), INCORRECT REGISTRY NAME PARSHING, REFERENCE LEAKS and REFERENCE UNDERRUNS, all due to ONE missing "break;". (sir_richard)
  • r (sir_richard)
  • Silence more debug spew. (sir_richard)
  • Clean up /mm a bit, move sysldr.c into ARM3. (sir_richard)
  • Fix a loop off-by-one when saving the page table index in contigious memory allocation PFNs. Spotted by Stefan100. (sir_richard)
  • Implement MiRemoveZeroPage and MiZeroPhysicalPage. (sir_richard)
  • Not yet used. (sir_richard)
  • Don't use MmAllocPage for the first paged pool PDE, instead, use MiRemoveZeroPage. (sir_richard)
  • Use MiInitializePfnForOtherProcess to setup the first paged pool PDE. (sir_richard)
  • A PFN entry is not necessarily physical only if it is higher than MmHighestPhysicalPage. It can also be physical if it lies in a memory hole within the min-max physical page range. We can detect this by using our PFN Bitmap. So replace all "Is this an I/O mapping?" checks with a check on whether or not the PFN Database entry is NULL (which will check for us both of these statements). This ought to be a macro... (sir_richard)
  • Another one bites the dust, another one bites the dust. And another one gone and another one gone. Another one bites the dust, yeah. Out of the doorway the bullets rip, Repeating to the sound of the beat. (sir_richard)
  • Fix a comment and remove a superfluous extern. (Stefan Ginsberg)
  • Enable usage of ARM3 paged pool, up until Mm Phase 2. (sir_richard)
  • Re-arrange some of the init code, now that we have access to ARM3 paged pool early-on. Move more code to ARM3::INIT in its right place. (sir_richard)
  • Enable using the ARM3 PFN Database, getting rid of the old ReactOS PFN database. Should reduce physical memory usage now that we don't have two copies anymore. (sir_richard)
  • Fix the ARM3 PFN Datbase initialization code. (sir_richard)
  • Get rid of MiInitializePageList, use MiGetPfnEntryOffset instead of hard-coded pointer math in freelist.c. (sir_richard)
  • This is the last big low-level Mm/ARM3 patch for a long, long time. (sir_richard)
  • Inline writing to PTEs through MI_WRITE_VALID/INVALID_PTE. (Stefan Ginsberg)
  • Check registry for our CardList, check if the PCI hardware matches any entry in there that specifies it has full/extended address decoding, and write the registry flag for it. (sir_richard)
  • Warn only once about MmLockPageableImageSection being unimplemented. (sir_richard)
  • There's no such thing as PRTL_MESSAGE_RESOURCE_ENTRY, use PMESSAGE_RESOURCE_ENTRY instead. (sir_richard)
  • Add "vf" NTOS component, required NDK headers, and enable exports required for PCI driver to load. (sir_richard)
  • VfFailDeviceNode is actuall __cdecl. (sir_richard)
  • Sort, update, clean-up, and add descriptions to bugcodes.mc. (sir_richard)
  • Warn only once in MmSecureVirtualMemory/MmUnsecureVirtualMemory, like it was done in 47864. (Aleksey Bragin)
  • PnpBusTypeGuidGet : Really return status. (Amine Khaldi)
  • Dedicated to Richard ;) (Amine Khaldi)
  • Update comctl32 base address. (Sylvain Petreolle)
  • Avoids inetcomm related comctl32 relocations. (Sylvain Petreolle)
  • Also update comdlg32 address. (Sylvain Petreolle)
  • Fixup some base address after mshtml growup. (Sylvain Petreolle)
  • Revert rpcrt4 to 99% previous state : (Samuel)
  • keep out unix functions (Samuel)
  • keep checks that prevent crashes in rpc cstub and rpc winetests (Samuel)
  • Fix a typo. (Aleksey Bragin)
  • If the memory area is owned by ARM3, and it's being freed, don't touch the pages, just unlink it and free the memory. This is useful for MAREAs being used by ARM3 to protect pieces of address space from the Ros Mm Allocator, but when we don't want it to start playing with our pages. When we do free those MAREAs, keep it away! (sir_richard)
  • Handle faults on user-mode addresses, from user-mode processes, if they are owned by ARM3, so they can be forwarded to the VAD fault handler. (sir_richard)
  • Implement basic VAD AVL tree routines (Insert, LookupEmpty, GetPrevious, CheckForConflict, Locate). This is enough to insert VADs, find a free address range, and locate a VAD by address. No delete yet (sir_richard)
  • Thanks to Timo Kreuzer for some clever definitions, Knuth for his genius, several online C implementations for ideas, the HPI kernel blog for insight on how Windows does it, and others. (sir_richard)
  • Learn to build User PTEs as well, with MI_MAKE_HARDWARE_PTE_USER. (sir_richard)
  • MI_MAKE_HARDWARE_PTE becomes MI_MAKE_HARDWARE_PTE_KERNEL, since it assumed this. MI_MAKE_HARDWARE_PTE is now a "generic" you can use when you don't know what the PTE should be. It uses MiDetermineUserGlobalMask to set the right bits. (sir_richard)
  • Add two more helpers: MI_IS_PAGE_TABLE_ADDRESS and MI_IS_SYSTEM_PAGE_TABLE_ADDDRESS. One is in the symbols, the other I made up to make things clearer. (sir_richard)
  • MiResolveDemandZeroFault now knnows how to resolve user-demand-zero-faults. (sir_richard)
  • Implement MiZeroPfn to do the actual zeroing during user-demand-zero-faults (also later for VAD faults). (sir_richard)
  • MiRosTakeOverPebTebRanges now creates a small ~1MB ARM3 memory range on top of the ReactOS per-process VA. This does a couple of things: First of all, it changes the default PEB address to another static address. Still not dynamic like it will be soon, but at least it changes it a bit so we can test if anything breaks due to that. It also likewise changes the addresses of the TEBs (Shifted down by 1MB, basically). Finally, it blocks off that part of address space, which nobody should be using now, to see if anyone does indeed touch it. (sir_richard)
  • Knowing if this change causes issues will help later in determining regressions due to TEB/PEBs mapped as VADs by ARM3, and regressions simply due to the change in VA layout. (sir_richard)
  • When implemented, the VAD mapping for PEB/TEB will only use that ~1MB, which yes, will limit ReactOS processes to each have only 256 threads. That is obviously a temporary limitation, one I doubt we'll even hit, but I'm putting it out here so you know. (sir_richard)
  • Fix "fail". Dedicated to Timo. (sir_richard)
  • Fix a very stupid bug which made any machine with less than 52GB of RAM appear as a "Small memory machine" (instead of 13MB). (sir_richard)
  • Initialize MmTotalCommitLimit, MmTotalCommitLimitMaximum for consistency. (sir_richard)
  • Initialize and honor MmAllocationFragment value from registry, or from defaults. (sir_richard)
  • Initialize the system cache working set pushlock. (sir_richard)
  • Implement Mi(Un)Lock(Process)WorkingSet inlines to handle the various scenarios. Replace broken/hacky code that was in the system loader, fault handler, and VM deletion paths with the correct macros. No locking is done yet as ReactOS' MAREA implementation overloads the Vm field in EPROCESS, but the correct APC blockings and state transitions are done. (sir_richard)
  • Add another helper from symbols, MI_IS_PAGE_TABLE_OR_HYPER_ADDRESS, and use it instead of the math-by-hand. (sir_richard)
  • Add MM_IS_ANY_LOCK_HELD and MI_WS_OWNER to help out the new working let locking inlines (names taken from symbols). (sir_richard)
  • Add _1GB helper for large-memory checks. Also define _1KB as "1024u". The "u" makes GCC not complain when sizes reach >= 2GB, because GCC will interpret the integer literals as "signed", even if the final calculated value is in an unsigned variable. (sir_richard)
  • Add support for handling a very specific type of user-fault on ARM3 memory: memory belonging to a VAD allocation made for a PEB/TEB (read-write) that hasn't yet been allocated. (sir_richard)
  • Define the demand-zero PDE template. (sir_richard)
  • To Timo, with Love (make System PTEs work on x64). (sir_richard)
  • Allocate the PEB at a pseudo-random address just like Windows XP SP2 and later, to prevent certain kinds of exploits. (sir_richard)
  • Allocate PEB and TEB using VADs! The user-mode fault handler seems to work fine, and I could find no regressions. This is the beginning of the end for MAREAs for VM allocations (they will remain for sections). (sir_richard)
  • Antique leftover, initialize the shared user data page with MI_MAKE_HARDWARE_PTE_KERNEL (sir_richard)
  • Stop handling a bunch of MEMORY_AREA_TYPEs that aren't used anymore. (sir_richard)
  • Define the template prototype PTE. (sir_richard)
  • Stop handling PEB/TEB MAREAs since they're not used anymore. (sir_richard)
  • Note: this patch only implements the code paths, they are not excercised yet. (sir_richard)
  • Implement handling a very special case of "prototype PTE", the one used to map the shared user data for user-mode applications. (sir_richard)
  • MiCheckVirtualAddress detects this (Windows behavior) and returns a prototype PTE that's marked MM_READONLY. This is our MmSharedUserDataPte from before. This gets sent to MiDispatchFault which calls MiResolveProtoPteFault to handle it. In turn, this calls MiCompleteProtoPteFault. All these code paths have heavy ASSERTions to only allow them to be hit for the shared user data page, however, in the far distant future when prototype PTEs are used for section objects, we'll at least have the right checks and code flow (many of these ASSERTions will then have to be removed). (sir_richard)
  • The end result is that we also now have STATUS_PAGE_FAULT_TRANSITION, not just STATUS_PAGE_FAULT_DEMAND_ZERO, and that prototype PTEs are somewhat understood and some assumptions have been removed. (sir_richard)
  • Stop creating a memory area for the shared user data page. (sir_richard)
  • Also stop creating a memory area for the illegal user-mode parts of address space. (sir_richard)
  • Instead, mark the area between MM_HIGHEST_VAD_ADDRESS and MM_HIGHEST_USER_ADDRESS as being ARM3 as well: this way, ARM3 will get the illegal access (and fault), and it will also get the shared user data page access. (sir_richard)
  • With the previous commit, ARM3 knows how to handle the shared user data page access, and does so succesfully. End result: two more MAREA types have been removed, and the address space setup code is now much simpler. (sir_richard)
  • Implement an AVL node deletion algorithm (RtlpDeleteAvlTreeNode). Use it in MiRemoveNode, now implemeneted, and RtlDeleteElementGenericTableAvl, also now implemented. It hopefully works. (sir_richard)
  • Take over MmInitializeProcessAddressSpace, MmInitializeHandBuiltProcess, MmInitializeHandBuiltProcess2 into ARM3, and cleanup the code. (sir_richard)
  • Prepare to take over MmCreateProcessAddressSpace. (sir_richard)
  • Reimplement MmCreateProcessAddressSpace in ARM3. Basically the same as before but using the ARM3 PFN list APIs, the ARM3 macros, etc. Once change is processes are now populating the MmProcessList, and the "MmGlobalKernelPageTable" isn't used anymore for new processes. Also the mappings come from SysPTE space, not hyperspace. (sir_richard)
  • More work will be needed in this area, but this gets rid of another ReactOS dinosaur. (sir_richard)
  • Implement MmCleanProcessAddressSpace in ARM3, now the PEB/TEB VADs are removed when the process exits (although the pages are still leaking, for now), and the pool allocation for the VAD is also freed. (sir_richard)
  • Use ARM3 paged pool up until smss.exe starts. There's a last bug in the expansion code before we can get rid of the old paged pool. (sir_richard)
  • Implement MmDeleteTeb, VADs are now deleted/freed on thread exit as well (but the underlying page is still leaked). Should fix the advapi32 security crash. (sir_richard)
  • Sometimes it seems we hit some bad VADs due to bugs? in the AVL tree implementation. I'm going on vacation for a month and can't look at this, so I've hacked the code to ignore such VADs for now, in the interest of fixing the winetest regression. (sir_richard)
  • Convert MmProtectToPteMask to extern. (Amine Khaldi)
  • Convert LpcpAllocateFromPortZone to static __inline. (Amine Khaldi)
  • Another long-lost-promised straggler for Timo. There may be more of these needed, this is what I had done on my disk. (sir_richard)
  • Fix kernel memory corruption when dequeuing a PnP event (Cameron Gutman)
  • Xcode.... (Cameron Gutman)
  • 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)
  • Add DRIVER_CAUGHT_MODIFYING_FREED_POOL bugcheck code. (sir_richard)
  • Add support for protected freed nonpaged pool. This is controlled through MmProtectFreedNonPagedPool, which is initialized based on a registry value (see cmdata.c). This is not "Special Pool", but a useful debugging feature Windows implements that we now have too, since I noticed a lot of mj's work was with freed pool access. (sir_richard)
  • NB. It's 3AM and I have not tested this, it should be off in trunk by default, you'll need to try turning it on and testing it. Hope it helps. (sir_richard)
  • This line, and those low, will be ignored-- (sir_richard)
  • M ntoskrnl/mm/ARM3/pagfault.c (sir_richard)
  • M ntoskrnl/mm/ARM3/pool.c (sir_richard)
  • M include/reactos/mc/bugcodes.mc (sir_richard)
  • Missed a bunch of codepaths, protected pool "should" work now. (sir_richard)
  • Add an extra layer of protection for freed nonpaged pool: write a 4-byte signature on freed blocks, and assert its valid on checked builds. Use a slightly less egocentric ASCII value than on Windows (name of the developer who wrote the first memory manager). (sir_richard)
  • Remove useless variables in kernel code that were set, but never actually used (dead code, tests, copy/pasters). If a variable was set but not used because of missing/#if'ed out code, a note was added instead. (sir_richard)
  • In the process, fix bugs in the Event dispatcher code that used Win32 EVENT_TYPE instead of NT KOBJECTS enumeration. (sir_richard)
  • Fix a bug in ObpInsertHandleCount, where the object access check was being done with the previous mode, instead of honoring the probe mode, which is defined by OBJ_FORCE_ACCESS_CHECK. (sir_richard)
  • Fix a bug in a section function which was always returning STATUS_SUCCESS, now it returns the result of the previous Status = function assignment. If this isn't desired, then don't check for the Status anymore. (sir_richard)
  • Note that MDL code does not support SkipBytes argument. If it is used, MDL could be invalid. (sir_richard)
  • Add checks for VerifierAllocation and set it when needed (WIP). (sir_richard)
  • Clarify what _WORKING_LINKER_ is, and the legal risks in continuing to use a linker that builds non-Microsoft drivers when used with headers whose EULA specify that they can only be used for Microsoft drivers. (sir_richard)
  • Rename KINTERRUPT_DISPATCH_CODES to DISPATCH_LENGTH, as it is in PSDK. (Aleksey Bragin)
  • Enhance NMI debug support. (Aleksey Bragin)
  • 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)
  • Add CmRegistryMachineSystemName to the internal header file, needed for Pierre's further work. (Aleksey Bragin)
  • Move the fix for pool corruption due to dangling MmProcessLinks pointer into its correct location. Thanks again to Martin for the fix. (sir_richard)
  • Likely fix for bug 5600: (sir_richard)
  • Using IsBadRead/CodePtr, it's possible for user-mode code to generate cases where we *think* this is an ARM3-managed piece of VA, which will always have a VAD (Since we only manage the PEB/TEB), but actually it's a bogus VA-looking address that is actually invalid. We didn't consider this case. We now implement the same code Windows normally would also handle, when the VA is bogus, and accept that no VAD might be found, so MM_NOACCESS is returned and thus an access violation sent to the caller. In the case of the IsBad...Ptr, this function would then return TRUE, as the caller expects. (sir_richard)
  • More fixes to VDM PUSH/POPF code: (Timo Kreuzer)
  • When doing a 32bit push, don't store the flags 2 bytes off (Timo Kreuzer)
  • Recalculate HardwareEsp, by substracting the segment part, instead of truncating the flat pointer to 16 bit. (Timo Kreuzer)
  • Add support for Cyrix CPUs by checking and applying a workaround for the Cyrix 6x COMA bug (description here: http://gwyn.tux.org/~balsa/linux/cyrix/p11.html). (Aleksey Bragin; #5610)
  • Add support for KeyValueFullInformationAlign64, used by some Windows drivers (as a bonus, support Win64). PartialInformationAlign64 is a different beast -- warn when a driver attempts to use it, instead of silent failure. (sir_richard)
  • Export VfFailSystemBIOS and stub it. (sir_richard)
  • Warn when a driver fails to load due to a missing dependency and print the name and/or missing module, instead of silently failing. (sir_richard)
  • Due to a bug in the ReactOS PnP manager, Windows PCI Driver hits an internal pseudo-assert. Hack KeBugCheckEx to ignore this pseudo-assert and continue executing normally. (sir_richard)
  • Update 3rd Party Files.txt To Current 3rd Party Releases. (Aleksey Bragin; #5603)


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


  • Rewrite user handles and switch over to the new handle manager. (James Tabor)
  • Fix leak in engwindow.c and monitor.c. (James Tabor)
  • Updated DrawIconEx information for Meta support. (James Tabor)
  • Start Menu and Item structure migration. (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