VirtualBox

Changeset 40483 in vbox for trunk/src/VBox/Additions/common


Ignore:
Timestamp:
Mar 15, 2012 2:20:20 PM (13 years ago)
Author:
vboxsync
Message:

crOpenGL/wddm: don't use VBoxGuest device to comply woth Metro apps security

Location:
trunk/src/VBox/Additions/common
Files:
2 added
3 edited

Legend:

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

    r40198 r40483  
    18931893                                         PVBOXGUESTSESSION pSession,
    18941894                                         VBoxGuestHGCMCallInfo *pInfo,
    1895                                          uint32_t cMillies, bool fInterruptible, bool f32bit,
     1895                                         uint32_t cMillies, bool fInterruptible, bool f32bit, bool fUserData,
    18961896                                         size_t cbExtra, size_t cbData, size_t *pcbDataReturned)
    18971897{
     
    19491949     */
    19501950    Log(("VBoxGuestCommonIOCtl: HGCM_CALL: u32Client=%RX32\n", pInfo->u32ClientID));
    1951     fFlags = pSession->R0Process == NIL_RTR0PROCESS ? VBGLR0_HGCMCALL_F_KERNEL : VBGLR0_HGCMCALL_F_USER;
     1951    fFlags = !fUserData && pSession->R0Process == NIL_RTR0PROCESS ? VBGLR0_HGCMCALL_F_KERNEL : VBGLR0_HGCMCALL_F_USER;
    19521952#ifdef RT_ARCH_AMD64
    19531953    if (f32bit)
     
    24492449        CHECKRET_MIN_SIZE("HGCM_CALL", sizeof(VBoxGuestHGCMCallInfo));
    24502450        rc = VBoxGuestCommonIOCtl_HGCMCall(pDevExt, pSession, (VBoxGuestHGCMCallInfo *)pvData, RT_INDEFINITE_WAIT,
    2451                                            fInterruptible, false /*f32bit*/,
     2451                                           fInterruptible, false /*f32bit*/, false /* fUserData */,
    24522452                                           0, cbData, pcbDataReturned);
    24532453    }
     
    24582458        rc = VBoxGuestCommonIOCtl_HGCMCall(pDevExt, pSession, &pInfo->info, pInfo->u32Timeout,
    24592459                                           !!pInfo->fInterruptible || pSession->R0Process != NIL_RTR0PROCESS,
    2460                                            false /*f32bit*/,
     2460                                           false /*f32bit*/, false /* fUserData */,
    24612461                                           RT_OFFSETOF(VBoxGuestHGCMCallInfoTimed, info), cbData, pcbDataReturned);
     2462    }
     2463    else if (VBOXGUEST_IOCTL_STRIP_SIZE(iFunction) == VBOXGUEST_IOCTL_STRIP_SIZE(VBOXGUEST_IOCTL_HGCM_CALL_USERDATA(0)))
     2464    {
     2465        bool fInterruptible = true;
     2466        CHECKRET_MIN_SIZE("HGCM_CALL", sizeof(VBoxGuestHGCMCallInfo));
     2467        rc = VBoxGuestCommonIOCtl_HGCMCall(pDevExt, pSession, (VBoxGuestHGCMCallInfo *)pvData, RT_INDEFINITE_WAIT,
     2468                                           fInterruptible, false /*f32bit*/, true /* fUserData */,
     2469                                           0, cbData, pcbDataReturned);
    24622470    }
    24632471# ifdef RT_ARCH_AMD64
     
    24672475        CHECKRET_MIN_SIZE("HGCM_CALL", sizeof(VBoxGuestHGCMCallInfo));
    24682476        rc = VBoxGuestCommonIOCtl_HGCMCall(pDevExt, pSession, (VBoxGuestHGCMCallInfo *)pvData, RT_INDEFINITE_WAIT,
    2469                                            fInterruptible, true /*f32bit*/,
     2477                                           fInterruptible, true /*f32bit*/, false /* fUserData */,
    24702478                                           0, cbData, pcbDataReturned);
    24712479    }
     
    24762484        rc = VBoxGuestCommonIOCtl_HGCMCall(pDevExt, pSession, &pInfo->info, pInfo->u32Timeout,
    24772485                                           !!pInfo->fInterruptible || pSession->R0Process != NIL_RTR0PROCESS,
    2478                                            true /*f32bit*/,
     2486                                           true /*f32bit*/, false /* fUserData */,
    24792487                                           RT_OFFSETOF(VBoxGuestHGCMCallInfoTimed, info), cbData, pcbDataReturned);
    24802488    }
  • trunk/src/VBox/Additions/common/VBoxGuestLib/HGCM.cpp

    r28800 r40483  
    198198}
    199199
     200DECLVBGL(int) VbglHGCMCallUserData (VBGLHGCMHANDLE handle, VBoxGuestHGCMCallInfo *pData, uint32_t cbData)
     201{
     202    int rc = VINF_SUCCESS;
     203
     204    VBGL_HGCM_ASSERTMsg(cbData >= sizeof (VBoxGuestHGCMCallInfo) + pData->cParms * sizeof (HGCMFunctionParameter),
     205                        ("cbData = %d, cParms = %d (calculated size %d)\n", cbData, pData->cParms, sizeof (VBoxGuestHGCMCallInfo) + pData->cParms * sizeof (VBoxGuestHGCMCallInfo)));
     206
     207    rc = vbglDriverIOCtl (&handle->driver, VBOXGUEST_IOCTL_HGCM_CALL_USERDATA(cbData), pData, cbData);
     208
     209    return rc;
     210}
     211
     212
    200213DECLVBGL(int) VbglHGCMCallTimed (VBGLHGCMHANDLE handle,
    201214                                 VBoxGuestHGCMCallInfoTimed *pData, uint32_t cbData)
  • trunk/src/VBox/Additions/common/VBoxGuestLib/Makefile.kmk

    r40211 r40483  
    6464        HGCM.cpp \
    6565        VBoxGuestR0LibSharedFolders.c \
     66        VBoxGuestR0LibCrOgl.cpp \
    6667        VbglR0CanUsePhysPageList.cpp
    6768
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