VirtualBox

Changeset 29473 in vbox


Ignore:
Timestamp:
May 14, 2010 2:20:01 PM (15 years ago)
Author:
vboxsync
Message:

Try to page in all module memory

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/common/VBoxService/VBoxServicePageSharing.cpp

    r29472 r29473  
    5959/**
    6060 * Registers a new module with the VMM
    61  * @param   dwProcessId     Process id
    62  */
    63 void VBoxServicePageSharingRegisterModule(HANDLE hProcess, PKNOWN_MODULE pModule)
     61 * @param   pModule     Module ptr
     62 */
     63void VBoxServicePageSharingRegisterModule(PKNOWN_MODULE pModule)
    6464{
    6565    VMMDEVSHAREDREGIONDESC   aRegions[VMMDEVSHAREDREGIONDESC_MAX];
     
    131131        MEMORY_BASIC_INFORMATION MemInfo;
    132132
    133         SIZE_T ret = VirtualQueryEx(hProcess, pBaseAddress, &MemInfo, sizeof(MemInfo));
     133        SIZE_T ret = VirtualQuery(pBaseAddress, &MemInfo, sizeof(MemInfo));
    134134        Assert(ret);
    135135        if (!ret)
     
    147147            case PAGE_EXECUTE_READ:
    148148            case PAGE_READONLY:
     149            {
     150                char *pRegion = (char *)MemInfo.BaseAddress;
     151
     152                /* Touch all pages. */
     153                while (pRegion < (char *)MemInfo.BaseAddress + MemInfo.RegionSize)
     154                {
     155                    char dummy;
     156
     157                    memcpy(&dummy, pRegion, 1);
     158                    pRegion += PAGE_SIZE;
     159                }
    149160                aRegions[idxRegion].GCRegionAddr = (RTGCPTR64)MemInfo.BaseAddress;
    150161                aRegions[idxRegion].cbRegion     = MemInfo.RegionSize;
    151162                idxRegion++;
     163
    152164                break;
     165            }
    153166
    154167            default:
     
    220233    do
    221234    {
     235        char *pszDot = strrchr(ModuleInfo.szModule, '.');
     236        if (    pszDot
     237            &&  (pszDot[1] == 'e' || pszDot[1] == 'E'))
     238            continue;   /* ignore executables for now. */
     239
    222240        /* Found it before? */
    223241        PAVLPVNODECORE pRec = RTAvlPVGet(ppNewTree, ModuleInfo.modBaseAddr);
     
    237255                pModule->hModule  = LoadLibraryEx(ModuleInfo.szExePath, 0, DONT_RESOLVE_DLL_REFERENCES);
    238256                if (pModule->hModule)
    239                     VBoxServicePageSharingRegisterModule(hProcess, pModule);
     257                    VBoxServicePageSharingRegisterModule(pModule);
    240258
    241259                pRec = &pModule->Core;
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette