Difference between revisions of "ChangeLog-0.3.10"

From ReactOS Wiki
Jump to: navigation, search
Line 367: Line 367:
=== SCSIPORT ===
=== SCSIPORT ===
* Add stubs for unimplemented cases in ScsiPortNotification ([[Olaf Siejka]])
* Add stubs for unimplemented cases in ScsiPortNotification ([[Olaf Siejka]])
* Stub out more IRP type cases instead of printing "Unknown IOCTL" (Olaf Siejka)
* Add cases for IOCTL_SCSI_MINIPORT and IOCTL_SCSI_PASS_THROUGH ([[Dmitry Chapyshev]])
* Add cases for IOCTL_SCSI_MINIPORT and IOCTL_SCSI_PASS_THROUGH ([[Dmitry Chapyshev]])
Line 380: Line 381:
* Add a few sanity asserts to KsCreate. Pass a create item and use an object class when creating an object header Return zero mixer count when wdmaud fails to enumerate virtual device count. Should fix high CPU usage after installing audio drivers ([[Johannes Anderwald]])
* Add a few sanity asserts to KsCreate. Pass a create item and use an object class when creating an object header Return zero mixer count when wdmaud fails to enumerate virtual device count. Should fix high CPU usage after installing audio drivers ([[Johannes Anderwald]])
* Stub out more IRP type cases instead of printing "Unknown IOCTL" (Olaf Siejka)
* Implement IOCTL_KEYBOARD_QUERY_ATTRIBUTES (not used yet, see FIXME comment) Add KeyboardAttributes to I8042_KEYBOARD_EXTENSION ([[Dmitry Chapyshev]])
* Implement IOCTL_KEYBOARD_QUERY_ATTRIBUTES (not used yet, see FIXME comment) Add KeyboardAttributes to I8042_KEYBOARD_EXTENSION ([[Dmitry Chapyshev]])
Line 386: Line 386:
* Use a reference name when registering audio subdevices. Release subdevice interface when it is no longer needed. Fix a memory leak. Audio support is on hold until bug #4566 is resolved ([[Johannes Anderwald]], bug #4566)
* Use a reference name when registering audio subdevices. Release subdevice interface when it is no longer needed. Fix a memory leak. Audio support is on hold until bug #4566 is resolved ([[Johannes Anderwald]], bug #4566)
* Report 5.2 as a version in UniATA rather than 4.1. ([[Aleksey Bragin]])
* Report 5.2 as a version in UniATA rather than 4.1. ([[Aleksey Bragin]])
* Increase waiting time for DRQ removal inside AtapiInterrupt twice. Do not disable/enable IDE controller interrupts in AtapiSendCommand. This confuses Virtual Box's controller (it consumes one interrupt without ever emitting it) and thus sending any ATAPI command fails. Turn off ATAPI DMA raw read support by default. It seems to be incompatible with (at least) Virtual Box IDE controller. ([[Aleksey Bragin]], bug #3645)
* i8042MouInternalDeviceControl: Partially implement internal IOCTLs IOCTL_INTERNAL_I8042_MOUSE_WRITE_BUFFER, IOCTL_INTERNAL_I8042_MOUSE_START_INFORMATION and IOCTL_MOUSE_QUERY_ATTRIBUTES. ([[Michael Martin]])
* i8042MouInternalDeviceControl: Partially implement internal IOCTLs IOCTL_INTERNAL_I8042_MOUSE_WRITE_BUFFER, IOCTL_INTERNAL_I8042_MOUSE_START_INFORMATION and IOCTL_MOUSE_QUERY_ATTRIBUTES. ([[Michael Martin]])
* Do not release resource list. ([[Johannes Anderwald]], may fix bug #4551)
* Do not release resource list. ([[Johannes Anderwald]], may fix bug #4551)
Line 403: Line 402:
* Fix WaitOnBusy, WaitOnBaseBusy and Wait[Short]ForDrq to wait and loop exactly the same as our existing atapi driver. This greatly enhances uniata's compatibility, especially on modern highspeed hardware where a controller usually does not have enough time to change its state and was considered invalid. ([[Aleksey Bragin]])
* Fix WaitOnBusy, WaitOnBaseBusy and Wait[Short]ForDrq to wait and loop exactly the same as our existing atapi driver. This greatly enhances uniata's compatibility, especially on modern highspeed hardware where a controller usually does not have enough time to change its state and was considered invalid. ([[Aleksey Bragin]])
* Do not overwrite *max_bcount. ([[Dmitry Gorbachev]])
* Do not overwrite *max_bcount. ([[Dmitry Gorbachev]])
* Increase waiting time for DRQ removal inside AtapiInterrupt twice. Do not disable/enable IDE controller interrupts in AtapiSendCommand. This confuses Virtual Box's controller (it consumes one interrupt without ever emitting it) and thus sending any ATAPI command fails. Turn off ATAPI DMA raw read support by default. It seems to be incompatible with (at least) Virtual Box IDE controller. ([[Aleksey Bragin]], bug #3645)
=== USB ===
=== USB ===

Revision as of 20:35, 3 July 2009


Formatting rules:

  • If a commit is related to a bug report, write Commit details (Author, bug #1234)
  • If a patch by somebody else was committed, the committer shouldn't be named.
    Just write: Commit details (Author of the patch, bug #1234) or leave out the bug reference if there is no bug report for that patch.
  • There shouldn't be any E-Mail addresses in the changelog
  • Use exclusively real names

This is the changelog for ReactOS™ version 0.3.10 (released whenever), 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.9 (released 26 April, 2009).


Generic 0.3.10 Changes

  • Remove Wine's wintab32 which relies on x11 drivers (Christoph von Wittich)
  • Add a logon sound (Davy Bartoloni)
  • Switch to using UniATA as a default storage driver. Makes it possible to use some SerialATA controllers/harddisks and overcome 8Gb HDD limitation. (Aleksey Bragin, bug #1262)



  • Bulgarian translation updates (CCTAHEB, bug #4427)


  • Language resource update, simplify chinese translations (Jingjing Fu, bugs: #4445; #4417; #4418)


  • Danish translation of shell32 and userenv DLLs (Thomas Larsen, bug #571)


  • Dutch translation for Solitaire, userinit (Wouter De Vlieger, bug #4610, bug #4535)
  • Dutch translation of NetID DLL, Netshell (Oscar van Egmond, bug #4606; bug #4582)
  • Sync NetID Dutch translation with English original. (Dmitry Gorbachev)
  • Translations for access.cpl, mmsys.cpl, timedate.cpl and taskmgr (Jan Roeloffzen, bugs: #4433; #4436; #4437)



  • Estonian translations (Andres Traks, bug #4580)



  • Japanese translation update for syssetup and downloader, translation of USetup. (Tomoya Kitagawa, bug #4619; bug #4523)


  • Italian translation updates (Paolo Devoti, bug #4449; bug #4567)


  • Update Norwegian translations (Lars Martin Hambro, bugs: #2482; #4325, #4477; #4489)


  • Polish translation Win32 Apps (Olaf Siejka)
  • Polish Translation Updates (Maciej Bialas)


  • Add Romanian translations of explorer-new, notepad, solitaire, rundll32, shell32; update write, calc. Translate most of the CPL applets. (Petru Dimitriu, bugs: #4416; #4422; #4482; #4413; #4562; #4540; #4518; #4452; #4426)



  • Slovak translations update (Mário Kačmár, bugs: #4396; #4539; #4555; #4626; #4652)



  • Include initguid.h so the GUIDs actually get initialized (Cameron Gutman)
  • Use DECLSPEC_SELECTANY so multiple definitions will not cause a problem (Cameron Gutman)
  • Add GUID_DEVINTERFACE_NET (Cameron Gutman)
  • Add definition of NDIS_TASK_OFFLOAD_HEADER (Cameron Gutman)
  • Fix NDIS 3.0 miniport characteristics based on MSDN documentation Add NDIS 5.1 miniport characteristics also based on MSDN documentation (Cameron Gutman)
  • Add definition of NDIS_DEVICE_PNP_EVENT (Cameron Gutman)
  • Add definition of IOCTL_NDIS_QUERY_GLOBAL_STATS (Cameron Gutman)
  • Remove BINARY_COMPATIBLE (Cameron Gutman)
  • Move INTERFACE_TYPE, IO_RESOURCE_DESCRIPTOR, IO_RESOURCE_REQUIREMENTS_LIST, CM_PARTIAL_RESOURCE_DESCRIPTOR to wdm.h, fix alignment of CM_PARTIAL_RESOURCE_DESCRIPTOR, remove typedef of PEX_RUNDOWN_REF_CACHE_AWARE, it already exists in wdm.h (verified with WinDDK7) (Johannes Anderwald)
  • Add more missing structures to winddiui.h. (James Tabor)
  • Add IPortWaveRT, IPortWaveRTStream, IMiniportWaveRTStream, IMiniportWaveRTStreamNotification, IMiniportWaveRT interface Add KSAUDIO_POSITION, KSRTAUDIO_HWLATENCY, KSRTAUDIO_HWREGISTER structure (Johannes Anderwald)
  • Fix definition of POINTER_ALIGNMENT for 64-bit. Problem reported by Brian Hawley at mingw-w64: http://sourceforge.net/forum/forum.php?thread_id=3163052&forum_id=723797 (Stefan Ginsberg)
  • Fix interface definition for IMiniportMidi Add macros to avoid warnings (Johannes Anderwald)
  • Add IID_IAllocatorMXF guid Add undef macro (hint Stefan) Thanks Usurp for telling (Johannes Anderwald)
  • define PORT_MAXIMUM_MESSAGE_LENGTH (Johannes Anderwald)
  • Define noreturn attribute for KeBugCheck/Ex in a msvc-compatible way (Stefan Ginsberg)
  • Make ks.h and drmk.h msvc compatible (Johannes Anderwald)
  • Fix warnings that are issued by new GCC versions (ddk/psdk). (Dmitry Gorbachev)



  • Ported <math.h> to Visual C++ Fixed some miscellaneous issues. (KJK::Hyperion)
  • Add more EMF records types. (James Tabor)
  • Add missing definition for TzSpecificLocalTimeToSystemTime (Sylvain Petreolle)
  • mmreg uses for all structures contained byte-aligned packing (Johannes Anderwald)
  • Disable some unavoidable warnings in Visual C++. Check that defines are defined before testing their value modified. Visual C++ doesn't support functions without a prototype anymore, and RPC_AUTH_KEY_RETRIEVAL_FN has a documented prototype anyway modified include/psdk/winnt.h WIN32_WINNT -> _WIN32_WINNT (KJK::Hyperion)
  • Add needed defines for Vista network API (Sylvain Petreolle)
  • Update TOKEN_INFORMATION_CLASS enum (Christoph von Wittich)
  • Fix definition of LUID (Christoph von Wittich)
  • Sync headers with Wine 1.1.21 (Dmitry Chapyshev)
  • Correct number of parameters for IDirect3DTexture methods. (Kamil Hornicek)

Host Tools




  • Actually set RBUILD_CL_PATH and RBUILD_LINK_PATH (KJK::Hyperion)
  • Moved linker and compiler rules in separate files Renamed compiler rules to more generic names New compiler rules for dependencies and preprocessor modes Rules for Microsoft C/C++ Compiler Linker rule file stubs. All elements now support "compilerset" and "linkerset" conditional attributes (KJK::Hyperion)
  • msc_helper renamed to rbuild_helper, because it could be useful to more than just Visual C++. Allow rbuild_helper to override any environment variable, given an override prefix (e.g., %VAR% will be replaced by %<override prefix>VAR%). Build rbuild_helper by default (KJK::Hyperion)
  • Almost all build rules moved to a makefile.auto include (rules.mak). Size of makefile.auto reduced to about half. The new rules correctly sort includes, defines and flags in priority order and don't duplicate flags anymore. (KJK::Hyperion)
  • Flag sets are defined once, as makefile variables, and then referred to by variable name Compiler-specific flags, includes and defines can now be set (KJK::Hyperion)
  • Drop "overridable" attribute for <define>, as it never worked right (KJK::Hyperion)
  • New <redefine> tag: works like <define>, but undefines the variable before defining it. (KJK::Hyperion)
  • Slightly changed rule for resource file; conversion to object file now a separate phase that prints "[CVTRES]" (KJK::Hyperion)
  • Slightly changed definition of ${gas} Echo "[AS]" instead of "[GAS]" Echo "[RC]" for wrc. (KJK::Hyperion)
  • Disable exceptions and RTTI for kernel mode C++ code. Goodbye _DISABLE_TIDENTS, __USE_W32API (KJK::Hyperion)
  • From now on, the MinGW back-end will also support the Microsoft command line C/C++ compiler (cl) and incremental linker (link). (KJK::Hyperion)
  • Fix compilation of RBuild. (Dmitry Gorbachev, bug #4415)
  • Use the dll runtime library. Fixes building taskmgr with VS and probably others (Ged Murphy)
  • Use RBUILD_PIPE_CPP in RBUILD_WRC_RULE, instead of hardcoding GCC (KJK::Hyperion)
  • Fix no-op code for UNIX hosts (KJK::Hyperion)
  • Don't feed GCC options in MSC Minor detection fixes Support for the Microsoft compiler is now fully functional: now get off your grotesquely fat asses and start fixing code so that it compiles with it TODO: make it fully functional for real (PCH, full dependencies); Microsoft linker support (KJK::Hyperion)



Bootloader (FreeLoader)

  • Remove MachGetMemoryMap() and replace it by ArcGetMemoryDescriptor(). Rework memory initialization to use it. We are no longer limited anymore to 32 memory descriptors and having more than 4GB of RAM does not lead to out of bounds accesses (Hervé Poussineau)
  • WINLDR: Fix SystemRoot path when booting in non-setup mode. WINLDR: Change path buffers to be MAX_PATH sized instead of an arbitrary 512 bytes value. (Aleksey Bragin)
  • Reenable partition table exploration, but switch off disk error reporting before doing it. (Aleksey Bragin)
  • WINLDR: Pass boot options to the kernel when booting in setup mode (it was disabled for debugging reasons). (Aleksey Bragin)
  • WINLDR: Use SystemRoot path as it is because after recent changes by Herve there is no need to do additional operations with it. (Aleksey Bragin)
  • Fix CDROM device registration: do not hardcode it to 0xE0, but register whatever device FreeLdr starts and which is not reported by BIOS as a harddisk. Fixes setupldr2. (Aleksey Bragin)
  • Disable partition table exploration, as long as it displays an error message if disk is not partitioned (Hervé Poussineau)
  • Implement agnostic architecture for file system access, according to Advanced RISC Computing Specification Version 1.2 Some shortcuts still exist, and will need to be addressed later. Use this new API in the NTLDR-style loader (Hervé Poussineau)
  • Implement ArcGetTime() and ArcGetRelativeTime() (Hervé Poussineau)

Kernel and Executive (NTOSKRNL)

  • Fix accidentally committed change in a function prototype. Spotted by Stefan Ginsberg. (Aleksey Bragin)
  • Make use of the implemented transfer counter. (Aleksey Bragin)
  • Implement a helper for updating IO transfer counters. Based on a patch by Dmitry Chapyshev. (Aleksey Bragin)
  • IopCreateObjectTypes: Add a DeleteProcedure for Device Objects. IopUnloadDevice: After calling the drivers Unload routine, make the DriverObject temporary and dereference it. IopUnloadDriver: Check that the driver is not already unloading before trying to call unload routine. If any failure, dereference the DriverObject before returning STATUS code. On an attempt to unload the driver, loop through each DeviceObject and set DOE_UNLOAD_PENDING in device extensions flags. Before calling the driver's unload routine set DRVO_UNLOAD_INVOKED in DriverObject's flags. Fixes Bugchecks when attempting to load driver a second time and when unloading a driver that has upper level device attached. (Michael Martin)
  • Disable debugging traces for dbgk/io/lpc/ob/ps by default, removing mostly unused debug code from frequently used routines and decreasing image size by about 32 KB. Also fix the way some macros are defined so we do not end up with double semicolons after the preprocessor. (Stefan Ginsberg)
  • Implement ProcessIoCounters case in NtQueryInformationProcess. Patch by Dmitry Chapyshev. Turn on I/O operations counter. (Aleksey Bragin)
  • Debug pool allocator: Add support for paged pool debugging. (Aleksey Bragin)
  • Implement a special "debug pool" allocator which catches pool overruns. It evolved from an initial patch by Art Yerkes, and is fully independent from underlying pool implementation. It supports only non-paged pool and detects only overruns now. To enable, uncomment DEBUG_NPOOL define in mm/pool.c. (Aleksey Bragin)
  • Change storage of ReactOS-specific virtual address space from VadRoot to Vm EPROCESS structure member. Change containing "structure" from MM_AVL_TABLE to MMSUPPORT respectively . (Aleksey Bragin)


  • Skip partitions drive letter assignments if no hard disk is present (Hervé Poussineau)


  • IopUnloadDriver: Only add the DOE_UNLOAD_PENDING to the Device's DeviceExtensions Flags and check for attached devices and reference counts if the DriverObject->DriverUnload is valid. Verified on XP. IopLoadUnloadDriver: Add a check to verify that ImagePath.Buffer is not null before freeing it. (Michael Martin)
  • IoGetLowerDeviceObject: Return lower device object if pending flags are not set. Noticed by Johannes Anderwald. (Michael Martin)
  • IopCreateDriver: Change MajorFunction routines back to internal function IopInvalidDeviceRequest for ones that were set to NULL in the Drivers DriverEntry. Behavior verified on Windows. (Michael Martin)
  • Fix a potential crash in IoGetLowerDeviceObject if nothing is attached (Cameron Gutman)
  • Add missing pool allocation failure branch in NtSetInformationFile, and a missing PAGED_CODE check. Spotted by Dmitry Chapyshev. (Aleksey Bragin)
  • Initialize IoCountOperations variable to FALSE by default. Spotted by Dmitry Chapyshev and winetests. (Aleksey Bragin)
  • IRP_MN_FILTER_RESOURCE_REQUIREMENTS passes the list also in Irp->IoStatus.Information. Fixes a crash in CMI8738 driver (Johannes Anderwald)
  • Fix for "VirtualBox Guest Additions 2.2.2 mouse filter driver is crashing during boot". (Jérôme Gardou, bug #4454; patch from bug #4388)
  • Fix improper resource translation because of AddressSpace confusion (Cameron Gutman)
  • Fix writing of BootConfig to the registry (previously, it wrote contents of DEVICE_NODE structure and caused nonpaged pool overread). Similar error a few lines below was fixed by Hervé in r15691. (Aleksey Bragin)
  • Fix driver object type DeleteProcedure so that it actually unloads the driver image. Make IopUnloadDriver work accordingly (it should not try to unload an image when its object has already been deleted). Drivers can now be unloaded in ReactOS, this probably fixes a number of hardware-related applications and applications using hardware protection. (Aleksey Bragin)
  • Add IoGetDeviceAttachmentBaseRef, IoGetDiskDeviceObject and IoGetLowerDeviceObject. (Michael Martin)
  • Do not assign DriverObject->MajorFunction[IRP_MJ_CLEANUP] twice. (Dmitry Gorbachev)
  • PnpInit: Allocate IopBusTypeGuidList from nonpaged pool as it contains a fast mutex. (Stefan Ginsberg)



  • Clear up debugger prompt from "mouse excrements". Tested in QEMU, Bochs, VirtualBox. (Dmitry Gorbachev)



  • Add SectionHandle probing (Dmitry Chapyshev)
  • Add probing of the result buffer and add missing target process reference/dereference in MemorySectionName case of NtQueryVirtualMemory. Fixes 2 "psapi_winetest" failures. (Dmitry Chapyshev)
  • MmUnmapViewOfSection: Unlock address space before notifying debugger. Fixes a case where OllyDbg deadlocks in a GateWait while trying to read virtual memory. (Michael Martin)
  • MiFindExportedRoutineByName: Correct an typo that caused MmGetSystemRoutineAddress to assert after finding a valid non forwarder function. (Michael Martin)
  • Properly disable tag validation if using debugging pool (fixes a wrong part of r41255). (Aleksey Bragin)
  • Add a note about increasing max pool sizes when using pool debugging. (Aleksey Bragin)
  • Add missing parameters probing. (Aleksey Bragin)
  • Add missing AVL tree initialization. (Aleksey Bragin)
  • Add check of parameters for NtGetWriteWatch/NtResetWriteWatch (from Wine) Set Granularity to PAGE_SIZE. Fixes crash in kernel32 virtual test (Dmitry Chapyshev)
  • MmGrowKernelStack: Fail when the kernel stack cannot grow any more. Fixes a crash with recursive user calls. (Timo Kreuzer, bug #4060)
  • MmCreateSection: SectionPageProtection of PAGE_NOACCESS is valid in Windows 98 and lower, but not valid in the NT family. More kernel32_winetest fixes for virtual memory. (Michael Martin)
  • NtAllocateVirtualMemory, NtProtectVirtualMemory: Page Protection cannot be any combination of Memory Protection Constants, see MSDN. Add checks to handle non compatible combinations and fail. Fixes 6 more kernel32_winetest for virtual memory. (Michael Martin)
  • MmProtectAnonMem: Search all Regions in Memory Area up to Length for MEM_COMMIT prior to altering memory protection. Fixes 6 kernel32_winetest for virtual memory. (Michael Martin)
  • MmMapViewOfSection: Segment size must be a multiple of page size, so round ViewSize up to next page size. OllyDbg now shows loaded dlls in memory and can step into dlls. (Michael Martin)
  • NtFreeVirtualMemory: Pass RegionListHead from SectionData vice VirtualMemoryData to MmAlterRegion for MemoryArea->Type of Section view. Fixes BugCheck with MapViewOfFile tests for kernel32_winetests. (Michael Martin)
  • Silence pool debugging debugprints. (Aleksey Bragin)
  • Make debug pool return 8-bytes aligned pointers. The padding area (up to 7 bytes) is not being checked for overruns now. ReactOS fully boots and works with this change and a debug pool. (Aleksey Bragin)


  • Make ObReferenceObjectEx return the new ref count instead of old ref count. Fix same bug ObDereferenceObjectEx. (Aleksey Bragin)
  • Fix a typo in ObDereferenceObjectEx which resulted in ObpDeferObjectDeletion not being called when needed. Fixes missing object deletions in code using ObDereferenceObjectEx (e.g. executive timers in reactos kernel). (Aleksey Bragin)


  • Add target process reference/dereference in ProcessWow64Information case of NtQueryInformationProcess. Check buffer length (Dmitry Chapyshev)
  • Check buffer length for ProcessQuotaLimits/ProcessBasePriority/ProcessRaisePriority/ProcessWx86Information/ProcessDebugPort cases (Dmitry Chapyshev)
  • Add probing of the result buffers (Dmitry Chapyshev)
  • Implement ProcessQuotaLimits case for NtQueryInformationProcess. Based on Dmitry Chapyshev's patch. (Aleksey Bragin)
  • Add target process reference/dereference in ProcessLdtInformation/ProcessWorkingSetWatch/ProcessWx86Information cases of NtQueryInformationProcess. (Dmitry Chapyshev)
  • Add debug messages for unimplemented cases in NtQueryInformationProcess (Dmitry Chapyshev)
  • Add missed checks of the buffer length (Dmitry Chapyshev)
  • Implement ProcessPriorityClass case for NtSetInformationProcess(). Based on Dmitry Chapyshev's work and testing. (Aleksey Bragin)
  • Fix ProcessPriorityClass case in NtQueryInformationProcess. Structure PROCESS_PRIORITY_CLASS should be returned. Tested in win vista (Dmitry Chapyshev)


NT System Library (NTDLL)

  • LDRP_PROCESS_CREATION_TIME was a _flag_ which is now removed, the new 'LDRP_PROCESS_CREATION_TIME' is not a flag, it is just a constant to identify a special value of LoadCount. (Alexander Potashev)
  • Fix handle / memory leak in failure branch, spotted by Dmitry Chapyshev. (Aleksey Bragin)
  • Fix obvious bugs in the code (e.g. freeing a stack-allocated pointer). Rewrite the code to be more readable. Enlarge static buffer for SearchPathBuffer to be at least 5*MAX_PATH to prevent possible overflowing for now. In the meanwhile, Dmitry is rewriting this part of code to dynamically allocate the memory without the need for a temporary static storage. (Aleksey Bragin)
  • Add support for additional paths of loading dlls (fixes loading dlls in X-Chat) (Dmitry Chapyshev, bug #4201)

Run Time Library (RTL)

  • Fix asm implementations of RtlInterlockedPopEntrySList, RtlInterlockedPushEntrySList and RtlInterlockedFlushSList, by correcting the stack offset for the parameters. (Timo Kreuzer)
  • Fix definition of RTL_HANDLE_TABLE_ENTRY Fix check in RtlFreeHandle. (Timo Kreuzer)
  • Clean up RtlSecureZeroMemory (Stefan Ginsberg)
  • Implement RtlDecodePointer and remove respective redefining hack from vectoreh.c. (Aleksey Bragin)
  • Make vectored exceptions thread-safe (Thomas Bluemel)
  • Wait_thread_proc: Pass the correct value WaitAny vice FALSE to NtWaitForMultipleObjects. Fixes INFINITE wait when running kernel32_winetest for thread. (Michael Martin)
  • Timer_queue_thread_proc: added missing and required RtlExitUserThread before function exit. Fixes crashing of kernel32_winetest for sync. (Michael Martin)

Kernel Mode Drivers



  • Silence "argument unused" warnings. Corrected several accesses to potentially uninitialized variables. Visual C++ is no longer a guarantee of compilation with the DDK (Samuel Serapión)



  • Define NDIS_VERSION as NDIS 5.1, Return NDIS 5.1 in NdisGetVersion (Cameron Gutman, Sylvain Petreolle)
  • Make NdisGeneratePartialCancelId safe by using Interlocked functions (Cameron Gutman)
  • Implement NdisIMGetBindingContext and NdisIMGetDeviceContext (Cameron Gutman)
  • Header cleanup (Cameron Gutman)
  • Implement NdisIMCopySendPerPacketInfo and NdisIMCopySendCompletePerPacketInfo (Cameron Gutman)
  • Implement NdisGeneratePartialCancelId (Cameron Gutman)
  • Implement NdisCancelSendPackets (Cameron Gutman)
  • MINIPORT_CONFIGURATION_CONTEXT must be allocated from nonpaged pool as it contains a spinlock (Stefan Ginsberg)
  • Rewrite MiniQueryInformation so it creates a NDIS_REQUEST and passes it to MiniDoRequest for processing to reduce code duplication Call MiniportCoRequest in connection-oriented miniports Now our NDIS loads all the way to the ASSERT for unsupported media on XP (Cameron Gutman)
  • Fix our handler checks Now XP's intermediate miniport drivers can load on ROS's NDIS More work still needs to be done to get them working though (Cameron Gutman)
  • Register the adapter shutdown handler if it is specified in the miniport characteristics (Cameron Gutman)
  • Export NdisFreeToBlockPool (Cameron Gutman)
  • Finish NDIS S/G DMA implementation. (Cameron Gutman)
  • Handle IRP_MN_QUERY_PNP_DEVICE_STATE (Cameron Gutman)
  • Register a device interface for each miniport (Cameron Gutman)
  • Implement and export NdisCompareAnsiString, NdisCompareUnicodeString, and NdisInterlockedAddLargeInteger (Cameron Gutman)
  • Export the stubs for NdisRegisterTdiCallBack, NdisSetProtocolFilter, and NdisClGetProtocolVcContextFromTapiCallId. Move implemented functions to misc.c and add some debug prints (Cameron Gutman)
  • Implement and export NdisOverrideBusNumber (Cameron Gutman)
  • Implement NdisGetSharedDataAlignment and NdisGetVersion (Dmitry Chapyshev)
  • Export and stub NdisAllocateFromBlockPool, NdisCancelSendPackets, NdisCoAssignInstanceName, NdisCoGetTapiCallId, NdisCreateBlockPool, NdisDestroyBlockPool, NdisGeneratePartialCancelId, NdisGetRoutineAddress, NdisGetSharedDataAlignment, NdisGetVersion, NdisIMGetCurrentPacketStack, NdisIMNotifyPnPEvent, NdisQueryPendingIOCount, and NdisSetPacketStatus (Cameron Gutman)
  • Export and implement NdisSetTimerEx (Cameron Gutman)
  • Export stubs for NdisQueryBindInstanceName and NdisSetPacketPoolProtocolId (Cameron Gutman)
  • Export NdisGetFirstBufferFromPacketSafe, NdisGetPacketCancelId, NdisGetPoolFromPacket, NdisPacketSize, and NdisSetPacketCancelId (Cameron Gutman)
  • Export NdisCopyFromPacketToPacketSafe (Sylvain Petreolle)
  • Fix handling of noncached contiguous memory in NdisAllocateMemory and NdisFreeMemory (Cameron Gutman)
  • Fix a bug that could result in Dma32BitAddresses being set if the caller specifies NDIS_DMA_24BITS (Cameron Gutman)
  • Do not use NDIS's ioctl handler for devices registered from NdisMRegisterDevice (Cameron Gutman)
  • Irp->AssociatedIrp.SystemBuffer is a PNDIS_OID (Cameron Gutman)
  • Fix our DMA implementation to use documented structs (Cameron Gutman)
  • Implement NdisReadPcmciaAttributeMemory and NdisWritePcmciaAttributeMemory Add some debug prints to NdisReadEisaSlotInformation (Cameron Gutman)
  • Implement NdisReadEisaSlotInformation (Cameron Gutman)
  • The slot number passed directly to NdisImmediateReadPciSlotInformation/NdisImmediateWritePciSlotInformation is ignored according to MSDN so store a valid slot number in the wrapper context to use instead (Cameron Gutman)
  • Implement NdisGetFirstBufferFromPacketSafe and NdisCopyFromPacketToPacketSafe (Cameron Gutman)
  • Implement NdisGetPoolFromPacket, NdisPacketSize, NdisGetPacketCancelId, and NdisSetPacketCancelId (Cameron Gutman)
  • Store the MTU in the packet extension for use during segmentation by miniport drivers (Cameron Gutman)
  • Remove some obsolete defines I apologize for any unnecessary rebuilds this may cause ;) (Cameron Gutman)
  • Enable several failure debug prints Add a debug print (Cameron Gutman)
  • Do not cast NDIS_SPIN_LOCK directly to KSPIN_LOCK (Cameron Gutman)
  • Allocate space for the packet extension located at NdisPacketOobOffset + sizeof(NDIS_PACKET_OOB_DATA) Fixes more packet corruption (Cameron Gutman)
  • Implement support for IOCTL_NDIS_QUERY_GLOBAL_STATS (Cameron Gutman)
  • Implement handing for IRP_MN_SET_POWER and IRP_MN_QUERY_POWER (not plugged in yet). Allocate a buffer and copy data into it instead of using the buffer passed to us directly. Use a helper function to perform common operations which save lots of lines of duplicated code (Cameron Gutman)
  • Handle IRP_MN_QUERY_REMOVE_DEVICE and IRP_MN_CANCEL_REMOVE_DEVICE. Implement NdisCompletePnPEvent. Handle pending cases (Cameron Gutman)
  • Implement handling for IRP_MN_CANCEL_STOP_DEVICE (Cameron Gutman)
  • Implement handling for IRP_MN_QUERY_STOP_DEVICE (Cameron Gutman)
  • Translate the raw address before attempting to map it (Cameron Gutman)
  • Add debug prints to NdisMMapIoSpace (Cameron Gutman)
  • Fix memory corruption when reading binary data (Cameron Gutman)
  • Check for invalid ConfigurationContext Patch by Daniel Zimmermann with a slight modification by me (Cameron Gutman)
  • Pass IRP_MN_QUERY_DEVICE_RELATIONS down the stack (Cameron Gutman)
  • Wait for NdisMFreeSharedMemoryPassive to complete before returning See issue #4428 for more details. (Cameron Gutman)
  • Only call NdisMEthIndicateReceiveComplete once per batch of packets Slight performance increase (Cameron Gutman)
  • Implement NdisCopyBuffer and NdisGetCurrentProcessorCpuUsage Patch by Dmitry Chapyshev (Cameron Gutman)
  • Free NdisMiniportBlock.Resources when we receive a stop IRP (Cameron Gutman)
  • Also copy AllocatedResources from the stack to NdisMiniportBlock.Resources (Cameron Gutman)
  • Fix support for asynchronously completed requests (Cameron Gutman)
  • Use Int32x32To64 to calculate timeout (Cameron Gutman)
  • Allocate memory for the OOB area also Set the NdisPacketOobOffset in each packet Fixes the mysterious packet corruption Fixes Realtek 8139 and Intel PRO/1000 (Cameron Gutman)
  • Zero the whole packet in other packet allocation routines. Set ValidCount TRUE because we do not have any buffers chained yet. Set the fPACKET_ALLOCATED_BY_NDIS flag (fixes storing media-specific data) (Cameron Gutman)
  • Do not attempt to store packets and buffers in the same place (Cameron Gutman)
  • Implement NdisQueryAdapterInstanceName (Cameron Gutman)
  • Implement NdisMRegisterUnloadHandler, NdisMRegisterDevice, and NdisMDeregisterDevice (Cameron Gutman)
  • Implement NdisMGetDeviceProperty (Cameron Gutman)
  • Register more handlers (Cameron Gutman)
  • Check to see that the packet status isn't NDIS_STATUS_RESOURCES before forwarding the packet descriptor to the ReceivePacketHandler (Cameron Gutman)


  • Only register a shutdown handler if adapter initialization has succeeded (Cameron Gutman)


  • Implement IPortFilterWavePci (based on IPortFilterWaveCyclic) (Johannes Anderwald)
  • Activate IPortFilterWavePci (Johannes Anderwald)
  • Drivers might use unused area of device extension (Johannes Anderwald)
  • Handle IRP_MN_QUERY_RESOURCE_REQUIREMENTS (Johannes Anderwald)
  • Forward & wait IRP_MN_START_DEVICE to lower device objects before starting the device (Johannes Anderwald)
  • Fix several irp leaks and return correct status in PcForwardIrpSynchronous (Johannes Anderwald)
  • Fix return type of FastDeviceIo / FastRead / FastWrite (Johannes Anderwald)
  • Implement FastDeviceIoControl for IPortFilterWavePci (Johannes Anderwald)
  • Implement KSPROPERTY_PIN_CTYPE, KSPROPERTY_PIN_DATAFLOW, KSPROPERTY_PIN_COMMUNICATION for fast property handler (Johannes Anderwald)
  • Allocate a work item for each specific request (start / stop / close) and free allocated work items (Johannes Anderwald)
  • Use ExInterlockedInsertTailList to insert a new audio device to prevent race conditions when more than one audio device is present (Johannes Anderwald)
  • Free work item in their target worker routine (Johannes Anderwald)
  • Increase importance of the audio dpc which finishes irps (Johannes Anderwald)
  • Once one second of audio data has been buffered, always queue audio irps and dont complete them imediately. Greatly improves the playback of SMPlayer and probably many other audio players which act strictly on the timing of completed irps (Johannes Anderwald)
  • Add debug traces when KsCreatePin fails (Johannes Anderwald)
  • Re-dispatch irp to the default handler (Johannes Anderwald)
  • Add tons of ASSERT_IRQL / ASSERT_IRQL_EQUAL (Johannes Anderwald)
  • Queue a dpc when IServiceGroup::RequestService is called above dispatch level (Johannes Anderwald)
  • As a result writing to common buffer and completing irps can be done at the same time (Johannes Anderwald)
  • Start the stream at PASSIVE_LEVEL (Johannes Anderwald)
  • Check if key has been deleted in IRegistryKey object function (Johannes Anderwald)
  • Implement IRegistryKey::QueryRegistryValues (Johannes Anderwald)
  • The IrpQueue functions are called at DISPATCH_LEVEL, therefore use KeAcquireSpinLockAtDpcLevel instead (Johannes Anderwald)
  • Fix multiple bugs when using IrpQueue tag functions (Johannes Anderwald)
  • Implement IPortWaveRT, IPortFilterWaveRT, IPortPinWaveRT interface for audio drivers >= Vista (Johannes Anderwald)
  • Implement IPortMidi, IPortFilterDMus, IPortPinDMus (Johannes Anderwald)
  • Implement reading / writing midi stream data using IMiniportMidiStream interface (Johannes Anderwald)
  • Partly implement IMasterClock (Johannes Anderwald)
  • Implement IAllocatorMXF for IPortPinDMus (Johannes Anderwald)
  • Implement rendering midi streams using IMXF object (Johannes Anderwald)
  • Create a KSTOPOLOGY struct when creating the subdevice descriptor and pass the struct to KsTopologyPropertyHandler (Johannes Anderwald)
  • Implement enumerating mixer devices (Johannes Anderwald)
  • Change handle array to contain the target device type. Mixer handles are not real handles, they are just pseudo handles (Johannes Anderwald)
  • Topology nodes can have a nullable name (Johannes Anderwald)
  • Define private interface IPortWaveRTStreamInit in order to deal with PHYSICAL_ADDRESS as return value (Johannes Anderwald)
  • Implement reading/writing into cyclic buffer for IPortPinWaveRT (Johannes Anderwald)
  • Allocate an audio buffer when the pin is initialized. This needs to be changed once KSPROPERTY_RTAUDIO_BUFFER is implemented (Johannes Anderwald)
  • Fix a bug in PcNewPort (Johannes Anderwald)
  • Remove obsolete code from IPortWavePci (Johannes Anderwald)
  • Return the allocated MDL from IPortWaveRTStream::AllocateContiguousPagesForMdl (Johannes Anderwald)
  • Create a system thread when using IServiceGroup::RequestDelayedService (Johannes Anderwald)
  • Use interval of 10ms for the periodic timer IPortPinWaveRT (Johannes Anderwald)
  • Initialize a periodic timer for IPortPinWavePci (Johannes Anderwald)
  • Store servicegroup obtained from IMiniportDMus / IMiniportMidi Init function when IPortDMus / IPortMidi RegisterServiceGroup is not called (Johannes Anderwald)
  • Topology nodes can have a nullable name. Disable releasing resources when IPortFilterWaveCyclic is closed (Johannes Anderwald)


  • Add stubs for unimplemented cases in ScsiPortNotification (Olaf Siejka)
  • Stub out more IRP type cases instead of printing "Unknown IOCTL" (Olaf Siejka)
  • Add cases for IOCTL_SCSI_MINIPORT and IOCTL_SCSI_PASS_THROUGH (Dmitry Chapyshev)


  • Silence a few debug prints (Johannes Anderwald)
  • Fix memory leaks on failure (Johannes Anderwald)
  • Register shutdown notification. Close file objects / handles on shutdown (Johannes Anderwald)
  • Check in wdmaud if a pin with the specified filter ID and pin ID has been opened. Partly rewrite SysAudio as it is no longer required to store client specific information per connection since wdmaud just opens one connection. Verify all audio handles at incoming IRP (Johannes Anderwald)
  • Fix a bug in KsTopologyPropertyHandler. Create a KSTOPOLOGY struct when creating the subdevice descriptor and pass the struct to KsTopologyPropertyHandler. Implement enumerating mixer devices. Change handle array to contain the target device type. Mixer handles are not real handles, they are just pseudo handles. Forward KSPROPSETID_Topology request to portcls (sysaudio) (Johannes Anderwald)
  • Disable debugging flood (Johannes Anderwald)
  • Also Store audio filter object header in FsContext member Create the pin on the correct filter by using the filters object class Remove filter object class before performing actual create request Remove object header from audio filter when closing Retrieve internal object class name with internal IOCTL_KS_OBJECT_CLASS Avoid using interface name as ReactOS doesn't support it Store object class name when creating the object header for the audio sub device Implement IPortFilterTopology interface Activate pin property handle for port topology driver There is no need to create a handle to sysaudio for each application opening wdmaud, use only one connection per driver basis Pass object create class to pin creation method by duplicating KsCreatePin Audio devices should now be accessible again (Johannes Anderwald)
  • Add a few sanity asserts to KsCreate. Pass a create item and use an object class when creating an object header Return zero mixer count when wdmaud fails to enumerate virtual device count. Should fix high CPU usage after installing audio drivers (Johannes Anderwald)
  • Implement IOCTL_KEYBOARD_QUERY_ATTRIBUTES (not used yet, see FIXME comment) Add KeyboardAttributes to I8042_KEYBOARD_EXTENSION (Dmitry Chapyshev)
  • Implement IOCTL_MOUSE_QUERY_ATTRIBUTES (untested) (Dmitry Chapyshev)
  • Use a reference name when registering audio subdevices. Release subdevice interface when it is no longer needed. Fix a memory leak. Audio support is on hold until bug #4566 is resolved (Johannes Anderwald, bug #4566)
  • Report 5.2 as a version in UniATA rather than 4.1. (Aleksey Bragin)
  • i8042MouInternalDeviceControl: Partially implement internal IOCTLs IOCTL_INTERNAL_I8042_MOUSE_WRITE_BUFFER, IOCTL_INTERNAL_I8042_MOUSE_START_INFORMATION and IOCTL_MOUSE_QUERY_ATTRIBUTES. (Michael Martin)
  • Do not release resource list. (Johannes Anderwald, may fix bug #4551)
  • i8042MouInternalDeviceControl: Implement IoControlCode of IOCTL_INTERNAL_I8042_HOOK_MOUSE. ForwardIrpAndWait: Don't use IoForwardIrpSynchronously to Forward IRPs as it fails if no next stack location is available, which can prevent mouse from initializing. Changed it to match implementation of our other input drivers. Mouse pointer now works with VBoxMouse driver loaded. (Michael Martin)
  • Use DO_BUFFERED_IO for mouse device to match windows behavior. Revealed by mouse spying utility that expected that IO method. These mouse spying drivers should now work. (Michael Martin)
  • MouseClass: Remove exclusive access when creating device as it prevents mouse spy drivers from working. (Michael Martin)
  • KeyBoardClass: Removed exclusive access when creating device as it prevents key loggers from working. (Michael Martin)
  • Do not include private.h twice, fix include path (Sylvain Petreolle)


  • Register the unload handler so it gets called by NDIS (Cameron Gutman)
  • Implement and register a ProtocolUnbindAdapter handler (Cameron Gutman)
  • Add and register a ProtocolPnPEvent handler with some stubs in it (Cameron Gutman)


  • Fix WaitOnBusy, WaitOnBaseBusy and Wait[Short]ForDrq to wait and loop exactly the same as our existing atapi driver. This greatly enhances uniata's compatibility, especially on modern highspeed hardware where a controller usually does not have enough time to change its state and was considered invalid. (Aleksey Bragin)
  • Do not overwrite *max_bcount. (Dmitry Gorbachev)
  • Increase waiting time for DRQ removal inside AtapiInterrupt twice. Do not disable/enable IDE controller interrupts in AtapiSendCommand. This confuses Virtual Box's controller (it consumes one interrupt without ever emitting it) and thus sending any ATAPI command fails. Turn off ATAPI DMA raw read support by default. It seems to be incompatible with (at least) Virtual Box IDE controller. (Aleksey Bragin, bug #3645)


  • Don't reinitialize in case of error. Fixes a "DPC > 1 sec" problem related to an infinite loop in usbdriver. (Aleksey Bragin)
  • Remove a few bad (PLIST_ENTRY) casts (Johannes Anderwald)
  • Fix NULL pointer access in an error branch inside hub_clear_port_feature_completion(). Thanks to Christoph for testing. (Aleksey Bragin)
  • Handle failure correctly in OHCI. Spotted by Cameron Gutman. (Aleksey Bragin)
  • Handle failure case correctly in *_submit_urb: remove URB from an endpoint's linked list, instead of corrupting this URB's memory. Thanks to Gregor Schneider for spotting the suspicious place. (Aleksey Bragin, bug #4279)


  • Implement VideoPortPutDmaAdapter, VideoPortStartDma, VideoPortCompleteDma, VideoPortLockBuffer, VideoPortUnlockBuffer (Johannes Anderwald)
  • Revert 40694 as FIELD_OFFSET is perfectly working code and the new one might not work on some compilers. Add informal debug traces for bug 4354 (Johannes Anderwald)
  • Add missing exports to videoprt. (Timo Kreuzer)

Static Libraries


  • Restore the old loopback implementation Should fix the buildbot test hang (Cameron Gutman)
  • Set up the TCP interface data as needed in TCPFindInterface (Cameron Gutman)
  • Use FindOnLinkInterface to get the interface Return NULL if TCPContext is NULL (which means we don't have a valid IP address) Should fix a crash when using multiple NICs but they still won't work (DHCP bug?) (Cameron Gutman)


  • Don't display unformatted partitions twice. (Aleksey Bragin, bug #4399)

Win32™ Personality

User mode subsystem server (CSRSS)

Kernel-mode subsystem server (Win32K)

  • Fix Firefox 1.0/1.5 minimisation to taskbar (Mikhail Denisenko, bug #2451)
  • NtGdiEngCreateDeviceBitmap: Test size larger than 32 bits in width. (James Tabor)
  • Update stubs, NtGdiEngCreateDevice/Bitmap. (James Tabor)
  • Remove disputed information regarding NtGdiSetPixelFormat. More research is required. (James Tabor)
  • Fix for the problem of unsetting the HWND_TOPMOST property (e.g. taskmgr) (Matthias Kupfer)
  • Hax-implement NtGdiSetPixelFormat and add a support function UserGethWnd with some code cleanup. (James Tabor)
  • Implement NtGdiDescribePixelFormat, needs testing. (James Tabor)
  • Add note for WNDOBJ. (James Tabor)
  • Implement CDS_TEST flag for IntChangeDisplaySettings. Set ERROR_CALL_NOT_IMPLEMENTED where needed. (Sylvain Petreolle)
  • ProcessMouseInputData: Mouse pointer shown on window was slightly off. Fix calculation in conversion to screen position. (Michael Martin)
  • MouseThreadMain: Send IOCTL_MOUSE_QUERY_ATTRIBUTES to mouse driver. MSDN reads that this IOCTL is sent from the subsystem. Filter drivers can depend on this behavior. (VirtualBox guest addition drivers). ProcessMouseInputData: Handle flag MOUSE_MOVE_ABSOLUTE and change absolute mouse position to screen coordinates. Fixes VirtualBox mouse integration. (Michael Martin)
  • IntEmptyClipboardData: Check before freeing a potential null pointer (Stefan Ginsberg)
  • Add support for SPI_GETCARETWIDTH/SPI_SETCARETWIDTH (Dmitry Chapyshev)
  • Fix two potential crashes (Dmitry Chapyshev)
  • Don't return from NtUserGetMouseMovePointsEx without UserLeave(Kamil Hornicek)
  • Check the pointer for client thread information for null not thread information. (James Tabor)
  • We setup with ParentWindowHandle already set. (James Tabor)
  • UserPostMessage: When dealing with WM_QUIT, allow broadcasting like windows does and post it to the window's message queue instead of the current thread's message queue. (Giannis Adamopoulos, bug #4058)
  • Move update thread information hooks. (James Tabor)
  • Help Gimp 2.4.6 start-up. But there is another bug in msvcrt.dll that throws an exception. I must apologize for not doing this sooner. (James Tabor)
  • Order rectangle points to avoid CreateCompatibleBitmap failure because of negative size values (Gregor Schneider)
  • Implement ONE_PARAM_ROUTINE_POSTQUITMESSAGE case in NtUserCallOneParam and use it in PostQuitMessage instead of NtUserPostMessage. (Giannis Adamopoulos, bug #4058)
  • Implement ReplyMessage and kernel support for InSendMessage and GetMessageTime. (James Tabor)
  • Remove client thread information from w32 thread information. (James Tabor)
  • Migration changes from W32THREADINFO to use ThreadInfo for kernel space and user space pointer reference, and use ClientInfo from TEB for user space. Next change will have the full removal of W32THREADINFO. (James Tabor)
  • Cleanup Real/GetInputState. (James Tabor)
  • Fix NtUserVkKeyScanEx to support current thread keyboard layout or use the one provided by handle. ((James Tabor, bug #4269; bug #4272)
  • Move Process Information structure back into kernel space. We use client information via TEB to provide a pointer for user space as a reference pointer. (James Tabor)
  • MsqCreateMessageQueue: Allocate the message queue from nonpaged pool as it contains a mutex. (Stefan Ginsberg)


RPC Server

  • Partly implement SERVICE_CONFIG_FAILURE_ACTIONS in RQueryServiceConfig2W (Johannes Anderwald)


  • eventlog.h: Add LIST_ENTRY to EVENTSOURCE structure to track handles. ElfCreateEventLogHandle: Modify return type to PEVENTSOURCE and add BOOL parameter to determine whether handle is being created or opened as behavior differs between the two. Added ElfGetEventLogSourceEntryByHandle for looking up the handle. Implement EventLog api's ElfrOpenELW, ElfrRegisterEventSourceW, ElfrReadELW, ElfrReportEventW, ElfrOldestRecord, ElfrCloseEL and ElfrDeregisterEventSource. LogfWriteData: Remove unnecessary debugging. (Michael Martin)
  • eventlog.h: Add CurrentRecord to EventSource struct as each EventLog handle must keep track of current record. LogfInitializeNew/LogfInitializeExisting: Set LogFile MaxSize to just under 5k and add a FIXME to read value from registry. TODO. LogfReadEvent: Change return value to DWORD so that errors can be passed back and last error can be set from caller(advapi32). Change RecordNumber parameter to pointer so that it can be returned and saved in rpc's handle for the EventLog. RecordNumber of 0 can only be used with flag EVENTLOG_SEQUENTIAL READ. Set BytesRead and BytesNeeded to 0 as caller expects those values for any failure. LogfWriteData: Implement record overwriting when the LogFile has reached MaxSize. Implement LogfGetCurrentRecord. (Michael Martin)
  • Implement internal function LogfDeleteOffsetInformation. LogfWriteData: Fix record overwriting when the log file has reached MaxSize. Previous implementation was incorrect. LogfInitializeExisting: Add support for log files that have had old records overwritten with new records. (Michael Martin)
  • ElfrReportEventW: Silence debugging thats no longer needed as this API is now implemented. (Michael Martin)


  • DHCP HostName is not mandatory. Fixes nat networking in vbox. (Sylvain Petreolle, bug #4583)


  • Imported the MT snapshot of the GPL tftp-server for win32 from sourceforge. Minor changes such as formatting and renaming the files, totally untested except for building, will be used later to serve up ReactOS images to PXE boot (Steven Edwards)
  • Free the allocated buffer in printWindowsError in tftpd service. (Kamil Hornicek)

Control panel applets


  • Remove BOM, recode Romanian file from UTF-8 to CP-1250, remove #pragma strings from there, and #include it to the master resource file. (Dmitry Gorbachev)


  • Don't cast pStartInfo->dwCrashDumpEnabled to LPBYTE and use it as pointer in RegSetValueExW, Instead pass &pStartInfo->dwCrashDumpEnabled. (Timo Kreuzer)

Win32™ Applications



  • Split the PIDL into current and parent folder, and call GetFolderAttributes only for current folder PIDL. This fixes tons of "ERR: HCR_GetFolderAttributes should be called for simple PIDL's only!" debug log spam messages. (Mikhail Denisenko, bug #4494)
  • Destroy proper windows, fixes one more memory leak. (Mikhail Denisenko, bug #2012)
  • RegisterDragDrop should be coupled with a RevokeDragDrop, so add that. Remove _pDropTarget from class members, it's a var local to DesktopShellView::InitDragDrop() method. (Mikhail Denisenko, bug #2012)
  • Free subentries in Entry destructor. Fixes QuickLaunch entries leak. (Mikhail Denisenko, bug #2012)
  • SetClassLong -> SetClassLongPtr, GetClassLong -> GetClassLongPtr (for 64-bit compatibility, see note in MSDN) (Dmitry Chapyshev)


  • unify look of basic apps use icon for info box and remove text (Matthias Kupfer)



  • Rewrite, the last method of getting service dependants and dependent services was flawed/buggy. (Ged Murphy)
  • Add most of the code for the dependencies tab in the property sheet. It's not quite complete but I'm getting bored with it now. May finish it tomorrow. (Ged Murphy)
  • Add a temporary manifest to servman which contains support for comctl32 v6 and more importantly, support for UAC elevation in NT6+ This will be required for any app which needs to run with elevated privs. As we've previously stated, rbuild needs to generate the manifest hence this is only temporary. We therefore need a UAC tag adding to rbuild so the generated manifest can contain support for UAC elevation for any apps which require it. If anyone wishes to add this support to rbuild, feel free to do so. (Ged Murphy)
  • Add the list of dependencies to the listbox so we know what else will be stopping Restructure the stop code (Ged Murphy)
  • Rewrite start and stop routines to make them much more robust Add the ability to check for and stop dependent services Untested at the moment, but unfinished anyway. (Ged Murphy)


  • There is no such thing as ntsys.lib in Windows, dynamically link to ntdll to fix building with msvc. (Ged Murphy)
  • Keep the horizontal grid axis consistent (Ged Murphy)
  • Add more styles, update english resource (Gabriel Ilardi)
  • Make the horizontal and vertical axis in the history graphs solid lines instead of the dotted 80's style we had. (Ged Murphy)
  • Fix for the TAB_STOP problem patch by. (Andre Wisplinghoff; Gabriel Ilardi, bug #3954)
  • set menu checkmark always on top by default(Matthias Kupfer)
  • fix clipping problem for process list (Matthias Kupfer)
  • unify look of basic apps use ShellAbout instead of own AboutBox (Matthias Kupfer)

Win32™ Libraries


  • Better stub for LsaEnumerateAccountRights (Christoph von Wittich)
  • Add a lazy-initializing hack until user32 is able to delay-load the advapi32 as it should. It fixes a problem of trying to enter a non-initialized critical section object and possibly hanging on every boot. (Aleksey Bragin)
  • eventlog.c: When manually creating RPC_UNICODE_STRING/RPC_STRING the Length member does not include the terminating null, but MaximumLength is Length + terminating NULL. Fixes returning handle for Security and System event logs. (Michael Martin)
  • Sync GetNamedSecurityInfoA with Wine. RtlCreateUnicodeStringFromAsciiz is unwanted since the call to GetNamedSecurityInfoW checks for NULL and in this case sets ERROR_INVALID_PARAMETER. (Sylvain Petreolle)
  • ElfrOpenBELW/ElfrOpenELW/ElfrRegisterEventSourceW: MajorVersion and MinorVersion must be 1 as documented on MSDN. ReportEventW: Use RtlInitUnicodeString for ComputerName. (Michael Martin)
  • some small reg fixes (Christoph von Wittich)
  • revert a part of r41093 - A functions should call the W functions instead of the Nt functions (Christoph von Wittich)
  • Sync RegQueryValueExA, RegQueryValueA, RegQueryValueW and RegSetValueExA to wine patch by Giannis Adamopoulos <johnyadams at hotmail dot com> See issue #4528 for more details. (Christoph von Wittich)
  • Fix 2 advapi32:reg winetests registry.c:1229: Test failed: Expected ERROR_INVALID_HANDLE or ERROR_BADKEY, got 161 registry.c:956: Test failed: expected ERROR_INVALID_PARAMETER, got 998 by Victor Martinez(vicmarcal AT hotmail DOT com) bug 4527 (Sylvain Petreolle)
  • ReportEventW: Set UNICODE_STRING ComputerName to empty string vice NULL to make rpcrt4 happy. (Michael Martin)
  • ReadEventLogA/ReadEventLogW: Check for lpBuffer for NULL and if so set nNumberOfBytesToRead to zero so that rpcrt4 does not access a NULL buffer. Set pnBytesRead and pnMinNumberOfBytesNeeded variables prior to checking for failure and returning FALSE. (Michael Martin)
  • Sync advapi32/cred.c to wine 1.1.19 (Christoph von Wittich)







  • Hack around the system start up Dll Initialization Bug for GdiHandleTable. (James Tabor)
  • Move more printer functions. (James Tabor)
  • Move and add to print driver file for printing functions. (James Tabor)
  • AbortDoc, Clear the correct flags. (James Tabor)
  • Fix typo: AbortProc returns TRUE to continue the print job or FALSE to cancel the print job. (James Tabor)
  • Fix crash in gdi32 bitmap winetest (Dmitry Chapyshev)
  • Add some checks of parametres (Dmitry Chapyshev)
  • Update DrawEscape, thanks Tommy. (James Tabor)
  • Update CancelDC and DrawEscape. (James Tabor)
  • Partially implement CancelDC, DrawEscape Add check of params for EnumObjects, SetMetaFileBitsEx (Dmitry Chapyshev)



  • Stub-implement NhGetInterfaceNameFromDeviceGuid and SetIpForwardEntryToStack. Fixes taskmgr (from windows) crash on network page (Dmitry Chapyshev)
  • Cleanup GetAdaptersAddresses. Add GetIfTable2 and GetIfEntry2 stubs based on janderwald patch (Sylvain Petreolle)
  • Add a parameter check to GetAdaptersAddresses stub (fixes a winetest) (Christoph von Wittich)
  • Export GetAdaptersAddresses stub (Sylvain Petreolle)
  • Samuel Serapion Fix iphlpapi.dll exports to match Windows XP/2003 one. (Aleksey Bragin)



  • TerminateProcess requires a valid handle Should fix 2 kernel32' winetests (Johannes Anderwald)
  • Fix one "kernel32_winetest mailslot" test (Dmitry Chapyshev)
  • Fix one "kernel32_winetest thread" (Dmitry Chapyshev)
  • Fix 2 kernel32:environ tests. The GetComputerNameEx ComputerNameDnsDomain tests can't succeed if we have no domain, as the function succeeds querying a zero length domain into a zero length buffer. (Sylvain Petreolle)
  • Fix 5 winetests for CreateProcessA/W (Dmitry Chapyshev)
  • Set priority only if PriorityClass != PROCESS_PRIORITY_CLASS_INVALID (Dmitry Chapyshev)
  • Fix calculation of buffer size in SearchPathA() (fixes Skype crash) (Mikhail Denisenko, bug #4526)
  • Disable Wow64* functions for x86 build (Dmitry Chapyshev)
  • a little bit of wine syncing - no real code changes - just to make syncing a bit easier next time (Christoph von Wittich)
  • GlobalReAlloc: SetUserValueHeap and SetUserFlagsHeap after RtlReAllocateHeap. LocalReAlloc: Add missing SetUserFlagsHeap after RtlAllocateHeap. SetUserValueHeap and SetUserFlagsHeap after RtlReAllocateHeap. (Michael Martin)
  • GlobalReAlloc: Pass Flags vice HandleEntry->Flags to RtlSetUserFlagsHeap. (Michael Martin)
  • CreateFileMapping: SetLastError to ERROR_ALREADY_EXISTS for sections that already exists. (Michael Martin)
  • Set error code if directory does not exist NtCreateFile -> NtOpenFile (Dmitry Chapyshev)
  • Sync profile functions with Wine 1.1.20 (Dmitry Chapyshev)
  • Remove RemoveVectoredExceptionHandler() stub from stubs.c, since it is a forward to ntll.RtlRemoveVectoredExceptionHandler. (Aleksey Bragin)
  • fix TzSpecificLocalTimeToSystemTime signature according to Wine & MSDN (Sylvain Petreolle)
  • Fix a problem with loading dlls in Iron See issue #4201 for more details. (Dmitry Chapyshev)
  • Re-simplify CreateProcessW (like r40484) (Dmitry Chapyshev)


  • WSPSelect(): Fix checking of params, fix allocation size. Tested on Firefox, Downloader, Skype (Mikhail Denisenko; Dmitry Chapyshev, bug #4526)
  • Fix a bad typo (Cameron Gutman)
  • Return a better status for STATUS_CANCELLED, STATUS_FILE_CLOSED, and STATUS_REMOTE_NOT_LISTENING (Cameron Gutman)
  • Handle STATUS_NETWORK_UNREACHABLE (Cameron Gutman)






  • Display the correct driver name, when opengl32 fails to load the driver. (Kamil Hornicek)
  • Don't discard valid pixel formats and use flags only for ranking. (Robert Millan, bug #4384)





  • SetupDiOpenClassRegKeyExW should ERROR_INVALID_CLASS when it fails TODO: NtOpenKey should fail when acessMask == 0 and a registry path is passed (Johannes Anderwald)
  • Fix 2 setupapi:devclass tests (Sylvain Petreolle)
  • LayoutFile directive for additional system-supplied INF files is optional, don't fail if it is not found. Fixes 2 tests in setupapi:devclass (Sylvain Petreolle)
  • We know that the function works, so no need to print a FIXME (Hervé Poussineau)
  • Stub CMP_UnregisterNotification Move SETUP_CreateDevicesList declaration to setupapi_private.h (Sylvain Petreolle)
  • Fix 7 setupapi misc winetests (Christoph von Wittich)
  • Sync SetupGetTargetPathW with wine fixes all setupapi query winetests (Christoph von Wittich)
  • Fix 4 setupapi parser winetests (Christoph von Wittich)
  • Import SetupEnumInfSectionsA/W from wine fixes setupapi parser winetest crash (Christoph von Wittich)
  • Do not directly call NtPlugPlayControl from setupapi, and replace it by RPC As a bonus, setupapi is now (theorically) able to restart devices on remote machines. (Hervé Poussineau, bug #4400)


  • partial sync of shell32 shfldr_netplaces (Christoph von Wittich)
  • sync shell32 shelllink to wine 1.1.23 (Christoph von Wittich)
  • partial sync of shlfileop to wine 1.1.23 (Christoph von Wittich)
  • Show CDROM as CDROM in "Properties for Local Disk" dialog. (Marcus Boillat, bug #4552)
  • Update some shell32 icons (Dmitry Chapyshev)
  • No need to create a DC to get the display depth Incidentally, this partly unregresses the /CONSOLE switch if blue.sys is installed (Hervé Poussineau)
  • Implement loading IShellIconOverlayIdentifier Implement retrieving overlay icon (Johannes Anderwald)
  • Convert some stuff to unicode (Dmitry Chapyshev)
  • Fix bug introduced in r40826 by me. (Dmitry Gorbachev, bug #4483)
  • Load property sheet handlers also from * key Fixes displaying custom file property handlers like for TortoiseSVN (Johannes Anderwald)
  • Pass IDataObject to the folder shell extension init function Fixes displaying property sheet handler extension for directories such as TortoiseSVN (Johannes Anderwald)
  • PropertySheetHandlers for directories are registered under Directory key (Johannes Anderwald)
  • Only call ReleaseStgMedium when IDataObject_GetData has succeeded Fixes explorer crashing on context menu click (Johannes Anderwald)
  • Sync SHELL_FindExecutable and SHELL_FindExecutableByOperation with wine 1.1.19 (Christoph von Wittich)
  • WineSync: Fix copyright message (Johannes Anderwald)
  • Fix incorrect character count passed into RegEnumKeyExW in CreateDesktopEnumList. (Johannes Anderwald)
  • Fix window styles for IDD_SHELL_ABOUT_AUTHORS Fixes displaying shell about dialog (Johannes Anderwald)
  • Add IShellIconOverlayIdentifier interface (Johannes Anderwald)
  • Add IShellItem implementation from Wine Implement SHCreateShellItem setupapi: Stubimplement SetupUninstallOEMInfA/W Stubimplement Get_Device_Interface_List_Size_ExA/W (Dmitry Chapyshev)
  • Import SHGetNewLinkInfoA/W from wine (Christoph von Wittich)




  • ChangeDisplaySettingsExA: don't leak the memory for the converted DEVMODEW (Timo Kreuzer)
  • Verify user32 export list with Win 2k3 R2 (Dmitry Chapyshev)
  • partial wine sync (Christoph von Wittich)
  • Don't close a dialog with <Return> when the OK button is disabled (Christoph von Wittich)
  • Export DisplayExitWindowsWarnings and DisableProcessWindowsGhosting (Christoph von Wittich)
  • dmDriverExtra is zeroed before the call to ChangeDisplaySettingsEx. (James Tabor)
  • ChangeDisplaySettingsA and ChangeDisplaySettingsW should reset dmDriverExtra to 0. (Sylvain Petreolle)
  • Sync LISTBOX_DeleteItem and LISTBOX_RemoveItem with wine 1.1.22 (Christoph von Wittich)
  • Better question icon in tango look (as long as tango icon set doesn't provide this icon) source in reactos/media/graphics (Matthias Kupfer)
  • Change some icons to Tango Update oic_sample.ico (Dmitry Chapyshev)
  • continue "marletting" use marlett font for scrollbar control (Matthias Kupfer)
  • Improved fix for edit control context menu. Send appropriate message based on return value of TrackPopupMenu and remove handling of WM_MENUSELECT as its no longer needed. Patch sent to wine-patches AT winehq.org. (Michael Martin)
  • edit.c: Add TPM_RETURNCMD flag to TrackPopupMenu so that WM_COMMAND messages are not sent to the edit control. Use WM_MENUSELECT vice WM_COMMAND to determine which clipboard message to send. Fixes vb apps edit context menu and maybe others. (Michael Martin, bug #4404)
  • Revert 40628 as it breaks others applications menus. (Michael Martin)
  • menu.c: Only send WM_COMMAND messages to the top parent window. edit.c: Use WM_MENUSELECT vice WM_COMMAND to determine which clipboard message to send. Fixes vb apps edit context menu and maybe others. (Michael Martin, bug #4404)
  • Don't crash copying from a null pointer in a non client size calculation Several thousand more user32 win winetests should be executed now (Gregor Schneider)
  • Sync user32 listbox and combobox to wine 1.1.22 (Christoph von Wittich)
  • Sync user32 edit and exticon to wine 1.1.22 (Christoph von Wittich)
  • Sync user32 button and static to wine 1.1.22 (Christoph von Wittich)
  • Fix for wine tests. Added wine QS flag. (James Tabor)
  • GetMouseMovePointsEx is a direct call to kernel space. Move and sorted initial code. (James Tabor)



Regression tests

  • Fix msvcrt string winetests (Christoph von Wittich)
  • Add a "regtest.cmd" for running other commands (here "ipconfig") before starting rosautotest and call "start rosautotest" to run it asynchronously and let Explorer load completely Set svn:eol-style for "unattend.inf" to CRLF, this file is a target one, which should also use target line-endings Fix typo in syssetup debug print (Colin Finck)


  • Enable USB driver by default (only keyboard and mouse are supported atm) (Aleksey Bragin, bug #1041)
  • Do not assign ControllerProperties->SupportedTransferMode[1][0] twice (drivers\storage\ide\pciide\pciide.c) (Dmitry Gorbachev)
  • Define UNREFERENCED_PARAMETER for cmlib when built as host and reapply 41455. (Stefan Ginsberg)
  • Fix incorrect code page output in shutdown.exe (Russian locale) (John White, bug #4620)
  • Miscellaneous Visual C++ compilation fixes. Fixed declarations of _InterlockedDecrement16 and _InterlockedIncrement16 Fixed declarations of __readcr0, __readcr2, __readcr3 and __readcr4 for x86 Implement __readdr and __writedr for x86 too Added missing semicolon modified, Use Visual C++-compatible attribute placement modified, Get rid of useless assembly, replace with __writefsdword (it's still useless), Disable Visual C++ warning C4733 ("Inline asm assigning to 'FS:0' : handler not registered as safe handler") for mingw_wmain, Silence a warning, Disable Visual C++ warning C4711 ("function 'function' selected for inline expansion") globally, Fix Visual C++ compiler rules to emit an uniquely named PDB for each object file (KJK::Hyperion)
  • Define DBG on non-debug build too and deprecate all usage of #ifdef DBG. (Stefan Ginsberg)
  • Add Symbol font from Wine (Dmitry Chapyshev)
  • Remove KeBugCheckWithTf() hack, fix VBEResetHw(). (Stefan Ginsberg, bug #4581)
  • Build tool to invoke Microsoft tools, overriding the %PATH% variable and optionally filtering out the name of the file being compiled Will be used by the Visual C++ support for rbuild (KJK::Hyperion)
  • Set default kb layout for Russian language to English (Dmitry Chapyshev)
  • Add missing c_424.nls. (Aleksey Bragin)
  • new rosdbg icon (Matthias Kupfer)
  • Implementation of gdi printing support. WIP. Added StartDocW plus others and fixed some defines. Found the initialization bug again, yes it was never fixed, but worked around. The debug spam has a purpose, just read it. Lots of updates, including missing functions in the winspool spec file. Implement SetAbortProc and halfplement AbortDoc. (James Tabor)
  • Implement GdiConvertAndCheckDC and Abort callback support routine. (James Tabor)
  • Make memcpy a duplicate of a memmove (confirmed by testing), there is a dependency on this behaviour. One less "msvcrt_winetest.exe string" failure. (Aleksey Bragin)
  • Autoregister ddraw and dplayx. (Kamil Hornicek)
  • Make __CRT_INLINE always inline, use ceil instead of ceill. Fixed linking when compiling with -O0, it should now work. (Dmitry Gorbachev)
  • Add some registry values required by user32 sysparams - (Samuel Serapión)
  • Play default logon sound when logging on Due to unknown issues, this only works at the 2nd login ATM (Johannes Anderwald)
  • SetWindowLong -> SetWindowLongPtr, GetWindowLong -> GetWindowLongPtr (for 64-bit compatible, see note in MSDN) (Dmitry Chapyshev)
  • Sync Tahoma with Wine 1.1.21 (Dmitry Chapyshev)
  • Add xinput1_1, xinput1_2, xinput1_3, xinput9_1_0 from Wine (needed for some games) (Dmitry Chapyshev)
  • Implement _wfreopen, _y0, _y1, _yn Partially implement _j0, _j1, _jn All from Wine. (Dmitry Chapyshev)
  • Add reg key tree NetworkProvider under CurrentControlSet\Control\. For now differ from windows by using an empty string for ProviderOrder value. (Michael Martin, bug #3987)
  • Don't fail with Chinese language. (Dmitry Gorbachev, bug #4393)
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