This is the changelog for ReactOS™ version 0.3.15 (released CLASSIFIED), 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.14.
- 1 General
- 2 Core Functionality
- 2.1 Audio/Video Stack
- 2.2 Client/Server Runtime
- 2.3 Filesystems
- 2.4 HAL
- 2.5 Hardware Management
- 2.6 Kernel
- 2.7 Libraries
- 2.8 Memory Management
- 2.9 Network Stack
- 2.10 Services
- 2.11 Shell
- 2.12 Startup/Shutdown
- Giannis Adamopoulos
- Johannes Anderwald
- Aleksey Bragin
- Dmitry Chapyshev
- Thomas Faber
- Benedikt Freisen
- Jérôme Gardou
- Dmitry Gorbachev
- Cameron Gutman
- Rafał Harabień
- Kamil Horníček
- Gabriel Ilardi
- Alex Ionescu
- Amine Khaldi
- Eric Kohl
- Timo Kreuzer
- Matthias Kupfer
- Michael Martin
- Roel Messiant
- Ged Murphy
- Sylvain Petreolle
- ReactOS Portable Systems Group
- Daniel Reimer
- Gregor Schneider
- Pierre Schweitzer
- James Tabor
- Christoph von Wittich
- Art Yerkes
- Carlo Bramini
- Vincenzo Cotugno
- Elton Chung
- Peter Hater
- Alex Henrie
- Katayama Hirofumi
- Edijs Kolesnikovics
- Marcel Leyendeckers
- numitus (domovoi94 at gmail dot com) r57058
- Victor Martinez
- Guido Pola
- Ben Pye
- Rodion firstname.lastname@example.org r56097
- Lee Schroeder
- Samuel Serapion
- vort r58083
- Alexander Yastrebov
- Erdem Ersoy (eersoy93) (email@example.com) (for some Turkish translations)
- Arda Tanrıkulu (ardatan) (firstname.lastname@example.org) (for some Turkish translations)
- Colin Finck
- Ziliang Guo
- Olaf Siejka
Generic 0.3.15 Changes
- Headers have been cleaned up to reduce the number of dependencies dragged in by code.
- Annotations for use with Visual Studio's static analyzer have been added to many modules.
- Improvements to the various SDKs to increase compatibility and add new new data structures and interfaces for developing drivers, applications, and native applications.
- A variety of bugs found by Visual Studio 2012's static code analyzer was fixed.
- The project has switched over entirely to using CMake and rbuild support has been dropped. Continued work has been done to improve the build process.
- The debug screen color has been changed to black for easier readability.
- It is now possible to choose only one language instead of all language resources in a build.
- Removable media is now selectable as an installation target.
- Unpartitioned space calculation now works if the first partition starts below the disk's track size.
- ATL is now registered before anything else.
- The reading buffer is now dynamically sized to ensure it can hold a complete path instead of using MAX_PATH-like magic numbers.
- ADVPACK (1.5.19)
- AMSTREAM (1.3.37)
- ATL (1.5.19)
- ATL100 (1.5.19)
- AVIFIL32 (1.3.37)
- BCRYPT (1.3.37)
- CABINET (1.5.19)
- COMCTL32 (1.5.26)
- CREDUI (1.3.37)
- CRYPT32 (1.3.37)
- CRYPTDLG (1.3.37)
- CRYPTNET (1.3.37)
- CRYPTUI (1.3.37)
- DBGHELP (1.3.37)
- DWMAPI (1.3.37)
- FUSION (1.5.4)
- GDIPLUS (1.5.4)
- HLINK (1.5.4)
- HNETCFG (1.3.37)
- HTTPAPI (1.3.37)
- IMAADP32.ACM (1.3.37)
- IMAGEHLP (1.3.37)
- IMM32 (1.5.19)
- INETCOMM (1.3.37)
- INETMIB1 (1.3.37)
- INSENG (1.3.37)
- ITSS (1.5.4)
- KERNEL32: FormatMessage() (1.5.4)
- MCIAVI32 (1.3.37)
- MCICDA (1.3.37)
- MCISEQ (1.3.37)
- MCIWAVE (1.5.4)
- MCOQTZ32 (1.5.4)
- MLANG (1.3.37)
- MSADP32.ACM (1.3.37)
- MSCMS (1.5.4)
- MSCOREE (1.5.4)
- MSCTF (1.3.37)
- MSFTEDIT (1.3.37)
- MSG711.ACM (1.3.37)
- MSI (1.5.19)
- MSIMTF (1.3.37)
- MSISIP (1.3.37)
- MSSIGN32 (1.5.4)
- MSTASK (1.3.37)
- MSXML (1.5.12)
- MSXML2 (1.5.12)
- MSXML3 (1.5.12)
- MSXML4 (1.5.12)
- MSXML6 (1.5.12)
- NDDEAPI (1.3.37)
- NTPRINT (1.3.37)
- OBJSEL (1.3.37)
- ODBCCP32 (1.3.37)
- OLE32 (1.5.19)
- OLEAUT32 (1.5.19)
- PRINTUI (1.3.37)
- PSTOREC (1.5.4)
- QUERY (1.3.37)
- RASAPI32 (1.3.37)
- RICHED20 (1.5.19)
- RSAENH (1.5.4)
- SHLWAPI (1.5.13)
- SPOOLSS (1.5.4)
- STDOLE2.TLB (1.3.37)
- STDOLE32.TLB (1.3.37)
- STI (1.5.4)
- SXS (1.5.4)
- TOOLS/UNICODE (1.3.37)
- TRAFFIC (1.5.4)
- URL (1.5.4)
- USER32 (1.5.10)
- USP10 (1.5.24)
- WIDL (1.5.11)
- WINDOWSCODECS (1.5.19)
- WINEMP3.ACM (1.3.37)
- WINHTTP (1.5.4)
- WININET (1.5.4)
- WINTRUST (1.5.4)
- WS2_32: async.c (1.5.4)
- WTSAPI32 (1.3.37)
- WUAPI (1.5.4)
- XCOPY (1.3.37)
- XMLLITE (1.5.19)
- External USB hub support is currently disabled.
- The DEVICEMAP\VIDEO key is now created with a proper length by taking into account the NULL terminator, an issue originally exposed in ARWINSS.
CSRSS is undergoing a rewrite to take advantage of the new SMSS.
- CSRSRV no longer starts win32k.sys, deferring that responsibility to SMSS.
- CsrSrvCreateSharedSection is now called correctly based on registry/command line settings.
- Some initialization functions have been merged together.
- The separate heaps in CSRSRV have been merged together. When the single DLL is broken up into separate DLLs, each DLL will have its own heap.
- A new list has been created for console processes.
- Process management functions now use a linked list like in Windows instead of a hash table.
- CSRSRV now loads its own DLL, allowing it to support native functions from NTDLL.
- Code attempting to set new data/total length values in the LPC header has been purged, potentially fixing an issue where changing the structure of CSRSS messages resulted in bizarre failures.
- CSRSRV no longer accepts connections from unknown processes.
- CSRSRV no longer spawns a new thread for each client, instead creating them based on whether existing ones are deadlocked.
- CTRL-C and X button regressions due to new server to server communication implementation have been fixed.
- Hacks in CsrSrvCreateThread have been removed now that worker threads are properly registered in CSRSS.
- The API loop has been rewritten to properly deal with messages and correctly manage processes, eliminating a major resource leak in the process.
Kernel-mode subsystem server (WIN32K)
- Rewrite CreateDesktop, OpenInputDesktop, SetThreadDesktop, AttachThreadInput, thread info creation
- Properly initlilize ExDesktopObjectType and ExWindowStationObjectType
- Implement LockWorkStation
- Fix SwitchDesktop to actually show the new desktop
- Fix GetObjectInformation that always failed
- Move desktop window proc and message window proc in win32k
- Fix some user object leaks
- Allow the user handle table to grow in order to handle cases when we run out of handles
- Correctly handle cases that the thread info or the process info failed to initialize
- The WindowStations directory is now properly created for instances other than session 0.
- GetFocus now correctly returns NULL when a thread is not in the foreground.
- NtGdiSelectBitmap now correctly handles the situation where a device context's surface pointer is NULL.
- Selecting the same bitmap in NtGdiSelectBitmap will no longer cause the bitmap to be released.
- Do not treat the release of the windows key as a hotkey if it was used as a modifier for another hotkey that was pressed
A new session manager subsystem has been implemented that will be used in conjunction with an upcoming rewrite of the Console/Server Runtime Subsystem. It has completely supplanted the old SMSS though still works in conjunction with an older CSRSS.
- A new header that precisely documents the packet structure and protocols used for communication between SMSS and CSRSS has been added. The definitions match NT5.2.
- All required registry configuration parsing functions have been implemented in the new SMSS.
- Initialization of many internal data structures have been implemented for the new SMSS, ensuring it will present a properly configured and set up system when it takes over from the old SMSS.
- The new SMSS is now responsible for the initial system configuration, including setting up the environment, pagefile, and registry.
- The new SMSS is able to detect clean versus unclean boot/shutdown.
- The new SMSS can now launch 'native' applications.
- SmpSaveRegistryValue now properly deals with empty lists and correctly compares strings for equality.
- The new SMSS is now responsible for launching winlogon.
- When creating the page file, at least 64 MB of space will be left free on small drives to allow 2nd stage to complete.
- An error in VfatCreateFile that caused access denied to always be returned when opening a volume has been fixed.
- MCB and Large MCB support has been integrated.
- File locking support has been added.
- PCI device names are no longer truncated in debug output.
- IrqlToSoftVector() is now implemented and used in HalRequestSoftwareInterrupt, ensuring the correct interrupt is triggered on AMD64.
- The IRQL in HalpAllocateSystemInterrupt is now correctly set to the lowest vector.
- HAL no longer sends bogus bus numbers to the PCI driver.
- Legacy HAL can now enumerate boot critical PCI devices and build the device stack for USB.
- Portable KeXxxSpinLock are now used.
Work from the USB bringup branch has been merged in, allowing for basic functionality of many USB devices. Developers from the Haiku project also helped with understanding the USB specification. The old NT4 USB driver/stack has been removed. The following are parts of the USB stack that have been merged in.
- Human Interface Device (HID) stack
- Composite driver
- Generic hub driver
- Open Host Controller Interface driver
- Enhanced Host Controller Interface driver
Additional development summary follows.
- Installation via USB CD-ROM now starts.
- Parsing of configuration descriptors has been cleaned up and simplified.
- Resetting of devices has been cleaned up, eliminating a delay while properly waiting for a device to actually report it has been reset.
- Detection of new devices after companion controller handoff has been fixed.
- Reset event handling for cases where a reset does not cause a new device to be created.
- OHCI driver now correctly performs control transfers, allowing HID devices to finish initialization.
- Resets now function correctly with OHCI devices.
- Mass storage devices using OHCI now work.
- Power switching configuration is set to a known state when initializing a controller.
- Error handling has been rewritten, fixing a hang when mass storage devices receive the read capacity request.
- Timer functions have been implemented.
- Support for USB floppy drives has been implemented.
- An initial implementation of a driver for the Universal Host Controller Interface was added after the USB bringup work was merged back into trunk. Some parts are synced with the OHCI driver.
- Interlocked operations are now used for reference counting device objects.
- KeUpdateSystemTime has been refactored, making it 64bit portable and resolving potential concurrency issues.
- The kernel no longer returns kernel handles to user mode code, which user mode code would be unable to use anyway, fixing usage of RtlQueryRegistryValues from user mode when the SUBKEY or TOPKEY flags are used.
- Stack alignment has been fixed in KiSwitchToBootStack for 64bit mode.
- KeContextToTrapFrame and KeTrapFrameToContext now correctly handle ExceptionFrame being NULL.
- User mode exception dispatching has been implemented for 64bit mode.
- CmpSetSystemValues will no longer attempt to close an uninitialized handle in its failure handling.
- SeCaptureSecurityDescriptor has been written to be cleaner and 64bit ready.
- A variety of security descriptor related code has been fixed to stop making wrong assumptions about SECURITY_DESCRIPTOR structures.
- PeFmtCreateSection no longer uses the ImageBase member of ImageOptionalHeader directly, instead going through ImageSectionObject->ImageBase.
- Incrementing of the PFN lock has been moved into the region where it is actually used to avoid race conditions and simplify locking operations.
- The kernel can now determine where it is booting from and where it is during remote boots, allowing it to progress slightly further during a PXE boot.
- The kernel no longer needs to enumerate the root bus via the firmware mapper as the HAL now performs this function.
- KdInitSystem no longer suffers from a double crash due to INIT cleanup now happening.
- Changing of process priorities actually perform privilege checks instead of spamming the debug log about the lack of the check.
- The raw value of a thread's exit time is no longer used when the thread is still alive, fixing an issue where code thought all threads were dead.
- A crash in KiSystemCall when WIN32K failed after switching to a larger kernel stack size has been fixed.
- The correct minimum size is now sent back in response to filename queries where the initial buffer was too small to save the result.
- NtQuerySystemInformation now correctly skips zombie processes and uses the KTHREAD ThreadListEntry, which includes the idle process.
- Privileged instructions are now properly detected in the general protection fault handler.
- The correct bit in the error code is now checked when checking for whether a read or write caused an exception.
- SYSTEM_PROCESS_INFORMATION and SYSTEM_THREAD_INFORMATION structures have been rewritten to be correct.
- The DeviceClasses key is now created to allow for successful registration of device interfaces in 1st stage boot.
- A hack intended to allow the PCI driver to load has been removed.
- Generic DPC functionality, a forced synchronization all-CPU DPC callback mechanism, has been implemented. As ReactOS only supports running on a single processor, this implementation only works on a single processor.
- Child devices are now linked in enumeration order, allowing PCI cards to enumerate in the correct order.
- Properly handle the case when conversion to gui thread fails
- KiSwapContextInternal (x64)
- KeInitializeInterrupt (x64)
- KeConnectInterrupt (x64)
- KeSynchronizeExecution (x64)
- KiDpcInterruptHandler (x64)
- KiIdleLoop (x64)
- KiInitializeUserApc (x64)
- KiSwapProcess (x64)
- KiSystemCallHandler (x64)
- KiInitializeContextThread (x64)
- KiSwapContextResume (x64)
- KiRetireDpcList (x64)
- KiInterruptDispatch (x64)
- KiSystemCallEntry64 (x64)
- KiZwSystemService (x64)
- Debugging to screen for 1st stage boot is now supported.
- Unused, unimplemented, and Vista+ functions are no longer exported.
- A buffer overflow in LookupAccountSidA has been fixed.
- Multiple free issue fixed, resolving VLC crash on exit.
- Support has been added for the LVS_EX_TRANSPARENTSHADOWTEXT style.
- ICMP functions are now correctly forwarded to icmp.dll.
- IntReadConsoleOutputCharacter has been fixed to copy the correct number of characters.
- ReadProcessMemory/WriteProcessMemory no longer attempt to write to an argument that could potentially be a NULL pointer.
- WriteProcessMemory now returns STATUS_ACCESS_VIOLATION instead of just BOOL due to third party code relying on this behavior.
- InitCommandLines has been rewritten.
- GetProcessAffinityMask now uses BaseStaticServerData from CSRSS instead of querying for system information each time.
- GetProcessShutdownParameters/SetProcessShutdownParameters now correctly use the LPC status code from CSRSS instead of the LPC API status code.
- GetProcessWorkingSetSizeEx/SetProcessWorkingSetSizeEx has been implemented and is now used by GetProcessWorkingSetSize/SetProcessWorkingSetSize.
- GetExitCodeProcess now checks for VDM processes to get the appropriate exit code.
- GetStartupInfoA is now thread safe and no longer assumes all ANSI to Unicode conversions will succeed.
- GetStartupInfoW now correctly supplies ShellInfo data and crashes if given a NULL input.
- ExitProcess now uses SEH and the PEB lock.
- TerminateProcess now correctly sets the ERROR_INVALID_HANDLE error code.
- FatalAppExitA no longer always assumes success.
- FatalAppExitW now raises a hard error.
- FatalExit now displays a debugger input interface on checked build just like Windows.
- SetPriorityClass now tries to acquire the real time privilege as needed and handles failures to do so.
- GetProcessVersion has been rewritten.
- lpfnGlobalRegisterWaitForInputIdle has been renamed to UserWaitForInputIdleRoutine.
- GetQueuedCompletionStatus error status has been fixed to be WAIT_TIMEOUT.
- When initializing console support, this DLL now attempts to connect to the console server.
- KERNEL32 now correctly overrides the thread starting function the RTL exports so that CreateRemoteThread is ultimately called, fixing registration of worker threads with CSRSS.
- A unified LPC message including thread information is now sent instead of two separate messages when a new process is created, increasing performance.
- CreateHardLinkA/W have been cleaned up and now correctly set an error on failure.
- I/O completion functions have been cleaned up and annotated.
- Lock/UnlockFile functions no longer accept console handles and now correctly handle STATUS_PENDING/ERROR_IO_PENDING situations.
- The file change notification functions have been rewritten.
- Support for asynchronous I/O callbacks has been implemented.
NETSHELL has been converted into C++ to improve readability.
- LdrpCheckForLoadedDll has been fixed to try and resolve KVM/QEMU crashes.
- An uninitialized variable usage was causing a first chance exception with the new SMSS when booting a livecd.
- Server to server calls are now supported.
- LdrInitializeThunk (x64)
- KiUserApcDispatcher (x64)
- Reference counting in RtlpDosPathNameToRelativeNtPathName_Ustr has been fixed.
- Some misuse of critical section debug flags in WINE code has been worked around.
- 64bit version of HEAP_COMMON_ENTRY has been fixed so that each used field is at its correct position.
- It is now possible for the thread starting function to be correctly overridden.
- RtlIpv4AddressToStringA and RtlIpv4AddressToStringW now crash on a NULL buffer to match behavior on Windows.
- RtlIpToString functions now return -1 instead of crashing when given a NULL buffer to match behavior on Windows.
- RtlInitializeContext (x64)
- A combination of improvements to color and style for the desktop has been implemented, including drop shadows.
- A resource leak involving fonts when switching between applications has been dealt with.
- RealChildWindowFromPoint now skips invisible windows.
UXTHEME has now been forked from Wine and is solely maintained by this project.
- Loading of MENUEX resources has been fixed.
- The memory manager allocates a full 64 KB memory block and returns it to the requesting code instead of merely aligning it to a 64 KB boundary and returning a block of memory sized to the original request. A hack has been added so that even though the full 64 KB allocation still occurs, the allocating code is only informed about the block of memory that matches its requested size.
- The memory manager now correctly deals with file access rights when mapping sections.
- MmFindGapBottomUp and MmFindGapTopDown have been reimplemented to properly create memory areas in the right places.
- MI_REAL_SYSTEM_RANGE_START has been defined to be the canonical system space base address and MmSystemRangeStart switched to a broken value to match behavior on Windows for 32bit mode. MmSystemRangeStart has the correct value for 64bit mode.
- A variety of page table initialization functions have been improved.
- MiRosTakeOverPebTebRanges has been renamed to MiRosTakeOverSharedUserPage and changed to only take over shared memory. Previous implementation did not even take over PEB/TEB memory correctly.
- MiResolveDemandZeroFault is now used directly instead of creating a demand zero PDE and calling MiDispatchFault.
- MmArmAccessFault has been simplified in cases where page faults from user and kernel mode result in the same codepath. MmArmAccessFault also now supports 3/4 level page tables.
- The memory manager can now distinguish between kernel and user mode pages when using 3/4 level page tables.
- MiNonPagedSystemSize is now used when creating the system NP memory area instead of making assumptions about the memory layout.
- Allocation for PDE pages now goes through ARM3, which resolves an issue where the old memory manager leaked them. This partially fixes the highly problematic 'mshtml' bug that testers encountered in 0.3.14.
- MiFindEmptyAddressRangeDownTree now returns the right value in error cases.
- Leaks of page table entries from deleted TEBs and VA mappings have been squashed.
- Unnecessary boot registry, NLS, and heap data are now being properly cleaned up, reducing memory usage after 3rd stage boot.
- INIT and SCN_MEM_DISCARDABLE sections from all drivers and the kernel are now properly freed, reducing memory usage.
- User shared data is now correctly released at process cleanup, eliminating the last major leak that was part of the 'mshtml' issue.
- Pool tag tracking has been implemented for both small and big allocations. Expansion is not yet supported.
- Memory allocation failures are now handled more correctly, with support for various debug and caller flags instead of simply returning NULL.
- Counters for paged and nonpaged pool have been implemented.
- The memory system is now VAD-based instead of using memory areas.
- Page fault handling has been considerably improved to handle a variety of situations and conditions.
- MiBuildPfnDatabase (x64)
- MiAddDescriptorToDatabase (x64)
- MiBuildPfnDatabaseFromPageTables (x64)
- MiSetupPfnForPageTable (x64)
- MmCreateProcessAddressSpace (x64)
- MmGetPageTableForProcess (x64)
- MmUnmapPageTable (x64)
- MmGetPageFileMapping (x64)
- MmDeleteProcessPageDirectory (x64)
A reintegration checkpoint from the NewCC branch occurred. This checkpoint brings with it a variety of improvements including clearer delineation of ownership over memory objects, lockfree blocking operations, and overall cleaner and simpler code. NewCC is not enabled by default and has a separate mode for its usage. When NEWCC mode is turned on, third party filesystem drivers are actually able to function.
- Invalid AQ_WIN16 comparisons fix was imported from Wine.
- Log files opened via the event log service are should only be closed when its owning service has stopped.
- Attempting to open a non-existent backup log file now fails while attempting to open an existing backup log file will only allow for reads.
- LogfInitializeNew and LogfInitializeExisting now return NTSTATUS instead of BOOL.
- The shell now receives a WM_SETTINGCHANGE message when styles are changed.
- Filesystem drivers are now loaded on demand instead of at boot.
- A wrong buffer size calculation that could cause memory corruption was fixed.
- The low 1 MB of memory is no longer mapped into kernel space.
- A new heap implementation has been created, optimizing and reducing memory usage by about 4 MB.
|Changelogs / Versions|
|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|