ChangeLog-0.2.7
This is the changelog for ReactOS™ version 0.2.7 (released August 22, 2005), 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.2.6 (released April 10, 2005).
Contents
General
With the release of 0.2.7, ReactOS has again gained further compatibility with Microsoft™ Windows™. The headers for ReactOS have been aligned with those of the Windows Software Development Kit (SDK), which gives us a greater range of driver compatibility. ReactOS has also been updated to be compliant with the latest GNU™ C Compiler (GCC)—i.e., GCC version 4—which, with our new build system provides a faster and more efficient build process. We have elected a new user interface (UI) coordinator, and work has begun to modify the interfaces seen by the user.
Apart from the UI work, many of these improvements are of an "under-the-hood" nature and, while quite important to the rapid progress of the project, are not necessarily obvious to the end user. However, these refinements to the ReactOS infrastructure facilitate the ongoing advancements in USB, Plug and Play, and networking functionality that will be prominent features of the next upcoming release.
Main 0.2.7 Changes
- Header clean-up for compatibility with Windows SDK headers; implemented and used NDK; ReactOS is now built with our own headers (Alex Ionescu, Filip Navara, and Steven Edwards)
- New
My Computer
, command prompt, and ReactOS logo icons (Mindflyer) - New build system called
rbuild
which is based on the eXtensible Markup Language (XML), and which allows for automatically generated makefiles (Casper Hornstup) - Improved appearance of the first-stage installer (Alex Ionescu)
- GCC 4.x.x build fixes (Thomas Weidenmueller and Alex Ionescu)
Known Bugs
- ReactOS fails to boot on some hardware and reports an
AllocConsole
error when no PS/2-style mouse is attached (see Bug 688) - This ReactOS release requires 64 MB of RAM to complete the first-stage installer (see Bug 703)
Translations
- Swedish translations by [1] Andreas Bjerkeholt, Kris Engeman and David Nordenberg
- Czech translations by Potapnik
- French translation by Sylvain Petreolle
- Polish translation by [2] Sebastian Gasiorek
- Belgian (point/Flemish) keyboard layout by i386DX
ReactOS Core
Kernel and Executive (NTOSKRNL
)
- Implemented:
IoRegisterDeviceInterface
IoSetDeviceInterfaceState
IoRegisterPlugPlayNotification
IoUnregisterPlugPlayNotification
PoRequestPowerIrp
IRP_MN_QUERY_RESOURCE_REQUIREMENTS
for devices enumerated by Root bus
- Implemented:
PLUGPLAY_GET_RELATED_DEVICE
andPLUGPLAY_DEVICE_STATUS
PlugPlayControlProperty
andPlugPlayControlGetDeviceDepth
CM_Get_Global_State/CM_Get_Global_State_Ex
- Kernel (
Ke
)- Implemented Guarded Mutex:
KeAcquireGuardedMutex
,KeEnterGuardedRegion
,KeLeaveGuardedRegion
,KeInitializeGuardedMutex
,KeAcquireGuardedMutexUnsafe
,KeReleaseGuardedMutexUnsafe
,KeAcquireGuardedMutex
,KeReleaseGuardedMutex
,KeTryToAcquireGuardedMutex
- Fixed critical APC queuing and delivery bugs
- Optimized Entering/Leaving critical sections and enabled APC delivery after each leave, if required
- Fixed
KeWaitForMultipleObjects
ifWaitAll
was used - Rewrote context switching to be faster
- Fixed
KINTERRUPT
structure andKeDisconnectInterrupt
- Fixed a bug in which kernel queues were inserted into the ready thread list
- Implemented Guarded Mutex:
- Input/Output (Io)
- Implemented
IoIsfileOriginRemote
,IoGetLowerDeviceObject
,IoGetDiskDeviceObject
,IoGetRequestorSessionId
,IoGetRequestorProcessId
,IoRegisterBootDriverRetinialization
,IoAttachDevicetoDeviceStackSafe
,IoEnumerateDeviceObjectList
,IoGetDeviceAttachmentBaseRef
,IoDetachDevice
,IoRaiseHardError
- Fixed controller objects implementation
- Fixed attaching to devices (
IoAttachDevice
) so that the appropriate driver will be notified withIO_ATTACH_DEVICE_API
- Fixed
IoAttachDevicetoDeviceStack
andIoAttachDevice
to call theSafe
function - Optimized
IoGetRelatedDeviceObject
- Removed
IoOpenDeviceInstanceKey
andIoQueryDeviceEnumInfo
- Cleaned up
IopAllocateVpb
- Optimized
IoCreateDevice
, added support for more flags and removed hard-coded sector size and incorrect sizes which were previously set - Fixed IRP Code not to zero out the IRP, to free MDLs in failure cases, to set the correct IRP flags and to set the I/O object type
- Reimplemented second-stage completion for IRPs to free ALL MDLs, to free memory depending on the flags used, not to call I/O Completion if an APC is registered, not to set event/call APCs in some failure cases, and not to use certain fields after the pointer can become invalid
- Uses the correct stack count in I/O operations
- Fixed
IopDeleteFile
to fix a memory leak and to dereference the completion port - Fixed
IopCloseFile
,NtQueryInformationFile
,NtFlushBuffersFile
,NtQueryDirectoryFile
,NtReadFile
,NtWriteFile
,NtSetInformationFile
,IopSecurityFile
,IopQueryFileName
,NtDeviceIoControlFile
,NtLockFile
, andNtUnlockFile
, which contained several bugs related to IRPs and completion, were making assumptions or not supporting all the appropriate possibilities, were signaling the wrong event or making the wrong kind of call, or were using the wrong device object - Implemented lookaside lists for IRP packets to increase the allocation/deallocation speed by over 400%
- Optimized completion packets by piggybacking them on IRP packets if possible, and added the correct memory flags to free them properly
- Share
NtDeviceIoControlFile
andNtFsIoControlFile
- Fixed IRP cancellation
- Rewrote I/O interrupt functions to match the new structure, and optimized some code paths
- Implemented
- Process Manager (Ps)
- Created memory manager (Mm) functions when touching process/memory
- Created kernel (Ke) functions when touching kernel structures and semantics
- Cached and optimized system DLL (ntdll) loading/mapping, so that it is done only at startup
- Implemented
NtOpenProcess
,PsRemoveLoadImageNotifyRoutine
,PsGetCurrentProcessSessionId
,PsSetLegoNotifyRoutine
,PsRemoveCreateThreadNotifyroutine
,PsGetVersion
- Rewrote process/thread creation and exit functions
- Memory Manager (Mm)
- PEB and TEB are now properly allocated in memory, allowing 4KB granularity instead of 64KB, and removed all the hacks which allowed this earlier
- Implemented
MmCreateKernelStack
andMmDeleteKernelStack
- Took out many system structures from non-paged pool to paged pool, to reduce physical memory consumption
- Removed pool debugging functions in retail builds to increase execution speed
- Prohibit
NtQueryVirtualMemory
for kernel-mode addresses - Fixed bug in memory mapping which caused large applications to trigger the “blue screen of death” (BSOD)
- Made the PE loader more lenient so that it can load a broader range of valid executables
- Executive (Ex)
- Fixed the lookaside functions, their macros and the way the functions were being exported
- Moved Win32k object registration into Win32k—the pointers and initialization are now done when Win32k loads
- Debugging Services (Dbgk/Kd)
- Implemented some Dbgk code for user-mode debugging
- Implemented modular debugging services for Bochs, GNU Debugger (GDB), etc.
- Object Manager (Ob)
- Implemented fast referencing stubs
- Rewrote
ObQueryNameString
- Rewrote
ObjectType
creation to match the structures, flags and semantics present in Windows NT's Object Manager, from the caller's point of view - Implemented Object Create Information structure and semantics when capturing data from user-mode, securing and removing a lot of potential kernel exploits
- Fixed
ObCreateObject
andObInsertObject
to work as in Microsoft Windows—ObCreateObject
only allocates the object, whileObInsertObject
does everything else
- File System Runtime (FsRtl)
FsRtlMdlRead
,FsRtlMdlReadComplete
,FsMdlReadCompleteDev
,FsRtlMdlWRiteComplete
,FsRtlMdlWriteCompleteDev
,FsRtlPrepareMdlWrite
,CcMdlReadCompleted
,CcMdlWriteComplete
,CcMdlReadCompleteDev
,FsRtlAllocateResource
,FsRtlIsPagingFile
,FsRtlBalanceReads
- Security Subsystem (Se)
- Implemented
SeCreateAccessState
,SeDeleteAccessState
, andSeSetAccessStateGenericMapping
based on a patch by Javier M. Mellid
- Implemented
- Implemented
RtlHashUnicodeString
- Moved ntdll's atom table implementation to Rtl, and rewrote it to use proper structures and to share the generic implementation between ntoskrnl and ntdll
- Updated the Rtl handle table implementation to use proper structures; however, reserved handles are not yet supported correctly
Kernel Mode Drivers
Input Device
i8042prt
driver by [tinus]
ACPI
- Implemented
IRP_MN_QUERY_RESOURCE_REQUIREMENTS
(Hervé Poussineau)
PCI
- Report correct list in
IRP_MN_QUERY_RESOURCE_REQUIREMENTS
(Hervé Poussineau)
SERIAL
serial.sys
driver completed except control and flow (XON/XOFF)serenum.sys
driver completed—now enumerates mice plugged into serial ports
USB
- UHCI HCD driver supports recognizing Memory type of resource (Aleksey Bragin, Hervé Poussineau)
- UHCI controller driver, which uses the Cromwell USB stack
- Basic USB hub driver, which sometimes reports connected devices
VFAT
- Implemented
FSCTL_IS_VOLUME_DIRTY
andFSCTL_MARK_VOLUME_DIRTY
(Hervé Poussineau)
VGA
- Implemented
IOCTL_VIDEO_QUERY_AVAIL_MODES
,IOCTL_VIDEO_QUERY_CURRENT_MODE
,IOCTL_VIDEO_QUERY_NUM_AVAIL_MODES
(Hervé Poussineau) - VMware 5 video driver works (Gé van Geldorp and Filip Navara)
- QEMU video driver works (Gé van Geldorp, Alex Ionescu), and Filip_Navara)
Networking
- Implemented
WSAStringToAddressA
andWSAStringToAddressW
inws2_32
(Magnus Olsen) - Added DHCP service and make it start (Art Yerkes,
- Implement
get* integer
reading - Properly implemented
ipv4addrs
(validates a set of IPv4 addresses) - Limit the number of returned DNS servers to 1 until
iphlpapi
is fixed
Session Manager (SMSS)
- Removed loading of the kernel-mode part of the Win32 subsystem (
win32k.sys
) - Removed running of
winlogon.exe
Win32™ Personality
User mode subsystem server (CSRSS)
- Added loading of the kernel-mode part of the Win32 subsystem (
win32k.sys
); - Run
winlogon.exe
- Implemented
EnumSystemLocalesW
(Aleksey Bragin)
Kernel-mode subsystem server (Win32K)
- Implemented
NtGdiDdCanCreateSurface
andNtGdiDdBlt
for DirectX™ (untested) - Expanded
StretchBitBlt
to all bit-per-pixel (BPP) settings (not yet fully implemented; use the code as a reference) - partially implemented fullscreen in changedisplay setting—I can play winquake™ in fullscreen now :)
- Implemented
NtGdiGetSystemPaletteUse
andNtGdiSetSystemPaletteUse
(this code has been taken from Wine) - Fixed winquake color glitch bug—the text is now white instead of black (Magnus Olsen)
- Implemented
NtGdiAnimatePalette
(partly ripped from Wine; does not animate 100% of the palette) (Hervé Poussineau) - Speed-optimized the bitblt (Magnus Olsen, Gregor Anich), Alex Ionescu), Gé van Geldorp) (see svn log)
- Repaired GDI to handle debugging functionality (Filip Navara)
- Implemented
NtGdiUnrealizedObject
(James Tabor) - Implemented
WH_KEYBOARD_LL
hook (Gé van Geldorp)
Win32™ Libraries
ADVAPI32
- Implemented
LockServiceDatabase
,UnlockServiceDatabase
,ControlService
,QueryServiceStatus
- Implemented
OpenSCManagerA
,OpenServiceA
,OpenServiceW
andQueryServiceStatus
- Ported
BuildTrusteeWithObjectsAndName
andBuildTrusteeWithObjectsAndSid
from Wine - Implemented
RegOpenCurrentUser
- Implemented
OpenAndMapFileForRead
,RetrieveFileSecurity
,StampFileSecurity
,TakeOwnershipOfFile
andUnmapAndCloseFile
- Implemented
RegOpenUserClassesRoot
- Implemented
IsTokenRestricted()
, inspired by a patch to Wine by James Hawkins - Implemented
TokenRestrictedSids
KERNEL32
- Implemented
GetCommProperties
,ClearCommError
,CommConfigDialogA
,CommConfigDialogW
(Saveliy Tretiakov) - Implemented
GetCommConfig
,SetCommConfig
,FindFirstFileExW
(Dmitry Philippov)
SETUPAPI
- Work by Hervé Poussineau on devices enumeration by implementing:
CM_Enumerate_Classes(_Ex)
SetupDiCreateDeviceInfoA
SetupDiCreateDeviceInfoListExW
SetupDiEnumDeviceInfo
SetupDiGetActualSectionToInstallA
SetupDiGetClassDescriptionExA
SetupDiGetClassDevs(Ex)A/W
SetupDiGetDeviceInterfaceDetailA/W
SetupDiGetDeviceRegistryPropertyA/W
(Eric Kohl) implemented:
ConcatenatePaths
MyGetFileTitle
GetVersionInfoFromImage
StringTableDuplicate
DirectX
- Reverted last previous sync with Wine and userhook—before we can sync with Wine, we need to rewrite the enumeration and registration of devices so that they work correctly in both ReactOS and Windows
- Added SVN rev. 15043 and userhooks only for the mouse—the mouse now works in tribles in windowed mode, but in full screen it is a bit choppy; however, this has not been tested in tribles on ReactOS with the new code
Userenv
- David Nordenberg: Swedish translation, proofread by Andreas Bjerkeholt
- Synced to Wine-20050419
- Synced to Wine-20040419
- Synced to Wine-20050524
- Synced to Wine-20050628
USER32
- Implemented
DragDetect
based on Wine code ©right; 1993, 1994 Alexandre Julliard (Filip Navara)
(James Tabor) implemented:
TrackMouseEvent
NtUserGetAsyncKeyState
and support for TrackMouseEvent
DrawMenuBar
CheckMenuRadioItem
(not fully tested)
GetMenuString
A
and W
(not fully tested)
ModifyMenu
A
and W
MDICascade
, MDITile
and WIN_ListChildren
Win32™ Applications
IPConfig
- Relicensed to GNU Public License (GPL)
- Changed C++ style commenting to C style
- IPConfig now has the following functionality:
- Displays
NodeType
with meaningful, human-readable names
- Exclusively uses
TCHAR
strings
- Displays physical address, DHCP enabled state, IP addresses and netmasks, default gateway, DHCP server and DHCP lease times
- Parses command line options
- Defaults to showing only the IP/SM/DG if no options are specified
- Handles options
/All
and /?
- Displays message about all unimplemented options
CMD
- Removed all hard-coded strings to their own
.rc
file
- Caches codepage instead of always calling on win32 api for it
- Added
*.*
syntax to dir
command
- Bugfix: Color now it work as it should
- Bugfix:
CD "Program Files" now works
- Implemented
CD s*
- Translates
%errorlevel%
to a value when passed at command line—now errorlevel
is implemented as it should be
- left to do: check that all
CMD
commands are set to the correct value
- Fixed a small bug in
choice.c
so that it prints out choice sadsad
correctly
- Added
%time%
and %cd%
internal values (example: echo %cd%
or echo %time%
)
- Added
%DATE%
(example: echo %date%
works now)
- Bugfix:
date
now prints out the names of the days of the week
- Added
%RANDOM%
(for an example of how to use it: echo %random%
)
- Added
%cmdcmdline%
(for an example of how to use it: echo %CMDCMDLINE%
)
- Added
%CMDEXTVERSION%
(for an example of how to use it: echo %CMDEXTVERSION%
—the value is hardcoded to 2, because that is the value Microsoft Windows 2000 and Windows XP report) (thanks to arty for testing this in Windows XP)
- Added quick dirty hack getting our implementation working with
1>null
by me (thanks to Hartex and Brandon for hunting down the bug)
- Added
Help
command
- Added German language resource to the ReactOS Command Processor
(not completely finished, I will update it as soon as possible)
([3] Martin Rottensteiner)
- Sets
errorlevel
to 9009
if command not found
- Implemented
exit /b #
in batch files
- Added exclusive deletion (for example:
del * -abc.txt -text*.txt
)
- Fixed bug to allow Microsoft-style wildcards
- Code clean up: added
/y
and /-y
in move.c
- simple check to fix
>
and |
bugs with rem
- Implemented
/A
in delete
(for example: del /A:H /A:-R *.exe -ping.exe
)
- Bugfix:
color.c
now works similar to Microsoft CMD color
- Bugfix:
mv foo.txt c:\temp
now gives you c:\tempfoo.txt
TASKMGR
- Removed some hard-coded strings tested by Hartex (Filip Navara)
EXPLORER
- Stepwise taskbar resizing (charn)
- Swedish translation (David Nordenberg (dnordenberg /at/ users.sourceforge.net))
- Added option to build Explorer as ReactOS shell without integrated Explorer part (Martin Fuchs)
- Display of custom folders in start menu root (Martin Fuchs)
- Fixed listbox insertion algorithms (Martin Fuchs)
- Czech translation of Explorer ([4]Luk Frolka)
- Russian translation (done by Dmitry Philippov; checked by fireball, DarkHobbit and others)
- French translation (Hervé Poussineau)
- Split big Explorer resource file into smaller, language-specific resource scripts (Martin Fuchs)
- Implemented part of screensaver functions: get values from reg, and show screensaver (sikker2004)
WINEFILE
- Czech translation ([5] Luk Frolka)
- Swedish translation (David Nordenberg; proofread by Andreas Bjerkeholt)
- Implementation of owner-drawn context menus (Martin Fuchs)
- From Wine: added Czech and Swedish resource files (Martin Fuchs)
- From Wine: changed
SUBLANG_DEFAULT
to SUBLANG_NEUTRAL
for LANG_SPANISH
in all resources, so that Spanish locales other than Spain also use Spanish resources ([6] Alex Villacís Lasso)
- From Wine: Spanish translation ([7] José Manuel Ferrer Ortiz)
- From Wine: updated Portuguese translation ([8] Marcelo Duarte, Am‚ Rico Jos‚ Melo, [9] Francois Gouget)
- From Wine: updated German translation ([10] Henning Gerhardt)
- Display source path in "move file" dialog (Martin Fuchs)
- Network connect and disconnect dialogs (Martin Fuchs)
- “Format disk” dialog (Martin Fuchs)
- Display free and total disk space (Martin Fuchs)
- Switching of file sort order (Martin Fuchs)
- From Wine: added Polish resource file (Martin Fuchs)
- Window refresh in shell mode (Martin Fuchs)
- Implemented file filtering (matching file name patterns and file types) (Martin Fuchs)
- Refresh display after executing a context menu command (Martin Fuchs)
- File copy, move and delete commands (Martin Fuchs)
- File properties dialog (Martin Fuchs, based partly on Rob D.'s winfile code)
- From Wine: updated German resource files ([11] Henning Gerhardt)
- Switched to Win32 API string functions (Martin Fuchs)
- Updated Winefile French resources ([12] Jonathan Ernst)
- Synced source code and resource scripts between WINE and ReactOS WINE, and switched to UNICODE compilation in Wine (Martin Fuchs)
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