From ReactOS Wiki
Jump to: navigation, search

This is the changelog for ReactOS™ version 0.3.5 (released 30 June, 2008), 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)
  • Convert some Usetup translations to OEM charset, so that they're displayed correctly (Colin Finck)
  • Greek translation Update for Cmd, Format, Fdebug, Input.cpl, Joy.cpl, Sysdm.cpl (Apostolos Alexiadis, bugs #3152, #3161)
  • Added/updated Italian translation for Magnify, Mstsc (Carlo Bramini, bugs #3098, #3210, #3245)
  • Added/updated Italian translations for Appwiz-new.cpl, Desk.cpl, Downloader, Input.cpl, Joy.cpl, Main.cpl, Mmsys.cpl, Shell32, Shellext, Syssetup, User32, Usetup, Vgafontedit, Winhelp, xcopy (Paolo Devoti, bugs #3005, #3051, #3883, #3105, #3119, #3136, #3231, #3275)
  • Added/updated Ukrainian translations for Appwiz-new.cpl, Cmd, Desk.cpl, Devmgr, Downloader, Mmsys.cpl, Reactos (Setup tool under Windows), RosBE Config, Shell32, Usetup, Vgafontedit (Artem Reznikov, bugs #3020, #3038, #3039, #3044, #3049, #3070, #3089, #3106)
  • Added/updated Bulgarian translations for Access.cpl, Appwiz-new.cpl, Control, Desk.cpl, Downloader, Fontview, Format, Imagesoft, Kbswitch, Magnify, Mazescr, Mmsys.cpl, Mstsc, Ncpa.cpl, Netid, calc, kbswitch, Notepad, Rasapi, Serialui, Shdocvw, Shell32, Sol, Syssetup, Usetup, Vgafontedit, Vmwinst, WineMine, Winhelp, Write, Xcopy (Станев, bugs #3041, #3042, #3092, #3093, #3173, #3174, #3192, #3204)
  • Added/updated Slovak translations for Appwiz.cpl, Butterflies, Desk.cpl, Downloader, Explorer, Fdebug, Input.cpl, Joy.cpl, Mazescr, Mmsys.cpl, Msgina, Mstsc, Ncpa.cpl, Netid, fontview, dxdiag, vmwinst, userinit, win32csr, Newdev, Ntvdm, Packmgr, Powercfg.cpl, Reactos (Setup tool under Windows), Roscalc, Setupapi, Shdocvw, Shell32, Sysdm.cpl, Syssetup, magnify, access, intl, mmsys, kbswitch, Usetup, Winhelp, Winlogon, Write, Usetup (Mário Kačmár, bugs #2988, #2992, #2993, #3021, #3033, #3053, #3110, #3198, #3215, #3284)
  • Added/updated Polish translations for Appwiz-new.cpl, Blankscr, Butterflies, Cylfrac, Desk.cpl, Downloader, Dxdiag, Fontview, Imagesoft, Input.cpl, Magnify, Matrix, Mazescr, Mmsys.cpl, Packmgr, Roscalc, Shellext, Starfield, Systeminfo, Usetup, Vgafontedit, Write (Olaf Siejka, bugs #3014, #3037, #3043, #3047, #3066, #3088)
  • Added/updated Spanish translations for Circles, Desk.cpl, Devmgr, Downloader, Dxdiag, Input.cpl, Intl.cpl, Main.cpl, Modemui, More, Mstsc, Newdev, Notepad, Regedit, Shell32, Shellext, Sysdm.cpl, Syssetup, Taskmgr, Timedate.cpl, Usetup, Vgafontedit, Vmwinst, Winhelp, Wordpad (Javier Remacha, bugs #2984, #2986, #2994, #3142, #3172, #3184, #3196, #3229, #3282)
  • Added/updated Lithuanian translations for Control, kbswitch, Downloader, Mmc, Mstsc, Usetup, Winhelp, explorer-new, shimgvw (Vytis Girdžijauskas, bugs #2991, #3188, #3277, #3365)
  • Added/updated Czech translations for Cacls, Charmap, Expand, Find, Format, Hdwwiz, Kbswitch, Logoff, More, Notepad, Regsvr32, Rundll32, Solitaire, Userinit, Usetup (Radek Liška, bugs #3078, #3090, #3113, #3175, #3194)
  • Updated German translations for Csrss, Ntvdm (Andreas Dieringer)
  • Added/updated German translations for Appwiz-new.cpl, Desk.cpl, Input.cpl, Mmsys.cpl (Daniel Reimer)
  • Added/updated Korean translations (Seungju Kim, bugs #3144, #3145, #3149, #3151, #3153, #3154, #3155, #3156, #3157, #3165, #3180, #3182, #3261)
  • Added/updated French translations for Kbswitch, Desk.cpl, Dxdiag, Magnify, Main.cpl, Mmsys.cpl, Regedit, Shell32, Syssetup, Vgafontedit, Usetup (Pierre Schweitzer)
  • Added all missing Strings in Usetup for translation, added the English Strings to all USETUP resources and activated them. 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)
  • Convert Greek translations in Usetup to code page 737 and enable (Christoph von Wittich)
  • Convert translations to DOS encodings by Vytis Girdžijauskas and Olaf Siejka (Christoph von Wittich, bug #3015)
  • Add/update German translations for kbswitch, explorer, format, expand, winlogon, syssetup, shell32 and devmgr. (Matthias Kupfer)
  • Add Korean translation for explorer-new by Seungju Kim. (Matthias Kupfer, bug #3368)
  • 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

Host Tools



  • Add an -M option to specify, which compression codec shall be used (either "raw" or "mszip") (Colin Finck)
  • Enable the RAW codec in the SelectCodec() function (Colin Finck)
  • Fix parsing the -L and -P parameters, when there's no whitespace between the parameter and the value (Colin Finck)
  • Remove the version number as it was never updated (Colin Finck)
  • Fix setting the file attributes when extracting files (Colin Finck)
  • Add support for multiple search criterias, which are actually checked.
    This makes it possible to pass parameters like "*.rbuild *.txt" to the cabman command line for adding, displaying and extracting files in a cabinet. (Colin Finck)
  • Overhaul CreateSimpleCabinet, make it able to add multiple files to the cabinet using the new search criteria functions. (Colin Finck)
  • Fix setting the file offsets.
    This fixes the extraction of any file, which is not the first file in the cabinet. (Colin Finck)
  • Fix the extraction of files with more than 32 characters in the file name (Colin Finck)
  • Fix compilation with GCC 4.3.x (Colin Finck)




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)
  • Mark APIC's memory as WriteThrough / CacheDisabled.(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)
  • Implement ramdisk support for FreeLoader (ReactOS Portable Systems Group)
  • Move architecture independent code out of arch/ folder (ReactOS Portable Systems Group)
  • Remove AcpiPresent flag from non-x86 builds, as it is x86 specific. Have ACPI detection set the appropriate flag for each architecture if detected (ReactOS Portable Systems Group)
  • Implement MachPrepareForReactOS as a generic pre-boot preparation routine, replacing the architecture specific functions (ReactOS Portable Systems Group)
  • Implement a proper ARM startup routine (ReactOS Portable Systems Group)
  • Fix bug in RamDiskInit that allowed reading from null pointers (ReactOS Portable Systems Group)
  • Build Freeloader with a static libgcc (ReactOS Portable Systems Group)
  • Implement returning a memory map on ARM (ReactOS Portable Systems Group)
  • Ramdisk support in ArmDiskGetBootVolume, with fixes for hex parameters and proper return values (ReactOS Portable Systems Group)
  • Fix command line parsing in Freeloader (ReactOS Portable Systems Group)
  • Enable ramdisk support so disk read/writes are handled by ramdisk routines (ReactOS Portable Systems Group)
  • Fix ramdisk start sector reporting (ReactOS Portable Systems Group)
  • Arm routines now use various i386 disk routines that were highly generic and work across platforms (ReactOS Portable Systems Group)
  • Remove redundant code for reading and writing to various ports and registers, making use of intrinsics instead (ReactOS Portable Systems Group)
  • Implement basic console support through the serial port, providing output when FreeLoader initializes (ReactOS Portable Systems Group)
  • Add support for ARM Versatile/PB platform, allowing qemu to emulate the ARM build of ReactOS (ReactOS Portable Systems Group)
  • Add support for PL011 UART, allowing for console output on the Versatile platform (ReactOS Portable Systems Group)
  • Define ARM_LOADER_BLOCK for use when FreeLoader passes control to the kernel (ReactOS Portable Systems Group)
  • Define region for storing TTB, aligned to 16KB (ReactOS Portable Systems Group)
  • Allocate the kernel, interrupt and abort stacks, idle thread and process, boot PRCB, ad PCR and PDR pages (ReactOS Portable Systems Group)
  • Map Versatile serial port into virtual memory (ReactOS Portable Systems Group)
  • Remove 1MB page hacks (ReactOS Portable Systems Group)
  • Setup NLS data in loader block (ReactOS Portable Systems Group)
  • Setup loader block extension fields needed to pass ExpIsLoaderValid (ReactOS Portable Systems Group)
  • Setup Registry data in the ARM loader block (ReactOS Portable Systems Group)
  • Convert all loader blocks to virtual addresses (ReactOS Portable Systems Group)
  • Erase the timer string when needed. bug #3046 (Seungju Kim, Aleksey Bragin)
  • Do not draw the standard UI in minimalistic mode (Christoph von Wittich)
  • Remove duplicated code (Christoph von Wittich)
  • Load system registry in ARM (ReactOS Portable Systems Group)
  • Add support for ARC Disk Information/Signature (ReactOS Portable Systems Group)

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)
  • Support NtFlushInstructionCache for ARM (ReactOS Portable Systems Group)


  • 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
  • Replace KfRaise/LowerIrql with Ke instead (ReactOS Portable Systems Group)
  • Support ARM in SharedUserData->ImageNumberLow/High during ExpInitializeExecutive (ReactOS Portable Systems Group)
  • Fix interlocked list functions (ReactOS Portable Systems Group)


  • Implemented FsRtlDissectName based on MSDN description (Aleksey Bragin, Pierre Schweitzer)
  • Update FSRTL_ADVANCED_FCB_HEADER to support newer version headers, split Reserved into two bitfields: Reserved and Version (Aleksey Bragin)
  • Implemented FsRtlNotifyChangeDirectory: it just redirects to FsRtlNotifyFullChangeDirectory (which is *NOT* implemented) (Pierre Schweitzer)






  • Fix leaking an entry in some cases during ObpFreeCapturedAttributes call. For more details: (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.


  • Fix of the "Pos InitData failed"-Error and "CreateEnergyList failed"-Error in power options. (Alexander Wurzinger, bug #2469)


Hardware Abstraction Layer (HAL)

Run Time Library (RTL)

Kernel Mode Drivers


All filesystem drivers

  • 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)
  • Set default return of IRP_MJ_QUERY_INFORMATION to STATUS_INVALID_PARAMETER (Pierre Schweitzer)


  • Add support for loading the PSF font file format (Christoph von Wittich)
  • Allow file mode 2 for PSF files (still ignoring unicode data) (Christoph von Wittich)
  • Read the VGA fonts from a "" file instead of "vgafont.bin" (ZIP format)
    This file is automatically created on every build by using the new CabMan simple cabinet functions (Colin Finck)





  • Don't return if no keyboard or mouse is present. Instead continue detecting the devices.
    This fixes the bug that you could not use the keyboard, when no mouse was plugged in. (Colin Finck)
  • Simplified the code for connecting the interrupts. (Colin Finck)
  • Only get the first two bytes in a loop and issue just one i8042ReadDataWait command for the last byte when resetting the mouse.
    This reduces the "blank screen time" in Usetup from 45 seconds to 3 seconds on my ECS K7S5A Pro and some other boards, when no mouse is plugged in. (Colin Finck)
  • Remove much code for the mouse initialization, which had been imported from the ancient "psaux.sys" driver.
    Don't use the "Get ID" command anymore, which is not available on all systems. This way, some more mice should be detected now. (Colin Finck)
  • First detect the mouse and then the keyboard. If we do it the other way round, some systems throw away settings like the keyboard translation, when detecting the mouse.
    This solves the popular keyboard detection bug on real hardware in 0.3.4. (Colin Finck)



  • Fixing a typo in ndis rename NdisGetSystemUptime to NdisGetSystemUpTime for the stub (Magnus Olsen)
  • Implemented NdisSystemProcessorCount, NdisGetCurrentProcessorCounts, NdisGetSystemUptime, thanks KJK for the help optimizing it, NdisScheduleWorkItem, thanks to Art Yerkes for help (Magnus Olsen)
  • Add a missing struct NDIS_WORK_ITEM and missing prototype NdisScheduleWorkItem (Magnus Olsen)




  • Always set DO_BUFFERED_IO or DO_DIRECT_IO, so that IRP_MJ_READ/IRP_MJ_WRITE work (Hervé Poussineau)
  • Fix FileStandardInformation and FilePositionInformation classes (Hervé Poussineau)



  • Only increment VideoPortDeviceNumber, when IntVideoPortCreateAdapterDeviceObject and IntVideoPortFindAdapter succeeded.
    This fixes loading the CL54xx miniport driver. Anyway, its DDI driver is still a problem. (Filip Navara)

NT System Library (NTDLL)

Static Libraries



  • Remove much Win9x-specific stuff from the library and make it more compatible to the MS version of the library. (Colin Finck)

Keyboard Layouts

  • Add the following keyboards: Albanian (AL), Russian Typewriter (RU1), US IBM Arabic 238_L layout (USA), Icelandic (IC), Canadian French Legacy (FC), Canadian Multilingual Standard (CAN), Dutch (NE), Estonian (EST), Georgian (GEO), Latvian (LV), Macedonian (MAC), Romanian (RO), Tatar (TAT), US Dvorak for left hand (USL), US Dvorak for right hand (USR), US International (USX), Serbian Cyrillic (YCC), Serbian Latin (YCL), Turkish Q (TUQ), Turkish F (TUF), Ukrainian Student (URS), Uzbek Cyrillic (UZB), Vietnamese (VNTC), Azeri Cyrillic (AZE), Azeri Latin (AZEL), Belarusian (BLR), Portuguese Brazilian ABNT2 (BR), Kazakh (KAZ) (Dmitry Chapyshev)
  • Add the following keyboards: Armenian Eastern [ARME], Armenian Western [ARMW], Arabic (101) [A1], Arabic (102) [A2], Arabic (102) AZERTY [A3] (Alexey Komarov)
  • Add Korean keyboard layout template (Matthias Kupfer, bug #3345)
  • Slovak keyboard layout update (Milan Margus, bug #1251)


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)
  • Call ExDeleteResourceLite() before freeing an ERESOURCE, otherwise it will remain in the system resource list (Samuel Serapion)
  • Check if the menu object has really been found to avoid memory corruptions (Johannes Anderwald)
  • Implemented DxEngLockHdev and DxEngUnlockHdev, thanks to Jim Tabor for the help with these two (Magnus Olsen)
  • Added full trace for dxeng API in win32k (Magnus Olsen)
  • Remove several deprecated NtUser functions, replacing them with appropriate functions (Stefan Ginsberg)
  • Fix calculation of cwc parameter for NtGdiGetFontResourceInfoInternalW (Timo Kreuzer)
  • Make some default text metric settings compatible to Windows XP (Timo Kreuzer)
  • Zero out lfWidth member when returning logfont in IntGdiGetFontResourceInfo (Timo Kreuzer)
  • Move WNDPROC_INFO structure from ntuser.h to win32k/include/class.h (Stefan Ginsberg)
  • Use GDIOBJ_SetOwnership instead of GDIOB_CopyOwnership in DC_SetOwnership (Timo Kreuzer)
  • Make DC structure more Windows XP compatible (Timo Kreuzer)
  • (Int)EngGradientFill: if no CLIPOBJ is given, create a CLIPOBJ from bounds rect (Timo Kreuzer)
  • EngLineTo: if no CLIPOBJ is given, create a CLIPOBJ from bounds rect (Timo Kreuzer)
  • Free allocated style array in NtGdiExtCreatePen on failure (Timo Kreuzer)
  • IntGdiLineTo: the dc pen might be deleted, don't ASSERT, instead fall back to BLACK_PEN (Timo Kreuzer)
  • EngCreateClip: allocate CLIPGDI, not only CLIPOBJ (Timo Kreuzer)
  • Make Simplecall definitions (NtUserCallXxx) compatible to different Windows versions (Timo Kreuzer)
  • Split ntuser/misc.c into sysparams.c, simplecall.c and misc.c (Timo Kreuzer)
  • Fix handling of unsafe string parameter in NtGdiGetFontResourceInfoInternalW (Timo Kreuzer)
  • Fix cj parameter type in EngAllocUserMem (SIZE_T, not ULONG) (Timo Kreuzer)
  • fix typecast of pointer (ULONG -> ULONG_PTR) in LdrGetProcedureAddress (Timo Kreuzer)
  • Make the screensaver lib hide the cursor directly after creating it (Timo Kreuzer, bug #2965)
  • NtUserCreateWindowEx: use RETURN() macro to not bypass cleanup (Timo Kreuzer)
  • Improve appearance of disabled buttons by using DrawText 2 times instead of using DrawState (Timo Kreuzer)
  • Rename 2nd parameter of NtUserGetClipboardData from Unknown1 to pBuffer nad use SEH to copy data (Timo Kreuzer)
  • Change (Nt)UserGetWindowDC return type from DWORD to HDC (Timo Kreuzer)
  • Fix several typecasts, making them 64bit safe (Timo Kreuzer)
  • Use InterlockedExchangePointer instead of InterlockedExchange for pointers (Timo Kreuzer)
  • NtUserEnumDisplaySettings: change returns type to NTSTATUS, remove SerLastError, fix parameter validation and return value (Timo Kreuzer)
  • Fix wrong debug output when a process is terminated, by deleting it's objects in a proper order (Timo Kreuzer, bug #2954)
  • Update the BaseObjects hHmgr field when converting an object to a stock object (Timo Kreuzer)
  • Optmize NtGdiFlushUserBatch by locking the dc once instead of doing it for every object (Timo Kreuzer)
  • Fix wrong pointer calculation in NtGdiFlushUserBatch (Timo Kreuzer)
  • Remove hFirstBitmap from the WIN_DC_INFO structure (Timo Kreuzer)
  • Use StockObject(DEFAULT_BITMAP) for the default bitmap when creating a memory dc (Timo Kreuzer)
  • Use dc.DcLevel.hPal for the palette instead of using dc.PalIndexed and dc.w.hPalette (Timo Kreuzer)
  • Fix palette implementation: use the surface's palette to crate the xlate objects, default to the device default palette. The dc palette defaults to stock object default palette (Timo Kreuzer)
  • Implement IntCreateXlateForBlt, used in BitBlt etc functions to perform the needed operations to create the xlate object instead of duplicating the code (Timo Kreuzer)
  • DxEngGetHdevData: return a DWORD_PTR instead of a DWORD, use DWORD_PTR as Data parameter (Timo Kreuzer)
  • DxEngGetDcState: return a DWORD_PTR instead of a DWORD (Timo Kreuzer)
  • Rename GDIOBJ_AllocObj to GDIOBJ_allocObjWithHandle and make it return a pointer to a locked object (Timo Kreuzer)
  • Implement GDIOBJ_AllocObj that only allocates a memory object without a handle (Timo Kreuzer)
  • Rename GDIOBJ_FreeObject to GDIOBJ_FreeObjByHandle (Timo Kreuzer)
  • Implement GDIOBJ_FreeObj that only frees the memory object (Timo Kreuzer)
  • Fix NtGdiCreateClientObject and NtGdiDeleteClientObject (Timo Kreuzer)
  • NtGdiHfontCreate: use SEH instead of MmCopyFromCaller (Timo Kreuzer)
  • Don't use shared locks, when modifying bitmaps (Timo Kreuzer)
  • Move code from NtUserCallOneParam to UserShowCursor (Timo Kreuzer)
  • Make NtUserSetCursor hide Cursor on hCursor = NULL (Timo Kreuzer)
  • IntEngGradientFill: fix cleanup when calling the driver (Timo Kreuzer)
  • Fix calculation of character height by preventing edx register to be clobbered in FT_MulFix and reenabling commented out code (Jeffrey Morlan, bug #3346)
  • Fix coordinate transformation in NtGdiSetDIBitsToDevice (Jeffrey Morlan, bug #3200, bug #3294)
  • GDIOBJ_FreeObjByHandly: unlock handle table entry when object to delete was locked (Timo Kreuzer)
  • REGION_AllocRgnWithHandle: unlock region before trying to delete it on failure (Timo Kreuzer)
  • Fix calculation of yBaseUnit in GdiGetCharDimensions (Timo Kreuzer)
  • Fix an endless loop in IntDereferenceClass (Timo Kreuzer, bug #2142)
  • Fix a crash in co_MsqTranslateMouseMessage, by correcting the callers next list entry, if it might have been deleted (Timo Kreuzer, bug #2317)





Control panel applets



  • Rename german dialog to match Windows XP SP2+ name (Johannes Anderwald)
  • Fix compilation with MSVC (Johannes Anderwald)
  • Allow environment variables to be used in the "Wallpaper" registry value. (Vytis Girdžijauskas)
  • Do not display the file suffix after adding a wallpaper through the "Browse" dialog. (Vytis Girdžijauskas)
  • After using the "Browse" dialog, select the newly added item and scroll to the bottom to show it. (Colin Finck)
  • Add the LVS_SHOWSELALWAYS style to the ListViews, so items are also highlighted, when the ListView does not have the focus (Colin Finck)





  • Do not touch the new user name if the user cancels the rename action (Eric Kohl)
  • Implement the creation and removal of user accounts (Eric Kohl)
  • Check that the user name does not contain any illegal characters (Eric Kohl)
  • Check that both passwords are the same (Eric Kohl)
  • Limit the maximum user name length to 20 characters (Eric Kohl)
  • Implement user options properly (Eric Kohl)
  • Limit the maximum user name length to 20 characters when a user name is changed from within the users list (Eric Kohl)
  • Check user name for illegal characters when it is changed from within the user list (Eric Kohl)
  • Add code to create, delete and rename user groups (Eric Kohl)
  • Rename CheckUserName() to CheckAccountName() and move it to a new source file (misc.c) (Eric Kohl)
  • Add the general user properties page, settings are visible but cannot be changed yet (Eric Kohl)


  • Replace IsUserAdmin (Wine API) with IsUserAnAdmin (Shell32 API) (Colin Finck)


Win32™ Applications


  • Reduce the amount of code significantly by using the scrnsave library (Colin Finck)


  • Added the support of untfs.dll to autochk.exe (and a bit reviewed code when loading provider) (Pierre Schweitzer)


  • Reduce the amount of code to a minimum by using the scrnsave library (Colin Finck)




  • Improve control a bit so it that can execute cpl specified on the command line (Johannes Anderwald)
  • Completely revamped "control.exe": (Colin Finck)
    • Now uses shell32 functions for loading the control panel applets, so that the mutex is used as well (see bug #781)
    • Supports all built-in command-line parameters, which are supported by the WinXP version.
      This also added support for opening shell folders.
    • Loads other possible parameters from the registry.
    • Opens the Explorer Shell Folder instead of providing a standalone Control Panel.





  • Implement the code for the "Run" and "Shutdown" menu items, create stubs for the other custom commands (Colin Finck)


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


  • Simplify blitting the screen bitmap and fix a graphical glitch under ROS (Carlo Bramini, bug #3241)
  • Fix the position of the mouse cursor (Carlo Bramini, bug #3245)






  • Implemented Regedt32, which just calls Regedit (Carlo Bramini, bug #3248)



  • Wrote a graphical editor application for our VGA fonts (Colin Finck)

Win32™ Libraries


  • Sync the advapi32 crypt functions to Wine 1.0-rc2, makes us pass more Wine tests (Samuel Serapión)
  • Implement SystemFunction036 (RtlGenRandom) based on the pseudo-random number generator RtlRandom (Colin Finck)


  • Use a ClipRegion when collapsing, so that the TreeView works correctly. (Timo Kreuzer)


  • 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)
  • Code cleanup for DdDestroySurface (Magnus Olsen)
  • Implement D3dContextCreate, DdCanCreateD3DBuffer, DdDestroyD3DBuffer, DdLockD3D, and DdUnlockD3D (Magnus Olsen)
  • BugFix DdFlip: Add left surface. Implemented support for it (Magnus Olsen)
  • BugFix DdCreateDirectDrawObject: Use DeleteDC since we are using shared memory for it now (Magnus Olsen)
  • Implement callback interface DvpVideoport, DvpCreateVideoPort, DvpDestroyVideoPort, DvpFlipVideoPort, DvpGetVideoPortBandwidth, DvpColorControl, DvpGetVideoSignalStatus, DvpGetVideoPortFlipStatus, DvpCanCreateVideoPort, DvpWaitForVideoPortSync, DvpUpdateVideoPort (Magnus Olsen)
  • BugFix DdGetDriverInfo: The videoport callback interface now sets the pUserDvdPort->dwFlags correctly (Magnus Olsen)
  • BugFix DdCreateSurface we pass down all usermode surface data to win32k. left todo is translate back all surface data. (Magnus Olsen)
  • Implement Callbacks misc, misc2, Color Control, NT callbacks (Magnus Olsen)
  • implemented DdCreateD3DBuffer callbacks (Magnus Olsen)
  • BugFix smaller bug in DdCreateSurface callbacks the surface handle count was setup wrong before it was pass down to win32k (Magnus Olsen)
  • partly implement Escape (Magnus Olsen)
  • Implemented commands GETCOLORTABLE, GETEXTENDEDTEXTMETRICS, and ABORTDOC in Escape (Magnus Olsen)
  • Partially implement gdi32 Escape, needed for getting opengl icd driver working (Magnus Olsen)
  • Implement command ENDDOC: Escape (Magnus Olsen)
  • Implement command STARTDOC: Escape (Magnus Olsen)
  • Bugfix CreateBitmapIndirect adding SetLastError(ERROR_INVALID_PARAMETER) when CreateBitmapIndirect fail, based on suggestion by Filip Navara (Magnus Olsen)




  • Implement GetConsoleAlias[A/W], AddConsoleAlias for doskey support (Johannes Anderwald)
  • Implement EnumSystemLanguageGroupsA/W, EnumSystemLocalesA, EnumSystemGeoID, GetGeoInfoA/W (partially), EnumSystemCodePagesA/W, EnumLanguageGroupLocalesA/W, EnumUILanguagesA/W, GetUserGeoID, SetUserGeoID, SetDefaultCommConfigA/W, GetDefaultCommConfigA/W, BeginUpdateResourceA/W, UpdateResourceA/W, EnumResourceLanguagesA/W, EndUpdateResourceA/W, EnumResourceTypesA/W, GetCalendarInfoA/W, EnumDateFormatsW, EnumCalendarInfoA/W, EnumCalendarInfoExA/W, FindFirstVolumeA/W, FindNextVolumeA/W (Dmitry Chapyshev)
  • Fix GetCommState, GetSystemInfo, IsProcessorFeaturePresent, LockResource, EnumSystemLocalesW (Dmitry Chapyshev)
  • Don't reset the last error on an exception for the lstr* functions. Also handle more than just access violation exceptions.
    Behaviour verified under Windows XP. (Colin Finck)
  • Return 0 instead of false when return type is DWORD (Christoph von Wittich)
  • Remove unused alias struct (Christoph von Wittich)
  • Use FILE_SHARE_READ | FILE_SHARE_WRITE in CopyFileExW to also copy opened files. Thanks to Christoph for the hint. (Colin Finck)


  • Implemeted KsCreateAllocator, KsCreateClock, KsCreatePin, KsCreateTopologyNode (Magnus Olsen)


  • Sync floating point and regular exception handler/filter/signal code to WINE.(Samuel Serapión)
  • Sync all file and IO functions with WINE.(Fireball)
  • Ported from LIBC 1.1.32A (Samuel Serapión)
    • Implement ismbcl0, ismbcl1, ismbcl2, mbstowcs, mbctohira, mbctokata, mbscspn, mbsspnp.
    • Fixed up ismbcalpha, ismbbkalnum, ismbbkpunct, ismbbpunct, ismbcdigit, ismbclower, isleadbyte, ismbcprint, ismbbkana, ismbcupper, ismbbtrail, ismbclegal, ismbcspace, ismbcsymbol, mbtowc, mbctolower, mbsncat, mbsspn, mbctoupper, mbsupr.


  • Stub QuerySecurityPackageInfoA and QuerySecurityPackageInfoW (Colin Finck)





  • Use PatBlt and SelectObject instead of Nt functions in FillRect (Timo Kreuzer)
  • Sync CharLowerA/W and CharUpperA/W with Wine (after replacing Wine's SEH with PSEH). This makes us passing all user32 wsprintf Wine tests. (Colin Finck)
  • Do not delete bitmap objects in case setting the desktop failed, as it does not belong to the calling process anymore (Christoph von Wittich)
  • GetAppCompatFlags implemented but not SetAppCompatFlags yet (Magnus Olsen)


  • Fix invalid uses of WriteFile in Wine code (Colin Finck)


  • Implement support for FIONREAD in WSAIoctl (Colin Finck)
Versions / Official Changelogs / Community Changelogs
0.0.x Series 0.0.8 | 0.0.9 | 0.0.10 | 0.0.11 | 0.0.12 | 0.0.13 | 0.0.14 | 0.0.15 | 0.0.16 | 0.0.17 | 0.0.18 | 0.0.19 | 0.0.20 | 0.0.21
0.1.x Series 0.1.0 | 0.1.1 | 0.1.2 | 0.1.3 | 0.1.4 | 0.1.5
0.2.x Series 0.2.0 | 0.2.1 | 0.2.2 | 0.2.3 | 0.2.4 | 0.2.5 | 0.2.6 | 0.2.7 | 0.2.8 | 0.2.9
0.3.x Series 0.3.0 | 0.3.1 | 0.3.2 | 0.3.3 | 0.3.4 | 0.3.5 | 0.3.6 | 0.3.7 | 0.3.8 | 0.3.9 | 0.3.10 | 0.3.11 | 0.3.12 | 0.3.13 | 0.3.14 | 0.3.15 | 0.3.16 | 0.3.17
0.4.x Series 0.4.0 | 0.4.1 | 0.4.2 | 0.4.3 | 0.4.4 | 0.4.5 | 0.4.6 | 0.4.7 | 0.4.8 | 0.4.9 | 0.4.10 | 0.4.11 | 0.4.12 | 0.4.13 | 0.4.14