ChangeLog-0.3.8

This is the changelog for ReactOS™ version 0.3.8 (released 4 February, 2009), 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.7 (released 4 November, 2008).

CM

Add support for a special case of opening existing (cached) KCBs by CmpDoOpen (Aleksey Bragin)

Specify a flag for that case in one specific case inside CmpParseKey, which allows us to get rid of the "\\REGISTRY" hack inside the code, fixes the 'Kcb->RefCount == 1' assertion failure, and certainly fixes registry-related regression tests. There might be some side effects in theory, but since this hack only applied to the root key, they shouldn't happen (Aleksey Bragin, Stefan Ginsberg)

DBGK

Fix various bugs and some missing handling of failure cases in the DBGK implementation. This makes Ollydbg able to attach, detach, suspend and resume processes under debug without causing weird kernel crashes (Stefan Ginsberg)

Rewrite SystemTimeOfDay QuerySystemInformation case. ReqSize is the amount of data copied to the user so use it accordingly. Also, fill up the buffer as much as the caller requested. Fixes 1 "ntdll_winetest.exe info" (Aleksey Bragin)

Use a newer (5.0 and higher) version of SYSTEM_TIMEOFDAY_INFORMATION structure (consisting of two additional 64 bits fields: boot time bias and sleep time bias) (Aleksey Bragin)

FSRTL

FSTUB

Correctly assign NtSystemRoot and remove assumption that number of partitions equals number of harddisks (Giannis Adamopoulos, bug 3170)

IO

NtWrite/ReadFile: Fix a bug where RequestorMode would always be set to KernelMode, which would cause user-mode APCs to be called directly from kernel (Stefan Ginsberg)

IopCheckVpbMounted: Fix a bug where NT_SUCCESS was used on a pointer to NTSTATUS value instead of the status value itself (Timo Kreuzer)

Use ExInitializeSystemLookasideList instead of ExInitializeNPagedLookasideList for the internal I/O lookaside lists (just as it was done for the Ob lists a couple of months ago) (Aleksey Bragin)

Optimize lookaside allocation by using one large contiguous buffer instead of fragmented buffers for each CPU (Aleksey Bragin)

Fix broken behavior of IoBuildPartialMdl, which instead of copying 4 flags from a source mdl to a target one was always setting all of them, thus often making resultant mdl unusable (Aleksey Bragin)

Fix one more typo in the IoBuildPartialMdl code leading to ignore of TargetMdl flags and always setting MDL_ALLOCATED_FIXED_SIZE and MDL_ALLOCATED_MUST_SUCCEED even if a caller did not want so (Alex Ionescu)

Implement expiring timers when the user changes the system time. Previously these timers would never expire if the time was set past their expiration points (Aleksey Bragin, thanks to Alex Ionescu and Stefan Ginsberg)

Fix a bug where, when changing the system time, the modifications were not done in the correct order, possibly resulting in a race condition happening if someone else was checking the time simultaneously (Aleksey Bragin, thanks to Alex Ionescu and Stefan Ginsberg)

SMSS

Hardware Abstraction Layer (HAL)

Fixed HAL DMA problem that caused floppy driver not to work (the point was that function had to copy the read sector back to the MDL buffer and it was not doing that because of the problem with braces, broken in rev is 24464) (Juan Sánchez Jurado, bug #2287)

Kernel Mode Drivers

ACPI

CDFS

When querying file name information, fill in the whole buffer provided by the caller, even if filename does not fully fit (driver by Microsoft(R) does the same). Also, return the actual amount of data written in IoSb.Information, even in case of buffer overflow result (Aleksey Bragin)

FASTFAT

Fixed bug where extending the size of an already non-empty file would crash if disk space runs out; also optimized that code so it doesn't always have to traverse the entire file (Jeffrey Morlan)

When querying file name information, fill in the whole buffer provided by the caller, even if filename does not fully fit (driver by Microsoft(R) does the same). Also, return the actual amount of data written in IoSb.Information, even in case of buffer overflow result (Aleksey Bragin)

Target device to mount may not have VPB, the driver should get the VPB passed in parameters (Aleksey Bragin)

Set target device's VPB to this value. This should not really be done, however our driver heavily depends on target device having this VPB. I don't see any side effects. With these changes, Windows 2003 is able to boot up to desktop and cleanly shutdown using this driver (Aleksey Bragin)

FS_REC

UDF recognizer fixed so it doesn't perform partial sector reads. When trying to detect filesystem for a floppy without 0xaa55 signature UDF recognizer is called and it performed wrong partial sectors read because of a confusion between sectors and offset in bytes (Juan Sánchez Jurado, bug 2287)

MINGW

PSEH

Reimplemented as PSEH v2. Now allows a much more readable syntax that's almost completely compatible with native SEH constructs. Also handles exceptions thrown during unwinding in a way that's compatible with native SEH (KJK::Hyperion)

For MOVE command: only check for options at the beginning of the command line; give an error message if too many parameters are given; if no destination is given, default to current directory; fix crash that occurred with certain source filenames; fix memory leaks (Jeffrey Morlan)

Add support for removing multiple directories with one RMDIR command (Jeffrey Morlan)