VirtualBox

Ignore:
Timestamp:
Jun 1, 2010 3:15:45 PM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
62237
Message:

Updates

File:
1 edited

Legend:

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

    r29952 r29955  
    356356#if 0
    357357    /* Check all loaded kernel modules. */
    358     ULONG                cbBuffer;
    359     PVOID                pBuffer = NULL;
    360     PRTL_PROCESS_MODULES pSystemModules;
     358    if (ZwQuerySystemInformation)
     359    {
     360        ULONG                cbBuffer;
     361        PVOID                pBuffer = NULL;
     362        PRTL_PROCESS_MODULES pSystemModules;
    361363   
    362     NTSTATUS ret = ZwQuerySystemInformation(SystemModuleInformation, (PVOID)&cbBuffer, 0, &cbBuffer);
    363     if (ret != STATUS_SUCCESS)
    364         goto skipkernelmodules;
     364        NTSTATUS ret = ZwQuerySystemInformation(SystemModuleInformation, (PVOID)&cbBuffer, 0, &cbBuffer);
     365        if (ret != STATUS_SUCCESS)
     366        {
     367            VBoxServiceVerbose(1, "ZwQuerySystemInformation returned %x (1)\n", ret);
     368            goto skipkernelmodules;
     369        }
    365370       
    366     pBuffer = malloc(cbBuffer);
    367     if (!pBuffer)
    368         goto skipkernelmodules;
    369 
    370     ret = ZwQuerySystemInformation(SystemModuleInformation, pBuffer, cbBuffer, &cbBuffer);
    371     if (ret != STATUS_SUCCESS)
    372         goto skipkernelmodules;
     371        pBuffer = RTMemAllocZ(cbBuffer);
     372        if (!pBuffer)
     373            goto skipkernelmodules;
     374
     375        ret = ZwQuerySystemInformation(SystemModuleInformation, pBuffer, cbBuffer, &cbBuffer);
     376        if (ret != STATUS_SUCCESS)
     377        {
     378            VBoxServiceVerbose(1, "ZwQuerySystemInformation returned %x (1)\n", ret);
     379            goto skipkernelmodules;
     380        }
    373381   
    374     pSystemModules = (PRTL_PROCESS_MODULES)pBuffer;
    375     for (unsigned i = 0; i < pSystemModules->NumberOfModules; i++)
    376     {
    377         /* Found it before? */
    378         PAVLPVNODECORE pRec = RTAvlPVGet(&pNewTree, pSystemModules->Modules[i].ImageBase);
    379         if (!pRec)
     382        pSystemModules = (PRTL_PROCESS_MODULES)pBuffer;
     383        for (unsigned i = 0; i < pSystemModules->NumberOfModules; i++)
    380384        {
    381             pRec = RTAvlPVRemove(&pKnownModuleTree, pSystemModules->Modules[i].ImageBase);
     385            /* Found it before? */
     386            PAVLPVNODECORE pRec = RTAvlPVGet(&pNewTree, pSystemModules->Modules[i].ImageBase);
    382387            if (!pRec)
    383388            {
    384                 /* New module; register it. */
    385                 char          szFullFilePath[512];
    386                 PKNOWN_MODULE pModule = (PKNOWN_MODULE)RTMemAllocZ(sizeof(*pModule));
    387                 Assert(pModule);
    388                 if (!pModule)
    389                     break;
    390 
    391                 strcpy(pModule->Info.szModule, &pSystemModules->Modules[i].FullPathName[pSystemModules->Modules[i].OffsetToFileName]);
    392                 GetSystemDirectoryA(szFullFilePath, sizeof(szFullFilePath));
    393 
    394                 /* skip \Systemroot\system32 */
    395                 char *lpPath = strstr(pSystemModules->Modules[i].FullPathName, "\\system32");
    396                 if (!lpPath)
     389                pRec = RTAvlPVRemove(&pKnownModuleTree, pSystemModules->Modules[i].ImageBase);
     390                if (!pRec)
    397391                {
    398                     VBoxServiceVerbose(1, "Unexpected kernel module name %s\n", pSystemModules->Modules[i].FullPathName);
    399                     RTMemFree(pModule);
    400                     break;
     392                    /* New module; register it. */
     393                    char          szFullFilePath[512];
     394                    PKNOWN_MODULE pModule = (PKNOWN_MODULE)RTMemAllocZ(sizeof(*pModule));
     395                    Assert(pModule);
     396                    if (!pModule)
     397                        break;
     398
     399                    strcpy(pModule->Info.szModule, &pSystemModules->Modules[i].FullPathName[pSystemModules->Modules[i].OffsetToFileName]);
     400                    GetSystemDirectoryA(szFullFilePath, sizeof(szFullFilePath));
     401
     402                    /* skip \Systemroot\system32 */
     403                    char *lpPath = strstr(pSystemModules->Modules[i].FullPathName, "\\system32");
     404                    if (!lpPath)
     405                    {
     406                        VBoxServiceVerbose(1, "Unexpected kernel module name %s\n", pSystemModules->Modules[i].FullPathName);
     407                        RTMemFree(pModule);
     408                        break;
     409                    }
     410
     411                    lpPath = strchr(lpPath+1, '\\');
     412                    if (!lpPath)
     413                    {
     414                        VBoxServiceVerbose(1, "Unexpected kernel module name %s\n", pSystemModules->Modules[i].FullPathName);
     415                        RTMemFree(pModule);
     416                        break;
     417                    }
     418
     419                    strcat(szFullFilePath, lpPath);
     420                    strcpy(pModule->Info.szExePath, szFullFilePath);
     421                    pModule->Info.modBaseAddr = (BYTE *)pSystemModules->Modules[i].ImageBase;
     422                    pModule->Info.modBaseSize = pSystemModules->Modules[i].ImageSize;
     423
     424                    pModule->Core.Key = pSystemModules->Modules[i].ImageBase;
     425                    VBoxServicePageSharingRegisterModule(pModule, false /* don't check memory pages */);
     426
     427                    VBoxServiceVerbose(3, "\n\n   KERNEL  MODULE NAME:     %s",     pModule->Info.szModule );
     428                    VBoxServiceVerbose(3, "\n     executable     = %s",             pModule->Info.szExePath );
     429                    VBoxServiceVerbose(3, "\n     base address   = 0x%08X", (DWORD) pModule->Info.modBaseAddr );
     430                    VBoxServiceVerbose(3, "\n     base size      = %d",             pModule->Info.modBaseSize );
     431
     432                    pRec = &pModule->Core;
    401433                }
    402 
    403                 lpPath = strchr(lpPath+1, '\\');
    404                 if (!lpPath)
    405                 {
    406                     VBoxServiceVerbose(1, "Unexpected kernel module name %s\n", pSystemModules->Modules[i].FullPathName);
    407                     RTMemFree(pModule);
    408                     break;
    409                 }
    410 
    411                 strcat(szFullFilePath, lpPath);
    412                 strcpy(pModule->Info.szExePath, szFullFilePath);
    413                 pModule->Info.modBaseAddr = (BYTE *)pSystemModules->Modules[i].ImageBase;
    414                 pModule->Info.modBaseSize = pSystemModules->Modules[i].ImageSize;
    415 
    416                 pModule->Core.Key = pSystemModules->Modules[i].ImageBase;
    417                 VBoxServicePageSharingRegisterModule(pModule, false /* don't check memory pages */);
    418 
    419                 VBoxServiceVerbose(3, "\n\n   KERNEL  MODULE NAME:     %s",     pModule->Info.szModule );
    420                 VBoxServiceVerbose(3, "\n     executable     = %s",             pModule->Info.szExePath );
    421                 VBoxServiceVerbose(3, "\n     base address   = 0x%08X", (DWORD) pModule->Info.modBaseAddr );
    422                 VBoxServiceVerbose(3, "\n     base size      = %d",             pModule->Info.modBaseSize );
    423 
    424                 pRec = &pModule->Core;
     434                bool ret = RTAvlPVInsert(&pNewTree, pRec);
     435                Assert(ret); NOREF(ret);
    425436            }
    426             bool ret = RTAvlPVInsert(&pNewTree, pRec);
    427             Assert(ret); NOREF(ret);
    428437        }
    429     }
    430 
    431438skipkernelmodules:
    432     if (pBuffer)
    433         free(pBuffer);
     439        if (pBuffer)
     440            RTMemFree(pBuffer);
     441    }
    434442#endif
    435443
Note: See TracChangeset for help on using the changeset viewer.

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