ChangeLog-0.3.7

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

Fix a major problems in CmpCleanUpKcbCacheWithLock: Lacking a dereference of a parent key (Aleksey Bragin)

Comment out asserts which are hit in some cases ("advapi32_winetest.exe registry" being one of them), because there is no locking operation performed in CmpBuildHashStackAndLookupCache yet (Aleksey Bragin)

DBGK

NtDebugActiveProcess: Don't leak a handle if user mode tries to debug the system process (Stefan Ginsberg)

DbgkpPostFakeThreadMessages and DbgkpSetProcessDebugObject: Don't dereference a thread/debug object when we are supposed to reference them. Now WinDBG can attach to a process without bringing down the system. (Stefan Ginsberg)

FSRTL

IO

Use the queued spinlock in IoAcquireCancelSpinLock/IoReleaseCancelSpinLock and IoAcquire/ReleaseVpbSpinLock instead of a regular, ReactOS specific spinlock (Stefan Ginsberg)

NtQueryInformationFile and NtSetInformationFile: Don't clear the IRP_SYNCHRONOUS_API flag if it has been previously set, and remove the hack in IopCompleteRequest which worked around this. (Stefan Ginsberg)

In NtYieldExecution, KiSwapThread and KiIdleLoop, hack "sync" to the next thread's stack before switching to it. Otherwise, because of broken Mm behaviour, we may page fault while interrupts are disabled. A hack in the trap handler works around this, but the hack still stays because these changes appear to be insufficient. (thanks to Alex for his help with this issue) (Stefan Ginsberg)

Fix NtAllocateVirtualMemory: in success case return the real (page rounded!) base address and region size, not the possibly unaligned pointer and length which were passed to the function. These cases were hit when a region of memory was previously reserved, then a commit request came with unaligned base address and length, which match that previously reserved region after aligning (Aleksey Bragin)

Fix ReactOS's MmCreateDataFileSection to ignore 0 value in the MaximumSize (it has an additional check for MaximumSize being non-NULL, but this should be removed in future). MaximumSize is mandatory for file-backed sections (Aleksey Bragin)

PO

Remove PoSetDeviceBusy export as it is a ddk header macro, and add said macro to our ddk (Stefan Ginsberg)

PS

Fix a typo PsTerminateSystemThread which led to inverted behaviour and caused it to terminate user threads and return "invalid parameter" for system threads. (Stefan Ginsberg)

Fix a inverted check in PspExitThread which caused worker thread termination to bugcheck due to a flag being set (because worker threads modify this flag themselves). This only worked for other threads because KeInitThread set the flag incorrectly (fixed this too). (Stefan Ginsberg)

NtQueryInformationProcess with ProcessImageFileName query type: Free the buffer allocated by SeLocateProcessImageName, and set return status correctly if return buffer is too small (so caller will know to allocate more memory). (Stefan Ginsberg, spotted by bug 3714)

Add SYSTEM_THREAD_EXCEPTION_NOT_HANDLED bugcode and make use of it (Stefan Ginsberg)

SE

ObQueryNameString can return STATUS_INFO_LENGTH_MISMATCH, so make sure SeInitializeProcessAuditName supports that along with BUFFER_OVERFLOW and BUFFER_TOO_SMALL, which an Ob query name procedure could return (Aleksey Bragin)

SMSS

Make SmCreateUserProcess accept two flags: the old "wait for" one, and a new "reserve 1Mb" one. NT reserves lower 1 MB of address space when starting a subsystem process. ReactOS should too, however right now this change is disabled (leads to boot problems) (Aleksey Bragin)

Do not allow an empty name in RtlSetEnvironmentVariable (Jeffrey Morlan)

RtlSetEnvironmentVariable: To delete a variable, it was necessary to pass a NULL pointer as the value, but passing an empty string should create an empty variable. Remove Value->Length > 0 check (Jeffrey Morlan)

Fix an incorrect MmCreateSection usage case. Not only the MaximumSize is mandatory for file-backed sections, but an allocation type must be specified (SEC_COMMIT, and it's not the same as some humble "0" passed there as a value) (Aleksey Bragin)

NtGdiGetRegionData: Use correct address of region header (&obj->rdh, not obj) and for the contents just use 'rgndata->Buffer' as the destination address instead of doing pointer arithmetic (Jeffrey Morlan)

When reverting a window's system menu, delete the old one recursively (Jeffrey Morlan)

RSetServiceStatus: Don't fail if the system is shutting down because services must report successful shutdown to the service manager while the system is shutting down and add some more parameter checks (Eric Kohl)

cmd_start: - Allow space between /D and directory, allow /W as a synonym for /WAIT and give an error message on invalid switches (Jeffrey Morlan)

Implement X>&Y redirections and hold redirections in a linked list structure, because order matters (>x 2>&1 is not the same as 2>&1 >x) and allow redirection of any handle number from 0 to 9 as well as allow quotes around the redirection file name (Jeffrey Morlan)