VirtualBox

Changeset 52135 in vbox for trunk/src/VBox/HostDrivers


Ignore:
Timestamp:
Jul 22, 2014 7:14:54 PM (10 years ago)
Author:
vboxsync
Message:

SUPDrv-win.cpp: Don't get confused by early kernel handles opened by protection software in kernel process/thread/image callbacks. Fixes the -104 respawn problem.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostDrivers/Support/win/SUPDrv-win.cpp

    r51955 r52135  
    27602760                if (   pNtProtect->enmProcessKind == kSupDrvNtProtectKind_VmProcessUnconfirmed
    27612761                    && pNtProtect->fFirstProcessCreateHandle
     2762                    && pOpInfo->KernelHandle == 0
    27622763                    && pNtProtect->hParentPid == PsGetProcessId(PsGetCurrentProcess()))
    27632764                {
     
    27872788                    && pNtProtect->enmProcessKind == kSupDrvNtProtectKind_VmProcessUnconfirmed
    27882789                    && pNtProtect->fCsrssFirstProcessCreateHandle
    2789                     && supdrvNtProtectIsAssociatedCsrss(pNtProtect, PsGetCurrentProcess())
    2790                    )
     2790                    && pOpInfo->KernelHandle == 0
     2791                    && supdrvNtProtectIsAssociatedCsrss(pNtProtect, PsGetCurrentProcess()) )
    27912792                {
    27922793                    pNtProtect->fCsrssFirstProcessCreateHandle = false;
     
    28132814                    && pOpInfo->Parameters->CreateHandleInformation.DesiredAccess == 0x1478 /* 6.1.7600.16385 (win7_rtm.090713-1255) */
    28142815                    && pNtProtect->fThemesFirstProcessCreateHandle
    2815                     && supdrvNtProtectIsFrigginThemesService(pNtProtect, PsGetCurrentProcess()))
     2816                    && pOpInfo->KernelHandle == 0
     2817                    && supdrvNtProtectIsFrigginThemesService(pNtProtect, PsGetCurrentProcess()) )
    28162818                {
    28172819                    pNtProtect->fThemesFirstProcessCreateHandle = true; /* Only once! */
     
    28542856                    && pNtProtect->enmProcessKind == kSupDrvNtProtectKind_VmProcessUnconfirmed
    28552857                    && pNtProtect->fCsrssFirstProcessDuplicateHandle
     2858                    && pOpInfo->KernelHandle == 0
    28562859                    &&    pNtProtect->hParentPid
    28572860                       == PsGetProcessId((PEPROCESS)pOpInfo->Parameters->DuplicateHandleInformation.SourceProcess)
    28582861                    && pOpInfo->Parameters->DuplicateHandleInformation.TargetProcess == PsGetCurrentProcess()
    2859                     && supdrvNtProtectIsAssociatedCsrss(pNtProtect, PsGetCurrentProcess())
    2860                    )
     2862                    && supdrvNtProtectIsAssociatedCsrss(pNtProtect, PsGetCurrentProcess()) )
    28612863                {
    28622864                    pNtProtect->fCsrssFirstProcessDuplicateHandle = false;
     
    29922994                    && pNtProtect->enmProcessKind == kSupDrvNtProtectKind_VmProcessUnconfirmed
    29932995                    && pNtProtect->fFirstThreadCreateHandle
    2994                     && pNtProtect->hParentPid == PsGetProcessId(PsGetCurrentProcess()))
     2996                    && pOpInfo->KernelHandle == 0
     2997                    && pNtProtect->hParentPid == PsGetProcessId(PsGetCurrentProcess()) )
    29952998                {
    29962999                    if (   !pOpInfo->KernelHandle
     
    30133016                    && (   (enmProcessKind = pNtProtect->enmProcessKind) == kSupDrvNtProtectKind_VmProcessConfirmed
    30143017                        || enmProcessKind == kSupDrvNtProtectKind_VmProcessUnconfirmed)
     3018                    && pOpInfo->KernelHandle == 0
    30153019                    && supdrvNtProtectIsAssociatedCsrss(pNtProtect, PsGetCurrentProcess()) )
    30163020                {
     
    30563060                        || enmProcessKind == kSupDrvNtProtectKind_VmProcessUnconfirmed)
    30573061                    && pOpInfo->Parameters->DuplicateHandleInformation.TargetProcess == PsGetCurrentProcess()
     3062                    && pOpInfo->KernelHandle == 0
    30583063                    && supdrvNtProtectIsAssociatedCsrss(pNtProtect, PsGetCurrentProcess()) )
    30593064                {
     
    31473152            /* Duplicate entry, fail. */
    31483153            pNtProtect->u32Magic = SUPDRVNTPROTECT_MAGIC_DEAD;
     3154            LogRel(("supdrvNtProtectCreate: Duplicate (%#x).\n", pNtProtect->AvlCore.Key));
    31493155            RTMemFree(pNtProtect);
    3150             return VERR_ACCESS_DENIED;
     3156            return VERR_DUPLICATE;
    31513157        }
    31523158    }
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