Changeset 29955 in vbox for trunk/src/VBox/Additions/common/VBoxService
- Timestamp:
- Jun 1, 2010 3:15:45 PM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 62237
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/common/VBoxService/VBoxServicePageSharing.cpp
r29952 r29955 356 356 #if 0 357 357 /* 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; 361 363 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 } 365 370 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 } 373 381 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++) 380 384 { 381 pRec = RTAvlPVRemove(&pKnownModuleTree, pSystemModules->Modules[i].ImageBase); 385 /* Found it before? */ 386 PAVLPVNODECORE pRec = RTAvlPVGet(&pNewTree, pSystemModules->Modules[i].ImageBase); 382 387 if (!pRec) 383 388 { 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) 397 391 { 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; 401 433 } 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); 425 436 } 426 bool ret = RTAvlPVInsert(&pNewTree, pRec);427 Assert(ret); NOREF(ret);428 437 } 429 }430 431 438 skipkernelmodules: 432 if (pBuffer) 433 free(pBuffer); 439 if (pBuffer) 440 RTMemFree(pBuffer); 441 } 434 442 #endif 435 443
Note:
See TracChangeset
for help on using the changeset viewer.