From ReactOS Wiki
Revision as of 12:34, 17 April 2008 by Lentin (talk | contribs) (KERNEL32)
Jump to: navigation, search

This is a work in progress!!!

Please consider the following when adding a change:

  • Write a REAL NAME of the person, no E-Mail addresses, no IRC nicks, etc. This is an official paper!
  • Reference bug numbers at the end of the change, in braces, like (your name, bug #2373)
  • Preserve an alphabetical order for applications and libraries :-)

This is the changelog for ReactOS™ version 0.3.5 (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.4 (released 22 January, 2008).


Generic 0.3.5 Changes


  • Begin German translation of kernel32 errorcodes (Timo Kreuzer)
  • Update German translation of kernel32 errorcodes (Michael Fritscher)
  • Greek translation Update for cmd, format, fedebug, input, joy, sysdm (Apostolos Alexiadis) - ( / Bug 3152, 3161
  • Italian translation updates for mstsc (Carlo Bramini) / Bug 3098
  • Italian translation updates for usetup, winhelp, shell32, shellext, syssetup, desk, main, mmsys, user32, appwiz-new, joy, input, downloader, vgafonteditor ((Paolo Devoti) - / Bug 3005, 3051, 3883, 3105, 3119, 3136)
  • Ukrainian translation updates for shell32, downlaoder, vgafontedit, mmsys, devmgr, RosBE Config, desk, usetup, setup, cmd, appwiz-new ((Artem Reznikov) - / Bug 3020, 3038, 3039, 3044, 3049, 3070, 3089, 3106)
  • Bulgarian translation Updates for sol, winemine, mstsc, desk, mmsys, ncpa, shell32, xcopy, control, notepad, winhelp, usetup, format, access, netid, rasapi, serialui, shdocvw, syssetup, vmwinst, appwiz-new, kbdbgt, imagesoft, vgafontedit (by Станев - / Bug 3041, 3092, 3093, 3173, 3174)
  • slovak translation updates for downloader, usetup, butterflies, mazescr, roscalc, write, packmgr, msgina, setupapi, winhelp, powercfg, mstsc, reactos, usetup, explorer, fdebug, appwiz, desk, input, joy, mmsys, sysdm, netid, newdev, shdocvw, shell32, syssetup, ntvdm ((Mário Kačmár) - / Bug 2988, 2992, 2993, 3021, 3033, 3053, 3110)
  • Polish translation Updates for shellext, blankscr, butterflies, cylfrac, matrix, mazescr, starfield, vgafontedit, downloader, fontview, imagesoft, magnify, packmgr, roscalc, systeminfo, write, mmsys, desk, usetup, appwiz-new, input ((Olaf Siejka) - / Bug 3014, 3037, 3043, 3047, 3066, 3088)
  • Spanish translation Updates for notepad, regedit, winhelp, taskmgr, mstsc, intl, sysdm, timedate, devmgr, downloader, more, wordpad, usetup, vmwinst, newdev, shell32, shellext, vgafontedit, desk, input, main, shell32, syssetup, modemui ((Javier Remacha) - / Bug 2984, 2986, 2994, 3142, 3172)
  • Lithuanian translation Updates for control, mstsc, winhelp (by Vytis Girdžijauskas - / Bug 2991)
  • Czech translation Update for solitaire, cacls, more, find, cacls, charmap, more, solitaire, logoff, mmc, notepad, usetup (by Radek Liška - / Bug 3078, 3090, 3113, 3175)
  • German RC File Updates for csrss, ntvdm (by Andreas Dieringer -
  • Update German language for appwiz-new, input.cpl, desk.cpl mmsys by ((Daniel Reimer)
  • Korean translation update by Seungju Kim (Bug 3144, 3145, 3149, 3151, 3153, 3154, 3155, 3156, 3157, 3165)
  • Added/updated French translations for desk.cpl, dxdiag.exe, main.cpl, mmsys.cpl, regedit.exe, shell32.dll, usetup.exe, vgafondedit.exe (Pierre Schweitzer)
  • Added all missing Strings in Usetup for Translation and added the English Strings to all USETUP Resources and activated these. This makes translating easier. ((Daniel Reimer)
  • Resort rosapps, setupapi and user32 RC Files. Now all Resource files except the ones synched with Wine are sorted the same way. ((Daniel Reimer)
  • Remove all Manifests. They will be autogenerated in the future. This is one step to MSVC Support, too. ((Daniel Reimer)
  • Checked for the right Font for Asian Languages and set a unified Font size for them. ((Daniel Reimer)
  • Massive Changes in almost all RC Files. Now all non Wine Synched RC Files use these rules:
 1. Use a DIALOGEX template instead of a DIALOG template.
 2. Set the DS_SHELLFONT flag in your dialog styles.
 3. Set the dialog font to "MS Shell Dlg".
 4. Remove DS_FIXEDSYS
 5. Remove DS_SETFONT
 6. Remove DS_3DLOOK
 -> Windows 2000+ Look

Build Tools



  • Pass the correct path to _strip_gcc_deffile (Johannes Anderwald)
  • Automatically create directories for converted def files (Johannes Anderwald)
  • Fix auto-def file generation (Johannes Anderwald)
  • If BASEDIR env var is set to point to your WDK installation, make msvcX will take it into account, and add additional include directories for WDK headers and libraries for all kernelmode modules (Aleksey Bragin)


Bootloader (FreeLoader)

  • Develop and switch to the new, a lot more advanced memory manager, which is compatible both with ReactOS and NT-style boot types. Added: memory types for each allocation request, ability to alloc and free memory from the heap, ability to use 1 megabyte of low memory too (which was just wasted previously), removed: a bunch of hacky stuff. (Aleksey Bragin)
  • Added a real heap manager (based on bget) into the memory manager, and switched all small memory allocations inside FreeLdr to this heap manager.(Aleksey Bragin)
  • New way of storing hardware configuration tree (compatible).(Aleksey Bragin)
  • Developed an NT kernel boot support module (codename "winldr") and integrated it into FreeLdr.(Aleksey Bragin)
  • Allow runtime enabling of caching support in FreeLdr's filesystem layer.(Aleksey Bragin)
  • Change in FreeLdr's build process: Build FreeLdr the same way other modules are built, by using gcc -Wl. This allows us to get rid of the /math directory and use -lgcc instead. - Get rid of -ffreestanding, -fno-builtin and -O2. The former are not needed anymore since we're properly building a "freestanding" image anyway, just like the kernel. The latter is removed since optimization flags come from the project settings. Update code to fix warnings caused since we've removed -ffreestanding. GCC now warns about printf, sprintf and other C calls (including a change from %wZ to %S in winldr.c's sprintf calls). Don't use printf anymore -- rename freeldr's implementation to TuiPrintf. Just like in the kernel, you can't use printf in freeldr (since it's not running in a standard/full CRT environment). 124kb saved!(Aleksey Bragin)
  • The bootloader must zero user shared data page before passing control to the kernel. This fixes the "invalid timer state", "assert(SharedUserData->NumberOfPages == 0" family of bugs after warm reboot. (Aleksey Bragin, bug #3085).
  • Make identifiers in configuration trees ASCII-strings, as they are in real NT.(Aleksey Bragin)
  • Map APIC pages, if they are present. Set the size of the memory new MM uses to 24Mb. Set heap size to 4Mb.(Aleksey Bragin)
  • Allocate memory for groups list dynamically, and make it enough (4096 bytes) for a really long list of groups. This makes Windows 2003 booting up to explorer without crashing.(Aleksey Bragin)
  • Heavily bugfix MmInitializeMemoryManager in freeldr, add slightly better bios memory map projection to the loader memory types, but this is still being investigated.(Aleksey Bragin)
  • Fix a bug in MmAllocateMemoryWithType, where result of MmFindAvailablePages was checked against -1 in error case, when in reality it's 0 (spotted by Alex).(Aleksey Bragin)
  • WINLDR: Load drivers database (AppPatch/drvmain.sdb), so Windows could use it if needed.(Aleksey Bragin)
  • WINLDR: Don't store memory allocation descriptors inside the bootloader, since this memory is unmapped in kernelmode. Fixes a pagefault after switching to paged mode. Store the configuration data in the LPB.(Aleksey Bragin)
  • WINLDR: Different behavior for NT4 or NT5+ boot: NT4 requires text mode to be set up, and further version of Windows OS require a different preparation.(Aleksey Bragin)
  • WINLDR: Properly fill ACPI BIOS configuration entry (a couple of ACPI specification structures were added). This makes Windows 2003 initialize HAL (ACPI version) properly and be able to connect to the debugger.(Aleksey Bragin)
  • WINLDR: Fix an incorrect type of memory behind PDE, HAL mapping and kernel segment pagetables. They should be MemoryData (and change allocation algorithm slightly). With this change Windows 2003 boots up to the BSOD showing ACPI_BIOS_ERROR.(Aleksey Bragin)
  • WINLDR: Fix a typo in the if branch, which resulted in marking almost all memory above the bootloader as "FirmwareTemporary", even reserved ACPI pages. This should fix the ACPI BSOD Windows 2003 and XP show up. If a memory is marked as "free", leave it so, without transferring to FirmwareTemporary.(Aleksey Bragin)

Kernel and Executive (NTOSKRNL)


  • Switch to using the cache bitmap (the cache manager uses one large memory region within the kernel address space and allocate/deallocate space from this block over a bitmap). It makes file copying process (not only in the 1st stage) a bit more stable. Cacheseg mapping region size enlarged to 256Mb. (bug #2872, Aleksey Bragin)


  • cmlib: Take into account non-fast/non-hash indices in CmPrepareHive, apply similar changes to freeldr's registry importing function (Filip Navara)
  • Fix out-of-bounds access in configuration manager, spotted by Christoph & GCC 4.3.0 (Aleksey Bragin)



  • Fix ExReleaseResourceLock(), spotted by Alex (Aleksey Bragin)
  • Use C define for the bit in the wait block flags that we set to specify waiting, instead of a hardcoded "1" (Aleksey Bragin)
  • Fix broken code when trying to find the last wait block in several parts of the pushlock code (Aleksey Bragin)
  • Fix broken algorithm in the optimization of the pushlock waiter list (Aleksey Bragin)
  • The wake event for the pushlock should be a synchronization event, not a notification event (Aleksey Bragin)
  • Fix broken algorithm during the release of a pushlock (in shared cases) (Aleksey Bragin)
  • Fix broken code during "try to wake pushlock" (Aleksey Bragin)
  • Remove DbgPrints from inlined pushlock code during contention (Aleksey Bragin)
  • All of ex-changes are made thanks to Alex for noticing these bugs and providing advice on the fixes. This fixes lots of race issues in the handle table implementation


  • Update FSRTL_ADVANCED_FCB_HEADER to support newer version headers, split Reserved into two bitfields: Reserved and Version (Aleksey Bragin)


  • Fix memory corruption in Io manager, thanks to Alex for reporting (Aleksey Bragin)





  • Fix initialiization of the object manager lookaside lists, don't leak object locks when destroying an object type, make directory objects and symbolic links case-insensitive, Create \KernelObjects directory during startup. (Aleksey Bragin)
  • Lock only the object header for an object instead of the entire object type, for better contention. Implement exclusive/shared lock and release routines around the existing lock slots in the object type (Aleksey Bragin)
  • Rewrite the SD Cache functions to use the Windows 2003 structures (thanks to Alex for providing them) (Aleksey Bragin)
  • Use pushlocks instead of the fast mutex that was previously used (Aleksey Bragin)
  • Implement the exported Ob APIs which were added in Windows XP to access the Sd cache ObReference/DereferenceSecurityDescriptor and ObLogSecurityDescriptor). These are used by file systems (such as NPFS) on Windows XP and higher (Aleksey Bragin)
  • Thanks to Alex for reporting all the CM issues.




Hardware Abstraction Layer (HAL)

Run Time Library (RTL)

  • Implement RtlGetCallersAddress, add RtlCaptureStackBackTrace prototype to PSDK (bug #3125, Daniel Zimmerman)

Kernel Mode Drivers

All filesystem drivers

  • Rename vfatfs.sys to fastfat.sys for compatibility reasons (Aleksey Bragin)
  • Pass cache manager callbacks structure at every CcInitializeCacheMap() call, it's mandatory (Aleksey Bragin)
  • There is no reason for CDFS to use CcRos-specific functions, it ends up with the same CcRosInit/Uninit with the same CacheSegmentSize = PAGE_SIZE (Aleksey Bragin)
  • Remove ros-specific Cc functions usage (Aleksey Bragin)
  • Experimentally switch fastfat driver to non-Ros Cc functions, and thus no FSD in ReactOS are using CcRos-specific functions anymore (Aleksey Bragin)



NT System Library (NTDLL)

Static Libraries


Win32™ Personality

User mode subsystem server (CSRSS)

Kernel-mode subsystem server (Win32K)

  • Implement NtGdiSelectBitmap, NtGdiSelectBrush, NtGdiSelectFont and NtGdiSelectPen based on NtGdiSelectObject and tests, move those functions to dc.c, remove NtGdiSelectObject (Timo Kreuzer)
  • Fix some bugs in NtGdiSelectBitmap (Timo Kreuzer)
  • Add GdiBCSelObj to GdiFlushUserBatch (James Tabor)
  • Fix type field calculation in GDIOBJ_CovertToStockObject (Timo Kreuzer)
  • Change gdi object deleting mechanism to a windows compatible one (Timo Kreuzer)
  • Fix a DC handle leak in UserDrawIconEx (Timo Kreuzer)
  • remove GDIOB_XxxDbg functions (Timo Kreuzer)
  • Enhance backtracing and debug output for GDI_DEBUG (Timo Kreuzer)
  • Implement GDIOBJ_ValidateHandle() (Timo Kreuzer)
  • Simplify a check in UserGetDcEx (Timo Kreuzer)
  • Fix a check in UserGetDcEx (Timo Kreuzer)
  • Remove DCX_KEEPCLIPRGN flag when creating a clip region in UserGetDcEx, fixes a region leak (Timo Kreuzer)
  • Don't abuse GDIOBJ_LockObj to validate a handle, use GDIOBJ_ValidateHandle instead (Timo Kreuzer)
  • Add some additional debug output to GDIOBJ_LockObj (Timo Kreuzer)
  • Recurse into IntGdiDeleteDC directly, instead of going back to NtGdiDeleteObjectApp and pass Force parameter on (Timo Kreuzer)
  • Don't create a background brush for a new menu, fixes a brush leak (Timo Kreuzer)
  • Use intrinsic interlocked functions for gdi object locking (Timo Kreuzer)
  • Add a function to get a full stackbacktrace (Timo Kreuzer)
  • Remove obsolete syscalls NtUserGetDesktopWindow and NtUserGetParent (Stefan Ginsberg)
  • Fix a mem leak in bitmap code (Timo Kreuzer)
  • BITMAPOBJ_CopyBitmap: release lock and delete created bitmap on failure, copy flags, fixes a memory leak (Timo Kreuzer)
  • Rename ObmXxx functions to UserXxx functions (Timo Kreuzer)
  • Remove some macros (Timo Kreuzer)
  • Move function prototypes to object.h (Timo Kreuzer)
  • Implement UserReferenceObjectByHandle creating a reference to the object, used for cursoricon stuff so far (Timo Kreuzer)
  • Rewrite object manager functions to reasonably handle references (Timo Kreuzer)
  • Dereference cursoricons correctly, so they will really get deleted, fixes a cursoricon leak (Timo Kreuzer)
  • Destroy submenus in NtUserDestroyMenu, fixes a menu leak (Timo Kreuzer)
  • Free the buffer of the menu text, fixes a mem leak (Timo Kreuzer)
  • Delete old bitmaps in NtUserSetCursorContent, fixes a bitmap leak (Timo Kreuzer)
  • Delete monitor object on failure (Timo Kreuzer)
  • Move NtGdiFlushUserBatch prototype to ntgdi.h (Timo Kreuzer)
  • Move pool tags from ntgdihdl.h to win32k/tags.h (Timo Kreuzer)
  • Move DC struct from ntgdihdl.h to win32k/dc.h (Timo Kreuzer)
  • Replace GDIEMPTYHDR with BASEOBJECT (Timo Kreuzer)
  • Use BASEOBJECT in DC and GDIDEVICE structures (Timo Kreuzer)
  • Rename some NtGdiXxx functions that don't deserve that name and remove some that were defined by a macro, but don't exist on windows (#if 0'ed atm) (Timo Kreuzer)
  • Remove RetrieveDisplayHDC() prototype, function doesn't exist (Timo Kreuzer)
  • Remove typecasts PBITMAPOBJ <-> PSURFOBJ (Timo Kreuzer)
  • Use GDIOBJ_ShareLockObj / _UnlockObjByPtr instead of Eng(Un)LockSurface as BITMAPOBJ_Un/LockObj (Timo Kreuzer)
  • Add BASEOBJECT to bitmap, brush, palette, font and region structures (Timo Kreuzer)
  • Move bad ntuser syscalls in ntuser.h to the bottom (Stefan Ginsberg)
  • Sort win32k export list alphabetically (Stefan Ginsberg)
  • Remove obsolete Win32kInitialize and NtGdiGetAspectRatioFilterEx (Stefan Ginsberg)
  • Add missing exports to win32k.def (all from xp) (Timo Kreuzer)
  • Don't free the memory for the palette entries in IntSetPalette (Timo Kreuzer, bug #3072)
  • Reference CursorIcon before deleting it (Timo Kreuzer)
  • IntGetPaintMessage: Set MessageQueue->PaintCount to 0, if no dirty Window is found. Stops spamming the debuglog (Timo Kreuzer)
  • UserGetDCEx: Check if a dce's hDC is valid, if not warn and create a new one (Timo Kreuzer)
  • Don't dump the stack backtrace twice in GDIOBJ_Xxx functions (Timo Kreuzer)
  • Replace GDIOBJHDR with BASEOBJECT structure (Timo Kreuzer)
  • Remove HandleTable parameter from GDIOBJ_Xxx functions (Timo Kreuzer)
  • Fix a wrong typecast in PALETTE_SetMapping (Timo Kreuzer)
  • Call PsGetCurrentThreadWin32Thread() and PsGetCurrentProcess() only once in IntGetWinstaObj (Timo Kreuzer)
  • Fix a leakage during DC deletion (introduced in revision 773) (Samuel Serapion)
  • Remove dereferencing a monitor object during successive attach branch in IntAttachMonitor (Aleksey Bragin)
  • Rename and add two application compatibility flags to W32THREADINFO structure (one for ancient compat flags, and one for a bit more modern flags), implement GetAppCompatFlags() and GetAppCompatFlags2() (Aleksey Bragin)
  • Unlink window when WM_CREATE message fails, fixes a crash (Johannes Anderwald)



  • Rewrite service to support multiple connections from multiple clients across all services (Ged Murphy)

Control panel applets







Win32™ Applications


  • Implement GrowIfNecessary_dbg() using file and line from the caller to cmd_alloc_dbg memory. (Timo Kreuzer)
  • Fix memory allocation size, respecting the terminating 0 (Timo Kreuzer, bug #2845)
  • Fix compilation with msvc8 (Johannes Anderwald)
  • Avoid buffer overflow in copy command argument handling (Johannes Anderwald, bug #3108)



  • Improve control a bit so it that can execute cpl specified on the command line (Johannes Anderwald)


  • Add fontview to bootcd and add ttf file association (Timo Kreuzer, bug #1411)



Win32™ Libraries


  • Implemented Direct3DCreate9() (Gregor Brunmar)
  • Implemented IDirect3D methods: (Gregor Brunmar)
    • GetAdapterCount
    • GetAdapterIdentifier
    • GetAdapterModeCount
    • EnumAdapterModes
    • GetAdapterDisplayMode
    • CheckDeviceType
    • CheckDeviceFormat
    • CheckDepthStencilMatch
    • CheckDeviceFormatConversion
    • GetDeviceCaps
    • GetAdapterMonitor


  • Add cGetTTFFromFOT stub to make gdi32 load on win xp (Timo Kreuzer)
  • Beginning of an implementation of SelectObject, using NtGdiSelectBitmap, NtGdiSelectBrush, NtGdiselectFont, NtGdiSelectPen and ExtSelectClipRgn instead of NtGdiSelectObject (Timo Kreuzer)
  • Add some usermode handling to SelectObject, currently if'ed out, as it doesn't properly work yet (James Tabor)
  • Add GDI_OBJECT_TYPE_COLORSPACE to SelectObject using SetColorSpace (James Tabor)



  • Use PatBlt and SelectObject instead of Nt functions in FillRect (Timo Kreuzer)


  • Implement GetConsoleAlias[A/W], AddConsoleAlias for doskey support (Johannes Anderwald)
  • Implement EnumLanguageGroupLocalesA, EnumLanguageGroupLocalesW, EnumUILanguagesW, EnumUILanguagesA, GetUserGeoID, SetUserGeoID, SetDefaultCommConfigW, SetDefaultCommConfigA, GetDefaultCommConfigW, GetDefaultCommConfigA, BeginUpdateResourceA, BeginUpdateResourceW, UpdateResourceA, UpdateResourceW, EnumResourceLanguagesW, EnumResourceLanguagesA, EndUpdateResourceA, EndUpdateResourceW, EnumResourceTypesW, EnumResourceTypesA, GetCalendarInfoA, GetCalendarInfoW, EnumDateFormatsW, EnumCalendarInfoA, EnumCalendarInfoW, EnumCalendarInfoExA, EnumCalendarInfoExW, FindFirstVolumeA, FindFirstVolumeW, FindNextVolumeA, FindNextVolumeW (Dmitry Chapyshev)
  • Fix GetCommState, GetSystemInfo, IsProcessorFeaturePresent, LockResource (Dmitry Chapyshev)