- The good:
- Fixes hangs/freezes in trunk
- No matter how sluggish the system got, I was able to move the mouse and other apps were still responsive even though one app was hogging the CPU.
- Balancer thread activates and does its job of preventing deadlocks.
- The code was heavily tested and some of it is based off direct pseudo-code from NT's very own kernel (legally obtained from Windows Internals II slides) as well as Windows Internals 4th.
The bad:
- Explorer takes 30 seconds to load, after that all is fine though.
- First-stage installer asserts at 18% in Mm instead of lagging like previously.
- Various other Mm crashes related to the above ^^.
- Please help out to fix/figure out the Mm crashes! It would be much appreciated, otherwise, in a week, we will revert this patch as well as the patch that caused the hangs/freezes.
svn path=/trunk/; revision=25639
- Fix all MSVC warnings in kernel32.
- Re-enable PCH.
- Disable Rtl*CondVar calls, since we can't target Vista *AND* 2003 due to linker problems. We'll need a way to create multiple DLL versions if we're going to attempt this.
- Make ASSERTs always valid in kernel32 as long as DBG is set.
- Fix Windows-loading hack, it seems there's only two levels of SEH. Eitherways, I think I've found a cleaner way to make it load nicely, so this hack will go away soon.
svn path=/trunk/; revision=25633
- Implement KeSetDisableBoostThread.
- Temporarily disable SEH/validation in NtQuery/SetProcess/ThreadInformation routines since it was making all calls fail.
- Fix bugs when using ThreadPriority, ThreadBasePriority, ThreadAffinityMask. Parameters are now validated properly, and affinity masked with the process.
- Implement ThreadSetIdealProcessor and ThreadPriorityBoost case.
- Implement ThreadZeroTlsCell case. TLS should now work properly.
- Make kernel32_winetest for threads usable.
- Update Kernel Fun.
svn path=/trunk/; revision=25631
- Make more init functions return TRUE/FALSE and bugcheck the system if they failed.
- Add more progress bar update calls.
- Merge MmInit2 and MmInit3 into MmInitSystem with different phase calls.
- Clear KeLoaderBlock after drivers have been loaded.
- Update kernel fun.
- Update symbolic names of certain strings in ntoskrnl.mc. Use WINDOWS_NT... instead of REACTOS because these names are documented and should be kept for cross-code compatibility.
svn path=/trunk/; revision=25629
Acdring to Sylvain Petreolle, spetreolle at yahoo.fr this is copy paste from windows xp cpl, it is not allown todo a copy paste of sentence from windows xp, he did compare it.
svn path=/trunk/; revision=25627
- Replace mm failure detection code by dprint + while loop to avoid bugchecks which might make the error worse to see.
- Remove some deprecated code/functions and cleanup clock.c entirely.
svn path=/trunk/; revision=25626
- Create Phase 1 initialization for the SRM (SeInitSystem). Right now it inserts the system boot token into object manager, which is something we forgot to do before.
- Renamed ExPhase2Init to Phase1Initialization, since it's not Phase 2.
- Updated Phase 1 PS Initialization to get the KeLoaderBlock pointer and use it as a context parameter when calling Phase1Initialization.
- Split off Phase1Initialization into Phase1InitializationDiscard, which is the bulk of the phase 1 code (99% of it) and can be put in an .INIT section to be freed after boot.
- Modify parts of the Inbv setup code. Also implement support for /SOS, and try to mimic its behaviour on NT (not fully achieved). You will need /SOS to see boot messages on the screen! FreeLDR now adds this by default to the "Debug "configuration.
- Temporarily disable ReactOS Banner during boot. We will get this data from the .mc/.res file in a later patch instead of hard-coding it.
- Optimize calling and usage of ExpLoadInitialProcess.
- Add support for Y2K bug fix documented for Windows NT (/YEAR).
- Add support to detect WinPE/MiniNT/ReactOS Live CD.
- Add temporary debugging code to MmInit2 and some Mm functions to detect if these functions are being used too early, which could result in catastrophic to subtle bugs.
- Add more bugchecks when failures occur, and enhance others. Also add more codes to ntoskrnl.mc.
- Disable calls to ObfDereferenceDeviceMap since it's not yet implemented.
svn path=/trunk/; revision=25624
- Implement DbgLoadImageSymbols, Implement DebugService, and ExpLoadBootSymbols during phase 0 executive init to make KD load the symbols for all the boot drivers, and optionally breakpoint. Not yet useful since we don't have KD.
- Detect /BURNMEM and /PERFMEM and go all the way to determining the pages required, but warn the user that we don't support these flags yet.
- Detect FLG_KERNEL_STACK_TRACE_DB and FLG_ENABLE_EXCEPTION_LOGGING and warn that we don't support these yet.
- Add call to Cm to setup system variables, but disable until cm rewrite.
- Add PnP Manager initialization call and implement PnP Manager Phase 0 initialization (PiInitPhase0, PpInitializeDeviceReferenceTable), but this isn't used for now.
- Move MmInit2 to Phase 1 initialization, and initailize bootvid there as well.
- Add/Fix missing definitions, prototypes to NDK/NTIFS.
svn path=/trunk/; revision=25621
* __writemsr: pass 64-bit value with "A" constraint
* __writecr0, __writecr3, __writecr4: "memory" clobber becase Visual C++ does, too
svn path=/trunk/; revision=25620
- Implement a new timer expiration function which takes advantage of the fact that timers are now hashed with the system tickcount, and thus only parses the "hot" lists (dpc.c).
- Detect timer expiration during KeUpdateSystemTime and edit the KPRCB to notify of timer expiration. This will be picked up by the timer expiration DPC (clock.s).
- Add support for new timer code in dispatcher (wait.c, queue.c, ke_x.h).
- Change system startup to support the new timer DPC/list (krnlinit.c, clock.c).
- Remove corresponding entry from kernel fun, and update the guidance plan with recent successes and setbacks. This patch is likely the last big architectural change in the kernel except for enabling the new scheduler at a later time.
svn path=/trunk/; revision=25611
- Don't modify status when failing due to an access fault (NT doesn't!).
- Do parameter checks before bothering with expensive SEHing.
svn path=/trunk/; revision=25608
- Add KxQueueThreadWait macro based on previous ones.
- Add KxSetTimerForThreadWait to initialize the timer during the macros above. Wait timer setup is now done in two phases, which will be required with the new timer code anyway.
- Remove IRQL hack from idle loop when delivering DPCs.
- Make the wait code use the new macros and make it scale better.
- Add some missing definitions to asm.h
svn path=/trunk/; revision=25605
- Remove structures from ntifs.h that shouldn't be there.
- Add support for optimized detection of a DOS device path \?? or \??\ and implement it into ObpLookupObjectName.
- Add support for proper re-parsing up to a maximum of 30 times to avoid reparse DOS attacks on the kernel.
- Set WIN32_WINNT version to Windows 2003 SP1.
svn path=/trunk/; revision=25602