- Giannis Adamopoulos: Don't do callbacks to usermode when holding the lock. Fixes the famous "VMWare video driver installer 2nd stage hang" bug. Signed off by James Tabor.
See issue #2666 for more details.
svn path=/trunk/; revision=43119
This saves us from some copy steps and unneeded search operations.
- Fix loading HAL.DLL symbols.
This module is not guaranteed to be the second one in PsLoadedModuleList due to the kernel loading bootvid.dll.
- Don't duplicate code in KdbpSymFindModule and KdbpSymFindUserModule. Use a helper function instead and call it twice from KdbpSymFindModule.
- Get rid of KdbpSymFindModuleByAddress, KdbpSymFindModuleByName and KdbpSymFindModuleByIndex. Instead use a single KdbpSymFindModule for all three variants.
- Remove some unused functions and defines.
svn path=/trunk/; revision=43118
FreeLdr
- Goodbye Ke386EraseFlags & KeAmd64EraseFlags. Welcome __writeeflags.
- Respect MSVC when generating clc (clear carry flag) instruction in PcGetTime.
- Use portable __wbinvd instead of __asm__ in XboxMemInit.
- Replace broken gcc assembly by portable intrinsics in WinLdrpMapApic.
- Use portable Ke386SetSs and Ke386SetGs (new) in WinLdrSetProcessorContext.
- The far jump in WinLdrSetProcessorContext can not be expressed in masm, so we use a (untested) far return instead.
Kernel
- Replace Ke386Set/GetInterruptDescriptorTable, Ke386Save/RestoreFlags, Ke386Set/GetDr, Ki386Cpuid, Ke386Rdmsr and Ke386Wrmsr by MSVC alternatives present in intrin.h.
- Fixed Ke386Get/SetGlobalDescriptorTable, Ke386GetLocalDescriptorTable and Ke386GetTr -- the intrinsics were completely broken for MSVC and generated bogus code. Moreover, Ke386Set/GetInterruptDescriptorTable and Ke386Rdmsr were also affected. This lets us (in addition to having a bootable, working msvc compiled kernel) get rid of several hacky variable zero-initializations that hid this bug -- the way MSVC interpreted the inlined assembly resulted in uninitialized variable usage.
- Implement Ke386SetGs and add missing Ke386SetGs for gcc.
- KdPollBreakIn: Use portable KeDisableInterrupts instead of x86 intrinsics and flags.
svn path=/trunk/; revision=43103
- Header cleanup
- Fix several bugs related to null pointer access and out-of-bounds array access
- Found by Amine Khaldi
- This should fix the issue with dhcp crashing and hogging tons of cpu time
svn path=/trunk/; revision=43095
- Partly implement IShellFolder::GetAttributesOf
- Implement IShellFolder::GetDisplayNameOf for root pidl
- Implement ISF_ControlPanel_fnParseDisplayName to parse display names
<spoiler>Gets rid of the annoying message box when clicking on the printer folder in the start menu</spoiler>
svn path=/trunk/; revision=43094
- Implement save of position of a window
- Implement installation/deinstallation logs
- Implement auto updating programs list at start
- Remove unused code from loaddlg.c
- Some small changes bug fixes
svn path=/trunk/; revision=43081
- NCEs are no longer destroyed when they become stale so the hardware address can be saved for direct communication
- The route selection code has been changed to choose against stale NCEs if possible
svn path=/trunk/; revision=43077
- sect_attribs.h: Define _CRTALLOC for msvc. Enable #pragma section and add missing .tls and .tls$ZZZ.
- mingw runtime: Only use __attribute__((weak)) for gcc.
- freeldr: Use #pragma pack instead of __attribute__((packed)).
- kernel32: Only alias __cxa_pure_virtual to _purecall for gcc.
svn path=/trunk/; revision=43073