https://reactos.org/wiki/api.php?action=feedcontributions&user=Sabiki&feedformat=atomReactOS Wiki - User contributions [en]2024-03-29T05:26:29ZUser contributionsMediaWiki 1.31.7https://reactos.org/wiki/index.php?title=ChangeLog-0.3.11&diff=27228ChangeLog-0.3.112009-12-10T14:35:26Z<p>Sabiki: /* Translations */</p>
<hr />
<div>This is the changelog for ReactOS™ [[0.3.11|version 0.3.11]] (released *pending*), 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 [[ChangeLog-0.3.10|version 0.3.10]] (released 5th July, 2009).<br />
<br />
= General =<br />
== Generic 0.3.11 Changes ==<br />
* Updated DejaVu Fonts to Version 2.30 ([[Daniel Reimer]])<br />
* Updated 3rd Party Files Document ([[Daniel Reimer]])<br />
* Update Readme.WINE ([[Daniel Reimer]])<br />
* Several gcc 4.4 compilation fixes ([[Gregor Schneider]])<br />
* Correct MPEG1/2 video decoder filename ([[Russell Rice]])<br />
* Various resource fixes ([[Russell Rice]], [[Gregor Schneider]])<br />
<br />
== Translations ==<br />
<br />
'''Brazilian'''<br />
* Brazilian translation updates ([[Wagner Leandro Bueno Angelo]], {{bug|4738}})<br />
<br />
'''Bulgarian'''<br />
* Bulgarian translation updates ([[CCTAHEB]], {{bug|4805}}, {{bug|4864}})<br />
<br />
'''Chinese'''<br />
* Chinese translation updates ([[Elton Chung]])<br />
<br />
'''Czech'''<br />
* Czech translation updates ([[Radek Liska]], {{bug|4707}}, {{bug|4708}}, {{bug|4749}})<br />
<br />
'''Dutch'''<br />
* Dutch translation updates ([[Jan Roeloffzen]], {{bug|4700}}, {{bug|4786}})<br />
* Dutch translation updates ([[Wouter De Vlieger]], {{bug|4893}})<br />
* Dutch translation updates ([[User:Maikol|Maikel Wever]], {{bug|4970}}, {{bug|4971}}, {{bug|4972}})<br />
<br />
'''German'''<br />
* German translation of ReactOS Applications Manager ([[Matthias Kupfer]])<br />
* German translation fixes for usetup ([[Gregor Schneider]])<br />
<br />
'''Hungarian'''<br />
* Hungarian translation updates ([[Gábor Balogh]], {{bug|4928}})<br />
<br />
'''Italian'''<br />
* Italian translations for spider, explorer_new, ks.inf, usetup ([[Gabriel Ilardi]])<br />
<br />
'''Japanese'''<br />
* Japanese translation updates ([[pcds90net]], {{bug|4795}}, {{bug|4801}})<br />
* Japanese translation updates ([[Tomoya Kitagawa]], {{bug|4638}}, {{bug|4733}}, {{bug|4840}}, {{bug|4852}}, {{bug|4884}})<br />
<br />
'''Norwegian'''<br />
* Norwegian translation updates ([[Lars Martin Hambro]], {{bug|4761}}, {{bug|4797}})<br />
<br />
'''Polish'''<br />
* Polish translation updates ([[Ichoroszi]], {{bug|4651}})<br />
* Polish translation updates for rapps, mmsys, syssetup ([[Olaf Siejka]])<br />
* Polish translation for spider ([[Maciej Białas]])<br />
<br />
'''Romanian'''<br />
* Romanian translation updates ([[Dimitriu Petru]], {{bug|4636}}, {{bug|4692}})<br />
<br />
'''Slovak'''<br />
* Slovak translation updates ([[Mario Kacmar]], {{bug|4652}}, {{bug|4828}}, {{bug|4854}}, {{bug|4900}})<br />
<br />
'''Spanish'''<br />
* Spanish translations for spider, explorer_new, usetup ([[Gabriel Ilardi]])<br />
* Spanish translation for spider ([[Javier Agustìn Fernàndez Arroyo]], {{bug|4885}})<br />
<br />
'''Generic'''<br />
* Generic: Updated resources for explorer_new, added english ks.inf ([[Gabriel Ilardi]])<br />
<br />
= Headers =<br />
== DDK ==<br />
<br />
== NDK ==<br />
* Add amd64 definitions. ([[Timo Kreuzer]])<br />
<br />
== PSDK ==<br />
* Reorganize some headers to make them better match the Platform SDK ([[Andrew Hill]])<br />
* Move InlineIsEqualGUID to guiddef.h ([[Andrew Hill]])<br />
* Create new header files shlguid_undoc.h, shlobj_undoc.h, and shlwapi_undoc.h to hold undocumented types, functions, and GUIDs ([[Andrew Hill]])<br />
* Move some undocumented definitions declared in explorer_new/todo.h and undoc.h to new headers ([[Andrew Hill]])<br />
* Add definition of RBSTR_CHANGERECT to commctrl.h ([[Andrew Hill]])<br />
* IDeskBarClient inherits from IOleWindow, not IUnknown ([[Andrew Hill]])<br />
* HMONITOR was declared in both dxsdk/axextend.idl and wine/wined3d.idl, but not in wtypes.idl where it belongs ([[Andrew Hill]])<br />
<br />
= Host Tools =<br />
== BUILDNO ==<br />
<br />
== LOG2LINES ==<br />
<br />
== RBUILD ==<br />
* Implement gcc support for delayed imports. ([[Timo Kreuzer]])<br />
<br />
== RBUILD_HELPER ==<br />
<br />
= Core =<br />
== Bootloader (FreeLoader) ==<br />
* Clear the screen before printing the current path\file. ([[Gabriel Ilardi]], {{bug|4877}})<br />
<br />
== Kernel and Executive (NTOSKRNL) ==<br />
<br />
* Make use of the _SEH2_YIELD macro when returning from an exception instead of pre-initializing status codes and checking them after leaving the SEH block. ([[Stefan Ginsberg]])<br />
* Don't use ExSystemExceptionFilter in SEH filters if we know the caller is user mode. ([[Stefan Ginsberg]])<br />
* Fixed the remaining issues for running the MP kernel (only on UP so far). Implemented stubbed code in the scheduler, DPC handling and context switch code and fixed various bugs in the spinlock implementation. ([[Stefan Ginsberg]])<br />
<br />
=== DBGK ===<br />
* Fixed support for sending second chance exceptions to user mode debuggers. ([[Stefan Ginsberg]])<br />
<br />
=== FSTUB ===<br />
<br />
=== IO ===<br />
<br />
* Calling NtLoadDriver on an already loaded driver should fail with STATUS_IMAGE_ALREADY_LOADED. Fixes one test for kmtest driver tests and a bugcheck when loading drivers a second time. ([[Michael Martin]])<br />
* Don't call ExFreePool for null pointers ([[Johannes Anderwald]])<br />
* Don't touch the freed buffer in case of an error ([[Amine Khaldi]])<br />
* Fix IoRegisterDeviceInterface, IoSetDeviceInterfaceState to handle reference strings ([[Johannes Anderwald]])<br />
<br />
=== KD ===<br />
<br />
* Continued the implementation of kernel support for debugging with WinDbg/KD. Implemented missing handling of various functionality in the KD support APIs and fixed missing or broken support in other areas. Debugging ReactOS kernel mode with WinDbg now works quite well. ([[Stefan Ginsberg]])<br />
<br />
=== KDBG ===<br />
<br />
=== KE ===<br />
* Fixed a bug in KeDetachProcess and KeUnstackDetachProcess that caused a switch from the original process to itself instead of <br />
switching from the attached process. ([[Stefan Ginsberg]])<br />
* Removed a hack from KiGetMachineBootPointers and set the TSS selector properly in KiRosPrepareForSystemStartup instead for FreeLdr boot style. ([[Stefan Ginsberg]])<br />
* Fixed a critical bug in KeFindConfigurationEntry; it passed NULL to KeFindConfigurationNextEntry which expected a pointer to a value containing NULL. This was hidden by the FreeLdr boot style as that boot style maps NULL, but got exposed by WinLdr boot style as NULL is not mapped there. ([[Stefan Ginsberg]])<br />
<br />
=== MM ===<br />
<br />
* NtAllocateVirtualMemory: Add check to make sure that BaseAddress + RegionSize is inside MemoryArea. For AllocationType of MEM_RESET add FIXME's and return STATUS_SUCCESS, without modifying attributes of region. Fixes 2 kernel32 virtual tests. ([[Michael Martin]])<br />
* NtMapViewOfSection: When referencing the section object by handle, don't assume access mask of SECTION_MAP_READ. Access mask must be determined from page protection attributes passed in Protect parameter. Fixes 5 winetests for kernel32 virtual. ([[Michael Martin]])<br />
* MiReserveAlignedSystemPtes: Add missing lock release ([[Johannes Anderwald]])<br />
* Fixed recursive spinlock acquisition in the Memory Manager introduced by the rewrite: the old Mm calls certain routines for performing operations on PFNs, and those routines acquire the PFN lock, while the new Mm holds the PFN lock while working with PFNs, including calling those routines. Moved out spinlock acquire/release to the callers of those functions instead. ([[Stefan Ginsberg]])<br />
* Added missing spinlock release to MiReserveAlignedSystemPtes. ([[Stefan Ginsberg]])<br />
* Added missing synchronization for PsLoadedModuleList in certain cases. ([[Stefan Ginsberg]])<br />
* Fix MmGrowKernelStack to check for available space. [[Timo Kreuzer]])<br />
<br />
=== OB ===<br />
* Fixed assumptions that memory allocated by ObCreateObject is zero-initialized (it shouldn't be) and removed the object zeroing hack. ([[Stefan Ginsberg]])<br />
<br />
=== PS ===<br />
<br />
== Hardware Abstraction Layer (HAL) ==<br />
* Reimplemented HalpCalibrateStallExecution with a more accurate implementation to determine the stall count factor for KeStallExecutionProcessor. ([[Stefan Ginsberg]])<br />
<br />
== SMSS ==<br />
<br />
== NT System Library (NTDLL) ==<br />
<br />
== Run Time Library (RTL) ==<br />
* Map STATUS_NOT_FOUND to ERROR_NOT_FOUND ([[Johannes Anderwald]])<br />
* Reimplemented RtlRaiseException and RtlRaiseStatus in assembly for x86 so they do not corrupt non-volatile registers when saving the callers context. ([[Stefan Ginsberg]])<br />
* Fix stack offset in asm implementations of RtlInterlockedPopEntrySList, RtlInterlockedPushEntrySList and RtlInterlockedFlushSList. ([[Timo Kreuzer]])<br />
* Make heap functions 64bit safe. ([[Samuel Serapión]])<br />
<br />
== Kernel Mode Drivers ==<br />
=== Audio Stack ===<br />
<br />
=== BDASUP ===<br />
* Implement DllInitialize, BdaPropertyGetPinControl, BdaPropertyNodeTypes, BdaPropertyPinTypes, BdaInitFilter, BdaCreateTopology, BdaCheckChanges, BdaCommitChanges, BdaCreateFilterFactory, BdaCreateFilterFactoryEx, BdaCreatePin, BdaMethodCreatePin, BdaFilterFactoryUpdateCacheData, BdaGetChangeState, BdaMethodCreateTopology, BdaMethodDeletePin, BdaPropertyTemplateConnections, BdaStartChanges, BdaUninitFilter, BdaValidateNodeProperty ([[Johannes Anderwald]])<br />
* Define automation tables for Filter & Pin ([[Johannes Anderwald]])<br />
* Plug in automation tables when creating a new filter factory / pin ([[Johannes Anderwald]])<br />
* Add BDA filter context to object bag, so that it gets freed automatically later ([[Johannes Anderwald]])<br />
<br />
=== FASTFAT ===<br />
<br />
=== I8042prt ===<br />
<br />
=== KBDCLASS ===<br />
<br />
=== KDCOM ===<br />
* Rewrite kdcom for use with KD64. ([[Timo Kreuzer]])<br />
<br />
=== KS ===<br />
* Fix a bug in KsCancelIo which accessed already freed memory ([[Johannes Anderwald]])<br />
* Activate handling of requests of type KSPROPERTY_TYPE_BASICSUPPORT ([[Johannes Anderwald]])<br />
* Return correct status code in the GUID_NULL handler ([[Johannes Anderwald]])<br />
* Store KSPROPERTY_SET in Irp when using KsPropertyHandler ([[Johannes Anderwald]])<br />
* Fix a bug in KsPinDataIntersection ([[Johannes Anderwald]])<br />
* Fix a bug when canceling irps ([[Johannes Anderwald]])<br />
* Fix a critical bug in the counted worker implementation ([[Johannes Anderwald]])<br />
* Check if NodeId is out of bounds ([[Johannes Anderwald]])<br />
* Return correct status code ([[Johannes Anderwald]])<br />
* Retrieve the correct pin name ([[Johannes Anderwald]])<br />
* Implement KSPROPERTY_PIN_NAME properly ([[Johannes Anderwald]])<br />
* KsPinPropertyHandler does *NOT* set Status in the IRP ([[Johannes Anderwald]])<br />
* The Category member is LPGUID not GUID ([[Johannes Anderwald]])<br />
* Check if there is a category member ([[Johannes Anderwald]])<br />
* Fix 'Assertion 'WorkItem->List.Flink == NULL' failed at ntoskrnl\ex\work.c' ([[Johannes Anderwald]])<br />
* Fix a bug spotted by Timo ([[Johannes Anderwald]])<br />
* Store Object Header in FsContext2 ([[Johannes Anderwald]])<br />
* Fix allocation of create item entry in KsAllocateObjectCreateItem ([[Johannes Anderwald]])<br />
* Fix de-referencing in Ks[De]ReferenceSoftwareBusObject & Ks[De]ReferenceBusObject ([[Johannes Anderwald]])<br />
* Fake success in KsEnableEvent ([[Johannes Anderwald]])<br />
* Check if the list empty in KspFreeEventList ([[Johannes Anderwald]])<br />
* Handle GUID_NULL in KspPropertyHandler ([[Johannes Anderwald]])<br />
* Return STATUS_MORE_ENTRIES if outputbuffer is too small ([[Johannes Anderwald]])<br />
* Zero struct in KsRegisterWorker ([[Johannes Anderwald]])<br />
* Fix calling property handler in IKsFilter_DispatchDeviceIoControl Found by ([[Amine Khaldi]])<br />
* Implement handling of KSPROPERTY_TYPE_BASICSUPPORT ([[Johannes Anderwald]])<br />
* Fix a few bugs in KsPinPropertyHandler & KsTopologyPropertyHandler ([[Johannes Anderwald]])<br />
* Implement CBaseUnknown class functions in C! ([[KJK::Hyperion]])<br />
* Store input buffer in Irp->AssociatedIrp.SystemBuffer ([[Johannes Anderwald]])<br />
* Implement KsCopyObjectBagItems, KsCreateBusEnumObject, KsProbeStreamIrp, KsGetFirstChild, KsGetNextSibling, IKsFilter_fnAddProcessPin, IKsFilter_fnRemoveProcessPin, KsDispatchSpecificProperty, KsPropertyHandler, KsMergeAutomationTables, KsStreamPointerDelete, KsStreamPointerScheduleTimeout, KsStreamPointerCancelTimeout, KsPinGetFirstCloneStreamPointer, KsStreamPointerGetNextCloneKsPropertyHandlerWithAllocator, KsFastPropertyHandler, KsValidateConnectRequest, IKsPin_DispatchDeviceIoControl, IKsPin_Close, KsQueryInformationFile, KsStreamIo, KsMoveIrpsOnCancelableQueue, KsRegisterFilterWithNoKSPins, _KsEdit, KsCacheMedium, KsHandleSizedListQuery, KsAcquireResetValue, KsCompletePendingRequest, KsAllocateExtraData, KsFreeEventList, KsDisableEvent, KsAddEvent, KsDefaultAddEventHandler, KsPinAttachAndGate, KsPinAttachOrGate, KsPinGetAndGate, KsDeviceSetBusData, KsDeviceGetBusData, KsGetPinFromIrp, KsPinAcquireProcessingMutex, KsPinGetConnectedPinDeviceObject, KsPinGetConnectedFileObject, KsPinGetConnectedPinInterface, KsPinGetNextSiblingPin, KsPinGetParentFilter, KsPinRegisterFrameReturnCallback, KsPinRegisterHandshakeCallback, KsPinRegisterIrpCompletionCallback, KsPinRegisterPowerCallbacks, KsPinReleaseProcessingMutex, KsAcquireControl, KsReleaseControl, KsFilterAddTopologyConnections, KsFilterCreatePinFactory, KsFilterAcquireProcessingMutex, KsFilterReleaseProcessingMutex, KsFilterGetChildPinCount, KsFilterRegisterPowerCallbacks, KsGetFilterFromIrp, KsGetObjectFromFileObject, KsGetObjectFromFileObject, KsGetObjectTypeFromIrp, KsGetParent, KsGetObjectFromFileObject, KsGetObjectFromFileObject, KsGetObjectTypeFromIrp, KsGetParent, KoDriverInitialize, KoDeviceInitialize, KsReferenceBusObject, KsReferenceSoftwareBusObject, KsDereferenceSoftwareBusObject, KsDereferenceBusObject, KsGetFirstChild, KsGetImageNameAndResourceId, KsMapModuleName, KsAcquireDevice, KsReleaseDevice, KsTerminateDevice, KsQueryObjectAccessMask, KsQueryObjectCreateItem, KsQueueWorkItem, KsIncrementCountedWorker, KsDecrementCountedWorker, KsRegisterCountedWorker, KsUnregisterWorker, KsRegisterWorker, KsCancelIo, KsReleaseIrpOnCancelableQueue, KsRemoveIrpFromCancelableQueue, KsRemoveSpecificIrpFromCancelableQueue, KsAddIrpToCancelableQueue, KsCancelRoutine, KsValidateAllocatorCreateRequest, KsValidateClockCreateRequest, KsValidateTopologyNodeCreateRequest, KsAddObjectCreateItemToObjectHeader, KsGetDevice, KsDefaultDispatchPnp, KsDefaultDispatchPower, KsDefaultForwardIrp, KsReadFile, KsSetInformationFile, KsQueryInformationFile, KsCreateAllocator, KsCreateDefaultAllocatorEx, KsValidateAllocatorFramingEx, KsSetDevicePnpAndBaseObject, KsQueryDevicePnpObject, KsSetTargetState, KsSetTargetDeviceObject, KsSetPowerDispatch, KsFreeDeviceHeader, KsFreeObjectHeader, KsAllocateObjectCreateItem, KsFreeObjectCreateItem, KsFreeObjectCreateItemsByContext, KsCreateDefaultSecurity, KsCreateClock, KsCreateDefaultClock, partly implement KsAllocateDefaultClockEx, KsFreeDefaultClock, KsGetDefaultClockState, KsSetDefaultClockState, KsGetDefaultClockTime, KsSetDefaultClockTime, KsInitializeDevice, KsGetDeviceForDeviceObject, KsCreateFilterFactory, KsFilterFactorySetDeviceClassesState, KsFilterFactoryGetSymbolicLink, KsFilterFactoryAddCreateItem, KsLoadResource, KsDispatchQuerySecurity, KsDispatchSetSecurity, KsWriteFile, KsDefaultIoCompletion, KsEnableEvent, KsEnableEventWithAllocator, KsDiscardEvent ([[Johannes Anderwald]])<br />
* Implement attach of filter factories to the device header ([[Johannes Anderwald]])<br />
* Filter dispatch is optional, handle it when creating new filters ([[Johannes Anderwald]])<br />
* Fix allocation check by ([[Amine Khaldi]])<br />
* Fix uninitialized return value when the list is empty ([[Johannes Anderwald]])<br />
* Fix a horrible bug where the end of the list wasnt checked by the source list but the destination list by ([[Amine Khaldi]])<br />
* Acquire Spinlock at dpc level ([[Johannes Anderwald]])<br />
* Release cancel spinlock at correct level ([[Johannes Anderwald]])<br />
* Fix a desastreous bug in KsRemoveIrpFromCancelableQueue ([[Johannes Anderwald]])<br />
* Remove KsGetChildCreateParameter, it is not exported in NT 5.1 KS ([[Johannes Anderwald]])<br />
* Start Implementing IKsPin interface ([[Johannes Anderwald]])<br />
* Increment PinInstanceCount when a pin has succcessfully been created ([[Johannes Anderwald]])<br />
* Initialize pin dispatch table ([[Johannes Anderwald]])<br />
* Add create items for allocator, clock, node create requests ([[Johannes Anderwald]])<br />
* Add create item for creation of pins and topology nodes ([[Johannes Anderwald]])<br />
* Implement pin creation handler ([[Johannes Anderwald]])<br />
* Copy Filter descriptor for each instantiated filter ([[Johannes Anderwald]])<br />
* Create object bag for IKsFilter, IKsFilterFactory and IKsDevice ([[Johannes Anderwald]])<br />
* Fix storing of device descriptor in KsInitializeDriver, KsAddDevice ([[Johannes Anderwald]])<br />
* Remove DriverEntry as ks is kernel mode dll ([[Johannes Anderwald]])<br />
* Fix unimplemented tags ([[Johannes Anderwald]])<br />
* Use double in spec for functions taking longlong arguments ([[Colin Finck]])<br />
* Use KSQUEUE_SPINLOCK_IRP_STORAGE macro for access the stored spin lock ([[Johannes Anderwald]])<br />
* Remove old irp queue implementation ([[Johannes Anderwald]])<br />
* Use KSSTRING instead of hardcoding object class ([[Johannes Anderwald]])<br />
* Rewrite KSCREATE_ITEM handling to support clocks, nodes, allocators. ([[Johannes Anderwald]])<br />
* Store create items in list instead of an array. Consequently, the code can be re-used for KSDEVICE_HEADER / KSOBJECT_HEADER functions. ([[Johannes Anderwald]])<br />
* Implement by using KSBASIC_HEADER struct which must be positioned before its object specific (PKSFILTER, PKSFILTERFACTOR, PKSPIN) ([[Johannes Anderwald]])<br />
* Remove a hack from KspCreateObjectType ([[Johannes Anderwald]])<br />
* Return the correct device object in KsQueryDevicePnpObject ([[Johannes Anderwald]])<br />
* Remove KspClose, KspRead, KspWrite, KspFlushBuffers, KspQuerySecurity, KspSetSecurity and all these IOCTL in KspDispatchIrp ([[Johannes Anderwald]])<br />
* Rewrite KsDispatchIrp to handle IRP_MJ_CREATE & IRP_MJ_POWER, IRP_MJ_PNP for AV Stream minidrivers and forward IRP_MJ_SYSTEM_CONTROL requests to the registered pnp base object ([[Johannes Anderwald]])<br />
* Unsupported IOCTLs are now completed with KsDispatchInvalidDeviceRequest (previously leaked) ([[Johannes Anderwald]])<br />
* Implement registering of device interface for AVStream drivers ([[Johannes Anderwald]])<br />
* Add KsFilterFactoryUpdateCacheData ([[Johannes Anderwald]])<br />
* Fix a bug which was responsible for most audio-related crashes ([[Gregor Schneider]])<br />
<br />
=== NDIS ===<br />
<br />
=== PCIIDE ===<br />
<br />
=== PCNET ===<br />
<br />
=== PORTCLS ===<br />
* Implement handling of looped stream events in order to notify DirectSound clients ([[Johannes Anderwald]])<br />
* Cancel all audio stream irps when the it is used in looped stream mode. Fixes re*opening of playback / capture devices in DSound. ([[Johannes Anderwald]])<br />
* Implement looped streaming ([[Johannes Anderwald]])<br />
* Implement GetPosition handler for looped streaming ([[Johannes Anderwald]])<br />
* Pass correct flags to KsProbeStreamIrp when the irp has not already been probed ([[Johannes Anderwald]])<br />
* Implement support for submitting multiple stream headers at once ([[Johannes Anderwald]])<br />
* Return correct status code on error ([[Johannes Anderwald]])<br />
* Silence most dprints of portcls<br />
* Fix a bug in PcCreateSubdeviceDescriptor ([[Johannes Anderwald]])<br />
* Pass correct flags to KsProbeStreamIrp ([[Johannes Anderwald]])<br />
* Implement KSPROPERTY_CONNECTION_ALLOCATORFRAMING for CPortPinWaveCyclic + CPortPinWavePci ([[Johannes Anderwald]])<br />
* Fix various bugs such as wrong function definitions, using of uninitialized variables ([[Johannes Anderwald]])<br />
* Add macros which are not present in the WDK ([[Johannes Anderwald]])<br />
* Check return type of synchronized interrupt routine ([[Johannes Anderwald]])<br />
* Use PcHandlePropertyWithTable IPortPinWavePci ([[Johannes Anderwald]])<br />
* Store MiniportStream & pin instance in subdevice descriptor ([[Johannes Anderwald]])<br />
* Simplify irp handling code in class IIrpStream ([[Johannes Anderwald]])<br />
* Rewrite CPortPinWaveCyclic code to handle property request. It now uses PcHandlePropertyWithTable, which calls the supported property request handlers via a callback. The code is now a lot cleaner as KsPropertyHandler peforms input & output length checks and also handles basic support requests ([[Johannes Anderwald]])<br />
* Implement a Audio position handler for CPortPinWaveCyclic ([[Johannes Anderwald]])<br />
* Use the IDmaChannel::CopyFrom when copying sound bytes from an dma buffer. Fixes recording of sound with KsStudio ([[Johannes Anderwald]])<br />
* Make sure that the GUID_NULL handler only adds guid which are not already present in the guid array. Fixes duplicate entries of properties of Nodes in KsStudio ([[Johannes Anderwald]])<br />
* Handle Basic Support requests in a default way when the driver doesnt provide a BasicSupport handler ([[Johannes Anderwald]])<br />
* KSCATEGORY_AUDIO should be the first device category so that wdmaud can correctly assign virtual device ids ([[Johannes Anderwald]])<br />
* Check if there is an automation table ([[Johannes Anderwald]])<br />
* Add KSPROPSETID_Audio guid ([[Johannes Anderwald]])<br />
* Allocate data format after successful initialization of IPinWaveCyclic ([[Johannes Anderwald]])<br />
* Store Miniport Adapter in subdevice descriptor ([[Johannes Anderwald]])<br />
* Implement GUID_NULL handler for topology nodes ([[Johannes Anderwald]])<br />
* Implement setting / retrieving properties for topology nodes ([[Johannes Anderwald]])<br />
* Implement PcHandlePropertyWithTable ([[Johannes Anderwald]])<br />
* Use PcHandlePropertyWithTable to handle IOCTL_KS_PROPERTY requests ([[Johannes Anderwald]])<br />
* Handle variable sized PCPIN_DESCRIPTORs ([[Johannes Anderwald]])<br />
* Rewrite registering physical connection handling to support KSPROPERTY_PIN_PHYSICALCONNECTION ([[Johannes Anderwald]])<br />
* Implement CPortFilterWaveCyclic::FastDeviceIoControl ([[Johannes Anderwald]])<br />
* Add back PHYSICAL_ADDRESS workarround for IDmaChannel::PhysicalAddress ([[Johannes Anderwald]])<br />
* Only define guids for gcc ([[Johannes Anderwald]])<br />
* Add missing PURE interface function definitions ([[Johannes Anderwald]])<br />
* Initialize ResourceList members ([[Johannes Anderwald]])<br />
* Fix calculation when allocating new resources entries ([[Johannes Anderwald]])<br />
* Fix building of portcls with msvc ([[Johannes Anderwald]])<br />
* Store dispatch context in FsContext ([[Johannes Anderwald]])<br />
* Ignore return value in interrupt sync routine ([[Amine Khaldi]])<br />
* Disable assert for frame size check for now ([[Johannes Anderwald]])<br />
* Free buffer only if the irp was from kernel mode(hack 2 be removed) ([[Johannes Anderwald]])<br />
* remove unused includes ([[Amine Khaldi]])<br />
* Don't attempt copying an empty resource list ([[Amine Khaldi]])<br />
* Convert portcls to a C++ driver ([[Johannes Anderwald]])<br />
* Check that all pins have been closed when the last filter reference is gone ([[Johannes Anderwald]])<br />
* Add support for DirectKs ([[Johannes Anderwald]])<br />
* Implement IPortEvents interface for IPortTopology ([[Johannes Anderwald]])<br />
* Increment reference count only if resource list was passed ([[Johannes Anderwald]])<br />
* Implement IPortDMus_fnNewRegistryKey ([[Johannes Anderwald]])<br />
* Remove superflouous checks by ([[Amine Khaldi]])<br />
* Calculate resource list size with FIELD_OFFSET macro ([[Johannes Anderwald]])<br />
* Fix a big bug in IResourceList_fnAddEntryFromParent which didnt copy the untranslated resource list entry ([[Johannes Anderwald]])<br />
* Check if translated / untranslated resource list is empty ([[Johannes Anderwald]])<br />
* Fix lots of COM object leaks ([[Johannes Anderwald]])<br />
* Implement freeing of all registered physical connections and release of the registered power management interface ([[Johannes Anderwald]]) <br />
* Check if current partially processed irp has been cancelled and complete it in that case ([[Johannes Anderwald]])<br />
* Switch portcls to use the provided ks irp queue function ([[Johannes Anderwald]])<br />
* Store real dispatched object in FsContext2 ([[Johannes Anderwald]])<br />
* Implement a fast device i/o handler ([[Johannes Anderwald]])<br />
* Remove the hack of checking wether pin create request is passed. Since create items now work nicely, use a different function and handle pin creation requests seperately. ([[Johannes Anderwald]])<br />
* Interrupt is only shareable if the type is latched ([[Johannes Anderwald]])<br />
* Only transfer as maximum the FrameSize which was obtained by IMiniportWaveCyclicStream::SetNotficationFreq ([[Johannes Anderwald]])<br />
* Remove the pin service group member before queing the workitem to close the stream ([[Johannes Anderwald]])<br />
* Implement dynamic unregistration of physical connections ([[Johannes Anderwald]])<br />
* Implement IUnregisterPhysicalConnection interface for all port drivers ([[Johannes Anderwald]])<br />
* The pin creation parameters are now placed right after the reference string. Handle this case in KsValidateConnectRequest ([[Johannes Anderwald]])<br />
* Only store the passed create items, no need to copy the passed create items. This is required for enabling dynamic audio devices ([[Johannes Anderwald]])<br />
* Fix copying of the object class in KsAllocateObjectHeader ([[Johannes Anderwald]])<br />
* Check for KSCREATE_ITEM_IRP_STORAGE flag in KsCreate ([[Johannes Anderwald]])<br />
* Rewrite PcRegisterIoTimeout, PcUnregisterIoTimeout to support more than one PIO_TIMER_ROUTINE per device object ([[Johannes Anderwald]])<br />
<br />
=== SCSIPORT ===<br />
* Add stubs for unimplmented cases in ScsiPortNotification. ([[Olaf Siejka]])<br />
<br />
=== SYSAUDIO ===<br />
* Fix several bugs in the mixer handling code ([[Johannes Anderwald]])<br />
* Disable kmixer untill all issues are resolved ([[Johannes Anderwald]])<br />
* Release file object of pin to prevent reference leak ([[Johannes Anderwald]])<br />
* Fix creation of mixer pin ([[Johannes Anderwald]])<br />
* Store dispatch context in FsContext2 ([[Johannes Anderwald]])<br />
* Implement KSPROPERTY_SYSAUDIO_DEVICE_INTERFACE_NAME ([[Johannes Anderwald]])<br />
* Refactor sysaudio pin creation ([[Johannes Anderwald]])<br />
* Remove the hack of checking wether pin create request is passed. Since create items now work nicely, use a different function and handle pin creation requests seperately. ([[Johannes Anderwald]])<br />
<br />
=== TCPIP ===<br />
<br />
=== UNIATA ===<br />
* Synched the UniATA Inf to the internal support list. Now ROS can detect all supported SATA Controllers even after 1st stage and properly shows them in the HW Wizard. ([[Daniel Reimer]])<br />
<br />
=== USB ===<br />
<br />
* Initialize DPC before connecting interrupt with IoConnectInterrupt in ehci_alloc, ohci_alloc and uhci_alloc. Probably fixes crashes on real hardware. ([[Michael Martin]])<br />
<br />
=== VIDEOPRT ===<br />
* Add missing exports ([[Timo Kreuzer]])<br />
<br />
=== WDMAUD_KERNEL ===<br />
* Implement support for DRV_QUERYDEVICEINTERFACESIZE, DRV_QUERYDEVICEINTERFACE ([[Johannes Anderwald]])<br />
* Set correct irp dispatch code ([[Johannes Anderwald]])<br />
* Pointer / handle values should be printed with %p. ([[Christoph von Wittich]])<br />
* Add the sum / mixer node to the destination pin ([[Johannes Anderwald]])<br />
* Only create MIXERVOLUME_DATA when there is an actual range ([[Johannes Anderwald]])<br />
* Use unsigned members to calculate the range ([[Johannes Anderwald]])<br />
* When enumerating controls, cControls *tells* the number of controls not *cConnections*. Fix a crash in XP sndvol32 ([[Johannes Anderwald]])<br />
* Clear the entire struct, not just part of it ([[Johannes Anderwald]])<br />
* WdmAudMixerCapabilities just provides the index of a device, not its handle. Fixes displaying of duplicate mixer name in sndvol32 ([[Johannes Anderwald]])<br />
* Verify that a mixer line exists ([[Johannes Anderwald]])<br />
* Use KsProbeStreamIrp in wdmaud to probe user buffers ([[Johannes Anderwald]])<br />
* Remove a few hacks which were required to pass down irps to portcls ([[Johannes Anderwald]])<br />
* Implement MIXER_GETLINEINFOF_COMPONENTTYPE for WdmAudGetLineInfo ([[Johannes Anderwald]])<br />
* Implement MIXER_GETLINECONTROLSF_ONEBYID for WdmAudGetLineControls ([[Johannes Anderwald]])<br />
* Clear MIXER_OBJECTF_HMIXER from Flags ([[Johannes Anderwald]])<br />
* Fix a bug SetGetVolumeControlDetails which fixes retrieving current volume level (verified by sndvol32.exe from XP / mmsys.cpl ReactOS) ([[Johannes Anderwald]])<br />
* Implement setting / getting volume level ([[Johannes Anderwald]])<br />
* Implement Un*Muting of audio lines ([[Johannes Anderwald]])<br />
* Rewrite Wave API to enumerate wave out / in devices at startup ([[Johannes Anderwald]])<br />
* Enumerate controls for source and destination lines ([[Johannes Anderwald]])<br />
* Several bugfixes for mixer source / destination line detection code ([[Johannes Anderwald]])<br />
* Store destination line in LineList ([[Johannes Anderwald]])<br />
* Implement WdmAudGetLineInfo for MIXER_GETLINEINFOF_LINEID ([[Johannes Anderwald]])<br />
* Implement enumerating mixer source and destination lines ([[Johannes Anderwald]])<br />
* Implement copying mixer capabilities ([[Johannes Anderwald]])<br />
* Implement opening / closing of mixer devices ([[Johannes Anderwald]])<br />
* Check if allocation succeeded ([[Amine Khaldi]])<br />
* Implement retrieving devicename by looking up in the registry ([[Johannes Anderwald]])<br />
* Set the stream state to run when opening the device ([[Johannes Anderwald]])<br />
* Set the stream state to stop when closing the device ([[Johannes Anderwald]])<br />
* Implement retrieving position ([[Johannes Anderwald]])<br />
* Implement kernel side of notifying clients of volume / mute control changes ([[Johannes Anderwald]])<br />
<br />
== Static Libraries ==<br />
=== CMLIB ===<br />
* CmpPrepareKey: Call CmpPrepareKey vice CmpPrepareIndexOfKeys for cell signature of CM_KEY_NODE_SIGNATURE. Fixes ASSERT in cminit.c that occurs on reboot after installing some applications. ([[Michael Martin]])<br />
<br />
=== CRT ===<br />
* Rewrite time implementation, implement 64bit time support. ([[Timo Kreuzer]])<br />
<br />
=== IP ===<br />
<br />
=== ATL ===<br />
* Initial submit with enough code to compile new browseui classes ([[Andrew Hill]])<br />
* Added Init and Term to CComModule ([[Andrew Hill]])<br />
<br />
=== DELAYIMP ===<br />
* Implement delayimp lib. ([[Timo Kreuzer]])<br />
<br />
= USETUP =<br />
<br />
= Win32&trade; Personality =<br />
== User mode subsystem server (CSRSS) ==<br />
<br />
== Kernel-mode subsystem server (Win32K) ==<br />
<br />
* experimental message handling implementation for ClickLock feature ([[Matthias Kupfer]])<br />
* KeyboardThreadMain: Set RepeatRate to 1 vice 0. Fixes text input in OpenOffice Writer. ([[Michael Martin]])<br />
* Various AlphaBlend fixes ([[Gregor Schneider]])<br />
* Don't try to delete non existing XLateObjects ([[Gregor Schneider]])<br />
* Implement and optimize FloodFill ([[Gregor Schneider]])<br />
* Use system wide caret width and height if input parameters are zero ([[Gregor Schneider]], {{bug|1559}})<br />
* Fix a typo in EngMovePointer ([[Gregor Schneider]])<br />
* ChangeDisplaySettings improvements ([[Gregor Schneider]])<br />
* StretchBlt: Don't access the pattern GetPixel function pointer if it hasn't been set ([[Gregor Schneider]])<br />
* BitBlt: Only set the pattern function pointer if the pattern surface is valid ([[Gregor Schneider]])<br />
* Allocate span memory for every clipping type, not only for one ([[Gregor Schneider]])<br />
* StretchBlt: Copy the source rectangle after checking it, create input rectangle from destination size if source is not used ([[Gregor Schneider]])<br />
* Various resource and failure fixes ([[Amine Khaldi]], [[Gregor Schneider]])<br />
* Sync and adapt Wine font metric code for setting first, last, default and break characters ([[Gregor Schneider]])<br />
* co_IntLoadSysMenuTemplate: only copy buffer if prior operation succeeded ([[Gregor Schneider]], {{bug|4803}})<br />
* GetTransform: Add support for more transforms, stub out missing functionality, fix return values ([[Gregor Schneider]])<br />
* NtGdiGetRasterizerCaps: fix return value on success ([[Kamil Hornicek]])<br />
* Implement brush realization. ([[Timo Kreuzer]])<br />
* Rewrite XLATEOBJ implementation. ([[Timo Kreuzer]])<br />
* Implement EngFileIoControl and EngFileWrite. ([[Timo Kreuzer]])<br />
* Remove XlatePatternToDest from BLTINFO and DIB code. ([[Amine Khaldi]])<br />
* Don't cleanup the XLATEOBJ in GreSetPointerShape when it wasn't initialized. ([[Amine Khaldi]])<br />
* Rewrite (NtUser)SystemParametersInfo implementation. ([[Timo Kreuzer]])<br />
* Remove syscolor pen support. ([[Timo Kreuzer]])<br />
* Implement PALETTE_ulGetNearestPaletteIndex, PALETTE_ulGetRGBColorFromIndex, PALETTE_vGetBitMasks. ([[Timo Kreuzer]])<br />
* Implement GreMovePointer and GreSetPointerShape. ([[Timo Kreuzer]])<br />
* Fix LIST_FOR_EACH and LIST_FOR_EACH_SAFE. ([[Timo Kreuzer]])<br />
<br />
== Services ==<br />
<br />
=== AUDIOSRV ===<br />
* Fix a lock release leak ([[Russel Rice]])<br />
* Check if allocation succeeded ([[Johannes Anderwald]])<br />
* Wait untill each audio service has been started ([[Johannes Anderwald]])<br />
<br />
=== RPC Server === <br />
<br />
=== Eventlog ===<br />
<br />
=== DHCP ===<br />
* Fix derefercing of null pointer ([[Amine Khaldi]])<br />
<br />
== Control panel applets ==<br />
=== ACCESS ===<br />
* Use IntToPtr instead of casting. ([[Samuel Serapión]])<br />
<br />
=== APPWIZ ===<br />
* Check if a shortcut to shortcut is made and resolve it in that case ([[Johannes Anderwald]])<br />
<br />
=== CONSOLE ===<br />
* Use LPARAM instead of LONG. ([[Samuel Serapión]])<br />
<br />
=== DESK ===<br />
* Bind DragFullWindows property to configuration checkbox. ([[Matthias Kupfer]])<br />
<br />
=== MAIN ===<br />
* Enable experimental ClickLock feature via mouse settings ([[Matthias Kupfer]])<br />
* Use IntToPtr instead of casting. ([[Samuel Serapión]])<br />
<br />
=== MMSYS ===<br />
* Implement reading preferred playback / record device ([[Johannes Anderwald]])<br />
* Make sure that no duplicate wdmaud.drv audio drivers exists as winmm currently not recognizes duplicate audio driver entries ([[Johannes Anderwald]])<br />
* Fix a crash when an application hasnt defined a event label ([[Johannes Anderwald]])<br />
* Rewrite sound scheme handling ([[Johannes Anderwald]])<br />
* Implement changing sound scheme & sound action ([[Johannes Anderwald]])<br />
* Implement updating volume position / mute state after receiving a notification ([[Johannes Anderwald]])<br />
* Use IntToPtr instead of casting, use INT_PTR instead of INT. ([[Samuel Serapión]])<br />
<br />
=== NCPA ===<br />
* Use INT_PTR instead of INT. ([[Samuel Serapión]])<br />
<br />
=== SYSDM ===<br />
* Use INT_PTR instead of INT. ([[Samuel Serapión]])<br />
<br />
== Win32&trade; Applications ==<br />
<br />
* Sync WineFile to Wine 1.1.31 ([[Daniel Reimer]])<br />
* Sync WordPad and Winhlp32 and xcopy and write to Wine 1.1.31 ([[Daniel Reimer]])<br />
<br />
=== Downloader ===<br />
<br />
=== Explorer ===<br />
* Don't add quick launch icon copies after showing a context menu ([[Gregor Schneider]], {{bug|2453}})<br />
<br />
=== Explorer_new ===<br />
* Rename a few interfaces in explorer_new to the correct name ([[Andrew Hill]])<br />
<br />
=== Notepad ===<br />
<br />
=== Paint ===<br />
<br />
=== RApps ===<br />
* A dozen of Rapps Updates. ([[Daniel Reimer]] [[Victor Martinez]])<br />
<br />
=== Servman ===<br />
<br />
=== Solitaire===<br />
* Adjust to use cardlib as a shared lib ([[Gregor Schneider]])<br />
* Allow to choose card decks from 12 instead of 4 options ([[Gregor Schneider]], {{bug|2535}})<br />
<br />
=== Spider ===<br />
* Add a spider solitaire clone, convert catch22 cardlib to a static library ([[Gregor Schneider]])<br />
* Fix a deck complete bug ([[Gregor Schneider]], {{bug|4886}})<br />
* Fix misc game related bugs ([[Gregor Schneider]])<br />
* Allow to choose card decks from 12 instead of 4 options ([[Gregor Schneider]])<br />
<br />
=== Taskmgr ===<br />
<br />
== Win32&trade; Libraries ==<br />
* Sync d3d8, d3d9, ddraw, wined3d with Wine 1.1.30 ([[Kamil Hornicek]])<br />
<br />
=== ADVAPI32 ===<br />
* Check Input Parameter (fixes a skype crash) ([[Johannes Anderwald]])<br />
* Fix broken check ([[Johannes Anderwald]])<br />
<br />
=== BROWSEUI ===<br />
* Convert existing classes to C++/ATL ([[Andrew Hill]])<br />
* Add AddressBand, AddressEditBox, BandProxy, BaseBar, BaseBarSite, BrandBand, InternetToolbar, ShellBrowser, ToolsBand, and TravelLog ([[Andrew Hill]])<br />
* Add stub implementations of commonbrowser, globalfoldersettings, and regtreeoptions ([[Andrew Hill]])<br />
<br />
=== CARDS ===<br />
* Added 11 new Backs for my bavarian cards dll. Way better than using 12 times the same ([[Daniel Reimer]])<br />
<br />
=== DDRAW ===<br />
* Merge various fixes and initial support for DDraw HEL from the ReactX branch ([[Kamil Hornicek]], [[Magnus Olsen]])<br />
<br />
=== DSOUND ===<br />
* Implement IDirectSoundCaptureBuffer8::Stop, IDirectSoundCaptureBuffer8::Lock, IDirectSoundCaptureBuffer8::Unlock, IDirectSound8::GetCaps, IDirectSound8::Compact, IDirectSoundCaptureBuffer::GetCaps, IDirectSoundCaptureBuffer::GetCurrentPosition, IDirectSoundCaptureBuffer::GetFormat, IDirectSoundCaptureBuffer::GetStatus, IDirectSoundCaptureBuffer::Start, DirectSoundEnumerateA, DirectSoundEnumerateW, DirectSoundCaptureEnumerateA, DirectSoundCaptureEnumerateW, GetDeviceID<br />
* Implement changing the stream format for secondary buffers<br />
* Fix checking of flags found by [[Ged Murphy]]<br />
* Register IDirectSound8, IDirectSoundCapture8 with COM<br />
* Verify if wrong guid is passed in IDirectSound8::Initialize<br />
* Check for invalid guids passed to IDirectSoundCapture::Initialize<br />
* Close pin handle when the capture buffer is released<br />
* Compute a compatible pin format when the format is not supported natively by the driver<br />
* Fix shadowing of global variable (Usurp)<br />
* Verify that directsound global info has already initialized in IDirectSound8::Initialize<br />
* DllRegisterServer / DllUnregisterServer are taken from Wine DSound implementation (John K. Hohm)<br />
* Implement stereo to mono channel conversion ([[Johannes Anderwald]])<br />
* Create a thread which performs the mixing ([[Johannes Anderwald]])<br />
* Add more checks IDirectSoundCapture::CreateCaptureBuffer ([[Johannes Anderwald]])<br />
* Implement IDirectSoundNotify interface ([[Johannes Anderwald]])<br />
<br />
=== GDI32 ===<br />
* Remove duplicate WToA conversion routine, update the kept version to current Wine ([[Gregor Schneider]])<br />
* Various resource and failure fixes ([[Amine Khaldi]], [[Gregor Schneider]])<br />
* GetGlyphOutline: fail if output or transformation matrix buffers are not passed ([[Gregor Schneider]])<br />
* Prevent possible buffer overrun in TranslateCharsetInfo, ([[Gregor Schneider]], Wine bug #19819)<br />
<br />
=== GDIPLUS ===<br />
<br />
=== IPHLPAPI ===<br />
<br />
=== KERNEL32 ===<br />
* Update German NLS Files in Kernel32 ([[Daniel Reimer]])<br />
* Comm: Supply default ansi codepage when converting from unicode ([[Gregor Schneider]])<br />
* GetFileAttributes: Return INVALID_FILE_ATTRIBUTES when no filename is passed ([[Gregor Schneider]])<br />
* Various resource and failure fixes ([[Amine Khaldi]], [[Gregor Schneider]])<br />
* Extend checks for ATOM handling ([[Gregor Schneider]])<br />
<br />
=== KSUSER ===<br />
* Fix a broken cast (x64 compability) ([[Johannes Anderwald]])<br />
* Fix a BufferOverflow ([[Johannes Anderwald]])<br />
* Ks expects a '\\' for each pin creation request ([[Johannes Anderwald]])<br />
* ObjectLength was not correctly set, thus truncating the request ([[Johannes Anderwald]])<br />
* Zero byte was not set at correct offset, potentialy leading to a heap overflow ([[Johannes Anderwald]])<br />
<br />
=== MSAFD ===<br />
<br />
=== MSI ===<br />
<br />
* Schedule a rename operation also for ERROR_USER_MAPPED_FILE. Prevents msi from aborting an install when attempting to overwrite font files. Open Office should now install successfully. ([[Michael Martin]])<br />
<br />
=== MSVCRT ===<br />
* Various *printf fixes ([[Geoffroy Couprie]], [[Gregor Schneider]], {{bug|4584}})<br />
* Various _ecvt fixes ([[Gregor Schneider]])<br />
* Fix mbslwr ([[Gregor Schneider]], {{bug|4755}})<br />
* Use ALL_X macros in fstat ([[Gregor Schneider]])<br />
* Import tkreuzer's time implementation from AMD64 branch ([[Gregor Schneider]])<br />
* Various fixes to the time64 implementation, delete old implementation ([[Gregor Schneider]])<br />
* Sync scanf to Wine ([[Gregor Schneider]])<br />
<br />
=== NETSHELL ===<br />
* Fix displaying of random characters if there is no device name ([[Johannes Anderwald]])<br />
<br />
=== OPENGL32 ===<br />
* Handle WGL_SWAP_MAIN_PLANE case in SwapLayerBuffers stub ([[Kamil Hornicek]])<br />
* Ported wglUseFontOutlines, wglUseFontBitmaps from the glDirect driver ([[Kamil Hornicek]])<br />
<br />
=== SECUR32 ===<br />
<br />
=== SETUPAPI ===<br />
* Add SetupDiGetDeviceInterfaceAlias, SetupDiOpenDeviceInterfaceRegKey stubs ([[Johannes Anderwald]])<br />
* RegQueryValueExW returns ERRROR_SUCCESS ([[Johannes Anderwald]])<br />
<br />
=== SHELL32 ===<br />
* Partly implement IBandSite, IMenuBand ([[Johannes Anderwald]])<br />
* Fix several bugs in printer ' IShellFolder implementation ([[Johannes Anderwald]])<br />
* Partly implement IShellFolder::GetAttributesOf ([[Johannes Anderwald]])<br />
* Implement IShellFolder::GetDisplayNameOf for root pidl ([[Johannes Anderwald]])<br />
* Implement ISF_ControlPanel_fnParseDisplayName to parse display names ([[Johannes Anderwald]])<br />
* Implement ISFHelper_fnCopyItems for desktop shellfolder ([[Johannes Anderwald]])<br />
* Even without a CMINVOKECOMMANDINFOEX structure a link should be executed with the supplied parameters ([[Gregor Schneider]])<br />
* Fix double close of registry key ([[Andrew Hill]])<br />
<br />
=== SHLWAPI ===<br />
<br />
=== SYSSETUP ===<br />
<br />
=== USER32 ===<br />
<br />
* DIALOG_CreateIndirect: Save the current focused window after sending WM_INITDIALOG as the current window with focus could have been set in the dialog's procedure. Fixes setting focus on Open and Close dialogs to the FileName edit control in OpenOffice. ([[Michael Martin]])<br />
* GetDlgItem: Change to WINE's implementation as ours was incorrect. Remove function GetDlgItemEnumProc and struct GETDLGITEMINFO as they are no longer needed. Fixes drawing issues in Open and Save dialogs for OpenOffice. ([[Michael Martin]])<br />
* Fix 2 user32 winstation test failures ([[Giannis Adamopoulos]])<br />
* Restructure and simplify CreateCursorFromData, allow to create colored icons ([[Gregor Schneider]])<br />
* Handle WM_SETREDRAW messages differently in the DefWndProc, riched20 regression ([[Gregor Schneider]], {{bug|4098}})<br />
* Only set text resource in DefWndProcA on WM_NCCREATE if passed and exists ([[Gregor Schneider]], {{bug|4766}})<br />
<br />
=== USERENV ===<br />
- Set ProgramFiles, CommonProgramFiles environment variable ([[Johannes Anderwald]])<br />
<br />
=== WINMM ===<br />
* Fix a heap corruption at process shutdown ([[Samuel Serapión]])<br />
* Partial sync winmm to wine head ([[Johannes Anderwald]])<br />
<br />
=== WDMAUD.DRV ===<br />
* Implement support for DRV_QUERYDEVICEINTERFACESIZE, DRV_QUERYDEVICEINTERFACE for recording / mixer / midi*in midi*out ([[Johannes Anderwald]])<br />
* Set the audio pin to KSSTATE_RUN if it is wave*out pin ([[Johannes Anderwald]])<br />
* Implement support for manually starting / stopping a pin, which is used for recording ([[Johannes Anderwald]])<br />
* Partially sync winmm ([[Johannes Anderwald]])<br />
* Make sure string is null terminated ([[Johannes Anderwald]])<br />
* Copy all required fields for WaveIn devices ([[Johannes Anderwald]])<br />
* Use double of the reported FrameSize to increase audio playback performance ([[Johannes Anderwald]])<br />
* Use default of 100 audio buffers if there are no prefered frame size available ([[Johannes Anderwald]])<br />
* Implement support for reading from waveIn devices ([[Johannes Anderwald]])<br />
* Forward mixer control requests to wdmaud driver ([[Johannes Anderwald]])<br />
* Implement usermode mixing test mode ([[Johannes Anderwald]])<br />
* Implement retrieving the preferred frame size ([[Johannes Anderwald]])<br />
* Implement retrieving position ([[Johannes Anderwald]])<br />
* The wave / mixer / midi handles are kernel handles, consequently wdmaud_kernel must close them ([[Johannes Anderwald]])<br />
* Implement a listening thread which waits for volume level / mute control changes ([[Johannes Anderwald]])<br />
<br />
=== WS2_32_NEW ===<br />
<br />
=== WINSPOOL ===<br />
* Fix error return of EnumPrinterKeyA/W ([[Johannes Anderwald]])<br />
<br />
== Regression tests ==<br />
<br />
{{Navigation Changelog}}</div>Sabikihttps://reactos.org/wiki/index.php?title=0.3.10&diff=247510.3.102009-06-24T11:13:16Z<p>Sabiki: template</p>
<hr />
<div>== General Information ==<br />
{|<br />
|-<br />
|Used Build Environment:<br />
|?<br />
|-<br />
|Release Engineers:<br />
|?<br />
|}<br />
<br />
== Source Information ==<br />
{|<br />
|-<br />
|Release Date:<br />
|?<br />
|-<br />
|Branched from Trunk revision:<br />
|r41588 - 23 June, 2009<br />
|<br />
|-<br />
|Final source:<br />
|?<br />
|-<br />
|}<br />
<br />
== Links ==<br />
* [[ChangeLog-0.3.10|ChangeLog for this Release]]<br />
* [[Tests for 0.3.10|Tests for this Release]]<br />
<br />
{{Navigation Versions}}</div>Sabikihttps://reactos.org/wiki/index.php?title=ChangeLog-0.3.10&diff=24586ChangeLog-0.3.102009-06-13T03:09:32Z<p>Sabiki: template</p>
<hr />
<div>This is the changelog for ReactOS™ [[0.3.10|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 [[ChangeLog-0.3.9|version 0.3.9]] (released 26 April, 2009).<br />
<br />
= General =<br />
== Generic 0.3.10 Changes ==<br />
<br />
== Translations ==<br />
<br />
= Headers =<br />
== DDK ==<br />
<br />
== NDK ==<br />
<br />
== PSDK ==<br />
<br />
= Host Tools =<br />
<br />
== NCI ==<br />
<br />
== RBUILD ==<br />
<br />
== WMC ==<br />
<br />
= Core =<br />
== Bootsectors ==<br />
<br />
== Bootloader (FreeLoader) ==<br />
<br />
== Kernel and Executive (NTOSKRNL) ==<br />
=== CC ===<br />
<br />
=== EX ===<br />
<br />
=== IO ===<br />
<br />
=== KD ===<br />
<br />
=== KDBG ===<br />
<br />
=== KE ===<br />
<br />
=== MM ===<br />
<br />
=== OB ===<br />
<br />
=== PS ===<br />
<br />
=== SE ===<br />
<br />
== Run Time Library (RTL) ==<br />
<br />
== Kernel Mode Drivers ==<br />
<br />
=== AFD ===<br />
<br />
=== FASTFAT ===<br />
<br />
=== FTFD ===<br />
<br />
=== HID ===<br />
<br />
=== ISAPNP ===<br />
<br />
=== KMIXER ===<br />
<br />
=== KS ===<br />
<br />
=== NPFS ===<br />
<br />
=== NDIS ===<br />
<br />
=== PORTCLS ===<br />
<br />
=== SYSAUDIO ===<br />
<br />
=== TCPIP ===<br />
<br />
=== USB ===<br />
<br />
== Static Libraries ==<br />
=== CRT ===<br />
<br />
=== IP ===<br />
<br />
=== MINGW ===<br />
<br />
= USETUP =<br />
<br />
= Win32&trade; Personality =<br />
== Kernel-mode subsystem server (Win32K) ==<br />
<br />
== Services ==<br />
=== TelnetD ===<br />
<br />
=== Umpnpmgr ===<br />
<br />
== Control panel applets ==<br />
=== DESKTOP ===<br />
<br />
=== TIMEDATE ===<br />
<br />
== Win32&trade; Applications ==<br />
=== Command Prompt ===<br />
<br />
=== Doskey ===<br />
<br />
=== Format ===<br />
<br />
=== SC ===<br />
<br />
=== Solitaire ===<br />
<br />
=== Taskmgr ===<br />
<br />
== Win32&trade; Libraries ==<br />
=== ADVAPI32 ===<br />
<br />
=== GDI32 ===<br />
<br />
=== KERNEL32 ===<br />
<br />
=== MSAFD ===<br />
<br />
=== MSVCRT ===<br />
<br />
=== NEWDEV ===<br />
<br />
=== SHELL32 ===<br />
<br />
=== SYSSETUP ===<br />
<br />
=== USER32 ===<br />
<br />
=== USERENV ===<br />
<br />
== Regression tests ==<br />
<br />
=== Rosautotest ===<br />
<br />
{{Navigation Changelog}}</div>Sabikihttps://reactos.org/wiki/index.php?title=List_of_Translators&diff=17867List of Translators2008-03-16T03:08:58Z<p>Sabiki: add my name</p>
<hr />
<div>This page's intent is to collect information about translation of the website, apps and the people capable to do that.<br />
Follow these Standards when translating. [[RC_File_Standards]]<br />
<br />
== Translation tables for languages ==<br />
According to recent decision in mailing lists, this glossary/dictionary won't exist in the Wiki, but in some other form, preferably XML document.<br />
I think for now we're going to stick to Wiki. I don't recall why we didn't like that solution, but I think for now it's the simplest and efficient to do.<br />
<br />
[[Unified Dictionary]]<br />
<br />
== Introduction to translating ==<br />
If you would like to translate ReactOS into your native language, but you don't know how to do it, here is an article to help you to get started: [[Translating introduction]]<br />
<br />
== Translation of the wiki ==<br />
Please ensure to use the [[Language templates]] in your article.<br />
<br />
== Status of translation ==<br />
<i>2005-09-13</i><br />
<br />
The new ReactOS Content Management System works well. The website translation process will start in a few days.<br />
<br />
-> [[New_Homepage_Content|Please add more contents to this wiki page!]]<br />
<br />
<br />
<i>2005-05-17</i><br />
<br />
<strike>Currently, website translation is being stopped until new CMS is installed.<br />
But process of ReactOS itself translation is going fine.</strike><br />
<br />
== Things to be translated ==<br />
*New ReactOS Homepage ([[New Homepage Content]])<br />
**website content itself<br />
**[[RosCMS]] interface<br />
<br />
*[[Translating introduction|ReactOS itself]]<br />
<br />
== Translation software ==<br />
[[ROS CMS]]<br />
<br />
== People available for certain languages ==<br />
<br />
=== [[Arabic translation|Arabic]] ===<br />
*Abshoy Samuel (abshoy@hotmail.com)<br />
<br />
=== [[Bulgarian translation|Bulgarian]] ===<br />
*ССТАНЕВ (sstpr кльомба narod.ru)<br />
*Violin Iliev (violin кльомба developer.bg)<br />
<br />
=== [[Catalan translation|Catalan]] ===<br />
*El_libre (el.libre@gmail.com)<br />
*Dsltech (dsltech4ever@gmail.com)<br />
*Hiper (mtbochaca@gmail.com)<br />
<br />
=== [[Chinese Translations|Chinese]] ===<br />
*CaoCao (ccao_replace_this_by_at_myrealbox.com)<br />
*BSCH (bsch1983_replace_this_by_at_gmail.com)<br />
*Larry Li (larry_replace_this_by_at_mimios.com)<br />
*Tobias Ussing (tobiasthecommie_replace_this_by_at_hotmail.com)<br />
*wenbob (wenbob_replace_this_by_at_gmail.com)<br />
*wind (wind19831201_replace_this_by_at_163.com)<br />
*billyswong (billyswong_replace_this_by_at_gmail.com)<br />
*Lexon Li(lexon.li -at- gmail.com)<br />
*雄'''(mickey139)'''(e_zb@21cn.com, ezb@mail.gywb.cn)<br />
<br />
=== [[Czech Translations|Czech]] And [[Slovak Translations|Slovak]] ===<br />
*Kamil Hornicek (tykef_replace_this_by_at_atlas.cz)<br />
*Filip Navara (xnavara_replace_this_by_at_volny.cz)<br />
*Fero Vlkolinsky (f.vlkolinsky_replace_this_by_at_zoznam.sk)<br />
*Tomas Havel (info_replace_this_by_at_tomhavel.com)<br />
*Kario (kario[at]szm.sk)<br />
<br />
=== [[Dutch translation|Dutch]] ===<br />
*Mark IJbema (LC) ( mark@mostly-harmless.nl / vandread )<br />
*Timothy Schepens (tischepe_replace_this_by_at_fastmail.fm)<br />
*Emil (ROS_replace_this_by_at_Q-Collective.org)<br />
*Jasper van de Gronde (th.v.d.gronde_replace_this_by_at_hccnet.nl)<br />
*Lionel Lowie (i386DX -at- hotmail.com)<br />
*Joost de Meij (dreamsmsn -at -gmail.com)<br />
<br />
=== [[Finnish_localization|Finnish]] ===<br />
*Mikael Nousiainen ( turja_replace_this_by_at_mbnet.fi / Turja )<br />
<br />
=== [[French_translation|French]] ===<br />
*Rick Langschultz (absleadcoder_replace_this_by_at_cox.net)<br />
*Momo (mailtomomo_replace_this_by_at_free.fr)<br />
*Samuel (samuel.vanneste_replace_this_by_at_tiscali.fr)<br />
*Benoît (benoit.ansieau_replace_this_by_at_wanadoo.fr)<br />
*Jérôme Signouret (ggcom_replace_it_by_at_tele2_dot_fr)<br />
*G.Maton alias zoken (mustang9_replace_it_by_at_gmail_dot_com)<br />
*Benoit Plante (cmoibenlepro_replace_it_by_at_hotmail_dot_com)<br />
*Pierre Schweitzer - Heis Spiter (heis_spiter_replace_it_by_at_hotmail_dot_com)<br />
*Olivier Jacques (webmaster_replace_this_by_at_vieprivee_dot_com)<br />
*Sylvain Petreolle - Usurp (spetreolle_replace_it_by_at_yahoo_dot_fr)<br />
<br />
=== Frisian ===<br />
*Berend Ytsma (berendy_replace_this_by_at_gmail.com)<br />
<br />
=== [[German translation|German]] ===<br />
*Ashran (ashran_replace_this_by_at_hackersquest.org)<br />
*Theodor Reppe (theodor #AT# reppes.de)<br />
*Jorg Abderhalden (jda_replace_this_by_at_abderhalden.cx)<br />
*Bjorn Fischer (thebear80_replace_this_by_at_gmx.net)<br />
*Michael Fritscher (michael_replace_this_by_at_fritscher.net)<br />
*Thomas Weidenmueller (w3seek)<br />
*David Flechl (webmaster_replace_this_by_at_wishmaster.at)<br />
*Max (max.hohenegger_replace_this_by_at_fh-rosenheim.de)<br />
*RobertK<br />
*Fabian Kupferschmid (ich-m_replace_this_by_at_g-kein-spam.com)<br />
*Sascha Gehrke (mail_replace_this_by_at_redviper.net)<br />
*Stefan Pflueger (stefan_replace_this_by_at_homepage4us.de)<br />
*Martin Rottensteiner (martin2004_replace_this_by_at_speed-tiscali.at)<br />
*Michael Wirth (TP)<br />
*Patrick Mächler (valio_replace_this_by_at_gmx.ch / Valio)<br />
*Klemens Friedl (frik85_replace_this_by_at_hotmail dot com)<br />
*e7 (e7online %at_home_at% webºde)<br />
*Stephan Verbücheln (Erlenmayr_replace_this_by_at_gmail_dot_com)<br />
*David Hinz (hinz.david [aT] gmail d.0.t com)<br />
*Friedrich Stange (dj_smith_reactos #AT# online.de)<br />
*Christian Heffner (mail_replace_this_by_at_pellesc_dot_de)<br />
*Timo Kreuzer (timo.kreuzer[at]web[dot]de<br />
*Daniel Reimer (reimer.daniel@freenet.de)<br />
*Karsten Kleinow ( karsten.kleinow at digitalexperts (dot) de )<br />
<br />
=== [[Greek_translation|Greek (Hellenic)]] ===<br />
*Apostolos Alexiadis (djapal@gmail.com)<br />
<br />
=== [[Hebrew Translation | Hebrew]] ===<br />
*Liron Ben-David (rosheb@gmail.com)<br />
*Yochai Meir (rosheb@gmail.com)<br />
<br />
=== [[Hungarian translation|Hungarian]] ===<br />
*Robert Horvath - Talley<br />
*Gergely Risko - Cake<br />
*Peter Nagy - Kritika<br />
*Peter Lukacs - Hungi<br />
<br />
=== Icelandic ===<br />
*Björgvin Ragnarsson (nifgraup_replace_this_by_at_hotmail.com)<br />
<br />
=== Irish Gaelic ===<br />
*Rick Langschultz (absleadcoder_replace_this_by_at_cox.net)<br />
<br />
=== Italian ===<br />
*Vincenzo Petrucci (vincenzo.petrucci_replace_this_by_at_gmail.com)<br />
*Lorenzo (garbage_replace_this_by_at_loz.it)<br />
*Federico (larsss_replace_this_by_at_jumpy.it)<br />
*Daniele (dforsi_replace_this_by_at_gmail.com)<br />
*>>Forward Agency (fwdprojectsREMOVE@THISemail.it)<br />
*Gabriel ilardi (gabrielilardi_replace_this_by_at_hotmail.it)<br />
*Claudio alias Max_ita (schumi75_replace_this_by_at_email.it)<br />
*Morejatroid (jack.monegato@virgilio.it)<br />
*[[Meg112]] alias Luca Porcelli (meg112@hotmail.it)<br />
<br />
=== [http://reactos.2chv.net/wiki/?FrontPage Japanese] ===<br />
*Masahiro Taguchi (mtg_replace_this_by_at_ce.wakwak.com)<br />
*tsk (tsk_n_replace_this_by_at_mail.goo.ne.jp)<br />
*3 (i_have_a_lot_of_mp3player_replace_this_by_at_yahoo.co.jp)<br />
*sabiki94 (jptomoya [at] yahoo [dot] co [dot] jp)<br />
<br />
=== Korean ===<br />
*Won Star (wonst719__at__hanmir__dot__com)<br />
*[[seungju kim]] (admin[[Image:At-reactos.jpg]]manateeshome.com)<br />
<br />
=== [[Lithuanian translation|Lithuanian]] ===<br />
* [[Vytis Girdžijauskas]] (Language Maintainer)<br />
*Andrius Prekevicius (info_at_reactos_dot_lt)<br />
*Kestutis Snieska (sniekest_at_saule_dot_pit_dot_ktu_dot_lt)<br />
*Mindaugas Juzenas (mynde_at_agurkas_dot_com)<br />
*Audrius Rensonas (audriuz_at_fremail_dot_lt)<br />
<br />
=== [[Norwegian translation|Norwegian]] ===<br />
*Stian Hole (stian.hole(alfa)gmail.com)<br />
*Lars Martin Hambro (lars_martin4@hotmail.com)<br />
*Erik Indresøvde (erikindre(a)gmail.com)<br />
*Frode Lillerud (frode(a)enkelt(dot)no)<br />
<br />
=== Persian ===<br />
*Hossein Noorikhah (hossein_noorikhah@yahoo.com)<br />
*Masoud Miradli (Masoud_Miradli@yahoo.com)<br />
<br />
=== Polish ===<br />
*Sebastian Gasiorek (sebastian(dot)gasiorek(at)gmail.com)<br />
*Jakub 'darkjames' Zawadzki (darkjames(at)darkjames(dot)ath(dot)cx)<br />
*Karol 'viod' Stelmaczonek (viod(at)op(dot)pl)<br />
*Emil Kaczmarek (realszopen(at)gmail(dot).com)<br />
*Artur 'aart3k' Wiśniewski (aart3k<-at->gmail.com)<br />
*Lech 'rogers' Groblewicz (xrogers$gmail(dot)com)<br />
*Michał 'mikz' Matulka (miksior<-at->gmail<-dot->com)<br />
<br />
=== [[Portuguese translation|Portuguese]] ===<br />
* [[User:Jeronimus Linuxius|Jeronimus Linuxius]] (João Jerónimo Barata de Oliveira)<br />
* [[User:Snake|Snake]] (Wagner Leandro Bueno Angelo)<br />
* [[User:juanpaul|juanpaul]] (Juan Paul)<br />
* [[User:ebenjamim|ebenjamim]] (Ericson Benjamim)<br />
<br />
=== Romanian ===<br />
*Alexander Ciobanu (alex_replace_this_by_at_prodidactica.md)<br />
*Sebi Onofrei<br />
<br />
=== [[Russian translation|Russian]] ===<br />
*Mikhail Y. Zvyozdochkin (LC) (mzvyozd_replace_this_by_at_narod.ru)<br />
*Alexander Ciobanu (alex_replace_this_by_at_prodidactica.md)<br />
*Aleksey Bragin (TC) (aleksey_replace_this_by_at_reactos.com)<br />
*Sergey Perevozchikov (seper_replace_this_by_at_mail.ru)<br />
*Dmitry Philippov (shedon_replace_this_by_at_mail.ru)<br />
*Anton Belitsky (fidoworld_replace_this_by_at_mail.ru)<br />
*Dmitry Chapyshev (lentind_replace_this_by_at_yandex.ru)<br />
*Semka Novikov (semka@defun.ru)<br />
<br />
=== [[Spanish]] ===<br />
*Rick Langschultz (absleadcoder_replace_this_by_at_cox.net)<br />
*Waldo Alvarez (wac_replace_this_by_at_ghost.matcom.uh.cu)<br />
*Jorge Pérez Burgos (jorge.perez_replace_this_by_at_adaptia.net)<br />
*Jacob Martin (suelyn_replace_this_by_at_email.it)<br />
*Francisco José Cañizares Santofimia (telefrancisco_replace_this_by_at_zwallet.com) [ Mother language ]<br />
*Lucio Diaz-Flores Varela (reactos_translate_replace_this_by_at_yahoo.es) [ Mother language ]<br />
*Jose Pedro Fernández Pascual (huma2000_at_terra_dot_com) [Mother language] -> Translating main site and making a spanish keyboard layout.<br />
*Samwise52 (samcharly_at_hotmail_dot_com)<br />
*Sarocet (Sarocet_at_gmail_dot_com) {{es}}.<br />
*Monta990 (monta990_at_gmail_dot_com) {{es}}.<br />
*Elhoir (elhoir at gmail dot com) {{es}} - Website Translator<br />
<br />
=== [[Swedish translation|Swedish]] ===<br />
*Andreas Bjerkeholt (harteex[at]gmail.com)<br />
*David Nordenberg (dnordenberg [at] users.sourceforge.net)<br />
<br />
=== [[Thai translation|Thai]] ===<br />
*Special Thanks : Dmitry Gorbachev (Russian)<br />
*Sumath Aowsakulsutthi (punth1@gmail.com)<br />
<br />
=== [[Ukrainian translation|Ukrainian]] ===<br />
*Artem Reznikov (temarez[at]yandex.ru)<br />
<br />
=== [[Urdu]] ===<br />
*Muhammad Waqas Alam (mwalam_uk@yahoo.co.uk)<br />
<br />
=== [[Turkish translation|Turkish]] ===<br />
*Engin Çağatay (engincagatay@yahoo.com)<br />
<br />
[[Fr:Traductions]]<br />
[[It:Traduzioni]]<br />
[[Ja:翻訳]]<br />
[[No:Oversetting]]</div>Sabikihttps://reactos.org/wiki/index.php?title=List_of_Translators&diff=17858List of Translators2008-03-16T02:33:46Z<p>Sabiki: add lang link</p>
<hr />
<div>This page's intent is to collect information about translation of the website, apps and the people capable to do that.<br />
Follow these Standards when translating. [[RC_File_Standards]]<br />
<br />
== Translation tables for languages ==<br />
According to recent decision in mailing lists, this glossary/dictionary won't exist in the Wiki, but in some other form, preferably XML document.<br />
I think for now we're going to stick to Wiki. I don't recall why we didn't like that solution, but I think for now it's the simplest and efficient to do.<br />
<br />
[[Unified Dictionary]]<br />
<br />
== Introduction to translating ==<br />
If you would like to translate ReactOS into your native language, but you don't know how to do it, here is an article to help you to get started: [[Translating introduction]]<br />
<br />
== Translation of the wiki ==<br />
Please ensure to use the [[Language templates]] in your article.<br />
<br />
== Status of translation ==<br />
<i>2005-09-13</i><br />
<br />
The new ReactOS Content Management System works well. The website translation process will start in a few days.<br />
<br />
-> [[New_Homepage_Content|Please add more contents to this wiki page!]]<br />
<br />
<br />
<i>2005-05-17</i><br />
<br />
<strike>Currently, website translation is being stopped until new CMS is installed.<br />
But process of ReactOS itself translation is going fine.</strike><br />
<br />
== Things to be translated ==<br />
*New ReactOS Homepage ([[New Homepage Content]])<br />
**website content itself<br />
**[[RosCMS]] interface<br />
<br />
*[[Translating introduction|ReactOS itself]]<br />
<br />
== Translation software ==<br />
[[ROS CMS]]<br />
<br />
== People available for certain languages ==<br />
<br />
=== [[Arabic translation|Arabic]] ===<br />
*Abshoy Samuel (abshoy@hotmail.com)<br />
<br />
=== [[Bulgarian translation|Bulgarian]] ===<br />
*ССТАНЕВ (sstpr кльомба narod.ru)<br />
*Violin Iliev (violin кльомба developer.bg)<br />
<br />
=== [[Catalan translation|Catalan]] ===<br />
*El_libre (el.libre@gmail.com)<br />
*Dsltech (dsltech4ever@gmail.com)<br />
*Hiper (mtbochaca@gmail.com)<br />
<br />
=== [[Chinese Translations|Chinese]] ===<br />
*CaoCao (ccao_replace_this_by_at_myrealbox.com)<br />
*BSCH (bsch1983_replace_this_by_at_gmail.com)<br />
*Larry Li (larry_replace_this_by_at_mimios.com)<br />
*Tobias Ussing (tobiasthecommie_replace_this_by_at_hotmail.com)<br />
*wenbob (wenbob_replace_this_by_at_gmail.com)<br />
*wind (wind19831201_replace_this_by_at_163.com)<br />
*billyswong (billyswong_replace_this_by_at_gmail.com)<br />
*Lexon Li(lexon.li -at- gmail.com)<br />
*雄'''(mickey139)'''(e_zb@21cn.com, ezb@mail.gywb.cn)<br />
<br />
=== [[Czech Translations|Czech]] And [[Slovak Translations|Slovak]] ===<br />
*Kamil Hornicek (tykef_replace_this_by_at_atlas.cz)<br />
*Filip Navara (xnavara_replace_this_by_at_volny.cz)<br />
*Fero Vlkolinsky (f.vlkolinsky_replace_this_by_at_zoznam.sk)<br />
*Tomas Havel (info_replace_this_by_at_tomhavel.com)<br />
*Kario (kario[at]szm.sk)<br />
<br />
=== [[Dutch translation|Dutch]] ===<br />
*Mark IJbema (LC) ( mark@mostly-harmless.nl / vandread )<br />
*Timothy Schepens (tischepe_replace_this_by_at_fastmail.fm)<br />
*Emil (ROS_replace_this_by_at_Q-Collective.org)<br />
*Jasper van de Gronde (th.v.d.gronde_replace_this_by_at_hccnet.nl)<br />
*Lionel Lowie (i386DX -at- hotmail.com)<br />
*Joost de Meij (dreamsmsn -at -gmail.com)<br />
<br />
=== [[Finnish_localization|Finnish]] ===<br />
*Mikael Nousiainen ( turja_replace_this_by_at_mbnet.fi / Turja )<br />
<br />
=== [[French_translation|French]] ===<br />
*Rick Langschultz (absleadcoder_replace_this_by_at_cox.net)<br />
*Momo (mailtomomo_replace_this_by_at_free.fr)<br />
*Samuel (samuel.vanneste_replace_this_by_at_tiscali.fr)<br />
*Benoît (benoit.ansieau_replace_this_by_at_wanadoo.fr)<br />
*Jérôme Signouret (ggcom_replace_it_by_at_tele2_dot_fr)<br />
*G.Maton alias zoken (mustang9_replace_it_by_at_gmail_dot_com)<br />
*Benoit Plante (cmoibenlepro_replace_it_by_at_hotmail_dot_com)<br />
*Pierre Schweitzer - Heis Spiter (heis_spiter_replace_it_by_at_hotmail_dot_com)<br />
*Olivier Jacques (webmaster_replace_this_by_at_vieprivee_dot_com)<br />
*Sylvain Petreolle - Usurp (spetreolle_replace_it_by_at_yahoo_dot_fr)<br />
<br />
=== Frisian ===<br />
*Berend Ytsma (berendy_replace_this_by_at_gmail.com)<br />
<br />
=== [[German translation|German]] ===<br />
*Ashran (ashran_replace_this_by_at_hackersquest.org)<br />
*Theodor Reppe (theodor #AT# reppes.de)<br />
*Jorg Abderhalden (jda_replace_this_by_at_abderhalden.cx)<br />
*Bjorn Fischer (thebear80_replace_this_by_at_gmx.net)<br />
*Michael Fritscher (michael_replace_this_by_at_fritscher.net)<br />
*Thomas Weidenmueller (w3seek)<br />
*David Flechl (webmaster_replace_this_by_at_wishmaster.at)<br />
*Max (max.hohenegger_replace_this_by_at_fh-rosenheim.de)<br />
*RobertK<br />
*Fabian Kupferschmid (ich-m_replace_this_by_at_g-kein-spam.com)<br />
*Sascha Gehrke (mail_replace_this_by_at_redviper.net)<br />
*Stefan Pflueger (stefan_replace_this_by_at_homepage4us.de)<br />
*Martin Rottensteiner (martin2004_replace_this_by_at_speed-tiscali.at)<br />
*Michael Wirth (TP)<br />
*Patrick Mächler (valio_replace_this_by_at_gmx.ch / Valio)<br />
*Klemens Friedl (frik85_replace_this_by_at_hotmail dot com)<br />
*e7 (e7online %at_home_at% webºde)<br />
*Stephan Verbücheln (Erlenmayr_replace_this_by_at_gmail_dot_com)<br />
*David Hinz (hinz.david [aT] gmail d.0.t com)<br />
*Friedrich Stange (dj_smith_reactos #AT# online.de)<br />
*Christian Heffner (mail_replace_this_by_at_pellesc_dot_de)<br />
*Timo Kreuzer (timo.kreuzer[at]web[dot]de<br />
*Daniel Reimer (reimer.daniel@freenet.de)<br />
*Karsten Kleinow ( karsten.kleinow at digitalexperts (dot) de )<br />
<br />
=== [[Greek_translation|Greek (Hellenic)]] ===<br />
*Apostolos Alexiadis (djapal@gmail.com)<br />
<br />
=== [[Hebrew Translation | Hebrew]] ===<br />
*Liron Ben-David (rosheb@gmail.com)<br />
*Yochai Meir (rosheb@gmail.com)<br />
<br />
=== [[Hungarian translation|Hungarian]] ===<br />
*Robert Horvath - Talley<br />
*Gergely Risko - Cake<br />
*Peter Nagy - Kritika<br />
*Peter Lukacs - Hungi<br />
<br />
=== Icelandic ===<br />
*Björgvin Ragnarsson (nifgraup_replace_this_by_at_hotmail.com)<br />
<br />
=== Irish Gaelic ===<br />
*Rick Langschultz (absleadcoder_replace_this_by_at_cox.net)<br />
<br />
=== Italian ===<br />
*Vincenzo Petrucci (vincenzo.petrucci_replace_this_by_at_gmail.com)<br />
*Lorenzo (garbage_replace_this_by_at_loz.it)<br />
*Federico (larsss_replace_this_by_at_jumpy.it)<br />
*Daniele (dforsi_replace_this_by_at_gmail.com)<br />
*>>Forward Agency (fwdprojectsREMOVE@THISemail.it)<br />
*Gabriel ilardi (gabrielilardi_replace_this_by_at_hotmail.it)<br />
*Claudio alias Max_ita (schumi75_replace_this_by_at_email.it)<br />
*Morejatroid (jack.monegato@virgilio.it)<br />
*[[Meg112]] alias Luca Porcelli (meg112@hotmail.it)<br />
<br />
=== [http://reactos.2chv.net/wiki/?FrontPage Japanese] ===<br />
*Masahiro Taguchi (mtg_replace_this_by_at_ce.wakwak.com)<br />
*tsk (tsk_n_replace_this_by_at_mail.goo.ne.jp)<br />
*3 (i_have_a_lot_of_mp3player_replace_this_by_at_yahoo.co.jp)<br />
<br />
=== Korean ===<br />
*Won Star (wonst719__at__hanmir__dot__com)<br />
*[[seungju kim]] (admin[[Image:At-reactos.jpg]]manateeshome.com)<br />
<br />
=== [[Lithuanian translation|Lithuanian]] ===<br />
* [[Vytis Girdžijauskas]] (Language Maintainer)<br />
*Andrius Prekevicius (info_at_reactos_dot_lt)<br />
*Kestutis Snieska (sniekest_at_saule_dot_pit_dot_ktu_dot_lt)<br />
*Mindaugas Juzenas (mynde_at_agurkas_dot_com)<br />
*Audrius Rensonas (audriuz_at_fremail_dot_lt)<br />
<br />
=== [[Norwegian translation|Norwegian]] ===<br />
*Stian Hole (stian.hole(alfa)gmail.com)<br />
*Lars Martin Hambro (lars_martin4@hotmail.com)<br />
*Erik Indresøvde (erikindre(a)gmail.com)<br />
*Frode Lillerud (frode(a)enkelt(dot)no)<br />
<br />
=== Persian ===<br />
*Hossein Noorikhah (hossein_noorikhah@yahoo.com)<br />
*Masoud Miradli (Masoud_Miradli@yahoo.com)<br />
<br />
=== Polish ===<br />
*Sebastian Gasiorek (sebastian(dot)gasiorek(at)gmail.com)<br />
*Jakub 'darkjames' Zawadzki (darkjames(at)darkjames(dot)ath(dot)cx)<br />
*Karol 'viod' Stelmaczonek (viod(at)op(dot)pl)<br />
*Emil Kaczmarek (realszopen(at)gmail(dot).com)<br />
*Artur 'aart3k' Wiśniewski (aart3k<-at->gmail.com)<br />
*Lech 'rogers' Groblewicz (xrogers$gmail(dot)com)<br />
*Michał 'mikz' Matulka (miksior<-at->gmail<-dot->com)<br />
<br />
=== [[Portuguese translation|Portuguese]] ===<br />
* [[User:Jeronimus Linuxius|Jeronimus Linuxius]] (João Jerónimo Barata de Oliveira)<br />
* [[User:Snake|Snake]] (Wagner Leandro Bueno Angelo)<br />
* [[User:juanpaul|juanpaul]] (Juan Paul)<br />
* [[User:ebenjamim|ebenjamim]] (Ericson Benjamim)<br />
<br />
=== Romanian ===<br />
*Alexander Ciobanu (alex_replace_this_by_at_prodidactica.md)<br />
*Sebi Onofrei<br />
<br />
=== [[Russian translation|Russian]] ===<br />
*Mikhail Y. Zvyozdochkin (LC) (mzvyozd_replace_this_by_at_narod.ru)<br />
*Alexander Ciobanu (alex_replace_this_by_at_prodidactica.md)<br />
*Aleksey Bragin (TC) (aleksey_replace_this_by_at_reactos.com)<br />
*Sergey Perevozchikov (seper_replace_this_by_at_mail.ru)<br />
*Dmitry Philippov (shedon_replace_this_by_at_mail.ru)<br />
*Anton Belitsky (fidoworld_replace_this_by_at_mail.ru)<br />
*Dmitry Chapyshev (lentind_replace_this_by_at_yandex.ru)<br />
*Semka Novikov (semka@defun.ru)<br />
<br />
=== [[Spanish]] ===<br />
*Rick Langschultz (absleadcoder_replace_this_by_at_cox.net)<br />
*Waldo Alvarez (wac_replace_this_by_at_ghost.matcom.uh.cu)<br />
*Jorge Pérez Burgos (jorge.perez_replace_this_by_at_adaptia.net)<br />
*Jacob Martin (suelyn_replace_this_by_at_email.it)<br />
*Francisco José Cañizares Santofimia (telefrancisco_replace_this_by_at_zwallet.com) [ Mother language ]<br />
*Lucio Diaz-Flores Varela (reactos_translate_replace_this_by_at_yahoo.es) [ Mother language ]<br />
*Jose Pedro Fernández Pascual (huma2000_at_terra_dot_com) [Mother language] -> Translating main site and making a spanish keyboard layout.<br />
*Samwise52 (samcharly_at_hotmail_dot_com)<br />
*Sarocet (Sarocet_at_gmail_dot_com) {{es}}.<br />
*Monta990 (monta990_at_gmail_dot_com) {{es}}.<br />
*Elhoir (elhoir at gmail dot com) {{es}} - Website Translator<br />
<br />
=== [[Swedish translation|Swedish]] ===<br />
*Andreas Bjerkeholt (harteex[at]gmail.com)<br />
*David Nordenberg (dnordenberg [at] users.sourceforge.net)<br />
<br />
=== [[Thai translation|Thai]] ===<br />
*Special Thanks : Dmitry Gorbachev (Russian)<br />
*Sumath Aowsakulsutthi (punth1@gmail.com)<br />
<br />
=== [[Ukrainian translation|Ukrainian]] ===<br />
*Artem Reznikov (temarez[at]yandex.ru)<br />
<br />
=== [[Urdu]] ===<br />
*Muhammad Waqas Alam (mwalam_uk@yahoo.co.uk)<br />
<br />
=== [[Turkish translation|Turkish]] ===<br />
*Engin Çağatay (engincagatay@yahoo.com)<br />
<br />
[[Fr:Traductions]]<br />
[[It:Traduzioni]]<br />
[[Ja:翻訳]]<br />
[[No:Oversetting]]</div>Sabikihttps://reactos.org/wiki/index.php?title=Installing_ReactOS&diff=16750Installing ReactOS2008-02-09T02:11:30Z<p>Sabiki: add ja lang link</p>
<hr />
<div>== ReactOS Hardware Requirements ==<br />
Whether installing [[ReactOS]] on real hardware or on an emulator, it is important to know the minimum requirements to install and use ReactOS:<br />
<br />
* 32MB [[RAM]] (NOTE: Debug builds may require 72MB of RAM, please use a release build on low memory systems)<br />
* [[IDE]] [[harddisk]] (not SATA)<br />
* [[FAT16]]/[[FAT32]] primary boot partition (NOTE: boot partition must be the first partition on the disk)<br />
* VGA compatible video card (VESA BIOS version v2.0 and higher)<br />
* Standard ([[PS/2]]) [[keyboard]]<br />
* PS/2 compatible [[mouse]] or Microsoft Mouse compatible serial mouse<br />
<br />
Furthermore, if you want to try [[TCP/IP]] networking, one of the following [[ethernet card]]s may work:<br />
<br />
* NE2000 clones (Such as Realtek 8139)<br />
* AMD PCnet32 LANCE<br />
<br />
Other cards might also work, if you provide the appropriate driver.<br />
<br />
== Choosing an installation strategy ==<br />
Before installing ReactOS &mdash; or indeed, before obtaining ReactOS installation media &mdash; it is necessary to decide how ReactOS should be installed on your computer system. Although ReactOS support for IDE disk drives and the FAT16 and FAT32 filesystems is stable as of the [[0.2.x/0.2.5|0.2.5]] release, ReactOS is still undergoing rapid and fundamental development, with no guarantee that damage will not occur to any hardware or software on which it is run.<br />
<br />
Accordingly, the first consideration to make is whether to install ReactOS on a dedicated testing or development machine, or in a contained environment such as running on an emulator without direct disk access. Such options are preferable if the machine on which you will run ReactOS is your primary computer, and/or if you have important data on the computer which you cannot afford to lose (as may well occur if ReactOS experiences a catastrophic error, for example).<br />
<br />
If you decide nonetheless to install ReactOS on a disk drive that contains an existing operating system (such as Microsoft Windows XP), you should ensure that the drive is formatted with a filesystem ReactOS can access and write to (which are limited to FAT16 or FAT32, as of the 0.3.3 release), and that there is sufficient free space on the drive such that ReactOS can be installed, which can be somewhere around 250 MB.<br />
<br />
Furthermore, the current hardware limitations to which ReactOS is constrained must be identified and compared to the target computer system (''e.g.'', the limitation that only IDE disk drives may be accessed, and that ReactOS has ''extremely'' limited [[USB_Stack|USB]] support as of the 0.3.3 release).<br />
<br />
Once the available hardware and software situation is determined, the installation media can be selected &mdash; for example, if your computer includes an ATA CD-ROM and an IDE hard disk that does not contain irreplaceable data, a good installation option may be to write an ISO image of the ReactOS installation media to a CD-RW and proceed to install ReactOS on the IDE hard disk via the CD-ROM.<br />
<br />
== Getting ReactOS ==<br />
Currently, ReactOS setup CD-ROMs cannot be bought in stores nor ordered. If you want to install ReactOS on a computer, you will have to create a ReactOS setup CD-ROM by yourself, downloading an image file and writing it to CD-R or CD-RW media with a CD writer. Downloading the image of the ReactOS Setup CD-ROM <br />
<br />
=== Where to download from ===<br />
Images of the ReactOS setup CD-ROM are physically stored on the ReactOS project page on SourceForge. You can download images directly from the SourceForge site, but some users may prefer the ReactOS.org portal. Both have the exact same downloads though, so there's no real advantage to choosing one over the other.<br />
<br />
==== ReactOS site ====<br />
* Visit ReactOS.org, the ReactOS portal site. This site will always point to the latest release.<br />
* Click on the "Download" link. A page opens with links to packages of the latest release of ReactOS.<br />
* Click on the "ISO Image" link. You will be redirected to one of the SourceForge download servers, and the download will shortly begin.<br />
<br />
'''or'''<br />
<br />
* Visit the [http://wiki.reactos.org/ ReactOS Wiki].<br />
* Click on the [[Download ReactOS]] link. This will always contain the latest offical release.<br />
* Select the "ISO image" link.<br />
<br />
==== SourceForge ====<br />
* Visit the [http://sourceforge.net/projects/reactos/ ReactOS project page on SourceForge].<br />
* Scroll down to "Latest File Releases".<br />
* Click on the [http://sourceforge.net/project/showfiles.php?group_id=6553 Download] link for the "reactos" package. A page opens with links to packages of the latest release of ReactOS. The files of the "reactos" package should appear highlighted in a different color.<br />
* Click on the "reactos-version-iso.zip" link, where version is the version number. You will be redirected to one of the SourceForge download servers, and the download will shortly begin.<br />
<br />
== Creating the ReactOS Setup CD-ROM ==<br />
* The file you downloaded is a compressed archive in ZIP format, containing a single file named "reactos.iso". This file is the image file of the ReactOS setup CD-ROM in ISO format.<br />
* Extract the image file from the archive into a temporary directory.<br />
* Write the image file onto CD-R or CD-RW media. Refer [[HOWTO/burn_ReactOS_ISO | HOWTO Burn ISO image]] for more info.<br />
<br />
== Installing ReactOS on a real machine ==<br />
<br />
=== From a Setup CD-ROM ===<br />
* Make sure your BIOS is configured to boot from the CD-ROM first<br />
* Insert the ReactOS setup CD-ROM into a CD-ROM drive and reboot your computer. On the next boot, the ReactOS setup utility will start.<br />
* Follow the instructions on the screen to install ReactOS on your computer.<br />
* After the installation has finished, remove the setup CD-ROM from the CD-ROM drive and press "Return" to reboot your computer. Now, you can start ReactOS by selecting it from the boot menu.<br />
* And that's all.<br />
<br />
=== Technical Notes ===<br />
<br />
Modifications performed to the Hard Disk to boot ReactOS<br />
<br />
==== FreeLoader ====<br />
[[FreeLoader]], the ReactOS boot loader, is composed of two files: an executable (FREELDR.SYS) and a configuration file in Windows INI format (FREELDR.INI). The two files are copied to the root directory of the active partition.<br />
<br />
The FreeLoader boot code, that is the small program that loads FREELDR.SYS, can be installed in many ways, depending on the pre-existing operating system. The setup logic tries the following steps in order:<br />
<br />
<br />
* If the Windows NT/2000/XP boot manager is found on the active partition, the existing boot manager is configured to boot ReactOS. The FreeLoader boot code is written to a file named BOOTSECT.ROS in the root of the active partition, and an entry named "ReactOS" is added to BOOT.INI pointing to BOOTSECT.ROS.<br />
** The Windows NT/2000/XP boot manager is detected by the presence of the files NTLDR and BOOT.INI in the root directory of the active partition.<br />
** To uninstall FreeLoader, delete the file BOOTSECT.ROS and remove the "ReactOS" entry from the hidden BOOT.INI file.<br />
* If MS-DOS or Windows 95/98/ME is found on the active partition, the original boot sector is saved to a file named BOOTSECT.DOS in the root directory of the active partition. The FreeLoader boot code is then written to the boot sector of the active partition. FreeLoader thus becomes your primary boot manager, and from its boot menu you will be able to boot both ReactOS and your pre-existing operating system<br />
** MS-DOS and Windows 95/98/ME are detected by the presence of the files MSDOS.SYS and IO.SYS in the root directory of the active partition.<br />
** To uninstall FreeLoader, boot from a MS-DOS or Windows Restore floppy disk, and run the command "SYS C:". After this, the BOOTSECT.DOS file can be safely deleted.<br />
* If none of the known operating systems are found on the active partition, the original boot sector is saved to the file BOOTSECT.OLD in the root directory of the active partition. The FreeLoader boot code is then written to the boot sector of the active partition. FreeLoader thus becomes the primary boot manager. Note that you will have to edit the FREELDR.INI configuration file by yourself to boot the pre-existing operating system, because FreeLoader has no knowledge of how to do it.<br />
** To uninstall FreeLoader, restore the boot sector of the active partition from the BOOTSECT.OLD file. The details on how to do so are dependent on the operating system you are running.<br />
<br />
Note: If the active partition uses a FAT32 filesystem, the boot code does not fit into a single sector. Microsoft uses sectors number 0 and 12, while FreeLoader uses sectors number 0 and 14, so there should not be any conflicts with existing boot loaders.<br />
<br />
Note: The support for other operating systems will be improved in the future.<br />
<br />
== Installing ReactOS on an emulator ==<br />
=== Emulators ===<br />
An emulator is a software program that provides a virtual hardware platform. Software instructions that would be run on hardware are now interpreted by the emulator software. This allows you to "run" a different kind of computer hardware and its software in a window on your computer. Although the performance of the software run on a virtual computer will be much slower than on real hardware, it provides several advantages:<br />
<br />
*You can try out a completely different operating system without tinkering with your real system.<br />
*You can run potentially unstable software without the fear of damaging your real system.<br />
*For operating system developers, it provides a way to debug the system without constant reboots.<br />
<br />
=== Bochs ===<br />
[[Bochs]] (pronounced "box") is an emulator of x86- or x64-architecture computer systems. It can run on the DOS/Windows and Linux operating systems, ''inter alia'', and emulates an IBM PC computer system including a 386, 486 or Pentium CPU. Bochs also provides IO port and BIOS emulation, as well as various other system-level hardware components (such as video display hardware, disk controllers and ethernet cards) such that the emulated system can run diverse operating systems such as Linux, DOS, Windows 95, Windows NT 4, and ReactOS, among others. <br />
<br />
The software was initially written by Kevin Lawton and is now maintained by the Bochs SourceForge project.<br />
<br />
== Installing ReactOS on virtualizing systems ==<br />
=== Virtual computing ===<br />
A virtual machine is a software program that is similar to an emulator in that it provides a virtual hardware platform. Software instructions that would be run on hardware are caught by the virtual environment, and depending on the instruction, are either run on the native CPU or emulated in software. Virtual computing allows for much faster operation than standard emulation, as a result of the ability to run a majority of instructions on the native CPU. The performance of the software on a virtual computer will be only slightly slower than on real hardware. Overhead is still an issue for disk I/O and CPU instruction execution, but is generally faster than total emulation.<br />
<br />
Advantages of virtual computing:<br />
<br />
* You can try out a completely different operating system without tinkering with your real system.<br />
* You can run potentially unstable software without the fear of damaging your real system.<br />
* For operating systems developers, it provides a way to debug the system without constant reboots.<br />
* The performace is much faster then a true emulator such as Bochs.<br />
<br />
<br />
The following virtualizing software systems are known to run Reactos:<br />
<br />
=== VMware Server ===<br />
[http://www.vmware.com/ VMware] is a popular virtual machine software system for the x86 CPU family. It can run on Windows NT, 2K, XP and Linux/FreeBSD. It also provides IO port, BIOS emulation, networking and sound support. VMware can run a number of different "guest" operating systems including *DOS, Windows 9x/NT/2K/XP, ReactOS, Free Unices (*BSD, Linux) as well as many others. VMware Server is free but requires registration.<br />
<br />
Note: If ReactOS seems to hang during the early stages of boot (before showing the mouse on screen), try to "power off" unneeded hardware, eg: floppy, cdrom, sound etc...<br />
<br />
=== VMWare Player === <br />
The [http://www.vmware.com/ VMware] Player is a free version of the popular [http://www.vmware.com/ VMware] for a number of different "guest" operating systems including *DOS, Windows 9x/NT/2K/XP, ReactOS, Free Unices (*BSD, Linux) as well as many others. VMware player is free but does not come with the features VMware Workstation comes bundled with.<br />
<br />
Note: If ReactOS seems to hang during the early stages of boot (before loading the kernel), try to "power off" unneeded hardware, eg: floppy, cdrom, sound etc...<br />
<br />
=== QEMU ===<br />
[http://fabrice.bellard.free.fr/qemu/ QEMU] is an [http://en.wikipedia.org/wiki/Open_source open source] emulator of the x86 and x64 architectures, that can also function as a partial virtualizer using a kernel module running on Linux. ReactOS is claimed to run on version 0.5.5 of QEMU.<br />
<br />
== Limitations ==<br />
=== Hardware Support ===<br />
Currently, ReactOS has limited hardware support. A list of the most important limitations follows:<br />
<br />
* ReactOS needs at least 32 MBs of RAM to boot, it can be run on 24MB although that's not recommended.<br />
* ReactOS can only be booted from IDE CD-ROMs and hard disks.<br />
<br />
Also see http://www.reactos.org/wiki/index.php/Supported_Hardware<br />
<br />
Note that booting from CD-ROM is supported only for running the setup program unless you're using the LiveCD option, which is meant to be booted of the CD-ROM continuously. Otherwise booting from CD-ROM for normal use is not recommended. Although it is generally possible, the default configuration will prevent ReactOS from creating a swap file when booted from a CD-ROM. If no swap file is available, ReactOS will stop as soon as it runs out of RAM. In practice, this prevents the use of any non-trivial program.<br />
<br />
=== Setup and Boot ===<br />
Currently, the ReactOS setup utility and boot loader have a number of limitations you should be aware of:<br />
<br />
* ReactOS can only be installed on FAT16 or FAT32 partitions.<br />
* The boot partition must be the first FAT16 or FAT32 partition on the disk.<br />
* The setup utility can't check the integrity of filesystems.<br />
* The setup utility will not prevent users from performing dangerous and potentially destructive operations. Be very careful when using it and do not take any warnings lightly.<br />
<br />
== ReactOS boot options ==<br />
=== Kernel command line ===<br />
The [[kernel]] command line is a text string that is passed to ReactOS by the boot loader (usually [[FreeLoader]]). It consists of several switches, each of which has a special meaning to ReactOS. A switch is a forward slash (<code>/</code>) followed by a text string (the name of the switch), and optionally an equal sign (<code>=</code>) and a text string (the value). If the equal sign is present, then at least one value is required to follow.<br />
<br />
The syntax, variables and device strings used by FreeLoader conform to the [http://en.wikipedia.org/wiki/Advanced_RISC_Computing ARC] firmware and boot specification, similarly to the boot system used in all Windows NT implementations (such as the Windows NT bootloader on the x86 architecture, or the ARC console used to boot Windows NT 4.0 on the [http://en.wikipedia.org/wiki/Jazz_(computer) MIPS], Alpha AXP and PowerPC architectures). Because of this, boot disks and other firmware- or BIOS-accessible devices are specified by each of the bus, disk, slice, and partition values associated with the device.<br />
<br />
In FreeLoader the kernel command line is specified in an <code>Options</code> setting in <code>freeldr.ini</code>. The following text is an example of the contents of <code>freeldr.ini</code>, which boots ReactOS from the first partition of the first IDE drive of the computer system:<br />
<code><br />
[ReactOS]<br />
BootType=ReactOS<br />
SystemPath=multi(0)disk(0)rdisk(0)partition(1)\reactos<br />
Options=/DEBUGPORT=SCREEN<br />
</code><br />
As used in the above sample file, <code>DEBUGPORT</code> is a boot option. By adding the boot option <code>/DEBUGREPORT=SCREEN</code>, ReactOS will print debugging information to the screen.<br />
<br />
===Boot options===<br />
The following boot options may be used:<br />
<br><br />
; <code>DEBUGPORT</code> : Specifying <code>DEBUGPORT</code> as a boot option will enable certain debugging features.<br />
* Format: <code>DEBUGPORT=[SCREEN|BOCHS|GDB|PICE|COM1|COM2|COM3|COM4|FILE|MDA]</code><br>Any one of the following values may set:<br />
** <code>SCREEN</code>: Send debug output to the screen.<br />
** <code>BOCHS</code>: Send debug output to bochs.<br />
** <code>GDB</code>: Enable the GNU debugger (GDB) stub so remote debugging using GDB is possible.<br />
** <code>PICE</code>: Enable the Private ICE driver so debugging using Private ICE is possible.<br />
** <code>COM1</code>: Send debug output to COM1.<br />
** <code>COM2</code>: Send debug output to COM2.<br />
** <code>COM3</code>: Send debug output to COM3.<br />
** <code>COM4</code>: Send debug output to COM4.<br />
** <code>FILE</code>: Send debug output to a file %systemroot%/reactos/debug.log <br />
** <code>MDA</code>: Send debug output to MDA ''(The old text-graphiccard from IBM)''.<br />
<br><br />
; <code>BAUDRATE</code> : Specifies baudrate of the serial port to be <code>[baudrate]</code> bps. Used in conjunction with <code>COM1-4</code> or <code>GDB</code>.<br />
* Format: <code>BAUDRATE=[baudrate]</code><br />
<br><br />
; <code>IRQ</code> : Specifies the IRQ number of the serial port to be <code>[irq-number]</code>. Used in conjunction with <code>COM1-4</code> or <code>GDB</code>.<br />
* Format: <code>IRQ=[irq-number]</code><br />
<br><br />
; <code>PROFILE</code> : Enables profiling. Profiling information will be written in <code>%windir%\profiler.log</code>. This will slow down the system quite a bit.<br />
* Format: <code>PROFILE</code><br />
<br><br />
; <code>MAXMEM</code> : Will restrict ReactOS to use only the first <code>[maxmem]</code> MB of physical memory.<br />
* Format: <code>MAXMEM=[maxmem]</code><br />
<br />
[[de:De/ReactOS installieren]]<br />
[[ja:ReactOSのインストール]]<br />
[[pt:Instalar o ReactOS]]<br />
[[ru:Установка ReactOS]]</div>Sabikihttps://reactos.org/wiki/index.php?title=ChangeLog-0.3.1&diff=12574ChangeLog-0.3.12007-03-11T17:28:50Z<p>Sabiki: edit release date</p>
<hr />
<div>This is the changelog for [[ReactOS]]&trade; version 0.3.1(released 10 March, 2007), an open-source operating system designed to be binary executable- and device driver-compatible with Microsoft&trade; Windows NT&trade; and subsequent Microsoft operating systems such as Windows 2000&trade; and Windows XP&trade;. ReactOS is written by the ReactOS development team, and the last previous version of ReactOS was [[ChangeLog-0.3.0|version 0.3.0]] (released 27 August, 2006).<br />
<br />
= General =<br />
== Generic 0.3.1 Changes ==<br />
* Unicode corrections ([[Johannes Anderwald]])<br />
* Start removing Bitstream font from ReactOS. Only console apps are using Bitstream font but that will change once a few other issues are resolved. The rest of ROS is using DejaVu, a unicode font ([[Magnus Olsen]])<br />
* Enable pnpmgr in livecd ([[Hervé Poussineau]])<br />
* mkhive: use cmlib instead of duplicating code ([[Hervé Poussineau]])<br />
* VMWare properly detected ([[Alex Ionescu]])<br />
* Added the Wallpaper picture ''lake.bmp'' by [[Andreas Bjerkeholt]]<br />
<br />
== RBUILD ==<br />
* Dependency Map added by ([[Christoph von Wittich]]) and checking implemented by ([[Johannes Anderwald]])<br />
* Clean Log added and Help for individual commands ([[Peter Ward]])<br />
* Space in name issues fixed ([[Christoph von Wittich]])<br />
* ROS_PREFIX allowed on MS Windows platforms for cross compiling ([[Hervé Poussineau]])<br />
* <intrin.h> compatibility header. Implements Visual C++ intrinsics in GCC ([[KJK::Hyperion]])<br />
* Work towards MSVC compatibility (entrypoint name underscoring if needed) ([[Aleksey Bragin]])<br />
* Add initial support for a Code::Blocks backend, allowing the entire project to be built and managed within the IDE ([[Christoph von Wittich]])<br />
<br />
== Translations ==<br />
* Added and updated French Translation for Control Panel, Devmgmt, Downloader, ibrowser, Notepad, Reporterror, Rundll32, Solitaire, Syssetup, Timedate.cpl and Userinit ([[Pierre Schweitzer]])<br />
* Added French Translation to Ipconfig ([[Sylvain Petreolle]])<br />
* Thai keyboard layout added ([[Dmitry G. Gorbachev]])<br />
* Dutch Translations for Explorer, ibrowser, Mmsys.cpl, Reporterror and Welcome from i386DX<br />
* Patches from [[Signouret Jerome]] for Bugs #1312 and #1370: French Translations for FreeLoader's fdebug and WineMine<br />
* Patch from [[Sylvain Petreolle]] for Bug #1539: French Translation for Newdev.dll<br />
* Patches from [[Paolo Devoti]] for Bugs #1921 to #1935 and #1974 to #1976: Italian Translations for Cacls, Control Panel, Devmgmt, Downloader, Expand, Format, ImageSoft, Regsvr32, Reporterror, Rundll32, Sndvol32, Taskmgr, Userinit, Vmwinst, Winlogon and WordPad<br />
* Patch from [[Kamil Hornicek]] for Bug #1959: Czech translation for Control Panel<br />
* Swedish translation of getfirefox by Andreas Bjerkeholt<br />
* Patch from [[Sylvain Petreolle]] for Bug #1539: Recommit french translations<br />
* Patches from [[Apostolos Alexiadis]] for Bugs #1429, #1509 and #1630: Greek Translations for Calc, Expand, Explorer, Hdwwiz, Oleaut32.dll, Rundll32, Userinit<br />
* Patches from [[Apostolos Alexiadis]] for Bugs #1631 and #1831: Greek Keyboard layout rewrite. Punctuation stuff and other similar issues fixed<br />
* Patches from [[Artyom Reznikov]] for Bugs #1279, #1624 and #1635: Added and updated Ukrainian Translations for Appwiz, Comdlg32.dll, Desk.cpl, Explorer, GetFirefox, Hdwwiz, Intl.cpl, Mmsys.cpl, Notepad, Regedit, Taskmgr, Timedate.cpl, User32.dll, Welcome and Wininit.dll<br />
* Patches from [[Lars Martin Hambro]] for Bugs #1606, #1607, #1637, #1641 to #1644, #1674 to #1687, #1695, #1696, #1698 and #1700: Norwegian Translations for Cacls, Calc, Cmd, Expand, Explorer, Format, GetFirefox, ibrowser, Imagesoft, Msconfig, Notepad, Ntvdm, "reactos.exe" (Setup tool under Windows), Regedit's Column List Box, Regsvr32, Reporterror, Rundll32, sm, Taskmgr, Userinit, Welcome, WineFile, WineMine, Winlogon and WordPad<br />
* Patch from Fork for Bug #1633: Norwegian Translation for Syssetup.dll, Winmm.dll, User32.dll and Userenv.dll<br />
* Patch from [[Simon Hanae]] for Bug #1795 and #1876: Japanese keyboard driver added<br />
* Updated Italian translation of Calc by [[Gabriel Ilardi]]<br />
* Patch from arzi for Bug #1367: Finnish Translation for Control and "reactos.exe" (Setup tool under Windows)<br />
* Patch from [[Emil Kaczmarek]] for Bug #1315: Polish Translation for WineMine<br />
<br />
= ReactOS Core =<br />
== Kernel and Executive (NTOSKRNL) ==<br />
* Implemented ObReferenceProcessHandleTable ([[Alex Ionescu]])<br />
* Implemented ObDereferenceProcessHandleTable ([[Alex Ionescu]])<br />
* Implemented ObpReferenceProcessObjectByHandle ([[Alex Ionescu]])<br />
* Simplified ObDuplicateObject ([[Alex Ionescu]])<br />
* Patch from ([[Dmitry G. Gorbachev]]) for Bug #1953: fixes invalid sync after loading BLUE.SYS<br />
* Various warnings fixed ([[Thomas Weidenmueller]])<br />
* Cleanup of locking and lookup macros ([[Alex Ionescu]])<br />
* Adjustments in SeAccessCheck, returning STATUS_SUCCESS ([[Alex Ionescu]])<br />
* Various optimizations of lookup context and lock ([[Alex Ionescu]])<br />
* Patch from [[Thomas Weidenmueller]] for Bug #1667: NTOSKRNL: Fix GCC4 warning and return correct error code in NtSignalAndWaitForSingleObject<br />
* Fix incorrect loop of race conditions in the rundown protection implementation, requiring the value to have been changed and inactive before slow path is taken ([[Alex Ionescu]])<br />
* Fix locking bugs in guarded mutex implementation where operations were not reattempted ([[Alex Ionescu]])<br />
* Fix inverted result bug in KeTrytoAcquireGuardedMutex ([[Alex Ionescu]])<br />
* Fix KiMask32Array, value off and caused errors in priority/affinity masks ([[Alex Ionescu]])<br />
* Patch from [[Art Yerkes]] for memory management page referencing.<br />
* Handle leaks fixed in ExDestroyHandleEntry ([[Alex Ionescu]])<br />
* Imitate success for WMI calls and add a stubbed wmilib.sys, so that drivers relying on WMI can feel comfortable ([[Aleksey Bragin]])<br />
* Improve IoRegisterDeviceInterface() error-handling abilities and fix its behaviour so it's compatible with 3rd party drivers ([[Aleksey Bragin]], [[Hervé Poussineau]])<br />
* NDK 0.98, now with versioned headers. Too many changes to list, see the TinyKRNL SVN Logs for more detailed information. Thanks to Andrew (Wax), Thomas and Aleksey for testing. ([[Alex Ionescu]])<br />
* Check the Image Config Data in MmCreatePeb for address abusing (bug #1487). ([[Alex Ionescu]])<br />
* Speed-up the ElfpIsPowerOf2 function (bug #1464). ([[Alex Ionescu]])<br />
* Use the Spare0 array, present in EPROCESS instead of ReactOS-specific members for Process Locking (temporary fix until pushlocks are used). ([[Alex Ionescu]])<br />
* Use EPROCESS's AddressCreationLock instead of the MADDRESS_SPACE Lock. ([[Alex Ionescu]])<br />
* Overlay MADDRES_SPACE over MM_AVL_NODE. Even though our structures are currently incompatible, they represent the same thing (The EPROCESS's Address space). ([[Alex Ionescu]])<br />
* Get rid of ROS_EPROCESS and all the ugly type-casting that was being done, now that the last two hacks allow us to properly use EPROCESS. ([[Alex Ionescu]])<br />
* Use the proper HANDLE_TABLE and HANDLE_TABLE_ENTRY structures. ([[Alex Ionescu]])<br />
* Cleanup the formatting, code and function headers of most of the Object Manager interfaces. ([[Alex Ionescu]])<br />
* SymTest: The Symbolic Link kernel implementation tester. Tests for really wacky symlink API properties. 8 failures on ROS. ([[Alex Ionescu]])<br />
* SymLink Rewrite: Use OBJECT_SYMBOLIC_LINK structure as used by Windows NT (and added the structure to the NDK) ([[Alex Ionescu]])<br />
* SymLink Rewrite: Changed code to use the new names in the structure ([[Alex Ionescu]])<br />
* SymLink Rewrite: Only free the symlink's name if it has one, to avoid a bugcheck. ([[Alex Ionescu]])<br />
* SymLink Rewrite: Optimize parsing: if the new name is actually shorter then the target name, then don't allocate from pool, but re-use the buffer. This improves symlink parsing speed. Also fix a bug which made it depend on the incorrect implementation of NtCreateSymbolicLinkObject ([[Alex Ionescu]])<br />
* SymLink Rewrite: Re-align the link target maximum length in NtCreateSymbolicLinkObject if it's odd, and fail if the length is odd, smaller then the maximum, or if the maximum is zero. ([[Alex Ionescu]])<br />
* SymLink Rewrite: Originally allocate the symlink name in Paged Pool. ([[Alex Ionescu]])<br />
* SymLink Rewrite: Initialize new members of the structure. ([[Alex Ionescu]])<br />
* SymLink Rewrite: Fail in no-memory case, instead of continuing. ([[Alex Ionescu]])<br />
* SymLink Rewrite: Properly probe the LinkTarget in NtQuerySymbolicLinkObject. ([[Alex Ionescu]])<br />
* SymLink Rewrite: Properly handle which length is chosen for the copy and for the return in NtQuerySymbolicObject. ([[Alex Ionescu]])<br />
* SymLink Rewrite: Lock the symbolic link object type while querying it. Eventually many more parts of Ob need to do this kind of locking. ([[Alex Ionescu]])<br />
* Fix some NDK bugs ([[Alex Ionescu]])<br />
* Rewrote the Object Directory implementation to follow the NT Structures in the NDK. This got rid of the last remaining OBJECT_HEADER difference and switched over to OBJECT_DIRECTORY. ([[Alex Ionescu]])<br />
* Wipe out PROS_OBJECT_HEADER and use OBJECT_HEADER since we are now compatible. ([[Alex Ionescu]])<br />
* Cleanup profiling and debugging code, add function comment headers and comment the functions in obdir.c ([[Alex Ionescu]])<br />
* Remove directory object parsing. Directory objects don't have parse routines. Instead, inline the lookup in ObFindObject (this hasn't been optimized yet, a lot of the code is now setting a = b, c = a, c = b. ([[Alex Ionescu]])<br />
* Get rid of OB_ROS_PARSE_METHOD and use OB_PARSE_METHOD instead. Hacked the current parse methods to keep using a PWSTR, however they should be modified to use the UNICODE_STRING instead. ([[Alex Ionescu]])<br />
* Fix ObReferenceObjectByName and ObOpenObjectByName not to ignore the AccessState and ParseContext parameters. ([[Alex Ionescu]])<br />
* Change ObFindObject's prototype to be able to accommodate these two parameters so that they can be sent to the parse routine. ([[Alex Ionescu]])<br />
* Rewrite Desktop/WindowsStation parsing to follow the NT Object Model, with some minor hacks to respect ROS's current parsing semantics. ([[Alex Ionescu]])<br />
* Thanks to this, the long-lasting ExpDesktopCreate hack is gone, and so is OB_ROS_FIND_METHOD and OB_ROS_CREATE_METHOD in win32k. Next patch can fully remove WIN32_CALLOUT_DATA and use the NT type instead. ([[Alex Ionescu]])<br />
* Convert all Win32k Object callback functions to the correct NT prototypes. ([[Alex Ionescu]])<br />
* Get rid of ROS-internal WIN32_CALLOUT_DATA and use the real WIN32_CALLOUTS_FPNS type. ([[Alex Ionescu]])<br />
* Get rid of the callout.h hack. ([[Alex Ionescu]])<br />
* Get rid of the intriguing idea that exported/public APIs should have prototypes with inversed parameters (fix ObOpenObjectByName and all its callers). ([[Alex Ionescu]])<br />
* Isolate ObFindObject into CmFindObject for the registry routines. Because of their well-known abuse of Ob, it's better to give them their internal routine so that when/if Ob ever gets fixed to parse properly, it won't force a re-write of Cm's object routines. ([[Alex Ionescu]])<br />
* Add SecurityQoS and PreviousMode parameters to ObFindObject, so that these can be sent to the parse routine. Also don't send OBJECT_CREATE_INFORMATION to it, but each needed member separately. This avoids having to create a "Fake" structure in some calls which don't actually use the captured information. ([[Alex Ionescu]])<br />
* Also remove RemainingPath and stop exposing it to public APIs. Move all ObInsertObject/ObOpen,ReferenceByName hacks to ObFindObject, and add a small one there. Basically trade 4 hacks for 1. ([[Alex Ionescu]])<br />
* Re-implement delayed object deletion by using an optimized Object Reaper based on OBJECT_HEADER->NextToFree. Thanks to Thomas for the algorithm. ([[Alex Ionescu]])<br />
* Refactor object deletion into two operations: Removal and de-allocation (this is needed for failure during allocation, which we don't do yet). ([[Alex Ionescu]])<br />
* After freeing an object header structure, also clear the pointer so we don't attempt it again. ([[Alex Ionescu]])<br />
* Clear the handle database if there is one ([[Alex Ionescu]])<br />
* Make sure the create info flag is set before deleting captured attributes. ([[Alex Ionescu]])<br />
* Use the allocation pool tag when de-allocating. ([[Alex Ionescu]])<br />
* Use OBJECT_TYPE accounting for tracking the numbef of objects. ([[Alex Ionescu]])<br />
* Remove the object from it's typelist if it has creator information. ([[Alex Ionescu]])<br />
* Call the security procedure to delete the security descriptor. ([[Alex Ionescu]])<br />
* Set the CreatorUniqueProcess ([[Alex Ionescu]])<br />
* Do a privilege check of OB_FLAG_PERMANENT is being used, and de-allocate the object if this failed. ([[Alex Ionescu]])<br />
* Send the PreviousMode to ObpAllocateObject so that it can honor it and set the OB_FLAG_KERNEL_MODE flag. ([[Alex Ionescu]])<br />
* Use OBJECT_TYPE accounting to increase TotalNumberOfObjects. ([[Alex Ionescu]])<br />
* Fail ObCreateObject in low-memory situations instead of ignoring it. ([[Alex Ionescu]])<br />
* Respect OBJECT_TYPE.TypeInfo.InvalidAttributes if an attempt to create an object with invalid attributes is detected. ([[Alex Ionescu]])<br />
* Respect PagedPoolCharge and NonPagedPoolCharge parameters and save them in the OBJECT_CREATE_INFORMATION structure. ([[Alex Ionescu]])<br />
* Implement Per-Processor Lookaside List based allocation and de-allocation of the Object Create Information (object attributes capture) and of the object name. I counted over 4000 allocations for only 30 seconds of runtime, so this change greatly reduces pool fragmentation and increases speed. (Implementation is similar to the IRP lookaside list implementation, but inlined for speed). ([[Alex Ionescu]])<br />
* Fix some cases where we weren't freeing captured information properly. This patch should also decrease memory leaks/usage. ([[Alex Ionescu]])<br />
* Fix ExChangeHandle not to send NULL but the actual context to the callback function (fix by Thomas Weidenmueller <w3seek@reactos.org>) ([[Alex Ionescu]])<br />
* Re-implement NtSetInformationObject based on ExChangeHandle and using ObpSetHandleAttributes as a callback. ([[Alex Ionescu]])<br />
* Re-implement NtQueryObject's ObjectHandleInformation case to simply return the information that's already in HandleAttributes; there is no point in querying for it all over again. ([[Alex Ionescu]])<br />
* Fix NtSetInformationObject not to allow a user-mode call to modify kernel-mode handle attributes. Add FIXME for Inheritance permissions check. ([[Alex Ionescu]])<br />
* Fix NtQueryObject to properly return OBJ_PERMANENT and OBJ_EXCLUSIVE; these flags are not stored in Handle Attributes. ([[Alex Ionescu]])<br />
* Fix NtQueryObject not to attempt referencing the handle if the caller specified AllTypesInformation, because then a handle is not needed. ([[Alex Ionescu]])<br />
* Simplify ObGetObjectPointerCode and ObfReferenceObject. ([[Alex Ionescu]])<br />
* Fix ObReferenceObjectByPointer to actually work like documented instead of doing random incorrect checks. Also add special case for Symbolic Link objects as documented by Caz Yokoyama at Microsoft. ([[Alex Ionescu]])<br />
* ObReferenceObjectByHandle: Remove MAXIMUM_ALLOWED<->GENERIC_ALL conversion, I could find no mention of this in the docs. ([[Alex Ionescu]])<br />
* ObReferenceObjectByHandle: Remove GENERIC_ACCESS <-> RtlMapGenericMask conversion, I could find no mention of this in the docs, and this mapping is only required when creating handles, not when referencing pointers. ([[Alex Ionescu]])<br />
* ObReferenceObjectByHandle: Do not attach/detach from the system process, this isn't required since we're merely getting a kernel pointer from the handle netry. ([[Alex Ionescu]])<br />
* ObReferenceObjectByHandle: Directly increase the pointer count instead of calling ObReferenceObject, since we already have the object header in a variable. ([[Alex Ionescu]])<br />
* ObReferenceObjectByHandle: Cache ObpKernelHandleTable/Process->ObjectTable and use those directly instead of always de-referencing the process. ([[Alex Ionescu]])<br />
* Rename ObpCreateTypeObject to ObCreateObjectType and fix definition. The latter is actually exported in NT, and there's no reason not to export it while having our own internally renamed version. ([[Alex Ionescu]])<br />
* Added stub exports for ObCloseHandle, ObReferenceSecurityDesciptor, ObSetHandleAttributes, ObSetSecurityObjectByPointer so that someday someone can know what needs to be implemented. ([[Alex Ionescu]])<br />
* Removed ObGetObjectPointerCount. It is not exported in newer OSes and was always undocumented. ([[Alex Ionescu]])<br />
* Move ObQueryObjecctAuditingByHandle to security.c and optimized it not to attach to the system process, as well as to cache the handle table instead of dereferencing the owner process all the time. ([[Alex Ionescu]])<br />
* Fix bug in IoCreateFile which my (correct) ObReferenceObjectByHandle bugfix patch uncovered. Bootcd/installation works again. ([[Alex Ionescu]])<br />
* Make sure callers of NtMakeTemporaryObject have DELETE privileges, otherwise they could end up illegaly killing objects (in certain situations) ([[Alex Ionescu]])<br />
* Make sure callers of NtMakePermanentObject have SeCreatePermanentPrivilege. ([[Alex Ionescu]])<br />
* Implement ObpDeleteNameCheck as described in Gl00my's Ob Documentation (using such documentation falls under US Reverse Engineering Law * Clean rooming). ([[Alex Ionescu]])<br />
* Remove duplicated code in ObpDecrementHandleCount and ObpSetPermanentObject and have them use ObpDeleteNameCheck instead. ([[Alex Ionescu]])<br />
* Name-check is now properly done. ([[Alex Ionescu]])<br />
* The keep-alive reference is now deleted when going from permanent->temporary object. ([[Alex Ionescu]])<br />
* The parent directory is now dereferenced and cleared when deleting the object. ([[Alex Ionescu]])<br />
* The security procedure is now called to delete the SD, and the name buffer is freed. ([[Alex Ionescu]])<br />
* Remove ObGetObjectHandleCount, it's not a public function. ([[Alex Ionescu]])<br />
* Modified ObpDecrementHandleCount to accept Process and GrantedAccess paraemters since the definition for the Close Procedure Callback requires them (and we were currently sending NULL). Also send 0 for process handle count, since we don't yet parse/support per-process handle databases. ([[Alex Ionescu]])<br />
* Minor optimization: All objects have an object type, don't actually check if the object has one when decrementing a handle. ([[Alex Ionescu]])<br />
* Minor accounting fix: Decrement the total number of handles for the object type whose handle count is being decreased. ([[Alex Ionescu]])<br />
* Call the OkayToClose Procedure, if one is present, to allow the object owner a chance to disallow closing this handle. I believe this is required for properly protecting Winsta/Desktop handles (instead of using the regular protection mode, since that one can be bypassed). ([[Alex Ionescu]])<br />
* Make ObpCreateHandleTable return NTSTATUS instead of VOID, so that it can return STATUS_INSUFFIENT_RESOURCES if the handle table couldn't be allocated. ([[Alex Ionescu]])<br />
* Clone ObpCreateHandle to CmpCreateHandle. I am about to fix its implementation and since Cm* currently abuses Ob I feel it safer to give it its own internal function. ([[Alex Ionescu]])<br />
* Make ObpCreateHandle internal to Ob as it should be. Change NtCreateProcessTokenEx to use ObOpenObjectByPointer, it has no business manually trying to create a handle. Same goes for ExpLoadInitialProcess. ([[Alex Ionescu]])<br />
* Add some trace macros to monitor handle/pointer counts for fixing regressions/bugs later. ([[Alex Ionescu]])<br />
* Change ObpCreateHandle to use an ACCESS_STATE structure instead of DesiredAccess. This is to help moving to an updated model where creating and incrementing a handle are 2 operations, so that code can be refactored (similar to how we now have Delete/Decrement as 2 operations). ([[Alex Ionescu]])<br />
* Fix functions that were not creating an ACCESS_STATE Structure to create one locally now, or use the one passed as a parameter, if available. ([[Alex Ionescu]])<br />
* Change ObpCreateHandle to the one documented and explained in the Gl00my documentation. It also fits the re-factored split create/increment model better, supports open reasons, and allows (to do) type-checking and extra object referencing from within one routine. ([[Alex Ionescu]])<br />
* Add code to ObOpenObjectByName to detect the OpenReason. Experimental, since I'm not sure when to clear the flag. ([[Alex Ionescu]])<br />
* ObpCreateHandle: Honour ObjectType passed to the function and fail if it doesn't match. ([[Alex Ionescu]])<br />
* ObpCreateHandle: Use table-based logic instead of process-based logic for Kernel vs User-mode handles (same change that's been done all over the place, since it requires only one dereference of the process object). ([[Alex Ionescu]])<br />
* ObpCreateHandle: Do the GENERIC/MAXIMUM_ALLOWED logic directly inside the ACCESS_STATE structure. ([[Alex Ionescu]])<br />
* ObpCreateHandle: Increase the object type's number of handles as well. ([[Alex Ionescu]])<br />
* ObpCreateHandle: Set the handle table entry's ObAttributes correctly; the old code seems to have been messing that up. ([[Alex Ionescu]])<br />
* ObpCreateHandle: Honour the AdditionalReferences parameter and do referencing bias if requested. ([[Alex Ionescu]])<br />
* ObpCreateHandle: Honour the ReturnedObject parameter to return the object pointer back to the caller. ([[Alex Ionescu]])<br />
* ObpCreateHandle: If we failed because a handle couldn't be allocated, use the distinguied STATUS_INSUFFICIENT_RESOURCES error code instead of the generic STATUS_UNSCUCESFFUL, and backout all the changes we made by calling ObpDecrementHandleCount. ([[Alex Ionescu]])<br />
* Split ObpCreateHandle into two distinct operations: Incrementing and Creating (like we have Delete/Decrement). No code additions, just splitting. ([[Alex Ionescu]])<br />
* Because of the split, we can now directly only do an Increment when duplicating the handle, since we don't need to create a brand new one. Also, when inheriting, we can now properly do an increment as well, instead of simply manually increasing the handle count (because for each inherited handle, access checks and openprocedure should've still been called). ([[Alex Ionescu]])<br />
* Use PagedPool instead of NonPagedPool memory, and also tag the allocation for debugging. ([[Alex Ionescu]])<br />
* Send needed data to the security procedure instead of NULL/0, including the Generic Mapping, and the actual Security Decriptor. ([[Alex Ionescu]])<br />
* Only un-assign the descriptor in case of failure, not all the time (the whole point of the API is to assign it!) ([[Alex Ionescu]])<br />
* Tell the caller that memory was NOT allocated if we failed to get the security descriptor. ([[Alex Ionescu]])<br />
* ObInsertObject: Create the ACCESS_STATE structure much earlier. ([[Alex Ionescu]])<br />
* ObInsertObject: Actually send the access state and parse context to ObFindObject, when called from ObInsertObject (this should fix some hidden regressions, since they finally get an access state with access masks now). ([[Alex Ionescu]])<br />
* ObInsertObject: Remove some deprecated hacks. ([[Alex Ionescu]])<br />
* ObInsertObject: If inserting the handle failed, cleanup the name and remove it from the directory entry. ([[Alex Ionescu]])<br />
* ObInsertObject: Fix a memory leak because we weren't deleting the access state. ([[Alex Ionescu]])<br />
* Fix ObGetObjectSecurity to use the object type's pool type instead of assuming PagedPool. ([[Alex Ionescu]])<br />
* Re-wrote the way ObInsertObject handles security as described in Chapters 6 and 9 of Gl00my (ie: made it use ObGetObjectSecurity and ObAssignObjectSecurity; ironically, these functions already existed/are exported and could've been used since the start instead of duplicating code). ([[Alex Ionescu]])<br />
* Fix ObpReferenceCachedSecurityDescriptor only to touch the cached entry if it actually gets a non-NULL descriptor. Also improved it to return the referenced SD, instead of requiring the caller to do it manually. ([[Alex Ionescu]])<br />
* ObFindObject should return the actual object being inserted, in the insert case (otherwise it always returns the root-directory instead.) ([[Alex Ionescu]])<br />
* Add check for optimized case for objects with no name and no security, but not implemented (ObpIncrementUnnamedHandleCount in Gl00my docs), since I need a better translation then babelfish's. ([[Alex Ionescu]])<br />
* Fix ObInsertObject to save the Security Descriptor in the Access State structure. Gl00my mentions this isn't absorbed by SeCreateAccessCheck and I just noticed that too. ([[Alex Ionescu]])<br />
* We only need to perform security checks for a new object, in ObInsertObject, not if the object already existed. ([[Alex Ionescu]])<br />
* Added proper backout+failure code in ObInsertObject if lookup failed, and also look out for mismatch/exists/collision cases (implemented using simple logic). ([[Alex Ionescu]])<br />
* Rename ObpDeleteHandle to ObpCloseHandleTableEntry and change semantics so that it deals directly with the entry and table. This re-factoring optimizes the case where we already have the entry and don't want to use the handle to get the kernel table and then attach/detach/enter/exit critcal regions (such as when sweeping). ([[Alex Ionescu]])<br />
* Implement ObCloseHandle, a new XP Export ([[Alex Ionescu]])<br />
* Take old NtClose code and write it in ObpCloseHandle, which is the master function that Ntclose/ObCloseHandle share. ([[Alex Ionescu]])<br />
* Complete patch requires ExSweepHandleTable to be modified to return the Handle instead of the entry, so that sweeping can be fixed to properly destroy handles and call their OkayToClose, instead of just decrementing a count. ([[Alex Ionescu]])<br />
* Add Object Header Quota structure/define ([[Alex Ionescu]])<br />
* Give Files/Devices a parse routine and currently stubplement it for debugging purposes and trying to figure out a way to kill the IopCreateFile hack. ([[Alex Ionescu]])<br />
* Implement ObpChargeQuotaForObject. Using a memory breakpoint in WinDBG I've finally found where the OB_FLAG_CREATE_INFO flag gets masked out. Also attempted a very naive quota charging implementation, but it's a guess and probably wrong (but at least it does...something.) ([[Alex Ionescu]])<br />
* Remove the heart (but not the brain) of the IopCreateFile hack. A much 'nicer' hack now detects if a filename can't be found, and instead of inserting it into the object directory (wrong!), calling IopCreateFile (wrong!), then having it fail, only to then remove the newly inserted object entry (wrong wrong wrong!), IopCreateFile is now *only* called for real files, otherwise Ob detects the invalid name and fails nicely and quickly. ([[Alex Ionescu]])<br />
* Add the OPEN_PACKET structure to internal headers. Used for the I/O Parse Routine. ([[Alex Ionescu]])<br />
* Gut down IopCreateFile to the strict minimum so that only the critical parts remain. ([[Alex Ionescu]])<br />
* NT Compatiblity fix in ObFindObject: stop parsing if remaining path is null, this means that the parse routine is done parsing and that -this* is the final object. ([[Alex Ionescu]])<br />
* Fix the CmpObjectDelete bugcheck by hacking away some code reponsible for it. The bugcheck is probably the result of the current ref-count bug. ([[Alex Ionescu]])<br />
* Remove some more code in IoCreateFile/IopCreateFile to help with deprecating it later. ([[Alex Ionescu]])<br />
* Update sweep callback to send the handle number. Patch by Thomas Weidenmueller (w3seek@reactos.org) ([[Alex Ionescu]])<br />
* Export ObCloseHandle since it's implemented now ([[Alex Ionescu]])<br />
* Implement ObpCreateUnnamedHandle and ObpIncrementUnnamedHandleCount as optimizations for ObInsertObject with unnamed objects. ([[Alex Ionescu]])<br />
* Fix definitions of OB_QUERYNAME_METHOD and OB_OKAYTOCLOSE_METHOD. Add fixme for OB_SECURITY_METHOD, will change it later. ([[Alex Ionescu]])<br />
* Simplified NtDuplicateObject to a simple stub around ObDuplicateObject, there is no need to have lengthy hacks for NtCurrentProcess/NtCurrentThread(). ([[Alex Ionescu]])<br />
* Cleanup ObDuplicateObject to use normal Ob routines instead of grovelling through handle table structures and manually touching the handle count: It now calls ObpIncrementHandleCount and all the underlying operations are done on the duplicated handle. Also access state creation is done if the duplicated handle has different desired access. ([[Alex Ionescu]])<br />
* Get rid of a dozen of debug prints that have been straying along for a long time (some for years), most of which I must shamefully admit I am responsible for. ([[Alex Ionescu]])<br />
* Fix a critical bug subsystem bug in smss and don't hang the system 15 seconds on boot-up. ([[Alex Ionescu]])<br />
* Rebase some problematic modules (and fix wshtcpip's rbuild file) to avoid relocations on bootup and some process startup. ([[Alex Ionescu]])<br />
* Enable lsass startup in winlogon and the registry. ([[Alex Ionescu]])<br />
* Only show debug log header when actually debugging to a file. ([[Alex Ionescu]])<br />
* Bring out the champagne... one of my first-ever and most ancient ReactOS TODOs: the IopCreateFile hack has been totally removed and we now have a file/device parse routine. It's still nothing like NT's but it's not a hack anymore, and actually works like it should. ([[Alex Ionescu]])<br />
* Pretty much the last Ob implementation/optimization patch (Except for a minor fix by Thomas to fix handle sweeping), re-implemented the ObFindObject routine by using some code that I had written almost 2 years ago with help from Thomas and Filip, plus some fixes discovered today while testing. ([[Alex Ionescu]])<br />
* Fixed symbolic link and desktop/winsta parse procedures to become NT-compatible now that ObFindObject is as well. Also fixed file/device parse routine for these changes. ([[Alex Ionescu]])<br />
* ObFindObject now supports STATUS_REPARSE_OBJECT, and has an optimized path for parsing when a root directory is given, as well as is entirely unicode_string-based. ([[Alex Ionescu]])<br />
* Cleaned up ob.h and added ob_x.h for the inlined functions. ([[Alex Ionescu]])<br />
* Implemented new Ob tracing system. ([[Alex Ionescu]])<br />
* Enable ROS_LEAN_AND_MEAN if you want 50% smaller binaries and a 20MB reduction in memory usage. ([[Alex Ionescu]]) (Note: ROS_LEAN_AND_MEAN may not work due to hidden bugs in debug symbols)<br />
* Create a new module type: exportdriver for drivers which also export files. Not supremely useful right now, but it helps us decrease compilation time of normal drivers by not running useless commands on them. Later we'll also strip out their export table. We can also make exportdrivers automatically read their .def file instead of specfiygone one. ([[Alex Ionescu]])<br />
* Fix some referencing/bugs in Ob functions that I wrote which were known fixmes. ([[Alex Ionescu]])<br />
* Remove every instance of ObDereferenceObject after an ObInsertObject that I could find. This temporarily will make the object leaks even worse, but it's better to increase leaks and then fix the ref bug, then to decrease references while missing spots that forgot to reference them (you'd end up with hard to debug randomly dying objects). ([[Alex Ionescu]])<br />
* Handle mount failure (such as when a CDROM isn't actually inside the drive) instead of assuming success and setting a NULL device object. Fixes regression seen by Arty/James when winefiling, dir d:-ing or hardware device wizarding. ([[Alex Ionescu]])<br />
* Check for valid access in NtSignalAndWaitForSingleObject and don't check if ResultLength isn't NULL in NtQueryObject, because it's not optional. ([[Alex Ionescu]])<br />
* ObpCreateUnnamedHandle/ObpCreateHandle => Reference the object before calling ExCreateHandle. ([[Alex Ionescu]])<br />
* Fix two critical bugs in ObInsertObject: We were creating a handle for the wrong object (in ObInsertObject) and we were not passing the ReferencedObject parameter to ObpCreateHandle, so that object was never being returned properly to the caller. ([[Alex Ionescu]])<br />
* ObfDereferenceObject shouldn't check for the OB_FLAG_PERMANENT flag, or else it would never be possible to kill permanent objects while in kernel mode (permanent objects only apply to user-mode handles). ([[Alex Ionescu]])<br />
* Fix another critical bug in ObInsertObject: don't overwrite the lookup status with the handle creation status. If the lookup returned something like OBJECT_NAME_EXISTS (which is a success + warning), we don't want to overwrite it with ObpCreateHandle's STATUS_SUCCESS. This should fix a large number of regressions (and also fixes many WINE ntdll "om" tests). ([[Alex Ionescu]])<br />
* We also now correctly dereference the object in ObInsertObject, which should reduce one source of leaks (But there is still one). OTOH, this makes the Cm code crash at shutdown (I'll fix this ASAP, this fix is worth having atm.) ([[Alex Ionescu]])<br />
* Catch illegal call to Ob functions when ObjectAttributes == NULL and return distinguished status code for this situation (STATUS_INVALID_PARAMETER), instead of failing due to access violation. ([[Alex Ionescu]])<br />
* Add some hacks to Cm to allow creating registry keys that finish with a backslash (this works under NT). ([[Alex Ionescu]])<br />
* Also add a REALLY nasty hack that forces OBJ_CASE_INSENSITIVE on all Registry APIs... this is needed because we seem to completely mess up case sensitivity otherwise and any user-mode caller that doesn't specify that flag will fail. ([[Alex Ionescu]])<br />
* Implement ObCheckObjectAccess and call it to perform access verification checks. ([[Alex Ionescu]])<br />
* Properly create devices, processes and controllers with an extra reference count, so that when the code closes their handle they don't die. ([[Alex Ionescu]])<br />
* Check for invalid uses of ObfDereferenceObject for our current debugging purposes. ([[Alex Ionescu]])<br />
* Add SEH to NtQueryObject. ([[Alex Ionescu]])<br />
* ObCreateObjectType: Fix a check in ObpFreeObject which was causing a bugcheck if the object had a handle database (fixes another kmtest failure/crash). ([[Alex Ionescu]])<br />
* ObCreateObjectType: Verify parameters passed to ObCreateObjectType based on behaviour seen on Windows 2003 (I might've missed some, these are the ones I tested for). This fixes 2 of the kmtest failures. ([[Alex Ionescu]])<br />
* ObCreateObjectType: Also make sure the object type's name doesn't have a slash in the name. ([[Alex Ionescu]])<br />
* ObCreateObjectType: Also make sure we don't allow creating two object types with the same name. ([[Alex Ionescu]])<br />
* ObCreateObjectType: Also use our own local copy of the object name and copy it. ([[Alex Ionescu]])<br />
* IopRemoveThreadIrp: Get the DeviceObject and I/O Stack *before* going back to dispatch, otherwise race conditions will happen. ([[Alex Ionescu]])<br />
* IopRemoveThreadIrp: Don't complete and IRP if it's already been through two stacks. ([[Alex Ionescu]])<br />
* IopRemoveThreadIrp: Remove the IRP from the thread's IRP list before re-initializing the list, or else the IRP was lost. ([[Alex Ionescu]])<br />
* IopRemoveThreadIrp: Make sure we have an error log entry before writing to it. ([[Alex Ionescu]])<br />
* IopCompleteRequest: Don't read pointers from the file object or IRP before they are actually used, because in some parts of the code, these pointers could change before we actually use them. ([[Alex Ionescu]])<br />
* IopCompleteRequest: Get rid of the #if 1/#if 0 nonsense hbirr had added. ([[Alex Ionescu]])<br />
* IopCompleteRequest: Properly check for success/warning/failure cases (thanks to Filip for checking this out with me last year) ([[Alex Ionescu]])<br />
* IopCompleteRequest: Handle scenarios when the IRP is marked IRP_CREATE_OPERATION ([[Alex Ionescu]])<br />
* IopCompleteRequest: Bugcheck if IofCompleteRequest is called twice on the same IRP ([[Alex Ionescu]])<br />
* IopCompleteRequest: Copy the master IRP's thread to the associated IRP ([[Alex Ionescu]])<br />
* IopCompleteRequest: Free the Auxiliary Buffer if there is one. ([[Alex Ionescu]])<br />
* Add more name/prototype decoration and API tracing. ([[Alex Ionescu]])<br />
* Don't handle IRP_MJ_POWER in IoBuildAsyncronousFsdRequest. ([[Alex Ionescu]])<br />
* Use IoAllocateMdl instead of being a cowboy and using MmCreateMdl. ([[Alex Ionescu]])<br />
* Handle failure/out-of-memory cases in IoBuildAsyncronousFsdRequest ([[Alex Ionescu]])<br />
* Free the input buffer on failure in IoBuildDeviceIoControlRequest ([[Alex Ionescu]])<br />
* Handle failure in IoBuildSyncronousFsdREquest. ([[Alex Ionescu]])<br />
* Bugcheck if cancelling and IRP that's already been completed. ([[Alex Ionescu]])<br />
* Bugcheck if attempting to call a driver with an IRP that's already past its maximum stack size. ([[Alex Ionescu]])<br />
* Make sure that when we free an IRP, it's not associated to a thread anymore, nor having any drivers that think it's valid. ([[Alex Ionescu]])<br />
* Fix IRP/Completion packet lookaside allocation. We weren't setting a zone size, and I/O Completion packets were also using the wrong size. ([[Alex Ionescu]])<br />
* Rewrite I/O MDl support to use lookaside lists for allocations below 23 pages (same as on NT). This is is an incredible performance optimization because MDLs are often allocated and de-allocated during I/O operations, and using the lookaside list decreases pool fragmentation and slowdown. ([[Alex Ionescu]])<br />
* Rewrite IoBuildPartialMdl. It did not work like documented in the DDK and also had a bug documented by Microsoft as being in XP. ([[Alex Ionescu]])<br />
* Refactor Io*Event APIs to call an internal worker function instead of duplicating the same code twice. ([[Alex Ionescu]])<br />
* Optimize Io*Work APIs and initialize the event on allocation, not on queue!! ([[Alex Ionescu]])<br />
* Use only one SEH block in NtRemoveIoCompletion ([[Alex Ionescu]])<br />
* Get the completion status from the IRP, not from the Mini-Packet, if the completion came from an IRP and not a Mini-Packet. ([[Alex Ionescu]])<br />
* Io*SymbolicLink should use OBJ_CASE_INSENSITIVE ([[Alex Ionescu]])<br />
* Use DELETE instead of SYMBOLIC_LINK_ALL_ACCESS when deleting. ([[Alex Ionescu]])<br />
* Clear the IO_TIMER structure when creating it. ([[Alex Ionescu]])<br />
* Add basic support/detection for debug I/O remove blocks (we bugcheck if we identify one though). ([[Alex Ionescu]])<br />
* Simplify IoReleaseRemoveLockAndWaitEx ([[Alex Ionescu]])<br />
* Remove locks are SYNCH events, not Notification events! ([[Alex Ionescu]])<br />
* Make sure IoConnectInterrupt returns NULL to the caller on failure. ([[Alex Ionescu]])<br />
* Add some missing IO_ERROR definitions to the DDK and add some tags ([[Alex Ionescu]])<br />
* Fix IoSetThreadHardErrorMode... it was reading the TEB instead of the PETHREAD. ([[Alex Ionescu]])<br />
* Optimize Error Logging: Use a static work item instead of allocating one each time, and don't use a spinlock for the buffer count, when we can use interlocked functions instead. ([[Alex Ionescu]])<br />
* Log Entries can have Device AND/OR Driver Objects, not just a single one. They must also be referenced/dereferenced on allocation/free. ([[Alex Ionescu]])<br />
* Rewrite IopLogWorker to properly deal with Device/Driver objects and querying their names, as well as with additional strings that the caller might be sending. ([[Alex Ionescu]])<br />
* IopGetDevicePointer: Close the handle if we were able to acquire it. ([[Alex Ionescu]])<br />
* IoAttachDevice/IoAttachDeviceByPointer: Fail with STATUS_NO_SUCH_DEVICE if we couldn't attach. ([[Alex Ionescu]])<br />
* IoAttachDEviceTodEviceStackSafe: VPBs don't get inherited. ([[Alex Ionescu]])<br />
* IoCreateDevice: Only set OBJ_PERMAMENT if the caller requested it. ([[Alex Ionescu]])<br />
* IoCreateDevice: Return a NULL Device object if we failed to create it. ([[Alex Ionescu]])<br />
* IoCreateDevice: Set alignment requirement to 0, x86 doesn't need it. ([[Alex Ionescu]])<br />
* Add IoGetDevObjExtension for getting the PEXTENDED_DEVOBJ_EXTENSION from a device object instead of always doing a huge typecast. ([[Alex Ionescu]])<br />
* Implement device unloading through IopUnloadDevice and device referencing through IopReferenceDeviceObject and IopDereferenceDeviceObject, and make IoDeleteDevice and IoDetachDevice unload the device on 0 reference count. Doesn't fully work yet. ([[Alex Ionescu]])<br />
* Simplify IoGetAttachedDEvice/IoGetAttachedDeviceReference not to use an extra stack variable. ([[Alex Ionescu]])<br />
* Fix some bugs in IoGetRelatedDeviceObject: We should make sure that FO_DIRECT_DEVICE_OPEN isn't set when reading from the VPB's DO, otherwise we return the FO's DO directly. Also check for attachment before trying to get any attached device. ([[Alex Ionescu]])<br />
* Implement IoRegisterLastchanceShutdownNotification based on IoRegisterShutdownNotification ([[Alex Ionescu]])<br />
* Modify IoUnregisterShudownNotification to loop both lists now. ([[Alex Ionescu]])<br />
* Used the lock in IoShutdownREgisteredDevices when looping the list, and changed it to send IRP_MJ_SHUTDOWN to the attached DO. Also fixed a memory leak where the shutdown entry wasn't being freed, and optimized the function only to initialize the event once (And simply clear it each time). ([[Alex Ionescu]]) ([[Alex Ionescu]])<br />
* Clear the current IRP before parsing the Device Queues ([[Alex Ionescu]])<br />
* Respect Cancelable parameter in IoStartNextPacket(ByKey) instead of ignoring it (acquire the cancel lock when it's requested) ([[Alex Ionescu]])<br />
* Raise IRQL to DISPATCH_LEVEL in IoStartPacket instead of expecting the caller to do it and crashing. Also only use Cancel Lock if a Cancel Function was specified. ([[Alex Ionescu]])<br />
* Actually handle the case where the IRP Was cancelled right after insert and the Cancel Routine has to be called. ([[Alex Ionescu]])<br />
* Add definitions for additional DOE flags to NDK. ([[Alex Ionescu]])<br />
* Implement IoSetStartIoAttributes ([[Alex Ionescu]])<br />
* Obey StartIo Flags set by IoSetStartIoAttributes and change Packet functions to Windows XP/2003 semantics by supporting non-cancelable packets and deferred Start I/O calling. ([[Alex Ionescu]])<br />
* Implement some functions to handle VPB Referencing/Dereferencing. ([[Alex Ionescu]])<br />
* IoVerifyVolume: Send the IRP to the base FSD, in case the current FSD is an attachee ([[Alex Ionescu]])<br />
* IoVerifyVolume: Set correct flags in the IRP to notify that this is a mount operation using PAGING I/O semantics. ([[Alex Ionescu]])<br />
* IoVerifyVolume: Don't ignore AllowRawMount parameter. ([[Alex Ionescu]])<br />
* IoVerifyVolume: We want to mount the File System on *FAILURE*, not on SUCCESS! ([[Alex Ionescu]])<br />
* IoVerifyVolume: Add reference/dereferencing to the VPB. ([[Alex Ionescu]])<br />
* IoVerifyVolume: Get rid of the stupid LIST_FOR_EACH macros in FS Notifcation APIs. ([[Alex Ionescu]])<br />
* Each new change request should be queued at the end of the list, not at the head. ([[Alex Ionescu]])<br />
* Also, reference the device object for each registration, since one more object is holding a pointer to it, likewise, dereference the object on deregistration. ([[Alex Ionescu]])<br />
* IopLoadFileSystem should use the base FSD in case the device object is an attachee. Also, use IoBuildDEviceIoControlRequest to minimize the IRP setup to only a couple of lines. ([[Alex Ionescu]])<br />
* Simplify/modularize FS registration by using distinct lists for each type of FS (Tape/Disk/Network/Cdrom). ([[Alex Ionescu]])<br />
* Optimize by using directly the device queue instead of allocating a structure for each FS registered. ([[Alex Ionescu]])<br />
* Hack IopMountVolume to manage this new model. Improved version coming in next patch to deal with some bugs. ([[Alex Ionescu]])<br />
* Respect DeviceIsLocked flag and Alertable in IopMountVolume ([[Alex Ionescu]])<br />
* Don't mount if the VPB is alread ymoutned or being removed ([[Alex Ionescu]])<br />
* Bugcheck the system if we failed to mount the boot partition. ([[Alex Ionescu]])<br />
* Mount the FS inline to avoid sending 6 parameters to a function only called once. ([[Alex Ionescu]])<br />
* Set the right IRP flags for a mount operation. ([[Alex Ionescu]])<br />
* Don't ignore AllowRawMount flag. ([[Alex Ionescu]])<br />
* Don't waste time passing or clearing unused flags/data on the IRP/Io Stack. ([[Alex Ionescu]])<br />
* If the device to be mounted is an attachee, find the base device object ([[Alex Ionescu]])<br />
* Reference the device object being mounted. ([[Alex Ionescu]])<br />
* If the file system being mounted is an atachee, find its base device object too, and increase the IRP Stack for each attached FSD. ([[Alex Ionescu]])<br />
* Fix IRP parameters with this new information. ([[Alex Ionescu]])<br />
* Improve list looping to remove gotos. ([[Alex Ionescu]])<br />
* Dereference the device object in case of failure. ([[Alex Ionescu]])<br />
* Add some optimizations to quickly skip invalid raw mounting. ([[Alex Ionescu]])<br />
* Add support for VPB_RAW_MOUNT. ([[Alex Ionescu]])<br />
* Allow raw mount if this is the only device on the list. ([[Alex Ionescu]])<br />
* Make the success case go through shared exit, otherwise the device wasn't getting unlocked previously. ([[Alex Ionescu]])<br />
* Implement IopInitailizeVpbForMount for the purpose of setting up the VPB for a newly mounted DO. It properly references the VPB and sets up its stack size and flags, adding support for VPB_RAW_MOUNT. Also sets the VPB pointer in the DevObjExtension. ([[Alex Ionescu]])<br />
* Fix a bug which was causing us to incorrectly unlock the device if it was already locked by the caller instead of by IopMountVolume. ([[Alex Ionescu]])<br />
* When loading the file system, make sure to unlock the device object if we had locked it in IopMountVolume, as well as to re-lock it afterwards. Also handle a potential race condition due to this unloacking, in which the VPB might've become mounted behind our back, and simply return success if this happened. ([[Alex Ionescu]])<br />
* Use IoIsErrorUserInoduced to check if we couldn't mount the device because it was not actually inserted, was unrocognized, write-protected, etc... and completely break out of the mounting procedure if so. ([[Alex Ionescu]])<br />
* Also use FsRtlIsTotalDeviceFailure to check if the error was a fatal device error (like a CRC error) and abandon mounting in this case as well. ([[Alex Ionescu]])<br />
* Small optimization: don't bother to get the File System Listhead we'll parse if we're going to fail because of wrong VPB flags later... get the list only after we're sure we need it. ([[Alex Ionescu]])<br />
* Move IoGetBaseFileSystemDeviceObject to device.c and make it check for FO_DIRECT_DEVICE_OPEN, which it wasn't before (and also code it in a less confusing way like the other IoGetXxxDeviceObject APIs) ([[Alex Ionescu]])<br />
* Mask out the DO_VERIFY_VOLUME flag when mounting a device. ([[Alex Ionescu]])<br />
* Start of heavy work on iofunc.c: ([[Alex Ionescu]])<br />
* Created our new friends: IopCleanupFailedIrp, IopAbortInterruptedIrp, IopPerformSynchronousRequest, IopLockFileObject, IopUnlockFileObject, IopQueueIrpToThread, IopUpdateOperationCount. ([[Alex Ionescu]])<br />
* What does this mean: We actually queue IRPs to their thread! We actually respect I/O transfers being interrupted/alerted! We actually respect I/O operation counts! We actually LOCK FILE OBJECTS instead of randomly using them! We now support Deferred (read: MUCH faster) I/O completion. ([[Alex Ionescu]])<br />
* First function blessed: IopDeviceFsIoControl. ([[Alex Ionescu]])<br />
* Also simplified access rights check and fixedup some formatting. ([[Alex Ionescu]])<br />
* Combine IoQueryVolumeInformation and IoQueryFileInformation ([[Alex Ionescu]])<br />
* Fix them to lock the fileobject for synch operations, use IopCleanupFailedIrp, queue the IRP in the thread's list, support aborting the I/o operation through IopAbortInterruptedIrp, and properly wait for comlpetion. ([[Alex Ionescu]])<br />
* Same changes for IoSertInformation: Lock the FO, queue the IRP, support alerted I/O, etc... ([[Alex Ionescu]])<br />
* Create IopFinalizeAsynchronousIo to deal with Sync APIs working on Async file objects, which need to be waited on differently and have the IOSB copied manually. ([[Alex Ionescu]])<br />
* Update NtFlushBuffersFile to new semantics (ie, usage of the new implemented functions). ([[Alex Ionescu]])<br />
* NtLockFile: Add proper sync operation. ([[Alex Ionescu]])<br />
* NtLockFile: Set the APC Routine/Context in the IRP instead of ignoring them. ([[Alex Ionescu]])<br />
* NtLockFile: Dereference the event on failure. ([[Alex Ionescu]])<br />
* NtLockFile: Set the allocated buffer as AuxiliaryBuffer so the I/O manager fres it. ([[Alex Ionescu]])<br />
* Add proper sync handling to NtUnlockFile. ([[Alex Ionescu]])<br />
* Fix sync usage in NtQueryVolumeInformationFile, set the right IRP flags so that the I/O manager can handle copying the data back and freeing the buffer, and enable deferred completion. ([[Alex Ionescu]])<br />
* Same sort of changes for NtSetVolumeInformationFile. ([[Alex Ionescu]])<br />
* NtReadFile: Allow async i/o access on mailslots, without a byte offset. ([[Alex Ionescu]])<br />
* NtReadFile: Fix sync semantics just like for the other functions until now. ([[Alex Ionescu]])<br />
* NtReadFile: Fix a potential object leak in a failure case. ([[Alex Ionescu]])<br />
* NtReadFile: Don't call IoBuildSyncronousFsdRequest since we want to build the IRP ourselves. ([[Alex Ionescu]])<br />
* NtReadFile: Use deferred I/O as an optimization. ([[Alex Ionescu]])<br />
* NtWriteFile: Allow async i/o access on mailslots, without a byte offset. ([[Alex Ionescu]])<br />
* NtWriteFile: Fix sync semantics just like for the other functions until now. ([[Alex Ionescu]])<br />
* NtWriteFile: Fix a potential object leak in a failure case. ([[Alex Ionescu]])<br />
* NtWriteFile: Don't call IoBuildSyncronousFsdRequest since we want to build the IRP ourselves. ([[Alex Ionescu]])<br />
* NtWriteFile: Use deferred I/O as an optimization. ([[Alex Ionescu]])<br />
* NtQueryDirectoryFile: Setup a buffer/MDL and the correct IRP flags so that that I/O manager can handle allocation, copy, free for us. ([[Alex Ionescu]])<br />
* NtQueryDirectoryFile: Setup the search pattern as an auxiliary buffer so that the I/O Mgr can track that one for us as well. ([[Alex Ionescu]])<br />
* NtQueryDirectoryFile: Update to use the correct sync semantics/routines. ([[Alex Ionescu]])<br />
* NtQueryDirectoryFile: Use deferred I/O completion. ([[Alex Ionescu]])<br />
* Fix NtQueryInformationFile to use correct sync/async semantics and use deferred I/O completion. This routine doesn't use IopSyncronous/Asyncronous helper routines because it can be optimized to handle some Information classes in-line (not currently being done). ([[Alex Ionescu]])<br />
* Fix NtSetInformationFile to use correct sync/async semantics and use deferred I/O completion. This routine doesn't use IopSyncronous/Asyncronous helper routines because it can be optimized to handle some Information classes in-line (not currently being done except for Completion Ports, like the previous code). ([[Alex Ionescu]])<br />
* Add locking in IopDeleteFile, and only check for completion context or name if the file has a DO, otherwise those shouldn't exist. ([[Alex Ionescu]])<br />
* Added support for device objects as well in IopSecurityFile, since the code is similar. Also fixed sync semantics for file objects, and made other little small fixes. ([[Alex Ionescu]])<br />
* Fix and combine the creation of I/O Object Types, it was a complete mess with missing attributes and dangerous bugs (Adapters and Controllers had IopParseDevice as a parse routine and the same pool charge as a deivice object, etc.) ([[Alex Ionescu]])<br />
* Fix IopQueryNameFile to properly validate and calculate lengths at each step of the way and to support incomplete buffers. Previously, dangerous assumptions were made about the buffers and the actual required length was never returned. ([[Alex Ionescu]])<br />
* Finally fix IoCreateStreamFileObject. I had fixed it a long time ago but back then it was causing regressions. It now properly creates a handle for the FO and sets the right flags. ([[Alex Ionescu]])<br />
* The FO's lock is a Synch event, not a notification event! ([[Alex Ionescu]])<br />
* Fix IopcloseFile... I'm not sure it was working right after the Ob changes, so it's possible some devices weren't getting IRP_MJ_CLEANUP... also made it lock the FO and detect malformed FOs (more spam for you on the debug logs!) -* but this is one problem I'm planning on fixing. ([[Alex Ionescu]])<br />
* IoCreateFile: Start with empty object ([[Alex Ionescu]])<br />
* IoCreateFile: Set the type/size in the object header ([[Alex Ionescu]])<br />
* IoCreateFile: Don't rudely ignore the following flags: FILE_WRITE_THROUGH, FILE_SEQUENTIAL_ONLY, FILE_RANDOM_ACCESS, OBJ_CASE_INSENSITIVE; they are not merely decorative. ([[Alex Ionescu]])<br />
* IoCreateFile: Set correct IRP flags for IRP_CREATE_OPERATION so that the I/O manager knows how to deal with the request (also set SYNCH_API flag). ([[Alex Ionescu]])<br />
* IoCreateFile: Deferred mode not yet enabled. ([[Alex Ionescu]])<br />
* IoCreateFile: Simplify the way we set the parameters for pipes/mailslots/files. ([[Alex Ionescu]])<br />
* IoCreateFile: Don't close the handle of an invalid FO. ([[Alex Ionescu]])<br />
* Make IoCreateFile use deferred I/O completion. ([[Alex Ionescu]])<br />
* Simplify IopParseDevice by removing duplicate code. ([[Alex Ionescu]])<br />
* Begin attempt at usage of the OPEN_PACKET for I/O Create operations. Currently we only build it and verify it, and I've fixed up IopCreateFile. ([[Alex Ionescu]])<br />
* Move the code in IoCreateFile inside IopParseDevice where it belongs. Currently only a raw move and hacks to make it not regress anything, but in the future we can now finally start applying some important fixes for proper communication with FSDs and setting a myriad of flags and settings required. Will also allow for some nice optimizations in the future. ([[Alex Ionescu]])<br />
* Allocate a copy of the EA buffer even for kernel-mode requests, also make the call use a tagged buffer. ([[Alex Ionescu]])<br />
* Detect if the FSD is reparsing, which we don't support now (we'll bugcheck for now, so we can quickly detect this later instead of handling it wrong). ([[Alex Ionescu]])<br />
* Use a simpler and more robust way to detect direct device opens and save it in a variable that's read when needed, instead of having multiple large code paths. ([[Alex Ionescu]])<br />
* Implement IopCheckVpbMounted and use it in IopParseDevice as documented in NT File System Internals. ([[Alex Ionescu]])<br />
* Add some missing ref/deref calls for DOs and VPBs. ([[Alex Ionescu]])<br />
* Add some more proper handling of ref/dereferencing in IopParseDevice. ([[Alex Ionescu]])<br />
* Add proper failure case for IRP allocation failure ([[Alex Ionescu]])<br />
* Only initialize the FO's lock for Synch I/O ([[Alex Ionescu]])<br />
* Add some missing comments ([[Alex Ionescu]])<br />
* Fixup some formatting ([[Alex Ionescu]])<br />
* Massively improve File I/O by using deferred I/O completion for MJ_(MAILSLOT/FILE/NAMEDPIPE)CREATE and manually completing the IRP. ([[Alex Ionescu]])<br />
* Uber-optimize IopQueryAttributesFile by using the OPEN_PACKET mechanism to query file attributes, instead of doing lots of slow native calls. ([[Alex Ionescu]])<br />
* Modify IopParseDevice to detect when OPEN_PACKET optimizations are in use (query or deletion (deletion not yet implemented)) and have some codepaths be slightly different and use DUMMY_FILE_OBJECT. ([[Alex Ionescu]])<br />
* Implement QueryOnly case in IopParseDevice to handle attribute queries. ([[Alex Ionescu]])<br />
* Add a missing dereference, and remove an extra DO reference. ([[Alex Ionescu]])<br />
* Remove a ROS hack in IopCloseFile. ([[Alex Ionescu]])<br />
* Add support for cases when the FSD that actually did the FO create wasn't the one to whom we went the IRP. ([[Alex Ionescu]])<br />
* Also add support for detecting volume opens and setting the FO_VOLUME_OPEN flag. ([[Alex Ionescu]])<br />
* Implement IoFastQueryNetworkAttributes which is now a piece of cake thanks to a properly implemented IopParseDevice. ([[Alex Ionescu]])<br />
* Implemented NtDeleteFile, also a piece of cake now that we have IopParseDevice done. ([[Alex Ionescu]])<br />
* Don't use FILE_ATTRIBUTE_NORMAL for mailslots/namedpipes. ([[Alex Ionescu]])<br />
* Zero out the OPEN_PACKET and only set non-zero members in functions that use it. ([[Alex Ionescu]])<br />
* NtCancelIoFile: Don't use macro-based list looping. ([[Alex Ionescu]])<br />
* NtCancelIoFile: Update operation counts. ([[Alex Ionescu]])<br />
* NtCancelIoFile: Wait 10ms instead of 100ms. ([[Alex Ionescu]])<br />
* Allocate Re-Init entries with a tag ([[Alex Ionescu]])<br />
* IoAllocateDriverObjectExtension and IoGetDriverObjectExtension: They were using the wrong structure (a made up one). ([[Alex Ionescu]])<br />
* IoAllocateDriverObjectExtension and IoGetDriverObjectExtension: They were saving the extension where the Driver Object's base address should be. ([[Alex Ionescu]])<br />
* IoAllocateDriverObjectExtension and IoGetDriverObjectExtension: Fix Memory leaks. ([[Alex Ionescu]])<br />
* IoAllocateDriverObjectExtension and IoGetDriverObjectExtension: Fix sometimes holding the lock too long. ([[Alex Ionescu]])<br />
* Created EXTENDED_DRIVER_OBJECT structure in NDK, since parts of the documented one are hidden (much like EXTENDED_DEVICE_OBJECT). ([[Alex Ionescu]])<br />
* Fixed IopDeleteDriver to free what it should. ([[Alex Ionescu]])<br />
* Fixed IoCreateDriver to handle more failure cases. ([[Alex Ionescu]])<br />
* Simplify IopReinitializeBootDrivers and IopReinitializeDrivers. ([[Alex Ionescu]])<br />
* For some strange reason, boot drivers were re-initailized *after* system drivers. ([[Alex Ionescu]])<br />
* Process Manager Rewrite: Architectural changes to match information in Windows Internals 4 and other documented sources of information (Windows Internals II by Probert). Code should match Win2003 layout. ([[Alex Ionescu]])<br />
* Process Manager Rewrite: Handle almost any possible process/thread sub structure and add its cleanup code stubs, so that when we actually implement them, we won't forget to clean them up in the process code. ([[Alex Ionescu]])<br />
* Process Manager Rewrite: Add interlocked usage of process and thread flags in order to make everything more thread-safe. ([[Alex Ionescu]])<br />
* Process Manager Rewrite: Better handle cases where threads die instantly, race conditions, and other weird issues. ([[Alex Ionescu]])<br />
* Process Manager Rewrite: Better handle process termination and thread termination. ([[Alex Ionescu]])<br />
* Process Manager Rewrite: Implement NtCreateProcessEx and update PspCreateProcess/NtCreateProcess. ([[Alex Ionescu]])<br />
* Process Manager Rewrite: Improve cleanup of process object in PspProcessDelete. ([[Alex Ionescu]])<br />
* Process Manager Rewrite: Optimize some things like User Thread startup. ([[Alex Ionescu]])<br />
* Process Manager Rewrite: Add some extra asserts, paged_code checks and also user-mode security check. ([[Alex Ionescu]])<br />
* Process Manager Rewrite: Implement helper API PsGetNextProcessThread ([[Alex Ionescu]])<br />
* Process Manager Rewrite: Optimize thread reaper (thanks Filip) ([[Alex Ionescu]])<br />
* Process Manager Rewrite: Do proper referencing/dereferencing of thread/processes (thanks Thomas) ([[Alex Ionescu]])<br />
* Fix up some stuff in Kernel Gates support. ([[Alex Ionescu]])<br />
* Fix up some implementation bugs in Executive Rundown support. ([[Alex Ionescu]])<br />
* Implement Fast Referencing and fix EX_FAST_REF definition. ([[Alex Ionescu]])<br />
* Implement ObReferenceEx and ObDereferenceEx. ([[Alex Ionescu]])<br />
* Split off ObpDeferObjectCompletion. A new win2003/vista API requires direct acess to being able to defer deletes. ([[Alex Ionescu]])<br />
* Fix some bugs in Process Token management and make it all properly use Fast Referencing. ([[Alex Ionescu]])<br />
* When duplicating a token in a new process, don't de-reference it before it's even created, and also insert it. ([[Alex Ionescu]])<br />
* Change ExpChangeRundown macro to fix warnings in msvc. ([[Alex Ionescu]])<br />
* Fix KiAcquireMutexContended, it was broken in contended cases. ([[Alex Ionescu]])<br />
* Inline Acquiring/Leaving guarded regions and the gmutex code, instead of going through 3-4 indirect calls. ([[Alex Ionescu]])<br />
* Add a mountain of ASSERTs to detect incorrect usage/state. ([[Alex Ionescu]])<br />
* Set ->SpecialApcDisable in the Guarded Mutex. ([[Alex Ionescu]])<br />
* Fix broken KTHREAD definition. SpecialApcDisable and KernelApcDisable were incorrectly marked as USHORT instead of SHORT, which could cause severe trouble under optimized builds (At least under MSVC, since MSVC wouldn't allow a negative number in an unsigned short). ([[Alex Ionescu]])<br />
* Use GM_LOCK_BIT_V. ([[Alex Ionescu]])<br />
* Fix broken KeTryToAcquireGuardedMutex prototype. ([[Alex Ionescu]])<br />
* Fix broken KGUARDED_MUTEX typedef and add bit values. ([[Alex Ionescu]])<br />
* Fix broken Interlocked* prototypes in regards to volatileness. ([[Alex Ionescu]])<br />
* Add ASSERT_QUEUE macro. ([[Alex Ionescu]])<br />
* Cleanup queue.c ([[Alex Ionescu]])<br />
* Add some ASSERTs ([[Alex Ionescu]])<br />
* Properly check for SPecialApcDisable before aborting a wait. ([[Alex Ionescu]])<br />
* Fix a bug in KiWaitQueue which was causing us not to remove the queue from the thread's wait list. ([[Alex Ionescu]])<br />
* Add some TIMER values to the ddk. ([[Alex Ionescu]])<br />
* Add DPC Settings (Queue Depths, Rates, etc) ([[Alex Ionescu]])<br />
* Cleanup System/Run Time Update code. ([[Alex Ionescu]])<br />
* Always increase kernel time in PRCB when inside kernel-mode code. ([[Alex Ionescu]])<br />
* Get rid of superflous interlocked commands when not needed. ([[Alex Ionescu]])<br />
* Improve detection of DPC vs non-DPC time. ([[Alex Ionescu]])<br />
* Respect and apply DPC queue/rate rules. ([[Alex Ionescu]])<br />
* Allow future use of non-fulltick time increments. ([[Alex Ionescu]])<br />
* Don't make the timer signaled in KeSetTimerEx if it already expired. ([[Alex Ionescu]])<br />
* Only call KiWaitTest on timers if they have waiters. ([[Alex Ionescu]])<br />
* Fix list looping in KiExpireTimers. ([[Alex Ionescu]])<br />
* Add checks for special apc disabled (guarded regions) in wait code. ([[Alex Ionescu]])<br />
* Set the right wait status in KiAbortWaitThread. ([[Alex Ionescu]])<br />
* Don't ignore priority boost (increments) when aborting waits. ([[Alex Ionescu]])<br />
* When satisfying a mutant, insert if into the the head of the back-link, not the forward-link. ([[Alex Ionescu]])<br />
* Fix utterly messed up unblocking/readying thread logic. ([[Alex Ionescu]])<br />
* KiUnblockThread becomes KiReadyThread and doesn't perform priority modifications anymore. Also removed a large block of code that was #if 0ed out. ([[Alex Ionescu]])<br />
* KiAbortWaitThread now does priority modifications (and better then before), then calls KiReadyThread. ([[Alex Ionescu]])<br />
* Inserting a queue now *READIES A THREAD ONLY* instead of removing all its waits! ([[Alex Ionescu]])<br />
* Add KiCheckThreadStackSwap and KiAddThreadToWaitList macros ([[Alex Ionescu]])<br />
* Initialize PRCBs' Wait Lists ([[Alex Ionescu]])<br />
* Fix a ghastly implementation fault where the the queue code was correctly removing the thread from its wait list, but where this wait list was actually connected to the _SCHEDULER_ and ended up removing a thread behind its back, causing bizarre issues and w3seek's ASSERT(State == Ready) bug. Fixed this by using the macros above and PRCB Wait List and properly inserting a waiting thread into that list, and then removing it when unblocking it or removing a queue. ([[Alex Ionescu]])<br />
* Fix a serious bug in Kernel Queues. A condition existed where an inserted kernel queue with a timeout would crash the system once the thread waiting on it had its wait aborted or completed. ([[Alex Ionescu]])<br />
* Implement Safe Referencing (an internal method for referencing objects when race conditions are possible) ([[Alex Ionescu]])<br />
* Implement two Vista APIs and export them: ObIsKernelHandle and ObDeleteObjectDeferDelete. ZOMG! Vista APIs in the kernel! ([[Alex Ionescu]])<br />
* Add IN/OUT annotations for KeWaitForSIngleObject ([[Alex Ionescu]])<br />
* Set the wait block outside the loop, small optimization in case we get alerted by an APC and have to loop again. ([[Alex Ionescu]])<br />
* Set the wait block pointer in the KTHREAD structure only *after* checking if a wait is actually needed. That way, if the object is already signaled, we don't set anything in the WaitBlockList. ([[Alex Ionescu]])<br />
* Small optimization: only set the caller's WAitBlock as the next wait block if a timer wasn't specificed, else we ended up overwriting the value. ([[Alex Ionescu]])<br />
* Small optimziation: don't write the thread in the wait block, this is a wait for a signle object so this isn't needed. ([[Alex Ionescu]])<br />
* Remove some debug prints that are not needed anymore ([[Alex Ionescu]])<br />
* NtCurrentTeb now returns the TEB instead of the KCPR, so re-enable the codepath that set the CurrentLocale and IdealProcessor in the TEB from the KTHREAD. ([[Alex Ionescu]])<br />
* Fixed a bug in PspUserThreadStartup which was causing us to notify the debugger for system threads or hidden threads, instead of vice-versa. ([[Alex Ionescu]])<br />
* Threads were incorrectly created with KernelMode access instead of PreviousMode. ([[Alex Ionescu]])<br />
* Initialize the thread's rundown protection and use the process's. ([[Alex Ionescu]])<br />
* Handle failure when TEB = NULL. ([[Alex Ionescu]])<br />
* The LPC Semaphore has a limit of 1, not 0x7FFF. ([[Alex Ionescu]])<br />
* Added very basic and skeletal NUMA code when creating a thread and process, currently only does some basic affinity checks and settings. ([[Alex Ionescu]])<br />
* Added a table and helper function (KeFindNextRightSetAffinity) for calculating affinity masks and sets. ([[Alex Ionescu]])<br />
* Split KeInitailizeThread into KeStartThread and KeInitThread, and modified Ps code to use the calls. Now added a failure case where Init fails, but we don't have to backout the entire effects of a "Start". ([[Alex Ionescu]])<br />
* Fix definition of OBJECT_DIRECTORY_INFORMATION ([[Alex Ionescu]])<br />
* Implement most of NtQueryDirectoryObject. It lacks the last step of converting the absolute buffer to a relative one. I have no idea why the old code was re-implemented in a recent commit when I clearly said I would fix this tonight. ([[Alex Ionescu]])<br />
* Fix two small bugs in NtQueryDirectoryObject. ([[Alex Ionescu]])<br />
* RDISK Count, Windowstation list enumeration now work on startup. ([[Alex Ionescu]])<br />
* Explorer's object viewer now works again. ([[Alex Ionescu]])<br />
* Factor out NtSet/GetContextThread implementation into PsGet/SetContexThread, new exported kernel APIs available to drivers, and export them. ([[Alex Ionescu]])<br />
* If the caller didn't request extended registers, don't probe the full CONTEXT structure. ([[Alex Ionescu]])<br />
* Use the proper trap frame in the kernel APC responsible for the context read/write. ([[Alex Ionescu]])<br />
* Always go through the APC instead of directly calling the Ke routine. ([[Alex Ionescu]])<br />
* Set default locale to 0x409 instead of 0x0. ([[Alex Ionescu]])<br />
* Fix a bug in one of the alert APIs which was probing for a valid pointer even if the caller had given NULL (which is valid if the caller doesn't want the previous state returned). ([[Alex Ionescu]])<br />
* Pushlocks need to be acquired in a -critical-, not -guarded* region. ([[Alex Ionescu]])<br />
* PsDisableImpersonation should return FALSE if it was already disbled. ([[Alex Ionescu]])<br />
* Don't forget to reference the token in PsReferenceEffectiveToken. ([[Alex Ionescu]])<br />
* PsImpersonateClient should still return success if it was given no token. ([[Alex Ionescu]])<br />
* PsImperstonateClient should de-reference the token if there is already active impersonation info. ([[Alex Ionescu]])<br />
* Fix a bug in PspSystemStartup. ([[Alex Ionescu]])<br />
* Properly hold object references towards a thread that's being created. ([[Alex Ionescu]])<br />
* Set the Thread->GrantedAccess value. ([[Alex Ionescu]])<br />
* Update NtOpenThread to use an Access State since these work now and Ob respects them, and also add a special hack present on NT: If the SeDEbugPrivilege is present, then the caller will get full thread access regardless of his rights. ([[Alex Ionescu]])<br />
* Simplify PsGetNextProcess so it works like PsGetNextProcessThread. ([[Alex Ionescu]])<br />
* Reformat and annotate parts of process.c ([[Alex Ionescu]])<br />
* Remove PsGetWin32Process, PsGetWin32Thread and implement/export the real functions PsGetCurrentProcessWin32Process, PsGetCurrentThreadWin32Thread, change win32k to use them. ([[Alex Ionescu]])<br />
* Initailize and use process rundown. ([[Alex Ionescu]])<br />
* Set corrent GrantedAccess. ([[Alex Ionescu]])<br />
* Remove an extra incorrect reference we were adding to processes. ([[Alex Ionescu]])<br />
* Implement PsIsProcessBeingDebugged. ([[Alex Ionescu]])<br />
* Make the same changes to NtOpenProcess that we did previously to NtOpenThread. ([[Alex Ionescu]])<br />
* Fix Win32K thread rundown bug, fixes shutdown crash and other bugchecks where some ASSERT(Class->windows) wasn't 0. ([[Alex Ionescu]])<br />
* Close the right debug handle instead of some random value. ([[Alex Ionescu]])<br />
* Change FAST_MUTEX PsActiveProcessMutex to KGUARDED_MUTEX. ([[Alex Ionescu]])<br />
* Define PS Flags and use them, isntead of magic numbers. ([[Alex Ionescu]])<br />
* Add Pushlock support for GCC (Thanks Thomas!) ([[Alex Ionescu]])<br />
* Remove a bunch of deprecated crap from ps.h ([[Alex Ionescu]])<br />
* Get rid of PsLockProcess, PsUnlockProcess. Use the process pushlock instead. ([[Alex Ionescu]])<br />
* When assigning the job, only acquiring rundown protection is enough. ([[Alex Ionescu]])<br />
* Use interlocked intrinsics for setting the ExceptionPort instead of locking the entire process object. ([[Alex Ionescu]])<br />
* Disable locking in ProcessSessionInformation for NtSetInformationProcess. The whole API seems wrong anyway, on my XP machine calling it does not change the session or change any token data. To verify later... ([[Alex Ionescu]])<br />
* Refactor NtSuspend/ResumeThread into PsSuspend/ResumeThread. ([[Alex Ionescu]])<br />
* Implement NtSuspend/ResumeProcess with PsSuspend/ResumeProcess. ([[Alex Ionescu]])<br />
* Improve the previous code to use rundown protection and be thread-safe. ([[Alex Ionescu]])<br />
* Fix a bug in PsGetNextProcess(Thread) since we now use safe referencing and the lookup loop can continue. ([[Alex Ionescu]])<br />
* Kernel, Memory Manager and Process Manager APIs for: Process Quantum. ([[Alex Ionescu]])<br />
* Kernel, Memory Manager and Process Manager APIs for: Fixed and Variable Quantum Tables. ([[Alex Ionescu]])<br />
* Kernel, Memory Manager and Process Manager APIs for: Long and Short Quantum Variability. ([[Alex Ionescu]])<br />
* Kernel, Memory Manager and Process Manager APIs for: Priority Separation and Separation Masks. ([[Alex Ionescu]])<br />
* Kernel, Memory Manager and Process Manager APIs for: Foreground Quantum Table. ([[Alex Ionescu]])<br />
* Kernel, Memory Manager and Process Manager APIs for: Process Priority, Priority Modes and Priority Classes. ([[Alex Ionescu]])<br />
* Kernel, Memory Manager and Process Manager APIs for: Virtual Memory Priority ([[Alex Ionescu]])<br />
* Kernel, Memory Manager and Process Manager APIs for: Job Scheduling Classes ([[Alex Ionescu]])<br />
* Implement PsSetProcessPriorityByClass. ([[Alex Ionescu]])<br />
* Add bugcheck CRITICAL_OBJECT_TERMINATED ([[Alex Ionescu]])<br />
* Implement PspCatchCriticalBreak and fix the 5 or so FIXMEs that depended on it. ([[Alex Ionescu]])<br />
* Give winlogon SE_ASSIGNPRIMARYTOKEN_PRIVILEGE because it was lacking it and would fail under this kernel patch. ([[Alex Ionescu]])<br />
* PspAssignPrimaryToken was good enough for actually *assigning* the token, but when NtSetInfoProcess is called with ProcessPrimaryToken, we want to do a lot more then just randomly assigning it. Added PspSetPrimaryToken which first verifies if the token being assigned is a child token and if not, checks for SeAssignPrimaryTokenPrivilege. Also added a fixme for more code that's needed, to actually re-calculate the process's granted access towards itself. Also added thread-safety. ([[Alex Ionescu]])<br />
* Implement KiRecalculateDueTime to handle cases where a timeout wait has been interupted by an APC or alerted, and it needs to be recalculated in the relative case. (This fixes the "contact alex" bugcheck). ([[Alex Ionescu]])<br />
* CT_ACTIVE_IMPERSTIONATION_INFO_BIT -> CT_ACTIVE_IMPERSONATION_INFO_BIT ([[Alex Ionescu]])<br />
* Added Process and Thread locking inlined functions for Ps Security functions. ([[Alex Ionescu]])<br />
* Thread safety is your friend! Huge rework of almost all the functions in ps/security.c to use the process/thread pushlocks and use interlocked operations when dealing with the ActiveImpersonationInfo thread flag. ([[Alex Ionescu]])<br />
* Added PAGED_CODE(). ([[Alex Ionescu]])<br />
* Added checks for Processes with Jobs for the day that will happen. ([[Alex Ionescu]])<br />
* PsAssignImpersoonationToken with a NULL token handle means simply to revert to self. ([[Alex Ionescu]])<br />
* Don't ignore the HandleAttributes in NtOpenProcessTokenEx. ([[Alex Ionescu]])<br />
* Use SeTokenType to make sure the token passed is an impersonation token. ([[Alex Ionescu]])<br />
* Remove some fixed bugs in krnlfun.c, add more TODOs. ([[Alex Ionescu]])<br />
* ImperstionationLocale -> ImpersonationLocale. ([[Alex Ionescu]])<br />
* Implement PspWriteTebImpersonationInfo for setting the impersonation locale and impersonation status in the TEB (since User-mode needs to read this value and we don't want to NtQueryInformationThread for it each time to read the ETHERAD flag). ([[Alex Ionescu]])<br />
* Complete the implementation of PspSetPrimaryToken to recalculate a process's access rights to itself based on a new primary token. ([[Alex Ionescu]])<br />
* SeAccessCheck should assume failure if no SD was passed. Also fixes bugcheck on startup since processes don't currently have SDs. ([[Alex Ionescu]])<br />
* Refactor SeCaptureSubjectContext into SeCaptureSubjectContextEx and SeCreateAccessState into SeCreateAccessStateEx. The *Ex routines allow specifying a custom process/thread which isn't the current one. This is useful when creating a new process or thread since we're not actually in it. ([[Alex Ionescu]])<br />
* Implemented a bit more security calls in PspCreateProcess as seen in WI II. We now create an AccessState. ([[Alex Ionescu]])<br />
* Also write the PID in the ObjectTable. ([[Alex Ionescu]])<br />
* Make use of PsChangeQuantumTable on system startup to setup the raw priority separation. ([[Alex Ionescu]])<br />
* Call PspComputeQuantumAndPriority in PspCreateProcess to calculate process base priority and quantum for child threads. ([[Alex Ionescu]])<br />
* Add security code to calculate process's access rights to itself, as documented in WI II. ([[Alex Ionescu]])<br />
* Acquire Process lock when touching the thread list entry and incrementing the process' active threads. ([[Alex Ionescu]])<br />
* Set the Thread Create Time on creation, I had forgotten this! ([[Alex Ionescu]])<br />
* Handle failures for thread-safety/race conditions. If the process was deleted or the thread terminated behind our back, then go through a manual un-initalization code path. ([[Alex Ionescu]])<br />
* Just like previous process patch, add code to now create an access state with SeCreateAccessStateEx. ([[Alex Ionescu]])<br />
* Handle failure of ObInsertObject. ([[Alex Ionescu]])<br />
* Add ObGetObjectSecurity calls like in PspCreateProcess to check the thread's level of access towards itself. ([[Alex Ionescu]])<br />
* Add code to handle two more failure (the last, afaics) cases. ([[Alex Ionescu]])<br />
* Implement XP-style process name auditing to store the full name of the process in EPROCESS instead of only the first 16 ascii characters. This is required for one of the newer Info process classes. Implemented SeInitializeProcessAuditName and SeLocateProcessImageName. ([[Alex Ionescu]])<br />
* Remove #ifed out code in PspCreateProcess which was attempting to create the name structure. Add code to MmCreateProcessAddressSpace to initialize the audit name after the 16-byte name. ([[Alex Ionescu]])<br />
* Implement some helper APIs for better code refactoring. ([[Alex Ionescu]])<br />
* Remove PspGetImagePath and use the new SeLocateProcessImageName instead. It's still not fully XP-compatible, because it should return the entire name with the \Device\HardDisk0 path, but that is easily fixable by modifying the OB Type info for the device object to also use IopQueryNameFile (TODO). ([[Alex Ionescu]])<br />
* Generate KUSER_SHARED_DATA cookie if it doesn't already exist when a user-mode thread runs. ([[Alex Ionescu]])<br />
* Set DRVO_INITAILIZED flag for intiailized driver objects. ([[Alex Ionescu]])<br />
* Loop the list of devices created by the driver's DriverEntry and remove the DO_DEVICE_INITIALIZING flag. ([[Alex Ionescu]])<br />
* Enable IopReferenceDeviceObject in IopParseDevice (not much use for now except OS "Correctness" and identifying broken drivers). DO referencing isn't fully used in the kernel yet. ([[Alex Ionescu]])<br />
* Fix broken drivers: i8042 and videoprt. NDIS might be broken too, but downloading worked fine for me, so it's not hitting the check in IopParseDevice. ([[Alex Ionescu]])<br />
* Fix Broken Installers and other I/O programs that couldn't, for example, create temporary directories. ([[Alex Ionescu]])<br />
* Fix Firefox installers and other apps crashing due to a bug in NtSetInformationFile. ([[Alex Ionescu]])<br />
* Fix File Objects being referenced twice resulting in IRP_MJ_CLOSE/CLEANUP never being sent and several memory leaks. ([[Alex Ionescu]])<br />
* Fix File Object Lock being incorrectly created and then misused by mm/section code. ([[Alex Ionescu]])<br />
* Fix creation of File Object before setting up the IRP, to properly cleanup during failures. ([[Alex Ionescu]])<br />
* Add failure code if ObCreateObject fails. ([[Alex Ionescu]])<br />
* Add SEH to all iofunc.c functions that required it. (note: Some SEH might seem "useless" to have been added. This is because we don't use Pool Quotas yet, which generate exceptions which will later need to be handled). ([[Alex Ionescu]])<br />
* Implement IopExceptionCleanup as a generic cleanup handler for SEH exceptions. ([[Alex Ionescu]])<br />
* Add another paramter to IopCleanupFailedIrp to free an optional buffer being specified to it. This way we don't leak some allocated buffers when IRP allocation fails. ([[Alex Ionescu]])<br />
* Create inlined IopUnQueueIrpFromThread to match IopQueueIrpToThread. ([[Alex Ionescu]])<br />
* Fix IRP Cancellation and enable all calls to IopQueueIrpToThread and IopUnqueueIrpFromThread. This seems to work properly now and the kernel fun entry for it has been removed. All remaining Io TODOs are now low priority. ([[Alex Ionescu]])<br />
* Properly disable impersonation in PsDisableImpersonation if it was previously enabled, instead of not disabling it. (fix a wrong check). Thanks to Arty. ([[Alex Ionescu]])<br />
* Add support for APC-delivery after context-switch (not yet programmed) ([[Alex Ionescu]])<br />
* Detect and crash if context switch is done inside a DPC. ([[Alex Ionescu]])<br />
* Switch kernel stack a bit earlier ([[Alex Ionescu]])<br />
* Don't switch address space if we're still in the same process, and fix some duplicated code that was mixed up together. ([[Alex Ionescu]])<br />
* Move LDT setup out-of-line. ([[Alex Ionescu]])<br />
* Don't use EFLAGS to store the Wait IRQL, just push directly, it's cleaner. ([[Alex Ionescu]])<br />
* Detect if kernel APCs are pending and request APC_LEVEL software interrupt from HAL if they are, returning with the right apc status. ([[Alex Ionescu]])<br />
* Also update INT21 VDM Descriptor handler when updating LDT descriptor. ([[Alex Ionescu]])<br />
* Remove some FPU deprecated constants and use the new ones. ([[Alex Ionescu]])<br />
* Deliver APCs on return from context switch with pending kernel APCs. ([[Alex Ionescu]])<br />
* Detect NPX/FPU in simple assembly and XMMI/SSE2 by using CPU Feature flags, replacing the old asm+c mess. ([[Alex Ionescu]])<br />
* Handle FPU/SSE saving in the CONTEXT<->KTRAP_FRAME routines directly, and using KiFlushNPXState assembly function. ([[Alex Ionescu]])<br />
* Implement a naive Trap 7 (FPU Fault) handler in assembly that properly does most of the work required to handle an FPU fault. Not yet complete however since it almost ignores user-mode faults (just like trunk). FPU isn't done in ctx switching yet. ([[Alex Ionescu]])<br />
* Fixes to CONTEXT<->KTRAP_FRAME conversion. ([[Alex Ionescu]])<br />
* Implement generic exception dispatcher for traps (kind-of analogous to KiKernelTrapHandler/KiUserTrapHandler but in assembly and more generic/compact). ([[Alex Ionescu]])<br />
* Switch Traps 0, 1 to it. ([[Alex Ionescu]])<br />
* Trap 2 is NMI, bugcheck immediately since we can't handle them yet. ([[Alex Ionescu]])<br />
* Switch 4, 5, 6 to common ASM dispatcher as well. ([[Alex Ionescu]])<br />
* Convert 8, 9, 10, 15/F ([[Alex Ionescu]])<br />
* Call KiSystemFatalException directly instead of duplicating the code 5 times. ([[Alex Ionescu]])<br />
* Gutted out KiTrapHandler. Now it is only a gateway for GPF/UD for V86 mode. ([[Alex Ionescu]])<br />
* Removed all the code in userptrap.c and removed KiKernelTrapHandler. ([[Alex Ionescu]])<br />
* Set Traps 11, 12, 16 and 17 as unhandled for now(Segment fault, stack fault, fpu fault and alignment fault). We weren't really "handling" them in the past either. ([[Alex Ionescu]])<br />
* I probably need to implement GPF handler for non-V86 mode to support Lazy segment loading and fix the vmware syscall bug that has been haunting me for two years. ([[Alex Ionescu]])<br />
* Implement GENERATE_IDT_STUBS/GENERATE_INT_HANDLERS ([[Alex Ionescu]])<br />
* Generate actual Unexpected Interrupt entries in the IDT for INTs > 0x30 (basically IRQs). ([[Alex Ionescu]])<br />
* Generated all 208 Unexpected Interrupt Handlers for all INTs (using a single macro line) and implement a "Tail" function to handle them instead of bugchecking like before (they're now sent to HAL properly). ([[Alex Ionescu]])<br />
* Implement INT_PROLOG macro to create KTRAP_FRAME for interrupts (similar to traps). ([[Alex Ionescu]])<br />
* Get rid of the peculiar idea that the HAL should manually hack into ntoskrnl through a hack export and hackishly call the registered device interrupt handlers. This is why computers have a PIC in the first place... ([[Alex Ionescu]])<br />
* Call KiDispatchInterrupt through an interrupt gate instead of directly. ([[Alex Ionescu]])<br />
* Switch PRIMARY_VECTOR_BASE to 0x30 instead of 0x40, as it should be. ([[Alex Ionescu]])<br />
* Fix function definitions of HalQueryRealTimeClock, HalGetEnvironmentVariable. They were defined in the NDK in one way, but implemented another way, and since the HAL didn't include its own NDK file, the compiler didn't realize this. Calls of these functions might've experienced serious problems. ([[Alex Ionescu]])<br />
* Also fix HalHandleNmi and HalInitSystem definitions. ([[Alex Ionescu]])<br />
* Add stub code to actually setup the Clock Interrupt. ([[Alex Ionescu]])<br />
* Enable the code in KeInitializeInterrupt that copies the Interrupt Template to the KINTERRUPT object and modifies the template pointer to point to the KINTERRUPT. ([[Alex Ionescu]])<br />
* Add the template code in trap.s. ([[Alex Ionescu]])<br />
* Implement Chained and Normal generic interrupt handlers. ([[Alex Ionescu]])<br />
* Make generated handlers have a proper .func symbol for symbol data. ([[Alex Ionescu]])<br />
* Make IDT writable, the page shouldn't be read-only. ([[Alex Ionescu]])<br />
* Change some symbol names. ([[Alex Ionescu]])<br />
* Completely re-implement IRQ support (KeInitialize/Connect/Disconnect) interrupt using the same model as NT. Implementation was done by analyzing various of my systems at runtime with WinDBG and tracing through some of the code and dumping relevant objects. ([[Alex Ionescu]])<br />
* Uses new code added to trap.s for generic dispatching, as well as the NT implementation which copies a "template" into the ->DispatchCode array of every KINTERRUPT object. ([[Alex Ionescu]])<br />
* Also adds support for chained interrupts, but this hasn't been tested yet. Floating interrupts are not supported on NT it seems, so I haven't implemented those at all. ([[Alex Ionescu]])<br />
* Write a basic Clock Interrupt handler in the HAL (doesn't deal with changing increments yet, just like current ROS). It will call KeUpdateSystemTime once ready. ([[Alex Ionescu]])<br />
* Implement KeDisconnectInterrupt with the new implementation. ([[Alex Ionescu]])<br />
* Put Clock Interrupt initialization in the right place (might still be too late: must investigate more). ([[Alex Ionescu]])<br />
* Added a debug print when unexpected interrupts are called, just noticed this happens on my checked machine, and it's a useful tracing tool. ([[Alex Ionescu]])<br />
* Update KeUpdateSystemTime to use variable increments. ([[Alex Ionescu]])<br />
* Update KeTickCount properly instead of an ugly timecast hack. ([[Alex Ionescu]])<br />
* Also update UserSharedData->TickCount. ([[Alex Ionescu]])<br />
* Get rid of KiRawTicks. ([[Alex Ionescu]])<br />
* Properly update KiTickOffset at the end. ([[Alex Ionescu]])<br />
* Make KeUpdateSystemTime independent, so that it returns and exits from the current ROSterrupt by itself. ([[Alex Ionescu]])<br />
* Make KeUpdateRunTime increase the interrupt count, check for V86 as well as for user-mode by using the CS and EFLAGS (isntead of PreviousMode), also only request DPCs if DpcInterruptRequested isn't already set, and only perform Quantum End if this isn't the idle thread. ([[Alex Ionescu]])<br />
* Add clock.S which will have the clock interrupt handlers of the kernel (UpdateSystemTime and UpdateRunTime) and ultimately replace the only reason irqhand.S is still around (the clock interrupt). Implement the current version of KeUpdateSystemTime in assembly, with stack optimizations since we'll be called from the HAL later. ([[Alex Ionescu]])<br />
* Fix incorrect KPCR_PRCB_DPC_ROUTINE_ACTIVE which was totally wrong (And could've caused a crash in the context swicher) ([[Alex Ionescu]])<br />
* Also fix the definition of KRCB which was off-by-4 after about offset ~0x500. It wasn't causing problems because assembly code only used < 0x500. ([[Alex Ionescu]])<br />
* Write the ASM implementation of KeUpdateRunTime (not used yet). ([[Alex Ionescu]])<br />
* Enable clock.S versions of KeUpdateSystem/RunTime and export them properly. ([[Alex Ionescu]])<br />
* Enable systimer.S to call into kernel's KeUpdateSystemTime. ([[Alex Ionescu]])<br />
* Enable Hal's Clock Interrupt during Phase 1. ([[Alex Ionescu]])<br />
* Remove most of the code that was still left in irq.c ([[Alex Ionescu]])<br />
* Only one large problem remains now, which is the spurious firing of the clock interrupt before we're ready to handle it... I will try to fix this today. ([[Alex Ionescu]])<br />
* If SeCaptureSubjectContextEx is called without a process, at least NULL-initialize the context to catch dereferences of invalid pointers. ([[Alex Ionescu]])<br />
* Remove code in the page fault handler which was corrupting the trap frame. ([[Alex Ionescu]])<br />
* Remove some ROS hacks that dealt with the fact the trap frame was getting corrupted, since now it isn't anymore. ([[Alex Ionescu]])<br />
* Enable code that checks for Teb->GdiBatchCount during win32k system calls. The bugs that were mentionned in the #if 0 are fixed. ([[Alex Ionescu]])<br />
* Fix some bugs in KiChainedDispatch. ([[Alex Ionescu]])<br />
* Complete and utter reimplementation of V86 Mode for Ke386CallBios. Details below. Tested on QEMU/VMWARE. May give you a breakpoint/crash on real hardware * please let me know the V86 opcode displayed on the debug log/screen if this is the case *if you see such a message*. ([[Alex Ionescu]])<br />
* Got rid of all the previous related assembly code and implemented Ki386SetupAndExitToV86Mode and Ki386BiosCallREturnAddress. ([[Alex Ionescu]])<br />
* Implemented GPF (Trap 13) code for V86 faults (which will happen in V86 mode). Implement a generic Ki386HandleOpcodeV86 handler that increments counts and calls the right opcode handler. ([[Alex Ionescu]])<br />
* Implemented an Opcode Table Entry Index and Opcode Table array for mapping opcodes that caused a GPF to their V86 handlers/emulators. ([[Alex Ionescu]])<br />
* Implemented handlers for PUSHF, POPF, CLI, STI, IRETD and INTnn, which is what QEMU/VMWare and *most* VIDEO ROM BIOS code should use. ([[Alex Ionescu]])<br />
* Created a /vdm tree and moved all NTVDM/VDM specific code there. ([[Alex Ionescu]])<br />
* Halfplemented VdmStart/EndExecution APIs which the BIOS ROM V86 implementation is built upon. Currently don't handle VDM at all, only this V86 mode. ([[Alex Ionescu]])<br />
* Also added code for NtVdmControl and fixed up CSRSS and ACPI's calls to this API. ([[Alex Ionescu]])<br />
* Added detection and FIXMEs for support of VMEs in VMWare, Bochs and real hardware (VME is not yet supported). ([[Alex Ionescu]])<br />
* Add about two dozen new bugcheck codes and strings. ([[Alex Ionescu]])<br />
* Use KdDebuggerNotPresent to determine if KDBG is there or not. KdDebuggerEnable is now set whenever booting with debugging -* even if only serial port or screen debugging. ([[Alex Ionescu]])<br />
* Bugcheck Rewrite: Moved stack dump routines to bug.c and cleaned them up. Next step is to remove most of them and implement them properly as part of RtlCaptureStackBackTrace and RtlWalkFrameChain. ([[Alex Ionescu]])<br />
* Bugcheck Rewrite: Use InbvDisplayString for everything now. BSODs will only truly show on screen. (however, part of the KeBugCheckWithTf improvements, a special "if debugger enabled" BSOD will also be displayed for debugging purposes). ([[Alex Ionescu]])<br />
* Bugcheck Rewrite: Do checksum calculation in bugcheck callbacks. ([[Alex Ionescu]])<br />
* Bugcheck Rewrite: Detect and display which drivers belong to which EIP. ([[Alex Ionescu]])<br />
* Bugcheck Rewrite: Implemented code to select the proper verbose BSOD message depending on the bug check code. ([[Alex Ionescu]])<br />
* Bugcheck Rewrite: Also implemented code to detect a variety of "known" bug check codes and to recover more data on them, and/or modify them accordingly. Sadly ROS doesn't yet make use of most of these codes. ([[Alex Ionescu]])<br />
* Bugcheck Rewrite: Factored out and split some code into individual routines. ([[Alex Ionescu]])<br />
* Bugcheck Rewrite: Look and functionality is now identical to Windows XP. ([[Alex Ionescu]])<br />
* Bugcheck Rewrite: Stack trace will only be shown if KDBG isn't connected. If KDBG is connected you can do "bt" anyway (which is more powerful ([[Alex Ionescu]])<br />
* Some fixes to KiDispatchException: Add support for forwarding exception back to user-mode, protect against V86 or invalid-stack faults, handle stack overflow exception while handling usermode exception (Thanks KJK for the SEH_FILTER help). Decrement EIP by one when hitting an INT3, to get the correct address. ([[Alex Ionescu]])<br />
* Fix KeRaiseUserException (can't use "return" from SEH_HANDLE). ([[Alex Ionescu]])<br />
* Rewrote RtlCompareMemory. ([[Alex Ionescu]])<br />
* Rewrote RtlCompareMemoryUlong ([[Alex Ionescu]])<br />
* Rewrote RtlFillMemory ([[Alex Ionescu]])<br />
* Rewrote RtlFillMemoryUlong ([[Alex Ionescu]])<br />
* Rewrote RtlFillMemoryUlongUlong ([[Alex Ionescu]])<br />
* Rewrote RtlMoveMemory ([[Alex Ionescu]])<br />
* Rewrote RtlZeroMemory ([[Alex Ionescu]])<br />
* Rewrote RtlPrefetchMemoryNonTemporal ([[Alex Ionescu]])<br />
* Rewrote RtlUshortByteSwap ([[Alex Ionescu]])<br />
* Rewrote RtlUlongByteSwap ([[Alex Ionescu]])<br />
* Rewrote RtlUlonglongByteSwap ([[Alex Ionescu]])<br />
* Implement more parts of the GPF Handler. ([[Alex Ionescu]])<br />
* Add support for lazy loading. ([[Alex Ionescu]])<br />
* QEMU + -kernel-qemu seems to work now. ([[Alex Ionescu]])<br />
* Hack away the Win32k bug that's been there for ages (copy to user-mode from kernel-mode failing due to probe due to incorrect previous mode). It's not the right fix, but nobody seems to be willing to fix it, and it doesn't make anything less stable, sicne the actually copy is in SEH anyway. It opens a security vuln. (wow, not like we have 15000) in exchange for fixing dozens of win32k bugs and failures. ([[Alex Ionescu]])<br />
* Don't do fast system calls with the wrong DS/ES selectors. ([[Alex Ionescu]])<br />
* Properly load DS/ES on system startup and GDT load ([[Alex Ionescu]])<br />
* Use proper DS/ES during deprecated IRQ handling. ([[Alex Ionescu]])<br />
* Always use GS as 0 for all of the above. ([[Alex Ionescu]])<br />
* *FINALLY* fixes the oldest bug there ever was -> DS/ES corruption noticed in VMWare (And recently in QEMU+KERNELKQEMU, since it behaves internally like vmware). Hacks in trap code have FINALLY been removed! ([[Alex Ionescu]])<br />
* Add support for recovering from user-mode win32k callback fault. ([[Alex Ionescu]])<br />
* Also add support for debug register saving/reloading during user-mode callbacks and return. ([[Alex Ionescu]])<br />
* Multiple changes to low-level Kernel initalization sequence to bring it a bit closer to Windows. ([[Alex Ionescu]])<br />
* Main difference is new CPU detection algorithms for ID, cache, etc, as well as using KF_ Kernel Feature bits instead of x86 CPU features (For portability). ([[Alex Ionescu]])<br />
* Start support for an initial boot thread. ([[Alex Ionescu]])<br />
* Initialization rewrite: Initialize bugcheck lists, timer DPC, profile list/locks, timer lists, the swap lists and syscall table as part of KiInitSystem (portable). ([[Alex Ionescu]])<br />
* Initialization rewrite: Add more initialization for the initial/idle process+thread (some code disabled due to dispatcher problems). ([[Alex Ionescu]])<br />
* Initialization rewrite: Add code to support future Timer implementation (based on tick-hashes) ([[Alex Ionescu]])<br />
* Initialization rewrite: Separate post-boostrap initialization code in KiInitializeKernel. ([[Alex Ionescu]])<br />
* Initialization rewrite: Add some support for future SMP paths. ([[Alex Ionescu]])<br />
* Initialization rewrite: Create a DPC stack. ([[Alex Ionescu]])<br />
* Move machine-specific initializations to KeInit2. ([[Alex Ionescu]])<br />
* Initialize bugcheck messages much earlier, separate clock initialization from KeInit2. ([[Alex Ionescu]])<br />
* Completely move out and isolate ROS/FREELDR PE loading hacks to KiRosPrepareForSystemStartup so that KiSystemStartup is clean of them. ([[Alex Ionescu]])<br />
* Add missing volatile statements to KPROCESS, KTHREAD, KPRCB and KDPC_DATA. ([[Alex Ionescu]])<br />
* Fix KDPC definition in DDK. You can always count on the w32api to get even the simplest structures wrong. ([[Alex Ionescu]])<br />
* Fix memory overwrite bug in KiInitSpinlocks. ([[Alex Ionescu]])<br />
* DPC Rewrite: Re-factor KiDispatchInterrupt to separate DPC delivery routine (so that it can stay in C, since KiDispatch should be done in ASM so we can switch stacks). ([[Alex Ionescu]])<br />
* DPC Rewrite: Use interrupt enable/disable instead of raising to HIGH_LEVEL. ([[Alex Ionescu]])<br />
* DPC Rewrite: Better use and pairing of locks. ([[Alex Ionescu]])<br />
* DPC Rewrite: Fix a lot of race conditions in DPC dispatching, due to the fact almost all data we're touching is ultra-volatile and can change at any time depending on various locks being held/released + interrupt state. ([[Alex Ionescu]])<br />
* DPC Rewrite: Add stub code/support for tick-hased table-based timer implementation and deferred threads. ([[Alex Ionescu]])<br />
* DPC Rewrite: Implement KiDispatchInterrupt in assembly since it's 1) Perf-critical 2) Requires us to switch the stack to the DPC stack, which is unsafe (and impossible, unless inlining) in C. ([[Alex Ionescu]])<br />
* Fix KTSS definition. ([[Alex Ionescu]])<br />
* Add GetSegment inlines (ie: GetSs, GetDs, etc) ([[Alex Ionescu]])<br />
* Fix up definition of KiBootGdt to use KGDTENTRY instead of USHORT. Also define KiGdtDescriptor using KDESCRIPTOR. ([[Alex Ionescu]])<br />
* Remove GDT initialization code completely. The GDT is already initialized on boot. ([[Alex Ionescu]])<br />
* Remove tss.c and add KiInitializeTss(2) to setup a TSS and proper IOPM/Interrupt Direction map settings for V86/VDM. ([[Alex Ionescu]])<br />
* Copy the TSS code over but prettyify it to use NT/NDK structures instead of ugly USHORT typecasts. ([[Alex Ionescu]])<br />
* Remove LDT initialization, LDT shouldn't be initialized at bootup. ([[Alex Ionescu]])<br />
* Cleanup formatting of GDT-related exported function stubs in gdt.c and rename file to abios.c. Those routines deal specifically with the ABIOS GDT selectors and are for ABIOS support. ([[Alex Ionescu]])<br />
* Add Ke386SetFs, Ds, Es (using Ke386SetSeg) and Ke386SetTr new inlined commands. ([[Alex Ionescu]])<br />
* Also setup an NMI Task gate after the double fault task gate. Will be useful when we hand to handle NMIs later. ([[Alex Ionescu]])<br />
* Setup FS in KiSystemStartup and initialize the TSS before the PCR. Also add a bit more support for SMP systems (To skip boot-cpu-only initialization). ([[Alex Ionescu]])<br />
* Also setup DS/ES directly in KiSystemStartup. ([[Alex Ionescu]])<br />
* Initialize KD at phase 0 in KiSystemStartup, not in KiInitializeKernel, and also check for debug break at this time. ([[Alex Ionescu]])<br />
* Add Ke386SetInterruptDescriptorTable inlined function to set the IDT. ([[Alex Ionescu]])<br />
* Rename and fixup initial stacks, instead of using 16 different variables all with confusining meanings and values. Define P0BootStack as the initial kernel stack, and KiDoubleFaultStack as the double-fault trap (and initial DPC) stack. ([[Alex Ionescu]])<br />
* Fix call to KiInitializePcr which was setting an incorrect DPC stack. ([[Alex Ionescu]])<br />
* Make space on the initial stack for a KTRAP_FRAME as well, not only for the FPU save area. ([[Alex Ionescu]])<br />
* Also push initial CR0 NPX state on the initial stack. ([[Alex Ionescu]])<br />
* Load the IDT and GDT directly in KiRosPrepareForSystemStartup. ([[Alex Ionescu]])<br />
* Fix definition of SYNCH_LEVEL. ([[Alex Ionescu]])<br />
* Implement KeAcquireInStackQueuedSpinLockRaiseToSynch for UP systems. ([[Alex Ionescu]])<br />
* Implement KiAcquireApcLock, KiAcquireApcLockAtDpcLevel, KiReleaseApcLock, KiReleaseApcLockFromDpcLevel. ([[Alex Ionescu]])<br />
* KeResumeThread, KeSuspendThread, KeAlertThread, KeForceResumeThread, KeTestAlertThread, KeAlertResumeThread are now the first to use the new APC In-Stack Queued Spinlock for sychronization. ([[Alex Ionescu]])<br />
* Implement KiAcquireProcessLock, KiReleaseProcessLock. ([[Alex Ionescu]])<br />
* Update KeFreezeAllThreads to use the Process and APC In-Stack Queued Spinlock. ([[Alex Ionescu]])<br />
* Update KeTerminateThread to use the Process Lock. Call KiRundownThread to cleanup the NPX thread. Add some assertions for Stack in/out-paging. Use KiSetThreadSwapBusy for proper SMP vs UP building. ([[Alex Ionescu]])<br />
* NUMA Node semantics in KeStartThread only need to be done for CONFIG_SMP builds, so #ifed them appropriately. Also made it use the Process In-Stack QSL. ([[Alex Ionescu]])<br />
* Remove KeSetPreviousMode, KeDisableThreadApcQueueing. ([[Alex Ionescu]])<br />
* Stargint reorganizing some public functions to the bottom of the file. ([[Alex Ionescu]])<br />
* Don't hold lock during KeSetKernelStackSwapEnable. ([[Alex Ionescu]])<br />
* Update KeRevertToUserAffinityThread, KeSetSystemAffinityThread to use new lock functions, and add code to support future scheduler. ([[Alex Ionescu]])<br />
* Update KeSetIdealProcessorThread to properly do Ideal CPU logic instead of blindgly setting it (most importantly, respect UserIdealProcessor and SystemAffinityActive seettings). ([[Alex Ionescu]])<br />
* Reposition and update KeQueryBasePriorityThread to use the new locks. ([[Alex Ionescu]])<br />
* Update KeSetAFfinityThread, KeSetPriorityThread with new locks and assertions (plus the current ROS scheduler hack). ([[Alex Ionescu]])<br />
* Update the last remaining old function, KeSetBasePriority. Use new locks and assertions, and also make use of KiComputeNewPriority. ([[Alex Ionescu]])<br />
* Get completely rid of old Dispatcher Lock macros and use new ones. ([[Alex Ionescu]])<br />
* apc.c -> Also multiple optimizations to use the APC lock instead of the full-fledged dispatcher lock. ([[Alex Ionescu]])<br />
* gate.c -> Use APC lock as well, the full dispatcher lock isn't required because a thread can only wait on one and only one gate. ([[Alex Ionescu]])<br />
* process.c -> Optimize the code to use the Process and/or APC lock instead of the dispatcher lock. Also delay acquiring the locks after some checks, to make the exit paths simpler. ([[Alex Ionescu]])<br />
* Remove KeGetCurrentProcess. This API doesn't exist. ([[Alex Ionescu]])<br />
* Add assertions to relevant functions in process.c and re-format some code. ([[Alex Ionescu]])<br />
* Check for invalid APC state in KeDetachProcess. ([[Alex Ionescu]])<br />
* Decrease process stack count while holding the Dispatcher Lock at DPC level. ([[Alex Ionescu]])<br />
* Implement KiSwapProcess in ctxswitch.S and add SMP-support and LDT swap support for the future, as well as updating the IOPM base in the TSS. ([[Alex Ionescu]])<br />
* KPROCSES Flags are LONG, not ULONG. ([[Alex Ionescu]])<br />
* Add some missing decoration. ([[Alex Ionescu]])<br />
* NUMA node semantics for KeInitializeProcess are only required on SMP builds. ([[Alex Ionescu]])<br />
* Allow KeInitailizeProcess to receive an argument specifying if alignment faults should be enabled or not. ([[Alex Ionescu]])<br />
* Use KiComputeIopmOffset to get the IopmOFfset instead of setting -1 ([[Alex Ionescu]])<br />
* We only need to update the page directory for the current stack, not the whole ETHREAD. (the page fault will be handled). ([[Alex Ionescu]])<br />
* Release dispatcher lock from DPC level in KiAttachProcess. ([[Alex Ionescu]])<br />
* Add missing decoration/assert to KeAttachProcess, and only acquire APC lock after we've made the invalid attach test. Also acquire dispatcher lock at DPC level here and in KeStackAttachProcess. ([[Alex Ionescu]])<br />
* Loop in KeUnStachDetachProcess to avoid the case where we acquired the APC lock while a kernel APC was pending. Keep releaing the loop and re-attemping acquire until it has been delivered. ([[Alex Ionescu]])<br />
* Add Decoration for *ServiceTable* functions. ([[Alex Ionescu]])<br />
* Re-organize apc.c into private/public functions (no code change). ([[Alex Ionescu]])<br />
* Force Ring 3 state into User APC TrapFrame to maintain system integrity and coherency. Also respect IOPL. ([[Alex Ionescu]])<br />
* Use SEH handling routine just like when handling exceptions, to properly re-direct a crash here. Thanks to KJK again for showing me how to write these kinds of routines. ([[Alex Ionescu]])<br />
* Re-implement KiRequestApcInterrupt in ke_x.h. Make it work by CPU number (as documented) instead of comparing PRCBs. ([[Alex Ionescu]])<br />
* Make NtQueueApcThread use POOL_QUOTA_FAIL_INSTEAD_OF_RAISE and add that flag to our DDK. Also fix the check for SystemThread by looking at the flag, not checking if TEB == NULL. Also fix a memory leak and comment header. ([[Alex Ionescu]])<br />
* Fix comment header in KiInitalizeUserApc. ([[Alex Ionescu]])<br />
* Cleanup RepairList, KiMoveApcState. ([[Alex Ionescu]])<br />
* Fixup comments for KeAreApcsDisabled. ([[Alex Ionescu]])<br />
* Implement and add comment header to KeAreAllApcsDisabled. ([[Alex Ionescu]])<br />
* Fix KeRemoveQueueApc comment header and clean up function. ([[Alex Ionescu]])<br />
* Acquire dispatcher lock at DPC level during ApcListEntry read/write. ([[Alex Ionescu]])<br />
* Fix for Windows Kernel APC Data-Free Local Privilege Escalation Vulnerability (re-initialize the list head after cleaning it, so that the list is circular). ([[Alex Ionescu]])<br />
* Optimize KeFlushQueueApc: we can check if the Kernel-Mode APC list is empty without acquiring the lock. If it's empty, we can quit immediately, if not, then we'll acquire and check it again. For user APCs we always need to acquire the lock, though. ([[Alex Ionescu]])<br />
* Fix comment headers for KeFlushQueueApc, KeInsertQueueApc. ([[Alex Ionescu]])<br />
* ASSERTify KeInsertQueueApc and some formatting fixes. ([[Alex Ionescu]])<br />
* Add new KAPC_ENVIRONMENT mode: InsertApcEnvironment. ([[Alex Ionescu]])<br />
* Fixup KeInitalizeApc like all the other functions. ([[Alex Ionescu]])<br />
* Don't use an expensive 48-byte RtlZeroMemory instead of just clearing two members. ([[Alex Ionescu]])<br />
* Fix lock acquisition/release mismathces in KiInsertQueueApc. ([[Alex Ionescu]])<br />
* Support and document InsertApcEnvironment KAPC_ENVIRONMENT type. ([[Alex Ionescu]])<br />
* Fixup formatting and ASSERTify. ([[Alex Ionescu]])<br />
* Acquire dispatcher lock when insereting an APC into another thread. ([[Alex Ionescu]])<br />
* Use delayed interrupt request on SMP systems (and fixup KiRequestApcInterrupt accordingly). ([[Alex Ionescu]])<br />
* Fix KiDeliverApc prototype for PPC compatibilty. ([[Alex Ionescu]])<br />
* Fixup comment header for KiDeliverApc and KiInsertQueueApc. ([[Alex Ionescu]])<br />
* Set APC trap frame during APC delivery. We actually weren't doing this before (I'm kind of amazed at ROS's previous functionality due to importance of this bug!). ([[Alex Ionescu]])<br />
* Use proper in-stack queued spinlock mechanisms. ([[Alex Ionescu]])<br />
* Make sure that the Kernel APC list didn't become empty while we acquired the APC lock after the first verification. ([[Alex Ionescu]])<br />
* Validate IRQL on return from APC routines, to catch bad code. ([[Alex Ionescu]])<br />
* Fix a critical bug in KiComputeNewPriority. ([[Alex Ionescu]])<br />
* Fix a bug in KiSetPriorityThread which wasn't setting *released = FALSE, which left the var uninitailized and usually = TRUE on the stack. ([[Alex Ionescu]])<br />
* Half-copy KiQuantumEnd from my new scheduler code. Main difference is usage of newly created locks, support for quantum-disable and RT threads, and usage of KiComputeNewPriority. ([[Alex Ionescu]])<br />
* Add the actual missing code to KiQuantumEnd. It's asserted to make sure it'll never execute (yet). ([[Alex Ionescu]])<br />
* Add KiExitDispatcher from my new scheduler code. Same as KiQuantumEnd, added an assertion to make sure it doesn't enter in code paths that shouldn't yet happen. ([[Alex Ionescu]])<br />
* Implement and export HalClearSoftawareInterrupt (currently implemented to match the hacked ROS version, no new version written yet). ([[Alex Ionescu]])<br />
* CPU Idle Loop Rewrite: Runs with interrupts off most of the time, except when it does interrupt cycling at each iteration. ([[Alex Ionescu]])<br />
* CPU Idle Loop Rewrite: Calls KiRetireDpcList directly, instead of going through KiDispatchInterrupt. ([[Alex Ionescu]])<br />
* CPU Idle Loop Rewrite: Support for new scheduler and immediate thread switch. ([[Alex Ionescu]])<br />
* CPU Idle Loop Rewrite: Support for Idle Scheduler. ([[Alex Ionescu]])<br />
* CPU Idle Loop Rewrite: Support for HAL/ACPI/CPU Driver-defined "Idle Function". currently disabled and STI+HLT harcoded instead. ([[Alex Ionescu]])<br />
* Removed ps/idle.c and dumped the hack code directly in psmgr.c wher eit's used. ([[Alex Ionescu]])<br />
* Implement HalProcessorIdle. ([[Alex Ionescu]])<br />
* Fix KiIdleLoop to actuall load the PCR in EBX. It was using a completely random value. ([[Alex Ionescu]])<br />
* Call the Processor Idle Routine now, isntead of hard-coding STI+HLT. This routine had already been setup during bootup by PoInitailizePrcb. ([[Alex Ionescu]])<br />
* Implemented PopIdle0 and made it call HalProcessorIdle. No performance/throttling is done yet. ([[Alex Ionescu]])<br />
* Implement KiReleaseProcessLockFromDpcLevel and use it in KeTerminateThread. We were lowering to PASSIVE during thread termination, and then doing a context switch at PASSIVE, which you can guess is pretty bad. ([[Alex Ionescu]])<br />
* Implement KiAcquireDeviceQueueLock/KiReleaseDeviceQueueLock for locking KDEVICE_QUEUEs, since they can be used from Threaded DPCs which don't execute at DISPATCH_LEVEL, so the lock needs to be acquired differently. ([[Alex Ionescu]])<br />
* Add ASSERT_DEVICE_QUEUE and ASSERTify + reformat kqueue.c. ([[Alex Ionescu]])<br />
* Implement KeRemoveByKeyDeviceQueueIfBusy. ([[Alex Ionescu]])<br />
* Cleanup exception.c ([[Alex Ionescu]])<br />
* Remove dangerous/broken KeGetCurrentIrql() define. ([[Alex Ionescu]])<br />
* Handle STATUS_CALLBACK_POP_STACK and add the status to ntstatus.h ([[Alex Ionescu]])<br />
* Also handle future support for GDI Batch flushing. ([[Alex Ionescu]])<br />
* Implement KxAcquireSpinLock/KxReleaseSpinLock for inline acquisition of spinlocks, SMP, UP and DBG. (on DBG builds, we OR the spinlock value with the KTHREAD address, then compare on release.) ([[Alex Ionescu]])<br />
* Make In-Stack QSLs a complete no-op in UP, we were still touching some fields. ([[Alex Ionescu]])<br />
* Added inlined routines for setting/getting CR, and also getting GDTR, IDTR, LDTR, TR. Used to implement KiSaveProcessorControlState. ([[Alex Ionescu]])<br />
* Implemented KeSaveStateForHibernate. ([[Alex Ionescu]])<br />
* Fix KeSetPriorityAndQuantumProcess to use Queued Spinlocks and KiAcquireProcess/ThreadLock when needed. ([[Alex Ionescu]])<br />
* Implement KiUnlinkThread to unlink a thread from its wait blocks, handle queue and timer activation/removal. ([[Alex Ionescu]])<br />
* Don't play with priorities in KiAbortWaitThread anymore, since we'll soon support Win2003 delayed "adjust increment" functionality, so that the code is not repeated many times. ([[Alex Ionescu]])<br />
* Rename KiAbortWaitThread to KiUnwaitThread, make it use KiUnlinkThread and delayed adjustment. ([[Alex Ionescu]])<br />
* Implement KxUnwaitThread and KxUnwaitThreadForEvent, optimized versions of KiWaitTest that can be used in special circumstances (notification events, thread termination, process signalling). ([[Alex Ionescu]])<br />
* Optimize KeSetEvent by handling signaled notification events without acquiring the dispatcher lock, and by using new inlined routines described above. ([[Alex Ionescu]])<br />
* Reimplement KeSetEventBoostPriority properly to actually do boosting. ([[Alex Ionescu]])<br />
* Fixup KeRundownQueue with a more typical/proper LIST_ENTRY loop. ([[Alex Ionescu]])<br />
* Implement KiAcquireDispatcherObject, KiReleaseDispatcherObject, used on SMP for dispatcher objects which use the volatile long member in the dispatcher header (such as gates). ([[Alex Ionescu]])<br />
* Implement KiTryThreadLock which tries to acquire the lock but exits if it can't, isntead of looping. ([[Alex Ionescu]])<br />
* Re-factor KeWaitForGate to make it SMP-safe by acquiring various locks when required. ([[Alex Ionescu]])<br />
* Fixed up KeSignalGateBoostPriority so it can also be SMP-safe, and also fix what exactly happens when the gate is signaled (directly make the other thread ready instead of doing a KiUnwaitThread on it). ([[Alex Ionescu]])<br />
* Split KxAcquireSpinLock/KxReleaseSpinLock into SMP vs UP like the other routines. ([[Alex Ionescu]])<br />
* Implement KeReadyThread that wraps KiReadyThread so that \ps doesn't have to worry about dispatcher lock. ([[Alex Ionescu]])<br />
* Make sure all a process's threads are ready if they're on the ready queue, during attachment. ([[Alex Ionescu]])<br />
* Merge in KiReadyThread from scheduler code, with a small code change to keep working with ROS's scheduler lists instead. ([[Alex Ionescu]])<br />
* Converted some macros to inlined functions. ([[Alex Ionescu]])<br />
* Modified KeDelayExecutionThread and KeWaitForSingleObject to be much simpler and readable, reducing some of the loops and continues, and 4th-level indentation. Also packed up common wait initialization at the beginning of the function, and into two new inline functions: KxDelayThreadWait and KxSingleThreadWait. No actual semantic changes, just re-ordering. ([[Alex Ionescu]])<br />
* Rename KiUnwakeQueue to KiActivateWaiterQueue. ([[Alex Ionescu]])<br />
* Implement most of the Ring 3/0 Invalid Opcode handler. Stops apps like mIRC from BSODing the system anymore. ([[Alex Ionescu]])<br />
* Fix one of the oldest hacks in ReactOS: KeGetCurrentThread() and PsGetcurrentProcess used to be NULL during early boot stage. We also didn't have an official idle therad/process. Also system intialization was not in its sepearte thread. Changes: ([[Alex Ionescu]])<br />
* Implemented SeAssignPrimaryToken. ([[Alex Ionescu]])<br />
* Setup Boot/System Token for Idle Process in SeInit2. ([[Alex Ionescu]])<br />
* Remove ROS hack in SeCaptureSubjectContextEx. ([[Alex Ionescu]])<br />
* Call SeAssignPrimaryToken in PspInitializeProcessSecurty when called for the Initial Process creation. ([[Alex Ionescu]])<br />
* Implement PsInitiailizeQuotaSystem and set PspDefauptQuotaBlock for the idle process so that it can be used for the initial process. ([[Alex Ionescu]])<br />
* Rewrite Process Manager Phase 0 initialization from scratch, to create a new initial system process and thread which will be used for Phase 1 (in ROS, phase 2) initialization of the executive. ([[Alex Ionescu]])<br />
* Fix a bug in PspCreateProcess which was using an uninitialized value of SectionObject in some cases, instead of NULL. ([[Alex Ionescu]])<br />
* Call PsInitailizeQuotaSystem from ObInit, and also create the system handle table inside the idle process, and make it the ObpKernelHandleTable. ([[Alex Ionescu]])<br />
* Do Executive Phase 0 Initialization at APC_LEVEL. ([[Alex Ionescu]])<br />
* Start idle thread at HIGH_PRIORITY then lower it to 0 once the Initial Thread is setup, so that it can run, then keep priority to 0 at DISPATCH_LEVEL and jump into idle loop code. ([[Alex Ionescu]])<br />
* Add NtYieldExecution to idle loop code since it's now being used. ([[Alex Ionescu]])<br />
* Fix IoGetCurrentProcess which was previously hacked. ([[Alex Ionescu]])<br />
* Remove some checks for Thread == NULL in ke_x.h, since this is now impossible. ([[Alex Ionescu]])<br />
* Split Phase 0/1 initialization in ex\init.c, since one runs in a separate thread now. Also don't lower IRQL to PASSIVE_LEVEL anymore (run at APC_LEVEL). ([[Alex Ionescu]])<br />
* Optimize PspLookupUserEntrypoints to use static ANSI_STRINGs instead of building them at runtime. ([[Alex Ionescu]])<br />
* Fix mapping/loading of the System DLL so that it's loaded as executable code, not read-only code. Also fix a handle leak of the section, and re-factor some code into smaller shared functions to reduce code duplication. ([[Alex Ionescu]])<br />
* Create a KD-compatible KiDebugRoutine and piggyback KDBG on it. ([[Alex Ionescu]])<br />
* Create separate GDB entry hack routine. ([[Alex Ionescu]])<br />
* Fix booting with /BREAK and continuing after an INT3/ASSERTion. ([[Alex Ionescu]])<br />
* A missing "return" statement to KiDispatchException which was causing all user-mode exceptions to become second-chance and thus crash the app. mIRC works again, and probably numerous other apps (mozilla as well i think, since it had the same issue) ([[Alex Ionescu]])<br />
* Fix a bug in KeRaiseUserExceptionDispatcher which was causing us not to set the Exception Address (EIP) in the EH record. ([[Alex Ionescu]])<br />
* Fix a terrible stack corruption bug in KeRaiseUserExceptionDispatcher which was causing us to eventually fuck up the stack in user mode (0x14 bytes instead of 0x50 bytes were reserved). ([[Alex Ionescu]])<br />
* Protect User-mode Callbacks with SEH, and use STATUS_POP_CALLBACK_STACK. ([[Alex Ionescu]])<br />
* Fix another nasty stack corruption bug in user-mode APC delivery. ([[Alex Ionescu]])<br />
* Protect User-mode APC delivery with SEH. ([[Alex Ionescu]])<br />
* Fix SEH handlers to return EXCEPTION_EXECUTE_HANDLER isntead of ExceptionContinueSearch. ([[Alex Ionescu]])<br />
* Fix some insidious bugs in exception handling, mostly related to the art of unwinding (RtlUnwind). ([[Alex Ionescu]])<br />
* Can't name specifics, but probably fixes multiple SEH/application bugs/regressions since about 6-8 months ago. Fixes my personal SEH test from 22 failures/crashes/BSODs to 22 succeesses... ([[Alex Ionescu]])<br />
* Also fixes some crashes in kernel-kqemu mode. ([[Alex Ionescu]])<br />
* Add code to wait for SwapBusy == FALSE on SMP. ([[Alex Ionescu]])<br />
* Add stub code to check for new PCR fields in 2003. Currently disabled because thread swap code still uses XP fields. ([[Alex Ionescu]])<br />
* Check for active DPCs at the end of thread swap, not at the beginning. ([[Alex Ionescu]])<br />
* Set PRCB->IdleThread outside of the thread swap routine. ([[Alex Ionescu]])<br />
* Don't set the thread state to running inside the swap routine, we already do it outside. ([[Alex Ionescu]])<br />
* Stop doing cli/sti doing context switching (For now, since it's only needed for FPU, which isn't yet done). ([[Alex Ionescu]])<br />
* Stop using XP KPCR fields for storing stack values, they're not used inside the kernel anymore and now have 2003 values (WMI tracing, etc). ([[Alex Ionescu]])<br />
* Move parts of the process switch (LDT reload) out-of-line. ([[Alex Ionescu]])<br />
* Don't update CR3 in KTSS, it's not used. ([[Alex Ionescu]])<br />
* Don't read a useless stack pointer anymore. ([[Alex Ionescu]])<br />
* Update KTSS_ESP0 near the end of context switching, not at the beginning anymore. ([[Alex Ionescu]])<br />
* Same for IOPM and I/O Redirection Map Base Address. ([[Alex Ionescu]])<br />
* Fix some bugs in LDT switch (EDI->EBP) ([[Alex Ionescu]])<br />
* Turn simple bugcheck into BugCheckEx with information that the helpfile says it should have. ([[Alex Ionescu]])<br />
* Assert that the current CPU is the one the thread is supposed to be running on. ([[Alex Ionescu]])<br />
* Get CR0, read the KTHREAD NPX State, disable interrupts and verify if the NPX state is dirty. If it is, then reload CR0 with the new value. Re-enable interrupts. This sequence should make FPU work during context switching, but I haven't tested yet. At the very least, it should get rid of TRAP_FAULT_UNKNOWN blue screen. ([[Alex Ionescu]])<br />
* Set TEB in the same time as the selector is being configured, not way earlier. ([[Alex Ionescu]])<br />
* On SMP systems, update KPROCESS->ActiveProcessors and assert their validty. Needed for a similar assertion and check in KiSwapProcess which we already have. ([[Alex Ionescu]])<br />
* Also on SMP, make sure to clear the KTHREAD's swap-busy lock after the actual swap has been done. ([[Alex Ionescu]])<br />
* Implement Trap 16: Math Coprocessor Fault. Happens during Floating Point precision error test that I wrote. Simply calls shared NPX handler in KiTrap7. ([[Alex Ionescu]])<br />
* Implement some extra checks in KiTrap7 and start coding the NPX shared handler. We *almost* have full FPU support now... (trying to get this done for tomorrow morning so that Greatlord can sent me the 15 000$ he promised...) ([[Alex Ionescu]])<br />
* Implement FPU Exception Handler. ([[Alex Ionescu]])<br />
* We can now properly handle FPU faults (wrote a small test for invalid fpu precision). ([[Alex Ionescu]])<br />
* Use LOADER_PARAMETER_BLOCK everywhere in ReactOS except freeldr.c ([[Alex Ionescu]])<br />
* Implemented KiRosFrldrLpbtoNtLpb to do a lightweight conversion and setup. Next patches will try to get rid of PLOADER_MODULE and use LDR_DATA_TABLE_ENTRY as well as increase bootstrap compatibility. ([[Alex Ionescu]])<br />
* Fix some bugs in intrin.h (missing __inline__ statments in some locations, which were causing warnings due to "static"). ([[Alex Ionescu]])<br />
* Remove intrinsics in winddk.h since they're now properly done in intrin.h (thanks KJK!!!) ([[Alex Ionescu]])<br />
* Make freeldr.c setup the boot KTSS like NTLDR does, so that the GDT entry for it is valid (and remove the code that was doing this from Ki386InitializeTss) ([[Alex Ionescu]])<br />
* Refactor KiSystemStartup to use 100% dynamic pointers and machine data queried from the Loader Block or actual GDT/IDT/Selectors in memory, isntead of hard-coded ntoskrnl offsets. This makes it possible to be loaded by NTLDR, which sets these system structures up by itself. (we do it in freeldr.c, as hacks). ([[Alex Ionescu]])<br />
* Add loop around the KiFreezeExecutionLock before continuing OS boot. ([[Alex Ionescu]])<br />
* Only check for break-in on the Boot CPU. ([[Alex Ionescu]])<br />
* Set priority to 0 *Before* lowering to DISPATCH_LEVEL. ([[Alex Ionescu]])<br />
* Also force interrupts to be enabled before lowering IRQL. ([[Alex Ionescu]])<br />
* Also set the idle thread's wait irql to DISPATCH_LEVEL (might fix some odd crashes) and set it as Running on UP builds (on SMP builds this is done in other code). ([[Alex Ionescu]])<br />
* Save processor state in the PKPRCB in KiInitializeKernel. ([[Alex Ionescu]])<br />
* Set the booting CPU as idle if no next thread was scheduled. ([[Alex Ionescu]])<br />
* Raise IRQL to HIGH_LEVEL upon exiting KiInitializeKernel to match the re-lowering to DISPATCH_LEVEL in KiSystemStartup (and subsequent interrupt flush). ([[Alex Ionescu]])<br />
* KiRosFrldrLpbtoNtLpb: Create a LDR_DATA_TABLE entry for each module (driver, hal, kernel) and properly fill it out and insert it into the loader block. ([[Alex Ionescu]])<br />
* KiRosFrldrLpbtoNtLpb: Use the NLS data block to hold pointers to the NLS tables. ([[Alex Ionescu]])<br />
* KiRosFrldrLpbtoNtLpb: Use the ->RegistryBase/Length loader block members to hold pointers to the SYSTEM hive. ([[Alex Ionescu]])<br />
* KiRosFrldrLpbtoNtLpb: Create a MEMORY_ALLOCATION_DESCRIPTOR for each type of memory currently used (LoaderNlsData, LoaderRegistrydata, LoaderSystemCode, LoaderHalCode, LoaderBootDriver). ([[Alex Ionescu]])<br />
* Revert LOADER_PARAMETER_BLOCK change, it actually really is PNLS_DATA_BLOCK. ([[Alex Ionescu]])<br />
* Fully use KeLoaderBlock->InLoadOrderListHead for driver loading and symbol lookups, instead of KeLoaderModules/KeLoaderModuleCount. Still not 100% compatible with NTLDR (since it uses BootDriverListHead with a special structure), but much closer to a portable design that doesn't rely on static kernel data. ([[Alex Ionescu]])<br />
* Change some internal functions to use UNICODE_STRING instead of PCHAR since this is how LdrEntry->BaseDllName is, and also it's closer to NT Design. ([[Alex Ionescu]])<br />
* Remove all the remaining code in boot.S and make KiRosPrepareForSystemStartup fastcall. Now NtProcessStartup just does a jmp to KiRosPrepareForSystemStartup without any other code. ([[Alex Ionescu]])<br />
* Use freeldr's stack during all of freeldr.c, and only switch to the boot stack in KiSystemStartup before calling KiInitializeKernel. This is what NT does as well (it piggybacks on NTLDR's stack until then). This allowed us to clean boot.S and now we can boot from NTLDR properly. ([[Alex Ionescu]])<br />
* Add two more lines in boot.S which detect boot-by-NTLDR and jump into KiSystemService (I thought FreeLdr didn't use the entrypoint, but it looks like it does, so this hack is needed). Detection is done by checking for the high bit in the PLOADER_PARAMETER_BLOCK pointer, which will be set on NT. ([[Alex Ionescu]])<br />
* Fix a double bug in KiSystemStartup. First, we were setting KPCR->Number instead of KPRCB->Number. Second, we were using KeGetPcr instead of __writefsdword. It worked on ROS because KeGetPcr is hard-coded to ROS's KPCR buffer. ([[Alex Ionescu]])<br />
* Clear KPCR->TEB during bootstrap as well. ([[Alex Ionescu]])<br />
* Use KPCR_PROCESSOR_NUMBER instead of 0x130. ([[Alex Ionescu]])<br />
* Put IDT in RW .data section ([[Alex Ionescu]])<br />
* Fix Ki386InitializeTss to properly set Boot TSS descriptor data (set it to 32-bits). Also properly setup the DF/NMI Task Gates in the IDT. ([[Alex Ionescu]])<br />
* Fix Ki386InitializeTss to use dynamic GDT calculated from KiGetMachineBootPointers instead of static internal address. Now NTLDR boots us all the way to HalInitializeProcessor. ([[Alex Ionescu]])<br />
* Use __readfsdword instead of de-referencing the Boot PCR, which is not queried for Application CPUs. (And put the Goto back where it was). Thanks to Thomas Weidenmueller for noticing. ([[Alex Ionescu]])<br />
* Implement ExpIsLoaderValid to validate the LOADER_PARAMETER_BLOCK's extension for the right size and version (we currently support 5.2 and over). ([[Alex Ionescu]])<br />
* Add code in KiRosFrldrLpbToNtLpb to setup a LOADER_PARAMETER_EXTENSION and set the right version and size. ([[Alex Ionescu]])<br />
* Initialize the per-CPU PRCB Paged/NPaged lookaslide pool lists. ([[Alex Ionescu]])<br />
* Add code to support application CPUs booting in ExpInitializeExecutive, and pass the loaderblock as a parameter. ([[Alex Ionescu]])<br />
* Add setupblk.h from TinyKRNL with all the definitions for NT's SETUPLDR structures (SETUP_LOADER_BLOCK and hardware configuration stuff). Update KiRosFrldrLpbToNtLpb to setup the Flags field of this block to "Text-Mode Setup Active" when we know that we're in ROS text mode. ([[Alex Ionescu]])<br />
* Update ExpInitializeExecutive to check for a valid setup block and detect text-mode and network installation modes. Use ExpInTextModeSetup instead of SetupMode variable, to make detection compatible with NTLDR. ([[Alex Ionescu]])<br />
* Do MmInit1 much earlier in the boot phase (right at the beginning of ExpInitalizeExecutive). This gives us access to things like SharedUserData, which NT has since NTLDR. Will try moving it up even higher. ([[Alex Ionescu]])<br />
* Fix a bug in ExInitPoolLookasidePointers which was making us overwrite low-memory. ([[Alex Ionescu]])<br />
* Initialize NLS tables during Phase 0, so that the associated APIs can work earlier. ([[Alex Ionescu]])<br />
* Bugcheck if HAL Phase 0 initialization failed, and force interrupts enabled after the HAL is ready. ([[Alex Ionescu]])<br />
* Un-optimize KeGetPcr and make it use fs:20h instead of hard-coding the 0xFF.... address, because someone decided that ROS should have a different KPCR address then NT. ([[Alex Ionescu]])<br />
* This gets NTLDR working with ReactOS and I can boot all the way to MmInit1 (which fails due to missing KeMemoryMap & freeldr data). ([[Alex Ionescu]])<br />
* KiRosFrldrLpbToNtLpb: Removing the ARC Boot path and splitting it into the ARC Boot Device Name, the ARC HAL Device Name, and the NT Boot and HAL Path Names, saved in their respective LoaderBlock pointers. ([[Alex Ionescu]])<br />
* KiRosFrldrLpbToNtLpb: Converting every slash to a space. ("/DEBUGPORT" -> " DEBUGPORT") ([[Alex Ionescu]])<br />
* KiRosFrldrLpbToNtLpb: Now we can fully parse and read NTLDR command lines. ([[Alex Ionescu]])<br />
* Use LoaderBlock->ArcDeviceNamePath & friends instead of the command line. ([[Alex Ionescu]])<br />
* Stop depending on slashes, and instead use strstr for parameters. ([[Alex Ionescu]])<br />
* Implement Phase 0 Ex initialization (Resource, Lookaside initialization) and generic Ex initialization routine. ([[Alex Ionescu]])<br />
* Clear the crypto exponent on boot-up. ([[Alex Ionescu]])<br />
* Set default global flags for checked builds. ([[Alex Ionescu]])<br />
* Set NtSystemRoot (SharedUserData) to C:<NT BOOT PATH> on startup. ([[Alex Ionescu]])<br />
* Cleanup lookas.c file and implement routines to initialize the system lookaside list in phase 0. ([[Alex Ionescu]])<br />
* Setup memory limits in shared user data. ([[Alex Ionescu]])<br />
* Loop security descriptors to find NLS data and make a copy of it in kernel pool, because the NLS buffer from NTLDR will be freed on NT. Also discovered a bug in Freeldr where it doesn't allocate ths NLS files sequentially, leaving a hole of 0x1000 between them. Added a hack to compensate (won't break NTLDR booting, just will waste 8KB of memory). ([[Alex Ionescu]])<br />
* Allocate the system call count table on checked builds. ([[Alex Ionescu]])<br />
* Refactor Ob/Se booting to match more closely NT, and so that we can do Se initialization in one shot. ([[Alex Ionescu]])<br />
* Combine SeInit1 and SeInit2 into SeInit since both can be done together now. ([[Alex Ionescu]])<br />
* Call PsInitSystem instead of PspInitPhase0, since PsInitsystem is the "external" phase-choosing routine. ([[Alex Ionescu]])<br />
* Implement ExComputeTickCountMultiplier to create a 24-bit precision remainder + whole integer of the ms/clock tick used in SharedUserData. ([[Alex Ionescu]])<br />
* Set the OS version and Machine Type (i386/PPC (<3 Arty) in SharedUserData. ([[Alex Ionescu]])<br />
* Move some HAL calls in Phase 2 (actually Phase 1...), same for KeInit2. ([[Alex Ionescu]])<br />
* Break into KDBG a bit earlier. ([[Alex Ionescu]])<br />
* Make Kernel initialization (KeInit2) portable/more complete. KeInit2 becomes KeInitSystem, the portable part, with a call to KiInitMachineDependent, the arch-specific part. ([[Alex Ionescu]])<br />
* Do all CPU configuration through IPIs and synchronize with potential multiple CPUs. ([[Alex Ionescu]])<br />
* Add mtrr.c and patpge.c for future support of MTRR, AMD K6 MTRR, PGE and PAT support, with initilization calls in each of them (which only print out a "Sorry" message). ([[Alex Ionescu]])<br />
* Add some stubbed code for extra initizliation to do later once some detection things are fixed. ([[Alex Ionescu]])<br />
* Add KF_XMMI64 feature flag for SSE2 and detect it. ([[Alex Ionescu]])<br />
* Detect Hyper-Threading and set Local APIC ID (put back Thomas's code that he added in an old revision and that I had accidentally removed and forgotten to re-convert into the new KiGetFeatureBits function). ([[Alex Ionescu]])<br />
* Add code to set the kernel MX Csr Mask in the FX Save Area. ([[Alex Ionescu]])<br />
* Startup the sysenter handler on the DPC stack. ([[Alex Ionescu]])<br />
* Detect and notify users with broken Pentiums. ([[Alex Ionescu]])<br />
* Do some NPX checks to forcefully disable any FPU flags that might be set (SSE, MMX, 3DNOW) if the NPX is disabled. ([[Alex Ionescu]])<br />
* Fix KUSER_SHARED_DATA in winddk.h ([[Alex Ionescu]])<br />
* Scanfor NOEXECUTE/EXECUTE/OPTIN/OPTOUT/ALWAYSON/ALWAYSOFF load strings and set the appropriate NX policy in KUSER_SHARED_DATA as well as kernel CPU Feature flags. ([[Alex Ionescu]])<br />
* Implement XPSP2+ syscall stub that uses indirect pointer instead of executable code inside KUSER_SHARED_DATA. ([[Alex Ionescu]])<br />
* Implement ExpInitNls to initialize the NLS Section using the new semantics recently implemented. Works pretty much like the previous code in rtl/nls.c except it uses the new variable names as well as maps a view of the NLS Table into the system process.c ([[Alex Ionescu]])<br />
* Delete rtl/nls.c and all the associated deprecated code. ([[Alex Ionescu]])<br />
* Do MmInit1 and SharedUserData stuff *after* initializing the initial thread, to avoid an ASSERT during bootup. ([[Alex Ionescu]])<br />
* Use KeLoaderBlock for registry hive loading. ([[Alex Ionescu]])<br />
* Get rid of the CACHED_MODULE array and associated structures and stop using them, get rid of ParseAndCacheLoadedModules. Stop using KeLoadedModules and KeLoadedModuleCount outside of freeldr.c. ([[Alex Ionescu]])<br />
* Except for MmInit1, the kernel should now be totally isolated from FreeLDR-specific data. ([[Alex Ionescu]])<br />
* Rewrite ExpLoadInitialProcess by inlining and simplifying what the call to RtlCreateProcsesParameters should do, and also create our own custom environment with the same arguments that NT's smss gets. ([[Alex Ionescu]])<br />
* This optimizes booting as well as gets use the differnet SESSIONY_INITIALIZATION_FAILED, where Y is a number representing which step of the process parameter/envieonment creation failed. ([[Alex Ionescu]])<br />
* Put all Phase 1 Ex* Initialization in ExpInitSystemPhase1 and clean up associated deprecated calls. ([[Alex Ionescu]])<br />
* Call ExpInitializePushLocks since we weren't doing this before. ([[Alex Ionescu]])<br />
* Get rid of the completely convoluted way that Phase 1 initialization was being ended, with umpteen events and waits and timeouts all synchronized from user-mode and do a simple 5-second wait to determine if smss started OK or not. ([[Alex Ionescu]])<br />
* Promote the Phase 1 initialization thread by jumping directly into the zero-page thread, and remove manual zero-page thread initialization code since we simply jump into its main routine. ([[Alex Ionescu]])<br />
* Make ExpInitNls responsible for NLS initialization in Phase 0 as well, to clean up the code in ExpInitailizeExecutive a bit. ([[Alex Ionescu]])<br />
* Initialize the system time/clock in Phase 1, not in Phase 0. ([[Alex Ionescu]])<br />
* Do HAL Phase1 initialization as the first step in Phase 1 initialization, then initialize the system clock (since the HAL's RTC is now configured). ([[Alex Ionescu]])<br />
* Do Ob Phase 1 init in Phase 1 initialization, not in phase 0. ([[Alex Ionescu]])<br />
* Do Ke Phase 1 init after HAL, Ob and Ex phase 1 inits. ([[Alex Ionescu]])<br />
* Initialize NLS for Phase 1 after Ke Phase 1, instead of much later. ([[Alex Ionescu]])<br />
* Implement ExInitializePushLock and ExConvertPushLockSharedToExclusive macros. ([[Alex Ionescu]])<br />
* FreeLDR: Create the loader entry for ntoskrnl now that FreeLDR PE-loads it since last year. This lets us remove a large hack in ntoskrnl which was manually creating the entry and filling it in. ([[Alex Ionescu]])<br />
* Rename some LastKrnl... addresses into MmFreeLdr to easily identify them, and remove the need to use MmFreeLdrMemLower and MmFreeLdrPageDirectoryStart. ([[Alex Ionescu]])<br />
* Remove the static KERNEL_BASE definition based on a GCC-specific external. Everything now uses the actual module entry's saved base address. ([[Alex Ionescu]])<br />
* Fix a Ps Initialization hack and properly set the boot PDE. ([[Alex Ionescu]])<br />
* Add a hack for NTLDR's lack of MmFreeLdrMemHigher and MmFreeLdrPageDirectoryEnd. ([[Alex Ionescu]])<br />
* In NTLDR boot, try to get the first kernel physical address from the loader entries. ([[Alex Ionescu]])<br />
* Fixup HAL's image base in the loader parameter block, since we load it at a different place then freeldr tells us. ([[Alex Ionescu]])<br />
* Stub LdrVerifyMappedImageMatchesChecksum. ([[Alex Ionescu]])<br />
* Separate locating the system DLL from initializing it. ([[Alex Ionescu]])<br />
* Implement split-phase PsInitSystem for Phase 0 and 1, and make system dll initialization as part of phase 1. ([[Alex Ionescu]])<br />
* Add MmVerifyImageIsOkForMpUse and MmCheckSystemImage to validate the system DLL. ([[Alex Ionescu]])<br />
* Add a separate bugcheck for each failure in PsLocateSystemDll, matching with the NT bugchecks that would occur. ([[Alex Ionescu]])<br />
* Inline and make some slight correctiions to KiInitailizeSystemClock, since it's based on the Ex subsystem, not Ke. Add code for boot-time timezone bias, but currently disabled because I need to implement a function to read configuration registry data at startup. ([[Alex Ionescu]])<br />
* Improve Init bugchecks to give the exact module that failed. Add Kd initilization in the same block as the other subsystems. ([[Alex Ionescu]])<br />
* Rename and re-arrange some initlization calls. ([[Alex Ionescu]])<br />
* More re-shuffling of initialization calls, including enabling access to the blue screen much much earlier (no point in doing it so late, but this change is not that useful since soon we'll have bootvid). ([[Alex Ionescu]])<br />
* Split Po init in two, so the early Po init (which we'll need to do eventually) doesn't depent on the later Po init (which uses a PnP notification which depends on the Io system). ([[Alex Ionescu]])<br />
* Make I/O initialize quite a bit later. ([[Alex Ionescu]])<br />
* Part 1 of ARC boot cleanups/changes: Create a valid \\SystemRoot symbolic link as the system is booting, which points to the ARC name, then, once drivers have loaded, re-assign it to the proper NT Device name. Added proper security descriptors and flags to symbolic links, as well as proper bugchecks when required. ([[Alex Ionescu]])<br />
* Kept and cleaned up the ROS hack for CD-ROM boot. ([[Alex Ionescu]])<br />
* Part 2 of ARC boot changes: Major modifications done to the existing code, as well as re-formatting and cleanup. Floppy ARC names are not created anymore (they don't exist), and CD-ROM ARC name is only created 1) when there is a boot CD and 2) only for the boot CD. This mimics NT functionality. ([[Alex Ionescu]])<br />
* Optimize some code paths, mostly by not querying the whole GET_DRIVE_GEOMETRY IRP twice and reducing some buffer usage. Also re-factor some code better into smaller functions. ([[Alex Ionescu]])<br />
* Document and work around currently FreeLDR incompatibility (lack of ARC_DISK_INFORMATION) data in LoaderBlock. ([[Alex Ionescu]])<br />
* Have FreeLDR fill out ARC_DISK_SIGNATURE information for each detected disk, as it's filling the registry. ([[Alex Ionescu]])<br />
* Add code to KiRosFrldrLpbToLpb to convert this array to the official ARC_DISK_INFORMATION structure that contains LIST_ENTRYies for each ARC_DISK_SIGNATURE, and initialize the ArcDiskSignatureListHead. ([[Alex Ionescu]])<br />
* Greatly simplify and optimize IoCreateArcNames by using ARC data from FreeLDR/NTLDR (now nearly 100% compatible!) instead of querying registry data (which FreeLdr had already set up, so we cached those values like ntldr does). ([[Alex Ionescu]])<br />
* Part 2.5 of ARC Boot changes. Re-factor IoCreateArcNames not to use a list-entry of detected disk from pool that gets looped and de-referenced, but instead use a simple loop which calls a function that gets disk information one-by-one (IopGetDiskInformation), so that it's used on the spot instead of allocated, linked, and retrieved later. ([[Alex Ionescu]])<br />
* Inline IopAssignArcNamesToDisk to reduce some stack size abuse and too much parameter shuffling ([[Alex Ionescu]])<br />
* Optimize IopApplyRosCdromArcHack by not searching for the second copy of ntoskrnl if we already found the first. ([[Alex Ionescu]])<br />
* Also optimize stack usage by only using an ANSI buffer instead of having another Unicode buffer and unicode strings. Saves 530 bytes of stack. ([[Alex Ionescu]])<br />
* ARC Boot Rewrite: Rename IoCreateArcNames to IopCreateArcNames and set it to NTAPI, as well as pass the loader block as a parameter. ([[Alex Ionescu]])<br />
* ARC Boot Rewrite: Reduce buffers to 128 bytes, since ARC Paths don't get longer then that. ([[Alex Ionescu]])<br />
* ARC Boot Rewrite: Optimize stack usage by using a single ANSI_STRING instead of 3 or 4. ([[Alex Ionescu]])<br />
* ARC Boot Rewrite: Optimize stack usage by using a single ansi buffer, not 2 or more. ([[Alex Ionescu]])<br />
* Remove InitSharedUserDataPage since this entire function is not needed anymore due to the recent ARC improvements. ([[Alex Ionescu]])<br />
* Call IoAssignDriverLetters with the proper parameters, and give it a chance to update the SystemRoot path (although our version doesn't yet do this). ([[Alex Ionescu]])<br />
* Fix a pretty bad stack/memory corruption bug related to IoReassignSystemRoot. ([[Alex Ionescu]])<br />
* Combine IoInit2 and IoInit3 into IoInitSystem, and make it return a BOOLEAN, and handle error with the appropriate IO1_INIT_FAILED bugcheck. Will combine IoInit1 soon. ([[Alex Ionescu]])<br />
* Initialize the registry in one shot, and allow it to fail and do the associated CONFIG_INIT_FAILED bugcheck. ([[Alex Ionescu]])<br />
* Initialize Io in one shot, with IoInitSystem. ([[Alex Ionescu]])<br />
* Locate the system DLL a bit later, since on the boot CD this creates a small incompatibility due to the wrong path being in use. ([[Alex Ionescu]])<br />
* Bootvid rewrite by Filip Navara (with some fixes by myself) ([[Alex Ionescu]])<br />
* HAL DMA enhancements by Filip Navara. ([[Alex Ionescu]])<br />
* CSRSS Console enhancements by Filip Navara. ([[Alex Ionescu]])<br />
* Win32k Primitive Queue/Input/Painting/Focus enhancements by Filip Navara. ([[Alex Ionescu]])<br />
* Other misc win32k/CSR bug fixes by Filip Navara. ([[Alex Ionescu]])<br />
* Merge some parts of IoInitSystem in the same main function instead of calling out to 10 external modules. ([[Alex Ionescu]])<br />
* Re-factor some code into smaller functions. ([[Alex Ionescu]])<br />
* Don't create some Object Directories twice, since now ExpCreateSystemRootLink does some of them. ([[Alex Ionescu]])<br />
* Add some failure paths to I/O Init. ([[Alex Ionescu]])<br />
* Implement a function to mark the boot partition DO_SYSTEM_BOOT_PARTITION in order to better catch some bugchecks. ([[Alex Ionescu]])<br />
* Combine PnpInit1/2 since they were called one after the other. ([[Alex Ionescu]])<br />
* Load RAW driver while loading boot drivers. ([[Alex Ionescu]])<br />
* Cleanup IoInitSystem a bit more. ([[Alex Ionescu]])<br />
* Set OBJ_OPENLINK invalid for core object types. ([[Alex Ionescu]])<br />
* Initialize symbolic link in-line with other core object types. ([[Alex Ionescu]])<br />
* Use the SePublicDefaultUnrestrictedSd directly instead of building another SD. ([[Alex Ionescu]])<br />
* Create core directory objects with Nt* functions instead of Ob*, to insure full accounting and error-handling. ([[Alex Ionescu]])<br />
* Create core objects with OBJ_CASE_INSENSITIVE. ([[Alex Ionescu]])<br />
* Fix the huge ObInit hack which was manually inserting Directory and Type object types in the type directory, and now loop the type list. Now we don't skip the Process, Token, Thread, Job, Section types anymore. ([[Alex Ionescu]])<br />
* Support Quota Information during object allocation and deallocation isntead of ignoring it. ([[Alex Ionescu]])<br />
* Use interlocked decrement when touching the object type (since it's a shared structure. We don't use the lock yet, but we won't for this anyways, since it's a simple lockable operation). ([[Alex Ionescu]])<br />
* Use the right object key when freeing the object. ([[Alex Ionescu]])<br />
* Modify the allocation function for a more optimized way of allocating objects instead of having to keep track of two sets of variables. ([[Alex Ionescu]])<br />
* Add various accounting variables. ([[Alex Ionescu]])<br />
* Make sure to properly handle allocations without object create info (ie, for object types). Now they get creator info and name info (which allowed us to cleanp the hack in ObInit). ([[Alex Ionescu]])<br />
* Add checks to see if Quota informatio is needed. ([[Alex Ionescu]])<br />
* Clear CreatorBackTraceIndex during allocation. ([[Alex Ionescu]])<br />
* Remove CreatorUniqueProcess hack from back when the idle thread was NULL. ([[Alex Ionescu]])<br />
* Do not zero out the header during allocation anymore, since this slows down the routine (instead, simply zero out the 2 fields that are NULL). ([[Alex Ionescu]])<br />
* Locate and clearly display that the fact we zero objects on creation is a HACK that needs to be fixed. (The Token code makes this assumption). ([[Alex Ionescu]])<br />
* Update HighWaterNumberOfObjects when needed. ([[Alex Ionescu]])<br />
* If caller didn't give pool charges, use the one from the object type. ([[Alex Ionescu]])<br />
* Clear the Total/HighWater* values for newly created object types instead of using random values. ([[Alex Ionescu]])<br />
* Properly typecast the WCHAR tag as CHAR. ([[Alex Ionescu]])<br />
* Insert each new object type in the ObTypeObjectType Type List. ([[Alex Ionescu]])<br />
* Set the Index member of each new object type and insert each new object type in the ObpObjectTypes array. This is crucial for object type enumeration when implemented. ([[Alex Ionescu]])<br />
* Fixup the way we insert new object types into the tree. Allow failure and don't return a type if we couldn't insert it, and only reference the type directory object if it actually exists. ([[Alex Ionescu]])<br />
* Move DOS Devices\"??" initialization in its own routine. ([[Alex Ionescu]])<br />
* Use Nt APIs for all operations instead of raw I/O. ([[Alex Ionescu]])<br />
* Create GLOBALROOT link to \ ([[Alex Ionescu]])<br />
* Create \??\Global link to \?? ([[Alex Ionescu]])<br />
* Implement Object Type Resource Lock, since object types are shared across all objects and thread-safety is critical. Used it everywhere where I think it's needed. Thomas, can you check if I missed anything please? ([[Alex Ionescu]])<br />
* Use interlocked increase/decrease for accounting variables inside the Object Type instead of acquiring a full lock or not being thread safe. ([[Alex Ionescu]])<br />
* Clear the creator type list of an object if it lost all its handles. ([[Alex Ionescu]])<br />
* Fix a bug in NtduplicateObject which was potentially derefernecing a garbage pointer (thanks Prefast!). ([[Alex Ionescu]])<br />
* Fix SD charges to 2048 bytes instead of 2000. ([[Alex Ionescu]])<br />
* Fix a memory leak in ObOpenObjectByName. Object Create Information is now freed. ([[Alex Ionescu]])<br />
* Implement NtCreateDebugObject, NtDebugContinue, NtDebugActiveProcess, NtRemoveProcessDebug, NtSetInformationDebugObject, NtWaitForDebugEvent. ([[Alex Ionescu]])<br />
* Of course, the entire backend is stubbed out. ([[Alex Ionescu]])<br />
* Implement Debug object initialization (not called yet) and close(not done) and delete (done) callbacks. ([[Alex Ionescu]])<br />
* Fixup DEBUG_OBJECT definition. ([[Alex Ionescu]])<br />
* Implement DbgkpCloseObject. ([[Alex Ionescu]])<br />
* Implement DbgkpOpenHandles. ([[Alex Ionescu]])<br />
* Fix various bugs in the code and flag usage. ([[Alex Ionescu]])<br />
* Enable calling DbgkClearProcessDebugObject when terminating a process. ([[Alex Ionescu]])<br />
* Define DBGKM_APINUMBER ([[Alex Ionescu]])<br />
* Implement DbgkpSendApiMessageLpc, DbgkpSendApiMessage, DbgkCopyProcessDebugPort, DbgkForwardException, DbgkFreeDebugEvent, DbgpWakeTarget. ([[Alex Ionescu]])<br />
* Close original handle in DbgkOpenHandles. ([[Alex Ionescu]])<br />
* Implement DbgkpConvertKernelToUserStateChange. I just remembered that there's actually 3 debug subsystems in NT: Win32, Native and Kernel, so this structure will still need to be heavily parsed at the Win32 level (in kernel32) before user-mode debuggers can work (so I'll have to write a small native-mode debugger test app to test this implementation first). ([[Alex Ionescu]])<br />
* Implement DbgkpMarkProcessPeb. ([[Alex Ionescu]])<br />
* Implement DbgkpQueueMessage. This is the main bi-directional communication routine for the newer non-LPC Debug Object. ([[Alex Ionescu]])<br />
* Implement DbgkPostFakeProcessCreateMessages (and stub DbgkpPostFakeThreadMessages and DbgkpPostFakeModuleMessages). These are required when attaching to a process after threads have been created and modules loaded, so that the debugger can have a valid state. ([[Alex Ionescu]])<br />
* Add one of the basic OBJECT_ATTRIBUTES flags and don't fail any 3rd-party driver or application that might've been using it. ([[Alex Ionescu]])<br />
* Add missing member to DBGKM_LOAD_DLL. ([[Alex Ionescu]])<br />
* Implement DbgkPostFakeModuleMessages. ([[Alex Ionescu]])<br />
* Stub MmGetFileNameForAddress but write documentation on how to implement it (thanks to Filip Navara). For now it always returns ntdll.dll as a testhack. ([[Alex Ionescu]])<br />
* Fix KeFreezeAllThreads prototype and define it in the internal headers. ([[Alex Ionescu]])<br />
* Fix two bugs in KeSetBasePriorityThread and KeSetPriorityThread which were using an undefined value for "Lock Released" if the priority wasn't changing, potentially causing a missing spinlock release when none was required (and thus eventually freezing the scheduler) ([[Alex Ionescu]])<br />
* Implement KeThawAllThreads based on KeFreezeAllThreads. ([[Alex Ionescu]])<br />
* Fix a bug in KeFreezeAllThreads which was causing us never to actually parse the next flink. ([[Alex Ionescu]])<br />
* Fix a bug in KeFreezeAllThreads which was causing us never to leave the critical region we entered at the beginning. ([[Alex Ionescu]])<br />
* Implement helper routine DbgkpSectionToFileHandle and stub MmGetFileNameForSection (easy ObQueryNameString-based implementation to do later). ([[Alex Ionescu]])<br />
* Implement helpers DbgkpSuspendProcess and DbgkpResumeProcess based on KeFreeze/ThawAllThreads. ([[Alex Ionescu]])<br />
* Implement DbgkExitProcess, DbgkExitThread, DbgkMapViewOfSection, DbgkUnmapViewOfSection. Apart from DbgkCreateThread, these are the main notification APIs that Dbgk uses for user-mode debug events. (Mm code needs to be changed to call the map/unmap notifications. Ps already calls the exit/create ones). ([[Alex Ionescu]])<br />
* Properly implement inline versions of KeGetCurrentThread and KeGetPreviousMode/ExGetPreviousMode, as well as KeGetPcr. This should significantly increase performance. (KeGetPreviousMode is reduced to 2 lines of code instead of 15 lines with 2 expensive jumps). ([[Alex Ionescu]])<br />
* Make CSRSS register the default hard error port on startup. ([[Alex Ionescu]])<br />
* Stubplement the System Hard Error handler (it simply bugchecks) ([[Alex Ionescu]])<br />
* Fully implement ExRaiseHardError when called from user-mode so that the strings and parameters are properly captured into user-mode memory. ([[Alex Ionescu]])<br />
* Almost completely implement ExpRaiseHardError which is responsible for actually doing the error. However, ROS LPC is screwed up so sending the LPC Message crashes since the port isn't in a listening state or something. ([[Alex Ionescu]])<br />
* Would appreciate some advice on how to get the LPC message to CSRSS. ([[Alex Ionescu]])<br />
* Fix Get/SetErrorMode. The Native API uses an inverted value of SEM_FAILCRITICALERRORS, so this must be handled in win32. ([[Alex Ionescu]])<br />
* Cleanup formatting of RaiseException, and only normalize the paramter count if we're actualy going to use it. ([[Alex Ionescu]])<br />
* Fix flags in DbgkpSectionToFileHandle ([[Alex Ionescu]])<br />
* Implement DbgkpCreateThread. ([[Alex Ionescu]])<br />
* Implement DbgkpSetProcessDebugObject. ([[Alex Ionescu]])<br />
* Implement MmAddVerifierThunks, MmIsDriverVerifying, MmIsVerifierEnabled. ([[Alex Ionescu]])<br />
* Implement IoSetCompletionRoutineEx, which is a safe way to set completion routines that almost all newer drivers will be using (XP+). ([[Alex Ionescu]])<br />
* FSTUB Patch for Mount Manager Support: Delete disk.c entirely from iomgr.c and spread it across fstub. ([[Alex Ionescu]])<br />
* FSTUB Patch for Mount Manager Support: Entirely reimplement from scratch IoWritePartitionTable, IoReadPartitionTable, IoSetPartitionInformation, HalExamineMbr. Lots of bug fixes in terms of wrong assumptions and compatibility with weird partition tables. ([[Alex Ionescu]])<br />
* FSTUB Patch for Mount Manager Support: Fix prototype of IoAssignDriveLetters, but for now, keep the old code (xHalIoAssignDriveLetters) because this has not been rewritten yet. ([[Alex Ionescu]])<br />
* FSTUB Patch for Mount Manager Support: Implement missing functions in HAL (IoRead/Write/Set PartitionInfo) and make them call into the ntoskrnl exports. ([[Alex Ionescu]])<br />
* Remove the "deprecated" directory from ntoskrnl since it now truly is. ([[Alex Ionescu]])<br />
* Remove KeInitInterrupts hack. ([[Alex Ionescu]])<br />
* Remove KiDispatchInterrupt2 export hack from kernel and stop using it from the HAL. ([[Alex Ionescu]])<br />
* HAL can now be built/tested with Windows/TinyKRNL since the export hack is gone and interrupts are sent properly through the IDT. ([[Alex Ionescu]])<br />
* Remove a bunch of completed krnlfun entries. ([[Alex Ionescu]])<br />
* Fix progressbar during bootcd bug. ([[Alex Ionescu]])<br />
* Swap the IDT where we should, in KiSystemStartup instead of the freeldr.c hackfile. This, coupled with the previous patch, should make NTLDR-booting even more succesful since interrupts won't crash/be ignored. ([[Alex Ionescu]])<br />
* Implement DbgkPostFakeThreadMessages. ([[Alex Ionescu]])<br />
* Add Dbgk-calls to NtMap/UnmapViewOfSection to nodify debugging services of new DLL image load. ([[Alex Ionescu]])<br />
* Forgot to actually initialize Dbgk during system initialization, so any API would crash. ([[Alex Ionescu]])<br />
* Fix some stupid bugs in NtCreateDebugObject. ([[Alex Ionescu]])<br />
* Implement an unhandled case in DbgkSetProcessDebugPort. The event queue is now properly parsed during connect and the event is signaled to start flushing the queue. ([[Alex Ionescu]])<br />
* Fix a bug in NtWaitForDebugEvent. ([[Alex Ionescu]])<br />
* Fix DbgkSectionHandleToFileHandle. ([[Alex Ionescu]])<br />
* Implement MmGetFileNameForSection. ([[Alex Ionescu]])<br />
* Fix some bugs in NtWaitForDebugEvent which caused debug events to be sent in the wrong order and also more then one event to be sent at the same time (and thus some events skipped). ([[Alex Ionescu]])<br />
* Test app now properly receives the "create process" event along with valid process/thread handles and the image base. No file handle sent yet because of the I/O Manager File Object bug. ([[Alex Ionescu]])<br />
* There's still a bug in NtContinueDebugEvent due to wrong Client IDs being sent ([[Alex Ionescu]])<br />
* Client IDs were OK, I incorrectly assumed they weren't due to the concidence they were equal to the thead/process handles. Actual bug was NtDebugContinue not accepting a valid status value. This is fixed now. ([[Alex Ionescu]])<br />
* Fix critical I/O bugs in IopParseFile which were causing the file object's device object pointer to be associated to the FSD (File System Device) instead of the Disk Driver, as well as the dereference of the FSD after the Disk Driver had been referenced (causing too many derefs for one, and to many refs for the other). Also fix a bug in IopQueryDeviceInformation which was querying the Disk Driver instead of the FSD. ([[Alex Ionescu]])<br />
* This also fixes IopQueryNameFile to properly return the entire name of the file now, instead of only the FSD part (probably fixes a dozen regressions). ([[Alex Ionescu]])<br />
* Fix a bug in DbgkOpenHandles which was causing file handles to get lost. ([[Alex Ionescu]])<br />
* Properly set and check the image notification flag for the process in DbgkCreateThread. Patch by hto. See issue #1879 for more details. ([[Alex Ionescu]])<br />
* Implement support for DEBUG_PROCESS in CreateProcess so that processes can be started with a debugger (works and tested with a new test app). ([[Alex Ionescu]])<br />
* Fix a bug in DbgkCreateThread which wasn't saving the initial thread information in the right place. The process create event is now fully supported and properly returns the entrypoint of the application. ([[Alex Ionescu]])<br />
* Write DLL Being mapped into NtTib->ArbitraryUserPointer so that the debugger can pick it up. ([[Alex Ionescu]])<br />
* Fix bugs in DbgkWakeTarget, DbgkCreateThread, DbgkMapViewOfSection and call from NtMapViewOfSection. ([[Alex Ionescu]])<br />
* Fix missing "break" statement in DbgkFreeDebugEvent, causing a handle leak, and in DbgkpOpenHandles, causing user-mode to get a kernel-mode handle for DLL images instead of the correct duplicated one. ([[Alex Ionescu]])<br />
* Currently struggling with the fact that ArbitraryUserPointer seems to be reset to zero before it's read for the debug event, so DLL names don't come through. ([[Alex Ionescu]])<br />
* Implement V86 trap fixup during traps and interrupts. ([[Alex Ionescu]])<br />
* Implement DR register save/restore during traps, interrupts and system calls. ([[Alex Ionescu]])<br />
* Clear capacity data buffer before reading it to avoid 0xCCCCCCCC values and manually set failure code if nobody filled it in (a hack, but I don't understand our pre-Nixon-era storage stack to "properly" fix it, so this is good enough and kills off the 0xCCCCCCCC byte non-paged pool allocations. ([[Alex Ionescu]])<br />
* Fix IopSecurityFile to send the IRP to the right device. ([[Alex Ionescu]])<br />
* Fix IoSetInformation to send the IRP to the right device. ([[Alex Ionescu]])<br />
* After the major fix in 24996, the functions that had been written to work with the I/O bug stopped working (by sending the IRP to the wrong device object, which, due to the bug was the ""right"" object), this is now fixed and the bootcd works again. ([[Alex Ionescu]])<br />
* Fix SleepEx. ([[Alex Ionescu]])<br />
* Put volatile statements in EX_RUNDOWN_REF, IRP, DEVICE_OBJECT, ERESOURCE, FILE_OBJECT, IO_REMOVE_LOCK, WORK_QUEUE_ITEM where required (thanks to Microsoft's changes in the WDK to mark the fields properly). ([[Alex Ionescu]])<br />
* Update FILE_OBJECT definition. ([[Alex Ionescu]])<br />
* Add some asserts to some I/O functions. ([[Alex Ionescu]])<br />
* Add stub support for File Objects created by XP+ Drivers which have File Object Extensions. ([[Alex Ionescu]])<br />
* Add some fixes to IopDeleteFile, including proper reference counting for the DO and VPB, as well as cleanup when the file is closed without a handle. ([[Alex Ionescu]])<br />
* Fix a bug in IopSecurityFile. ([[Alex Ionescu]])<br />
* Queue and unqueue IRPs in all I/O functions. ([[Alex Ionescu]])<br />
* Fully support IRP cancellation now. ([[Alex Ionescu]])<br />
* Fix critical bugs in NtDeviceIoControlFile and NtDeviceFsControlFile which were causing double queueing of IRPs and freeing of invalid memory, as well as invalid paramter checking for user-mode buffers. ([[Alex Ionescu]])<br />
* Add exhaustive validation checks to IoCreateFile, add more failure cases, and validate the EA buffer. Also support IO_ATTACH_DEVICE_API flag. ([[Alex Ionescu]])<br />
* Implement IoCreateStreamFileObjectEx and IoCreateStreamFileObjectLite and fix several bugs in the original implementation of IoCreateStreamFileObject. ([[Alex Ionescu]])<br />
* Update Io*ShareAccess routines to support XP+ style semantics related to special File Object flags which disable their use. ([[Alex Ionescu]])<br />
* Add validation to all Query/Set routines so that information clasess, lengths, buffers and alignment are properly checked. ([[Alex Ionescu]])<br />
* Also add an array for the proper acess rights that each query/set operation requires. ([[Alex Ionescu]])<br />
* Check backup/restore privileges during I/O File operations. ([[Alex Ionescu]])<br />
* Check traverse access during I/O File Operations. ([[Alex Ionescu]])<br />
* Check access privileges to the device during I/O file operations. ([[Alex Ionescu]])<br />
* Rename IopReferenceDeviceObject and also verify if an exclusive DO is trying to be invalidly opened. ([[Alex Ionescu]])<br />
* Support various extra security checks during I/O File/Device Parse Routine. ([[Alex Ionescu]])<br />
* Fix a bug during IopCleanupIrp so that we don't dereference the File OBject if this was a create operation. ([[Alex Ionescu]])<br />
* Fix some bogus asserts in IofCompleteRequest, and save the IRP Flags before signalling it's event, since the driver might've freed it behind our back. ([[Alex Ionescu]])<br />
* Fix a large bug in ObInsertObject which affected the insert of unnamed objects with forced security options (Such as process/threads). ([[Alex Ionescu]])<br />
* Fix the creation of the Process/Thread/Job Obejct Types to that security information is forced. ([[Alex Ionescu]])<br />
* Remove "Fix PS!!!" messages since the bug is now fixed and these objects now get proper security descriptors. ([[Alex Ionescu]])<br />
* Fix another bug in ObInsertObjet which wasn't properly validating user-mode objects and always assumed kernel mode. ([[Alex Ionescu]])<br />
* Silence multiple trace/checkpoint messages that have accumulated throughout time for various debugging purposes. ([[Alex Ionescu]])<br />
* Fix critical bugs in exception handling: Unwinding was completely broken, using the wrong SEH protector to detect collided unwinding. The correct protector itself also had a broken check. ([[Alex Ionescu]])<br />
* Fix architectural bug in the entire TrapFrame<->Context conversion system and Ring Privilege Transitions (Inter-ring and intra-ring) which was lacking proper sanitation and validation of segments, flags and debug registers. Among other things, IOPL is now respected, CS is not KGDT_R0_CODE | RPL_MASK anymore, and the GPF code is now properly being called. This completely fixes exception handling being totally broken and crashing firefox installer, mirc, and other applications. ([[Alex Ionescu]])<br />
* Rewrite the page fault handler base code in assembly instead of relying on a broken C routine. Detect VDM, V8086, detecting expected/normal fault in ExpInterlockedPopEntrySList and faults in the system handler code. Rewrite MmAccessFault to be the main function that calls out to other sub-fault functions, and use the same prototype as NT. ([[Alex Ionescu]])<br />
* Fix the KGDT boot table to have proper granularity and big flags, and extend it to 256 entries. ([[Alex Ionescu]])<br />
* Create proper thread context in RtlInitializeContext and cleanup Rtl Thread routines. ([[Alex Ionescu]])<br />
* Remove all int3 and breakpoints from trap handlers, and replace them with a much better "UNHANDLED_PATH" macro which freezes the system, beeps, and displays a message with the line of code that's unhandled. This is to clearly tell the user that something is unhandled, instead of nesting infinite exceptions due to the int3. ([[Alex Ionescu]])<br />
* Fix a bug in INT_PROLOG. ([[Alex Ionescu]])<br />
* Sanitize EFLAGS and Code Segments in KeContextToTrapFrame and KeTrapFrameToContext. ([[Alex Ionescu]])<br />
* Implement KiUpdateDr7 and KiRecordDr7 as well as DR_MASK and other DR-validation macros and functions to protect against DR-vulnerabilites as well as to properly account for each active hardware breakpoint in a per-thread fashion by using the dispatcher header. ([[Alex Ionescu]])<br />
* Allow CR0_EM when running in a VDM. ([[Alex Ionescu]])<br />
* Fix FPU/NPX Register handling in KeContextToTrapFrame and KeTrapFrameToContext, and also speed it up by manual copying instead of a memory move. ([[Alex Ionescu]])<br />
* Properly give IOPL 3 to user-mode threads if they requested it. ([[Alex Ionescu]])<br />
* Detect GPF during GPF. ([[Alex Ionescu]])<br />
* Detect pagefault with a trap-frame spread over two or more pages and nested. ([[Alex Ionescu]])<br />
* Properly sanitize and set correct trap frame in KiInitailizeUserApc. ([[Alex Ionescu]])<br />
* Return STATUS_ACCESS_VIOLATION during page faults instead of STATUS_UNSUCESSFUL. ([[Alex Ionescu]])<br />
* Fix assert in VdmSwapContext, as well as Code Selector check which was broken. ([[Alex Ionescu]])<br />
* Fix delayed object deletion (ObDeferDeleteObject) and the Ob Repear Routine and list. ([[Alex Ionescu]])<br />
* Update Kernel Fun. ([[Alex Ionescu]])<br />
* NtWaitForMultipleObjects/NtWaitForSingleObject: Fail if memory allocation failed. ([[Alex Ionescu]])<br />
* NtWaitForMultipleObjects/NtWaitForSingleObject: Don't overwrite original captured handle value when decoding to kernel handle. ([[Alex Ionescu]])<br />
* NtWaitForMultipleObjects/NtWaitForSingleObject: Use PAGED_CODE. ([[Alex Ionescu]])<br />
* NtWaitForMultipleObjects/NtWaitForSingleObject: Check timeout validity first before probing the entire handle array. ([[Alex Ionescu]])<br />
* Fix a critical bug in NtSignalAndWaitForObject which was using the wrong object type (waitable object instead of signalled objecT). ([[Alex Ionescu]])<br />
* Fix OB_SECURITY_METHOD prototype, callers, and implementors. ([[Alex Ionescu]])<br />
* Add call to SeOpenObjectAuditAlarm in ObCheckObjectAccess. ([[Alex Ionescu]])<br />
* Start adding Ob Callout validation on checked builds. For now only done around security functions. ([[Alex Ionescu]])<br />
* Set *MemoryAllocated to FALSE in ObGetObjectSecurity early on to avoid inconcistent state if the callback failed. ([[Alex Ionescu]])<br />
* Implement new XP function ObSetSecurityObjectByPointer and simplify NtSetSecurityObject by making it use it. ([[Alex Ionescu]])<br />
* More Win 2003 SecurityDescriptor Cache functions to sdcache instead of obsecure.c. ([[Alex Ionescu]])<br />
* Fix a bug in KeLeaveCriticalRegion which was delivering APCs even if Special APCs were disabled. The check is now fixed. Thanks to Dominique Cote for the bug report. ([[Alex Ionescu]])<br />
* Fix multiple bugs in HalpCalculateChsValues. ([[Alex Ionescu]])<br />
* Fix lots of typecast warnings. ([[Alex Ionescu]])<br />
* Fix potentially uninitialized variables. ([[Alex Ionescu]])<br />
* This should fix the partitioning problems/regression. Thanks to hto for finding out the source of the bug. ([[Alex Ionescu]])<br />
* Fix a bug in ExReleasePushLock which broken contention checking. ([[Alex Ionescu]])<br />
* Fix some length calculation bugs in IopQueryFile. ([[Alex Ionescu]])<br />
<br />
<br />
== Hardware Abstraction Layer (HAL) ==<br />
* Export KeAcquire/ReleaseQueuedSpinlocks ([[Aleksey Bragin]])<br />
* Fix wrong prototype of HalEndSystemInterrupt ([[Aleksey Bragin]])<br />
* Stall the CPU after each I/O command to simulate I/O delay. ([[Alex Ionescu]])<br />
* Make HalMakeBeep a bit nicer by making the PUCHAR typedef part of the TIMER constants. ([[Alex Ionescu]])<br />
* Flush write buffers before rebooting. ([[Alex Ionescu]])<br />
* Refactor sending the reset command since it's not always a matter of using the keyboard port. ([[Alex Ionescu]])<br />
* HalReturnToFirmware does a HalpReboot no matter what parameter is sent. ([[Alex Ionescu]])<br />
* Implement HalSystemVectorDispatchEntry, KeFlushWriteBuffer, HalFlushCommonBuffer, HalAllocateCrashDumpRegisters. ([[Alex Ionescu]])<br />
* Add lots of missing PCI definitions to the DDK, and to the internal file pci.h ([[Alex Ionescu]])<br />
* Make HAL compilable with the WDK thanks to a nice hack/trick I found. ([[Alex Ionescu]])<br />
* Delete HAL cruft files. ([[Alex Ionescu]])<br />
* Implement (or cleanup + mark as implemented, these are 4 line functions) HalDisplayString, HalAcquireDisplayOwnership, HalSetDisplayParameters, HalQueryDisplayParameters, HalInitailizeProcessor, HalAllProcessorsStarted, HalStartNextProcessor, HalProcessorIdle, HalRequestIpi. ([[Alex Ionescu]])<br />
* Fix some prototype definitions and cleanup some formatting. ([[Alex Ionescu]])<br />
* Export ExiTryToAcquireFastMutex from ntoskrnl, I had forgotten to export this ages ago when adding the other Exi*FastMutex* stuff. ([[Alex Ionescu]])<br />
* Remove fmutex.c and fastmutex functions from HAL. The whole point of having the Exi ones in the kernel was that HAL calls them through forward exports now (so any old driver can still link with HAL). Now we don't duplicate the implementation anymore. ([[Alex Ionescu]])<br />
* Remove DriverEntry, it's useless. Also move HalReportResourceUsage to halinit because it's a call-once-on-boot function much akin a HalInitPhase2 function, so delete resource.c ([[Alex Ionescu]])<br />
* Keep track of interrupt affinity and active processor mask each time a new CPU initializes. ([[Alex Ionescu]])<br />
* Reorganize HAL exports and export KeTRyToAcquireQueuedSpinlock and KeTryToAcquireQueuedSpinLockRaisetoSynch. ([[Alex Ionescu]])<br />
* Add stub for HalSetTimeIncrement. ([[Alex Ionescu]])<br />
* Cleanup CMOS-related routines (Get/Set environment value and get/set RTC). Fixup some prototypes as well. Inline HalpReadCmos/HalpWriteCmos instead of having a separate function. ([[Alex Ionescu]])<br />
* Fixup wrong protypes for various Queued Spinlock functions. ([[Alex Ionescu]])<br />
* HAL Initialization Rewrite: Initailize the clock increment separately from the calibration of stall execution. ([[Alex Ionescu]])<br />
* HAL Initialization Rewrite: Raise IRQL to the current IRQL (basically a no-op) to force a standard PIC state. Will be needed for the new IRQ implementation when it'll work. ([[Alex Ionescu]])<br />
* HAL Initialization Rewrite: Scan commandline for PCILOCK and BREAK parameters during hal initalization. The former is not supported, only saved, while the latter causes a breakpoint just like the windows implemetnation. ([[Alex Ionescu]])<br />
* HAL Initialization Rewrite: Get the bus type (ISA, EISA, MCA) on startup to support bootup from NTLDR. ([[Alex Ionescu]])<br />
* HAL Initialization Rewrite: Validate HAL to match the kernel (checked kernel and UP kernel). Also make the kernel set the proper PRCB flags for this. ([[Alex Ionescu]])<br />
* HAL Initialization Rewrite: Initialize the CMOS lock. ([[Alex Ionescu]])<br />
* HAL Initialization Rewrite: Setup HAL Dispatch table and enable call to HalQuerySystemInformation in the kernel since it now works. ([[Alex Ionescu]])<br />
* Rewrite bus functions to get rid of the idea of "Bus handlers". This is a deprecated NT4 concept that ReactOS copied and only slows down performance. ([[Alex Ionescu]])<br />
* Support custom private dispatch table PCI functions. ([[Alex Ionescu]])<br />
* Provide default PCI functions. ([[Alex Ionescu]])<br />
* Rewrite PCI functions using clean structures and code instead of magic macros and undocumented magic values. Use simple macros to generate PCI bus operations for write/read uchar, ushort and ulong. ([[Alex Ionescu]])<br />
* Simplify function definitions for CMOS access. ([[Alex Ionescu]])<br />
* Unify some dupli/tripi-cated code. ([[Alex Ionescu]])<br />
* Fix definition of HaliSetSystemInformation. ([[Alex Ionescu]])<br />
* Fix definitions of Bus Handler functions (add NTAPI). ([[Alex Ionescu]])<br />
* Add official BUS_HANDLER definition to NDK. ([[Alex Ionescu]])<br />
* Fix definition of HAL_PRIVATE_DISPATCH. ([[Alex Ionescu]])<br />
* Remove some derecated code (isa.c and mca.c). ([[Alex Ionescu]])<br />
* Fix prototype/definition of HalCalibratePerformanceCounter and properly implement it. ([[Alex Ionescu]])<br />
* Implement KeStallExecutionProcessor in its own assembly file isntead of using inlined GCC assembly, and align the loop to 16 bytes for more streamlined execution speed. ([[Alex Ionescu]])<br />
* Mask out clock interrupt during Phase 0 and Initialize clock interrupt on HAL Phase 1. This enables the HAL clock interrupt which was already written. ([[Alex Ionescu]])<br />
* Make the clock interrupt use HalpCurrentTimeIncrement instead of hardcoding a value. ([[Alex Ionescu]])<br />
* Re-implement HalpInitializeClock to allow for dynamic increments from 1ms to 15ms with appropriate rollovers and to call KeSetTimeIncrement to update timer values with the kernel. ([[Alex Ionescu]])<br />
* Implement HalSetTimeIncrement to allow changing the clock ms increment (but this isn't yet respected). ([[Alex Ionescu]])<br />
* Remove system/runtime update routines from the deprecated IRQ implementation and use the newer assembly ones already written, since we're now using the HAL clock interrupt. Remove other unused code. ([[Alex Ionescu]])<br />
* Fix more bugs in new hal IRQ implementation (that still isn't used yet due to regressions) and implement HalClearSoftwareInterrupt. ([[Alex Ionescu]])<br />
* There's no such thing as Phase 2 HAL init. ([[Alex Ionescu]])<br />
* Only map the 0x0 physical address in HalpReboot when enabling warm-reboot, there's no need to map it during init and keep it allocated during the whole time. ([[Alex Ionescu]])<br />
* Implement a working version of KeQueryPerformanceCounter based on the C implementation (without the strange MHZed-based code) and also support updating the performance timer during a clock interrupt, otherwise the value might become stale during the query. ([[Alex Ionescu]])<br />
* Update clock interrupt handler to update the performance counter, and also detect if someone changed the clock rate (but don't yet support this). ([[Alex Ionescu]])<br />
* Finally figured out a way to make the old HAL IRQ implementation work with the new Ke Interrupt implementation without requiring my new HAL IRQ code (which doesn't work). ([[Alex Ionescu]])<br />
* Add profil.c and stub HalStartProfileInterrupt, HalStopProfileInterrupt and HalSetProfileInterval, and export these functions. ([[Alex Ionescu]])<br />
* KdComPortInUse is exported by HAL, not kdcom, so make the change. ([[Alex Ionescu]])<br />
* Register the KD support routines that kdcom on NT uses and implement most of them (except support for PCI Debug Cards). ([[Alex Ionescu]])<br />
* I can now get Windows to recognize the HAL but it freezes during loading (Due to broken IRQL implementation) and WinDBG won't connect to it. ([[Alex Ionescu]])<br />
<br />
<br />
== Run Time Library (RTL) ==<br />
* Patch from [[Thomas Weidenmueller]] for Bug #1620: Fix a locking bug in the vectored exception handling<br />
* Patch from ([[Thomas Weidenmueller]]) for Bug #1671: Fix checking the SACL data area in the Win64 version of RtlSelfRelativeToAbsoluteSD2<br />
* Hackplement RtlSetUserValueHeap and RtlGetUserInfoHeap, they are needed for being able to build higher-level heap management around the Heap APIs (either for developers or the OS). Case in point, needed for my Global* rewrite in kernel32. The current APIs are utter hacks, but they work (eventually we should get rid of the Wine Windows 95 heap implementation and replace it). ([[Alex Ionescu]])<br />
* Fix implementation of RtlSetUserValueHeap and RtlGetUserInfoHeap to write their flags to the subheap and not the actual main heap structure (since those flags are valid for each allocation). ([[Alex Ionescu]])<br />
* Make heap allocations 8-byte aligned again. ([[Alex Ionescu]])<br />
* There are more then only the 3 or 4 heap flags WINE's Windows 95 code supports(there are about 18), so it's a bit stupid to mask them all out, especially since that breaks settable/tag flags. ([[Alex Ionescu]])<br />
* Stubbed RtlUsageHeap, RtlQueryTagHeap, RtlExtendHeap, RtlCreateTagHeap. ([[Alex Ionescu]])<br />
* Fix all the failures in the RTLSTR Wine test by merging our old rtl string routines with Wine's. We now pass all 2300 something tests. ([[Alex Ionescu]])<br />
* Sync RtlBitmap* implementation with WINE: Fixes 278 regression failures (for a total of 0 now). ([[Alex Ionescu]])<br />
* Also adds implementations for RtlFindMostSignificantBit , RtlFindLeastSignificantBit, RtlFindNextForwardRunClear, RtlFindClearRuns. ([[Alex Ionescu]])<br />
* Runtime Library Registry Wrappers: Use an array of registry paths instead of duplicating them ([[Alex Ionescu]])<br />
* Runtime Library Registry Wrappers: Fix implenmentation of RTL_REGISTRY_HANDLE. ([[Alex Ionescu]])<br />
* Runtime Library Registry Wrappers: Verify all Appends for failure before continuing. ([[Alex Ionescu]])<br />
* Runtime Library Registry Wrappers: Use the strict minimum key permissions isntead of KEY_ALL_ACCESS. ([[Alex Ionescu]])<br />
* Runtime Library Registry Wrappers: Don't use OBJ_OPENIF ([[Alex Ionescu]])<br />
* Runtime Library Registry Wrappers: Use CAPS for \\REGISTRY\\USER (required to match a Windows quirk exposed by a WINE test)* Runtime Library Registry Wrappers: ([[Alex Ionescu]])<br />
* Runtime Library Registry Wrappers: Use the correct length in RtlpNtQueryValueKey ([[Alex Ionescu]])<br />
* Implement RtlCaptureStackBackTrace and RtlWalkFrameChain and add definitions to ntifs.h ([[Alex Ionescu]])<br />
* Get rid of KeRosGetStackFrames and replace usage by RtlWalkFrameChain or RtlCaptureStackBackTrace, depending. ([[Alex Ionescu]])<br />
* Re-implement the routines in intel syntax and also cleanup the formatting. ([[Alex Ionescu]])<br />
* Also re-implement the way the routines work, by following Matt Pietrek's c code that he wrote in one of his articles after looking at the disassembly. ([[Alex Ionescu]])<br />
* Also used a patch for mingw found on Google which contained some implementations in C. ([[Alex Ionescu]])<br />
* New changes mostly add protection during unwinding, faster speed, and add implementations for __except_handler2 and _abnormal_termination which were not previously present. ([[Alex Ionescu]])<br />
* Added some generic table routines to rtlfuncs.h so that they can be used in user-mode. ([[Alex Ionescu]])<br />
* Implemented RtlInsertElementGenericTable and RtlInsertElementGenericTableFull (Splay-Tree versions). Also implemented a helper function RtlpFindGenericTableNodeOrParent when we're not given one and need to locate it manually. ([[Alex Ionescu]])<br />
* Defined structure for generic table entries so that we can properly return user data and do the right allocations. ([[Alex Ionescu]])<br />
* Implement RtlIsGenericTableEmpty, RtlNumberGenericTableElements. ([[Alex Ionescu]])<br />
* Implement RtlLookupElementGenericTable. ([[Alex Ionescu]])<br />
* Implement RtlDeleteElementGenericTable ([[Alex Ionescu]])<br />
* Implement RtlLookupElementGenericTableFull. ([[Alex Ionescu]])<br />
* Implement RtlEnumerateGenericTable. ([[Alex Ionescu]])<br />
* Implement RtlENumerateGEnericTableWithoutSplaying. ([[Alex Ionescu]])<br />
* Implement RtlGetElementGenericTable using ordered node/element. ([[Alex Ionescu]])<br />
* Fix a bug in RtlRaiseException. ([[Alex Ionescu]])<br />
<br />
== Kernel Mode Drivers ==<br />
* USB: Support hubs ([[Hervé Poussineau]])<br />
* vbemp: read EDID information about screen (not used yet) ([[Hervé Poussineau]])<br />
* Serial: Implement IOCTL_SERIAL_WAIT_ON_MASK ([[Hervé Poussineau]])<br />
* Imported and fixed a number of bugs in USB driver stack for Windows NT4 by Zhiming/Woodhead ([[Aleksey Bragin]])<br />
* VFAT: VfatGetNameInformation: Return the file name length even if the buffer is too small, that's the whole point of the "Query length before comitting a buffer" principle. ([[Alex Ionescu]])<br />
* VFAT: VfatGetNameInformation: FSDs are not supposed to null-terminate the buffer, nor expect the caller to send a buffer large enough for null-termination. ([[Alex Ionescu]])<br />
* VFAT: VfatGetNameInformation: Added a hack in IopQueryFile to handle another VFAT bug which makes it return the total number of bytes written in IoStatus.Information instead of the total number of bytes *left untouched*.There are probably many other broken things due to this. ([[Alex Ionescu]])<br />
* CDFS: A long long time ago there was a stupid kernel that created MDLs for R/W requests even when the length of the buffer was 0. He had another stupid friend called CDFS which attempted to read the MDL before checking if the buffer size is also 0. When cdfs's friend, the kernel, grew smarter and stopped allocating MDLs, cdfs didn't catch on and cried every time this happened. CDFS now caught up. (thanks to Greatlord for finding the regression). ([[Alex Ionescu]])<br />
* TCPIP: Fixed a bug in TCP/IP that was making it complete IRP_MJ_CREATE with STATUS_SUCCESS yet with the IRP marked as pending. ([[Alex Ionescu]])<br />
<br />
== NT System Library (ntdll) ==<br />
* Implement, export and NDKize: DbgUiGetThreadDebugObject, DbgUiDebugActiveProcess, DbgUiStopDebugging, NtSetInformationDebugObject. ([[Alex Ionescu]])<br />
* Stub DbgUiConvertStateChangeStructure (this isn't done in kernel32 anymore) and export it. ([[Alex Ionescu]])<br />
* Implement and export DbgUiSetThreadDebugObject. ([[Alex Ionescu]])<br />
* Fix DbgUi* APIs to use DbgSsReserved[1], and not [0]. Still trying to figure out what [0] is for. ([[Alex Ionescu]])<br />
* Implement DbgUiConvertStateChangeStructure. Win32/Native Debugging should be fully implemented now (and waiting on the kernel to support it.) ([[Alex Ionescu]])<br />
* Fix ntdll and usetup not to use OBJ_OPENLINK on symbolic links. This attribute is for registry keys, not symlinks. ([[Alex Ionescu]])<br />
<br />
<br />
== Services ==<br />
<br />
= Win32&trade; Personality =<br />
== User mode subsystem server (CSRSS) ==<br />
* Bugs fixed in SMSS and CSRSS ([[Alex Ionescu]])<br />
* Improve compatibility of ChangeDisplaySettingsEx() ([[Aleksey Bragin]])<br />
<br />
== Kernel-mode subsystem server (Win32K) ==<br />
* Fix BSOD in IntPrepareDriver (Bug #1321) ([[Hervé Poussineau]])<br />
* New keyboard driver and layout structure implemented ([[James Tabor]])<br />
* Have IntSystemParametersInfo send WM_SETTINGCHANGE when needed ([[Timo Kreuzer]])<br />
* Patch from ([[Timo Kreuzer]]) for Bug #843: Removed focus from windows, workaround<br />
* NtUserSetFocus accepts Null window ([[Timo Kreuzer]])<br />
* Same StretchBlt code for 8, 16, 32 bpp DIBs. It does not use putpixel anymore for 8bpp and 32bpp. Minor cleanups ([[Magnus Olsen]])<br />
* Last part of the new strectsblt. Remove all mul and div from the loop (speed increase). ([[Magnus Olsen]])<br />
* Commit FreeType cache glyth patch by royce3. Modified by tinus to work with trunk, final fixes made by [[Timo Kreuzer]]. Text output receives speed increase from this fix. See Bug #511 for more details. ([[Magnus Olsen]])<br />
* Implemented NtUserDrawCaption, NtGdiGetPath, NtGdiPathToRegion, NtGdiFlattenPath, NtGdiCloseFigure, NtGdiStrokePath, NtGdiStrokeAndFillPath, NtGdiPolyDraw ([[Saveliy Tretiakov]])<br />
* Remove hack from Aleksey in changedisplay(), which hard coded the display number. With this patch we are now extract the display number from the desktop and use it. ([[Johannes Anderwald]]) and ([[Magnus Olsen]])<br />
* Patch from [[Thomas Weidenmueller]] for Bug #1507: This patch fixes more issues with NtUserFindWindowEx. (one example of bugs have been fixed with this patch is the tray icon)<br />
* Fix strechblt dib16 and dib32, can be compiled with -O2 (gcc). See Bug #1520 for details ([[Magnus Olsen]])<br />
* Patch from [[Thomas Weidenmueller]]: Patch to fix a couple of argument probing bugs in NtQuerySymbolicLinkObject and NtCreateSymbolicLinkObject<br />
* Fix two failures from wine gdi32 test. When HDC is NULL to NtGdiCreateDIBitmap we to need create a hdc and delete the hdc when we are done. ([[Magnus Olsen]])<br />
* Implement SPI_GETFLATMENU and SPI_SETFLATMENU , not fully tested ([[Magnus Olsen]])<br />
* Implement SPI_GETWHEELSCROLLLINES and SPI_GETWHEELSCROLLCHARS. Further additions to Win32k may be necessary to fully implement the two ([[Magnus Olsen]])<br />
* Implement SPI_SETSCREENSAVERRUNNING, SPI_SETSCREENSAVETIMEOUT, SPI_GETSCREENSAVERRUNNING, SPI_GETSCREENSAVETIMEOUT ([[Magnus Olsen]])<br />
* Clean up NtGdiDdCreateDirectDrawObject and test. Fix create hdc when it is NULL ([[Magnus Olsen]])<br />
* Rewrote NtGdiDdQueryDirectDrawObject. gdientry2 now working more or less. Create surface not yet fully implemented. A few more steps before dx hal working out of the box from win32k and gdi32. Thanks to DrFred for helping debugging between ddraw.dll and gdi32.dll with his sniffer apps, Alex for GdiEntry2, W3seek, Filip, GvG for helping me understand how our win32k works and some other info. It is now possible to load a graphic driver directx hal support in ROS. But I do not know how well it works yet ([[Magnus Olsen]])<br />
* Added alpha blend support for 32bpp icons with alpha channels ([[Ged Murphy]])<br />
* Improve compatibility in IntCallWndProcA/W, at least mIRC.exe works with this change ([[Aleksey Bragin]])<br />
* Improve classes, fix bugs IntMapDesktopView() function ([[Aleksey Bragin]])<br />
* Audit NCI interface, fixing a few wrong entries ([[Aleksey Bragin]])<br />
<br />
== WINLOGON ==<br />
* Add a (mostly) working winlogon. User can logon, logoff and logon again. ([[Hervé Poussineau]])<br />
* Add autologon functionality ([[Hervé Poussineau]])<br />
* Add screensaver support ([[Hervé Poussineau]])<br />
<br />
== Control Panel Applets ==<br />
* Added currency controls with format information ([[Eric Kohl]])<br />
* Hit-testing added for caption buttons in Display properties - Appearance tab([[Eric Kohl]])<br />
<br />
=== SYSDM ===<br />
* Sysdm has been overhauled and now looks more like XP's ([[Ged Murphy]])<br />
* Patch from [[Colin Finck]] for Bug #1858: Added CPU detection and make a better layout of the system info.<br />
<br />
== Win32&trade; Applications ==<br />
=== Calc ===<br />
* Andrey Janzen (virus126 at gmail dot com) patch fixing copy\paste bug in calc<br />
* Fixed Bug #2019. 5.01 can be typed in calc now. It used to remove the zero so the result was 5.1. ([[Magnus Olsen]])<br />
* Fix compiling error in calc.c ([[Magnus Olsen]])<br />
<br />
=== Cmd ===<br />
<br />
=== Device Manager ===<br />
* wrote a device manager ([[Ged Murphy]])<br />
<br />
=== Downloader ===<br />
* Added the Download! Utility for downloading various free software ([[Maarten Bosma]])<br />
<br />
=== Explorer ===<br />
* Explorer does not leak icons and bitmaps anymore (see Bug #1554) ([[Timo Kreuzer]])<br />
<br />
=== Imagesoft ===<br />
* Implemented brightness, contrast, blur, sharpness, etc. ([[Ged Murphy]])<br />
<br />
=== ipconfig ===<br />
* rewrote ipconfig ([[Ged Murphy]])<br />
<br />
=== sc ===<br />
* rewrote parts of the sc code, adding more functionality ([[Ged Murphy]])<br />
<br />
=== Service Manager ===<br />
* rewrote most of the service manager code ([[Ged Murphy]])<br />
<br />
=== Userinit ===<br />
* Read the shell name from HKCU, if it does not exist fall back to HKLM, if this does not exist use "explorer.exe" and "cmd.exe" (ie allows to specify a custom shell) ([[Hervé Poussineau]])<br />
<br />
=== WineMine ===<br />
* Patch from [[Apostolos Alexiadis]] (issue #1632). Changed the colors and icons so as winemine to look like Windows Minesweeper ([[Maarten Bosma]])<br />
<br />
== Win32&trade; Libraries ==<br />
=== ADVAPI32 ===<br />
* Implement ConvertStringSecurityDescriptorToSecurityDescriptorA/W ([[Hervé Poussineau]])<br />
* Implement StartService ([[Hervé Poussineau]])<br />
<br />
=== COMCTL32 ===<br />
* Implemented TOOLTIPS_NotifyFormat, now returns the type of the string ([[Timo Kreuzer]])<br />
* Fix LISTVIEW_Callback() crash problem, which was caused by a bug in GCC. Now avoided in all modules by using -fno-sibling-call-optimisation ([[Aleksey Bragin]])<br />
<br />
=== CRT ===<br />
* Fix the calc bug, modf is compelete wrong, replace it with DJGPP C version of modf with small changes from me so it compile in ReactOS. Old modf did not clear the st reg before it was used, did not load the reg right, did not handler all cases ([[Magnus Olsen]])<br />
* Reporting djgpp fgets to fgetws, with wine test the old version failed on reading the string. Now we do not have a any bug in fgetws, according wine test. Test run in win2k and Reactos to be 100% sure it was not a Wine test problem. ([[Magnus Olsen]])<br />
* Fixing a ultoa bug, replacing both version with wine, copy the code from wine 0.9.0; I did add a NULL check for the string so it can not bsod. wine ntdll string only report one error, left to fix, I run wine test on windows 2000 and reactos to compare the result. Fireball report wine_ntdll_test string crach on windows xp, but it does not crash in windows 2000. ([[Magnus Olsen]])<br />
* Fixing a i64ltoa bug, replacing both version with wine, copy the code from wine cvs 2005-05-21, bug report by wine test ([[Magnus Olsen]])<br />
* Replace the following _wtol, _wtoi, _i64tow, _ui64tow, _ltow, _ultow, _ui64toa, _itow, _ltow, ultow with Wine from Wine CVS 2006-05-21 because we failed on Wine test on all of these. In Windows 2000 wine test ntdll string did not fail. ([[Magnus Olsen]])<br />
* Import cprintf from Wine CVS 2006-05-23 as Bug #1529 suggested. It makes most of msvcrt string test work, only one failure left to fix. ([[Magnus Olsen]])<br />
* Replace djgpp hell bugs fcvtbuf with project http://www.jbox.dk/sanos/source/lib/fcvt.c.html with small modifications to match ReactOS arch. Floating point to string conversion routines Copyright (C) 2002 Michael Ringgaard. All rights reserved.<br />
* Replace _swab with Wine CVS 2006-05-11 version, this will take care of our problem with overlapped memory with swab, and this also provides two more Wine msvcrt tests. 100% pass with Wine msvcrt string test. ([[Magnus Olsen]])<br />
* One more Wine msvcrt printf test pass, now it is 62 fails instead of 63 fails ([[Magnus Olsen]])<br />
* Start implementing float into sprintf, snprintf and other printf APIs. These commits are markers for further implementation, such as for *printf api (the main api functions). Changes made to sprintf.c must be mirrored into swprintf.c or changes into swprintf.c must be mirrored into swprintf.c, other wise the effect of the bugfix or change will not be executed in Reactos, as whether ANSII or unicode versions are being used. ([[Magnus Olsen]])<br />
* swprintf/sprintf commits for full support of %e %E %f %g %G, numberf function remains to be done ([[Magnus Olsen]])<br />
* Small rewrite to pass wine test, no bugs in ungetc according to Wine test of msvcrt. ([[Magnus Olsen]])<br />
* Fix so fread return right value of bytes/chars it reads, passing one more wine test in msvcrt file([[Magnus Olsen]])<br />
* Remove stub for _wenviron, already implemented in crt.a ([[Magnus Olsen]])<br />
* Redirect __p__mbctype to _mbctype, idea copied from Wine ([[Magnus Olsen]])<br />
* Redirect __p__tzname to _tzname, idea copied from Wine ([[Magnus Olsen]])<br />
* Fix 24 bugs in *printf string version. Now failing 34 test in wine_test msvcrt printf ([[Magnus Olsen]])<br />
* Fix one more Wine msvcrt printf test ([[Magnus Olsen]])<br />
* Fix 2 more errors in msvcrt *printf API ([[Magnus Olsen]])<br />
* Implement datatype I32 for *printf string version. We have a *printf for files as well. Now failing 29 Wine tests in msvcrt printf ([[Magnus Olsen]])<br />
* Fix two more bugs in *printf strings version. One more Wine test passed ([[Magnus Olsen]])<br />
* Fix some bugs for %c in the string version of printf ([[Magnus Olsen]])<br />
* Use uppercaps for %p instead of lowercaps when it formats the string. Now failing 27 Wine tests ([[Magnus Olsen]])<br />
* Implement %Fp. Now failing 25 Wine test for string version of *printf API ([[Magnus Olsen]])<br />
<br />
=== FMIFS ===<br />
* Expand fmifs.dll to dynamically load FS dlls ([[Hervé Poussineau]])<br />
* Implement ufat.dll/ufatx.dll ([[Hervé Poussineau]])<br />
<br />
=== GDI32 ===<br />
* Implemented NtGdiPolyDraw, based on Wine's Implementation ([[Saveliy Tretiakov]])<br />
* Fix a bug in DdDeleteDirectDrawObject, zero the DirectDraw handler. If it is successful memory is freed ([[Magnus Olsen]])<br />
* Start implementation of gdientry2, for the moment it returns incorrect info and does not fill some stuff right ([[Magnus Olsen]])<br />
<br />
=== KERNEL32 ===<br />
* Update ActiveContext functions ([[Aleksey Bragin]])<br />
* Call some APIs with the right DesiredAccess instead of allways sending _ALL_ACCESS. (for example, only use SECTION_MAP_READ | QUERY unless the caller wants r/w. ([[Alex Ionescu]])<br />
* Flush ITLB when writing to process memory. ([[Alex Ionescu]])<br />
* Entirely rewrite Kernel32 Probe functions to um, actually probe (ported Thomas's code in the kernel and adjusted for user-mode and then checked with WINE's code). I can't begin to fathom what the previous routines were supposed to be doing. ([[Alex Ionescu]])<br />
* Cache system static information, such as PAGE_SIZE at kernel32 startup, so we can reference it in our code without always quertying the system for it. ([[Alex Ionescu]])<br />
* Rewrote Base Heap implementation nearly from scratch, currently only for Global Heap (Local Heap is as broken as before, since it still calls the Global Heap APIs). For detailed implementation notes, see baseheap.h ([[Alex Ionescu]])<br />
* Main changes include using the RtlHandle package instead of duplicating an internal implementation, as well as using the RtlHeap* APIs that allow for setting User Flags/Values for associating Base Heap Flags/Handles with the actual RTL-managed block. ([[Alex Ionescu]])<br />
* Fixup Local* Heap implementation so that calls which have different semantics don't call the Global APIs (ie: LocalAlloc/LocalReAlloc and LocalFlags). The rest can be shared beteween them. Also fix some prototypes. ([[Alex Ionescu]])<br />
* Rename all the defintions to BASE_HEAP instead of GLOBAL_HEAP, since they apply just as well to the Local Heap. ([[Alex Ionescu]])<br />
* Reformat heap.c to ROS standards ([[Alex Ionescu]])<br />
* HeapCreate should mask out NT flags and tag allocations with CLASS 1. ([[Alex Ionescu]])<br />
* Implemented HeapCreateTagsW, HeapExtend, HeapQueryTagW, HeapSummary, HeapUsage. ([[Alex Ionescu]])<br />
* Sync with WINE's latest Heap implementation and try to remove some of the differences we had, and also document the ones which must be kept (our support for RTL_HEAP_COMMIT_ROUTINE and usage of user/kernel-mode lock APIs, etc). This reduces the heap/alloc regression tests to only 1 issue (which I'm working on fixing). ([[Alex Ionescu]])<br />
* Fix a typo in a comparison (& vs &&) which was breaking GlobalReAlloc in some cases. ([[Alex Ionescu]])<br />
* Fix a missing | (OR) in GlobalAlloc which created an invalid handle if the first allocation was of size 0. ([[Alex Ionescu]])<br />
* Same fixes for LocalAlloc/LocalReAlloc ([[Alex Ionescu]])<br />
* Create the BNO Global and Local symbolic links in kernel32. ([[Alex Ionescu]])<br />
* Make CheckRemoteDebuggerPresent fail if no process was specified. ([[Alex Ionescu]])<br />
* Implement DebugActiveProcess, DebugActiveProcessStop, DebugBreakProcess, DebugSetProcessKillOnExit. ([[Alex Ionescu]])<br />
* Rewrite all synch object wrappers in kernel32 to use a single unified method of implementation. ([[Alex Ionescu]])<br />
* A->W converstion through static TEB buffer. ([[Alex Ionescu]])<br />
* Failure if opening without a name. ([[Alex Ionescu]])<br />
* Special warning code for objects that already exist (fixes some WINE test failures and probably makes a myriad of applications work). ([[Alex Ionescu]])<br />
* Use BasepConvertObjectAttributes when creating an object to remove code duplication. ([[Alex Ionescu]])<br />
* InitializeCrticalSectionAndSpinCount shouldn't raise an exception on failure. ([[Alex Ionescu]])<br />
* Optimize WaitForMultipleObjects to cache 8 objects on the stack instead of only 3. ([[Alex Ionescu]])<br />
* Define DBGSS_THREAD_DATA and DbgSsGet/SetThreadData. This is what is located in DbgSsReserved[0] (an internal high-level structure that subsystem debuggers can use for whatever purposes they need). DbgSsReserved[1] is the actual native debug object used only by DbgUi in ntdll. ([[Alex Ionescu]])<br />
* Implement SaveThreadHandle, SaveProcesHandle, MarkThreadHandle, MarkProcessHandle, RemoveHandles and CloseAllProcessHandles to deal with this structure. ([[Alex Ionescu]])<br />
* Call these functions when required, except for WaitForDebugEvent which will set them up once implemented. ([[Alex Ionescu]])<br />
* Implement WaitForDebugEvent. Calls out to DbgUiConvertWaitStateStructure which is still unimplemented. ([[Alex Ionescu]])<br />
<br />
=== NEWDEV ===<br />
* Allow to specify a custom path when installing a driver ([[Hervé Poussineau]])<br />
<br />
=== SETUPAPI ===<br />
* added icons for the device image list ([[Ged Murphy]])<br />
* Search the best driver for a device ([[Hervé Poussineau]])<br />
<br />
=== USER32 ===<br />
* Fix some window focus issues ([[Timo Kreuzer]])<br />
* Patch from [[Thomas Weidenmueller]] for Bug #1486: Convert WM_MDICREATE messages from/to unicode<br />
* Fix two user mode crash for menu. Do not try reading from NULL pointer and compare the value. This increases success in user32_winetest.exe, but other user mode crashes with menu remain. ([[Magnus Olsen]])<br />
* Fix the radio buttons to use the new Marlett font. ([[Ged Murphy]])<br />
* Added support for selection of 32bpp icons and cursors ([[Ged Murphy]])<br />
* Implement GetTabbedTextExtentA() based on Wine ([[Aleksey Bragin]])<br />
* Update TEXT_TabbedTextOut from Wine ([[Aleksey Bragin]])<br />
* Update other text outputting routines ([[Aleksey Bragin]])<br />
* Update buttons code and more work towards easier code sharing with Wine ([[Aleksey Bragin]])<br />
* Improve debugging abilities by making user32.dll using a generic way of displaying debug messages (TRACE/WARN/ERR) and adding a messages spy ([[Aleksey Bragin]])<br />
<br />
= 3rd Party Software =<br />
* Update Zlib from 1.1.4 to 1.2.3 to fix some memory leaks ([[Magnus Olsen]])<br />
* Updated DejaVu Font to Version 2.13 ([[Magnus Olsen]])<br />
* Updated Buslogic Driver to Version 1.2.0.4 (see Bug #1891) ([[Christoph von Wittich]])<br />
* Freetype, small speed increase, remove Freetype ROS glue C version of memcpy, memcmp, isalnum, labs and replace it from reactos string.a. We got asm version of most of them, so that is the reason to the speed increase of Freetype ([[Magnus Olsen]])<br />
* Cleanup zlib and libxml2 so they consume less space in the tree ([[Aleksey Bragin]])<br />
<br />
= FreeLdr =<br />
* Improved Compatibility with Intel Macs ([[Michael Steil]])<br />
* Patch from [[Colin Finck]] for Bug #1856: Adds the "ProcessorNameString" value to the "CentralProcessor" registry key<br />
* Patch from [[Dmitry G. Gorbachev]] and [[Magnus Olsen]] for Bug #1874: Patch does not use the RDMSR and WRMSR measure method, which we need for dual core and the CPU supports it. See Intel documentations AP-485. The patch is from [[Dmitry G. Gorbachev]], detections of RTSC support for single and dual core by me, adding check if the CPU support RDMSR and WRMSR and send a true or false value to GetCpuSpeed, so we know which method we should use. Dmitry's patch should be used when it is false, otherwise we should use the RDMSR and WRMSR measure method. See Bug #1874 for more details. ([[Magnus Olsen]])<br />
* Partly rewritten debug print implementation ([[Aleksey Bragin]])<br />
* PE Loader Improvements: Add PE routines for traversing the import table and fixing up the imports. ([[Alex Ionescu]])<br />
* PE Loader Improvements: Add routine for getting the LOADER_MODULE for a freeldr module by name. ([[Alex Ionescu]])<br />
* PE Loader Improvements: Add the ability to load a not-yet-loaded-driver that's in an import entry (ie: dependencies). Only used for HAL now. ([[Alex Ionescu]])<br />
* PE Loader Improvements: Map HAL in the same was as the kernel, instead of relocating it as a hack from within the kernel. ([[Alex Ionescu]])<br />
* PE Loader Improvements: Refactor some routines to better share code. Don't read freed memory anymore. ([[Alex Ionescu]])<br />
* PE Loader Improvements: Use LdrRelocateImageWithBias instead of quintuplicating relocation code. ([[Alex Ionescu]])<br />
* PE Loader Improvements: Parse kernel and HAL imports while PE-loading from within freeldr. ([[Alex Ionescu]])<br />
* Remove dozens of freeldr.c hacks from the kernel. Remove slow code which was making two copies of the parameter block and wasting over 30KB in static strings that were immediately copied to other strings... ([[Alex Ionescu]])<br />
* Don't use HalModuleObject and NtoskrnlModuleObject anymore. Remove LdrSafePEProcessModule and other similar boot-time hacks. Reimplement MmGetSystemRoutineAddress. ([[Alex Ionescu]])<br />
* Change kdcom.sys to kdcom.dll. ([[Alex Ionescu]])<br />
* Remove all kdcom exports and files from HAL and link with kdcom.dll instead. ([[Alex Ionescu]])<br />
* Add support in freeldr for loading kdcom.dll (and theoretically any other import, such as the Code Integrity DLL for kernel-mode signing, but for now I've only tested this one). ([[Alex Ionescu]])<br />
* Refactor some of the HAL loading code to make it generic for any image. ([[Alex Ionescu]])<br />
* Load HAL manually when loading kernel, before processing imports, to make sure that HAL is index 1 in the loader modules and loads before KDCOM. ([[Alex Ionescu]])<br />
<br />
= Testing =<br />
* Introduced kernel-mode regression tests framework ([[Aleksey Bragin]])<br />
* Implemented Ob regression tests for the kernel ([[Aleksey Bragin]])<br />
<br />
<br />
{{Changelog}}<br />
<br />
[[Category:ChangeLogs]]</div>Sabikihttps://reactos.org/wiki/index.php?title=ChangeLog-0.3.1&diff=12573ChangeLog-0.3.12007-03-11T15:26:43Z<p>Sabiki: add a released date</p>
<hr />
<div>This is the changelog for [[ReactOS]]&trade; version 0.3.1(released 1x March, 2007), an open-source operating system designed to be binary executable- and device driver-compatible with Microsoft&trade; Windows NT&trade; and subsequent Microsoft operating systems such as Windows 2000&trade; and Windows XP&trade;. ReactOS is written by the ReactOS development team, and the last previous version of ReactOS was [[ChangeLog-0.3.0|version 0.3.0]] (released 27 August, 2006).<br />
<br />
= General =<br />
== Generic 0.3.1 Changes ==<br />
* Unicode corrections ([[Johannes Anderwald]])<br />
* Start removing Bitstream font from ReactOS. Only console apps are using Bitstream font but that will change once a few other issues are resolved. The rest of ROS is using DejaVu, a unicode font ([[Magnus Olsen]])<br />
* Enable pnpmgr in livecd ([[Hervé Poussineau]])<br />
* mkhive: use cmlib instead of duplicating code ([[Hervé Poussineau]])<br />
* VMWare properly detected ([[Alex Ionescu]])<br />
* Added the Wallpaper picture ''lake.bmp'' by [[Andreas Bjerkeholt]]<br />
<br />
== RBUILD ==<br />
* Dependency Map added by ([[Christoph von Wittich]]) and checking implemented by ([[Johannes Anderwald]])<br />
* Clean Log added and Help for individual commands ([[Peter Ward]])<br />
* Space in name issues fixed ([[Christoph von Wittich]])<br />
* ROS_PREFIX allowed on MS Windows platforms for cross compiling ([[Hervé Poussineau]])<br />
* <intrin.h> compatibility header. Implements Visual C++ intrinsics in GCC ([[KJK::Hyperion]])<br />
* Work towards MSVC compatibility (entrypoint name underscoring if needed) ([[Aleksey Bragin]])<br />
* Add initial support for a Code::Blocks backend, allowing the entire project to be built and managed within the IDE ([[Christoph von Wittich]])<br />
<br />
== Translations ==<br />
* Added and updated French Translation for Control Panel, Devmgmt, Downloader, ibrowser, Notepad, Reporterror, Rundll32, Solitaire, Syssetup, Timedate.cpl and Userinit ([[Pierre Schweitzer]])<br />
* Added French Translation to Ipconfig ([[Sylvain Petreolle]])<br />
* Thai keyboard layout added ([[Dmitry G. Gorbachev]])<br />
* Dutch Translations for Explorer, ibrowser, Mmsys.cpl, Reporterror and Welcome from i386DX<br />
* Patches from [[Signouret Jerome]] for Bugs #1312 and #1370: French Translations for FreeLoader's fdebug and WineMine<br />
* Patch from [[Sylvain Petreolle]] for Bug #1539: French Translation for Newdev.dll<br />
* Patches from [[Paolo Devoti]] for Bugs #1921 to #1935 and #1974 to #1976: Italian Translations for Cacls, Control Panel, Devmgmt, Downloader, Expand, Format, ImageSoft, Regsvr32, Reporterror, Rundll32, Sndvol32, Taskmgr, Userinit, Vmwinst, Winlogon and WordPad<br />
* Patch from [[Kamil Hornicek]] for Bug #1959: Czech translation for Control Panel<br />
* Swedish translation of getfirefox by Andreas Bjerkeholt<br />
* Patch from [[Sylvain Petreolle]] for Bug #1539: Recommit french translations<br />
* Patches from [[Apostolos Alexiadis]] for Bugs #1429, #1509 and #1630: Greek Translations for Calc, Expand, Explorer, Hdwwiz, Oleaut32.dll, Rundll32, Userinit<br />
* Patches from [[Apostolos Alexiadis]] for Bugs #1631 and #1831: Greek Keyboard layout rewrite. Punctuation stuff and other similar issues fixed<br />
* Patches from [[Artyom Reznikov]] for Bugs #1279, #1624 and #1635: Added and updated Ukrainian Translations for Appwiz, Comdlg32.dll, Desk.cpl, Explorer, GetFirefox, Hdwwiz, Intl.cpl, Mmsys.cpl, Notepad, Regedit, Taskmgr, Timedate.cpl, User32.dll, Welcome and Wininit.dll<br />
* Patches from [[Lars Martin Hambro]] for Bugs #1606, #1607, #1637, #1641 to #1644, #1674 to #1687, #1695, #1696, #1698 and #1700: Norwegian Translations for Cacls, Calc, Cmd, Expand, Explorer, Format, GetFirefox, ibrowser, Imagesoft, Msconfig, Notepad, Ntvdm, "reactos.exe" (Setup tool under Windows), Regedit's Column List Box, Regsvr32, Reporterror, Rundll32, sm, Taskmgr, Userinit, Welcome, WineFile, WineMine, Winlogon and WordPad<br />
* Patch from Fork for Bug #1633: Norwegian Translation for Syssetup.dll, Winmm.dll, User32.dll and Userenv.dll<br />
* Patch from [[Simon Hanae]] for Bug #1795 and #1876: Japanese keyboard driver added<br />
* Updated Italian translation of Calc by [[Gabriel Ilardi]]<br />
* Patch from arzi for Bug #1367: Finnish Translation for Control and "reactos.exe" (Setup tool under Windows)<br />
* Patch from [[Emil Kaczmarek]] for Bug #1315: Polish Translation for WineMine<br />
<br />
= ReactOS Core =<br />
== Kernel and Executive (NTOSKRNL) ==<br />
* Implemented ObReferenceProcessHandleTable ([[Alex Ionescu]])<br />
* Implemented ObDereferenceProcessHandleTable ([[Alex Ionescu]])<br />
* Implemented ObpReferenceProcessObjectByHandle ([[Alex Ionescu]])<br />
* Simplified ObDuplicateObject ([[Alex Ionescu]])<br />
* Patch from ([[Dmitry G. Gorbachev]]) for Bug #1953: fixes invalid sync after loading BLUE.SYS<br />
* Various warnings fixed ([[Thomas Weidenmueller]])<br />
* Cleanup of locking and lookup macros ([[Alex Ionescu]])<br />
* Adjustments in SeAccessCheck, returning STATUS_SUCCESS ([[Alex Ionescu]])<br />
* Various optimizations of lookup context and lock ([[Alex Ionescu]])<br />
* Patch from [[Thomas Weidenmueller]] for Bug #1667: NTOSKRNL: Fix GCC4 warning and return correct error code in NtSignalAndWaitForSingleObject<br />
* Fix incorrect loop of race conditions in the rundown protection implementation, requiring the value to have been changed and inactive before slow path is taken ([[Alex Ionescu]])<br />
* Fix locking bugs in guarded mutex implementation where operations were not reattempted ([[Alex Ionescu]])<br />
* Fix inverted result bug in KeTrytoAcquireGuardedMutex ([[Alex Ionescu]])<br />
* Fix KiMask32Array, value off and caused errors in priority/affinity masks ([[Alex Ionescu]])<br />
* Patch from [[Art Yerkes]] for memory management page referencing.<br />
* Handle leaks fixed in ExDestroyHandleEntry ([[Alex Ionescu]])<br />
* Imitate success for WMI calls and add a stubbed wmilib.sys, so that drivers relying on WMI can feel comfortable ([[Aleksey Bragin]])<br />
* Improve IoRegisterDeviceInterface() error-handling abilities and fix its behaviour so it's compatible with 3rd party drivers ([[Aleksey Bragin]], [[Hervé Poussineau]])<br />
* NDK 0.98, now with versioned headers. Too many changes to list, see the TinyKRNL SVN Logs for more detailed information. Thanks to Andrew (Wax), Thomas and Aleksey for testing. ([[Alex Ionescu]])<br />
* Check the Image Config Data in MmCreatePeb for address abusing (bug #1487). ([[Alex Ionescu]])<br />
* Speed-up the ElfpIsPowerOf2 function (bug #1464). ([[Alex Ionescu]])<br />
* Use the Spare0 array, present in EPROCESS instead of ReactOS-specific members for Process Locking (temporary fix until pushlocks are used). ([[Alex Ionescu]])<br />
* Use EPROCESS's AddressCreationLock instead of the MADDRESS_SPACE Lock. ([[Alex Ionescu]])<br />
* Overlay MADDRES_SPACE over MM_AVL_NODE. Even though our structures are currently incompatible, they represent the same thing (The EPROCESS's Address space). ([[Alex Ionescu]])<br />
* Get rid of ROS_EPROCESS and all the ugly type-casting that was being done, now that the last two hacks allow us to properly use EPROCESS. ([[Alex Ionescu]])<br />
* Use the proper HANDLE_TABLE and HANDLE_TABLE_ENTRY structures. ([[Alex Ionescu]])<br />
* Cleanup the formatting, code and function headers of most of the Object Manager interfaces. ([[Alex Ionescu]])<br />
* SymTest: The Symbolic Link kernel implementation tester. Tests for really wacky symlink API properties. 8 failures on ROS. ([[Alex Ionescu]])<br />
* SymLink Rewrite: Use OBJECT_SYMBOLIC_LINK structure as used by Windows NT (and added the structure to the NDK) ([[Alex Ionescu]])<br />
* SymLink Rewrite: Changed code to use the new names in the structure ([[Alex Ionescu]])<br />
* SymLink Rewrite: Only free the symlink's name if it has one, to avoid a bugcheck. ([[Alex Ionescu]])<br />
* SymLink Rewrite: Optimize parsing: if the new name is actually shorter then the target name, then don't allocate from pool, but re-use the buffer. This improves symlink parsing speed. Also fix a bug which made it depend on the incorrect implementation of NtCreateSymbolicLinkObject ([[Alex Ionescu]])<br />
* SymLink Rewrite: Re-align the link target maximum length in NtCreateSymbolicLinkObject if it's odd, and fail if the length is odd, smaller then the maximum, or if the maximum is zero. ([[Alex Ionescu]])<br />
* SymLink Rewrite: Originally allocate the symlink name in Paged Pool. ([[Alex Ionescu]])<br />
* SymLink Rewrite: Initialize new members of the structure. ([[Alex Ionescu]])<br />
* SymLink Rewrite: Fail in no-memory case, instead of continuing. ([[Alex Ionescu]])<br />
* SymLink Rewrite: Properly probe the LinkTarget in NtQuerySymbolicLinkObject. ([[Alex Ionescu]])<br />
* SymLink Rewrite: Properly handle which length is chosen for the copy and for the return in NtQuerySymbolicObject. ([[Alex Ionescu]])<br />
* SymLink Rewrite: Lock the symbolic link object type while querying it. Eventually many more parts of Ob need to do this kind of locking. ([[Alex Ionescu]])<br />
* Fix some NDK bugs ([[Alex Ionescu]])<br />
* Rewrote the Object Directory implementation to follow the NT Structures in the NDK. This got rid of the last remaining OBJECT_HEADER difference and switched over to OBJECT_DIRECTORY. ([[Alex Ionescu]])<br />
* Wipe out PROS_OBJECT_HEADER and use OBJECT_HEADER since we are now compatible. ([[Alex Ionescu]])<br />
* Cleanup profiling and debugging code, add function comment headers and comment the functions in obdir.c ([[Alex Ionescu]])<br />
* Remove directory object parsing. Directory objects don't have parse routines. Instead, inline the lookup in ObFindObject (this hasn't been optimized yet, a lot of the code is now setting a = b, c = a, c = b. ([[Alex Ionescu]])<br />
* Get rid of OB_ROS_PARSE_METHOD and use OB_PARSE_METHOD instead. Hacked the current parse methods to keep using a PWSTR, however they should be modified to use the UNICODE_STRING instead. ([[Alex Ionescu]])<br />
* Fix ObReferenceObjectByName and ObOpenObjectByName not to ignore the AccessState and ParseContext parameters. ([[Alex Ionescu]])<br />
* Change ObFindObject's prototype to be able to accommodate these two parameters so that they can be sent to the parse routine. ([[Alex Ionescu]])<br />
* Rewrite Desktop/WindowsStation parsing to follow the NT Object Model, with some minor hacks to respect ROS's current parsing semantics. ([[Alex Ionescu]])<br />
* Thanks to this, the long-lasting ExpDesktopCreate hack is gone, and so is OB_ROS_FIND_METHOD and OB_ROS_CREATE_METHOD in win32k. Next patch can fully remove WIN32_CALLOUT_DATA and use the NT type instead. ([[Alex Ionescu]])<br />
* Convert all Win32k Object callback functions to the correct NT prototypes. ([[Alex Ionescu]])<br />
* Get rid of ROS-internal WIN32_CALLOUT_DATA and use the real WIN32_CALLOUTS_FPNS type. ([[Alex Ionescu]])<br />
* Get rid of the callout.h hack. ([[Alex Ionescu]])<br />
* Get rid of the intriguing idea that exported/public APIs should have prototypes with inversed parameters (fix ObOpenObjectByName and all its callers). ([[Alex Ionescu]])<br />
* Isolate ObFindObject into CmFindObject for the registry routines. Because of their well-known abuse of Ob, it's better to give them their internal routine so that when/if Ob ever gets fixed to parse properly, it won't force a re-write of Cm's object routines. ([[Alex Ionescu]])<br />
* Add SecurityQoS and PreviousMode parameters to ObFindObject, so that these can be sent to the parse routine. Also don't send OBJECT_CREATE_INFORMATION to it, but each needed member separately. This avoids having to create a "Fake" structure in some calls which don't actually use the captured information. ([[Alex Ionescu]])<br />
* Also remove RemainingPath and stop exposing it to public APIs. Move all ObInsertObject/ObOpen,ReferenceByName hacks to ObFindObject, and add a small one there. Basically trade 4 hacks for 1. ([[Alex Ionescu]])<br />
* Re-implement delayed object deletion by using an optimized Object Reaper based on OBJECT_HEADER->NextToFree. Thanks to Thomas for the algorithm. ([[Alex Ionescu]])<br />
* Refactor object deletion into two operations: Removal and de-allocation (this is needed for failure during allocation, which we don't do yet). ([[Alex Ionescu]])<br />
* After freeing an object header structure, also clear the pointer so we don't attempt it again. ([[Alex Ionescu]])<br />
* Clear the handle database if there is one ([[Alex Ionescu]])<br />
* Make sure the create info flag is set before deleting captured attributes. ([[Alex Ionescu]])<br />
* Use the allocation pool tag when de-allocating. ([[Alex Ionescu]])<br />
* Use OBJECT_TYPE accounting for tracking the numbef of objects. ([[Alex Ionescu]])<br />
* Remove the object from it's typelist if it has creator information. ([[Alex Ionescu]])<br />
* Call the security procedure to delete the security descriptor. ([[Alex Ionescu]])<br />
* Set the CreatorUniqueProcess ([[Alex Ionescu]])<br />
* Do a privilege check of OB_FLAG_PERMANENT is being used, and de-allocate the object if this failed. ([[Alex Ionescu]])<br />
* Send the PreviousMode to ObpAllocateObject so that it can honor it and set the OB_FLAG_KERNEL_MODE flag. ([[Alex Ionescu]])<br />
* Use OBJECT_TYPE accounting to increase TotalNumberOfObjects. ([[Alex Ionescu]])<br />
* Fail ObCreateObject in low-memory situations instead of ignoring it. ([[Alex Ionescu]])<br />
* Respect OBJECT_TYPE.TypeInfo.InvalidAttributes if an attempt to create an object with invalid attributes is detected. ([[Alex Ionescu]])<br />
* Respect PagedPoolCharge and NonPagedPoolCharge parameters and save them in the OBJECT_CREATE_INFORMATION structure. ([[Alex Ionescu]])<br />
* Implement Per-Processor Lookaside List based allocation and de-allocation of the Object Create Information (object attributes capture) and of the object name. I counted over 4000 allocations for only 30 seconds of runtime, so this change greatly reduces pool fragmentation and increases speed. (Implementation is similar to the IRP lookaside list implementation, but inlined for speed). ([[Alex Ionescu]])<br />
* Fix some cases where we weren't freeing captured information properly. This patch should also decrease memory leaks/usage. ([[Alex Ionescu]])<br />
* Fix ExChangeHandle not to send NULL but the actual context to the callback function (fix by Thomas Weidenmueller <w3seek@reactos.org>) ([[Alex Ionescu]])<br />
* Re-implement NtSetInformationObject based on ExChangeHandle and using ObpSetHandleAttributes as a callback. ([[Alex Ionescu]])<br />
* Re-implement NtQueryObject's ObjectHandleInformation case to simply return the information that's already in HandleAttributes; there is no point in querying for it all over again. ([[Alex Ionescu]])<br />
* Fix NtSetInformationObject not to allow a user-mode call to modify kernel-mode handle attributes. Add FIXME for Inheritance permissions check. ([[Alex Ionescu]])<br />
* Fix NtQueryObject to properly return OBJ_PERMANENT and OBJ_EXCLUSIVE; these flags are not stored in Handle Attributes. ([[Alex Ionescu]])<br />
* Fix NtQueryObject not to attempt referencing the handle if the caller specified AllTypesInformation, because then a handle is not needed. ([[Alex Ionescu]])<br />
* Simplify ObGetObjectPointerCode and ObfReferenceObject. ([[Alex Ionescu]])<br />
* Fix ObReferenceObjectByPointer to actually work like documented instead of doing random incorrect checks. Also add special case for Symbolic Link objects as documented by Caz Yokoyama at Microsoft. ([[Alex Ionescu]])<br />
* ObReferenceObjectByHandle: Remove MAXIMUM_ALLOWED<->GENERIC_ALL conversion, I could find no mention of this in the docs. ([[Alex Ionescu]])<br />
* ObReferenceObjectByHandle: Remove GENERIC_ACCESS <-> RtlMapGenericMask conversion, I could find no mention of this in the docs, and this mapping is only required when creating handles, not when referencing pointers. ([[Alex Ionescu]])<br />
* ObReferenceObjectByHandle: Do not attach/detach from the system process, this isn't required since we're merely getting a kernel pointer from the handle netry. ([[Alex Ionescu]])<br />
* ObReferenceObjectByHandle: Directly increase the pointer count instead of calling ObReferenceObject, since we already have the object header in a variable. ([[Alex Ionescu]])<br />
* ObReferenceObjectByHandle: Cache ObpKernelHandleTable/Process->ObjectTable and use those directly instead of always de-referencing the process. ([[Alex Ionescu]])<br />
* Rename ObpCreateTypeObject to ObCreateObjectType and fix definition. The latter is actually exported in NT, and there's no reason not to export it while having our own internally renamed version. ([[Alex Ionescu]])<br />
* Added stub exports for ObCloseHandle, ObReferenceSecurityDesciptor, ObSetHandleAttributes, ObSetSecurityObjectByPointer so that someday someone can know what needs to be implemented. ([[Alex Ionescu]])<br />
* Removed ObGetObjectPointerCount. It is not exported in newer OSes and was always undocumented. ([[Alex Ionescu]])<br />
* Move ObQueryObjecctAuditingByHandle to security.c and optimized it not to attach to the system process, as well as to cache the handle table instead of dereferencing the owner process all the time. ([[Alex Ionescu]])<br />
* Fix bug in IoCreateFile which my (correct) ObReferenceObjectByHandle bugfix patch uncovered. Bootcd/installation works again. ([[Alex Ionescu]])<br />
* Make sure callers of NtMakeTemporaryObject have DELETE privileges, otherwise they could end up illegaly killing objects (in certain situations) ([[Alex Ionescu]])<br />
* Make sure callers of NtMakePermanentObject have SeCreatePermanentPrivilege. ([[Alex Ionescu]])<br />
* Implement ObpDeleteNameCheck as described in Gl00my's Ob Documentation (using such documentation falls under US Reverse Engineering Law * Clean rooming). ([[Alex Ionescu]])<br />
* Remove duplicated code in ObpDecrementHandleCount and ObpSetPermanentObject and have them use ObpDeleteNameCheck instead. ([[Alex Ionescu]])<br />
* Name-check is now properly done. ([[Alex Ionescu]])<br />
* The keep-alive reference is now deleted when going from permanent->temporary object. ([[Alex Ionescu]])<br />
* The parent directory is now dereferenced and cleared when deleting the object. ([[Alex Ionescu]])<br />
* The security procedure is now called to delete the SD, and the name buffer is freed. ([[Alex Ionescu]])<br />
* Remove ObGetObjectHandleCount, it's not a public function. ([[Alex Ionescu]])<br />
* Modified ObpDecrementHandleCount to accept Process and GrantedAccess paraemters since the definition for the Close Procedure Callback requires them (and we were currently sending NULL). Also send 0 for process handle count, since we don't yet parse/support per-process handle databases. ([[Alex Ionescu]])<br />
* Minor optimization: All objects have an object type, don't actually check if the object has one when decrementing a handle. ([[Alex Ionescu]])<br />
* Minor accounting fix: Decrement the total number of handles for the object type whose handle count is being decreased. ([[Alex Ionescu]])<br />
* Call the OkayToClose Procedure, if one is present, to allow the object owner a chance to disallow closing this handle. I believe this is required for properly protecting Winsta/Desktop handles (instead of using the regular protection mode, since that one can be bypassed). ([[Alex Ionescu]])<br />
* Make ObpCreateHandleTable return NTSTATUS instead of VOID, so that it can return STATUS_INSUFFIENT_RESOURCES if the handle table couldn't be allocated. ([[Alex Ionescu]])<br />
* Clone ObpCreateHandle to CmpCreateHandle. I am about to fix its implementation and since Cm* currently abuses Ob I feel it safer to give it its own internal function. ([[Alex Ionescu]])<br />
* Make ObpCreateHandle internal to Ob as it should be. Change NtCreateProcessTokenEx to use ObOpenObjectByPointer, it has no business manually trying to create a handle. Same goes for ExpLoadInitialProcess. ([[Alex Ionescu]])<br />
* Add some trace macros to monitor handle/pointer counts for fixing regressions/bugs later. ([[Alex Ionescu]])<br />
* Change ObpCreateHandle to use an ACCESS_STATE structure instead of DesiredAccess. This is to help moving to an updated model where creating and incrementing a handle are 2 operations, so that code can be refactored (similar to how we now have Delete/Decrement as 2 operations). ([[Alex Ionescu]])<br />
* Fix functions that were not creating an ACCESS_STATE Structure to create one locally now, or use the one passed as a parameter, if available. ([[Alex Ionescu]])<br />
* Change ObpCreateHandle to the one documented and explained in the Gl00my documentation. It also fits the re-factored split create/increment model better, supports open reasons, and allows (to do) type-checking and extra object referencing from within one routine. ([[Alex Ionescu]])<br />
* Add code to ObOpenObjectByName to detect the OpenReason. Experimental, since I'm not sure when to clear the flag. ([[Alex Ionescu]])<br />
* ObpCreateHandle: Honour ObjectType passed to the function and fail if it doesn't match. ([[Alex Ionescu]])<br />
* ObpCreateHandle: Use table-based logic instead of process-based logic for Kernel vs User-mode handles (same change that's been done all over the place, since it requires only one dereference of the process object). ([[Alex Ionescu]])<br />
* ObpCreateHandle: Do the GENERIC/MAXIMUM_ALLOWED logic directly inside the ACCESS_STATE structure. ([[Alex Ionescu]])<br />
* ObpCreateHandle: Increase the object type's number of handles as well. ([[Alex Ionescu]])<br />
* ObpCreateHandle: Set the handle table entry's ObAttributes correctly; the old code seems to have been messing that up. ([[Alex Ionescu]])<br />
* ObpCreateHandle: Honour the AdditionalReferences parameter and do referencing bias if requested. ([[Alex Ionescu]])<br />
* ObpCreateHandle: Honour the ReturnedObject parameter to return the object pointer back to the caller. ([[Alex Ionescu]])<br />
* ObpCreateHandle: If we failed because a handle couldn't be allocated, use the distinguied STATUS_INSUFFICIENT_RESOURCES error code instead of the generic STATUS_UNSCUCESFFUL, and backout all the changes we made by calling ObpDecrementHandleCount. ([[Alex Ionescu]])<br />
* Split ObpCreateHandle into two distinct operations: Incrementing and Creating (like we have Delete/Decrement). No code additions, just splitting. ([[Alex Ionescu]])<br />
* Because of the split, we can now directly only do an Increment when duplicating the handle, since we don't need to create a brand new one. Also, when inheriting, we can now properly do an increment as well, instead of simply manually increasing the handle count (because for each inherited handle, access checks and openprocedure should've still been called). ([[Alex Ionescu]])<br />
* Use PagedPool instead of NonPagedPool memory, and also tag the allocation for debugging. ([[Alex Ionescu]])<br />
* Send needed data to the security procedure instead of NULL/0, including the Generic Mapping, and the actual Security Decriptor. ([[Alex Ionescu]])<br />
* Only un-assign the descriptor in case of failure, not all the time (the whole point of the API is to assign it!) ([[Alex Ionescu]])<br />
* Tell the caller that memory was NOT allocated if we failed to get the security descriptor. ([[Alex Ionescu]])<br />
* ObInsertObject: Create the ACCESS_STATE structure much earlier. ([[Alex Ionescu]])<br />
* ObInsertObject: Actually send the access state and parse context to ObFindObject, when called from ObInsertObject (this should fix some hidden regressions, since they finally get an access state with access masks now). ([[Alex Ionescu]])<br />
* ObInsertObject: Remove some deprecated hacks. ([[Alex Ionescu]])<br />
* ObInsertObject: If inserting the handle failed, cleanup the name and remove it from the directory entry. ([[Alex Ionescu]])<br />
* ObInsertObject: Fix a memory leak because we weren't deleting the access state. ([[Alex Ionescu]])<br />
* Fix ObGetObjectSecurity to use the object type's pool type instead of assuming PagedPool. ([[Alex Ionescu]])<br />
* Re-wrote the way ObInsertObject handles security as described in Chapters 6 and 9 of Gl00my (ie: made it use ObGetObjectSecurity and ObAssignObjectSecurity; ironically, these functions already existed/are exported and could've been used since the start instead of duplicating code). ([[Alex Ionescu]])<br />
* Fix ObpReferenceCachedSecurityDescriptor only to touch the cached entry if it actually gets a non-NULL descriptor. Also improved it to return the referenced SD, instead of requiring the caller to do it manually. ([[Alex Ionescu]])<br />
* ObFindObject should return the actual object being inserted, in the insert case (otherwise it always returns the root-directory instead.) ([[Alex Ionescu]])<br />
* Add check for optimized case for objects with no name and no security, but not implemented (ObpIncrementUnnamedHandleCount in Gl00my docs), since I need a better translation then babelfish's. ([[Alex Ionescu]])<br />
* Fix ObInsertObject to save the Security Descriptor in the Access State structure. Gl00my mentions this isn't absorbed by SeCreateAccessCheck and I just noticed that too. ([[Alex Ionescu]])<br />
* We only need to perform security checks for a new object, in ObInsertObject, not if the object already existed. ([[Alex Ionescu]])<br />
* Added proper backout+failure code in ObInsertObject if lookup failed, and also look out for mismatch/exists/collision cases (implemented using simple logic). ([[Alex Ionescu]])<br />
* Rename ObpDeleteHandle to ObpCloseHandleTableEntry and change semantics so that it deals directly with the entry and table. This re-factoring optimizes the case where we already have the entry and don't want to use the handle to get the kernel table and then attach/detach/enter/exit critcal regions (such as when sweeping). ([[Alex Ionescu]])<br />
* Implement ObCloseHandle, a new XP Export ([[Alex Ionescu]])<br />
* Take old NtClose code and write it in ObpCloseHandle, which is the master function that Ntclose/ObCloseHandle share. ([[Alex Ionescu]])<br />
* Complete patch requires ExSweepHandleTable to be modified to return the Handle instead of the entry, so that sweeping can be fixed to properly destroy handles and call their OkayToClose, instead of just decrementing a count. ([[Alex Ionescu]])<br />
* Add Object Header Quota structure/define ([[Alex Ionescu]])<br />
* Give Files/Devices a parse routine and currently stubplement it for debugging purposes and trying to figure out a way to kill the IopCreateFile hack. ([[Alex Ionescu]])<br />
* Implement ObpChargeQuotaForObject. Using a memory breakpoint in WinDBG I've finally found where the OB_FLAG_CREATE_INFO flag gets masked out. Also attempted a very naive quota charging implementation, but it's a guess and probably wrong (but at least it does...something.) ([[Alex Ionescu]])<br />
* Remove the heart (but not the brain) of the IopCreateFile hack. A much 'nicer' hack now detects if a filename can't be found, and instead of inserting it into the object directory (wrong!), calling IopCreateFile (wrong!), then having it fail, only to then remove the newly inserted object entry (wrong wrong wrong!), IopCreateFile is now *only* called for real files, otherwise Ob detects the invalid name and fails nicely and quickly. ([[Alex Ionescu]])<br />
* Add the OPEN_PACKET structure to internal headers. Used for the I/O Parse Routine. ([[Alex Ionescu]])<br />
* Gut down IopCreateFile to the strict minimum so that only the critical parts remain. ([[Alex Ionescu]])<br />
* NT Compatiblity fix in ObFindObject: stop parsing if remaining path is null, this means that the parse routine is done parsing and that -this* is the final object. ([[Alex Ionescu]])<br />
* Fix the CmpObjectDelete bugcheck by hacking away some code reponsible for it. The bugcheck is probably the result of the current ref-count bug. ([[Alex Ionescu]])<br />
* Remove some more code in IoCreateFile/IopCreateFile to help with deprecating it later. ([[Alex Ionescu]])<br />
* Update sweep callback to send the handle number. Patch by Thomas Weidenmueller (w3seek@reactos.org) ([[Alex Ionescu]])<br />
* Export ObCloseHandle since it's implemented now ([[Alex Ionescu]])<br />
* Implement ObpCreateUnnamedHandle and ObpIncrementUnnamedHandleCount as optimizations for ObInsertObject with unnamed objects. ([[Alex Ionescu]])<br />
* Fix definitions of OB_QUERYNAME_METHOD and OB_OKAYTOCLOSE_METHOD. Add fixme for OB_SECURITY_METHOD, will change it later. ([[Alex Ionescu]])<br />
* Simplified NtDuplicateObject to a simple stub around ObDuplicateObject, there is no need to have lengthy hacks for NtCurrentProcess/NtCurrentThread(). ([[Alex Ionescu]])<br />
* Cleanup ObDuplicateObject to use normal Ob routines instead of grovelling through handle table structures and manually touching the handle count: It now calls ObpIncrementHandleCount and all the underlying operations are done on the duplicated handle. Also access state creation is done if the duplicated handle has different desired access. ([[Alex Ionescu]])<br />
* Get rid of a dozen of debug prints that have been straying along for a long time (some for years), most of which I must shamefully admit I am responsible for. ([[Alex Ionescu]])<br />
* Fix a critical bug subsystem bug in smss and don't hang the system 15 seconds on boot-up. ([[Alex Ionescu]])<br />
* Rebase some problematic modules (and fix wshtcpip's rbuild file) to avoid relocations on bootup and some process startup. ([[Alex Ionescu]])<br />
* Enable lsass startup in winlogon and the registry. ([[Alex Ionescu]])<br />
* Only show debug log header when actually debugging to a file. ([[Alex Ionescu]])<br />
* Bring out the champagne... one of my first-ever and most ancient ReactOS TODOs: the IopCreateFile hack has been totally removed and we now have a file/device parse routine. It's still nothing like NT's but it's not a hack anymore, and actually works like it should. ([[Alex Ionescu]])<br />
* Pretty much the last Ob implementation/optimization patch (Except for a minor fix by Thomas to fix handle sweeping), re-implemented the ObFindObject routine by using some code that I had written almost 2 years ago with help from Thomas and Filip, plus some fixes discovered today while testing. ([[Alex Ionescu]])<br />
* Fixed symbolic link and desktop/winsta parse procedures to become NT-compatible now that ObFindObject is as well. Also fixed file/device parse routine for these changes. ([[Alex Ionescu]])<br />
* ObFindObject now supports STATUS_REPARSE_OBJECT, and has an optimized path for parsing when a root directory is given, as well as is entirely unicode_string-based. ([[Alex Ionescu]])<br />
* Cleaned up ob.h and added ob_x.h for the inlined functions. ([[Alex Ionescu]])<br />
* Implemented new Ob tracing system. ([[Alex Ionescu]])<br />
* Enable ROS_LEAN_AND_MEAN if you want 50% smaller binaries and a 20MB reduction in memory usage. ([[Alex Ionescu]]) (Note: ROS_LEAN_AND_MEAN may not work due to hidden bugs in debug symbols)<br />
* Create a new module type: exportdriver for drivers which also export files. Not supremely useful right now, but it helps us decrease compilation time of normal drivers by not running useless commands on them. Later we'll also strip out their export table. We can also make exportdrivers automatically read their .def file instead of specfiygone one. ([[Alex Ionescu]])<br />
* Fix some referencing/bugs in Ob functions that I wrote which were known fixmes. ([[Alex Ionescu]])<br />
* Remove every instance of ObDereferenceObject after an ObInsertObject that I could find. This temporarily will make the object leaks even worse, but it's better to increase leaks and then fix the ref bug, then to decrease references while missing spots that forgot to reference them (you'd end up with hard to debug randomly dying objects). ([[Alex Ionescu]])<br />
* Handle mount failure (such as when a CDROM isn't actually inside the drive) instead of assuming success and setting a NULL device object. Fixes regression seen by Arty/James when winefiling, dir d:-ing or hardware device wizarding. ([[Alex Ionescu]])<br />
* Check for valid access in NtSignalAndWaitForSingleObject and don't check if ResultLength isn't NULL in NtQueryObject, because it's not optional. ([[Alex Ionescu]])<br />
* ObpCreateUnnamedHandle/ObpCreateHandle => Reference the object before calling ExCreateHandle. ([[Alex Ionescu]])<br />
* Fix two critical bugs in ObInsertObject: We were creating a handle for the wrong object (in ObInsertObject) and we were not passing the ReferencedObject parameter to ObpCreateHandle, so that object was never being returned properly to the caller. ([[Alex Ionescu]])<br />
* ObfDereferenceObject shouldn't check for the OB_FLAG_PERMANENT flag, or else it would never be possible to kill permanent objects while in kernel mode (permanent objects only apply to user-mode handles). ([[Alex Ionescu]])<br />
* Fix another critical bug in ObInsertObject: don't overwrite the lookup status with the handle creation status. If the lookup returned something like OBJECT_NAME_EXISTS (which is a success + warning), we don't want to overwrite it with ObpCreateHandle's STATUS_SUCCESS. This should fix a large number of regressions (and also fixes many WINE ntdll "om" tests). ([[Alex Ionescu]])<br />
* We also now correctly dereference the object in ObInsertObject, which should reduce one source of leaks (But there is still one). OTOH, this makes the Cm code crash at shutdown (I'll fix this ASAP, this fix is worth having atm.) ([[Alex Ionescu]])<br />
* Catch illegal call to Ob functions when ObjectAttributes == NULL and return distinguished status code for this situation (STATUS_INVALID_PARAMETER), instead of failing due to access violation. ([[Alex Ionescu]])<br />
* Add some hacks to Cm to allow creating registry keys that finish with a backslash (this works under NT). ([[Alex Ionescu]])<br />
* Also add a REALLY nasty hack that forces OBJ_CASE_INSENSITIVE on all Registry APIs... this is needed because we seem to completely mess up case sensitivity otherwise and any user-mode caller that doesn't specify that flag will fail. ([[Alex Ionescu]])<br />
* Implement ObCheckObjectAccess and call it to perform access verification checks. ([[Alex Ionescu]])<br />
* Properly create devices, processes and controllers with an extra reference count, so that when the code closes their handle they don't die. ([[Alex Ionescu]])<br />
* Check for invalid uses of ObfDereferenceObject for our current debugging purposes. ([[Alex Ionescu]])<br />
* Add SEH to NtQueryObject. ([[Alex Ionescu]])<br />
* ObCreateObjectType: Fix a check in ObpFreeObject which was causing a bugcheck if the object had a handle database (fixes another kmtest failure/crash). ([[Alex Ionescu]])<br />
* ObCreateObjectType: Verify parameters passed to ObCreateObjectType based on behaviour seen on Windows 2003 (I might've missed some, these are the ones I tested for). This fixes 2 of the kmtest failures. ([[Alex Ionescu]])<br />
* ObCreateObjectType: Also make sure the object type's name doesn't have a slash in the name. ([[Alex Ionescu]])<br />
* ObCreateObjectType: Also make sure we don't allow creating two object types with the same name. ([[Alex Ionescu]])<br />
* ObCreateObjectType: Also use our own local copy of the object name and copy it. ([[Alex Ionescu]])<br />
* IopRemoveThreadIrp: Get the DeviceObject and I/O Stack *before* going back to dispatch, otherwise race conditions will happen. ([[Alex Ionescu]])<br />
* IopRemoveThreadIrp: Don't complete and IRP if it's already been through two stacks. ([[Alex Ionescu]])<br />
* IopRemoveThreadIrp: Remove the IRP from the thread's IRP list before re-initializing the list, or else the IRP was lost. ([[Alex Ionescu]])<br />
* IopRemoveThreadIrp: Make sure we have an error log entry before writing to it. ([[Alex Ionescu]])<br />
* IopCompleteRequest: Don't read pointers from the file object or IRP before they are actually used, because in some parts of the code, these pointers could change before we actually use them. ([[Alex Ionescu]])<br />
* IopCompleteRequest: Get rid of the #if 1/#if 0 nonsense hbirr had added. ([[Alex Ionescu]])<br />
* IopCompleteRequest: Properly check for success/warning/failure cases (thanks to Filip for checking this out with me last year) ([[Alex Ionescu]])<br />
* IopCompleteRequest: Handle scenarios when the IRP is marked IRP_CREATE_OPERATION ([[Alex Ionescu]])<br />
* IopCompleteRequest: Bugcheck if IofCompleteRequest is called twice on the same IRP ([[Alex Ionescu]])<br />
* IopCompleteRequest: Copy the master IRP's thread to the associated IRP ([[Alex Ionescu]])<br />
* IopCompleteRequest: Free the Auxiliary Buffer if there is one. ([[Alex Ionescu]])<br />
* Add more name/prototype decoration and API tracing. ([[Alex Ionescu]])<br />
* Don't handle IRP_MJ_POWER in IoBuildAsyncronousFsdRequest. ([[Alex Ionescu]])<br />
* Use IoAllocateMdl instead of being a cowboy and using MmCreateMdl. ([[Alex Ionescu]])<br />
* Handle failure/out-of-memory cases in IoBuildAsyncronousFsdRequest ([[Alex Ionescu]])<br />
* Free the input buffer on failure in IoBuildDeviceIoControlRequest ([[Alex Ionescu]])<br />
* Handle failure in IoBuildSyncronousFsdREquest. ([[Alex Ionescu]])<br />
* Bugcheck if cancelling and IRP that's already been completed. ([[Alex Ionescu]])<br />
* Bugcheck if attempting to call a driver with an IRP that's already past its maximum stack size. ([[Alex Ionescu]])<br />
* Make sure that when we free an IRP, it's not associated to a thread anymore, nor having any drivers that think it's valid. ([[Alex Ionescu]])<br />
* Fix IRP/Completion packet lookaside allocation. We weren't setting a zone size, and I/O Completion packets were also using the wrong size. ([[Alex Ionescu]])<br />
* Rewrite I/O MDl support to use lookaside lists for allocations below 23 pages (same as on NT). This is is an incredible performance optimization because MDLs are often allocated and de-allocated during I/O operations, and using the lookaside list decreases pool fragmentation and slowdown. ([[Alex Ionescu]])<br />
* Rewrite IoBuildPartialMdl. It did not work like documented in the DDK and also had a bug documented by Microsoft as being in XP. ([[Alex Ionescu]])<br />
* Refactor Io*Event APIs to call an internal worker function instead of duplicating the same code twice. ([[Alex Ionescu]])<br />
* Optimize Io*Work APIs and initialize the event on allocation, not on queue!! ([[Alex Ionescu]])<br />
* Use only one SEH block in NtRemoveIoCompletion ([[Alex Ionescu]])<br />
* Get the completion status from the IRP, not from the Mini-Packet, if the completion came from an IRP and not a Mini-Packet. ([[Alex Ionescu]])<br />
* Io*SymbolicLink should use OBJ_CASE_INSENSITIVE ([[Alex Ionescu]])<br />
* Use DELETE instead of SYMBOLIC_LINK_ALL_ACCESS when deleting. ([[Alex Ionescu]])<br />
* Clear the IO_TIMER structure when creating it. ([[Alex Ionescu]])<br />
* Add basic support/detection for debug I/O remove blocks (we bugcheck if we identify one though). ([[Alex Ionescu]])<br />
* Simplify IoReleaseRemoveLockAndWaitEx ([[Alex Ionescu]])<br />
* Remove locks are SYNCH events, not Notification events! ([[Alex Ionescu]])<br />
* Make sure IoConnectInterrupt returns NULL to the caller on failure. ([[Alex Ionescu]])<br />
* Add some missing IO_ERROR definitions to the DDK and add some tags ([[Alex Ionescu]])<br />
* Fix IoSetThreadHardErrorMode... it was reading the TEB instead of the PETHREAD. ([[Alex Ionescu]])<br />
* Optimize Error Logging: Use a static work item instead of allocating one each time, and don't use a spinlock for the buffer count, when we can use interlocked functions instead. ([[Alex Ionescu]])<br />
* Log Entries can have Device AND/OR Driver Objects, not just a single one. They must also be referenced/dereferenced on allocation/free. ([[Alex Ionescu]])<br />
* Rewrite IopLogWorker to properly deal with Device/Driver objects and querying their names, as well as with additional strings that the caller might be sending. ([[Alex Ionescu]])<br />
* IopGetDevicePointer: Close the handle if we were able to acquire it. ([[Alex Ionescu]])<br />
* IoAttachDevice/IoAttachDeviceByPointer: Fail with STATUS_NO_SUCH_DEVICE if we couldn't attach. ([[Alex Ionescu]])<br />
* IoAttachDEviceTodEviceStackSafe: VPBs don't get inherited. ([[Alex Ionescu]])<br />
* IoCreateDevice: Only set OBJ_PERMAMENT if the caller requested it. ([[Alex Ionescu]])<br />
* IoCreateDevice: Return a NULL Device object if we failed to create it. ([[Alex Ionescu]])<br />
* IoCreateDevice: Set alignment requirement to 0, x86 doesn't need it. ([[Alex Ionescu]])<br />
* Add IoGetDevObjExtension for getting the PEXTENDED_DEVOBJ_EXTENSION from a device object instead of always doing a huge typecast. ([[Alex Ionescu]])<br />
* Implement device unloading through IopUnloadDevice and device referencing through IopReferenceDeviceObject and IopDereferenceDeviceObject, and make IoDeleteDevice and IoDetachDevice unload the device on 0 reference count. Doesn't fully work yet. ([[Alex Ionescu]])<br />
* Simplify IoGetAttachedDEvice/IoGetAttachedDeviceReference not to use an extra stack variable. ([[Alex Ionescu]])<br />
* Fix some bugs in IoGetRelatedDeviceObject: We should make sure that FO_DIRECT_DEVICE_OPEN isn't set when reading from the VPB's DO, otherwise we return the FO's DO directly. Also check for attachment before trying to get any attached device. ([[Alex Ionescu]])<br />
* Implement IoRegisterLastchanceShutdownNotification based on IoRegisterShutdownNotification ([[Alex Ionescu]])<br />
* Modify IoUnregisterShudownNotification to loop both lists now. ([[Alex Ionescu]])<br />
* Used the lock in IoShutdownREgisteredDevices when looping the list, and changed it to send IRP_MJ_SHUTDOWN to the attached DO. Also fixed a memory leak where the shutdown entry wasn't being freed, and optimized the function only to initialize the event once (And simply clear it each time). ([[Alex Ionescu]]) ([[Alex Ionescu]])<br />
* Clear the current IRP before parsing the Device Queues ([[Alex Ionescu]])<br />
* Respect Cancelable parameter in IoStartNextPacket(ByKey) instead of ignoring it (acquire the cancel lock when it's requested) ([[Alex Ionescu]])<br />
* Raise IRQL to DISPATCH_LEVEL in IoStartPacket instead of expecting the caller to do it and crashing. Also only use Cancel Lock if a Cancel Function was specified. ([[Alex Ionescu]])<br />
* Actually handle the case where the IRP Was cancelled right after insert and the Cancel Routine has to be called. ([[Alex Ionescu]])<br />
* Add definitions for additional DOE flags to NDK. ([[Alex Ionescu]])<br />
* Implement IoSetStartIoAttributes ([[Alex Ionescu]])<br />
* Obey StartIo Flags set by IoSetStartIoAttributes and change Packet functions to Windows XP/2003 semantics by supporting non-cancelable packets and deferred Start I/O calling. ([[Alex Ionescu]])<br />
* Implement some functions to handle VPB Referencing/Dereferencing. ([[Alex Ionescu]])<br />
* IoVerifyVolume: Send the IRP to the base FSD, in case the current FSD is an attachee ([[Alex Ionescu]])<br />
* IoVerifyVolume: Set correct flags in the IRP to notify that this is a mount operation using PAGING I/O semantics. ([[Alex Ionescu]])<br />
* IoVerifyVolume: Don't ignore AllowRawMount parameter. ([[Alex Ionescu]])<br />
* IoVerifyVolume: We want to mount the File System on *FAILURE*, not on SUCCESS! ([[Alex Ionescu]])<br />
* IoVerifyVolume: Add reference/dereferencing to the VPB. ([[Alex Ionescu]])<br />
* IoVerifyVolume: Get rid of the stupid LIST_FOR_EACH macros in FS Notifcation APIs. ([[Alex Ionescu]])<br />
* Each new change request should be queued at the end of the list, not at the head. ([[Alex Ionescu]])<br />
* Also, reference the device object for each registration, since one more object is holding a pointer to it, likewise, dereference the object on deregistration. ([[Alex Ionescu]])<br />
* IopLoadFileSystem should use the base FSD in case the device object is an attachee. Also, use IoBuildDEviceIoControlRequest to minimize the IRP setup to only a couple of lines. ([[Alex Ionescu]])<br />
* Simplify/modularize FS registration by using distinct lists for each type of FS (Tape/Disk/Network/Cdrom). ([[Alex Ionescu]])<br />
* Optimize by using directly the device queue instead of allocating a structure for each FS registered. ([[Alex Ionescu]])<br />
* Hack IopMountVolume to manage this new model. Improved version coming in next patch to deal with some bugs. ([[Alex Ionescu]])<br />
* Respect DeviceIsLocked flag and Alertable in IopMountVolume ([[Alex Ionescu]])<br />
* Don't mount if the VPB is alread ymoutned or being removed ([[Alex Ionescu]])<br />
* Bugcheck the system if we failed to mount the boot partition. ([[Alex Ionescu]])<br />
* Mount the FS inline to avoid sending 6 parameters to a function only called once. ([[Alex Ionescu]])<br />
* Set the right IRP flags for a mount operation. ([[Alex Ionescu]])<br />
* Don't ignore AllowRawMount flag. ([[Alex Ionescu]])<br />
* Don't waste time passing or clearing unused flags/data on the IRP/Io Stack. ([[Alex Ionescu]])<br />
* If the device to be mounted is an attachee, find the base device object ([[Alex Ionescu]])<br />
* Reference the device object being mounted. ([[Alex Ionescu]])<br />
* If the file system being mounted is an atachee, find its base device object too, and increase the IRP Stack for each attached FSD. ([[Alex Ionescu]])<br />
* Fix IRP parameters with this new information. ([[Alex Ionescu]])<br />
* Improve list looping to remove gotos. ([[Alex Ionescu]])<br />
* Dereference the device object in case of failure. ([[Alex Ionescu]])<br />
* Add some optimizations to quickly skip invalid raw mounting. ([[Alex Ionescu]])<br />
* Add support for VPB_RAW_MOUNT. ([[Alex Ionescu]])<br />
* Allow raw mount if this is the only device on the list. ([[Alex Ionescu]])<br />
* Make the success case go through shared exit, otherwise the device wasn't getting unlocked previously. ([[Alex Ionescu]])<br />
* Implement IopInitailizeVpbForMount for the purpose of setting up the VPB for a newly mounted DO. It properly references the VPB and sets up its stack size and flags, adding support for VPB_RAW_MOUNT. Also sets the VPB pointer in the DevObjExtension. ([[Alex Ionescu]])<br />
* Fix a bug which was causing us to incorrectly unlock the device if it was already locked by the caller instead of by IopMountVolume. ([[Alex Ionescu]])<br />
* When loading the file system, make sure to unlock the device object if we had locked it in IopMountVolume, as well as to re-lock it afterwards. Also handle a potential race condition due to this unloacking, in which the VPB might've become mounted behind our back, and simply return success if this happened. ([[Alex Ionescu]])<br />
* Use IoIsErrorUserInoduced to check if we couldn't mount the device because it was not actually inserted, was unrocognized, write-protected, etc... and completely break out of the mounting procedure if so. ([[Alex Ionescu]])<br />
* Also use FsRtlIsTotalDeviceFailure to check if the error was a fatal device error (like a CRC error) and abandon mounting in this case as well. ([[Alex Ionescu]])<br />
* Small optimization: don't bother to get the File System Listhead we'll parse if we're going to fail because of wrong VPB flags later... get the list only after we're sure we need it. ([[Alex Ionescu]])<br />
* Move IoGetBaseFileSystemDeviceObject to device.c and make it check for FO_DIRECT_DEVICE_OPEN, which it wasn't before (and also code it in a less confusing way like the other IoGetXxxDeviceObject APIs) ([[Alex Ionescu]])<br />
* Mask out the DO_VERIFY_VOLUME flag when mounting a device. ([[Alex Ionescu]])<br />
* Start of heavy work on iofunc.c: ([[Alex Ionescu]])<br />
* Created our new friends: IopCleanupFailedIrp, IopAbortInterruptedIrp, IopPerformSynchronousRequest, IopLockFileObject, IopUnlockFileObject, IopQueueIrpToThread, IopUpdateOperationCount. ([[Alex Ionescu]])<br />
* What does this mean: We actually queue IRPs to their thread! We actually respect I/O transfers being interrupted/alerted! We actually respect I/O operation counts! We actually LOCK FILE OBJECTS instead of randomly using them! We now support Deferred (read: MUCH faster) I/O completion. ([[Alex Ionescu]])<br />
* First function blessed: IopDeviceFsIoControl. ([[Alex Ionescu]])<br />
* Also simplified access rights check and fixedup some formatting. ([[Alex Ionescu]])<br />
* Combine IoQueryVolumeInformation and IoQueryFileInformation ([[Alex Ionescu]])<br />
* Fix them to lock the fileobject for synch operations, use IopCleanupFailedIrp, queue the IRP in the thread's list, support aborting the I/o operation through IopAbortInterruptedIrp, and properly wait for comlpetion. ([[Alex Ionescu]])<br />
* Same changes for IoSertInformation: Lock the FO, queue the IRP, support alerted I/O, etc... ([[Alex Ionescu]])<br />
* Create IopFinalizeAsynchronousIo to deal with Sync APIs working on Async file objects, which need to be waited on differently and have the IOSB copied manually. ([[Alex Ionescu]])<br />
* Update NtFlushBuffersFile to new semantics (ie, usage of the new implemented functions). ([[Alex Ionescu]])<br />
* NtLockFile: Add proper sync operation. ([[Alex Ionescu]])<br />
* NtLockFile: Set the APC Routine/Context in the IRP instead of ignoring them. ([[Alex Ionescu]])<br />
* NtLockFile: Dereference the event on failure. ([[Alex Ionescu]])<br />
* NtLockFile: Set the allocated buffer as AuxiliaryBuffer so the I/O manager fres it. ([[Alex Ionescu]])<br />
* Add proper sync handling to NtUnlockFile. ([[Alex Ionescu]])<br />
* Fix sync usage in NtQueryVolumeInformationFile, set the right IRP flags so that the I/O manager can handle copying the data back and freeing the buffer, and enable deferred completion. ([[Alex Ionescu]])<br />
* Same sort of changes for NtSetVolumeInformationFile. ([[Alex Ionescu]])<br />
* NtReadFile: Allow async i/o access on mailslots, without a byte offset. ([[Alex Ionescu]])<br />
* NtReadFile: Fix sync semantics just like for the other functions until now. ([[Alex Ionescu]])<br />
* NtReadFile: Fix a potential object leak in a failure case. ([[Alex Ionescu]])<br />
* NtReadFile: Don't call IoBuildSyncronousFsdRequest since we want to build the IRP ourselves. ([[Alex Ionescu]])<br />
* NtReadFile: Use deferred I/O as an optimization. ([[Alex Ionescu]])<br />
* NtWriteFile: Allow async i/o access on mailslots, without a byte offset. ([[Alex Ionescu]])<br />
* NtWriteFile: Fix sync semantics just like for the other functions until now. ([[Alex Ionescu]])<br />
* NtWriteFile: Fix a potential object leak in a failure case. ([[Alex Ionescu]])<br />
* NtWriteFile: Don't call IoBuildSyncronousFsdRequest since we want to build the IRP ourselves. ([[Alex Ionescu]])<br />
* NtWriteFile: Use deferred I/O as an optimization. ([[Alex Ionescu]])<br />
* NtQueryDirectoryFile: Setup a buffer/MDL and the correct IRP flags so that that I/O manager can handle allocation, copy, free for us. ([[Alex Ionescu]])<br />
* NtQueryDirectoryFile: Setup the search pattern as an auxiliary buffer so that the I/O Mgr can track that one for us as well. ([[Alex Ionescu]])<br />
* NtQueryDirectoryFile: Update to use the correct sync semantics/routines. ([[Alex Ionescu]])<br />
* NtQueryDirectoryFile: Use deferred I/O completion. ([[Alex Ionescu]])<br />
* Fix NtQueryInformationFile to use correct sync/async semantics and use deferred I/O completion. This routine doesn't use IopSyncronous/Asyncronous helper routines because it can be optimized to handle some Information classes in-line (not currently being done). ([[Alex Ionescu]])<br />
* Fix NtSetInformationFile to use correct sync/async semantics and use deferred I/O completion. This routine doesn't use IopSyncronous/Asyncronous helper routines because it can be optimized to handle some Information classes in-line (not currently being done except for Completion Ports, like the previous code). ([[Alex Ionescu]])<br />
* Add locking in IopDeleteFile, and only check for completion context or name if the file has a DO, otherwise those shouldn't exist. ([[Alex Ionescu]])<br />
* Added support for device objects as well in IopSecurityFile, since the code is similar. Also fixed sync semantics for file objects, and made other little small fixes. ([[Alex Ionescu]])<br />
* Fix and combine the creation of I/O Object Types, it was a complete mess with missing attributes and dangerous bugs (Adapters and Controllers had IopParseDevice as a parse routine and the same pool charge as a deivice object, etc.) ([[Alex Ionescu]])<br />
* Fix IopQueryNameFile to properly validate and calculate lengths at each step of the way and to support incomplete buffers. Previously, dangerous assumptions were made about the buffers and the actual required length was never returned. ([[Alex Ionescu]])<br />
* Finally fix IoCreateStreamFileObject. I had fixed it a long time ago but back then it was causing regressions. It now properly creates a handle for the FO and sets the right flags. ([[Alex Ionescu]])<br />
* The FO's lock is a Synch event, not a notification event! ([[Alex Ionescu]])<br />
* Fix IopcloseFile... I'm not sure it was working right after the Ob changes, so it's possible some devices weren't getting IRP_MJ_CLEANUP... also made it lock the FO and detect malformed FOs (more spam for you on the debug logs!) -* but this is one problem I'm planning on fixing. ([[Alex Ionescu]])<br />
* IoCreateFile: Start with empty object ([[Alex Ionescu]])<br />
* IoCreateFile: Set the type/size in the object header ([[Alex Ionescu]])<br />
* IoCreateFile: Don't rudely ignore the following flags: FILE_WRITE_THROUGH, FILE_SEQUENTIAL_ONLY, FILE_RANDOM_ACCESS, OBJ_CASE_INSENSITIVE; they are not merely decorative. ([[Alex Ionescu]])<br />
* IoCreateFile: Set correct IRP flags for IRP_CREATE_OPERATION so that the I/O manager knows how to deal with the request (also set SYNCH_API flag). ([[Alex Ionescu]])<br />
* IoCreateFile: Deferred mode not yet enabled. ([[Alex Ionescu]])<br />
* IoCreateFile: Simplify the way we set the parameters for pipes/mailslots/files. ([[Alex Ionescu]])<br />
* IoCreateFile: Don't close the handle of an invalid FO. ([[Alex Ionescu]])<br />
* Make IoCreateFile use deferred I/O completion. ([[Alex Ionescu]])<br />
* Simplify IopParseDevice by removing duplicate code. ([[Alex Ionescu]])<br />
* Begin attempt at usage of the OPEN_PACKET for I/O Create operations. Currently we only build it and verify it, and I've fixed up IopCreateFile. ([[Alex Ionescu]])<br />
* Move the code in IoCreateFile inside IopParseDevice where it belongs. Currently only a raw move and hacks to make it not regress anything, but in the future we can now finally start applying some important fixes for proper communication with FSDs and setting a myriad of flags and settings required. Will also allow for some nice optimizations in the future. ([[Alex Ionescu]])<br />
* Allocate a copy of the EA buffer even for kernel-mode requests, also make the call use a tagged buffer. ([[Alex Ionescu]])<br />
* Detect if the FSD is reparsing, which we don't support now (we'll bugcheck for now, so we can quickly detect this later instead of handling it wrong). ([[Alex Ionescu]])<br />
* Use a simpler and more robust way to detect direct device opens and save it in a variable that's read when needed, instead of having multiple large code paths. ([[Alex Ionescu]])<br />
* Implement IopCheckVpbMounted and use it in IopParseDevice as documented in NT File System Internals. ([[Alex Ionescu]])<br />
* Add some missing ref/deref calls for DOs and VPBs. ([[Alex Ionescu]])<br />
* Add some more proper handling of ref/dereferencing in IopParseDevice. ([[Alex Ionescu]])<br />
* Add proper failure case for IRP allocation failure ([[Alex Ionescu]])<br />
* Only initialize the FO's lock for Synch I/O ([[Alex Ionescu]])<br />
* Add some missing comments ([[Alex Ionescu]])<br />
* Fixup some formatting ([[Alex Ionescu]])<br />
* Massively improve File I/O by using deferred I/O completion for MJ_(MAILSLOT/FILE/NAMEDPIPE)CREATE and manually completing the IRP. ([[Alex Ionescu]])<br />
* Uber-optimize IopQueryAttributesFile by using the OPEN_PACKET mechanism to query file attributes, instead of doing lots of slow native calls. ([[Alex Ionescu]])<br />
* Modify IopParseDevice to detect when OPEN_PACKET optimizations are in use (query or deletion (deletion not yet implemented)) and have some codepaths be slightly different and use DUMMY_FILE_OBJECT. ([[Alex Ionescu]])<br />
* Implement QueryOnly case in IopParseDevice to handle attribute queries. ([[Alex Ionescu]])<br />
* Add a missing dereference, and remove an extra DO reference. ([[Alex Ionescu]])<br />
* Remove a ROS hack in IopCloseFile. ([[Alex Ionescu]])<br />
* Add support for cases when the FSD that actually did the FO create wasn't the one to whom we went the IRP. ([[Alex Ionescu]])<br />
* Also add support for detecting volume opens and setting the FO_VOLUME_OPEN flag. ([[Alex Ionescu]])<br />
* Implement IoFastQueryNetworkAttributes which is now a piece of cake thanks to a properly implemented IopParseDevice. ([[Alex Ionescu]])<br />
* Implemented NtDeleteFile, also a piece of cake now that we have IopParseDevice done. ([[Alex Ionescu]])<br />
* Don't use FILE_ATTRIBUTE_NORMAL for mailslots/namedpipes. ([[Alex Ionescu]])<br />
* Zero out the OPEN_PACKET and only set non-zero members in functions that use it. ([[Alex Ionescu]])<br />
* NtCancelIoFile: Don't use macro-based list looping. ([[Alex Ionescu]])<br />
* NtCancelIoFile: Update operation counts. ([[Alex Ionescu]])<br />
* NtCancelIoFile: Wait 10ms instead of 100ms. ([[Alex Ionescu]])<br />
* Allocate Re-Init entries with a tag ([[Alex Ionescu]])<br />
* IoAllocateDriverObjectExtension and IoGetDriverObjectExtension: They were using the wrong structure (a made up one). ([[Alex Ionescu]])<br />
* IoAllocateDriverObjectExtension and IoGetDriverObjectExtension: They were saving the extension where the Driver Object's base address should be. ([[Alex Ionescu]])<br />
* IoAllocateDriverObjectExtension and IoGetDriverObjectExtension: Fix Memory leaks. ([[Alex Ionescu]])<br />
* IoAllocateDriverObjectExtension and IoGetDriverObjectExtension: Fix sometimes holding the lock too long. ([[Alex Ionescu]])<br />
* Created EXTENDED_DRIVER_OBJECT structure in NDK, since parts of the documented one are hidden (much like EXTENDED_DEVICE_OBJECT). ([[Alex Ionescu]])<br />
* Fixed IopDeleteDriver to free what it should. ([[Alex Ionescu]])<br />
* Fixed IoCreateDriver to handle more failure cases. ([[Alex Ionescu]])<br />
* Simplify IopReinitializeBootDrivers and IopReinitializeDrivers. ([[Alex Ionescu]])<br />
* For some strange reason, boot drivers were re-initailized *after* system drivers. ([[Alex Ionescu]])<br />
* Process Manager Rewrite: Architectural changes to match information in Windows Internals 4 and other documented sources of information (Windows Internals II by Probert). Code should match Win2003 layout. ([[Alex Ionescu]])<br />
* Process Manager Rewrite: Handle almost any possible process/thread sub structure and add its cleanup code stubs, so that when we actually implement them, we won't forget to clean them up in the process code. ([[Alex Ionescu]])<br />
* Process Manager Rewrite: Add interlocked usage of process and thread flags in order to make everything more thread-safe. ([[Alex Ionescu]])<br />
* Process Manager Rewrite: Better handle cases where threads die instantly, race conditions, and other weird issues. ([[Alex Ionescu]])<br />
* Process Manager Rewrite: Better handle process termination and thread termination. ([[Alex Ionescu]])<br />
* Process Manager Rewrite: Implement NtCreateProcessEx and update PspCreateProcess/NtCreateProcess. ([[Alex Ionescu]])<br />
* Process Manager Rewrite: Improve cleanup of process object in PspProcessDelete. ([[Alex Ionescu]])<br />
* Process Manager Rewrite: Optimize some things like User Thread startup. ([[Alex Ionescu]])<br />
* Process Manager Rewrite: Add some extra asserts, paged_code checks and also user-mode security check. ([[Alex Ionescu]])<br />
* Process Manager Rewrite: Implement helper API PsGetNextProcessThread ([[Alex Ionescu]])<br />
* Process Manager Rewrite: Optimize thread reaper (thanks Filip) ([[Alex Ionescu]])<br />
* Process Manager Rewrite: Do proper referencing/dereferencing of thread/processes (thanks Thomas) ([[Alex Ionescu]])<br />
* Fix up some stuff in Kernel Gates support. ([[Alex Ionescu]])<br />
* Fix up some implementation bugs in Executive Rundown support. ([[Alex Ionescu]])<br />
* Implement Fast Referencing and fix EX_FAST_REF definition. ([[Alex Ionescu]])<br />
* Implement ObReferenceEx and ObDereferenceEx. ([[Alex Ionescu]])<br />
* Split off ObpDeferObjectCompletion. A new win2003/vista API requires direct acess to being able to defer deletes. ([[Alex Ionescu]])<br />
* Fix some bugs in Process Token management and make it all properly use Fast Referencing. ([[Alex Ionescu]])<br />
* When duplicating a token in a new process, don't de-reference it before it's even created, and also insert it. ([[Alex Ionescu]])<br />
* Change ExpChangeRundown macro to fix warnings in msvc. ([[Alex Ionescu]])<br />
* Fix KiAcquireMutexContended, it was broken in contended cases. ([[Alex Ionescu]])<br />
* Inline Acquiring/Leaving guarded regions and the gmutex code, instead of going through 3-4 indirect calls. ([[Alex Ionescu]])<br />
* Add a mountain of ASSERTs to detect incorrect usage/state. ([[Alex Ionescu]])<br />
* Set ->SpecialApcDisable in the Guarded Mutex. ([[Alex Ionescu]])<br />
* Fix broken KTHREAD definition. SpecialApcDisable and KernelApcDisable were incorrectly marked as USHORT instead of SHORT, which could cause severe trouble under optimized builds (At least under MSVC, since MSVC wouldn't allow a negative number in an unsigned short). ([[Alex Ionescu]])<br />
* Use GM_LOCK_BIT_V. ([[Alex Ionescu]])<br />
* Fix broken KeTryToAcquireGuardedMutex prototype. ([[Alex Ionescu]])<br />
* Fix broken KGUARDED_MUTEX typedef and add bit values. ([[Alex Ionescu]])<br />
* Fix broken Interlocked* prototypes in regards to volatileness. ([[Alex Ionescu]])<br />
* Add ASSERT_QUEUE macro. ([[Alex Ionescu]])<br />
* Cleanup queue.c ([[Alex Ionescu]])<br />
* Add some ASSERTs ([[Alex Ionescu]])<br />
* Properly check for SPecialApcDisable before aborting a wait. ([[Alex Ionescu]])<br />
* Fix a bug in KiWaitQueue which was causing us not to remove the queue from the thread's wait list. ([[Alex Ionescu]])<br />
* Add some TIMER values to the ddk. ([[Alex Ionescu]])<br />
* Add DPC Settings (Queue Depths, Rates, etc) ([[Alex Ionescu]])<br />
* Cleanup System/Run Time Update code. ([[Alex Ionescu]])<br />
* Always increase kernel time in PRCB when inside kernel-mode code. ([[Alex Ionescu]])<br />
* Get rid of superflous interlocked commands when not needed. ([[Alex Ionescu]])<br />
* Improve detection of DPC vs non-DPC time. ([[Alex Ionescu]])<br />
* Respect and apply DPC queue/rate rules. ([[Alex Ionescu]])<br />
* Allow future use of non-fulltick time increments. ([[Alex Ionescu]])<br />
* Don't make the timer signaled in KeSetTimerEx if it already expired. ([[Alex Ionescu]])<br />
* Only call KiWaitTest on timers if they have waiters. ([[Alex Ionescu]])<br />
* Fix list looping in KiExpireTimers. ([[Alex Ionescu]])<br />
* Add checks for special apc disabled (guarded regions) in wait code. ([[Alex Ionescu]])<br />
* Set the right wait status in KiAbortWaitThread. ([[Alex Ionescu]])<br />
* Don't ignore priority boost (increments) when aborting waits. ([[Alex Ionescu]])<br />
* When satisfying a mutant, insert if into the the head of the back-link, not the forward-link. ([[Alex Ionescu]])<br />
* Fix utterly messed up unblocking/readying thread logic. ([[Alex Ionescu]])<br />
* KiUnblockThread becomes KiReadyThread and doesn't perform priority modifications anymore. Also removed a large block of code that was #if 0ed out. ([[Alex Ionescu]])<br />
* KiAbortWaitThread now does priority modifications (and better then before), then calls KiReadyThread. ([[Alex Ionescu]])<br />
* Inserting a queue now *READIES A THREAD ONLY* instead of removing all its waits! ([[Alex Ionescu]])<br />
* Add KiCheckThreadStackSwap and KiAddThreadToWaitList macros ([[Alex Ionescu]])<br />
* Initialize PRCBs' Wait Lists ([[Alex Ionescu]])<br />
* Fix a ghastly implementation fault where the the queue code was correctly removing the thread from its wait list, but where this wait list was actually connected to the _SCHEDULER_ and ended up removing a thread behind its back, causing bizarre issues and w3seek's ASSERT(State == Ready) bug. Fixed this by using the macros above and PRCB Wait List and properly inserting a waiting thread into that list, and then removing it when unblocking it or removing a queue. ([[Alex Ionescu]])<br />
* Fix a serious bug in Kernel Queues. A condition existed where an inserted kernel queue with a timeout would crash the system once the thread waiting on it had its wait aborted or completed. ([[Alex Ionescu]])<br />
* Implement Safe Referencing (an internal method for referencing objects when race conditions are possible) ([[Alex Ionescu]])<br />
* Implement two Vista APIs and export them: ObIsKernelHandle and ObDeleteObjectDeferDelete. ZOMG! Vista APIs in the kernel! ([[Alex Ionescu]])<br />
* Add IN/OUT annotations for KeWaitForSIngleObject ([[Alex Ionescu]])<br />
* Set the wait block outside the loop, small optimization in case we get alerted by an APC and have to loop again. ([[Alex Ionescu]])<br />
* Set the wait block pointer in the KTHREAD structure only *after* checking if a wait is actually needed. That way, if the object is already signaled, we don't set anything in the WaitBlockList. ([[Alex Ionescu]])<br />
* Small optimization: only set the caller's WAitBlock as the next wait block if a timer wasn't specificed, else we ended up overwriting the value. ([[Alex Ionescu]])<br />
* Small optimziation: don't write the thread in the wait block, this is a wait for a signle object so this isn't needed. ([[Alex Ionescu]])<br />
* Remove some debug prints that are not needed anymore ([[Alex Ionescu]])<br />
* NtCurrentTeb now returns the TEB instead of the KCPR, so re-enable the codepath that set the CurrentLocale and IdealProcessor in the TEB from the KTHREAD. ([[Alex Ionescu]])<br />
* Fixed a bug in PspUserThreadStartup which was causing us to notify the debugger for system threads or hidden threads, instead of vice-versa. ([[Alex Ionescu]])<br />
* Threads were incorrectly created with KernelMode access instead of PreviousMode. ([[Alex Ionescu]])<br />
* Initialize the thread's rundown protection and use the process's. ([[Alex Ionescu]])<br />
* Handle failure when TEB = NULL. ([[Alex Ionescu]])<br />
* The LPC Semaphore has a limit of 1, not 0x7FFF. ([[Alex Ionescu]])<br />
* Added very basic and skeletal NUMA code when creating a thread and process, currently only does some basic affinity checks and settings. ([[Alex Ionescu]])<br />
* Added a table and helper function (KeFindNextRightSetAffinity) for calculating affinity masks and sets. ([[Alex Ionescu]])<br />
* Split KeInitailizeThread into KeStartThread and KeInitThread, and modified Ps code to use the calls. Now added a failure case where Init fails, but we don't have to backout the entire effects of a "Start". ([[Alex Ionescu]])<br />
* Fix definition of OBJECT_DIRECTORY_INFORMATION ([[Alex Ionescu]])<br />
* Implement most of NtQueryDirectoryObject. It lacks the last step of converting the absolute buffer to a relative one. I have no idea why the old code was re-implemented in a recent commit when I clearly said I would fix this tonight. ([[Alex Ionescu]])<br />
* Fix two small bugs in NtQueryDirectoryObject. ([[Alex Ionescu]])<br />
* RDISK Count, Windowstation list enumeration now work on startup. ([[Alex Ionescu]])<br />
* Explorer's object viewer now works again. ([[Alex Ionescu]])<br />
* Factor out NtSet/GetContextThread implementation into PsGet/SetContexThread, new exported kernel APIs available to drivers, and export them. ([[Alex Ionescu]])<br />
* If the caller didn't request extended registers, don't probe the full CONTEXT structure. ([[Alex Ionescu]])<br />
* Use the proper trap frame in the kernel APC responsible for the context read/write. ([[Alex Ionescu]])<br />
* Always go through the APC instead of directly calling the Ke routine. ([[Alex Ionescu]])<br />
* Set default locale to 0x409 instead of 0x0. ([[Alex Ionescu]])<br />
* Fix a bug in one of the alert APIs which was probing for a valid pointer even if the caller had given NULL (which is valid if the caller doesn't want the previous state returned). ([[Alex Ionescu]])<br />
* Pushlocks need to be acquired in a -critical-, not -guarded* region. ([[Alex Ionescu]])<br />
* PsDisableImpersonation should return FALSE if it was already disbled. ([[Alex Ionescu]])<br />
* Don't forget to reference the token in PsReferenceEffectiveToken. ([[Alex Ionescu]])<br />
* PsImpersonateClient should still return success if it was given no token. ([[Alex Ionescu]])<br />
* PsImperstonateClient should de-reference the token if there is already active impersonation info. ([[Alex Ionescu]])<br />
* Fix a bug in PspSystemStartup. ([[Alex Ionescu]])<br />
* Properly hold object references towards a thread that's being created. ([[Alex Ionescu]])<br />
* Set the Thread->GrantedAccess value. ([[Alex Ionescu]])<br />
* Update NtOpenThread to use an Access State since these work now and Ob respects them, and also add a special hack present on NT: If the SeDEbugPrivilege is present, then the caller will get full thread access regardless of his rights. ([[Alex Ionescu]])<br />
* Simplify PsGetNextProcess so it works like PsGetNextProcessThread. ([[Alex Ionescu]])<br />
* Reformat and annotate parts of process.c ([[Alex Ionescu]])<br />
* Remove PsGetWin32Process, PsGetWin32Thread and implement/export the real functions PsGetCurrentProcessWin32Process, PsGetCurrentThreadWin32Thread, change win32k to use them. ([[Alex Ionescu]])<br />
* Initailize and use process rundown. ([[Alex Ionescu]])<br />
* Set corrent GrantedAccess. ([[Alex Ionescu]])<br />
* Remove an extra incorrect reference we were adding to processes. ([[Alex Ionescu]])<br />
* Implement PsIsProcessBeingDebugged. ([[Alex Ionescu]])<br />
* Make the same changes to NtOpenProcess that we did previously to NtOpenThread. ([[Alex Ionescu]])<br />
* Fix Win32K thread rundown bug, fixes shutdown crash and other bugchecks where some ASSERT(Class->windows) wasn't 0. ([[Alex Ionescu]])<br />
* Close the right debug handle instead of some random value. ([[Alex Ionescu]])<br />
* Change FAST_MUTEX PsActiveProcessMutex to KGUARDED_MUTEX. ([[Alex Ionescu]])<br />
* Define PS Flags and use them, isntead of magic numbers. ([[Alex Ionescu]])<br />
* Add Pushlock support for GCC (Thanks Thomas!) ([[Alex Ionescu]])<br />
* Remove a bunch of deprecated crap from ps.h ([[Alex Ionescu]])<br />
* Get rid of PsLockProcess, PsUnlockProcess. Use the process pushlock instead. ([[Alex Ionescu]])<br />
* When assigning the job, only acquiring rundown protection is enough. ([[Alex Ionescu]])<br />
* Use interlocked intrinsics for setting the ExceptionPort instead of locking the entire process object. ([[Alex Ionescu]])<br />
* Disable locking in ProcessSessionInformation for NtSetInformationProcess. The whole API seems wrong anyway, on my XP machine calling it does not change the session or change any token data. To verify later... ([[Alex Ionescu]])<br />
* Refactor NtSuspend/ResumeThread into PsSuspend/ResumeThread. ([[Alex Ionescu]])<br />
* Implement NtSuspend/ResumeProcess with PsSuspend/ResumeProcess. ([[Alex Ionescu]])<br />
* Improve the previous code to use rundown protection and be thread-safe. ([[Alex Ionescu]])<br />
* Fix a bug in PsGetNextProcess(Thread) since we now use safe referencing and the lookup loop can continue. ([[Alex Ionescu]])<br />
* Kernel, Memory Manager and Process Manager APIs for: Process Quantum. ([[Alex Ionescu]])<br />
* Kernel, Memory Manager and Process Manager APIs for: Fixed and Variable Quantum Tables. ([[Alex Ionescu]])<br />
* Kernel, Memory Manager and Process Manager APIs for: Long and Short Quantum Variability. ([[Alex Ionescu]])<br />
* Kernel, Memory Manager and Process Manager APIs for: Priority Separation and Separation Masks. ([[Alex Ionescu]])<br />
* Kernel, Memory Manager and Process Manager APIs for: Foreground Quantum Table. ([[Alex Ionescu]])<br />
* Kernel, Memory Manager and Process Manager APIs for: Process Priority, Priority Modes and Priority Classes. ([[Alex Ionescu]])<br />
* Kernel, Memory Manager and Process Manager APIs for: Virtual Memory Priority ([[Alex Ionescu]])<br />
* Kernel, Memory Manager and Process Manager APIs for: Job Scheduling Classes ([[Alex Ionescu]])<br />
* Implement PsSetProcessPriorityByClass. ([[Alex Ionescu]])<br />
* Add bugcheck CRITICAL_OBJECT_TERMINATED ([[Alex Ionescu]])<br />
* Implement PspCatchCriticalBreak and fix the 5 or so FIXMEs that depended on it. ([[Alex Ionescu]])<br />
* Give winlogon SE_ASSIGNPRIMARYTOKEN_PRIVILEGE because it was lacking it and would fail under this kernel patch. ([[Alex Ionescu]])<br />
* PspAssignPrimaryToken was good enough for actually *assigning* the token, but when NtSetInfoProcess is called with ProcessPrimaryToken, we want to do a lot more then just randomly assigning it. Added PspSetPrimaryToken which first verifies if the token being assigned is a child token and if not, checks for SeAssignPrimaryTokenPrivilege. Also added a fixme for more code that's needed, to actually re-calculate the process's granted access towards itself. Also added thread-safety. ([[Alex Ionescu]])<br />
* Implement KiRecalculateDueTime to handle cases where a timeout wait has been interupted by an APC or alerted, and it needs to be recalculated in the relative case. (This fixes the "contact alex" bugcheck). ([[Alex Ionescu]])<br />
* CT_ACTIVE_IMPERSTIONATION_INFO_BIT -> CT_ACTIVE_IMPERSONATION_INFO_BIT ([[Alex Ionescu]])<br />
* Added Process and Thread locking inlined functions for Ps Security functions. ([[Alex Ionescu]])<br />
* Thread safety is your friend! Huge rework of almost all the functions in ps/security.c to use the process/thread pushlocks and use interlocked operations when dealing with the ActiveImpersonationInfo thread flag. ([[Alex Ionescu]])<br />
* Added PAGED_CODE(). ([[Alex Ionescu]])<br />
* Added checks for Processes with Jobs for the day that will happen. ([[Alex Ionescu]])<br />
* PsAssignImpersoonationToken with a NULL token handle means simply to revert to self. ([[Alex Ionescu]])<br />
* Don't ignore the HandleAttributes in NtOpenProcessTokenEx. ([[Alex Ionescu]])<br />
* Use SeTokenType to make sure the token passed is an impersonation token. ([[Alex Ionescu]])<br />
* Remove some fixed bugs in krnlfun.c, add more TODOs. ([[Alex Ionescu]])<br />
* ImperstionationLocale -> ImpersonationLocale. ([[Alex Ionescu]])<br />
* Implement PspWriteTebImpersonationInfo for setting the impersonation locale and impersonation status in the TEB (since User-mode needs to read this value and we don't want to NtQueryInformationThread for it each time to read the ETHERAD flag). ([[Alex Ionescu]])<br />
* Complete the implementation of PspSetPrimaryToken to recalculate a process's access rights to itself based on a new primary token. ([[Alex Ionescu]])<br />
* SeAccessCheck should assume failure if no SD was passed. Also fixes bugcheck on startup since processes don't currently have SDs. ([[Alex Ionescu]])<br />
* Refactor SeCaptureSubjectContext into SeCaptureSubjectContextEx and SeCreateAccessState into SeCreateAccessStateEx. The *Ex routines allow specifying a custom process/thread which isn't the current one. This is useful when creating a new process or thread since we're not actually in it. ([[Alex Ionescu]])<br />
* Implemented a bit more security calls in PspCreateProcess as seen in WI II. We now create an AccessState. ([[Alex Ionescu]])<br />
* Also write the PID in the ObjectTable. ([[Alex Ionescu]])<br />
* Make use of PsChangeQuantumTable on system startup to setup the raw priority separation. ([[Alex Ionescu]])<br />
* Call PspComputeQuantumAndPriority in PspCreateProcess to calculate process base priority and quantum for child threads. ([[Alex Ionescu]])<br />
* Add security code to calculate process's access rights to itself, as documented in WI II. ([[Alex Ionescu]])<br />
* Acquire Process lock when touching the thread list entry and incrementing the process' active threads. ([[Alex Ionescu]])<br />
* Set the Thread Create Time on creation, I had forgotten this! ([[Alex Ionescu]])<br />
* Handle failures for thread-safety/race conditions. If the process was deleted or the thread terminated behind our back, then go through a manual un-initalization code path. ([[Alex Ionescu]])<br />
* Just like previous process patch, add code to now create an access state with SeCreateAccessStateEx. ([[Alex Ionescu]])<br />
* Handle failure of ObInsertObject. ([[Alex Ionescu]])<br />
* Add ObGetObjectSecurity calls like in PspCreateProcess to check the thread's level of access towards itself. ([[Alex Ionescu]])<br />
* Add code to handle two more failure (the last, afaics) cases. ([[Alex Ionescu]])<br />
* Implement XP-style process name auditing to store the full name of the process in EPROCESS instead of only the first 16 ascii characters. This is required for one of the newer Info process classes. Implemented SeInitializeProcessAuditName and SeLocateProcessImageName. ([[Alex Ionescu]])<br />
* Remove #ifed out code in PspCreateProcess which was attempting to create the name structure. Add code to MmCreateProcessAddressSpace to initialize the audit name after the 16-byte name. ([[Alex Ionescu]])<br />
* Implement some helper APIs for better code refactoring. ([[Alex Ionescu]])<br />
* Remove PspGetImagePath and use the new SeLocateProcessImageName instead. It's still not fully XP-compatible, because it should return the entire name with the \Device\HardDisk0 path, but that is easily fixable by modifying the OB Type info for the device object to also use IopQueryNameFile (TODO). ([[Alex Ionescu]])<br />
* Generate KUSER_SHARED_DATA cookie if it doesn't already exist when a user-mode thread runs. ([[Alex Ionescu]])<br />
* Set DRVO_INITAILIZED flag for intiailized driver objects. ([[Alex Ionescu]])<br />
* Loop the list of devices created by the driver's DriverEntry and remove the DO_DEVICE_INITIALIZING flag. ([[Alex Ionescu]])<br />
* Enable IopReferenceDeviceObject in IopParseDevice (not much use for now except OS "Correctness" and identifying broken drivers). DO referencing isn't fully used in the kernel yet. ([[Alex Ionescu]])<br />
* Fix broken drivers: i8042 and videoprt. NDIS might be broken too, but downloading worked fine for me, so it's not hitting the check in IopParseDevice. ([[Alex Ionescu]])<br />
* Fix Broken Installers and other I/O programs that couldn't, for example, create temporary directories. ([[Alex Ionescu]])<br />
* Fix Firefox installers and other apps crashing due to a bug in NtSetInformationFile. ([[Alex Ionescu]])<br />
* Fix File Objects being referenced twice resulting in IRP_MJ_CLOSE/CLEANUP never being sent and several memory leaks. ([[Alex Ionescu]])<br />
* Fix File Object Lock being incorrectly created and then misused by mm/section code. ([[Alex Ionescu]])<br />
* Fix creation of File Object before setting up the IRP, to properly cleanup during failures. ([[Alex Ionescu]])<br />
* Add failure code if ObCreateObject fails. ([[Alex Ionescu]])<br />
* Add SEH to all iofunc.c functions that required it. (note: Some SEH might seem "useless" to have been added. This is because we don't use Pool Quotas yet, which generate exceptions which will later need to be handled). ([[Alex Ionescu]])<br />
* Implement IopExceptionCleanup as a generic cleanup handler for SEH exceptions. ([[Alex Ionescu]])<br />
* Add another paramter to IopCleanupFailedIrp to free an optional buffer being specified to it. This way we don't leak some allocated buffers when IRP allocation fails. ([[Alex Ionescu]])<br />
* Create inlined IopUnQueueIrpFromThread to match IopQueueIrpToThread. ([[Alex Ionescu]])<br />
* Fix IRP Cancellation and enable all calls to IopQueueIrpToThread and IopUnqueueIrpFromThread. This seems to work properly now and the kernel fun entry for it has been removed. All remaining Io TODOs are now low priority. ([[Alex Ionescu]])<br />
* Properly disable impersonation in PsDisableImpersonation if it was previously enabled, instead of not disabling it. (fix a wrong check). Thanks to Arty. ([[Alex Ionescu]])<br />
* Add support for APC-delivery after context-switch (not yet programmed) ([[Alex Ionescu]])<br />
* Detect and crash if context switch is done inside a DPC. ([[Alex Ionescu]])<br />
* Switch kernel stack a bit earlier ([[Alex Ionescu]])<br />
* Don't switch address space if we're still in the same process, and fix some duplicated code that was mixed up together. ([[Alex Ionescu]])<br />
* Move LDT setup out-of-line. ([[Alex Ionescu]])<br />
* Don't use EFLAGS to store the Wait IRQL, just push directly, it's cleaner. ([[Alex Ionescu]])<br />
* Detect if kernel APCs are pending and request APC_LEVEL software interrupt from HAL if they are, returning with the right apc status. ([[Alex Ionescu]])<br />
* Also update INT21 VDM Descriptor handler when updating LDT descriptor. ([[Alex Ionescu]])<br />
* Remove some FPU deprecated constants and use the new ones. ([[Alex Ionescu]])<br />
* Deliver APCs on return from context switch with pending kernel APCs. ([[Alex Ionescu]])<br />
* Detect NPX/FPU in simple assembly and XMMI/SSE2 by using CPU Feature flags, replacing the old asm+c mess. ([[Alex Ionescu]])<br />
* Handle FPU/SSE saving in the CONTEXT<->KTRAP_FRAME routines directly, and using KiFlushNPXState assembly function. ([[Alex Ionescu]])<br />
* Implement a naive Trap 7 (FPU Fault) handler in assembly that properly does most of the work required to handle an FPU fault. Not yet complete however since it almost ignores user-mode faults (just like trunk). FPU isn't done in ctx switching yet. ([[Alex Ionescu]])<br />
* Fixes to CONTEXT<->KTRAP_FRAME conversion. ([[Alex Ionescu]])<br />
* Implement generic exception dispatcher for traps (kind-of analogous to KiKernelTrapHandler/KiUserTrapHandler but in assembly and more generic/compact). ([[Alex Ionescu]])<br />
* Switch Traps 0, 1 to it. ([[Alex Ionescu]])<br />
* Trap 2 is NMI, bugcheck immediately since we can't handle them yet. ([[Alex Ionescu]])<br />
* Switch 4, 5, 6 to common ASM dispatcher as well. ([[Alex Ionescu]])<br />
* Convert 8, 9, 10, 15/F ([[Alex Ionescu]])<br />
* Call KiSystemFatalException directly instead of duplicating the code 5 times. ([[Alex Ionescu]])<br />
* Gutted out KiTrapHandler. Now it is only a gateway for GPF/UD for V86 mode. ([[Alex Ionescu]])<br />
* Removed all the code in userptrap.c and removed KiKernelTrapHandler. ([[Alex Ionescu]])<br />
* Set Traps 11, 12, 16 and 17 as unhandled for now(Segment fault, stack fault, fpu fault and alignment fault). We weren't really "handling" them in the past either. ([[Alex Ionescu]])<br />
* I probably need to implement GPF handler for non-V86 mode to support Lazy segment loading and fix the vmware syscall bug that has been haunting me for two years. ([[Alex Ionescu]])<br />
* Implement GENERATE_IDT_STUBS/GENERATE_INT_HANDLERS ([[Alex Ionescu]])<br />
* Generate actual Unexpected Interrupt entries in the IDT for INTs > 0x30 (basically IRQs). ([[Alex Ionescu]])<br />
* Generated all 208 Unexpected Interrupt Handlers for all INTs (using a single macro line) and implement a "Tail" function to handle them instead of bugchecking like before (they're now sent to HAL properly). ([[Alex Ionescu]])<br />
* Implement INT_PROLOG macro to create KTRAP_FRAME for interrupts (similar to traps). ([[Alex Ionescu]])<br />
* Get rid of the peculiar idea that the HAL should manually hack into ntoskrnl through a hack export and hackishly call the registered device interrupt handlers. This is why computers have a PIC in the first place... ([[Alex Ionescu]])<br />
* Call KiDispatchInterrupt through an interrupt gate instead of directly. ([[Alex Ionescu]])<br />
* Switch PRIMARY_VECTOR_BASE to 0x30 instead of 0x40, as it should be. ([[Alex Ionescu]])<br />
* Fix function definitions of HalQueryRealTimeClock, HalGetEnvironmentVariable. They were defined in the NDK in one way, but implemented another way, and since the HAL didn't include its own NDK file, the compiler didn't realize this. Calls of these functions might've experienced serious problems. ([[Alex Ionescu]])<br />
* Also fix HalHandleNmi and HalInitSystem definitions. ([[Alex Ionescu]])<br />
* Add stub code to actually setup the Clock Interrupt. ([[Alex Ionescu]])<br />
* Enable the code in KeInitializeInterrupt that copies the Interrupt Template to the KINTERRUPT object and modifies the template pointer to point to the KINTERRUPT. ([[Alex Ionescu]])<br />
* Add the template code in trap.s. ([[Alex Ionescu]])<br />
* Implement Chained and Normal generic interrupt handlers. ([[Alex Ionescu]])<br />
* Make generated handlers have a proper .func symbol for symbol data. ([[Alex Ionescu]])<br />
* Make IDT writable, the page shouldn't be read-only. ([[Alex Ionescu]])<br />
* Change some symbol names. ([[Alex Ionescu]])<br />
* Completely re-implement IRQ support (KeInitialize/Connect/Disconnect) interrupt using the same model as NT. Implementation was done by analyzing various of my systems at runtime with WinDBG and tracing through some of the code and dumping relevant objects. ([[Alex Ionescu]])<br />
* Uses new code added to trap.s for generic dispatching, as well as the NT implementation which copies a "template" into the ->DispatchCode array of every KINTERRUPT object. ([[Alex Ionescu]])<br />
* Also adds support for chained interrupts, but this hasn't been tested yet. Floating interrupts are not supported on NT it seems, so I haven't implemented those at all. ([[Alex Ionescu]])<br />
* Write a basic Clock Interrupt handler in the HAL (doesn't deal with changing increments yet, just like current ROS). It will call KeUpdateSystemTime once ready. ([[Alex Ionescu]])<br />
* Implement KeDisconnectInterrupt with the new implementation. ([[Alex Ionescu]])<br />
* Put Clock Interrupt initialization in the right place (might still be too late: must investigate more). ([[Alex Ionescu]])<br />
* Added a debug print when unexpected interrupts are called, just noticed this happens on my checked machine, and it's a useful tracing tool. ([[Alex Ionescu]])<br />
* Update KeUpdateSystemTime to use variable increments. ([[Alex Ionescu]])<br />
* Update KeTickCount properly instead of an ugly timecast hack. ([[Alex Ionescu]])<br />
* Also update UserSharedData->TickCount. ([[Alex Ionescu]])<br />
* Get rid of KiRawTicks. ([[Alex Ionescu]])<br />
* Properly update KiTickOffset at the end. ([[Alex Ionescu]])<br />
* Make KeUpdateSystemTime independent, so that it returns and exits from the current ROSterrupt by itself. ([[Alex Ionescu]])<br />
* Make KeUpdateRunTime increase the interrupt count, check for V86 as well as for user-mode by using the CS and EFLAGS (isntead of PreviousMode), also only request DPCs if DpcInterruptRequested isn't already set, and only perform Quantum End if this isn't the idle thread. ([[Alex Ionescu]])<br />
* Add clock.S which will have the clock interrupt handlers of the kernel (UpdateSystemTime and UpdateRunTime) and ultimately replace the only reason irqhand.S is still around (the clock interrupt). Implement the current version of KeUpdateSystemTime in assembly, with stack optimizations since we'll be called from the HAL later. ([[Alex Ionescu]])<br />
* Fix incorrect KPCR_PRCB_DPC_ROUTINE_ACTIVE which was totally wrong (And could've caused a crash in the context swicher) ([[Alex Ionescu]])<br />
* Also fix the definition of KRCB which was off-by-4 after about offset ~0x500. It wasn't causing problems because assembly code only used < 0x500. ([[Alex Ionescu]])<br />
* Write the ASM implementation of KeUpdateRunTime (not used yet). ([[Alex Ionescu]])<br />
* Enable clock.S versions of KeUpdateSystem/RunTime and export them properly. ([[Alex Ionescu]])<br />
* Enable systimer.S to call into kernel's KeUpdateSystemTime. ([[Alex Ionescu]])<br />
* Enable Hal's Clock Interrupt during Phase 1. ([[Alex Ionescu]])<br />
* Remove most of the code that was still left in irq.c ([[Alex Ionescu]])<br />
* Only one large problem remains now, which is the spurious firing of the clock interrupt before we're ready to handle it... I will try to fix this today. ([[Alex Ionescu]])<br />
* If SeCaptureSubjectContextEx is called without a process, at least NULL-initialize the context to catch dereferences of invalid pointers. ([[Alex Ionescu]])<br />
* Remove code in the page fault handler which was corrupting the trap frame. ([[Alex Ionescu]])<br />
* Remove some ROS hacks that dealt with the fact the trap frame was getting corrupted, since now it isn't anymore. ([[Alex Ionescu]])<br />
* Enable code that checks for Teb->GdiBatchCount during win32k system calls. The bugs that were mentionned in the #if 0 are fixed. ([[Alex Ionescu]])<br />
* Fix some bugs in KiChainedDispatch. ([[Alex Ionescu]])<br />
* Complete and utter reimplementation of V86 Mode for Ke386CallBios. Details below. Tested on QEMU/VMWARE. May give you a breakpoint/crash on real hardware * please let me know the V86 opcode displayed on the debug log/screen if this is the case *if you see such a message*. ([[Alex Ionescu]])<br />
* Got rid of all the previous related assembly code and implemented Ki386SetupAndExitToV86Mode and Ki386BiosCallREturnAddress. ([[Alex Ionescu]])<br />
* Implemented GPF (Trap 13) code for V86 faults (which will happen in V86 mode). Implement a generic Ki386HandleOpcodeV86 handler that increments counts and calls the right opcode handler. ([[Alex Ionescu]])<br />
* Implemented an Opcode Table Entry Index and Opcode Table array for mapping opcodes that caused a GPF to their V86 handlers/emulators. ([[Alex Ionescu]])<br />
* Implemented handlers for PUSHF, POPF, CLI, STI, IRETD and INTnn, which is what QEMU/VMWare and *most* VIDEO ROM BIOS code should use. ([[Alex Ionescu]])<br />
* Created a /vdm tree and moved all NTVDM/VDM specific code there. ([[Alex Ionescu]])<br />
* Halfplemented VdmStart/EndExecution APIs which the BIOS ROM V86 implementation is built upon. Currently don't handle VDM at all, only this V86 mode. ([[Alex Ionescu]])<br />
* Also added code for NtVdmControl and fixed up CSRSS and ACPI's calls to this API. ([[Alex Ionescu]])<br />
* Added detection and FIXMEs for support of VMEs in VMWare, Bochs and real hardware (VME is not yet supported). ([[Alex Ionescu]])<br />
* Add about two dozen new bugcheck codes and strings. ([[Alex Ionescu]])<br />
* Use KdDebuggerNotPresent to determine if KDBG is there or not. KdDebuggerEnable is now set whenever booting with debugging -* even if only serial port or screen debugging. ([[Alex Ionescu]])<br />
* Bugcheck Rewrite: Moved stack dump routines to bug.c and cleaned them up. Next step is to remove most of them and implement them properly as part of RtlCaptureStackBackTrace and RtlWalkFrameChain. ([[Alex Ionescu]])<br />
* Bugcheck Rewrite: Use InbvDisplayString for everything now. BSODs will only truly show on screen. (however, part of the KeBugCheckWithTf improvements, a special "if debugger enabled" BSOD will also be displayed for debugging purposes). ([[Alex Ionescu]])<br />
* Bugcheck Rewrite: Do checksum calculation in bugcheck callbacks. ([[Alex Ionescu]])<br />
* Bugcheck Rewrite: Detect and display which drivers belong to which EIP. ([[Alex Ionescu]])<br />
* Bugcheck Rewrite: Implemented code to select the proper verbose BSOD message depending on the bug check code. ([[Alex Ionescu]])<br />
* Bugcheck Rewrite: Also implemented code to detect a variety of "known" bug check codes and to recover more data on them, and/or modify them accordingly. Sadly ROS doesn't yet make use of most of these codes. ([[Alex Ionescu]])<br />
* Bugcheck Rewrite: Factored out and split some code into individual routines. ([[Alex Ionescu]])<br />
* Bugcheck Rewrite: Look and functionality is now identical to Windows XP. ([[Alex Ionescu]])<br />
* Bugcheck Rewrite: Stack trace will only be shown if KDBG isn't connected. If KDBG is connected you can do "bt" anyway (which is more powerful ([[Alex Ionescu]])<br />
* Some fixes to KiDispatchException: Add support for forwarding exception back to user-mode, protect against V86 or invalid-stack faults, handle stack overflow exception while handling usermode exception (Thanks KJK for the SEH_FILTER help). Decrement EIP by one when hitting an INT3, to get the correct address. ([[Alex Ionescu]])<br />
* Fix KeRaiseUserException (can't use "return" from SEH_HANDLE). ([[Alex Ionescu]])<br />
* Rewrote RtlCompareMemory. ([[Alex Ionescu]])<br />
* Rewrote RtlCompareMemoryUlong ([[Alex Ionescu]])<br />
* Rewrote RtlFillMemory ([[Alex Ionescu]])<br />
* Rewrote RtlFillMemoryUlong ([[Alex Ionescu]])<br />
* Rewrote RtlFillMemoryUlongUlong ([[Alex Ionescu]])<br />
* Rewrote RtlMoveMemory ([[Alex Ionescu]])<br />
* Rewrote RtlZeroMemory ([[Alex Ionescu]])<br />
* Rewrote RtlPrefetchMemoryNonTemporal ([[Alex Ionescu]])<br />
* Rewrote RtlUshortByteSwap ([[Alex Ionescu]])<br />
* Rewrote RtlUlongByteSwap ([[Alex Ionescu]])<br />
* Rewrote RtlUlonglongByteSwap ([[Alex Ionescu]])<br />
* Implement more parts of the GPF Handler. ([[Alex Ionescu]])<br />
* Add support for lazy loading. ([[Alex Ionescu]])<br />
* QEMU + -kernel-qemu seems to work now. ([[Alex Ionescu]])<br />
* Hack away the Win32k bug that's been there for ages (copy to user-mode from kernel-mode failing due to probe due to incorrect previous mode). It's not the right fix, but nobody seems to be willing to fix it, and it doesn't make anything less stable, sicne the actually copy is in SEH anyway. It opens a security vuln. (wow, not like we have 15000) in exchange for fixing dozens of win32k bugs and failures. ([[Alex Ionescu]])<br />
* Don't do fast system calls with the wrong DS/ES selectors. ([[Alex Ionescu]])<br />
* Properly load DS/ES on system startup and GDT load ([[Alex Ionescu]])<br />
* Use proper DS/ES during deprecated IRQ handling. ([[Alex Ionescu]])<br />
* Always use GS as 0 for all of the above. ([[Alex Ionescu]])<br />
* *FINALLY* fixes the oldest bug there ever was -> DS/ES corruption noticed in VMWare (And recently in QEMU+KERNELKQEMU, since it behaves internally like vmware). Hacks in trap code have FINALLY been removed! ([[Alex Ionescu]])<br />
* Add support for recovering from user-mode win32k callback fault. ([[Alex Ionescu]])<br />
* Also add support for debug register saving/reloading during user-mode callbacks and return. ([[Alex Ionescu]])<br />
* Multiple changes to low-level Kernel initalization sequence to bring it a bit closer to Windows. ([[Alex Ionescu]])<br />
* Main difference is new CPU detection algorithms for ID, cache, etc, as well as using KF_ Kernel Feature bits instead of x86 CPU features (For portability). ([[Alex Ionescu]])<br />
* Start support for an initial boot thread. ([[Alex Ionescu]])<br />
* Initialization rewrite: Initialize bugcheck lists, timer DPC, profile list/locks, timer lists, the swap lists and syscall table as part of KiInitSystem (portable). ([[Alex Ionescu]])<br />
* Initialization rewrite: Add more initialization for the initial/idle process+thread (some code disabled due to dispatcher problems). ([[Alex Ionescu]])<br />
* Initialization rewrite: Add code to support future Timer implementation (based on tick-hashes) ([[Alex Ionescu]])<br />
* Initialization rewrite: Separate post-boostrap initialization code in KiInitializeKernel. ([[Alex Ionescu]])<br />
* Initialization rewrite: Add some support for future SMP paths. ([[Alex Ionescu]])<br />
* Initialization rewrite: Create a DPC stack. ([[Alex Ionescu]])<br />
* Move machine-specific initializations to KeInit2. ([[Alex Ionescu]])<br />
* Initialize bugcheck messages much earlier, separate clock initialization from KeInit2. ([[Alex Ionescu]])<br />
* Completely move out and isolate ROS/FREELDR PE loading hacks to KiRosPrepareForSystemStartup so that KiSystemStartup is clean of them. ([[Alex Ionescu]])<br />
* Add missing volatile statements to KPROCESS, KTHREAD, KPRCB and KDPC_DATA. ([[Alex Ionescu]])<br />
* Fix KDPC definition in DDK. You can always count on the w32api to get even the simplest structures wrong. ([[Alex Ionescu]])<br />
* Fix memory overwrite bug in KiInitSpinlocks. ([[Alex Ionescu]])<br />
* DPC Rewrite: Re-factor KiDispatchInterrupt to separate DPC delivery routine (so that it can stay in C, since KiDispatch should be done in ASM so we can switch stacks). ([[Alex Ionescu]])<br />
* DPC Rewrite: Use interrupt enable/disable instead of raising to HIGH_LEVEL. ([[Alex Ionescu]])<br />
* DPC Rewrite: Better use and pairing of locks. ([[Alex Ionescu]])<br />
* DPC Rewrite: Fix a lot of race conditions in DPC dispatching, due to the fact almost all data we're touching is ultra-volatile and can change at any time depending on various locks being held/released + interrupt state. ([[Alex Ionescu]])<br />
* DPC Rewrite: Add stub code/support for tick-hased table-based timer implementation and deferred threads. ([[Alex Ionescu]])<br />
* DPC Rewrite: Implement KiDispatchInterrupt in assembly since it's 1) Perf-critical 2) Requires us to switch the stack to the DPC stack, which is unsafe (and impossible, unless inlining) in C. ([[Alex Ionescu]])<br />
* Fix KTSS definition. ([[Alex Ionescu]])<br />
* Add GetSegment inlines (ie: GetSs, GetDs, etc) ([[Alex Ionescu]])<br />
* Fix up definition of KiBootGdt to use KGDTENTRY instead of USHORT. Also define KiGdtDescriptor using KDESCRIPTOR. ([[Alex Ionescu]])<br />
* Remove GDT initialization code completely. The GDT is already initialized on boot. ([[Alex Ionescu]])<br />
* Remove tss.c and add KiInitializeTss(2) to setup a TSS and proper IOPM/Interrupt Direction map settings for V86/VDM. ([[Alex Ionescu]])<br />
* Copy the TSS code over but prettyify it to use NT/NDK structures instead of ugly USHORT typecasts. ([[Alex Ionescu]])<br />
* Remove LDT initialization, LDT shouldn't be initialized at bootup. ([[Alex Ionescu]])<br />
* Cleanup formatting of GDT-related exported function stubs in gdt.c and rename file to abios.c. Those routines deal specifically with the ABIOS GDT selectors and are for ABIOS support. ([[Alex Ionescu]])<br />
* Add Ke386SetFs, Ds, Es (using Ke386SetSeg) and Ke386SetTr new inlined commands. ([[Alex Ionescu]])<br />
* Also setup an NMI Task gate after the double fault task gate. Will be useful when we hand to handle NMIs later. ([[Alex Ionescu]])<br />
* Setup FS in KiSystemStartup and initialize the TSS before the PCR. Also add a bit more support for SMP systems (To skip boot-cpu-only initialization). ([[Alex Ionescu]])<br />
* Also setup DS/ES directly in KiSystemStartup. ([[Alex Ionescu]])<br />
* Initialize KD at phase 0 in KiSystemStartup, not in KiInitializeKernel, and also check for debug break at this time. ([[Alex Ionescu]])<br />
* Add Ke386SetInterruptDescriptorTable inlined function to set the IDT. ([[Alex Ionescu]])<br />
* Rename and fixup initial stacks, instead of using 16 different variables all with confusining meanings and values. Define P0BootStack as the initial kernel stack, and KiDoubleFaultStack as the double-fault trap (and initial DPC) stack. ([[Alex Ionescu]])<br />
* Fix call to KiInitializePcr which was setting an incorrect DPC stack. ([[Alex Ionescu]])<br />
* Make space on the initial stack for a KTRAP_FRAME as well, not only for the FPU save area. ([[Alex Ionescu]])<br />
* Also push initial CR0 NPX state on the initial stack. ([[Alex Ionescu]])<br />
* Load the IDT and GDT directly in KiRosPrepareForSystemStartup. ([[Alex Ionescu]])<br />
* Fix definition of SYNCH_LEVEL. ([[Alex Ionescu]])<br />
* Implement KeAcquireInStackQueuedSpinLockRaiseToSynch for UP systems. ([[Alex Ionescu]])<br />
* Implement KiAcquireApcLock, KiAcquireApcLockAtDpcLevel, KiReleaseApcLock, KiReleaseApcLockFromDpcLevel. ([[Alex Ionescu]])<br />
* KeResumeThread, KeSuspendThread, KeAlertThread, KeForceResumeThread, KeTestAlertThread, KeAlertResumeThread are now the first to use the new APC In-Stack Queued Spinlock for sychronization. ([[Alex Ionescu]])<br />
* Implement KiAcquireProcessLock, KiReleaseProcessLock. ([[Alex Ionescu]])<br />
* Update KeFreezeAllThreads to use the Process and APC In-Stack Queued Spinlock. ([[Alex Ionescu]])<br />
* Update KeTerminateThread to use the Process Lock. Call KiRundownThread to cleanup the NPX thread. Add some assertions for Stack in/out-paging. Use KiSetThreadSwapBusy for proper SMP vs UP building. ([[Alex Ionescu]])<br />
* NUMA Node semantics in KeStartThread only need to be done for CONFIG_SMP builds, so #ifed them appropriately. Also made it use the Process In-Stack QSL. ([[Alex Ionescu]])<br />
* Remove KeSetPreviousMode, KeDisableThreadApcQueueing. ([[Alex Ionescu]])<br />
* Stargint reorganizing some public functions to the bottom of the file. ([[Alex Ionescu]])<br />
* Don't hold lock during KeSetKernelStackSwapEnable. ([[Alex Ionescu]])<br />
* Update KeRevertToUserAffinityThread, KeSetSystemAffinityThread to use new lock functions, and add code to support future scheduler. ([[Alex Ionescu]])<br />
* Update KeSetIdealProcessorThread to properly do Ideal CPU logic instead of blindgly setting it (most importantly, respect UserIdealProcessor and SystemAffinityActive seettings). ([[Alex Ionescu]])<br />
* Reposition and update KeQueryBasePriorityThread to use the new locks. ([[Alex Ionescu]])<br />
* Update KeSetAFfinityThread, KeSetPriorityThread with new locks and assertions (plus the current ROS scheduler hack). ([[Alex Ionescu]])<br />
* Update the last remaining old function, KeSetBasePriority. Use new locks and assertions, and also make use of KiComputeNewPriority. ([[Alex Ionescu]])<br />
* Get completely rid of old Dispatcher Lock macros and use new ones. ([[Alex Ionescu]])<br />
* apc.c -> Also multiple optimizations to use the APC lock instead of the full-fledged dispatcher lock. ([[Alex Ionescu]])<br />
* gate.c -> Use APC lock as well, the full dispatcher lock isn't required because a thread can only wait on one and only one gate. ([[Alex Ionescu]])<br />
* process.c -> Optimize the code to use the Process and/or APC lock instead of the dispatcher lock. Also delay acquiring the locks after some checks, to make the exit paths simpler. ([[Alex Ionescu]])<br />
* Remove KeGetCurrentProcess. This API doesn't exist. ([[Alex Ionescu]])<br />
* Add assertions to relevant functions in process.c and re-format some code. ([[Alex Ionescu]])<br />
* Check for invalid APC state in KeDetachProcess. ([[Alex Ionescu]])<br />
* Decrease process stack count while holding the Dispatcher Lock at DPC level. ([[Alex Ionescu]])<br />
* Implement KiSwapProcess in ctxswitch.S and add SMP-support and LDT swap support for the future, as well as updating the IOPM base in the TSS. ([[Alex Ionescu]])<br />
* KPROCSES Flags are LONG, not ULONG. ([[Alex Ionescu]])<br />
* Add some missing decoration. ([[Alex Ionescu]])<br />
* NUMA node semantics for KeInitializeProcess are only required on SMP builds. ([[Alex Ionescu]])<br />
* Allow KeInitailizeProcess to receive an argument specifying if alignment faults should be enabled or not. ([[Alex Ionescu]])<br />
* Use KiComputeIopmOffset to get the IopmOFfset instead of setting -1 ([[Alex Ionescu]])<br />
* We only need to update the page directory for the current stack, not the whole ETHREAD. (the page fault will be handled). ([[Alex Ionescu]])<br />
* Release dispatcher lock from DPC level in KiAttachProcess. ([[Alex Ionescu]])<br />
* Add missing decoration/assert to KeAttachProcess, and only acquire APC lock after we've made the invalid attach test. Also acquire dispatcher lock at DPC level here and in KeStackAttachProcess. ([[Alex Ionescu]])<br />
* Loop in KeUnStachDetachProcess to avoid the case where we acquired the APC lock while a kernel APC was pending. Keep releaing the loop and re-attemping acquire until it has been delivered. ([[Alex Ionescu]])<br />
* Add Decoration for *ServiceTable* functions. ([[Alex Ionescu]])<br />
* Re-organize apc.c into private/public functions (no code change). ([[Alex Ionescu]])<br />
* Force Ring 3 state into User APC TrapFrame to maintain system integrity and coherency. Also respect IOPL. ([[Alex Ionescu]])<br />
* Use SEH handling routine just like when handling exceptions, to properly re-direct a crash here. Thanks to KJK again for showing me how to write these kinds of routines. ([[Alex Ionescu]])<br />
* Re-implement KiRequestApcInterrupt in ke_x.h. Make it work by CPU number (as documented) instead of comparing PRCBs. ([[Alex Ionescu]])<br />
* Make NtQueueApcThread use POOL_QUOTA_FAIL_INSTEAD_OF_RAISE and add that flag to our DDK. Also fix the check for SystemThread by looking at the flag, not checking if TEB == NULL. Also fix a memory leak and comment header. ([[Alex Ionescu]])<br />
* Fix comment header in KiInitalizeUserApc. ([[Alex Ionescu]])<br />
* Cleanup RepairList, KiMoveApcState. ([[Alex Ionescu]])<br />
* Fixup comments for KeAreApcsDisabled. ([[Alex Ionescu]])<br />
* Implement and add comment header to KeAreAllApcsDisabled. ([[Alex Ionescu]])<br />
* Fix KeRemoveQueueApc comment header and clean up function. ([[Alex Ionescu]])<br />
* Acquire dispatcher lock at DPC level during ApcListEntry read/write. ([[Alex Ionescu]])<br />
* Fix for Windows Kernel APC Data-Free Local Privilege Escalation Vulnerability (re-initialize the list head after cleaning it, so that the list is circular). ([[Alex Ionescu]])<br />
* Optimize KeFlushQueueApc: we can check if the Kernel-Mode APC list is empty without acquiring the lock. If it's empty, we can quit immediately, if not, then we'll acquire and check it again. For user APCs we always need to acquire the lock, though. ([[Alex Ionescu]])<br />
* Fix comment headers for KeFlushQueueApc, KeInsertQueueApc. ([[Alex Ionescu]])<br />
* ASSERTify KeInsertQueueApc and some formatting fixes. ([[Alex Ionescu]])<br />
* Add new KAPC_ENVIRONMENT mode: InsertApcEnvironment. ([[Alex Ionescu]])<br />
* Fixup KeInitalizeApc like all the other functions. ([[Alex Ionescu]])<br />
* Don't use an expensive 48-byte RtlZeroMemory instead of just clearing two members. ([[Alex Ionescu]])<br />
* Fix lock acquisition/release mismathces in KiInsertQueueApc. ([[Alex Ionescu]])<br />
* Support and document InsertApcEnvironment KAPC_ENVIRONMENT type. ([[Alex Ionescu]])<br />
* Fixup formatting and ASSERTify. ([[Alex Ionescu]])<br />
* Acquire dispatcher lock when insereting an APC into another thread. ([[Alex Ionescu]])<br />
* Use delayed interrupt request on SMP systems (and fixup KiRequestApcInterrupt accordingly). ([[Alex Ionescu]])<br />
* Fix KiDeliverApc prototype for PPC compatibilty. ([[Alex Ionescu]])<br />
* Fixup comment header for KiDeliverApc and KiInsertQueueApc. ([[Alex Ionescu]])<br />
* Set APC trap frame during APC delivery. We actually weren't doing this before (I'm kind of amazed at ROS's previous functionality due to importance of this bug!). ([[Alex Ionescu]])<br />
* Use proper in-stack queued spinlock mechanisms. ([[Alex Ionescu]])<br />
* Make sure that the Kernel APC list didn't become empty while we acquired the APC lock after the first verification. ([[Alex Ionescu]])<br />
* Validate IRQL on return from APC routines, to catch bad code. ([[Alex Ionescu]])<br />
* Fix a critical bug in KiComputeNewPriority. ([[Alex Ionescu]])<br />
* Fix a bug in KiSetPriorityThread which wasn't setting *released = FALSE, which left the var uninitailized and usually = TRUE on the stack. ([[Alex Ionescu]])<br />
* Half-copy KiQuantumEnd from my new scheduler code. Main difference is usage of newly created locks, support for quantum-disable and RT threads, and usage of KiComputeNewPriority. ([[Alex Ionescu]])<br />
* Add the actual missing code to KiQuantumEnd. It's asserted to make sure it'll never execute (yet). ([[Alex Ionescu]])<br />
* Add KiExitDispatcher from my new scheduler code. Same as KiQuantumEnd, added an assertion to make sure it doesn't enter in code paths that shouldn't yet happen. ([[Alex Ionescu]])<br />
* Implement and export HalClearSoftawareInterrupt (currently implemented to match the hacked ROS version, no new version written yet). ([[Alex Ionescu]])<br />
* CPU Idle Loop Rewrite: Runs with interrupts off most of the time, except when it does interrupt cycling at each iteration. ([[Alex Ionescu]])<br />
* CPU Idle Loop Rewrite: Calls KiRetireDpcList directly, instead of going through KiDispatchInterrupt. ([[Alex Ionescu]])<br />
* CPU Idle Loop Rewrite: Support for new scheduler and immediate thread switch. ([[Alex Ionescu]])<br />
* CPU Idle Loop Rewrite: Support for Idle Scheduler. ([[Alex Ionescu]])<br />
* CPU Idle Loop Rewrite: Support for HAL/ACPI/CPU Driver-defined "Idle Function". currently disabled and STI+HLT harcoded instead. ([[Alex Ionescu]])<br />
* Removed ps/idle.c and dumped the hack code directly in psmgr.c wher eit's used. ([[Alex Ionescu]])<br />
* Implement HalProcessorIdle. ([[Alex Ionescu]])<br />
* Fix KiIdleLoop to actuall load the PCR in EBX. It was using a completely random value. ([[Alex Ionescu]])<br />
* Call the Processor Idle Routine now, isntead of hard-coding STI+HLT. This routine had already been setup during bootup by PoInitailizePrcb. ([[Alex Ionescu]])<br />
* Implemented PopIdle0 and made it call HalProcessorIdle. No performance/throttling is done yet. ([[Alex Ionescu]])<br />
* Implement KiReleaseProcessLockFromDpcLevel and use it in KeTerminateThread. We were lowering to PASSIVE during thread termination, and then doing a context switch at PASSIVE, which you can guess is pretty bad. ([[Alex Ionescu]])<br />
* Implement KiAcquireDeviceQueueLock/KiReleaseDeviceQueueLock for locking KDEVICE_QUEUEs, since they can be used from Threaded DPCs which don't execute at DISPATCH_LEVEL, so the lock needs to be acquired differently. ([[Alex Ionescu]])<br />
* Add ASSERT_DEVICE_QUEUE and ASSERTify + reformat kqueue.c. ([[Alex Ionescu]])<br />
* Implement KeRemoveByKeyDeviceQueueIfBusy. ([[Alex Ionescu]])<br />
* Cleanup exception.c ([[Alex Ionescu]])<br />
* Remove dangerous/broken KeGetCurrentIrql() define. ([[Alex Ionescu]])<br />
* Handle STATUS_CALLBACK_POP_STACK and add the status to ntstatus.h ([[Alex Ionescu]])<br />
* Also handle future support for GDI Batch flushing. ([[Alex Ionescu]])<br />
* Implement KxAcquireSpinLock/KxReleaseSpinLock for inline acquisition of spinlocks, SMP, UP and DBG. (on DBG builds, we OR the spinlock value with the KTHREAD address, then compare on release.) ([[Alex Ionescu]])<br />
* Make In-Stack QSLs a complete no-op in UP, we were still touching some fields. ([[Alex Ionescu]])<br />
* Added inlined routines for setting/getting CR, and also getting GDTR, IDTR, LDTR, TR. Used to implement KiSaveProcessorControlState. ([[Alex Ionescu]])<br />
* Implemented KeSaveStateForHibernate. ([[Alex Ionescu]])<br />
* Fix KeSetPriorityAndQuantumProcess to use Queued Spinlocks and KiAcquireProcess/ThreadLock when needed. ([[Alex Ionescu]])<br />
* Implement KiUnlinkThread to unlink a thread from its wait blocks, handle queue and timer activation/removal. ([[Alex Ionescu]])<br />
* Don't play with priorities in KiAbortWaitThread anymore, since we'll soon support Win2003 delayed "adjust increment" functionality, so that the code is not repeated many times. ([[Alex Ionescu]])<br />
* Rename KiAbortWaitThread to KiUnwaitThread, make it use KiUnlinkThread and delayed adjustment. ([[Alex Ionescu]])<br />
* Implement KxUnwaitThread and KxUnwaitThreadForEvent, optimized versions of KiWaitTest that can be used in special circumstances (notification events, thread termination, process signalling). ([[Alex Ionescu]])<br />
* Optimize KeSetEvent by handling signaled notification events without acquiring the dispatcher lock, and by using new inlined routines described above. ([[Alex Ionescu]])<br />
* Reimplement KeSetEventBoostPriority properly to actually do boosting. ([[Alex Ionescu]])<br />
* Fixup KeRundownQueue with a more typical/proper LIST_ENTRY loop. ([[Alex Ionescu]])<br />
* Implement KiAcquireDispatcherObject, KiReleaseDispatcherObject, used on SMP for dispatcher objects which use the volatile long member in the dispatcher header (such as gates). ([[Alex Ionescu]])<br />
* Implement KiTryThreadLock which tries to acquire the lock but exits if it can't, isntead of looping. ([[Alex Ionescu]])<br />
* Re-factor KeWaitForGate to make it SMP-safe by acquiring various locks when required. ([[Alex Ionescu]])<br />
* Fixed up KeSignalGateBoostPriority so it can also be SMP-safe, and also fix what exactly happens when the gate is signaled (directly make the other thread ready instead of doing a KiUnwaitThread on it). ([[Alex Ionescu]])<br />
* Split KxAcquireSpinLock/KxReleaseSpinLock into SMP vs UP like the other routines. ([[Alex Ionescu]])<br />
* Implement KeReadyThread that wraps KiReadyThread so that \ps doesn't have to worry about dispatcher lock. ([[Alex Ionescu]])<br />
* Make sure all a process's threads are ready if they're on the ready queue, during attachment. ([[Alex Ionescu]])<br />
* Merge in KiReadyThread from scheduler code, with a small code change to keep working with ROS's scheduler lists instead. ([[Alex Ionescu]])<br />
* Converted some macros to inlined functions. ([[Alex Ionescu]])<br />
* Modified KeDelayExecutionThread and KeWaitForSingleObject to be much simpler and readable, reducing some of the loops and continues, and 4th-level indentation. Also packed up common wait initialization at the beginning of the function, and into two new inline functions: KxDelayThreadWait and KxSingleThreadWait. No actual semantic changes, just re-ordering. ([[Alex Ionescu]])<br />
* Rename KiUnwakeQueue to KiActivateWaiterQueue. ([[Alex Ionescu]])<br />
* Implement most of the Ring 3/0 Invalid Opcode handler. Stops apps like mIRC from BSODing the system anymore. ([[Alex Ionescu]])<br />
* Fix one of the oldest hacks in ReactOS: KeGetCurrentThread() and PsGetcurrentProcess used to be NULL during early boot stage. We also didn't have an official idle therad/process. Also system intialization was not in its sepearte thread. Changes: ([[Alex Ionescu]])<br />
* Implemented SeAssignPrimaryToken. ([[Alex Ionescu]])<br />
* Setup Boot/System Token for Idle Process in SeInit2. ([[Alex Ionescu]])<br />
* Remove ROS hack in SeCaptureSubjectContextEx. ([[Alex Ionescu]])<br />
* Call SeAssignPrimaryToken in PspInitializeProcessSecurty when called for the Initial Process creation. ([[Alex Ionescu]])<br />
* Implement PsInitiailizeQuotaSystem and set PspDefauptQuotaBlock for the idle process so that it can be used for the initial process. ([[Alex Ionescu]])<br />
* Rewrite Process Manager Phase 0 initialization from scratch, to create a new initial system process and thread which will be used for Phase 1 (in ROS, phase 2) initialization of the executive. ([[Alex Ionescu]])<br />
* Fix a bug in PspCreateProcess which was using an uninitialized value of SectionObject in some cases, instead of NULL. ([[Alex Ionescu]])<br />
* Call PsInitailizeQuotaSystem from ObInit, and also create the system handle table inside the idle process, and make it the ObpKernelHandleTable. ([[Alex Ionescu]])<br />
* Do Executive Phase 0 Initialization at APC_LEVEL. ([[Alex Ionescu]])<br />
* Start idle thread at HIGH_PRIORITY then lower it to 0 once the Initial Thread is setup, so that it can run, then keep priority to 0 at DISPATCH_LEVEL and jump into idle loop code. ([[Alex Ionescu]])<br />
* Add NtYieldExecution to idle loop code since it's now being used. ([[Alex Ionescu]])<br />
* Fix IoGetCurrentProcess which was previously hacked. ([[Alex Ionescu]])<br />
* Remove some checks for Thread == NULL in ke_x.h, since this is now impossible. ([[Alex Ionescu]])<br />
* Split Phase 0/1 initialization in ex\init.c, since one runs in a separate thread now. Also don't lower IRQL to PASSIVE_LEVEL anymore (run at APC_LEVEL). ([[Alex Ionescu]])<br />
* Optimize PspLookupUserEntrypoints to use static ANSI_STRINGs instead of building them at runtime. ([[Alex Ionescu]])<br />
* Fix mapping/loading of the System DLL so that it's loaded as executable code, not read-only code. Also fix a handle leak of the section, and re-factor some code into smaller shared functions to reduce code duplication. ([[Alex Ionescu]])<br />
* Create a KD-compatible KiDebugRoutine and piggyback KDBG on it. ([[Alex Ionescu]])<br />
* Create separate GDB entry hack routine. ([[Alex Ionescu]])<br />
* Fix booting with /BREAK and continuing after an INT3/ASSERTion. ([[Alex Ionescu]])<br />
* A missing "return" statement to KiDispatchException which was causing all user-mode exceptions to become second-chance and thus crash the app. mIRC works again, and probably numerous other apps (mozilla as well i think, since it had the same issue) ([[Alex Ionescu]])<br />
* Fix a bug in KeRaiseUserExceptionDispatcher which was causing us not to set the Exception Address (EIP) in the EH record. ([[Alex Ionescu]])<br />
* Fix a terrible stack corruption bug in KeRaiseUserExceptionDispatcher which was causing us to eventually fuck up the stack in user mode (0x14 bytes instead of 0x50 bytes were reserved). ([[Alex Ionescu]])<br />
* Protect User-mode Callbacks with SEH, and use STATUS_POP_CALLBACK_STACK. ([[Alex Ionescu]])<br />
* Fix another nasty stack corruption bug in user-mode APC delivery. ([[Alex Ionescu]])<br />
* Protect User-mode APC delivery with SEH. ([[Alex Ionescu]])<br />
* Fix SEH handlers to return EXCEPTION_EXECUTE_HANDLER isntead of ExceptionContinueSearch. ([[Alex Ionescu]])<br />
* Fix some insidious bugs in exception handling, mostly related to the art of unwinding (RtlUnwind). ([[Alex Ionescu]])<br />
* Can't name specifics, but probably fixes multiple SEH/application bugs/regressions since about 6-8 months ago. Fixes my personal SEH test from 22 failures/crashes/BSODs to 22 succeesses... ([[Alex Ionescu]])<br />
* Also fixes some crashes in kernel-kqemu mode. ([[Alex Ionescu]])<br />
* Add code to wait for SwapBusy == FALSE on SMP. ([[Alex Ionescu]])<br />
* Add stub code to check for new PCR fields in 2003. Currently disabled because thread swap code still uses XP fields. ([[Alex Ionescu]])<br />
* Check for active DPCs at the end of thread swap, not at the beginning. ([[Alex Ionescu]])<br />
* Set PRCB->IdleThread outside of the thread swap routine. ([[Alex Ionescu]])<br />
* Don't set the thread state to running inside the swap routine, we already do it outside. ([[Alex Ionescu]])<br />
* Stop doing cli/sti doing context switching (For now, since it's only needed for FPU, which isn't yet done). ([[Alex Ionescu]])<br />
* Stop using XP KPCR fields for storing stack values, they're not used inside the kernel anymore and now have 2003 values (WMI tracing, etc). ([[Alex Ionescu]])<br />
* Move parts of the process switch (LDT reload) out-of-line. ([[Alex Ionescu]])<br />
* Don't update CR3 in KTSS, it's not used. ([[Alex Ionescu]])<br />
* Don't read a useless stack pointer anymore. ([[Alex Ionescu]])<br />
* Update KTSS_ESP0 near the end of context switching, not at the beginning anymore. ([[Alex Ionescu]])<br />
* Same for IOPM and I/O Redirection Map Base Address. ([[Alex Ionescu]])<br />
* Fix some bugs in LDT switch (EDI->EBP) ([[Alex Ionescu]])<br />
* Turn simple bugcheck into BugCheckEx with information that the helpfile says it should have. ([[Alex Ionescu]])<br />
* Assert that the current CPU is the one the thread is supposed to be running on. ([[Alex Ionescu]])<br />
* Get CR0, read the KTHREAD NPX State, disable interrupts and verify if the NPX state is dirty. If it is, then reload CR0 with the new value. Re-enable interrupts. This sequence should make FPU work during context switching, but I haven't tested yet. At the very least, it should get rid of TRAP_FAULT_UNKNOWN blue screen. ([[Alex Ionescu]])<br />
* Set TEB in the same time as the selector is being configured, not way earlier. ([[Alex Ionescu]])<br />
* On SMP systems, update KPROCESS->ActiveProcessors and assert their validty. Needed for a similar assertion and check in KiSwapProcess which we already have. ([[Alex Ionescu]])<br />
* Also on SMP, make sure to clear the KTHREAD's swap-busy lock after the actual swap has been done. ([[Alex Ionescu]])<br />
* Implement Trap 16: Math Coprocessor Fault. Happens during Floating Point precision error test that I wrote. Simply calls shared NPX handler in KiTrap7. ([[Alex Ionescu]])<br />
* Implement some extra checks in KiTrap7 and start coding the NPX shared handler. We *almost* have full FPU support now... (trying to get this done for tomorrow morning so that Greatlord can sent me the 15 000$ he promised...) ([[Alex Ionescu]])<br />
* Implement FPU Exception Handler. ([[Alex Ionescu]])<br />
* We can now properly handle FPU faults (wrote a small test for invalid fpu precision). ([[Alex Ionescu]])<br />
* Use LOADER_PARAMETER_BLOCK everywhere in ReactOS except freeldr.c ([[Alex Ionescu]])<br />
* Implemented KiRosFrldrLpbtoNtLpb to do a lightweight conversion and setup. Next patches will try to get rid of PLOADER_MODULE and use LDR_DATA_TABLE_ENTRY as well as increase bootstrap compatibility. ([[Alex Ionescu]])<br />
* Fix some bugs in intrin.h (missing __inline__ statments in some locations, which were causing warnings due to "static"). ([[Alex Ionescu]])<br />
* Remove intrinsics in winddk.h since they're now properly done in intrin.h (thanks KJK!!!) ([[Alex Ionescu]])<br />
* Make freeldr.c setup the boot KTSS like NTLDR does, so that the GDT entry for it is valid (and remove the code that was doing this from Ki386InitializeTss) ([[Alex Ionescu]])<br />
* Refactor KiSystemStartup to use 100% dynamic pointers and machine data queried from the Loader Block or actual GDT/IDT/Selectors in memory, isntead of hard-coded ntoskrnl offsets. This makes it possible to be loaded by NTLDR, which sets these system structures up by itself. (we do it in freeldr.c, as hacks). ([[Alex Ionescu]])<br />
* Add loop around the KiFreezeExecutionLock before continuing OS boot. ([[Alex Ionescu]])<br />
* Only check for break-in on the Boot CPU. ([[Alex Ionescu]])<br />
* Set priority to 0 *Before* lowering to DISPATCH_LEVEL. ([[Alex Ionescu]])<br />
* Also force interrupts to be enabled before lowering IRQL. ([[Alex Ionescu]])<br />
* Also set the idle thread's wait irql to DISPATCH_LEVEL (might fix some odd crashes) and set it as Running on UP builds (on SMP builds this is done in other code). ([[Alex Ionescu]])<br />
* Save processor state in the PKPRCB in KiInitializeKernel. ([[Alex Ionescu]])<br />
* Set the booting CPU as idle if no next thread was scheduled. ([[Alex Ionescu]])<br />
* Raise IRQL to HIGH_LEVEL upon exiting KiInitializeKernel to match the re-lowering to DISPATCH_LEVEL in KiSystemStartup (and subsequent interrupt flush). ([[Alex Ionescu]])<br />
* KiRosFrldrLpbtoNtLpb: Create a LDR_DATA_TABLE entry for each module (driver, hal, kernel) and properly fill it out and insert it into the loader block. ([[Alex Ionescu]])<br />
* KiRosFrldrLpbtoNtLpb: Use the NLS data block to hold pointers to the NLS tables. ([[Alex Ionescu]])<br />
* KiRosFrldrLpbtoNtLpb: Use the ->RegistryBase/Length loader block members to hold pointers to the SYSTEM hive. ([[Alex Ionescu]])<br />
* KiRosFrldrLpbtoNtLpb: Create a MEMORY_ALLOCATION_DESCRIPTOR for each type of memory currently used (LoaderNlsData, LoaderRegistrydata, LoaderSystemCode, LoaderHalCode, LoaderBootDriver). ([[Alex Ionescu]])<br />
* Revert LOADER_PARAMETER_BLOCK change, it actually really is PNLS_DATA_BLOCK. ([[Alex Ionescu]])<br />
* Fully use KeLoaderBlock->InLoadOrderListHead for driver loading and symbol lookups, instead of KeLoaderModules/KeLoaderModuleCount. Still not 100% compatible with NTLDR (since it uses BootDriverListHead with a special structure), but much closer to a portable design that doesn't rely on static kernel data. ([[Alex Ionescu]])<br />
* Change some internal functions to use UNICODE_STRING instead of PCHAR since this is how LdrEntry->BaseDllName is, and also it's closer to NT Design. ([[Alex Ionescu]])<br />
* Remove all the remaining code in boot.S and make KiRosPrepareForSystemStartup fastcall. Now NtProcessStartup just does a jmp to KiRosPrepareForSystemStartup without any other code. ([[Alex Ionescu]])<br />
* Use freeldr's stack during all of freeldr.c, and only switch to the boot stack in KiSystemStartup before calling KiInitializeKernel. This is what NT does as well (it piggybacks on NTLDR's stack until then). This allowed us to clean boot.S and now we can boot from NTLDR properly. ([[Alex Ionescu]])<br />
* Add two more lines in boot.S which detect boot-by-NTLDR and jump into KiSystemService (I thought FreeLdr didn't use the entrypoint, but it looks like it does, so this hack is needed). Detection is done by checking for the high bit in the PLOADER_PARAMETER_BLOCK pointer, which will be set on NT. ([[Alex Ionescu]])<br />
* Fix a double bug in KiSystemStartup. First, we were setting KPCR->Number instead of KPRCB->Number. Second, we were using KeGetPcr instead of __writefsdword. It worked on ROS because KeGetPcr is hard-coded to ROS's KPCR buffer. ([[Alex Ionescu]])<br />
* Clear KPCR->TEB during bootstrap as well. ([[Alex Ionescu]])<br />
* Use KPCR_PROCESSOR_NUMBER instead of 0x130. ([[Alex Ionescu]])<br />
* Put IDT in RW .data section ([[Alex Ionescu]])<br />
* Fix Ki386InitializeTss to properly set Boot TSS descriptor data (set it to 32-bits). Also properly setup the DF/NMI Task Gates in the IDT. ([[Alex Ionescu]])<br />
* Fix Ki386InitializeTss to use dynamic GDT calculated from KiGetMachineBootPointers instead of static internal address. Now NTLDR boots us all the way to HalInitializeProcessor. ([[Alex Ionescu]])<br />
* Use __readfsdword instead of de-referencing the Boot PCR, which is not queried for Application CPUs. (And put the Goto back where it was). Thanks to Thomas Weidenmueller for noticing. ([[Alex Ionescu]])<br />
* Implement ExpIsLoaderValid to validate the LOADER_PARAMETER_BLOCK's extension for the right size and version (we currently support 5.2 and over). ([[Alex Ionescu]])<br />
* Add code in KiRosFrldrLpbToNtLpb to setup a LOADER_PARAMETER_EXTENSION and set the right version and size. ([[Alex Ionescu]])<br />
* Initialize the per-CPU PRCB Paged/NPaged lookaslide pool lists. ([[Alex Ionescu]])<br />
* Add code to support application CPUs booting in ExpInitializeExecutive, and pass the loaderblock as a parameter. ([[Alex Ionescu]])<br />
* Add setupblk.h from TinyKRNL with all the definitions for NT's SETUPLDR structures (SETUP_LOADER_BLOCK and hardware configuration stuff). Update KiRosFrldrLpbToNtLpb to setup the Flags field of this block to "Text-Mode Setup Active" when we know that we're in ROS text mode. ([[Alex Ionescu]])<br />
* Update ExpInitializeExecutive to check for a valid setup block and detect text-mode and network installation modes. Use ExpInTextModeSetup instead of SetupMode variable, to make detection compatible with NTLDR. ([[Alex Ionescu]])<br />
* Do MmInit1 much earlier in the boot phase (right at the beginning of ExpInitalizeExecutive). This gives us access to things like SharedUserData, which NT has since NTLDR. Will try moving it up even higher. ([[Alex Ionescu]])<br />
* Fix a bug in ExInitPoolLookasidePointers which was making us overwrite low-memory. ([[Alex Ionescu]])<br />
* Initialize NLS tables during Phase 0, so that the associated APIs can work earlier. ([[Alex Ionescu]])<br />
* Bugcheck if HAL Phase 0 initialization failed, and force interrupts enabled after the HAL is ready. ([[Alex Ionescu]])<br />
* Un-optimize KeGetPcr and make it use fs:20h instead of hard-coding the 0xFF.... address, because someone decided that ROS should have a different KPCR address then NT. ([[Alex Ionescu]])<br />
* This gets NTLDR working with ReactOS and I can boot all the way to MmInit1 (which fails due to missing KeMemoryMap & freeldr data). ([[Alex Ionescu]])<br />
* KiRosFrldrLpbToNtLpb: Removing the ARC Boot path and splitting it into the ARC Boot Device Name, the ARC HAL Device Name, and the NT Boot and HAL Path Names, saved in their respective LoaderBlock pointers. ([[Alex Ionescu]])<br />
* KiRosFrldrLpbToNtLpb: Converting every slash to a space. ("/DEBUGPORT" -> " DEBUGPORT") ([[Alex Ionescu]])<br />
* KiRosFrldrLpbToNtLpb: Now we can fully parse and read NTLDR command lines. ([[Alex Ionescu]])<br />
* Use LoaderBlock->ArcDeviceNamePath & friends instead of the command line. ([[Alex Ionescu]])<br />
* Stop depending on slashes, and instead use strstr for parameters. ([[Alex Ionescu]])<br />
* Implement Phase 0 Ex initialization (Resource, Lookaside initialization) and generic Ex initialization routine. ([[Alex Ionescu]])<br />
* Clear the crypto exponent on boot-up. ([[Alex Ionescu]])<br />
* Set default global flags for checked builds. ([[Alex Ionescu]])<br />
* Set NtSystemRoot (SharedUserData) to C:<NT BOOT PATH> on startup. ([[Alex Ionescu]])<br />
* Cleanup lookas.c file and implement routines to initialize the system lookaside list in phase 0. ([[Alex Ionescu]])<br />
* Setup memory limits in shared user data. ([[Alex Ionescu]])<br />
* Loop security descriptors to find NLS data and make a copy of it in kernel pool, because the NLS buffer from NTLDR will be freed on NT. Also discovered a bug in Freeldr where it doesn't allocate ths NLS files sequentially, leaving a hole of 0x1000 between them. Added a hack to compensate (won't break NTLDR booting, just will waste 8KB of memory). ([[Alex Ionescu]])<br />
* Allocate the system call count table on checked builds. ([[Alex Ionescu]])<br />
* Refactor Ob/Se booting to match more closely NT, and so that we can do Se initialization in one shot. ([[Alex Ionescu]])<br />
* Combine SeInit1 and SeInit2 into SeInit since both can be done together now. ([[Alex Ionescu]])<br />
* Call PsInitSystem instead of PspInitPhase0, since PsInitsystem is the "external" phase-choosing routine. ([[Alex Ionescu]])<br />
* Implement ExComputeTickCountMultiplier to create a 24-bit precision remainder + whole integer of the ms/clock tick used in SharedUserData. ([[Alex Ionescu]])<br />
* Set the OS version and Machine Type (i386/PPC (<3 Arty) in SharedUserData. ([[Alex Ionescu]])<br />
* Move some HAL calls in Phase 2 (actually Phase 1...), same for KeInit2. ([[Alex Ionescu]])<br />
* Break into KDBG a bit earlier. ([[Alex Ionescu]])<br />
* Make Kernel initialization (KeInit2) portable/more complete. KeInit2 becomes KeInitSystem, the portable part, with a call to KiInitMachineDependent, the arch-specific part. ([[Alex Ionescu]])<br />
* Do all CPU configuration through IPIs and synchronize with potential multiple CPUs. ([[Alex Ionescu]])<br />
* Add mtrr.c and patpge.c for future support of MTRR, AMD K6 MTRR, PGE and PAT support, with initilization calls in each of them (which only print out a "Sorry" message). ([[Alex Ionescu]])<br />
* Add some stubbed code for extra initizliation to do later once some detection things are fixed. ([[Alex Ionescu]])<br />
* Add KF_XMMI64 feature flag for SSE2 and detect it. ([[Alex Ionescu]])<br />
* Detect Hyper-Threading and set Local APIC ID (put back Thomas's code that he added in an old revision and that I had accidentally removed and forgotten to re-convert into the new KiGetFeatureBits function). ([[Alex Ionescu]])<br />
* Add code to set the kernel MX Csr Mask in the FX Save Area. ([[Alex Ionescu]])<br />
* Startup the sysenter handler on the DPC stack. ([[Alex Ionescu]])<br />
* Detect and notify users with broken Pentiums. ([[Alex Ionescu]])<br />
* Do some NPX checks to forcefully disable any FPU flags that might be set (SSE, MMX, 3DNOW) if the NPX is disabled. ([[Alex Ionescu]])<br />
* Fix KUSER_SHARED_DATA in winddk.h ([[Alex Ionescu]])<br />
* Scanfor NOEXECUTE/EXECUTE/OPTIN/OPTOUT/ALWAYSON/ALWAYSOFF load strings and set the appropriate NX policy in KUSER_SHARED_DATA as well as kernel CPU Feature flags. ([[Alex Ionescu]])<br />
* Implement XPSP2+ syscall stub that uses indirect pointer instead of executable code inside KUSER_SHARED_DATA. ([[Alex Ionescu]])<br />
* Implement ExpInitNls to initialize the NLS Section using the new semantics recently implemented. Works pretty much like the previous code in rtl/nls.c except it uses the new variable names as well as maps a view of the NLS Table into the system process.c ([[Alex Ionescu]])<br />
* Delete rtl/nls.c and all the associated deprecated code. ([[Alex Ionescu]])<br />
* Do MmInit1 and SharedUserData stuff *after* initializing the initial thread, to avoid an ASSERT during bootup. ([[Alex Ionescu]])<br />
* Use KeLoaderBlock for registry hive loading. ([[Alex Ionescu]])<br />
* Get rid of the CACHED_MODULE array and associated structures and stop using them, get rid of ParseAndCacheLoadedModules. Stop using KeLoadedModules and KeLoadedModuleCount outside of freeldr.c. ([[Alex Ionescu]])<br />
* Except for MmInit1, the kernel should now be totally isolated from FreeLDR-specific data. ([[Alex Ionescu]])<br />
* Rewrite ExpLoadInitialProcess by inlining and simplifying what the call to RtlCreateProcsesParameters should do, and also create our own custom environment with the same arguments that NT's smss gets. ([[Alex Ionescu]])<br />
* This optimizes booting as well as gets use the differnet SESSIONY_INITIALIZATION_FAILED, where Y is a number representing which step of the process parameter/envieonment creation failed. ([[Alex Ionescu]])<br />
* Put all Phase 1 Ex* Initialization in ExpInitSystemPhase1 and clean up associated deprecated calls. ([[Alex Ionescu]])<br />
* Call ExpInitializePushLocks since we weren't doing this before. ([[Alex Ionescu]])<br />
* Get rid of the completely convoluted way that Phase 1 initialization was being ended, with umpteen events and waits and timeouts all synchronized from user-mode and do a simple 5-second wait to determine if smss started OK or not. ([[Alex Ionescu]])<br />
* Promote the Phase 1 initialization thread by jumping directly into the zero-page thread, and remove manual zero-page thread initialization code since we simply jump into its main routine. ([[Alex Ionescu]])<br />
* Make ExpInitNls responsible for NLS initialization in Phase 0 as well, to clean up the code in ExpInitailizeExecutive a bit. ([[Alex Ionescu]])<br />
* Initialize the system time/clock in Phase 1, not in Phase 0. ([[Alex Ionescu]])<br />
* Do HAL Phase1 initialization as the first step in Phase 1 initialization, then initialize the system clock (since the HAL's RTC is now configured). ([[Alex Ionescu]])<br />
* Do Ob Phase 1 init in Phase 1 initialization, not in phase 0. ([[Alex Ionescu]])<br />
* Do Ke Phase 1 init after HAL, Ob and Ex phase 1 inits. ([[Alex Ionescu]])<br />
* Initialize NLS for Phase 1 after Ke Phase 1, instead of much later. ([[Alex Ionescu]])<br />
* Implement ExInitializePushLock and ExConvertPushLockSharedToExclusive macros. ([[Alex Ionescu]])<br />
* FreeLDR: Create the loader entry for ntoskrnl now that FreeLDR PE-loads it since last year. This lets us remove a large hack in ntoskrnl which was manually creating the entry and filling it in. ([[Alex Ionescu]])<br />
* Rename some LastKrnl... addresses into MmFreeLdr to easily identify them, and remove the need to use MmFreeLdrMemLower and MmFreeLdrPageDirectoryStart. ([[Alex Ionescu]])<br />
* Remove the static KERNEL_BASE definition based on a GCC-specific external. Everything now uses the actual module entry's saved base address. ([[Alex Ionescu]])<br />
* Fix a Ps Initialization hack and properly set the boot PDE. ([[Alex Ionescu]])<br />
* Add a hack for NTLDR's lack of MmFreeLdrMemHigher and MmFreeLdrPageDirectoryEnd. ([[Alex Ionescu]])<br />
* In NTLDR boot, try to get the first kernel physical address from the loader entries. ([[Alex Ionescu]])<br />
* Fixup HAL's image base in the loader parameter block, since we load it at a different place then freeldr tells us. ([[Alex Ionescu]])<br />
* Stub LdrVerifyMappedImageMatchesChecksum. ([[Alex Ionescu]])<br />
* Separate locating the system DLL from initializing it. ([[Alex Ionescu]])<br />
* Implement split-phase PsInitSystem for Phase 0 and 1, and make system dll initialization as part of phase 1. ([[Alex Ionescu]])<br />
* Add MmVerifyImageIsOkForMpUse and MmCheckSystemImage to validate the system DLL. ([[Alex Ionescu]])<br />
* Add a separate bugcheck for each failure in PsLocateSystemDll, matching with the NT bugchecks that would occur. ([[Alex Ionescu]])<br />
* Inline and make some slight correctiions to KiInitailizeSystemClock, since it's based on the Ex subsystem, not Ke. Add code for boot-time timezone bias, but currently disabled because I need to implement a function to read configuration registry data at startup. ([[Alex Ionescu]])<br />
* Improve Init bugchecks to give the exact module that failed. Add Kd initilization in the same block as the other subsystems. ([[Alex Ionescu]])<br />
* Rename and re-arrange some initlization calls. ([[Alex Ionescu]])<br />
* More re-shuffling of initialization calls, including enabling access to the blue screen much much earlier (no point in doing it so late, but this change is not that useful since soon we'll have bootvid). ([[Alex Ionescu]])<br />
* Split Po init in two, so the early Po init (which we'll need to do eventually) doesn't depent on the later Po init (which uses a PnP notification which depends on the Io system). ([[Alex Ionescu]])<br />
* Make I/O initialize quite a bit later. ([[Alex Ionescu]])<br />
* Part 1 of ARC boot cleanups/changes: Create a valid \\SystemRoot symbolic link as the system is booting, which points to the ARC name, then, once drivers have loaded, re-assign it to the proper NT Device name. Added proper security descriptors and flags to symbolic links, as well as proper bugchecks when required. ([[Alex Ionescu]])<br />
* Kept and cleaned up the ROS hack for CD-ROM boot. ([[Alex Ionescu]])<br />
* Part 2 of ARC boot changes: Major modifications done to the existing code, as well as re-formatting and cleanup. Floppy ARC names are not created anymore (they don't exist), and CD-ROM ARC name is only created 1) when there is a boot CD and 2) only for the boot CD. This mimics NT functionality. ([[Alex Ionescu]])<br />
* Optimize some code paths, mostly by not querying the whole GET_DRIVE_GEOMETRY IRP twice and reducing some buffer usage. Also re-factor some code better into smaller functions. ([[Alex Ionescu]])<br />
* Document and work around currently FreeLDR incompatibility (lack of ARC_DISK_INFORMATION) data in LoaderBlock. ([[Alex Ionescu]])<br />
* Have FreeLDR fill out ARC_DISK_SIGNATURE information for each detected disk, as it's filling the registry. ([[Alex Ionescu]])<br />
* Add code to KiRosFrldrLpbToLpb to convert this array to the official ARC_DISK_INFORMATION structure that contains LIST_ENTRYies for each ARC_DISK_SIGNATURE, and initialize the ArcDiskSignatureListHead. ([[Alex Ionescu]])<br />
* Greatly simplify and optimize IoCreateArcNames by using ARC data from FreeLDR/NTLDR (now nearly 100% compatible!) instead of querying registry data (which FreeLdr had already set up, so we cached those values like ntldr does). ([[Alex Ionescu]])<br />
* Part 2.5 of ARC Boot changes. Re-factor IoCreateArcNames not to use a list-entry of detected disk from pool that gets looped and de-referenced, but instead use a simple loop which calls a function that gets disk information one-by-one (IopGetDiskInformation), so that it's used on the spot instead of allocated, linked, and retrieved later. ([[Alex Ionescu]])<br />
* Inline IopAssignArcNamesToDisk to reduce some stack size abuse and too much parameter shuffling ([[Alex Ionescu]])<br />
* Optimize IopApplyRosCdromArcHack by not searching for the second copy of ntoskrnl if we already found the first. ([[Alex Ionescu]])<br />
* Also optimize stack usage by only using an ANSI buffer instead of having another Unicode buffer and unicode strings. Saves 530 bytes of stack. ([[Alex Ionescu]])<br />
* ARC Boot Rewrite: Rename IoCreateArcNames to IopCreateArcNames and set it to NTAPI, as well as pass the loader block as a parameter. ([[Alex Ionescu]])<br />
* ARC Boot Rewrite: Reduce buffers to 128 bytes, since ARC Paths don't get longer then that. ([[Alex Ionescu]])<br />
* ARC Boot Rewrite: Optimize stack usage by using a single ANSI_STRING instead of 3 or 4. ([[Alex Ionescu]])<br />
* ARC Boot Rewrite: Optimize stack usage by using a single ansi buffer, not 2 or more. ([[Alex Ionescu]])<br />
* Remove InitSharedUserDataPage since this entire function is not needed anymore due to the recent ARC improvements. ([[Alex Ionescu]])<br />
* Call IoAssignDriverLetters with the proper parameters, and give it a chance to update the SystemRoot path (although our version doesn't yet do this). ([[Alex Ionescu]])<br />
* Fix a pretty bad stack/memory corruption bug related to IoReassignSystemRoot. ([[Alex Ionescu]])<br />
* Combine IoInit2 and IoInit3 into IoInitSystem, and make it return a BOOLEAN, and handle error with the appropriate IO1_INIT_FAILED bugcheck. Will combine IoInit1 soon. ([[Alex Ionescu]])<br />
* Initialize the registry in one shot, and allow it to fail and do the associated CONFIG_INIT_FAILED bugcheck. ([[Alex Ionescu]])<br />
* Initialize Io in one shot, with IoInitSystem. ([[Alex Ionescu]])<br />
* Locate the system DLL a bit later, since on the boot CD this creates a small incompatibility due to the wrong path being in use. ([[Alex Ionescu]])<br />
* Bootvid rewrite by Filip Navara (with some fixes by myself) ([[Alex Ionescu]])<br />
* HAL DMA enhancements by Filip Navara. ([[Alex Ionescu]])<br />
* CSRSS Console enhancements by Filip Navara. ([[Alex Ionescu]])<br />
* Win32k Primitive Queue/Input/Painting/Focus enhancements by Filip Navara. ([[Alex Ionescu]])<br />
* Other misc win32k/CSR bug fixes by Filip Navara. ([[Alex Ionescu]])<br />
* Merge some parts of IoInitSystem in the same main function instead of calling out to 10 external modules. ([[Alex Ionescu]])<br />
* Re-factor some code into smaller functions. ([[Alex Ionescu]])<br />
* Don't create some Object Directories twice, since now ExpCreateSystemRootLink does some of them. ([[Alex Ionescu]])<br />
* Add some failure paths to I/O Init. ([[Alex Ionescu]])<br />
* Implement a function to mark the boot partition DO_SYSTEM_BOOT_PARTITION in order to better catch some bugchecks. ([[Alex Ionescu]])<br />
* Combine PnpInit1/2 since they were called one after the other. ([[Alex Ionescu]])<br />
* Load RAW driver while loading boot drivers. ([[Alex Ionescu]])<br />
* Cleanup IoInitSystem a bit more. ([[Alex Ionescu]])<br />
* Set OBJ_OPENLINK invalid for core object types. ([[Alex Ionescu]])<br />
* Initialize symbolic link in-line with other core object types. ([[Alex Ionescu]])<br />
* Use the SePublicDefaultUnrestrictedSd directly instead of building another SD. ([[Alex Ionescu]])<br />
* Create core directory objects with Nt* functions instead of Ob*, to insure full accounting and error-handling. ([[Alex Ionescu]])<br />
* Create core objects with OBJ_CASE_INSENSITIVE. ([[Alex Ionescu]])<br />
* Fix the huge ObInit hack which was manually inserting Directory and Type object types in the type directory, and now loop the type list. Now we don't skip the Process, Token, Thread, Job, Section types anymore. ([[Alex Ionescu]])<br />
* Support Quota Information during object allocation and deallocation isntead of ignoring it. ([[Alex Ionescu]])<br />
* Use interlocked decrement when touching the object type (since it's a shared structure. We don't use the lock yet, but we won't for this anyways, since it's a simple lockable operation). ([[Alex Ionescu]])<br />
* Use the right object key when freeing the object. ([[Alex Ionescu]])<br />
* Modify the allocation function for a more optimized way of allocating objects instead of having to keep track of two sets of variables. ([[Alex Ionescu]])<br />
* Add various accounting variables. ([[Alex Ionescu]])<br />
* Make sure to properly handle allocations without object create info (ie, for object types). Now they get creator info and name info (which allowed us to cleanp the hack in ObInit). ([[Alex Ionescu]])<br />
* Add checks to see if Quota informatio is needed. ([[Alex Ionescu]])<br />
* Clear CreatorBackTraceIndex during allocation. ([[Alex Ionescu]])<br />
* Remove CreatorUniqueProcess hack from back when the idle thread was NULL. ([[Alex Ionescu]])<br />
* Do not zero out the header during allocation anymore, since this slows down the routine (instead, simply zero out the 2 fields that are NULL). ([[Alex Ionescu]])<br />
* Locate and clearly display that the fact we zero objects on creation is a HACK that needs to be fixed. (The Token code makes this assumption). ([[Alex Ionescu]])<br />
* Update HighWaterNumberOfObjects when needed. ([[Alex Ionescu]])<br />
* If caller didn't give pool charges, use the one from the object type. ([[Alex Ionescu]])<br />
* Clear the Total/HighWater* values for newly created object types instead of using random values. ([[Alex Ionescu]])<br />
* Properly typecast the WCHAR tag as CHAR. ([[Alex Ionescu]])<br />
* Insert each new object type in the ObTypeObjectType Type List. ([[Alex Ionescu]])<br />
* Set the Index member of each new object type and insert each new object type in the ObpObjectTypes array. This is crucial for object type enumeration when implemented. ([[Alex Ionescu]])<br />
* Fixup the way we insert new object types into the tree. Allow failure and don't return a type if we couldn't insert it, and only reference the type directory object if it actually exists. ([[Alex Ionescu]])<br />
* Move DOS Devices\"??" initialization in its own routine. ([[Alex Ionescu]])<br />
* Use Nt APIs for all operations instead of raw I/O. ([[Alex Ionescu]])<br />
* Create GLOBALROOT link to \ ([[Alex Ionescu]])<br />
* Create \??\Global link to \?? ([[Alex Ionescu]])<br />
* Implement Object Type Resource Lock, since object types are shared across all objects and thread-safety is critical. Used it everywhere where I think it's needed. Thomas, can you check if I missed anything please? ([[Alex Ionescu]])<br />
* Use interlocked increase/decrease for accounting variables inside the Object Type instead of acquiring a full lock or not being thread safe. ([[Alex Ionescu]])<br />
* Clear the creator type list of an object if it lost all its handles. ([[Alex Ionescu]])<br />
* Fix a bug in NtduplicateObject which was potentially derefernecing a garbage pointer (thanks Prefast!). ([[Alex Ionescu]])<br />
* Fix SD charges to 2048 bytes instead of 2000. ([[Alex Ionescu]])<br />
* Fix a memory leak in ObOpenObjectByName. Object Create Information is now freed. ([[Alex Ionescu]])<br />
* Implement NtCreateDebugObject, NtDebugContinue, NtDebugActiveProcess, NtRemoveProcessDebug, NtSetInformationDebugObject, NtWaitForDebugEvent. ([[Alex Ionescu]])<br />
* Of course, the entire backend is stubbed out. ([[Alex Ionescu]])<br />
* Implement Debug object initialization (not called yet) and close(not done) and delete (done) callbacks. ([[Alex Ionescu]])<br />
* Fixup DEBUG_OBJECT definition. ([[Alex Ionescu]])<br />
* Implement DbgkpCloseObject. ([[Alex Ionescu]])<br />
* Implement DbgkpOpenHandles. ([[Alex Ionescu]])<br />
* Fix various bugs in the code and flag usage. ([[Alex Ionescu]])<br />
* Enable calling DbgkClearProcessDebugObject when terminating a process. ([[Alex Ionescu]])<br />
* Define DBGKM_APINUMBER ([[Alex Ionescu]])<br />
* Implement DbgkpSendApiMessageLpc, DbgkpSendApiMessage, DbgkCopyProcessDebugPort, DbgkForwardException, DbgkFreeDebugEvent, DbgpWakeTarget. ([[Alex Ionescu]])<br />
* Close original handle in DbgkOpenHandles. ([[Alex Ionescu]])<br />
* Implement DbgkpConvertKernelToUserStateChange. I just remembered that there's actually 3 debug subsystems in NT: Win32, Native and Kernel, so this structure will still need to be heavily parsed at the Win32 level (in kernel32) before user-mode debuggers can work (so I'll have to write a small native-mode debugger test app to test this implementation first). ([[Alex Ionescu]])<br />
* Implement DbgkpMarkProcessPeb. ([[Alex Ionescu]])<br />
* Implement DbgkpQueueMessage. This is the main bi-directional communication routine for the newer non-LPC Debug Object. ([[Alex Ionescu]])<br />
* Implement DbgkPostFakeProcessCreateMessages (and stub DbgkpPostFakeThreadMessages and DbgkpPostFakeModuleMessages). These are required when attaching to a process after threads have been created and modules loaded, so that the debugger can have a valid state. ([[Alex Ionescu]])<br />
* Add one of the basic OBJECT_ATTRIBUTES flags and don't fail any 3rd-party driver or application that might've been using it. ([[Alex Ionescu]])<br />
* Add missing member to DBGKM_LOAD_DLL. ([[Alex Ionescu]])<br />
* Implement DbgkPostFakeModuleMessages. ([[Alex Ionescu]])<br />
* Stub MmGetFileNameForAddress but write documentation on how to implement it (thanks to Filip Navara). For now it always returns ntdll.dll as a testhack. ([[Alex Ionescu]])<br />
* Fix KeFreezeAllThreads prototype and define it in the internal headers. ([[Alex Ionescu]])<br />
* Fix two bugs in KeSetBasePriorityThread and KeSetPriorityThread which were using an undefined value for "Lock Released" if the priority wasn't changing, potentially causing a missing spinlock release when none was required (and thus eventually freezing the scheduler) ([[Alex Ionescu]])<br />
* Implement KeThawAllThreads based on KeFreezeAllThreads. ([[Alex Ionescu]])<br />
* Fix a bug in KeFreezeAllThreads which was causing us never to actually parse the next flink. ([[Alex Ionescu]])<br />
* Fix a bug in KeFreezeAllThreads which was causing us never to leave the critical region we entered at the beginning. ([[Alex Ionescu]])<br />
* Implement helper routine DbgkpSectionToFileHandle and stub MmGetFileNameForSection (easy ObQueryNameString-based implementation to do later). ([[Alex Ionescu]])<br />
* Implement helpers DbgkpSuspendProcess and DbgkpResumeProcess based on KeFreeze/ThawAllThreads. ([[Alex Ionescu]])<br />
* Implement DbgkExitProcess, DbgkExitThread, DbgkMapViewOfSection, DbgkUnmapViewOfSection. Apart from DbgkCreateThread, these are the main notification APIs that Dbgk uses for user-mode debug events. (Mm code needs to be changed to call the map/unmap notifications. Ps already calls the exit/create ones). ([[Alex Ionescu]])<br />
* Properly implement inline versions of KeGetCurrentThread and KeGetPreviousMode/ExGetPreviousMode, as well as KeGetPcr. This should significantly increase performance. (KeGetPreviousMode is reduced to 2 lines of code instead of 15 lines with 2 expensive jumps). ([[Alex Ionescu]])<br />
* Make CSRSS register the default hard error port on startup. ([[Alex Ionescu]])<br />
* Stubplement the System Hard Error handler (it simply bugchecks) ([[Alex Ionescu]])<br />
* Fully implement ExRaiseHardError when called from user-mode so that the strings and parameters are properly captured into user-mode memory. ([[Alex Ionescu]])<br />
* Almost completely implement ExpRaiseHardError which is responsible for actually doing the error. However, ROS LPC is screwed up so sending the LPC Message crashes since the port isn't in a listening state or something. ([[Alex Ionescu]])<br />
* Would appreciate some advice on how to get the LPC message to CSRSS. ([[Alex Ionescu]])<br />
* Fix Get/SetErrorMode. The Native API uses an inverted value of SEM_FAILCRITICALERRORS, so this must be handled in win32. ([[Alex Ionescu]])<br />
* Cleanup formatting of RaiseException, and only normalize the paramter count if we're actualy going to use it. ([[Alex Ionescu]])<br />
* Fix flags in DbgkpSectionToFileHandle ([[Alex Ionescu]])<br />
* Implement DbgkpCreateThread. ([[Alex Ionescu]])<br />
* Implement DbgkpSetProcessDebugObject. ([[Alex Ionescu]])<br />
* Implement MmAddVerifierThunks, MmIsDriverVerifying, MmIsVerifierEnabled. ([[Alex Ionescu]])<br />
* Implement IoSetCompletionRoutineEx, which is a safe way to set completion routines that almost all newer drivers will be using (XP+). ([[Alex Ionescu]])<br />
* FSTUB Patch for Mount Manager Support: Delete disk.c entirely from iomgr.c and spread it across fstub. ([[Alex Ionescu]])<br />
* FSTUB Patch for Mount Manager Support: Entirely reimplement from scratch IoWritePartitionTable, IoReadPartitionTable, IoSetPartitionInformation, HalExamineMbr. Lots of bug fixes in terms of wrong assumptions and compatibility with weird partition tables. ([[Alex Ionescu]])<br />
* FSTUB Patch for Mount Manager Support: Fix prototype of IoAssignDriveLetters, but for now, keep the old code (xHalIoAssignDriveLetters) because this has not been rewritten yet. ([[Alex Ionescu]])<br />
* FSTUB Patch for Mount Manager Support: Implement missing functions in HAL (IoRead/Write/Set PartitionInfo) and make them call into the ntoskrnl exports. ([[Alex Ionescu]])<br />
* Remove the "deprecated" directory from ntoskrnl since it now truly is. ([[Alex Ionescu]])<br />
* Remove KeInitInterrupts hack. ([[Alex Ionescu]])<br />
* Remove KiDispatchInterrupt2 export hack from kernel and stop using it from the HAL. ([[Alex Ionescu]])<br />
* HAL can now be built/tested with Windows/TinyKRNL since the export hack is gone and interrupts are sent properly through the IDT. ([[Alex Ionescu]])<br />
* Remove a bunch of completed krnlfun entries. ([[Alex Ionescu]])<br />
* Fix progressbar during bootcd bug. ([[Alex Ionescu]])<br />
* Swap the IDT where we should, in KiSystemStartup instead of the freeldr.c hackfile. This, coupled with the previous patch, should make NTLDR-booting even more succesful since interrupts won't crash/be ignored. ([[Alex Ionescu]])<br />
* Implement DbgkPostFakeThreadMessages. ([[Alex Ionescu]])<br />
* Add Dbgk-calls to NtMap/UnmapViewOfSection to nodify debugging services of new DLL image load. ([[Alex Ionescu]])<br />
* Forgot to actually initialize Dbgk during system initialization, so any API would crash. ([[Alex Ionescu]])<br />
* Fix some stupid bugs in NtCreateDebugObject. ([[Alex Ionescu]])<br />
* Implement an unhandled case in DbgkSetProcessDebugPort. The event queue is now properly parsed during connect and the event is signaled to start flushing the queue. ([[Alex Ionescu]])<br />
* Fix a bug in NtWaitForDebugEvent. ([[Alex Ionescu]])<br />
* Fix DbgkSectionHandleToFileHandle. ([[Alex Ionescu]])<br />
* Implement MmGetFileNameForSection. ([[Alex Ionescu]])<br />
* Fix some bugs in NtWaitForDebugEvent which caused debug events to be sent in the wrong order and also more then one event to be sent at the same time (and thus some events skipped). ([[Alex Ionescu]])<br />
* Test app now properly receives the "create process" event along with valid process/thread handles and the image base. No file handle sent yet because of the I/O Manager File Object bug. ([[Alex Ionescu]])<br />
* There's still a bug in NtContinueDebugEvent due to wrong Client IDs being sent ([[Alex Ionescu]])<br />
* Client IDs were OK, I incorrectly assumed they weren't due to the concidence they were equal to the thead/process handles. Actual bug was NtDebugContinue not accepting a valid status value. This is fixed now. ([[Alex Ionescu]])<br />
* Fix critical I/O bugs in IopParseFile which were causing the file object's device object pointer to be associated to the FSD (File System Device) instead of the Disk Driver, as well as the dereference of the FSD after the Disk Driver had been referenced (causing too many derefs for one, and to many refs for the other). Also fix a bug in IopQueryDeviceInformation which was querying the Disk Driver instead of the FSD. ([[Alex Ionescu]])<br />
* This also fixes IopQueryNameFile to properly return the entire name of the file now, instead of only the FSD part (probably fixes a dozen regressions). ([[Alex Ionescu]])<br />
* Fix a bug in DbgkOpenHandles which was causing file handles to get lost. ([[Alex Ionescu]])<br />
* Properly set and check the image notification flag for the process in DbgkCreateThread. Patch by hto. See issue #1879 for more details. ([[Alex Ionescu]])<br />
* Implement support for DEBUG_PROCESS in CreateProcess so that processes can be started with a debugger (works and tested with a new test app). ([[Alex Ionescu]])<br />
* Fix a bug in DbgkCreateThread which wasn't saving the initial thread information in the right place. The process create event is now fully supported and properly returns the entrypoint of the application. ([[Alex Ionescu]])<br />
* Write DLL Being mapped into NtTib->ArbitraryUserPointer so that the debugger can pick it up. ([[Alex Ionescu]])<br />
* Fix bugs in DbgkWakeTarget, DbgkCreateThread, DbgkMapViewOfSection and call from NtMapViewOfSection. ([[Alex Ionescu]])<br />
* Fix missing "break" statement in DbgkFreeDebugEvent, causing a handle leak, and in DbgkpOpenHandles, causing user-mode to get a kernel-mode handle for DLL images instead of the correct duplicated one. ([[Alex Ionescu]])<br />
* Currently struggling with the fact that ArbitraryUserPointer seems to be reset to zero before it's read for the debug event, so DLL names don't come through. ([[Alex Ionescu]])<br />
* Implement V86 trap fixup during traps and interrupts. ([[Alex Ionescu]])<br />
* Implement DR register save/restore during traps, interrupts and system calls. ([[Alex Ionescu]])<br />
* Clear capacity data buffer before reading it to avoid 0xCCCCCCCC values and manually set failure code if nobody filled it in (a hack, but I don't understand our pre-Nixon-era storage stack to "properly" fix it, so this is good enough and kills off the 0xCCCCCCCC byte non-paged pool allocations. ([[Alex Ionescu]])<br />
* Fix IopSecurityFile to send the IRP to the right device. ([[Alex Ionescu]])<br />
* Fix IoSetInformation to send the IRP to the right device. ([[Alex Ionescu]])<br />
* After the major fix in 24996, the functions that had been written to work with the I/O bug stopped working (by sending the IRP to the wrong device object, which, due to the bug was the ""right"" object), this is now fixed and the bootcd works again. ([[Alex Ionescu]])<br />
* Fix SleepEx. ([[Alex Ionescu]])<br />
* Put volatile statements in EX_RUNDOWN_REF, IRP, DEVICE_OBJECT, ERESOURCE, FILE_OBJECT, IO_REMOVE_LOCK, WORK_QUEUE_ITEM where required (thanks to Microsoft's changes in the WDK to mark the fields properly). ([[Alex Ionescu]])<br />
* Update FILE_OBJECT definition. ([[Alex Ionescu]])<br />
* Add some asserts to some I/O functions. ([[Alex Ionescu]])<br />
* Add stub support for File Objects created by XP+ Drivers which have File Object Extensions. ([[Alex Ionescu]])<br />
* Add some fixes to IopDeleteFile, including proper reference counting for the DO and VPB, as well as cleanup when the file is closed without a handle. ([[Alex Ionescu]])<br />
* Fix a bug in IopSecurityFile. ([[Alex Ionescu]])<br />
* Queue and unqueue IRPs in all I/O functions. ([[Alex Ionescu]])<br />
* Fully support IRP cancellation now. ([[Alex Ionescu]])<br />
* Fix critical bugs in NtDeviceIoControlFile and NtDeviceFsControlFile which were causing double queueing of IRPs and freeing of invalid memory, as well as invalid paramter checking for user-mode buffers. ([[Alex Ionescu]])<br />
* Add exhaustive validation checks to IoCreateFile, add more failure cases, and validate the EA buffer. Also support IO_ATTACH_DEVICE_API flag. ([[Alex Ionescu]])<br />
* Implement IoCreateStreamFileObjectEx and IoCreateStreamFileObjectLite and fix several bugs in the original implementation of IoCreateStreamFileObject. ([[Alex Ionescu]])<br />
* Update Io*ShareAccess routines to support XP+ style semantics related to special File Object flags which disable their use. ([[Alex Ionescu]])<br />
* Add validation to all Query/Set routines so that information clasess, lengths, buffers and alignment are properly checked. ([[Alex Ionescu]])<br />
* Also add an array for the proper acess rights that each query/set operation requires. ([[Alex Ionescu]])<br />
* Check backup/restore privileges during I/O File operations. ([[Alex Ionescu]])<br />
* Check traverse access during I/O File Operations. ([[Alex Ionescu]])<br />
* Check access privileges to the device during I/O file operations. ([[Alex Ionescu]])<br />
* Rename IopReferenceDeviceObject and also verify if an exclusive DO is trying to be invalidly opened. ([[Alex Ionescu]])<br />
* Support various extra security checks during I/O File/Device Parse Routine. ([[Alex Ionescu]])<br />
* Fix a bug during IopCleanupIrp so that we don't dereference the File OBject if this was a create operation. ([[Alex Ionescu]])<br />
* Fix some bogus asserts in IofCompleteRequest, and save the IRP Flags before signalling it's event, since the driver might've freed it behind our back. ([[Alex Ionescu]])<br />
* Fix a large bug in ObInsertObject which affected the insert of unnamed objects with forced security options (Such as process/threads). ([[Alex Ionescu]])<br />
* Fix the creation of the Process/Thread/Job Obejct Types to that security information is forced. ([[Alex Ionescu]])<br />
* Remove "Fix PS!!!" messages since the bug is now fixed and these objects now get proper security descriptors. ([[Alex Ionescu]])<br />
* Fix another bug in ObInsertObjet which wasn't properly validating user-mode objects and always assumed kernel mode. ([[Alex Ionescu]])<br />
* Silence multiple trace/checkpoint messages that have accumulated throughout time for various debugging purposes. ([[Alex Ionescu]])<br />
* Fix critical bugs in exception handling: Unwinding was completely broken, using the wrong SEH protector to detect collided unwinding. The correct protector itself also had a broken check. ([[Alex Ionescu]])<br />
* Fix architectural bug in the entire TrapFrame<->Context conversion system and Ring Privilege Transitions (Inter-ring and intra-ring) which was lacking proper sanitation and validation of segments, flags and debug registers. Among other things, IOPL is now respected, CS is not KGDT_R0_CODE | RPL_MASK anymore, and the GPF code is now properly being called. This completely fixes exception handling being totally broken and crashing firefox installer, mirc, and other applications. ([[Alex Ionescu]])<br />
* Rewrite the page fault handler base code in assembly instead of relying on a broken C routine. Detect VDM, V8086, detecting expected/normal fault in ExpInterlockedPopEntrySList and faults in the system handler code. Rewrite MmAccessFault to be the main function that calls out to other sub-fault functions, and use the same prototype as NT. ([[Alex Ionescu]])<br />
* Fix the KGDT boot table to have proper granularity and big flags, and extend it to 256 entries. ([[Alex Ionescu]])<br />
* Create proper thread context in RtlInitializeContext and cleanup Rtl Thread routines. ([[Alex Ionescu]])<br />
* Remove all int3 and breakpoints from trap handlers, and replace them with a much better "UNHANDLED_PATH" macro which freezes the system, beeps, and displays a message with the line of code that's unhandled. This is to clearly tell the user that something is unhandled, instead of nesting infinite exceptions due to the int3. ([[Alex Ionescu]])<br />
* Fix a bug in INT_PROLOG. ([[Alex Ionescu]])<br />
* Sanitize EFLAGS and Code Segments in KeContextToTrapFrame and KeTrapFrameToContext. ([[Alex Ionescu]])<br />
* Implement KiUpdateDr7 and KiRecordDr7 as well as DR_MASK and other DR-validation macros and functions to protect against DR-vulnerabilites as well as to properly account for each active hardware breakpoint in a per-thread fashion by using the dispatcher header. ([[Alex Ionescu]])<br />
* Allow CR0_EM when running in a VDM. ([[Alex Ionescu]])<br />
* Fix FPU/NPX Register handling in KeContextToTrapFrame and KeTrapFrameToContext, and also speed it up by manual copying instead of a memory move. ([[Alex Ionescu]])<br />
* Properly give IOPL 3 to user-mode threads if they requested it. ([[Alex Ionescu]])<br />
* Detect GPF during GPF. ([[Alex Ionescu]])<br />
* Detect pagefault with a trap-frame spread over two or more pages and nested. ([[Alex Ionescu]])<br />
* Properly sanitize and set correct trap frame in KiInitailizeUserApc. ([[Alex Ionescu]])<br />
* Return STATUS_ACCESS_VIOLATION during page faults instead of STATUS_UNSUCESSFUL. ([[Alex Ionescu]])<br />
* Fix assert in VdmSwapContext, as well as Code Selector check which was broken. ([[Alex Ionescu]])<br />
* Fix delayed object deletion (ObDeferDeleteObject) and the Ob Repear Routine and list. ([[Alex Ionescu]])<br />
* Update Kernel Fun. ([[Alex Ionescu]])<br />
* NtWaitForMultipleObjects/NtWaitForSingleObject: Fail if memory allocation failed. ([[Alex Ionescu]])<br />
* NtWaitForMultipleObjects/NtWaitForSingleObject: Don't overwrite original captured handle value when decoding to kernel handle. ([[Alex Ionescu]])<br />
* NtWaitForMultipleObjects/NtWaitForSingleObject: Use PAGED_CODE. ([[Alex Ionescu]])<br />
* NtWaitForMultipleObjects/NtWaitForSingleObject: Check timeout validity first before probing the entire handle array. ([[Alex Ionescu]])<br />
* Fix a critical bug in NtSignalAndWaitForObject which was using the wrong object type (waitable object instead of signalled objecT). ([[Alex Ionescu]])<br />
* Fix OB_SECURITY_METHOD prototype, callers, and implementors. ([[Alex Ionescu]])<br />
* Add call to SeOpenObjectAuditAlarm in ObCheckObjectAccess. ([[Alex Ionescu]])<br />
* Start adding Ob Callout validation on checked builds. For now only done around security functions. ([[Alex Ionescu]])<br />
* Set *MemoryAllocated to FALSE in ObGetObjectSecurity early on to avoid inconcistent state if the callback failed. ([[Alex Ionescu]])<br />
* Implement new XP function ObSetSecurityObjectByPointer and simplify NtSetSecurityObject by making it use it. ([[Alex Ionescu]])<br />
* More Win 2003 SecurityDescriptor Cache functions to sdcache instead of obsecure.c. ([[Alex Ionescu]])<br />
* Fix a bug in KeLeaveCriticalRegion which was delivering APCs even if Special APCs were disabled. The check is now fixed. Thanks to Dominique Cote for the bug report. ([[Alex Ionescu]])<br />
* Fix multiple bugs in HalpCalculateChsValues. ([[Alex Ionescu]])<br />
* Fix lots of typecast warnings. ([[Alex Ionescu]])<br />
* Fix potentially uninitialized variables. ([[Alex Ionescu]])<br />
* This should fix the partitioning problems/regression. Thanks to hto for finding out the source of the bug. ([[Alex Ionescu]])<br />
* Fix a bug in ExReleasePushLock which broken contention checking. ([[Alex Ionescu]])<br />
* Fix some length calculation bugs in IopQueryFile. ([[Alex Ionescu]])<br />
<br />
<br />
== Hardware Abstraction Layer (HAL) ==<br />
* Export KeAcquire/ReleaseQueuedSpinlocks ([[Aleksey Bragin]])<br />
* Fix wrong prototype of HalEndSystemInterrupt ([[Aleksey Bragin]])<br />
* Stall the CPU after each I/O command to simulate I/O delay. ([[Alex Ionescu]])<br />
* Make HalMakeBeep a bit nicer by making the PUCHAR typedef part of the TIMER constants. ([[Alex Ionescu]])<br />
* Flush write buffers before rebooting. ([[Alex Ionescu]])<br />
* Refactor sending the reset command since it's not always a matter of using the keyboard port. ([[Alex Ionescu]])<br />
* HalReturnToFirmware does a HalpReboot no matter what parameter is sent. ([[Alex Ionescu]])<br />
* Implement HalSystemVectorDispatchEntry, KeFlushWriteBuffer, HalFlushCommonBuffer, HalAllocateCrashDumpRegisters. ([[Alex Ionescu]])<br />
* Add lots of missing PCI definitions to the DDK, and to the internal file pci.h ([[Alex Ionescu]])<br />
* Make HAL compilable with the WDK thanks to a nice hack/trick I found. ([[Alex Ionescu]])<br />
* Delete HAL cruft files. ([[Alex Ionescu]])<br />
* Implement (or cleanup + mark as implemented, these are 4 line functions) HalDisplayString, HalAcquireDisplayOwnership, HalSetDisplayParameters, HalQueryDisplayParameters, HalInitailizeProcessor, HalAllProcessorsStarted, HalStartNextProcessor, HalProcessorIdle, HalRequestIpi. ([[Alex Ionescu]])<br />
* Fix some prototype definitions and cleanup some formatting. ([[Alex Ionescu]])<br />
* Export ExiTryToAcquireFastMutex from ntoskrnl, I had forgotten to export this ages ago when adding the other Exi*FastMutex* stuff. ([[Alex Ionescu]])<br />
* Remove fmutex.c and fastmutex functions from HAL. The whole point of having the Exi ones in the kernel was that HAL calls them through forward exports now (so any old driver can still link with HAL). Now we don't duplicate the implementation anymore. ([[Alex Ionescu]])<br />
* Remove DriverEntry, it's useless. Also move HalReportResourceUsage to halinit because it's a call-once-on-boot function much akin a HalInitPhase2 function, so delete resource.c ([[Alex Ionescu]])<br />
* Keep track of interrupt affinity and active processor mask each time a new CPU initializes. ([[Alex Ionescu]])<br />
* Reorganize HAL exports and export KeTRyToAcquireQueuedSpinlock and KeTryToAcquireQueuedSpinLockRaisetoSynch. ([[Alex Ionescu]])<br />
* Add stub for HalSetTimeIncrement. ([[Alex Ionescu]])<br />
* Cleanup CMOS-related routines (Get/Set environment value and get/set RTC). Fixup some prototypes as well. Inline HalpReadCmos/HalpWriteCmos instead of having a separate function. ([[Alex Ionescu]])<br />
* Fixup wrong protypes for various Queued Spinlock functions. ([[Alex Ionescu]])<br />
* HAL Initialization Rewrite: Initailize the clock increment separately from the calibration of stall execution. ([[Alex Ionescu]])<br />
* HAL Initialization Rewrite: Raise IRQL to the current IRQL (basically a no-op) to force a standard PIC state. Will be needed for the new IRQ implementation when it'll work. ([[Alex Ionescu]])<br />
* HAL Initialization Rewrite: Scan commandline for PCILOCK and BREAK parameters during hal initalization. The former is not supported, only saved, while the latter causes a breakpoint just like the windows implemetnation. ([[Alex Ionescu]])<br />
* HAL Initialization Rewrite: Get the bus type (ISA, EISA, MCA) on startup to support bootup from NTLDR. ([[Alex Ionescu]])<br />
* HAL Initialization Rewrite: Validate HAL to match the kernel (checked kernel and UP kernel). Also make the kernel set the proper PRCB flags for this. ([[Alex Ionescu]])<br />
* HAL Initialization Rewrite: Initialize the CMOS lock. ([[Alex Ionescu]])<br />
* HAL Initialization Rewrite: Setup HAL Dispatch table and enable call to HalQuerySystemInformation in the kernel since it now works. ([[Alex Ionescu]])<br />
* Rewrite bus functions to get rid of the idea of "Bus handlers". This is a deprecated NT4 concept that ReactOS copied and only slows down performance. ([[Alex Ionescu]])<br />
* Support custom private dispatch table PCI functions. ([[Alex Ionescu]])<br />
* Provide default PCI functions. ([[Alex Ionescu]])<br />
* Rewrite PCI functions using clean structures and code instead of magic macros and undocumented magic values. Use simple macros to generate PCI bus operations for write/read uchar, ushort and ulong. ([[Alex Ionescu]])<br />
* Simplify function definitions for CMOS access. ([[Alex Ionescu]])<br />
* Unify some dupli/tripi-cated code. ([[Alex Ionescu]])<br />
* Fix definition of HaliSetSystemInformation. ([[Alex Ionescu]])<br />
* Fix definitions of Bus Handler functions (add NTAPI). ([[Alex Ionescu]])<br />
* Add official BUS_HANDLER definition to NDK. ([[Alex Ionescu]])<br />
* Fix definition of HAL_PRIVATE_DISPATCH. ([[Alex Ionescu]])<br />
* Remove some derecated code (isa.c and mca.c). ([[Alex Ionescu]])<br />
* Fix prototype/definition of HalCalibratePerformanceCounter and properly implement it. ([[Alex Ionescu]])<br />
* Implement KeStallExecutionProcessor in its own assembly file isntead of using inlined GCC assembly, and align the loop to 16 bytes for more streamlined execution speed. ([[Alex Ionescu]])<br />
* Mask out clock interrupt during Phase 0 and Initialize clock interrupt on HAL Phase 1. This enables the HAL clock interrupt which was already written. ([[Alex Ionescu]])<br />
* Make the clock interrupt use HalpCurrentTimeIncrement instead of hardcoding a value. ([[Alex Ionescu]])<br />
* Re-implement HalpInitializeClock to allow for dynamic increments from 1ms to 15ms with appropriate rollovers and to call KeSetTimeIncrement to update timer values with the kernel. ([[Alex Ionescu]])<br />
* Implement HalSetTimeIncrement to allow changing the clock ms increment (but this isn't yet respected). ([[Alex Ionescu]])<br />
* Remove system/runtime update routines from the deprecated IRQ implementation and use the newer assembly ones already written, since we're now using the HAL clock interrupt. Remove other unused code. ([[Alex Ionescu]])<br />
* Fix more bugs in new hal IRQ implementation (that still isn't used yet due to regressions) and implement HalClearSoftwareInterrupt. ([[Alex Ionescu]])<br />
* There's no such thing as Phase 2 HAL init. ([[Alex Ionescu]])<br />
* Only map the 0x0 physical address in HalpReboot when enabling warm-reboot, there's no need to map it during init and keep it allocated during the whole time. ([[Alex Ionescu]])<br />
* Implement a working version of KeQueryPerformanceCounter based on the C implementation (without the strange MHZed-based code) and also support updating the performance timer during a clock interrupt, otherwise the value might become stale during the query. ([[Alex Ionescu]])<br />
* Update clock interrupt handler to update the performance counter, and also detect if someone changed the clock rate (but don't yet support this). ([[Alex Ionescu]])<br />
* Finally figured out a way to make the old HAL IRQ implementation work with the new Ke Interrupt implementation without requiring my new HAL IRQ code (which doesn't work). ([[Alex Ionescu]])<br />
* Add profil.c and stub HalStartProfileInterrupt, HalStopProfileInterrupt and HalSetProfileInterval, and export these functions. ([[Alex Ionescu]])<br />
* KdComPortInUse is exported by HAL, not kdcom, so make the change. ([[Alex Ionescu]])<br />
* Register the KD support routines that kdcom on NT uses and implement most of them (except support for PCI Debug Cards). ([[Alex Ionescu]])<br />
* I can now get Windows to recognize the HAL but it freezes during loading (Due to broken IRQL implementation) and WinDBG won't connect to it. ([[Alex Ionescu]])<br />
<br />
<br />
== Run Time Library (RTL) ==<br />
* Patch from [[Thomas Weidenmueller]] for Bug #1620: Fix a locking bug in the vectored exception handling<br />
* Patch from ([[Thomas Weidenmueller]]) for Bug #1671: Fix checking the SACL data area in the Win64 version of RtlSelfRelativeToAbsoluteSD2<br />
* Hackplement RtlSetUserValueHeap and RtlGetUserInfoHeap, they are needed for being able to build higher-level heap management around the Heap APIs (either for developers or the OS). Case in point, needed for my Global* rewrite in kernel32. The current APIs are utter hacks, but they work (eventually we should get rid of the Wine Windows 95 heap implementation and replace it). ([[Alex Ionescu]])<br />
* Fix implementation of RtlSetUserValueHeap and RtlGetUserInfoHeap to write their flags to the subheap and not the actual main heap structure (since those flags are valid for each allocation). ([[Alex Ionescu]])<br />
* Make heap allocations 8-byte aligned again. ([[Alex Ionescu]])<br />
* There are more then only the 3 or 4 heap flags WINE's Windows 95 code supports(there are about 18), so it's a bit stupid to mask them all out, especially since that breaks settable/tag flags. ([[Alex Ionescu]])<br />
* Stubbed RtlUsageHeap, RtlQueryTagHeap, RtlExtendHeap, RtlCreateTagHeap. ([[Alex Ionescu]])<br />
* Fix all the failures in the RTLSTR Wine test by merging our old rtl string routines with Wine's. We now pass all 2300 something tests. ([[Alex Ionescu]])<br />
* Sync RtlBitmap* implementation with WINE: Fixes 278 regression failures (for a total of 0 now). ([[Alex Ionescu]])<br />
* Also adds implementations for RtlFindMostSignificantBit , RtlFindLeastSignificantBit, RtlFindNextForwardRunClear, RtlFindClearRuns. ([[Alex Ionescu]])<br />
* Runtime Library Registry Wrappers: Use an array of registry paths instead of duplicating them ([[Alex Ionescu]])<br />
* Runtime Library Registry Wrappers: Fix implenmentation of RTL_REGISTRY_HANDLE. ([[Alex Ionescu]])<br />
* Runtime Library Registry Wrappers: Verify all Appends for failure before continuing. ([[Alex Ionescu]])<br />
* Runtime Library Registry Wrappers: Use the strict minimum key permissions isntead of KEY_ALL_ACCESS. ([[Alex Ionescu]])<br />
* Runtime Library Registry Wrappers: Don't use OBJ_OPENIF ([[Alex Ionescu]])<br />
* Runtime Library Registry Wrappers: Use CAPS for \\REGISTRY\\USER (required to match a Windows quirk exposed by a WINE test)* Runtime Library Registry Wrappers: ([[Alex Ionescu]])<br />
* Runtime Library Registry Wrappers: Use the correct length in RtlpNtQueryValueKey ([[Alex Ionescu]])<br />
* Implement RtlCaptureStackBackTrace and RtlWalkFrameChain and add definitions to ntifs.h ([[Alex Ionescu]])<br />
* Get rid of KeRosGetStackFrames and replace usage by RtlWalkFrameChain or RtlCaptureStackBackTrace, depending. ([[Alex Ionescu]])<br />
* Re-implement the routines in intel syntax and also cleanup the formatting. ([[Alex Ionescu]])<br />
* Also re-implement the way the routines work, by following Matt Pietrek's c code that he wrote in one of his articles after looking at the disassembly. ([[Alex Ionescu]])<br />
* Also used a patch for mingw found on Google which contained some implementations in C. ([[Alex Ionescu]])<br />
* New changes mostly add protection during unwinding, faster speed, and add implementations for __except_handler2 and _abnormal_termination which were not previously present. ([[Alex Ionescu]])<br />
* Added some generic table routines to rtlfuncs.h so that they can be used in user-mode. ([[Alex Ionescu]])<br />
* Implemented RtlInsertElementGenericTable and RtlInsertElementGenericTableFull (Splay-Tree versions). Also implemented a helper function RtlpFindGenericTableNodeOrParent when we're not given one and need to locate it manually. ([[Alex Ionescu]])<br />
* Defined structure for generic table entries so that we can properly return user data and do the right allocations. ([[Alex Ionescu]])<br />
* Implement RtlIsGenericTableEmpty, RtlNumberGenericTableElements. ([[Alex Ionescu]])<br />
* Implement RtlLookupElementGenericTable. ([[Alex Ionescu]])<br />
* Implement RtlDeleteElementGenericTable ([[Alex Ionescu]])<br />
* Implement RtlLookupElementGenericTableFull. ([[Alex Ionescu]])<br />
* Implement RtlEnumerateGenericTable. ([[Alex Ionescu]])<br />
* Implement RtlENumerateGEnericTableWithoutSplaying. ([[Alex Ionescu]])<br />
* Implement RtlGetElementGenericTable using ordered node/element. ([[Alex Ionescu]])<br />
* Fix a bug in RtlRaiseException. ([[Alex Ionescu]])<br />
<br />
== Kernel Mode Drivers ==<br />
* USB: Support hubs ([[Hervé Poussineau]])<br />
* vbemp: read EDID information about screen (not used yet) ([[Hervé Poussineau]])<br />
* Serial: Implement IOCTL_SERIAL_WAIT_ON_MASK ([[Hervé Poussineau]])<br />
* Imported and fixed a number of bugs in USB driver stack for Windows NT4 by Zhiming/Woodhead ([[Aleksey Bragin]])<br />
* VFAT: VfatGetNameInformation: Return the file name length even if the buffer is too small, that's the whole point of the "Query length before comitting a buffer" principle. ([[Alex Ionescu]])<br />
* VFAT: VfatGetNameInformation: FSDs are not supposed to null-terminate the buffer, nor expect the caller to send a buffer large enough for null-termination. ([[Alex Ionescu]])<br />
* VFAT: VfatGetNameInformation: Added a hack in IopQueryFile to handle another VFAT bug which makes it return the total number of bytes written in IoStatus.Information instead of the total number of bytes *left untouched*.There are probably many other broken things due to this. ([[Alex Ionescu]])<br />
* CDFS: A long long time ago there was a stupid kernel that created MDLs for R/W requests even when the length of the buffer was 0. He had another stupid friend called CDFS which attempted to read the MDL before checking if the buffer size is also 0. When cdfs's friend, the kernel, grew smarter and stopped allocating MDLs, cdfs didn't catch on and cried every time this happened. CDFS now caught up. (thanks to Greatlord for finding the regression). ([[Alex Ionescu]])<br />
* TCPIP: Fixed a bug in TCP/IP that was making it complete IRP_MJ_CREATE with STATUS_SUCCESS yet with the IRP marked as pending. ([[Alex Ionescu]])<br />
<br />
== NT System Library (ntdll) ==<br />
* Implement, export and NDKize: DbgUiGetThreadDebugObject, DbgUiDebugActiveProcess, DbgUiStopDebugging, NtSetInformationDebugObject. ([[Alex Ionescu]])<br />
* Stub DbgUiConvertStateChangeStructure (this isn't done in kernel32 anymore) and export it. ([[Alex Ionescu]])<br />
* Implement and export DbgUiSetThreadDebugObject. ([[Alex Ionescu]])<br />
* Fix DbgUi* APIs to use DbgSsReserved[1], and not [0]. Still trying to figure out what [0] is for. ([[Alex Ionescu]])<br />
* Implement DbgUiConvertStateChangeStructure. Win32/Native Debugging should be fully implemented now (and waiting on the kernel to support it.) ([[Alex Ionescu]])<br />
* Fix ntdll and usetup not to use OBJ_OPENLINK on symbolic links. This attribute is for registry keys, not symlinks. ([[Alex Ionescu]])<br />
<br />
<br />
== Services ==<br />
<br />
= Win32&trade; Personality =<br />
== User mode subsystem server (CSRSS) ==<br />
* Bugs fixed in SMSS and CSRSS ([[Alex Ionescu]])<br />
* Improve compatibility of ChangeDisplaySettingsEx() ([[Aleksey Bragin]])<br />
<br />
== Kernel-mode subsystem server (Win32K) ==<br />
* Fix BSOD in IntPrepareDriver (Bug #1321) ([[Hervé Poussineau]])<br />
* New keyboard driver and layout structure implemented ([[James Tabor]])<br />
* Have IntSystemParametersInfo send WM_SETTINGCHANGE when needed ([[Timo Kreuzer]])<br />
* Patch from ([[Timo Kreuzer]]) for Bug #843: Removed focus from windows, workaround<br />
* NtUserSetFocus accepts Null window ([[Timo Kreuzer]])<br />
* Same StretchBlt code for 8, 16, 32 bpp DIBs. It does not use putpixel anymore for 8bpp and 32bpp. Minor cleanups ([[Magnus Olsen]])<br />
* Last part of the new strectsblt. Remove all mul and div from the loop (speed increase). ([[Magnus Olsen]])<br />
* Commit FreeType cache glyth patch by royce3. Modified by tinus to work with trunk, final fixes made by [[Timo Kreuzer]]. Text output receives speed increase from this fix. See Bug #511 for more details. ([[Magnus Olsen]])<br />
* Implemented NtUserDrawCaption, NtGdiGetPath, NtGdiPathToRegion, NtGdiFlattenPath, NtGdiCloseFigure, NtGdiStrokePath, NtGdiStrokeAndFillPath, NtGdiPolyDraw ([[Saveliy Tretiakov]])<br />
* Remove hack from Aleksey in changedisplay(), which hard coded the display number. With this patch we are now extract the display number from the desktop and use it. ([[Johannes Anderwald]]) and ([[Magnus Olsen]])<br />
* Patch from [[Thomas Weidenmueller]] for Bug #1507: This patch fixes more issues with NtUserFindWindowEx. (one example of bugs have been fixed with this patch is the tray icon)<br />
* Fix strechblt dib16 and dib32, can be compiled with -O2 (gcc). See Bug #1520 for details ([[Magnus Olsen]])<br />
* Patch from [[Thomas Weidenmueller]]: Patch to fix a couple of argument probing bugs in NtQuerySymbolicLinkObject and NtCreateSymbolicLinkObject<br />
* Fix two failures from wine gdi32 test. When HDC is NULL to NtGdiCreateDIBitmap we to need create a hdc and delete the hdc when we are done. ([[Magnus Olsen]])<br />
* Implement SPI_GETFLATMENU and SPI_SETFLATMENU , not fully tested ([[Magnus Olsen]])<br />
* Implement SPI_GETWHEELSCROLLLINES and SPI_GETWHEELSCROLLCHARS. Further additions to Win32k may be necessary to fully implement the two ([[Magnus Olsen]])<br />
* Implement SPI_SETSCREENSAVERRUNNING, SPI_SETSCREENSAVETIMEOUT, SPI_GETSCREENSAVERRUNNING, SPI_GETSCREENSAVETIMEOUT ([[Magnus Olsen]])<br />
* Clean up NtGdiDdCreateDirectDrawObject and test. Fix create hdc when it is NULL ([[Magnus Olsen]])<br />
* Rewrote NtGdiDdQueryDirectDrawObject. gdientry2 now working more or less. Create surface not yet fully implemented. A few more steps before dx hal working out of the box from win32k and gdi32. Thanks to DrFred for helping debugging between ddraw.dll and gdi32.dll with his sniffer apps, Alex for GdiEntry2, W3seek, Filip, GvG for helping me understand how our win32k works and some other info. It is now possible to load a graphic driver directx hal support in ROS. But I do not know how well it works yet ([[Magnus Olsen]])<br />
* Added alpha blend support for 32bpp icons with alpha channels ([[Ged Murphy]])<br />
* Improve compatibility in IntCallWndProcA/W, at least mIRC.exe works with this change ([[Aleksey Bragin]])<br />
* Improve classes, fix bugs IntMapDesktopView() function ([[Aleksey Bragin]])<br />
* Audit NCI interface, fixing a few wrong entries ([[Aleksey Bragin]])<br />
<br />
== WINLOGON ==<br />
* Add a (mostly) working winlogon. User can logon, logoff and logon again. ([[Hervé Poussineau]])<br />
* Add autologon functionality ([[Hervé Poussineau]])<br />
* Add screensaver support ([[Hervé Poussineau]])<br />
<br />
== Control Panel Applets ==<br />
* Added currency controls with format information ([[Eric Kohl]])<br />
* Hit-testing added for caption buttons in Display properties - Appearance tab([[Eric Kohl]])<br />
<br />
=== SYSDM ===<br />
* Sysdm has been overhauled and now looks more like XP's ([[Ged Murphy]])<br />
* Patch from [[Colin Finck]] for Bug #1858: Added CPU detection and make a better layout of the system info.<br />
<br />
== Win32&trade; Applications ==<br />
=== Calc ===<br />
* Andrey Janzen (virus126 at gmail dot com) patch fixing copy\paste bug in calc<br />
* Fixed Bug #2019. 5.01 can be typed in calc now. It used to remove the zero so the result was 5.1. ([[Magnus Olsen]])<br />
* Fix compiling error in calc.c ([[Magnus Olsen]])<br />
<br />
=== Cmd ===<br />
<br />
=== Device Manager ===<br />
* wrote a device manager ([[Ged Murphy]])<br />
<br />
=== Downloader ===<br />
* Added the Download! Utility for downloading various free software ([[Maarten Bosma]])<br />
<br />
=== Explorer ===<br />
* Explorer does not leak icons and bitmaps anymore (see Bug #1554) ([[Timo Kreuzer]])<br />
<br />
=== Imagesoft ===<br />
* Implemented brightness, contrast, blur, sharpness, etc. ([[Ged Murphy]])<br />
<br />
=== ipconfig ===<br />
* rewrote ipconfig ([[Ged Murphy]])<br />
<br />
=== sc ===<br />
* rewrote parts of the sc code, adding more functionality ([[Ged Murphy]])<br />
<br />
=== Service Manager ===<br />
* rewrote most of the service manager code ([[Ged Murphy]])<br />
<br />
=== Userinit ===<br />
* Read the shell name from HKCU, if it does not exist fall back to HKLM, if this does not exist use "explorer.exe" and "cmd.exe" (ie allows to specify a custom shell) ([[Hervé Poussineau]])<br />
<br />
=== WineMine ===<br />
* Patch from [[Apostolos Alexiadis]] (issue #1632). Changed the colors and icons so as winemine to look like Windows Minesweeper ([[Maarten Bosma]])<br />
<br />
== Win32&trade; Libraries ==<br />
=== ADVAPI32 ===<br />
* Implement ConvertStringSecurityDescriptorToSecurityDescriptorA/W ([[Hervé Poussineau]])<br />
* Implement StartService ([[Hervé Poussineau]])<br />
<br />
=== COMCTL32 ===<br />
* Implemented TOOLTIPS_NotifyFormat, now returns the type of the string ([[Timo Kreuzer]])<br />
* Fix LISTVIEW_Callback() crash problem, which was caused by a bug in GCC. Now avoided in all modules by using -fno-sibling-call-optimisation ([[Aleksey Bragin]])<br />
<br />
=== CRT ===<br />
* Fix the calc bug, modf is compelete wrong, replace it with DJGPP C version of modf with small changes from me so it compile in ReactOS. Old modf did not clear the st reg before it was used, did not load the reg right, did not handler all cases ([[Magnus Olsen]])<br />
* Reporting djgpp fgets to fgetws, with wine test the old version failed on reading the string. Now we do not have a any bug in fgetws, according wine test. Test run in win2k and Reactos to be 100% sure it was not a Wine test problem. ([[Magnus Olsen]])<br />
* Fixing a ultoa bug, replacing both version with wine, copy the code from wine 0.9.0; I did add a NULL check for the string so it can not bsod. wine ntdll string only report one error, left to fix, I run wine test on windows 2000 and reactos to compare the result. Fireball report wine_ntdll_test string crach on windows xp, but it does not crash in windows 2000. ([[Magnus Olsen]])<br />
* Fixing a i64ltoa bug, replacing both version with wine, copy the code from wine cvs 2005-05-21, bug report by wine test ([[Magnus Olsen]])<br />
* Replace the following _wtol, _wtoi, _i64tow, _ui64tow, _ltow, _ultow, _ui64toa, _itow, _ltow, ultow with Wine from Wine CVS 2006-05-21 because we failed on Wine test on all of these. In Windows 2000 wine test ntdll string did not fail. ([[Magnus Olsen]])<br />
* Import cprintf from Wine CVS 2006-05-23 as Bug #1529 suggested. It makes most of msvcrt string test work, only one failure left to fix. ([[Magnus Olsen]])<br />
* Replace djgpp hell bugs fcvtbuf with project http://www.jbox.dk/sanos/source/lib/fcvt.c.html with small modifications to match ReactOS arch. Floating point to string conversion routines Copyright (C) 2002 Michael Ringgaard. All rights reserved.<br />
* Replace _swab with Wine CVS 2006-05-11 version, this will take care of our problem with overlapped memory with swab, and this also provides two more Wine msvcrt tests. 100% pass with Wine msvcrt string test. ([[Magnus Olsen]])<br />
* One more Wine msvcrt printf test pass, now it is 62 fails instead of 63 fails ([[Magnus Olsen]])<br />
* Start implementing float into sprintf, snprintf and other printf APIs. These commits are markers for further implementation, such as for *printf api (the main api functions). Changes made to sprintf.c must be mirrored into swprintf.c or changes into swprintf.c must be mirrored into swprintf.c, other wise the effect of the bugfix or change will not be executed in Reactos, as whether ANSII or unicode versions are being used. ([[Magnus Olsen]])<br />
* swprintf/sprintf commits for full support of %e %E %f %g %G, numberf function remains to be done ([[Magnus Olsen]])<br />
* Small rewrite to pass wine test, no bugs in ungetc according to Wine test of msvcrt. ([[Magnus Olsen]])<br />
* Fix so fread return right value of bytes/chars it reads, passing one more wine test in msvcrt file([[Magnus Olsen]])<br />
* Remove stub for _wenviron, already implemented in crt.a ([[Magnus Olsen]])<br />
* Redirect __p__mbctype to _mbctype, idea copied from Wine ([[Magnus Olsen]])<br />
* Redirect __p__tzname to _tzname, idea copied from Wine ([[Magnus Olsen]])<br />
* Fix 24 bugs in *printf string version. Now failing 34 test in wine_test msvcrt printf ([[Magnus Olsen]])<br />
* Fix one more Wine msvcrt printf test ([[Magnus Olsen]])<br />
* Fix 2 more errors in msvcrt *printf API ([[Magnus Olsen]])<br />
* Implement datatype I32 for *printf string version. We have a *printf for files as well. Now failing 29 Wine tests in msvcrt printf ([[Magnus Olsen]])<br />
* Fix two more bugs in *printf strings version. One more Wine test passed ([[Magnus Olsen]])<br />
* Fix some bugs for %c in the string version of printf ([[Magnus Olsen]])<br />
* Use uppercaps for %p instead of lowercaps when it formats the string. Now failing 27 Wine tests ([[Magnus Olsen]])<br />
* Implement %Fp. Now failing 25 Wine test for string version of *printf API ([[Magnus Olsen]])<br />
<br />
=== FMIFS ===<br />
* Expand fmifs.dll to dynamically load FS dlls ([[Hervé Poussineau]])<br />
* Implement ufat.dll/ufatx.dll ([[Hervé Poussineau]])<br />
<br />
=== GDI32 ===<br />
* Implemented NtGdiPolyDraw, based on Wine's Implementation ([[Saveliy Tretiakov]])<br />
* Fix a bug in DdDeleteDirectDrawObject, zero the DirectDraw handler. If it is successful memory is freed ([[Magnus Olsen]])<br />
* Start implementation of gdientry2, for the moment it returns incorrect info and does not fill some stuff right ([[Magnus Olsen]])<br />
<br />
=== KERNEL32 ===<br />
* Update ActiveContext functions ([[Aleksey Bragin]])<br />
* Call some APIs with the right DesiredAccess instead of allways sending _ALL_ACCESS. (for example, only use SECTION_MAP_READ | QUERY unless the caller wants r/w. ([[Alex Ionescu]])<br />
* Flush ITLB when writing to process memory. ([[Alex Ionescu]])<br />
* Entirely rewrite Kernel32 Probe functions to um, actually probe (ported Thomas's code in the kernel and adjusted for user-mode and then checked with WINE's code). I can't begin to fathom what the previous routines were supposed to be doing. ([[Alex Ionescu]])<br />
* Cache system static information, such as PAGE_SIZE at kernel32 startup, so we can reference it in our code without always quertying the system for it. ([[Alex Ionescu]])<br />
* Rewrote Base Heap implementation nearly from scratch, currently only for Global Heap (Local Heap is as broken as before, since it still calls the Global Heap APIs). For detailed implementation notes, see baseheap.h ([[Alex Ionescu]])<br />
* Main changes include using the RtlHandle package instead of duplicating an internal implementation, as well as using the RtlHeap* APIs that allow for setting User Flags/Values for associating Base Heap Flags/Handles with the actual RTL-managed block. ([[Alex Ionescu]])<br />
* Fixup Local* Heap implementation so that calls which have different semantics don't call the Global APIs (ie: LocalAlloc/LocalReAlloc and LocalFlags). The rest can be shared beteween them. Also fix some prototypes. ([[Alex Ionescu]])<br />
* Rename all the defintions to BASE_HEAP instead of GLOBAL_HEAP, since they apply just as well to the Local Heap. ([[Alex Ionescu]])<br />
* Reformat heap.c to ROS standards ([[Alex Ionescu]])<br />
* HeapCreate should mask out NT flags and tag allocations with CLASS 1. ([[Alex Ionescu]])<br />
* Implemented HeapCreateTagsW, HeapExtend, HeapQueryTagW, HeapSummary, HeapUsage. ([[Alex Ionescu]])<br />
* Sync with WINE's latest Heap implementation and try to remove some of the differences we had, and also document the ones which must be kept (our support for RTL_HEAP_COMMIT_ROUTINE and usage of user/kernel-mode lock APIs, etc). This reduces the heap/alloc regression tests to only 1 issue (which I'm working on fixing). ([[Alex Ionescu]])<br />
* Fix a typo in a comparison (& vs &&) which was breaking GlobalReAlloc in some cases. ([[Alex Ionescu]])<br />
* Fix a missing | (OR) in GlobalAlloc which created an invalid handle if the first allocation was of size 0. ([[Alex Ionescu]])<br />
* Same fixes for LocalAlloc/LocalReAlloc ([[Alex Ionescu]])<br />
* Create the BNO Global and Local symbolic links in kernel32. ([[Alex Ionescu]])<br />
* Make CheckRemoteDebuggerPresent fail if no process was specified. ([[Alex Ionescu]])<br />
* Implement DebugActiveProcess, DebugActiveProcessStop, DebugBreakProcess, DebugSetProcessKillOnExit. ([[Alex Ionescu]])<br />
* Rewrite all synch object wrappers in kernel32 to use a single unified method of implementation. ([[Alex Ionescu]])<br />
* A->W converstion through static TEB buffer. ([[Alex Ionescu]])<br />
* Failure if opening without a name. ([[Alex Ionescu]])<br />
* Special warning code for objects that already exist (fixes some WINE test failures and probably makes a myriad of applications work). ([[Alex Ionescu]])<br />
* Use BasepConvertObjectAttributes when creating an object to remove code duplication. ([[Alex Ionescu]])<br />
* InitializeCrticalSectionAndSpinCount shouldn't raise an exception on failure. ([[Alex Ionescu]])<br />
* Optimize WaitForMultipleObjects to cache 8 objects on the stack instead of only 3. ([[Alex Ionescu]])<br />
* Define DBGSS_THREAD_DATA and DbgSsGet/SetThreadData. This is what is located in DbgSsReserved[0] (an internal high-level structure that subsystem debuggers can use for whatever purposes they need). DbgSsReserved[1] is the actual native debug object used only by DbgUi in ntdll. ([[Alex Ionescu]])<br />
* Implement SaveThreadHandle, SaveProcesHandle, MarkThreadHandle, MarkProcessHandle, RemoveHandles and CloseAllProcessHandles to deal with this structure. ([[Alex Ionescu]])<br />
* Call these functions when required, except for WaitForDebugEvent which will set them up once implemented. ([[Alex Ionescu]])<br />
* Implement WaitForDebugEvent. Calls out to DbgUiConvertWaitStateStructure which is still unimplemented. ([[Alex Ionescu]])<br />
<br />
=== NEWDEV ===<br />
* Allow to specify a custom path when installing a driver ([[Hervé Poussineau]])<br />
<br />
=== SETUPAPI ===<br />
* added icons for the device image list ([[Ged Murphy]])<br />
* Search the best driver for a device ([[Hervé Poussineau]])<br />
<br />
=== USER32 ===<br />
* Fix some window focus issues ([[Timo Kreuzer]])<br />
* Patch from [[Thomas Weidenmueller]] for Bug #1486: Convert WM_MDICREATE messages from/to unicode<br />
* Fix two user mode crash for menu. Do not try reading from NULL pointer and compare the value. This increases success in user32_winetest.exe, but other user mode crashes with menu remain. ([[Magnus Olsen]])<br />
* Fix the radio buttons to use the new Marlett font. ([[Ged Murphy]])<br />
* Added support for selection of 32bpp icons and cursors ([[Ged Murphy]])<br />
* Implement GetTabbedTextExtentA() based on Wine ([[Aleksey Bragin]])<br />
* Update TEXT_TabbedTextOut from Wine ([[Aleksey Bragin]])<br />
* Update other text outputting routines ([[Aleksey Bragin]])<br />
* Update buttons code and more work towards easier code sharing with Wine ([[Aleksey Bragin]])<br />
* Improve debugging abilities by making user32.dll using a generic way of displaying debug messages (TRACE/WARN/ERR) and adding a messages spy ([[Aleksey Bragin]])<br />
<br />
= 3rd Party Software =<br />
* Update Zlib from 1.1.4 to 1.2.3 to fix some memory leaks ([[Magnus Olsen]])<br />
* Updated DejaVu Font to Version 2.13 ([[Magnus Olsen]])<br />
* Updated Buslogic Driver to Version 1.2.0.4 (see Bug #1891) ([[Christoph von Wittich]])<br />
* Freetype, small speed increase, remove Freetype ROS glue C version of memcpy, memcmp, isalnum, labs and replace it from reactos string.a. We got asm version of most of them, so that is the reason to the speed increase of Freetype ([[Magnus Olsen]])<br />
* Cleanup zlib and libxml2 so they consume less space in the tree ([[Aleksey Bragin]])<br />
<br />
= FreeLdr =<br />
* Improved Compatibility with Intel Macs ([[Michael Steil]])<br />
* Patch from [[Colin Finck]] for Bug #1856: Adds the "ProcessorNameString" value to the "CentralProcessor" registry key<br />
* Patch from [[Dmitry G. Gorbachev]] and [[Magnus Olsen]] for Bug #1874: Patch does not use the RDMSR and WRMSR measure method, which we need for dual core and the CPU supports it. See Intel documentations AP-485. The patch is from [[Dmitry G. Gorbachev]], detections of RTSC support for single and dual core by me, adding check if the CPU support RDMSR and WRMSR and send a true or false value to GetCpuSpeed, so we know which method we should use. Dmitry's patch should be used when it is false, otherwise we should use the RDMSR and WRMSR measure method. See Bug #1874 for more details. ([[Magnus Olsen]])<br />
* Partly rewritten debug print implementation ([[Aleksey Bragin]])<br />
* PE Loader Improvements: Add PE routines for traversing the import table and fixing up the imports. ([[Alex Ionescu]])<br />
* PE Loader Improvements: Add routine for getting the LOADER_MODULE for a freeldr module by name. ([[Alex Ionescu]])<br />
* PE Loader Improvements: Add the ability to load a not-yet-loaded-driver that's in an import entry (ie: dependencies). Only used for HAL now. ([[Alex Ionescu]])<br />
* PE Loader Improvements: Map HAL in the same was as the kernel, instead of relocating it as a hack from within the kernel. ([[Alex Ionescu]])<br />
* PE Loader Improvements: Refactor some routines to better share code. Don't read freed memory anymore. ([[Alex Ionescu]])<br />
* PE Loader Improvements: Use LdrRelocateImageWithBias instead of quintuplicating relocation code. ([[Alex Ionescu]])<br />
* PE Loader Improvements: Parse kernel and HAL imports while PE-loading from within freeldr. ([[Alex Ionescu]])<br />
* Remove dozens of freeldr.c hacks from the kernel. Remove slow code which was making two copies of the parameter block and wasting over 30KB in static strings that were immediately copied to other strings... ([[Alex Ionescu]])<br />
* Don't use HalModuleObject and NtoskrnlModuleObject anymore. Remove LdrSafePEProcessModule and other similar boot-time hacks. Reimplement MmGetSystemRoutineAddress. ([[Alex Ionescu]])<br />
* Change kdcom.sys to kdcom.dll. ([[Alex Ionescu]])<br />
* Remove all kdcom exports and files from HAL and link with kdcom.dll instead. ([[Alex Ionescu]])<br />
* Add support in freeldr for loading kdcom.dll (and theoretically any other import, such as the Code Integrity DLL for kernel-mode signing, but for now I've only tested this one). ([[Alex Ionescu]])<br />
* Refactor some of the HAL loading code to make it generic for any image. ([[Alex Ionescu]])<br />
* Load HAL manually when loading kernel, before processing imports, to make sure that HAL is index 1 in the loader modules and loads before KDCOM. ([[Alex Ionescu]])<br />
<br />
= Testing =<br />
* Introduced kernel-mode regression tests framework ([[Aleksey Bragin]])<br />
* Implemented Ob regression tests for the kernel ([[Aleksey Bragin]])<br />
<br />
<br />
{{Changelog}}<br />
<br />
[[Category:ChangeLogs]]</div>Sabikihttps://reactos.org/wiki/index.php?title=ChangeLog-0.3.0&diff=12572ChangeLog-0.3.02007-03-11T15:19:04Z<p>Sabiki: add a released date</p>
<hr />
<div>This is the changelog for [[ReactOS]]&trade; version 0.3.0(released 27 August, 2006), an open-source operating system designed to be binary executable- and device driver-compatible with Microsoft&trade; Windows NT&trade; and subsequent Microsoft operating systems such as Windows 2000&trade; and Windows XP&trade;. ReactOS is written by the ReactOS development team, and the last previous version of ReactOS was [[ChangeLog-0.2.9|version 0.2.9]] (released 23 December, 2005).<br />
<br />
= General =<br />
== Generic 0.3.0 changes ==<br />
* Add library to deal with recycle bin (not used yet) ([[Hervé Poussineau]])<br />
* Increased DirectX version number to 5.03.2600.2180 ([[Magnus Olsen]])<br />
* CMD Alexander Wurzinger(Lohnegrim)' E-Mail 'Lohnegrim@gmx.net' fix follow bugs Commend "'type/p','dir/p','dir/s','dir/p/s' did not work with CTRL+C"\n"'pause' does not continue until you press Ctrl/Shift/Alt"<br />
* Added -fforce-addr -fmerge-all-constants -fmove-all-movables -funit-at-a-time to DBG=0. Old settings produced comctl32.dll with a size of 1.06MB - with the new settings the size is reduced to 940KB. It will produce smaller file size for all files. ([[Magnus Olsen]])<br />
* Fix partily of bug 1149 (WineCalc), left todo is binary show. Follow thing : Hex, dec, oct should work fine now and convert betwin them ([[Magnus Olsen]])<br />
* WineCalc adding binary convert tested between dec -> bin -> hex -> bin -> oct and works ([[Magnus Olsen]])<br />
* MSI in function deformat_environment did cut of one letter of GetEnvironmentVariableW at beigner in second call. it try found example LLUSERSPROFILE but it mean ALLUSERSPROFILE. fixed by me ([[Magnus Olsen]]) and ([[Hervé Poussineau]]) (patch send to wine and accpect).<br />
* Adding same bugfix as rev : 20303 to vfprintf.c it did have same problem. thx for GvG bugfix. ([[Magnus Olsen]])<br />
* usetup addig follow reslution to select betwin vbe_640x480x16, vbe_800x600x8, vbe_1024x768x8, vbe_1024x768x16 ([[Magnus Olsen]])<br />
* strtod do not BSD in some test apps I have. it did not check if input buffer for the convert string was NULL or not. ([[Magnus Olsen]])<br />
* advapi32/reg/reg.c do not call on NtQuerySecurityObject in RegQueryInfoKey for it will always fail on reactos. adding #ifndef __REACTOS__ around that code and should be remove when we have that call implement in reactos. ([[Magnus Olsen]])<br />
* CMD Fix Bug 1217 with patch from bugzila by ravelo "If you type > or < in cmd and hit ENTER, cmd.exe crashes" commited by ([[Magnus Olsen]])<br />
* new icon from mf<br />
* printf patch from GvG, it fixing the bug for calc = when it showing e-309, Bug 1195, it have even affected python and other apps trying writing out 0 as text string. committed by ([[Magnus Olsen]])<br />
* fix cmd build with MSVC 2005 ([[Magnus Olsen]])<br />
* patch from bradon fixing special key for other language's that English example Swedish keyboard layout. we can type now backslash again. it did regress in rev 19906 committed by ([[Magnus Olsen]])<br />
* Implement XMillimeter and YMillimeter calculation, it not 100% correct for I assume the monitor DPI is always 72DPI ([[Magnus Olsen]])<br />
* DirectX : fixed a member name in DD_SURFACECALLBACKS so it is equal to ddk ([[Magnus Olsen]])<br />
* DirectX : update d3dhal.h it needs to be rewritten it does not contain all info we need. ([[Magnus Olsen]])<br />
* DirectX : ddraw.dll : start to implement D3DParseUnknownCommand this is the ground ([[Magnus Olsen]])<br />
* DirectX : ddraw.dll : Correct the HAL startup process thanks to Steffen Schulze to solv it He is working with close software He have wrote complete MoComp to us but am waiting with to commit that interface. Rember all code he have done is being use in close source apps and thuse apps will stay close source. In his source code overlay surface is working fine. This is frist step to correct HAL. Now we need fix the CreateSurface process. ([[Magnus Olsen]])<br />
* DirectX : ddraw.dll :Implement Restore mode in DDraw interface ([[Magnus Olsen]])<br />
* MSI : Fix Bug 1185 patch from j_anderw(j_anderw at sbox dot tugraz dot at) ([[Magnus Olsen]])<br />
* DirectX : ddraw.dll : 1. Clean up Hal_DirectDraw_CreateSurface 2. Start implemenr createsurface overlay base on Steffen Schulze code. ([[Magnus Olsen]])<br />
* patch from w3seek : compile with gcc4.1 again commited by ([[Magnus Olsen]])<br />
* DirectX : ddraw.dll : This is frist directdraw version than can run reactos ddraw demo in windows with our own ddraw.dll 1. Implement DdBlt in ddraw it is not a complete implement it does not blt from a source surface to destination surface. for we do not create other types that primary surface for now. and it is always primary is the destination. Rember it does not working in fullscreen that is a bug. ([[Magnus Olsen]])<br />
* RtlIntegerToUnicodeString increased the interal buffer size to 33bytes as wine does ([[Magnus Olsen]]) <br />
* RtlInt64ToUnicodeString increased the interal buffer size to 65bytes as wine does ([[Magnus Olsen]])<br />
* RtlIntegerToUnicodeString/RtlIntegerToUnicodeString will take care of some intToChar Bugs. I have been locking of it for sometimes now thanks to crashfourit network patch and we talk I did found it. ([[Magnus Olsen]])<br />
* Enhance Mouse Control Panel Applet ([[Johannes Anderwald]])<br />
* Implement Power Configuration Applet ([[Alex Wurzinger, Johannes Anderwald]], [[Martin Rottensteiner]])<br />
* Start of Console Window Property Configuration (console.dll) ([[Johannes Anderwald]])<br />
* Bug 1390 : patch from (Thomas Weidenmueller) : for imagesoft.exe, timedate.cpl,wordpad Don't use BOOL for 1 bit members in bitfields commited by ([[Magnus Olsen]])<br />
* desk.cpl : Implement screensaver setting and preview of screen setting working in windows not tested in ReactOS ([[Magnus Olsen]])<br />
* Bug 1363 : Bugfix patch from crashfourit, the patch accect with small change, review by me and hpoussin commited by ([[Magnus Olsen]])<br />
* ntmarta : bug 1346 : patch from w3seek : Support SE_FILE_OBJECT in GetNamedSecurityInfo<br />
* bug 1457: patch by w3seek : VFAT: Implement FileEaInformation for FAT32 committed by ([[Magnus Olsen]])<br />
* Gdi32 : DirectX : fixing a bug in gdientry3, found it when I wrote the doc how it should work. The doc also committed to ReactOS svn ([[Magnus Olsen]])<br />
* CMD : Stop the footer from printing twice in 'dir'. Fixes 1084. ([[Brandon Turner]])<br />
* User32/Kernel32/Win32k : Check to make sure pointer isnt null after allocation. Fixes bug 1103, 1102, 1110. ([[Brandon Turner]])<br />
* SMSS : Implement system managed handling of page file creation sizes. Thanks to Arty, Thomas, and IRC::insulanus. ([[Brandon Turner]])<br />
* CMD : Correctly handle malformed cmd input strings. Fixes a buffer overflow which caused many problems. ([[Brandon Turner]])<br />
* CMD : Implement Tab completion with " in the path. Fixes bug 1238. ([[Brandon Turner]])<br />
* Explorer : Include sndvol32 in the bootcd to fix a file not found error. Fixes bug 1754. ([[Brandon Turner]])<br />
<br />
== RBUILD ==<br />
* exclude wine/w32api headers from msvc include paths ([[Johannes Anderwald]])<br />
* MSVC backend/compilation improvements. Made almost every single module build with MSVC.([[Alex Ionescu]])<br />
* Added PCH (Precompiled Header) usage to almost every module. ([[Alex Ionescu]])<br />
* MSVC backend improvements like PCH support and different configurations. ([[Christoph von Wittich]])<br />
<br />
== Translations ==<br />
* Translation from and update of hu from transaltions team see wikis commited by ([[Magnus Olsen]])<br />
* French translation from bugzila http://www.reactos.org/bugzilla/show_bug.cgi?id=1150 commited by ([[Magnus Olsen]])<br />
* Bug 1162 correct French translation by Jerome Signouret "ggcom" commited by ([[Magnus Olsen]])<br />
* Bug 1163 French translation from Jerome Signouret "ggcom" by ReactOS French translation team commited by ([[Magnus Olsen]])<br />
* Bug 1155, Bug 1157, Bug 1158 French translation from French translation team by zoken <mustang9 at gmail dot com commited by ([[Magnus Olsen]])<br />
* Bug 1166 French translation from French translation team by [[User:cmoibenlepro|Benoit Plante]] <cmoibenlepro at hotmail dot com> commited by ([[Magnus Olsen]])<br />
* Dutch translations from the dutch translations team, cacls, getfirefox, msconfig, sndvol32, taskmgr by Maurus Cuelenaere, winemine by Maurus Cuelenaere winlogon by Eric Janssen<br />
<br />
= ReactOS core =<br />
== Kernel and Executive (<code>NTOSKRNL</code>) ==<br />
* patch from w3seek : create smss with a current directory (system path), Otherwise the current directory for all early processes will be NULL. Fixes some inf installation issues reported by Herve. commited by ([[Magnus Olsen]])<br />
* Fix a bug in FsRtlNumberOfRunsInLargeMcb after compare http://www.jankratochvil.net/captive source changes of ReactOS ntoskrnl. ([[Magnus Olsen]])<br />
* Respect the fact, that the driver can return NULL-pointer, instead of a string having 0 characters! (makes third-party drivers compatibility better) ([[Aleksey Bragin]])<br />
* Move xbox's i2c support to a separate file, and add support of xbox's LEDs switching. Currently it initializes leds to red, and immediately after base init is done (means video has been initialized) they are turned to orange (good for debugging) ([[Aleksey Bragin]])<br />
* Fix incorrect fast interlocks function prototypes ([[Aleksey Bragin]])<br />
* Fix kernel mode executive atom implementation (mostly add SEH and tidy up the code). Then fix kernel32 implementation which was sending incorrect sizes, and also refactored the entire code, since most functions were quatriplicated. ([[Alex Ionescu]])<br />
* Fixed a bug in RtlCreateAtomTable. ([[Alex Ionescu]])<br />
* Fixed bugs in Profile implementation. Add support for segmented profile objects.([[Alex Ionescu]])<br />
* Implemented InterlockedBitTestAndReset, InterlockedBitTestAndSet, InterlockedExchangeAddSizeT. ([[Alex Ionescu]])<br />
* Reimplemented Rundown Protection. ([[Alex Ionescu]])<br />
* Implement YieldProcessor ([[Alex Ionescu]])<br />
* KiAcquireSpinlock and KiReleaseSpinLock should be no-op functions on uniprocessor machines. ([[Alex Ionescu]])<br />
* KiReleaseSpinLock does not need interlocked access to release the lock. ([[Alex Ionescu]])<br />
* Use portable code for KiAcquireSpinLock. Also use interlocked bit operations since they are faster. ([[Alex Ionescu]])<br />
* Rewrite Executive Interlocked Functions to actually work as supposed and also immensly increase their speed, most notably on non*SMP machines. ([[Alex Ionescu]])<br />
* Fix shamefully dangerously broken Work Thread/Queue/Item implementation. ([[Alex Ionescu]])<br />
* Implement a worker thread balance set manager. ([[Alex Ionescu]])<br />
* Implement Pushlocks. ([[Alex Ionescu]])<br />
* Optimized the dispatcher lock. It is now gone on non*SMP systems and IRQL is raised or lowered instead. ([[Alex Ionescu]])<br />
* Fixed some places which werne't setting the dispatcher header's size member correctly. ([[Alex Ionescu]])<br />
* Created separate cases for satisfying mutant, non*mutant and generic objects, to optimize wait satisfaction. ([[Alex Ionescu]])<br />
* Fixed a case in KiCheckAlertability: we also need to check if the thread is alerted in Kernel-Mode, even if the wait mode given was user and user-mode is not alerted. ([[Alex Ionescu]])<br />
* Fixed signaling checks across the wait code and removed KiCheckIfObjectSignaled. We must not consider the mutant as signaled if SignalState is = 1. ([[Alex Ionescu]])<br />
* Fix code to check if the wait blocks' status is STATUS_TIMEOUT, because we do not need to check for signal state in that case. ([[Alex Ionescu]])<br />
* Removed the exports for internal dispatcher lock routines. ([[Alex Ionescu]])<br />
* Implemented Queued and In-Stack Queued Spinlocks (at DPC-Level). ([[Alex Ionescu]])<br />
* Separate UP and MP spinlock functions. ([[Alex Ionescu]])<br />
* Optimize UP spinlock functions so they don't call ntoskrnl anymore and only raise/lower irql. ([[Alex Ionescu]])<br />
* Implemented Queued Spinlocks and In*Stack Queued Spinlocks for UP machines. ([[Alex Ionescu]])<br />
* Implemented KeAcquireInStackQueuedSpinLock, KeReleaseInStackQueuedSpinLock, KeAcquireQueuedSpinLock, KeReleaseQueuedSpinLock, keTryToAcquireQueuedSpinLock, KeTryToAcquireQueuedSpinLockRaiseToSynch, KeAcquireQueuedSpinLockRaisetoSynch. ([[Alex Ionescu]])<br />
* Rewrite ERESOURCE implementation. ([[Alex Ionescu]])<br />
* Fix some bugs in Kernel Queue implementation ([[Alex Ionescu]])<br />
* Handle special case where we have kernel apcs pending and your previous irql was below APC_LEVEL during the wait code. ([[Alex Ionescu]])<br />
* Set the right Thread*>WaitTime dring waits ([[Alex Ionescu]])<br />
* Initialize WaitBlock*>Thread during thread creation. ([[Alex Ionescu]])<br />
* Make APCs queuable for the thread after it's created ([[Alex Ionescu]])<br />
* Enable Timer Block optimization since it works now. This allows us not to always set*up for each wait, since most of its fields can remain static. ([[Alex Ionescu]])<br />
* Properly link wait block together with the waitlist of the timer. ([[Alex Ionescu]])<br />
* Remove KiServiceCheck and implement PsConvertToGuiThread in its place. Has support for detecting and returning errors in case of invalid cases, currently disabled code for doing the required 4kb*>12kb stack conversion, and handling certain failures.<br />
* Fix MmCreateKernelStack to actually take into account the GuiStack parameter. ([[Alex Ionescu]])<br />
* Implement KeSwitchKernelStack ([[Alex Ionescu]])<br />
* Enable code in PsConvertToGuiThread to create a new stack and switch to it. GUI Threads now get the 60KB of kernel stack space they deserve. ([[Alex Ionescu]])<br />
* Implement (although non-optimally) MmGrowKernelStack for future use. ([[Alex Ionescu]])<br />
* Fix some bugs in KiCallUserMode ([[Alex Ionescu]])<br />
* Fix probably one of the most devastating hidden ROS bugs currently in trunk. KWAIT_BLOCK's WaitType was defined as USHORT instead of UCHAR, causing a KeWaitForMultipleObjects of 2 or more objects to overwrite the Thread's PreviousMode (an effect of this is that 99% of user-mode callbacks from win32k were being done with the mode set to Kernel-Mode instead of UserMode). A KeWaitForMultipleObjects of 3 or more objects, or the timer object itself in some cases would cause this conflict to occur with the ResourceIndex member, potentially corrupting the ERESOURCE owner table in my updated implementation. ([[Alex Ionescu]])<br />
* Rewrite usermode callbacks. These changes should greatly optimize graphic operations. After these changes, my "idle" CPU Usage in taskmgr went from 7-8% to 4-5%, while on the performace page, from 15-18% to 10-13%. ([[Alex Ionescu]])<br />
* Set KernelApcPending == TRUE in KiCheckForKernelApcDelivery if we are at APC_LEVEL. ([[Alex Ionescu]])<br />
* Properly create, grow and delete the kernel stack. Fixes potential memory leaks introduced in 20806. ([[Alex Ionescu]])<br />
* Update KeContextToTrapFrame to support separate ContextFlags parameters in the scenario where we want to convert more then the Context's flag specify ([[Alex Ionescu]])<br />
* Rename some of the internal FPU flags to external names and make them global. ([[Alex Ionescu]])<br />
* Improve context creation of new threads to initialize the virgin NPX state for new threads, to clear DR debug registers, to properly convert the context to a trap frame, to set the right segment registers, to set the debugging mark in the trap frame, and to properly set the initial eflags. ([[Alex Ionescu]])<br />
* Don't bother with clearing the DRs in the CONTEXT, just clear DR7 in the trap frame after the conversion. ([[Alex Ionescu]])<br />
* Fix some nasty context switch bugs ([[Alex Ionescu]]):<br />
** We did not update the KPCR's stacklimit/initialstack with the new thread's stacklimit/initialstack.<br />
** We always assumed V86 frame bias in KeInitializeThreadContext.<br />
** We did not properly update ESP0 during context switch, to make space for the NPX frame and V86 bias.<br />
** We did not update fs:18h to point to the new TEB.<br />
** We did not clear out GS when switching processes, nor update the TSS's cr3.<br />
** If a new LDT was being updated, we over-wrote EBP (which was supposed to point to the TSS) by the GDT pointer.<br />
** We used a push/pop esp0 hack which hid the fact we never updated esp0.<br />
* Fix a bad bug in the system call handler and interrupt/trap exit code which was causing a jump to the incorrect epilogue if V86 mode was detected. ([[Alex Ionescu]])<br />
* Make traps use the shared EOI (End Of Interrupt) helper instead of their own custom trap exit code. ([[Alex Ionescu]])<br />
* Share some more trap code. ([[Alex Ionescu]])<br />
* Increase total system call count in KPCR for performance counter. ([[Alex Ionescu]])<br />
* Increase per*systemcall call count in the KiServiceTable if it was specified, for performance counters. ([[Alex Ionescu]])<br />
* Add sanity checks to system call handler to detect. ([[Alex Ionescu]])<br />
* Detect if exiting with incorrect IF state. ([[Alex Ionescu]])<br />
* Detect if exiting with broken stack. ([[Alex Ionescu]])<br />
* Detect if exiting with a broken trap frame (note: Disabled in Kei386EoiHelper beause this raises the assertion. The trap frame is valid, it's just that some old code is using DbgArgMark for other purposes. Will fix.) ([[Alex Ionescu]])<br />
* Detect if exiting with invalid FS. ([[Alex Ionescu]])<br />
* Detect if exiting with invalid Exception List. ([[Alex Ionescu]])<br />
* Detect if exiting with incorrect exception list and/or incorrect previmous mode on the stack (to detect macro/calling type mismatch). ([[Alex Ionescu]])<br />
* Use MmUserProbeAddress in the system call handler to verify the parametes we got from user-mode are valid and return STATUS_ACCESS_VIOLATION if the check fails. ([[Alex Ionescu]])<br />
* Handle failure after PsConvertToGuiThread and return STATUS_INVALID_SYSTEM_SERVICE and/or FALSE and/or *1 on failure. ([[Alex Ionescu]])<br />
* Made MCE/XMMI interrupts unexpected on-boot. ([[Alex Ionescu]])<br />
<br />
== Run Time Library (<code>RTL</code>) ==<br />
* Use RtlComputeCrc32 instead of yet another inline implementation for calculating a CRC32 checksum. The attached patch fixes this. patch from ([[Thomas Weidenmueller]])<br />
<br />
== Native Library (<code>NTDLL</code>) ==<br />
* Add SEH to NtRaiseHardError. ([[Alex Ionescu]])<br />
* Fix a bug in NtSetSystemTime. ([[Alex Ionescu]])<br />
<br />
== WIN32K ==<br />
* Fix BSOD in IntPrepareDriver (bug 1321) ([[Hervé Poussineau]])<br />
* Fix EnumDisplayDevicesA when it convert the struct DISPLAY_DEVICE to unicode it use ansi side of it. and that why it did fail. ([[Magnus Olsen]])<br />
* Fix BSOD in NtGdiDdCreateDirectDrawObject, it is not correct fix, it is a work around, the HDC can be NULL. it prevent some bsod for my new test apps for directx ([[Magnus Olsen]])<br />
* Fix a problem with NtGdiDdDeleteDirectDrawObject, it attempted to lock object 0x8d1f9ad8 that is deleted! problem. ([[Magnus Olsen]])<br />
* Fix BSOD in DD_Cleanup thanks Thomas W, Implement second check for DrvGetDrawInfo ([[Magnus Olsen]])<br />
* NtGdiDdQueryDirectDrawObject do not setup wrong callback to struct members. Check for some NULL parama that can not be NULL. ([[Magnus Olsen]])<br />
* part of bug 252 : checking for null and correct memmroy leak patch by j_anderw commited by ([[Magnus Olsen]])<br />
* update NtUserGetMouseMovePointsEx prototype to msdn ([[Magnus Olsen]])<br />
* DIB_CreateDIBSection fix do not zero out memmory if it is a null pointer it got from ExAllocatePoolWithTag ([[Magnus Olsen]])<br />
* DIB_MapPaletteColors do not try write to NULL pointer if ExAllocatePoolWithTag do return a NULLL pointer. ([[Magnus Olsen]])<br />
* EngSetPointerShape did not check for NULL pointer when it alloc memmory. ([[Magnus Olsen]])<br />
* DRIVER_RegisterDriver did not check for NULL pointer when it alloc memory. ([[Magnus Olsen]])<br />
* IntRegisterClass did not check for NULL pointer when it alloc memory. ([[Magnus Olsen]])<br />
* Fix memory leak in NtUserMonitorFromRect when it return in one case. ([[Magnus Olsen]]) <br />
* some case from win32k can call to RtlClearAllBits with NULL pointer. and check for null pointer after RtlClearAllBits. This take care of those case for moment. ([[Magnus Olsen]])<br />
* InitTimerImpl did not check for NULL pointer when it alloc memory. ([[Magnus Olsen]])<br />
* NtGdiCreatePalette did not check for NULL pointer when it alloc memory. ([[Magnus Olsen]])<br />
* Fix a mouse bug for hide the cursor. It is working now with my test code for ShowCursor and NtShowCursor. The code for it is not finish. and it also working now hide the mouse with EngMovePointer(SurfObj,-1,-1,NULL); and that did not work before. ([[Magnus Olsen]])<br />
* Implement ShowCursor, it is a issue with quake when you moving the mouse, the mousepointer will show, when you stand still with the mouse it will not show the mousepointer. ([[Magnus Olsen]])<br />
* solv the issue with mouse poiter is hide, do not show the mousepointer when you are moving the mouse. tested in winquake ([[Magnus Olsen]])<br />
* ShowCursor, gott a internal count to show the mouse or not, and return that value. as msdn descripe. ([[Magnus Olsen]])<br />
* Fixing a small bug for hide mouse. Save the current surface under the mouse. But do not blt the mouse pointer. It takes care of small glitch I have seen in winquake. ([[Magnus Olsen]])<br />
* fix some bugs wih org with strechblt. ([[Magnus Olsen]])<br />
* Correct Streachblt in windows mode, it take accunt org and offset now. ([[Magnus Olsen]])<br />
* Thanks GvG for helping put to gather a new math formula that make alot of calc not needed any longer. and correct fourmla for rounding fault. I did not think of it when I rewrote the streachblt. it feal strechblt is bit fasfer agains the old one. ([[Magnus Olsen]])<br />
* check return value of RtlDeleteAtomFromAtomTable ([[Johannes Anderwald]])<br />
* simply, optimize, bugfix UserRegisterClass ([[Johannes Anderwald]])<br />
* allow de-registration for system classes ([[Johannes Anderwald]])<br />
* set ERROR_CLASS_DOES_NOT_EXIST in case of errors ([[Johannes Anderwald]])<br />
* fix UserGetClassLongPtr && UserSetClassLongPtr ([[Johannes Anderwald]], [[Thomas Weidenmueller]])<br />
* fix Bug 1376, patch from SuperTrax at gmx dot de (owner of supertrax dot de, nic.de lookup Mark Hipp)if a Window was showed normaly, GetWindowPlacement never returned a showCmd. commited by ([[Magnus Olsen]])<br />
* Bug 252 commiting file desktop.c from bug 252 , the patch is from (j_anderw at sbox dot tugraz dot at) it make our win32k lile more stable commited by ([[Magnus Olsen]])<br />
* Bug 1391 : patch from ([[Thomas Weidenmueller]]) for Some Ansi vs. Unicode fixes for window classes commited by ([[Magnus Olsen]])<br />
* Bug 1393 : Patch from ([[Thomas Weidenmueller]]) Fix moving class objects between desktop heaps and the shared heaps commited by ([[Magnus Olsen]])<br />
* fix 16 to 16 soyrce dest why the hell does th 16bitmap surface calls into this ([[Magnus Olsen]])<br />
* Fix the xlate bug in 24dib correct fix more buttom showing right in firefox now ([[Magnus Olsen]])<br />
* fast cleanup in dib/dib24bpp.c, Fixing a crash bug in dib32bpp.c (typo from me), xlate XO_TABLE can resive 0xffff or 0xffff or 0xffffff or 0xffffffff as color code for table, but the table is only 256 but in color&FF, That will stop firefox crash and translate the color right. ([[Magnus Olsen]])<br />
* Bug : 1452 : patch from w3seek, some xlate obj fixes for indexed palettes, should fix a hack introduced in r21292 commited by ([[Magnus Olsen]])<br />
* Win32k Header Rewrite ([[Alex Ionescu]])<br />
* Fix flaw in win32k hardware message queue which used KMUTEX instead of KMUTANT, thus double*disabling Kernel APCs during the parsing of the queue, which would result in actually deliving hardware message callbacks with Kernel APCs disabled when going to user*mode. This was detected when my new user*mode callback rewrite added checks for this situation, and it originally caused a bugcheck. Since the message queue code is now fixed, the bugcheck has been re*enabled, hopefully no other such violations will be detected.([[Alex Ionescu]])<br />
* Clear Tcb*>Win32Thread during win32 cleanup. ([[Alex Ionescu]])<br />
* Allow TLS usage for 1088 TLS slots, fixes part of Bug 191. Patch by Filip Navara (navaraf@reactos.com)([[Alex Ionescu]])<br />
* Remove NtGdiDeleteDC and refernces to it as it is not a real win32 API. ([[Brandon Turner]])<br />
* Remove NtGdiCheckColorsInGamut and refernces to it as it is not a real win32 API. ([[Brandon Turner]])<br />
* Replace NtGdiCreatePatternBrush and NtGdiCreateHatchBrush with NtGdiCreatePatternBrushInteral and NtGdiCreateHatchBrushInteral. ([[Brandon Turner]])<br />
* Implement CreateHatchBrush, CreatePatternBrush ([[Brandon Turner]])<br />
* Rename NtGdiGetTextExtentPoint to NtGdiGetTextExtent and correct the declaration. ([[Brandon Turner]])<br />
* Implemented PS_DOT, PS_DASH and PS_INSIDEFRAME in IntGdiCreatePenIndirect ([[Christoph von Wittich]])<br />
* Fixed LoadCursorIconImage - this made Thunderbird working ([[Christoph von Wittich]])<br />
* Fix BSOD when executing gdi32_winetest bitmap ([[Saveliy Tretiakov]])<br />
<br />
== HAL ==<br />
<br />
== Kernel mode drivers ==<br />
=== kbdclass/mouclass ===<br />
* Make code very similar ([[Hervé Poussineau]])<br />
* Add kbdclass and mouclass as upper filter for keyboard and mouse devices. ([[Hervé Poussineau]])<br />
* Correctly propagate DO_BUFFERED_IO, DO_DIRECT_IO and FILE_DEVICE_SECURE_OPEN flags ([[Hervé Poussineau]])<br />
<br />
=== PCI ===<br />
* Implement InterfacePciDevicePresent(Ex) of PCI_DEVICE_PRESENT_INTERFACE ([[Hervé Poussineau]])<br />
* Allow PCI bus cascading ([[Hervé Poussineau]])<br />
<br />
=== pciide/pciidex ===<br />
* Add them to bootcd ([[Hervé Poussineau]])<br />
* Don't claim already claimed IDE channels ([[Hervé Poussineau]])<br />
<br />
=== USB ===<br />
* OHCI controller driver was imported from Linux-2.5, UHCI imported also and works too. Port driver also is imported from Linux-2.5, but no WindowsXP-compatible interface has been developed yet. At the moment the drivers for mouse and keyboard are built-in and work, but this feature is unstable. ([[Aleksey Bragin]])<br />
* Allow more than one USB controller ([[Hervé Poussineau]])<br />
* Add support for USB mouse/keyboard (but only with a reboot now) ([[Hervé Poussineau]])<br />
<br />
=== videoprt ===<br />
* Implement VideoPortGetAssociatedDeviceExtension and VideoPortCheckForDeviceExistence ([[Hervé Poussineau]])<br />
<br />
== Services ==<br />
<br />
== Win32&trade; Libraries ==<br />
== ADVAPI32 ==<br />
* Registry functions of ADVAPI32 are tested against WINE's, 20+ failures fixed in RegEnumValueKeyA/W, RegOpenKeyA/W, and small fixes in corresponding NT Api functions (NtOpenKey). The only missing things for now are RegSaveKey/RegLoadKey which don't pass WINE tests yet. ([[Aleksey Bragin]])<br />
* Bug 1345 : patch from w3seek Fixes for BuildTrusteeWithObjectsAndName, BuildTrusteeWithObjectsAndSid and GetTrusteeName. A test apps exits also from w3seek not commited. commited by ([[Magnus Olsen]])<br />
<br />
== NEWDEV ==<br />
* Implement UpdateDriverForPlugAndPlayDevicesW ([[Hervé Poussineau]])<br />
* Search devices on removable media when doing an automatic install ([[Hervé Poussineau]])<br />
<br />
== SETUPAPI ==<br />
* Implement CM_Add_IDA, CM_Add_IDW, CM_Add_ID_ExA, SetupCopyOEMInfA/W, SetupDiGetActualSectionToInstallExA/W, SetupDiGetClassDevPropertySheetsW, SetupDiGetClassImageIndex, SetupDiGetClassImageList, SetupDiGetClassImageListExA/W, SetupDiGetDeviceInfoListClass, SetupDiGetDeviceInfoListDetailW, SetupDiGetDeviceInstanceIdW, SetupDiGetDriverInfoDetailW, SetupDiGetSelectedDevice, SetupGetInfFileListW, SetupDiInstallClassExA/W, SetupDiInstallDeviceInterfaces, SetupDiLoadClassIcon, SetupDiSetClassInstallParamsW, SetupDiSetSelectedDevice ([[Hervé Poussineau]])<br />
* Rewrite SetupDiGetActualSectionToInstallExW, to allow the exact semantics (platform extension, version...) ([[Hervé Poussineau]])<br />
* Select the best driver when several are available ([[Hervé Poussineau]])<br />
* Take care of Include and Needs directives in .inf files ([[Hervé Poussineau]])<br />
<br />
== System control panel ==<br />
* Intl.cpl - Locale changing implemented ([[Aleksey Bragin]])<br />
* Sysdm.cpl - Write the new environment vars to the registry. Fixes 987. ([[Brandon Turner]])<br />
* Main.cpl - Grammical Fixes. Fixes bug 847. ([[Brandon Turner]])<br />
* Sysdm.cpl - Show the computer name when loaded. ([[Brandon Turner]])<br />
* Timedate.cpl - Added year selection box ([[Christoph von Wittich]])<br />
* Timedate.cpl - Increased buffer size - now all timezones are displayed properly ([[Christoph von Wittich]])<br />
* Timedate.cpl - Display current time in date/time control ([[Christoph von Wittich]])<br />
* Desk.cpl - Redesigned screensaver page ([[Christoph von Wittich]])<br />
* Desk.cpl - Made screen picture transparent ([[Christoph von Wittich]])<br />
* Appwiz.cpl - Implemented "Show Updates" functionality and fixed some bugs ([[Christoph von Wittich]])<br />
<br />
== Libraries shared with Wine ==<br />
* rpcrt4.dll - Implement context handle support for servers and clients ([[Saveliy Tretiakov]])<br />
<br />
== Win32&trade; Applications ==<br />
<br />
= FreeLdr =<br />
* - Added support for NTLDR style freeloader GUI. ([[Alex Ionescu]])<br />
<br />
= Setup =<br />
* Implemented Unattended Setup ([[Johannes Anderwald]])<br />
* Fixed 2nd stage setup in VGA mode ([[Christoph von Wittich]])<br />
* Changed display mode string from 640x680 to 640x480 ([[Christoph von Wittich]])<br />
<br />
{{Changelog}}<br />
<br />
[[Category:ChangeLogs]]</div>Sabikihttps://reactos.org/wiki/index.php?title=ChangeLog-0.2.9&diff=12571ChangeLog-0.2.92007-03-11T15:17:01Z<p>Sabiki: add a released date</p>
<hr />
<div>This is the changelog for [[ReactOS]]&trade; version 0.2.9 (released 23 December, 2005), an open-source operating system designed to be binary executable- and device driver-compatible with Microsoft&trade; Windows NT&trade; and subsequent Microsoft operating systems such as Windows 2000&trade; and Windows XP&trade;. ReactOS is written by the ReactOS development team, and the last previous version of ReactOS was [[ChangeLog-0.2.8|version 0.2.8]] (released 29 October, 2005).<br />
<br />
==General==<br />
=== Generic 0.2.9 Changes ===<br />
* New icons from our UI:mf<br />
* Add option to not install bootloader for Bug 961: suggest to make it easy for other people that do not want install freeldr. ([[Magnus Olsen]])<br />
* Survey of all references to Windows and replace with ReactOS in user visable text where appropriate. Bug #910 ([[Magnus Olsen]])<br />
* Too many MSVC compile fixes to list them all (Steven, Ged, Royce, Brandon, Christoph, Brezenbak, others)<br />
* Sync up sprintf.c with swprintf.c. They both do the same except one is the wchar-version, so they shouldn't differ in other parts." by Elrond <elrond(at)samba(dash)tng(dot)org><br />
* VBE.sys TotalMemory is in number of 64K block not 16K block see VBE 2.0 or 3.0 specification ([[Magnus Olsen]])<br />
* factor out .inf file handling code and put it in a separate library ([[Gé van Geldorp]])<br />
* Improve Freeloader compilation speed and remove lots of code duplication.<br />
* Update NDK to 1.0 and fix all required FIXMEs for release.<br />
* Write .inf files for ReactOS drivers. ([[Hervé Poussineau]])<br />
* Install automatically drivers for detected devices. ([[Hervé Poussineau]])<br />
* Add a network class installer (netcfgx.dll, used when installing network cards). ([[Hervé Poussineau]])<br />
* Add a display class installer. ([[Hervé Poussineau]])<br />
* Add Tonga timezone (GMT+13:00). ([[Eric Kohl]])<br />
<br />
=== RBUILD ===<br />
* build system now automatically detects msys instead of requiring user to set env variable. ([[Royce Mitchell]])<br />
* build system does version check of Make up front - gives clear error message if running incompatible version of Make ([[Royce Mitchell]])<br />
* build system now allows parallel builds (different makefile.auto and different config.xml) ([[Art Yerkes]])<br />
* build system now allows conditional modules ([[Art Yerkes]])<br />
* Implement linkerscript element and <autoregister> element. ([[Casper Hornstrup]])<br />
* The separator (slash or back slash), exepostfix and exeprefix are initialized from environment variables. The separators in the path for the system command are always converted for the host system. Our own build utilities must convert paths itself (bin2res). ([[Hartmut Birr]])<br />
<br />
=== Translations ===<br />
* Full Hungarian translation and initial keyboard layout added<br />
* Full Japanese translation by tsk email tsk_n@mail.goo.ne.jp <br />
* Added Polish translation of explorer by Kokodin<br />
* Greek translation by Apal (Apostolos Alexiadis grad0621@di.uoa.gr) Bug 967<br />
* French translation by bulio<br />
* Greek Translation by Apal see bug 994<br />
* Many Spanish Translations by samchaly_at_hotmail_dot_com<br />
<br />
= ReactOS Core =<br />
== Kernel and Executive (<code>NTOSKRNL</code>) ==<br />
* Fix bugcheck during shutdown ([[Gé van Geldorp]])<br />
* Add user-contributed shutdown messages ([[Gé van Geldorp]])<br />
* Add hardware breakpoints and watchpoints to GDB stub ([[Gé van Geldorp]])<br />
* Update some system structures to Windows 2003 so that NT 5.2 drivers can now load and be tested. ([[Alex Ionescu]])<br />
* Send a hacked access state to FS Drivers, they can depend on one. For now use one with full FILE_ALL_ACCESS privileges. ([[Alex Ionescu]])<br />
* Hackplement ObLogSecurityDescriptor for W2K3 drivers to be happy. ([[Alex Ionescu]])<br />
* Remove unimplemented macro in SeOpenObjectAuditAlarm and replace it with a DPRINT1; that way callers won't freeze while calling it. ([[Alex Ionescu]])<br />
* Fixed two really nasty bugs in I/O completion: ([[Alex Ionescu]])<br />
** The user buffer wasn't written for incomplete I/O (warning levels) for METHOD_BUFFERED<br />
** Incomplete I/Os (warning levels) took a completely wrong path for completion.<br />
* Reimplement Fast Mutex implementation in HAL/NT to be compatible with the real implementation. (Fast Mutex needs to raise IRQL). ([[Alex Ionescu]])<br />
* Implement ExEnterCriticalRegionAndAcquireFastMutexUnsafe and ExReleaseFastMutexUnsafeAndLeaveCriticalRegion. ([[Alex Ionescu]])<br />
* Implement and export ntoskrnl version of Fast Mutex ([[Alex Ionescu]])<br />
* Fix a typo causing a potentially fatal bug in user-mode exceptions. ([[Alex Ionescu]])<br />
* Correctly zero out esi during new thread context switch. Thanks to Patrick Baggett. ([[Alex Ionescu]])<br />
* Fix KeAttackProcess, KeStackAttachProcess, KeUnstackDetachProcess and KeDetachProcess. ([[Alex Ionescu]])<br />
* Allocate bus number resources in IopAssignDeviceResources. ([[Hervé Poussineau]])<br />
* When a driver is a legacy driver, call its AddDevice function with a NULL Pdo ([[Hervé Poussineau]])<br />
* Fixed the mapping for low alignment images ([[Hartmut Birr]]).<br />
* Set the correct type and state in MiQueryVirtualMemory. Return an error in MiProtectVirtualMemory if we trying to access a region other than a section view or virtual memory. Don't allow to read or write kernel memory in NtRead/WriteVirtualMemory. Don't unprotect the memory in NtWriteVirtualMemory. Don't allow to change the memory protection of kernel address space. If it is possible, access the memory aligned by pages (in ProbeForWrite). Change the protection in WriteProcessMemory if it is necessary. ([[Hartmut Birr]])<br />
* Removed the initialisation of the kernel map area. Allocate the region for the paged and non paged pool at a 4MB boundary. Protect the local and i/o apic by a memory area. ([[Hartmut Birr]])<br />
* Lock always the address space if we changing the virtual mapping. This is necessary because we can create or remove a page table. If we unmap a section, we have to wait for all pending pageops for the section within the current process. We do this by waiting for all pageops for the section. Merged MmReleaseMemoryArea into MmReleaseMmInfo. We can only release the address space look if we are calling MmUnmapViewOfSection.([[Hartmut Birr]])<br />
* Map the NLS tables after creating the PEB. The top-down mapping of the NLS tables may occupied the region for the PEB. Fixed the check for the MEM_TOP_DOWN flag in MmMapViewOfSection. ([[Hartmut Birr]])<br />
* Do always dereference the section object if it was created (in PspCreateProcess). ([[Hartmut Birr]])<br />
* Fixed the growing of the dirty bitmap. This will fix the registry update bugs, if the binary hive is larger than 128kB. ([[Hartmut Birr]])<br />
* Removed the process from the parameter list of MmCreateMemoryArea. Changed the 9th parameter of MmCreateMemoryArea to allocation flags. Implemented SEC_NO_CHANGE. ([[Hartmut Birr]])<br />
* Fixed a few length calculation in NtEnumerateValueKey, which has resulted in a overflow, if the given buffer was too small. Fixed the test for the dirty bitmap size. Fixed the length to copy the old dirty bitmap. Set the value/data cell to dirty, if an existing value is overwritten. Used the size of the data cell instead of the previous data length to check if enough space is available (in NtSetValueKey). ([[Hartmut Birr]])<br />
* Waiting for a fast mutex should be done in kernel mode. ([[Hartmut Birr]])<br />
* Lock the MainResource from fcb, if we are trying to write back a modified cache segment. Usually we have to call the callback function from FSD. ([[Hartmut Birr]])<br />
* Allocate the memory for the search pattern in kernel space if it is necessary (in NtQueryDirectoryFile). ([[Hartmut Birr]])<br />
* Used the already detected cache line size for RtlPrefetchMemoryNonTemporal. Initialized RtlPrefetchMemoryNonTemporal earlier. Change the memory protection during the initialisation of RtlPrefetchMemoryNonTemporal. ([[Hartmut Birr]])<br />
* Release the rmap list lock after cleaning the head entry in MmDeleteAllRmaps. This may fix bug #1071. ([[Hartmut Birr]])<br />
<br />
== Run Time Library (RTL) ==<br />
* Fix searching for error messages in resources ([[Gé van Geldorp]])<br />
* Implement RtlSelfRelativeToAbsoluteSD2 and RtlCreateSystemVolumeInformationFolder ([[Thomas Weidenmueller]])<br />
* Implement RtlInitializeUnicodePrefix, RtlNextUnicodePrefix, RtlRemoveUnicodePrefix, RtlInsertUnicodePrefix, RtlFindUnicodePrefix. ([[Alex Ionescu]])<br />
* Implement RtlInitializeGenericTable ([[Alex Ionescu]])<br />
* Implement RtlSplayTree, RtlSplay, RtlRealPrecessdor, RtlRealSuccessor, RtlDelete ([[Alex Ionescu]])<br />
* Fix RtlSubtreePredecessor/Successor, someone had implemented them backwards. ([[Alex Ionescu]])<br />
* Implement RtlPrefectMemoryNonTemporal. Patch by Patrick Baggett <baggett.patrick@gmail.com> and myself. ([[Alex Ionescu]])<br />
<br />
== Native Library (NTDLL) ==<br />
* <placeholder><br />
<br />
== HAL == <br />
* Fixed Ki386WriteFsByte. ([[Hartmut Birr]])<br />
<br />
== Kernel Mode Drivers ==<br />
=== Input Device ===<br />
* i8042prt "increase the number of passes to detect the mouse and keyboard - fixes mouse detection under VMware if the VM does not have ownership of the mouse. Thanks to GreatLord and Royce"<br />
* Prevent i8042prt to search for a keyboard/mouse more than once. ([[Hervé Poussineau]])<br />
* New serial mouse driver, which is PnP compliant. ([[Hervé Poussineau]])<br />
* Rewrite kbdclass, so it can now handle more than one keyboard. ([[Hervé Poussineau]])<br />
* Rewrite mouclass, so it can now handle more than one mouse. ([[Hervé Poussineau]])<br />
<br />
=== ACPI ===<br />
* acpi_pci_X_cfg_Y ([[Aleksey Bragin]])<br />
<br />
=== NDIS ===<br />
* Fix interrupt handling in PCNet (VMware) driver ([[Gé van Geldorp]])<br />
<br />
=== Storage ===<br />
* Fix memory overwrite in pciidex driver ([[Gé van Geldorp]])<br />
* Implemented SMART commands for ide devices. ([[Hartmut]])<br />
* Add pciidex (controller driver) and pciide (miniport driver). They enumerate channels 0 and 1 on IDE controllers. ([[Hervé Poussineau]])<br />
<br />
=== USB ===<br />
* <placeholder><br />
<br />
=== Videoprt ===<br />
* <placeholder><br />
<br />
=== PCI ===<br />
* Transform pci.sys to a Plug-and-Play driver. ([[Hervé Poussineau]])<br />
* Simplify most of the PciCreateCompatible*String functions. ([[Hervé Poussineau]])<br />
* Fix error handling in FdoQueryBusRelations. ([[Hervé Poussineau]])<br />
* Implement InterfacePciDevicePresent(Ex) of PCI_DEVICE_PRESENT_INTERFACE. ([[Hervé Poussineau]])<br />
* Implement IRP_MJ_PNP / IRP_MN_QUERY_INTERFACE for GUID_BUS_INTERFACE_STANDARD. ([[Hervé Poussineau]])<br />
<br />
=== vfatfs ===<br />
* Don't try to create a file, if no parent fcb was found. ([[Hartmut Birr]])<br />
* Use the calculated cluster/offset pair if we extend a file. ([[Hartmut Birr]])<br />
* Lock the MainResource if we overwrite or supersede an existing file. Use given allocation size, if we overwrite or supersede an existing file. ([[Hartmut Birr]])<br />
<br />
=== npfs ===<br />
* Release the correct locks and release they in the correct sequence. ([[Hartmut Birr]])<br />
* Use the share disposition to detect the direction of a pipe. ([[Hartmut Birr]])<br />
<br />
== Services ==<br />
=== umpnpmgr ===<br />
* <placeholder><br />
=== SC ===<br />
* Wrote sc.exe Includes support for:<br />
** query, queryex, create, start, stop, delete ([[Ged Murphy]])<br />
* Various MSVC warning and compile fixes ([[Steven Edwards]])<br />
=== tcpsvcs ===<br />
* converted to a full NT service ([[Ged Murphy]])<br />
* Various MSVC warning and compile fixes ([[Steven Edwards]])<br />
=== Windows Installer Service ===<br />
* Correct registry information for msiexec to allow for Office2000/XP/2003 to start to install ([[Steven Edwards]])<br />
<br />
= Networking =<br />
* Rewrote ipconfig ([[Ged Murphy]])<br />
* Resolve chained CNAME records ([[Gé van Geldorp]]) <br />
* Add static entries for PCNet and NE2000 network cards to registry, so networking works in the LiveCD ([[Gé van Geldorp]])<br />
<br />
= Session Manager (SMSS) =<br />
= Win32&trade; Personality =<br />
== User mode subsystem server (CSRSS) ==<br />
* Implement some of the shutdown functionality ([[Gé van Geldorp]])<br />
<br />
== Kernel-mode subsystem server (Win32K) ==<br />
* Implemented code for tile and stretch wallpapers. ([[Brandon Turner]])<br />
* Fixed a bug so the wallpaper gets written to registry and stays on reboot. ([[Brandon Turner]])<br />
* Implement the saving of wallpaper styles in WinSta and the registry. ([[Brandon Turner]])<br />
* Broaden the truetype lock to clear up text artifacts ([[Art Yerkes]])<br />
* Fix display of menus in Firefox ([[Gé van Geldorp]]) <br />
* Make Firefox menus actually work ([[Gé van Geldorp]]) <br />
* Pass correct masks when creating bitfield palettes ([[Gé van Geldorp]]) <br />
* Fix a bitmap upside-down problem ([[Gé van Geldorp]])<br />
* Implement IntEngAlphaBlend, NtGdiAlphaBlend functions, 8, 16, 24 and 32 bpp DIB AlphaBlend functions. ([[Gregor Anich ]])<br />
* Implement GetMenuBarInfo ([[James Tabor]])<br />
<br />
== Win32&trade; Libraries ==<br />
=== ADVAPI32 ===<br />
* Implement GetServiceDisplayNameW, GetServiceKeyNameW and NotifyBootConfigStatus. ([[Eric Kohl]])<br />
* Implement MakeAbsoluteSD2 ([[Thomas Weidenmueller]])<br />
<br />
=== KERNEL32 ===<br />
* Fix Firefox installer ([[Gé van Geldorp]])<br />
* Implement proper version of WaitNamedPipeW to be used when NPFS will be modified to work as documented. ([[Alex Ionescu]])<br />
* Fix CreateNamedPipeW to convert some NT flags properly, timeouts, etc. ([[Alex Ionescu]])<br />
* Fix CallNamedPipeW, the pipe mode should also be set to PIPE_WAIT. ([[Alex Ionescu]])<br />
* Fix bugs in PeekNamedPipe and DisconnectNamedPipe. ([[Alex Ionescu]])<br />
* Use the share disposition to detect the direction of a pipe. ([[Hartmut Birr]]<br />
* Removed some escape sequences from the command line in CreateProcessInternalW. ([[Hartmut Birr]]).<br />
<br />
=== IMAGEHLP ===<br />
* Refactor entire library.<br />
* Implement BindImage/BindImageEx.<br />
<br />
=== NEWDEV ===<br />
* Create newdev.dll to handle automatic driver installation for detected devices. ([[Hervé Poussineau]])<br />
<br />
=== SETUPAPI ===<br />
* Call specified class installer, class coinstallers and device coinstallers (if any) in SetupDiCallClassInstaller. ([[Hervé Poussineau]])<br />
* Implement SetupDiCreateDevRegKeyW, SetupDiDestroyDriverInfoList, SetupDiGetClassDevPropertySheetsW, SetupDiGetDeviceInfoListDetailW, SetupDiGetDeviceInstallParamsW, SetupDiGetDeviceInstanceIdW, SetupDiGetDriverInfoDetailW, SetupDiOpenDeviceInterfaceA., SetupDiOpenDevRegKey, SetupDiSetDeviceInstallParamsW, SetupDiSetDeviceRegistryPropertyW. ([[Hervé Poussineau]])<br />
* Better SetupInstallServicesFromInfSectionExW, which takes care of flags and can update configuration of an existing service. ([[Hervé Poussineau]])<br />
* Add stubs for SetupDiGetClassImageList, SetupDiGetClassImageListExA/W, SetupDiDestroyClassImageList. ([[Hervé Poussineau]])<br />
<br />
=== DirectX ===<br />
* Create new headers and clean up existing headers (nothing users will notice yet) ([[Magnus Olsen]])<br />
* dplay and dplayx have been taken from wine with minor alterations. ([[Magnus Olsen]])<br />
* Implement the following api's but not tested yet for directx hal in win32k : WaitForVerticalBlank, GetScanLine, FlipToGDISurface ([[Magnus Olsen]])<br />
* Added d3d8thk.dll and dplay.dll to bootcd ([[Magnus Olsen]])<br />
* Added dplayx.dll to bootcd ([[Magnus Olsen]])<br />
* Sync all code shared with Wine ([[Gé van Geldorp]])<br />
<br />
=== SHELL32 ===<br />
* correctly call HCR_GetFolderAttributes() in SHELL32_GetItemAttributes() to fix explorer's start menu root ([[Martin Fuchs]]<br />
<br />
=== USER32 ===<br />
* <placeholder><br />
<br />
=== MMDRV ===<br />
* Implement GetDeviceCapabilities, GetDeviceCount for modMessage. <br />
* Implement GetDeviceCapabilities implement GetDeviceCapabilities and GetDeviceCount for midMessage. <br />
* Remove hardcode of Find one device of midiout and wavout now scan for WaveOutXX, WaveInXX, MidiInXX, MidiOutXX, AuxXX. <br />
* Implement AUXDM_GETVOLUME, AUXDM_SETVOLUME which completes auxMessage.<br />
* Implement more case to widMessage, remove the stub of ThreadCallWaveDevice and implement it there it need it. <br />
* Implement some part of waveopen. <br />
* Implement parts of waveThread.<br />
* Implement WaveThreadSetData, WaveThreadGetData. <br />
* Implement soundGetData and WaveThreadSetState, implement soundSetData. <br />
* Sound now partly working in windows. ([[Magnus Olsen]])<br />
<br />
=== MSVCRT ===<br />
* Fix C++ exception handling ([[Gé van Geldorp]])<br />
* Implemented wgetmainargs. Fixed the allocating of argv if a empty cmd line is given. Fixed the allocating of pgmptr. ([[Hartmut Birr]])<br />
<br />
== Libraries shared with Wine ==<br />
* Synced to Wine-0.9.1, 0.9.2 and 0.9.3 ([[Gé van Geldorp]])<br />
<br />
== Win32&trade; Applications ==<br />
=== CMD ===<br />
* Remove all differences between compilation when __REACTOS__ is and isnt defined. ([[Brandon Turner]])<br />
* Fixed all compilation errors in "activate" and a bug to not allow it to find some windows. ([[Brandon Turner]])<br />
* Allow "exit" to print its help text. ([[Brandon Turner]])<br />
* Replace hack to get correct path casing with correct implemnatation. ([[Brandon Turner]])<br />
* Dir formatting changes. ([[Brandon Turner]])<br />
* Change over some long texts to paging. ([[Brandon Turner]])<br />
* Correctly implement Control Handler to cancel line input, message child process, and set the breaker for internal commands. ([[Brandon Turner]])<br />
* Fix the return of not found envirnmental variables. ([[Brandon Turner]])<br />
* Make all directories in a path that do not already exist for "mkdir". ([[Brandon Turner]])<br />
* ^M executes the current input. ([[Brandon Turner]])<br />
* Fix continuous repaint ([[Gé van Geldorp]])<br />
<br />
=== TASKMGR ===<br />
* Adjust output graphics when resizing the application window (Martin Fuchs, patch from watz at gmx.net)<br />
* Fix endless loop during termination ([[Gé van Geldorp]])<br />
<br />
=== EXPLORER ===<br />
* rearrange start menu ([[Ged Murphy]])<br />
** move apps into applications folder<br />
** put solitaire and winemine into games folder<br />
* test version of startmenu root with big icons ([[Martin Fuchs]])<br />
* Adjust for Visual Studio 2005: ([[Martin Fuchs]])<br />
** switch to standard conform CRT function names<br />
** use secure CRT functions where available<br />
** use COUNTOF instead of hard coded buffer sizes<br />
** project files in new format for manifest integration<br />
** simplify secure function usage using template overloads<br />
** struct FileHolder to encapsulate _tfopen/_tfopen_s()<br />
* integrate replacement function for SHBindToParent() ([[Martin Fuchs]])<br />
* fix bug 1139: disable printer submenu folder in "settings" start menu ([[Martin Fuchs]])<br />
<br />
=== Gettype ===<br />
* Created a gettype program with all local and most remote capiabtlies as the microsoft version. ([[Brandon Turner]])<br />
<br />
=== WINEFILE ===<br />
* <placeholder><br />
<br />
=== CONTROL PANEL ===<br />
* Fixed a bug where the first applet in main.cpl could only be called (fixes by Alex Buell <alex.buell(at)munted.org.uk> and Sebastian Gasiorek).<br />
* Make property pages fit in 640x480 ([[Gé van Geldorp]])<br />
<br />
=== Devmgr ===<br />
* Imeplement device driver installation wizard ([[Christoph von Wittich]])<br />
* Implement DevicePropertiesEx, DeviceProblemWizard, DeviceAdvancedProperties. ([[Thomas Weidenmueller]])<br />
<br />
=== WINECALC ===<br />
* Buffer overflow fixed ([[Royce Mitchell]])<br />
* Converting between hexidecimal, decimal, binary, and octal correctly. ([[Magnus Olsen]])<br />
<br />
=== IBrowser ===<br />
* Offer to download Mozilla control ([[Gé van Geldorp]])<br />
<br />
=== Regedit ===<br />
* Implement Export keys, and the usablitly of favorites. ([[Nathan Woods]])<br />
* polish resource file from Sebastian Gasiorek ([[Martin Fuchs]], patch from sebastian dot gasiorek at gmail dot com)<br />
* Fixed a buffer overflow in RefreshListView. ([[Hartmut Birr]])<br />
<br />
= FreeLdr =<br />
* Fix "Codepage not found" error by setting correct registry entries ([[Gé van Geldorp]])<br />
* Fix hang during loading of NDIS.SYS ([[Gé van Geldorp]])<br />
* Invalidate the start value if the start key doesn't exist ([[Hartmut Birr]]).<br />
* Changed all registry functions to WCHAR. Implemented packed/unpacked names for keys and values. Fixed the hash values for very short data ([[Hartmut Birr]]). <br />
* Don't search for a serial mouse, if the port is used for debug prints ([[Hartmut Birr]]).<br />
<br />
= Setup =<br />
* Register DLLs during installation ([[Gé van Geldorp]])<br />
<br />
= Usetup =<br />
* Get the cursor keys on the numpad working (patch by tinus).<br />
* Use the correct read length in ConReadConsoleInput. ([[Hartmut Birr]])<br />
<br />
{{Changelog}}<br />
<br />
[[Category:ChangeLogs]]</div>Sabikihttps://reactos.org/wiki/index.php?title=ChangeLog-0.2.8&diff=12570ChangeLog-0.2.82007-03-11T15:15:56Z<p>Sabiki: add a released date</p>
<hr />
<div>This is the changelog for [[ReactOS]]&trade; version 0.2.8 (released 29 October, 2005), an open-source operating system designed to be binary executable- and device driver-compatible with Microsoft&trade; Windows NT&trade; and subsequent Microsoft operating systems such as Windows 2000&trade; and Windows XP&trade;. ReactOS is written by the ReactOS development team, and the last previous version of ReactOS was [[ChangeLog-0.2.7|version 0.2.7]] (released August 22, 2005).<br />
<br />
==General==<br />
=== Generic 0.2.8 Changes ===<br />
* Finalized implementation of the NDK and fixed all outstanding main header issues. ([[Alex Ionescu]])<br />
* Increased PCH uaage ([[Alex Ionescu]])<br />
* Updated Freetype to 2.1.10 ([[Alex Ionescu]])<br />
* New top-level target 'msvc' to create msvc build files. ([[Royce Mitchell]])<br />
<br />
=== Translations ===<br />
* Swedish Update and translation by Anders, Andreas Bjerkeholt, David Nordenberg<br />
<br />
= ReactOS Core =<br />
== Kernel and Executive (<code>NTOSKRNL</code>) ==<br />
* Fix PsKillMostProcesses to run in the context of the system process. ([[Hartmut]])<br />
* Implemented IRP_MJ_QUERY_VOLUME_INFORMATION/FileFsDeviceInformation. ([[Hartmut]])<br />
* Implemented MEMORY_AREA_PEB_OR_TEB and MEMORY_AREA_PAGED_POOL for MiQueryVirtualMemory.([[Hartmut]])<br />
* Make GDB available for release builds ([[Gé van Geldorp]])<br />
* Fix GDB backtrace ([[Gé van Geldorp]])<br />
* Fixed APC delivery bug with Normal Routine receing from parameters ([[Alex Ionescu]])<br />
* Fixed thread termination APC semantics ([[Alex Ionescu]])<br />
* Disable APC Queuing and add APC Flushing during thread shutdown, call Lego routine during thread shutdown ([[Alex Ionescu]])<br />
* Properly decrease Thread Quantum during Waits ([[Alex Ionescu]])<br />
* Optimize locking in Timer Code ([[Alex Ionescu]])<br />
* Fix Timer Object Type Initializer to actually use ExpTimerDelete when the object is deleted. ([[Alex Ionescu]])<br />
* Fix Initializer to report correct memory usage of timer object. ([[Alex Ionescu]])<br />
* Fix Initializer to report OBJ_OPENLINK as an invalid attribute for timer objects. ([[Alex Ionescu]])<br />
* Use correct access masks when modifying or querying timer objects. ([[Alex Ionescu]])<br />
* Handle wake timers in NtCancelTimer. ([[Alex Ionescu]])<br />
* Return warning NTSTATUS code if a wake timer is requested but not supported by the system (default on ROS). ([[Alex Ionescu]])<br />
* Check for valid timer type in NtCreateTimer. ([[Alex Ionescu]])<br />
* Check for valid period in NtSetTimer. ([[Alex Ionescu]])<br />
* Don't dereference the timer in NtSetTimer three times.([[Alex Ionescu]])<br />
* Return the correct Due Time in NtQueryTimer by substracting the stable interrupt time. ([[Alex Ionescu]])<br />
* Optimize Lookaside List implementation ([[Alex Ionescu]])<br />
* Fix bugs in Semaphore code ([[Alex Ionescu]])<br />
* Fixed a bug in IoCreateDevice and added an optimization ([[Alex Ionescu]])<br />
* Added failure cases in NtAllocateVitualMemory ([[Alex Ionescu]])<br />
* Fixed NtSignalAndwaitForSingleObject to use SEH and optimized it for speed ([[Alex Ionescu]])<br />
* Implement SeDefaultObjectMethod for security callbacks of objects which don't have a custom one.<br />
* Initialize more fields when creating an Object Type ([[Alex Ionescu]])<br />
* Correct the Pool Charge for Object Types, select a Default Object, always use a security procedure, read global flag for maintaing type lists, set the pool type ([[Alex Ionescu]])<br />
* Initialize a Default Wait Object. ([[Alex Ionescu]])<br />
* Fix security callback for objects. ([[Alex Ionescu]])<br />
* Completely reimplemented NtWaitForMultipleObjects not to use 25% of available stack space and added checks for invalid waits. Also optimized for speed to remove a call which significantly slowed down execution. <br />
* Use DefaultObject from Object Header and remove all previous associated hacks, including the IO_TYPE hack. The DefaultObject will either be NULL, an offset to an internal Object Event, or a pointer to a default event. We handle all three. ([[Alex Ionescu]])<br />
* Guard KeWaitXXX calls with SEH since it can raise exceptions. ([[Alex Ionescu]])<br />
* Fixed a large amount of bugs in ObpAllocateObjectAttributes & Name<br />
* Fix NtSuspendThread: correct PreviousMode check, return error if thread is terminating, handle KeSuspendThread's possible exception, only attempt to return previous suspend count if asked to. ([[Alex Ionescu]])<br />
* Make KeSuspendThread return an exception if the thread has been suspended beyond the limit. ([[Alex Ionescu]])<br />
* Implement KeQueryBasePriorityThread to return the actual Base Priority Increment (or Saturation Increment) to NtQueryInformationThread. ([[Alex Ionescu]])<br />
* Fix priority formulas, account for saturation, do proper km_um conversions for out of bounds or saturation priorirites, create an internal priority change function to be called if the lock is already held ([[Alex Ionescu]])<br />
* Do not report that ROS is running on 0 active processors, that's a bad idea. ([[Alex Ionescu]])<br />
* Actually check the affinity mask set by NtSetInformationThread ([[Alex Ionescu]])<br />
* Fix the check in KeSetAffinityThread ([[Alex Ionescu]])<br />
* Give a valid affinity to the system thread (corresponding to the active cpu affinity set). ([[Alex Ionescu]])<br />
* Define and use a list of Bus Type GUIDs instead of saving the GUID in a ROS-only field of DEVICE_NODE. ([[Alex Ionescu]])<br />
* Use a IRP_MN_QUERY_CAPABILITIES PnP IRP to get the Address of a DeviceNode, intead of saving it inside a ROS-only field.<br />
* Use correct wait mode when checking alertability in KeDelayExecuteThread. ([[Alex Ionescu]])<br />
* The KTHREAD alterted flag is now properly set to FALSE during APC delivery during traps. ([[Alex Ionescu]])<br />
* More support for PKEXCEPTION_FRAME has been added for future PPC/IA64/etc compatibility. ([[Alex Ionescu]])<br />
* Context to/from TrapFrame functions have been greatly fixed to allow for edited frames, special cases, exceptions and also have the necessary support for supporting sanitation based on PreviousMode. ([[Alex Ionescu]])<br />
* KDBG now shows the proper CS/SS at all times, previous hack was removed. ([[Alex Ionescu]])<br />
* Systemcall code was optimized a bit and the trap code was made a lot more generic so that in can be made into macros (it currently isn't, for debugging purposes). ([[Alex Ionescu]])<br />
* V86 Mode trap frame bias has now been added to make trap code a lot more generic and shareable in the future. ([[Alex Ionescu]])<br />
* Fix Ntcontinue to respect AlertThread paramter. ([[Alex Ionescu]])<br />
* Fix KiDispatchException's logic, fix hacks when calling KeUserExceptionDispatcher, use correct context <br />
flags ([[Alex Ionescu]])<br />
* Modify some kernel functions (like KeContextToTrapFrame, KiDispatchException, KiInitializeUserApc, etc.) to <br />
support a PKEXCEPTION_FRAME for future PPC compatibility. ([[Alex Ionescu]])<br />
* Reimplement NtContinue to have more platform-independent code, and to protect and validate user-mode context <br />
and parameters with SEH. ([[Alex Ionescu]])<br />
* Fix KiInitializeUserApc to use KeTrapFrameToContext, to save the debug registers, not to deliver APCs during <br />
v86 mode, and to protect user-mode stack operations in SEH and probing. Also make it generate the proper stack for the <br />
user-mode callback. ([[Alex Ionescu]])<br />
* Implement KiUnexpectedInterrupt and KiCoprocessorError ([[Alex Ionescu]])<br />
* Reimplement NtRaiseException in ASM to take advantage of optimizations due to the trap frame being in the <br />
stack when called through System call interface. ([[Alex Ionescu]])<br />
* Fix some functiosn to return with KiServiceExit2 instead of KiServiceExit when required/needed ([[Alex Ionescu]])<br />
* Implemented NtQueryDebugFilterState and NtSetDebugFilterState ([[Alex Ionescu]])<br />
* Implemented DbgUiConnectToDbg, DbgUiContinue, DbgUiWaitStateChange, DbgUiRemoteBreakin, DbgUiIssueRemoteBreakin ([[Alex Ionescu]])<br />
* Fix a bug where APCs were not dispatched after a system call ([[Alex Ionescu]])<br />
* Implement alldvrm and aulldvrm and export them from ntoskrnl. ([[Alex Ionescu]])<br />
* Properly support Special APC Disabling. ([[Alex Ionescu]])<br />
* Allow Guarded Mutex and Guarded Regions to function properly. ([[Alex Ionescu]])<br />
* Fix several bugs in KeFreezeAllThreads ([[Alex Ionescu]])<br />
* Optimize KeRundownThread to reduce contention ([[Alex Ionescu]])<br />
* Set kernel apc pending flag when needed in KeReleaseMutant ([[Alex Ionescu]])<br />
* Remove duplicated listhead initialization in KeInitiializeMutex ([[Alex Ionescu]])<br />
* Use correct increment in KeReleaseMutex ([[Alex Ionescu]])<br />
* Raise right exception in KeReleaseMutant ([[Alex Ionescu]])<br />
* Add RtlSetProcessCritical ([[Alex Ionescu]])<br />
* Fix signalstate check in KGATE code ([[Alex Ionescu]])<br />
* BCB tracing implementation ([[Royce Mitchell]])<br />
<br />
== Run Time Library (RTL) ==<br />
* Implement !DeletePinned case in RtlEmptyAtomTable. ([[Filip]])<br />
* Fixed the definition of RtlUnicodeStringToCountedOemSize. This will fix bug 756. ([[Hartmut]])<br />
* We have only to signal the event if someone waits on it in RtlLeaveCriticalSection. ([[Hartmut]])<br />
* Rewrote RtlCreateUserProcess, RtlCreateUserThread. Updated and fixed RtlExitUserThread, RtlFreeUserThreadStack. ([[Alex Ionescu]])<br />
* Implement RtlCaptureContext ([[Alex Ionescu]])<br />
* RtlRaiseException to handle cases when a user-mode debugger is present ([[Alex Ionescu]])<br />
* RtlRaiseStatus as above, plus set the exception address and capture context ([[Alex Ionescu]])<br />
* Fix RtlDispatchException, add cases for exceptions in the DPC stack and validate the validity of the <br />
exception frames. Add support for exception logging by the global flag. Use TRAP_FRAME/EXCPETION_FRAME instead of <br />
Context. ([[Alex Ionescu]])<br />
* Fix RtlUnwind logic, support cases where it's called with custom arguments instead of NULL. ([[Alex Ionescu]])<br />
* Reimplement RtlpCaptureContext to work properly, convert exception handler calling functions to INTEL syntax <br />
and fix some bugs (like checking for the right unwind flag, clearing volatile register values, etc. Also use some <br />
optimizations to increase speed. ([[Alex Ionescu]])<br />
* Implement KiRaiseException, add SEH to all user-mode parameters and when copying data to the user-mode stack. ([[Alex Ionescu]])<br />
* Implemented all the Dbg* APIs. ([[Alex Ionescu]])<br />
<br />
== Native Library (NTDLL) ==<br />
* Implement NTDLL's CSR routines in a compatible way. Fix prototypes, argument count, deprecated functions and new functions. Also added NtSecureConnectPort. ([[Alex Ionescu]])<br />
* Make NTDLL Ki* callbacks have SEH to protect them and return to kernel-mode with notification of any <br />
exceptions ([[Alex Ionescu]])<br />
* Fix seriously broken User-Mode Ldr thunk and APC Callback prototypes ([[Alex Ionescu]])<br />
* Fix KiUserExceptionDispatcher ([[Alex Ionescu]])<br />
* Fixed multiple bugs in RTL string routines ([[Alex Ionescu]])<br />
* Implement DbgPrintEx, vDbgPrintEx, and vDbgPrintExWithPrefix ([[Royce Mitchell]])<br />
<br />
== HAL == <br />
*Complete reimplementation of HAL DMA routines:<br />
** Proper support for bus-master device adapters.<br />
** Real implementation of map registers.<br />
** Basic support for emulating scatter/gather DMA on devices that don't support it in hardware.<br />
** Support for transfers that aren't page aligned.<br />
** Proper detection and support of EISA DMA controllers.<br />
** Fixed prototype for HalFlushCommonBuffer.<br />
([[Filip Navara]])<br />
<br />
== Kernel Mode Drivers ==<br />
=== Input Device ===<br />
* Fix "AllocConsole failed" bug ([[Gé van Geldorp]])<br />
=== ACPI ===<br />
* Fix the implement of KeFlushQueueApc<br />
* Fixed the return value in KeRundownQueue if the queue is empty. This should fix bug 751. ([[Hartmut]])<br />
<br />
=== NDIS ===<br />
* Implemented (copied from NdisAllocatePacketPool) NdisAllocatePacketPoolEx ([[Hartmut]])<br />
* Implemented NDIS_RW_LOCK ([[Filip]])<br />
* Implement NdisAllocatePacketPool ([[Filip]])<br />
<br />
=== Storage ===<br />
* Import VMware BusLogic SCSI driver<br />
<br />
=== USB ===<br />
* Create a common library between UHCI and OHCI miniports ([[Hervé Poussineau]])<br />
* Report USB devices to PnP manager ([[Hervé Poussineau]])<br />
* Major USB improvments:<br />
** Improve hardware support in linux_wrapper<br />
** Add embedded drivers, register them in linux usb stack<br />
** Add working wrapper for keyboard and mouse devices - now if usbohci or uhci loads, it will be the first to create KeyboardClass0 and PointerClass0 devices, so PS/2 keyb/mouse won't work.<br />
** Added logic for registering miniport at port driver (like Windows' usb stack does)<br />
** fixed issues with timing, host controller reset, new devices discovery, other small things (better to see diff :) ).<br />
([[Aleksey Bragin]])<br />
* Implemented USBD_ParseConfigurationDescriptorEx and USBD_ParseDescriptors. ([[Jim Tabor]])<br />
<br />
=== Videoprt ===<br />
* Implement VideoPortVerifyAccessRanges ([[Hervé Poussineau]])<br />
<br />
== Services ==<br />
=== umpnpmgr ===<br />
* Implemented:<br />
<br />
** CM_Locate_DevNode_ExW<br />
** CM_Get_Device_ID_Size[_Ex]<br />
** CM_Get_Device_ID[_Ex]W<br />
** CM_Get_Depth[_Ex]<br />
** CM_Get_DevNode_Status[_Ex]<br />
** CM_Get_Child_Ex<br />
** CM_Get_Parent_Ex<br />
** CM_Get_Sibling_Ex<br />
** CM_Set_DevNode_Problem[_Ex]<br />
** CM_Get_Device_ID_List_Size_ExA<br />
** CM_Get_Device_ID_ExA<br />
** CM_Get_Device_ID_List_ExA<br />
** CM_Get_DevNode_Registry_Property[_Ex]A/W<br />
** CM_Set_DevNode_Registry_Property[_Ex]A/W<br />
** CM_Set_Registry_Property_ExA<br />
** StringTableInitializeEx<br />
** StringTableGetExtraData<br />
** StringTableSetExtraData<br />
** CM_Get_Class_Key_Name[_Ex]A/W<br />
** CM_Open_Class[_Ex]A/W<br />
** CM_Get_Class[_Ex]A/W<br />
** CM_Get_Class_Key_Name_ExA<br />
** CM_Delete_Class_Key[_Ex]<br />
** CM_Enumerate_Enumerators[_Ex]A/W. ([[Eric Kohl]])<br />
<br />
=== EventLog ===<br />
* Implement basic file operations. WindowsNT compatible file format. (Saveliy Tretiakov)<br />
* Write events from lpc port to System Log. To read these events, open \ReactOS\system32\config\SysEvent.evt in Windows EventViewer. (Saveliy Tretiakov)<br />
* RPC server stubs. (Saveliy Tretiakov)<br />
=== tcpsvcs ===<br />
* implement simple tcp/ip services ([[Ged Murphy]])<br />
* includes services for chargen, daytime, echo, discard and Quote Of The Day ([[Ged Murphy]])<br />
* introduce code to run as a service, but not activated yet ([[Ged Murphy]])<br />
<br />
= Networking =<br />
* Open handle to afd.sys as asynchromous ([[Gé van Geldorp]])<br />
* Count each handle which has pending events only once, independent of the number of pending events ([[Gé van Geldorp]])<br />
* Implemention of a hostname ([[Emanuele_Aliberti]])<br />
<br />
= Session Manager (SMSS) =<br />
= Win32&trade; Personality =<br />
== User mode subsystem server (CSRSS) ==<br />
* Implemented CsrDuplicateHandleTable. ([[Hartmut]])<br />
* almost do-nothing base source code for new CSR server DLLs host ([[Emanuele_Aliberti]])<br />
* base source code for the core CSR server DLL 'csrsrv.dll' (server 0) ([[Emanuele_Aliberti]])<br />
* base source code for the base WIN server DLL 'basesrv.dll' (server 1) ([[Emanuele_Aliberti]])<br />
* base source code for the console+user WIN server DLL 'winsrv.dll' (servers 3 and 2) ([[Emanuele_Aliberti]])<br />
* Implement csrsrv!CsrSrvInitializeServerDll based on current code from CsrpInitWin32Csr. ([[Emanuele_Aliberti]])<br />
<br />
== Kernel-mode subsystem server (Win32K) ==<br />
* Implement OffsetClipRgn ([[Thomas_Weidenmueller]])<br />
* Add generation of 8/32bpp DIB code ([[Gé van Geldorp]])<br />
* Fix DIB memory leak ([[Gé van Geldorp]])<br />
* Send window-bound timers to the correct message queue ([[Gé van Geldorp]])<br />
* Use the pitch provided by FreeType ([[Gé van Geldorp]])<br />
* SetPixel should return the new color (Goplat)<br />
* Make sure we don't hang forever when activating a window belonging to another thread ([[Gé van Geldorp]])<br />
* Inform HAL about the switch to graphics mode as late as possible ([[Gé van Geldorp]])<br />
* Destroy the desktop window during shutdown ([[Gé van Geldorp]])<br />
* Make FindWindow case insensitive ([[Gé van Geldorp]])<br />
* partial implementation of ShowWindowAsync() to activate the Explorer desktop switcher ([[Martin Fuchs]])<br />
* Fix an issue in the menu code which was causing WinRAR and other applications not to load ([[Alex Ionescu]])<br />
<br />
== Win32&trade; Libraries ==<br />
=== ADVAPI32 ===<br />
* Implemented:<br />
<br />
** RegDeleteKeyValue<br />
** RegSetKeyValueA/W<br />
** SetFileAttributesByHandle<br />
** GetFileAttributesByHandle<br />
** RegDisablePredefinedCacheEx<br />
** RegDeleteTree. ([[Thomas_Weidenmueller]])<br />
<br />
=== KERNEL32 ===<br />
* Implemented CreateSymbolicLink. ([[Thomas_Weidenmueller]])<br />
* Implemented IsThreadAFiber. ([[Thomas_Weidenmueller]])<br />
* Fixed GetEnvironmentVariable memory allocation. ([[Thomas_Weidenmueller]])<br />
* Implemented GetSecurityInfo, SetSecurityInfo, GetNamedSecurityA/W, SetNamedSecurityInfoA/W, SetEntriesInAclA/W, GetInheritanceSource, FreeInheritedFromArray, GetExplicitEntriesFromAcl, and TreeResetNamedSecurityInfo. ([[Thomas_Weidenmueller]])<br />
* Reimplment FindFirstFileEx. ([[Hartmut]])<br />
* Implement MoveFileWithProgressW so it can handle movefile / folder on a volume or to another one. It does not set the attrib or take the EA at accunt ([[Magnus Olsen]])<br />
* Implement SetComputerNameExA/W ([[Hervé Poussineau]])<br />
* Rewrote process and thread creation/termination functions to support for:<br />
** SxS,<br />
** SFP (SAFER),<br />
** DllPaths,<br />
** Proper process environment/paramter block creation<br />
** Proper console handle management,<br />
** Tokens/CreateProcessAsUser, <br />
** Simpler code for path lookup, and more robust.<br />
** Support for "auto-correction"<br />
** 16-bit/NE detection<br />
** A variety of creation flags are now properly supported<br />
** Added support for an undocumented-yet-known shell flag<br />
** Alert for flags we don't support yet<br />
** Catch invalid flag combinations and other caller errors<br />
** Improve and correct path searcing to use documented behaviours<br />
([[Alex Ionescu]])<br />
* Updated fiber support. Added support for Sxs, FLS, FPU State Save, sped up code and fixed startup parameters ([[Alex Ionescu]])<br />
* Fix wrong SignalObjectAndWait return values. ([[Alex Ionescu]])<br />
* Retry waiting if STATUS_ALERTED is returned ([[Alex Ionescu]])<br />
* Open BNO directory with correct privileges, open CSR connection with correct path. <br />
* Add InWindows boolean to use the right CSR ServerID in windows and add a hack to get kernel32 to be loadable if used with .local to force an application to use our kernel and not the system one. The result of this is that our kernel32 can now load in Windows XP (not 2000). ([[Alex Ionescu]])<br />
* Export and implement CreateProcessInternalA and CreateProcessInternalW ([[Alex Ionescu]])<br />
* Export and implement NlsGetCacheUpdateCount ([[Alex Ionescu]])<br />
* Bug fixes in CreateProcess. ([[Hartmut]])<br />
* Allocated a converting buffer for WideCharToMultiByte. bug #702. ([[Hartmut]])<br />
<br />
=== NEWDEV ===<br />
* Create a basic newdev.dll, and implement DevInstallW function (permits to install devices from command line) ([[Hervé Poussineau]])<br />
=== SETUPAPI ===<br />
* Implemented:<br />
** SetupDiBuildDriverInfoList<br />
** SetupDiCallClassInstaller<br />
** SetupDiCreateDeviceInfoW<br />
** SetupDiEnumDriverInfoA/W<br />
** SetupDiGetDeviceInstallParamsA<br />
** SetupDiGetDeviceInterfaceDetailA/W<br />
** SetupDiGetDeviceRegistryPropertyA/W<br />
** SetupDiGetSelectedDriverW<br />
** SetupDiInstallDevice<br />
** SetupDiInstallDriverFiles<br />
** SetupDiOpenDeviceInfoA/W<br />
** SetupDiSelectBestCompatDrv<br />
** SetupDiSetSelectedDriverW<br />
** SetupGetInfFileListW<br />
** SetupGetInfInformationW<br />
** SetupInstallServicesFromInfSectionA/W<br />
** SetupInstallServicesFromInfSectionExW (used during device installation, needed for Plug-and-Play) ([[Hervé Poussineau]])<br />
<br />
=== DirectX ===<br />
Some new stuff for directx, but the call are not in use yet. and it is not wort mentor, untill we can test the api, the change was implement some gdientr to gdi32.dll and some change to win32k. ([[Magnus Olsen]])<br />
<br />
=== SHELL32 ===<br />
* Fix shell32 spec file to properly export LogoffWindowsDialog as the proper ordinal (54) so that explorer won't crash on shutdown when calling it. Implement the LogoffWindowsDialog stub. ([[Alex Ionescu]])<br />
=== USER32 ===<br />
* fix repositioning of text (brbak)<br />
* Implemented SetTaskmanWindow and SetProgmanWindow<br />
* Implement ValidateRect. ([[Filip Navaraf]])<br />
* GetMenuStringA and GetMenuStringW inverted the MF_BYPOSITION parameter. Buffers were incorrectly copied in and wrong size returned in GetMenuItemInfoA ansi-structures. ([[Jens Colins]])<br />
* Implemented VkKeyScan, GetKeyboardTypeand, GetKeyboardLayout, ShowOwnedPopups, ArrangeIconicWindows, SetMenuItemBitmaps ([[Jim Tabor]])<br />
<br />
== Libraries shared with Wine ==<br />
* Synced to Wine-20050830 and Wine-20050930 ([[Gé van Geldorp]])<br />
<br />
== Win32&trade; Applications ==<br />
=== Arp ===<br />
* display correct interface index ([[Ged Murphy]])<br />
* delete all hosts with -d ([[Ged Murphy]])<br />
* display informative error messages ([[Ged Murphy]])<br />
* better arg control from cmd line ([[Ged Murphy]])<br />
=== Netstat ===<br />
* rewrite of the netstat tool to simulate the MS app ([[Ged Murphy]])<br />
* implemented -a -e -n -p -r -s and interval ([[Ged Murphy]])<br />
=== Route ===<br />
* alter output to simulate the MS route utility ([[Ged Murphy]])<br />
=== TraceRoute ===<br />
* wrote tracert and added it to the build ([[Ged Murphy]])<br />
=== CMD ===<br />
* Fixed a bug in IsConsoleHandle. ([[Hartmut]])<br />
* Speed Optimize the delete command. ([[Hartmut]])<br />
* Fixed the allocation of the buffer for the environment variable in ProcessInput. ([[Hartmut]])<br />
* Restore console title after running a command ([[Gé van Geldorp]])<br />
* Complete copy command rewrite to include all features of MS CMD. ([[Brandon Turner]])<br />
* CD rewrite and support paths on different drives. ([[Brandon Turner]])<br />
* Implemented /P in dir for paging. ([[Brandon Turner]])<br />
* Implemented ConOutResPaging. ([[Brandon Turner]])<br />
* Implemented Windows style tab complete. ([[Brandon Turner]])<br />
* Changed the way start and execute parse the file name to allow ". Bug #690 ([[Brandon Turner]])<br />
* Implemented batch file redirection. ([[Brandon Turner]])<br />
* Make sure the path displayed by $P is the correct case. ([[Brandon Turner]])<br />
* Implemented better handling of escape char ^. ([[Brandon Turner]])<br />
* Implemented the proper useage of %PROMPT%. ([[Brandon Turner]])<br />
* Fixed del allow same features as MS CMD. ([[Brandon Turner]])<br />
* Fixed dir *. it only show folders ([[Magnus Olsen]])<br />
* Fixed bug 739 in bugzila, can not create file notepad newfile.txt at cmd prompt ([[Magnus Olsen]])<br />
* Fixed type can handler \n at text output thx ravelo for the small patch.<br />
* Do not crash if the prompt command name are binger that 260char or the command line. ([[Magnus Olsen]])<br />
* Fixed bug in searching for bat/cmd files ([[Magnus Olsen]])<br />
* Implement start execute support for bat/cmd file. woking in windows ([[Magnus Olsen]])<br />
* lemented "" remove for the start command. This makes 'start dir1\"dir2a dir2b"\dir3\foo.exe param' work change by Martin Rottensteiner 2005only@pianonote.at irc nick ravelo<br />
* Fixed bug in date if the input arg are not right dateformat, it should promt after new date. ([[Magnus Olsen]])<br />
* Fixed more cmd goto bugs. found labels bugs, and search label bugs, param bugs. now it should work fine ([[Magnus Olsen]])<br />
* Make CMD rember startpath when you change from start drive to another drive. ([[Magnus Olsen]])<br />
* Fixed pipe bugs ([[Magnus Olsen]])<br />
* Fixed all bugs in cmd commands cd, make it rember the last directory for each drive. make c: working, make cd f f working. We can not found any more bugs cd rewriting was done by BrandonTurner and me, Brandon rewrite cmd_chdir and I add two functions that we will use for cd and other commands to get and set current drive path. The /D are also implement in CD ([[Magnus Olsen]])<br />
* Add environment variable COPYCMD to copy ([[Magnus Olsen]])<br />
<br />
=== TASKMGR ===<br />
* Adjust output graphics when resizing the application window (Martin Fuchs, patch from watz at gmx.net)<br />
<br />
=== EXPLORER ===<br />
* Fix double-clicking Control Panel items ([[Gé van Geldorp]])<br />
* Handle .msi files ([[Gé van Geldorp]])<br />
* Fix icon alignment when the screen width is not a multiple of the icon spacing ([[Gé van Geldorp]])<br />
* Make the explorer taskbar look a bit nicer ([[Filip Navara]])<br />
* Fix the taskbar button resizing to account for button spacing. ([[Filip Navara]])<br />
* Update spanish translation (Filip Navara, patch from Patricio Martínez)<br />
* new tool bar icons for the drive bar ([[Martin Fuchs]])<br />
* dynamic explorer start menu sidebar size ([[Martin Fuchs]])<br />
* new, smaller startmenu pictures using the dynamic explorer start menu sidebar feature (greatlrd)<br />
* MDI/SDI option dialog: pictures for illustration, remove resizable flag ([[Martin Fuchs]])<br />
* new option to open explorer subfolders in separate windows ([[Martin Fuchs]])<br />
* fix directory traversing in explorer SDI windows ([[Martin Fuchs]])<br />
* fix tree list image loading ([[Martin Fuchs]])<br />
* complete german resources for explorer ([[Martin Fuchs]])<br />
* "execute" menu entry ([[Martin Fuchs]])<br />
* activate execution from command bar ([[Martin Fuchs]])<br />
* fix UNICODE control panel calls to handle double clicks on the task bar clock ([[Martin Fuchs]])<br />
* one-click activation of "Start" button ([[Martin Fuchs]])<br />
* implemented command line parser for Explorer ([[Martin Fuchs]])<br />
* Fix for Bug 330: Correctly handle WM_COMMAND messages in web windows without web control ([[Martin Fuchs]])<br />
* replace "search computer" start menu entry by a "not yet implemented" message ([[Martin Fuchs]])<br />
<br />
=== WINEFILE ===<br />
* fixed handle leak in font selection dialog (Martin Fuchs, patch from Christoph at ApiViewer.de)<br />
* added new icon images in 48x48 and 16x16 resolutions ([[Martin Fuchs]])<br />
<br />
=== Calc ===<br />
* Reset on new calculation (brbak)<br />
* Fix precision bug (Slicencium)<br />
=== ZoomIn ===<br />
* Implement ZoomIn's functionality ([[Martin Fuchs]])<br />
=== VmwInst ===<br />
* Add installation path for VMware 5.5. (Mike)<br />
=== Devmgr ===<br />
* Added simple device manager ([[Michael Fritscher]], [[Hervé Poussineau]])<br />
<br />
= FreeLdr =<br />
* Properly handle partition(0) to mean active partition ([[Gé van Geldorp]])<br />
* Don't trust the returned date/time from the BIOS. QEmu messes this up sometimes. ([[Gé van Geldorp]])<br />
* Fixed the size of the hyperspace area (thanks to Filip Navara). ([[Hartmut]]) <br />
* Enabled Pae mode in freeldr if it is requested. ([[Hartmut]])<br />
<br />
{{Changelog}}<br />
<br />
[[Category:ChangeLogs]]</div>Sabiki