Difference between revisions of "ChangeLog-0.3.7"

From ReactOS Wiki
Jump to: navigation, search
m (Kernel and Executive (NTOSKRNL): fix typo)
Line 14: Line 14:
* Update ReactOS Calc to Version 1.10. ([[Carlo Bramini]])
* Update ReactOS Calc to Version 1.10. ([[Carlo Bramini]])
* Sync winhlp32, wordpad and xcopy with wine. ([[Daniel Reimer]])
* Sync winhlp32, wordpad and xcopy with wine. ([[Daniel Reimer]])
* Sync WineD3D with WIne 1.1.5 ([[Kamil Hornicek]])
* Fix inline versions of integer <-> pointer conversion functions ([[Timo Kreuzer]])
* Fix inline versions of integer <-> pointer conversion functions ([[Timo Kreuzer]])
* Implement 64 bit Interlocked intrinsics and gs-segment-adressing functions ([[Timo Kreuzer]])
* Implement 64 bit Interlocked intrinsics and gs-segment-adressing functions ([[Timo Kreuzer]])

Revision as of 07:39, 1 October 2008


Remember the format for changelogs! * Description (Developer names, bug #x)

Always write developer names in brackets

This is the changelog for ReactOS™ version 0.3.7 (released *wouldn't you like to know*), 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).


Generic 0.3.7 Changes

  • Fix _InterlockedCompareExchange64 intrinsic for x86 (patch from hackbunny) (Stefan Ginsberg)
  • Update 3rd Party lib Document. (Daniel Reimer)
  • Update DejaVu Fonts from 2.24 to 2.26 (Daniel Reimer)
  • Update ReactOS Calc to Version 1.10. (Carlo Bramini)
  • Sync winhlp32, wordpad and xcopy with wine. (Daniel Reimer)
  • Sync WineD3D with WIne 1.1.5 (Kamil Hornicek)
  • Fix inline versions of integer <-> pointer conversion functions (Timo Kreuzer)
  • Implement 64 bit Interlocked intrinsics and gs-segment-adressing functions (Timo Kreuzer)
  • Fix some loader structs ULONG -> ULONG_PTR / SIZE_T (Timo Kreuzer)
  • Convert LDR_RESOURCE_INFO members from ULONG to ULONG_PTR (Timo Kreuzer)
  • Fix IMAGE_FIRST_SECTION macro (Timo Kreuzer)
  • Implement GetCurrentFiber(), NtCurrentTeb() and YieldProcessor() for amd64 (Timo Kreuzer)
  • Add interlocked functions for pointers for amd64 (Timo Kreuzer)
  • Add intrinsic port and register access functions fix LIST_ENTRY() macro for amd64 (Timo Kreuzer)
  • Fix parameter types of NtAllocateVirtualMemory and NtFreeVirtualMemory (Timo Kreuzer)


  • Added/Updated Bulgarian translations (CCTAHEB, bugs #3661, #3697)
  • Added/Updated Czech translations (Radek Liska, bug #3600)
  • Added/Updated French translations (Jean Michel, bugs #3651, #3652, #3653)
  • Added/Updated Italian translations (Paolo Devoti, bugs #3642, #3664, #3682, #3729)
  • Added/Updated Korean translations (Seungyu Kim, bugs #3665, #3741)
  • Added/Updated Norwegian translations (Lars Martin Hambro, bugs #3516, #3618, #3631, #3637, #3670, #3675, #3726)
  • Added/Updated Polish translations (Maciej Bialas, bugs #3630, #3659, #3694, #3705)
  • Added/Updated Polish translations (Olaf Siejka)
  • Added/Updated Slovak translations (Mario Kacmar, bugs #3649, #3721, #3722, #3723, #3738)
  • Added/Updated Spanish translations (Javier Remacha, bugs #3588, #3668, #3700)
  • IDS_PROPERTIES Translation (Victor Martinez Calvo, bug #3655)
  • Rename the Norwegian RC Files to no-NO.rc, which is correct according to MSDN. (Daniel Reimer)
  • Syssetup: Adjust size of controls for italian translation (Carlo Bramini, bug #3555)

Host Tools






Bootloader (FreeLoader)

Kernel and Executive (NTOSKRNL)



  • 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)




  • Add IoEnumerateRegisteredFiltersList and IoGetPagingIoPriority stubs and exports (Stefan Ginsberg)
  • 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)
  • Implement IoSetFileOrigin (Stefan Ginsberg)



  • Use RtlCopyUnicodeString instead of RtlInitUnicodeString. Fixes a memory leak and bad (stack) pointers (Stefan Ginsberg)


  • Add KeAcquireInStackQueuedSpinLockForDpc, KeReleaseInStackQueuedSpinLockForDpc, KeAcquireSpinLockForDpc, KeReleaseSpinLockForDpc, KeRegisterNmiCallback, KeDeregisterNmiCallback, KeInitializeCrashDumpHeader and KeTestSpinLock stubs and exports (Stefan Ginsberg)
  • Export KiBugCheckData, KeI386MachineType and KeInitializeThreadedDpc (Stefan Ginsberg)
  • Fix stack size calculations in KeInitThread , KeAttachProcess and KeStackAttachProcess (spotted by Alex) (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)
  • Rework Mm hack-syncing to go through MiSyncForProcessAttach and MiSyncForContextSwitch (Stefan Ginsberg)
  • Fix a inverted check in KeStartProfile which either leaked memory or freed memory the caller expected to use (Stefan Ginsberg)
  • ASSERTify two assumptions in KeRemoveByKeyDeviceQueue and KeRemoveByKeyDeviceQueueIfBusy to catch infinite loops (Stefan Ginsberg)
  • Export KeSaveFloatingPointState/KeRestoreFloatingPointState for all architectures, and stub the API when it is not applicable. (Stefan Ginsberg)
  • Use THREAD_TERMINATE_HELD_MUTEX bugcode instead of "0", and add said bugcode. (Stefan Ginsberg)



  • Use correct bug code (INVALID_KERNEL_HANDLE) when kernel tries to close a protected handle (Stefan Ginsberg)


  • 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)


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


Hardware Abstraction Layer (HAL)

Kernel Mode Drivers


  • Remove a hack not needed now that we don't get bad IRPs (Cameron Gutman)
  • Always set Irp->IoStatus.Status in UnlockAndMaybeComplete (Cameron Gutman)
  • Make sure we don't fail without completing the IRP (Cameron Gutman)
  • Fix 12 memory leaks (Cameron Gutman)
  • Return STATUS_INVALID_PARAMETER if we get passed a NULL ConnectionObject (Cameron Gutman)
  • Check for a NULL FCB before accessing it (Cameron Gutman)
  • Set the MDL to NULL after we free it so it doesn't get freed again (Cameron Gutman)
  • Fail if LockBuffers() fails (Cameron Gutman)
  • FCB->Recv.Window and FCB->Send.Window must be allocated before returning STATUS_SUCCESS (Cameron Gutman)
  • Make sure MakeSocketIntoConnection() completed successfully (Cameron Gutman)
  • Make sure WarmSocketForConnection() completed successfully (Cameron Gutman)
  • Don't continue if TdiBuildNullConnectionInfoInPlace() fails (Cameron Gutman)
  • Make sure we have a non-NULL TargetAddress before calling TdiSendDatagram() (Cameron Gutman)
  • Free the MDL if we fail (Cameron Gutman)
  • Use _SEH_YIELD (Cameron Gutman)
  • Check for FCB->TdiDeviceName.Buffer before attempting to access it (Cameron Gutman)
  • Move memory freeing to ListenComplete (Cameron Gutman)
  • Don't crash if the buffers are already freed (Cameron Gutman)
  • Set Buf to NULL so we don't try to free it again later (Cameron Gutman)
  • Fix a typo resulting in any call to AfdGetSockOrPeerName with Local set to FALSE to return STATUS_NO_MEMORY (Cameron Gutman)
  • Move SocketAcquireStateLock out of SEH (Cameron Gutman)
  • Make sure we successfully allocated ConnectionReturnInfo and ConnectionCallInfo (Cameron Gutman)
  • Make sure ObReferenceObjectByHandle was successful (Cameron Gutman)
  • Call SocketStateUnlock before returning (Cameron Gutman)
  • Don't complete the IRP again in the completion routine (Cameron Gutman)
  • Move the Irp->Cancel check after SocketAcquireStateLock to fix a possible crash (Cameron Gutman)
  • Move SocketAcquireStateLock in front of the check for a NULL return from LockRequest to prevent another possible crash (Cameron Gutman)
  • Call MmProbeAndLockPages for SysMdl (Cameron Gutman)
  • Use the correct IOCTL (Cameron Gutman)
  • Make sure we don't complete with STATUS_SUCCESS if MmMapLockedPages fails (Cameron Gutman)
  • Use MmGetSystemAddressForMdlSafe instead of MmMapLockedPages (Cameron Gutman)
  • Fix a bug that resulted in the status getting changed if TdiQueryInformation failed (Cameron Gutman)
  • Use FCB->Connection.Object instead of FCB->AddressFile.Object (Cameron Gutman)
  • Enclose MmProbeAndLockPages in SEH (Cameron Gutman)
  • Return a more accurate status (STATUS_INVALID_PARAMETER) than STATUS_UNSUCCESSFUL when a parameter is NULL (Cameron Gutman)
  • Make sure FCB->AddressFrom is non-NULL (Cameron Gutman)
  • Make sure FCB->RemoteAddress is non-NULL (Cameron Gutman)
  • Make sure IPAddr is non-NULL (Cameron Gutman)
  • Fail if MmProbeAndLockPages doesn't succeed (Cameron Gutman)
  • Fail if IoAllocateMdl returns NULL (Cameron Gutman)
  • Skip ObReferenceObjectByHandle if HandleArray[i].Handle is NULL (Cameron Gutman)
  • Fail if ObReferenceObjectByHandle didn't succeed (Cameron Gutman)
  • Set *ConnectionInfo to NULL if we can't allocate memory for ConnInfo (Cameron Gutman)
  • Fail if DatagramRecv->Address is NULL (Cameron Gutman)
  • Add some missing calls to PollReeval (Cameron Gutman)
  • Move an existing PollReeval so it always gets called (Cameron Gutman)
  • Set Handle to NULL so we don't try to close it later (Cameron Gutman)
  • Free the address we've previously allocated if needed (Cameron Gutman)
  • Check if MakeSocketIntoConnection succeeded (Cameron Gutman)
  • Check if TaCopyTransportAddress succeeded (Cameron Gutman)
  • Check if TdiBuildNullConnectionInfo completed successfully (Cameron Gutman)
  • Fail if we can't allocate Qelt (Cameron Gutman)
  • Change the status to STATUS_SUCCESS if TdiReceive returns STATUS_PENDING (Cameron Gutman)
  • Make sure we successfully allocated memory (Cameron Gutman)
  • There are 4 in flight requests not 3 (Cameron Gutman)
  • Set the InFlightRequest to NULL when we complete (Cameron Gutman)



  • Returning STATUS_BUFFER_OVERFLOW is ok also since we're only trying to get DriverKeyLength (Cameron Gutman)
  • Initially set PoolHandle, ConfigurationHandle, KeyHandle, and Filter to NULL (Cameron Gutman)
  • Initially set PortOffset to 0 (Cameron Gutman)
  • Fix 9 memory leaks (Cameron Gutman)
  • Don't return NDIS_STATUS_SUCCESS when we really failed (Cameron Gutman)
  • Initially set Packet to NULL (Cameron Gutman)
  • Initially set NdisProtocolHandle to NULL (Cameron Gutman)
  • Accept STATUS_SUCCESS also as done in config.c (Cameron Gutman)
  • Set ParameterValue to NULL on failure (Cameron Gutman)
  • Fix a possible crash in the cleanup code (Cameron Gutman)
  • Handle AllocatedResources and AllocatedResourcesTranslated separately (Cameron Gutman)
  • Fix 4 handle leaks (Cameron Gutman)
  • Remove the adapter from the global adapter list if we fail (Cameron Gutman)
  • We must call MiniQueueWorkItem while holding a spin lock (Cameron Gutman)
  • Call MiniportQueryInformation, ProtocolSendComplete, ProtocolRequestComplete, SetInformationComplete, SetInformationComplete, and MiniportSetInformation at the correct IRQL (Cameron Gutman)
  • We must call MiniDequeueWorkItem while holding a spin lock (Cameron Gutman)
  • Call MiniportTransferData at DISPATCH_LEVEL (Cameron Gutman)
  • Fix a possible crash if Buffer is NULL (Cameron Gutman)
  • Use MmGetSystemAddressForMdl instead of MmGetMdlVirtualAddress (Cameron Gutman)
  • Implement NdisDprAllocatePacket, NdisDprAllocatePacketNonInterlocked, NdisDprFreePacket, MiniCheckForHang, MiniReset, and NdisDprFreePacketNonInterlocked (Cameron Gutman)
  • Call KeAcquireSpinLockAtDpcLevel instead of KeAcquireSpinLock when possible (Cameron Gutman)
  • Don't hold the spin lock as long in MiniportDpc (Cameron Gutman)
  • Queue a work item to do our work that was previously done in MiniportDpc so Send/SendPackets gets called at the correct IRQL (Cameron Gutman)
  • Call a serialized miniport's Send/SendPackets handler at DISPATCH_LEVEL (Cameron Gutman)
  • Store the current thread (Cameron Gutman)
  • Set Status to NDIS_STATUS_NOT_SUPPORTED if we don't support the parameter type (Cameron Gutman)
  • Initialize the callback record before calling KeRegisterBugCheckCallback so NdisMRegisterAdapterShutdownHandler should work now (Cameron Gutman)
  • Queue the packet if we currently don't have enough resources to process it (Cameron Gutman)
  • The handle passed to MiniRequestComplete, NdisMQueryInformationComplete, and NdisMSetInformationComplete is the Adapter not the MiniportBlock (Cameron Gutman)
  • Set MiniportBusy to FALSE in all the completion routines (Cameron Gutman)
  • Hold the spin lock when requeuing the packet (Cameron Gutman)
  • Only call MiniSendComplete if ProIndicatePacket didn't return NDIS_STATUS_PENDING (Cameron Gutman)
  • Set MiniportBusy to TRUE if MiniDoRequest returns NDIS_STATUS_PENDING (Cameron Gutman)
  • Set MiniportBusy to TRUE in MiniDequeueWorkItem (Cameron Gutman)
  • Fail if another miniport request is still in progress (Cameron Gutman)
  • Set CheckForHangSeconds to a default value of 2 if it wasn't set in MiniportInitialize (Cameron Gutman)
  • Check for miniport hangs every two seconds (the default value which can be changed by the miniport driver) (Cameron Gutman)
  • Call the MiniReset if the miniport detected a hang (Cameron Gutman)
  • MiniportAdapterHandle is PLOGICAL_ADAPTER not PNDIS_MINIPORT_BLOCK (Cameron Gutman)


  • "0xbaadfood" is not a valid tag pool allocation tag. Use "PcNt" instead. (Stefan Ginsberg)
  • Add some IRQL checks (Cameron Gutman)
  • Change NdisAcquireSpinLock/NdisReleaseSpinLock to NdisDprAcquireSpinLock/NdisDprReleaseSpinLock for code that always runs at DISPATCH_LEVEL (Cameron Gutman)









NT System Library (NTDLL)

  • Add lots of exports, mostly stubbed, and make the export list compatible with Windows 2003 (albeit a lot of exports are commented out) (Stefan Ginsberg)
  • Implement RtlInterlockedCompareExchange64 and RtlGetCurrentProcessorNumber and use them from kernel32 (Stefan Ginsberg)

Static Libraries

Run Time Library (RTL)

  • Clean up and add SEH to vDbgPrintExWithPrefixInternal (patch by Alex) (Stefan Ginsberg)
  • Fix saving/restoring of registers in DebugService (Timo Kreuzer)





Keyboard Layouts


Win32™ Personality

User mode subsystem server (CSRSS)

Kernel-mode subsystem server (Win32K)

  • Implement x86 FLOATOBJ fpu emulation api in assembly (Timo Kreuzer)
  • Implement XFORMOBJ api (Timo Kreuzer)
  • Initialize keyboard layout before startung the keyboard thread (Cristo Silva)
  • Don't use a NULL tag with EngAllocMem (Timo Kreuzer)
  • NtGdiExtCreateRegion: Add more parameter checks (Timo Kreuzer, bug #3724)
  • NtGdiExtCreateRegion: Do not copy more data than allocated for the region (Timo Kreuzer)
  • NtGdiExtCreateRegion: Add coordinate transformation (Timo Kreuzer)
  • Simplify and fix InitMetrics (Timo Kreuzer)



  • Add a reference counter to the service record. (Michael Martin)
  • Implemented a common service record delete function. (Eric Kohl)
  • Implement REnumDependentServicesA/W. (Michael Martin)
  • Implement RChangeServiceConfigA, RQueryServiceConfigA, RQueryServiceConfig2A, RGetServiceDisplayNameA and RGetServiceKeyNameA. (Michael Martin, Eric Kohl)
  • RCloseServiceHandle: Remove a service if it has been marked for deletion and reference on service is 0. (Michael Martin, Eric Kohl)
  • RControlService: Stop a service only if there are no dependent services running. (Michael Martin, Eric Kohl)
  • RCreateService: Add more parameter checking. Set ObjectName to "LocalSysyem" if it doesn't have a name. (Michael Martin, Eric Kohl)
  • Change RQueryServiceConfigW to return empty strings vice NULL pointers if information not available. (Michael Martin, Eric Kohl)
  • RGetServiceDisplayNameW: Return the service name if display name is not set. (Michael Martin, Eric Kohl)
  • RQueryServiceConfigW: Update display name if is has been changed. (Eric Kohl)
  • ROpenServiceW: Fail if lpServiceName is NULL. (Michael Martin, Eric Kohl)


  • Fixed typo in FindAdapterKey that caused failure to find adapters registry key, resulting in static ip info not being assigned for TCPIP. (Michael Martin, bug #2392)
  • Write NameServer determined by dhcp to DHCPNameServer value in registry vice NameServer (Michael Martin, bug #2392)

Control panel applets





  • Fall back on NameServer value in TCPIP\Parameters if interface for adapter does not exist in registry. (Michael Martin, bug #2392)





Win32™ Applications






Win32™ Libraries


  • Implement a common RPC Status to Windows Error function. (Eric Kohl)
  • Add SEH protection to all calls made to rpcrt. (Michael Martin, Eric Kohl)
  • EnumDependentServicesA/W and EnumServicesStatusA/W: don't attempt fix up pointers if the service manager returns an error.(Michael Martin)
  • Update with exports new to Windows 2003 (Stefan Ginsberg)
  • Make sure we are passed a subkey in RegDeleteKeyA/W (Stefan Ginsberg)
  • Make RegQueryValueA conform to Winetests (Stefan Ginsberg)


  • Use strtoui64 instead of non-existing strtoull. This makes dbghelp load again (Stefan Ginsberg)





  • Implement filling GateWayList member of IP_ADAPTER_INFO structure for GetAdaptersInfo function. (Michael Martin, bug #2392)
  • Fixed GetIpForwardTable to return correct dwForwardIfIndex for structure MIB_IPFORWARDTABLE. (Michael Martin)
  • Use DHCPNameServer value for NameServer assignment if NameServer value is empty in registry. (Michael Martin, bug #2392)




  • Update with exports new to Windows 2003 (Stefan Ginsberg)
  • Don't forget to set the fiber argument parameter in ConvertThreadToFiberEx (Stefan Ginsberg)
  • Implement InterlockedCompareExchange64 and GetCurrentProcessorNumber by forwarding to NTDLL(Stefan Ginsberg)









  • Set bInitialOwner to TRUE for a mutex we release before waiting for it (Stefan Ginsberg)





  • Allocate size of structure, not size of pointer to the structure (Timo Kreuzer)
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