- Fix memory type for hal and referenced dlls
- Don't allocate the LPB, MADs and all the other stuff from the heap, instead allocate one block of memory for the LPB, extension, etc and strings (fits into one page) and another page for the MADs limit to 200 MADs, 1024 is way over the top)
- Map only those pages into kernel mode, that the kernel will need, this way we don't need to unmap anything later.
svn path=/trunk/; revision=53864
- Fix a typo in HalpAllocPhysicalMemory, that caused the function to remove MADs that still had pages rather than removing those who are empty. Fixes an assertion on VMWare.
Kudos go to Kamil for tracking it down.
- Fix another bug in HalpAllocPhysicalMemory, where the size of the newly allocated MAD was set to the alignment value instead of the original MAD, this lead to conflicting MADs and possible reuse of hal memory by the kernel. This seems to fix a bugcheck 0x19 with halacpi.
svn path=/trunk/; revision=53861
- Get rid of MmAllocateMemory, freeing about 1MB of low physical memory for the kernel
- verify that MmMarkPagesInLookupTable is not called with invalid page regions
- add maximum allocation to heap statistics
<long explanation>
There was a function called MmAllocateMemory, what was commented as "// Temporary forwarder..." since January 2008. This function allocated one page of memory and marked it as LoaderOsLoaderHeap. This function was used by the fat filesystem code (and linuxboot.c) which allocated and freed memory in small chunks all the time. Since MmFreeMemory() is not implemented at all (obviously someone removed it) we were allocating one full page for allocations as small as 8 bytes and never free them. This accumulated to a total of 240 pages, almost 1MB, split into into 14 chunks. This memory was never freed by the kernel (the kernel keeps the loader heap memory for some reason) and fragmented the low memory region.
Remove MmAllocateMemory completely and replace references in the fat code with MmHeapAlloc. The maximum heap usage after this was 184 KB, heap size is 4MB.
</long explanation>
svn path=/trunk/; revision=53857
- In TrackMouseEvent tests, use mouse_event function to move the mouse cause this causes low level hooks to be called and SetCursorPos doesn't
- Test low level mouse hooks for TrackMouseEvent
- Test ways to block WM_MOUSEHOVER and WM_MOUSELEAVE. This is useful to detect where each message is generated
- clean up the code a bit by adding FLUSH_MESSAGES macro that checks for expected message queue status and flushes the message queue
svn path=/trunk/; revision=53855
- Improve tracing
- Fix memory corruption caused by marking pages outside of page lookup table (when table is allocated only free pages was counted but MmMarkPagesInLookupTable was used for all types of memory like firmware). Fixes bugcheck in ACPI HAL which happened for me
svn path=/trunk/; revision=53848
- Undo disabling of systemcalls, which was disabled in r53646 for testing purpose.
- Sillence "Support for SYSENTER detected." debug print, since its the normal case, only keep the disabled and not present cases.
- Silence "xxx support detected but not yet taken advantage of" debug prints. CPU features are already reported and there is no point in printing every single feature we do not support.
- Invert if/else in KiRestoreFastSyscallReturnState
svn path=/trunk/; revision=53846
Add FREELDR_MEMORY_DESCRIPTOR structure using TYPE_OF_MEMORY instead of
MEMORY_TYPE. Use it in place of MEMORY_DESCRIPTOR. Undo r53837 changes.
svn path=/trunk/; revision=53841
* Add _dbg versions of freeldr_pe and setupldr_pe per Dmitry's request. They retain debug info, and they're compiled on-demand (not included in the normal build).
svn path=/trunk/; revision=53840
Fix wrong behavior of the "native applications startup at boot time" feature in SMSS.
Modifications:
- Added missing buffer allocation checks.
- Check for presence of default path.
- Minor clean-ups.
- Fix bad indentation/coding style.
Original patch by Hermès BÉLUSCA.
See issue #6180 for more details.
svn path=/trunk/; revision=53839
- Cleanup amd64 mm.h header
- Call MiScanMemoryDescriptors earlier, since it doesn't depend on anything except the loader block.
- MiComputeColorInformation() and the calculation of the pfn database size are portable, so move them out of MiInitMachineDependent
svn path=/trunk/; revision=53838
- Implement logging post messages or winevents
- For SetActiveWindow test, also test the parameters of WM_WINDOWPOSCHANGING and WM_WINDOWPOSCHANGED messages
- For TrackMouseEvent test, also test the WM_SYSTIMER that is possible to be logged now
svn path=/trunk/; revision=53830
The following modifications were made:
- Removed the help texts because they were copied from Windows Diskpart.
- Used a single string resource per help text.
- Used only Unicode strings and Unicode string functions.
- Replaced the giant if-statement in the command dispatcher in interpreter.c by a command-table and a little loop.
- Improved the command-line parser. Argument count and argument vector are passed to the command and help functions for easy evaluation.
- Moved the help function for commands into the command specific file.
TODO:
- Implement all commands as the utility is only an empty frame.
- Add help texts.
- Translate help texts.
See issue #6402 for more details.
svn path=/trunk/; revision=53826
- Session space address layout is architecture specific, move its initialization into MiInitializeSesseionSpaceLayout() in architecture specific file
- Use dedicated constants for setting MmSystemRangeStart, MmUserProbeAddress and MmHighestUserAddress isnetad of making assumptions.
svn path=/trunk/; revision=53825
Add MiScanMemoryDescriptors, that combines the work of MiPagesInLoaderBlock, the loop in MmInitializeMemoryLimits and the loop in MiInitMachineDependent.
svn path=/trunk/; revision=53822
* Bring-in some idl changes from Wine. These changes (and the related changes below) are to allow us to sync shell32 tests to Wine 1.3.29.
[UUID]
* CLSID_TaskbarList is no longer needed in here.
[ACTXPRXY]
* Sync with Wine 1.3.29.
svn path=/trunk/; revision=53820
Converting MmLargeStackSize from registry setting to byte value is portable code, move it out of MiInitMachineDependent
svn path=/trunk/; revision=53819
- Use TYPE_OF_MEMORY from the beginning instead of MEMORY_TYPE and later converting it.
- Disable tracing, accidentally comitted in previous revision
svn path=/trunk/; revision=53818
Fix some bugs in the code that deals with memory descriptors:
ArcGetMemoryDescriptor was enumerating the bios generated entries first and then the static entries. The latter were conflicting with the former and took precedence when initializing the page lookup table. The problem was, that MmFindLocationForPageLookupTable would use the highest range of pages available. If that range would be conflicting with a following static descriptor, the static would have been ignored. It only worked because on x86 the highest bios descriptor has enough free pages, before it conflicts with a static entry (page 0xfff, marked as unusable), so that the page lookup table could be created.
MmGetAddressablePageCountIncludingHoles enumerated all memory descriptors to find MmLowestPhysicalPage, but it was only counting FreeMemory, thus skipping all other memory ranges. This only worked, due to the previous bug, so that the bios pages shown first took precedence over the following static descriptors. Without the former bug MmLowestPhysicalPage would be 0x100 which would tigger in the next bug:
MmAreMemoryPagesAvailable took the passed address range and looked up all pages in the lookup table to see whether all are free. Now the function didn't check, whether the passed address was below MmLowestPhysicalPage and in case it was, happily accessed the memory below the lookup table. This would result in hal being loaded at 0x40000 overwriting the loader itself.
This is all fixe by implementing a new way of creating the memory map. First there is a static memory map, which has enough free entries to add dynamic ranges. Then AddMemoryDescriptor will allow you to add a new range,
while the already existing ranges will take precedence and the new ranges will be properly split and inserted, so that the resulting map does not contain any overlapping regions and is sorted from low to high pages. The static memory descriptor exists in the architecture specific file.
The code that enumerates the bios information now uses this function to add the ranges on top of the static descriptor.
More cleanup work to follow.
svn path=/trunk/; revision=53816