Changeset 52207 in vbox
- Timestamp:
- Jul 27, 2014 7:33:11 PM (11 years ago)
- svn:sync-xref-src-repo-rev:
- 95268
- Location:
- trunk/src/VBox/HostDrivers/Support/win
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyImage-win.cpp
r52204 r52207 1456 1456 if (pCurCtx->dwCertEncodingType & X509_ASN_ENCODING) 1457 1457 { 1458 RTERRINFOSTATIC StaticErrInfo; 1458 1459 RTASN1CURSORPRIMARY PrimaryCursor; 1459 RTAsn1CursorInitPrimary(&PrimaryCursor, pCurCtx->pbCertEncoded, pCurCtx->cbCertEncoded, NULL /*pErrInfo*/, 1460 RTAsn1CursorInitPrimary(&PrimaryCursor, pCurCtx->pbCertEncoded, pCurCtx->cbCertEncoded, 1461 RTErrInfoInitStatic(&StaticErrInfo), 1460 1462 &g_RTAsn1DefaultAllocator, RTASN1CURSOR_FLAGS_DER, "CurCtx"); 1461 1463 RTCRX509CERTIFICATE MyCert; 1462 1464 int rc = RTCrX509Certificate_DecodeAsn1(&PrimaryCursor.Cursor, 0, &MyCert, "Cert"); 1463 AssertRC(rc);1464 1465 if (RT_SUCCESS(rc)) 1465 1466 { … … 1478 1479 RTCrX509Certificate_Delete(&MyCert); 1479 1480 } 1481 /* XP root certificate "C&W HKT SecureNet CA SGC Root" has non-standard validity 1482 timestamps, the UTC formatting isn't Zulu time but specifies timezone offsets. 1483 Ignore these failures and certificates. */ 1484 else if (rc != VERR_ASN1_INVALID_UTC_TIME_ENCODING) 1485 AssertMsgFailed(("RTCrX509Certificate_DecodeAsn1 failed: rc=%#x: %s\n", rc, StaticErrInfo.szMsg)); 1480 1486 } 1481 1487 } -
trunk/src/VBox/HostDrivers/Support/win/SUPHardenedVerifyProcess-win.cpp
r52205 r52207 114 114 /** The file reader. */ 115 115 PSUPHNTVIRDR pNtViRdr; 116 /** The module file handle, if we've opened it. 117 * (pNtviRdr does not close the file handle on destruction.) */ 118 HANDLE hFile; 116 119 /** Image bits for lazy cleanup. */ 117 120 uint8_t *pbBits; … … 650 653 return supHardNtVpSetInfo2(pThis, rc, "%s: RTLdrGetBits failed: %Rrc", pImage->pszName, rc); 651 654 652 /** @todo figure out if all windows versions do this... */ 653 if (fIs32Bit) 654 ((PIMAGE_NT_HEADERS32)&pImage->pbBits[offNtHdrs])->OptionalHeader.ImageBase = (uint32_t)pImage->uImageBase; 655 else 656 ((PIMAGE_NT_HEADERS)&pImage->pbBits[offNtHdrs])->OptionalHeader.ImageBase = pImage->uImageBase; 655 /* XP SP3 does not set ImageBase to load address. It fixes up the image on load time though. */ 656 if (g_uNtVerCombined >= SUP_NT_VER_VISTA) 657 { 658 if (fIs32Bit) 659 ((PIMAGE_NT_HEADERS32)&pImage->pbBits[offNtHdrs])->OptionalHeader.ImageBase = (uint32_t)pImage->uImageBase; 660 else 661 ((PIMAGE_NT_HEADERS)&pImage->pbBits[offNtHdrs])->OptionalHeader.ImageBase = pImage->uImageBase; 662 } 657 663 658 664 /* … … 1060 1066 pImage->uImageBase = (uintptr_t)pMemInfo->AllocationBase; 1061 1067 pImage->cbImage = pMemInfo->RegionSize; 1068 pImage->hFile = NULL; 1062 1069 pImage->hLdrMod = NIL_RTLDRMOD; 1063 1070 pImage->pNtViRdr = NULL; … … 1332 1339 1333 1340 /** 1334 * Opens all the images with the IPRT loader, setting both pNtViRdr and hLdrMod1335 * for each image.1341 * Opens all the images with the IPRT loader, setting both, hFile, pNtViRdr and 1342 * hLdrMod for each image. 1336 1343 * 1337 1344 * @returns VBox status code. … … 1389 1396 return rc; 1390 1397 } 1398 pImage->hFile = hFile; 1391 1399 pImage->pNtViRdr = pNtViRdr; 1392 1400 … … 1482 1490 /* 1483 1491 * Check linking requirements. 1492 * This query is only available using the current process pseudo handle on 1493 * older windows versions. The cut-off seems to be Vista. 1484 1494 */ 1485 1495 SECTION_IMAGE_INFORMATION ImageInfo; 1486 1496 rcNt = NtQueryInformationProcess(hProcess, ProcessImageInformation, &ImageInfo, sizeof(ImageInfo), NULL); 1487 1497 if (!NT_SUCCESS(rcNt)) 1498 { 1499 if ( rcNt == STATUS_INVALID_PARAMETER 1500 && g_uNtVerCombined < SUP_NT_VER_VISTA 1501 && hProcess != NtCurrentProcess() ) 1502 return VINF_SUCCESS; 1488 1503 return supHardNtVpSetInfo2(pThis, VERR_SUP_VP_NT_QI_PROCESS_IMG_INFO_ERROR, 1489 "NtQueryInformationProcess/ProcessImageInformation failed: %#x", rcNt); 1504 "NtQueryInformationProcess/ProcessImageInformation failed: %#x hProcess=%#x", rcNt, hProcess); 1505 } 1490 1506 if ( !(ImageInfo.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY)) 1491 1507 return supHardNtVpSetInfo2(pThis, VERR_SUP_VP_EXE_MISSING_FORCE_INTEGRITY, … … 1641 1657 else if (pThis->aImages[i].pNtViRdr) 1642 1658 pThis->aImages[i].pNtViRdr->Core.pfnDestroy(&pThis->aImages[i].pNtViRdr->Core); 1659 if (pThis->aImages[i].hFile) 1660 NtClose(pThis->aImages[i].hFile); 1643 1661 } 1644 1662 suplibHardenedFree(pThis);
Note:
See TracChangeset
for help on using the changeset viewer.