VirtualBox

Ignore:
Timestamp:
Jan 26, 2022 6:01:15 PM (3 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
149556
Message:

VMM,Main,HostServices: Use a function table for accessing the VBoxVMM.dll/so/dylib functionality, and load it dynamically when the Console object is initialized. Also converted a few drivers in Main to use device helpers to get config values and such. bugref:10074

Location:
trunk/src/VBox/HostServices/SharedClipboard
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostServices/SharedClipboard/Makefile.kmk

    r93115 r93444  
    7373
    7474VBoxSharedClipboard_LIBS = \
    75         $(LIB_VMM) \
    76         $(LIB_RUNTIME) \
    77         $(LIB_REM)
     75        $(LIB_RUNTIME)
    7876if1of ($(KBUILD_TARGET), linux solaris freebsd)
    7977 ifndef VBOX_HEADLESS
  • trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc.cpp

    r93316 r93444  
    184184#define LOG_GROUP LOG_GROUP_SHARED_CLIPBOARD
    185185#include <VBox/log.h>
     186#include <VBox/vmm/vmmr3vtable.h> /* must be included before hgcmsvc.h */
    186187
    187188#include <VBox/GuestHost/clipboard-helper.h>
     
    24572458#endif /* !UNIT_TEST */
    24582459
    2459 static DECLCALLBACK(int) svcSaveState(void *, uint32_t u32ClientID, void *pvClient, PSSMHANDLE pSSM)
     2460static DECLCALLBACK(int) svcSaveState(void *, uint32_t u32ClientID, void *pvClient, PSSMHANDLE pSSM, PCVMMR3VTABLE pVMM)
    24602461{
    24612462    LogFlowFuncEnter();
     
    24752476
    24762477    /* Write Shared Clipboard saved state version. */
    2477     SSMR3PutU32(pSSM, VBOX_SHCL_SAVED_STATE_VER_CURRENT);
    2478 
    2479     int rc = SSMR3PutStructEx(pSSM, &pClient->State, sizeof(pClient->State), 0 /*fFlags*/, &s_aShClSSMClientState[0], NULL);
     2478    pVMM->pfnSSMR3PutU32(pSSM, VBOX_SHCL_SAVED_STATE_VER_CURRENT);
     2479
     2480    int rc = pVMM->pfnSSMR3PutStructEx(pSSM, &pClient->State, sizeof(pClient->State), 0 /*fFlags*/, &s_aShClSSMClientState[0], NULL);
    24802481    AssertRCReturn(rc, rc);
    24812482
    2482     rc = SSMR3PutStructEx(pSSM, &pClient->State.POD, sizeof(pClient->State.POD), 0 /*fFlags*/, &s_aShClSSMClientPODState[0], NULL);
     2483    rc = pVMM->pfnSSMR3PutStructEx(pSSM, &pClient->State.POD, sizeof(pClient->State.POD), 0 /*fFlags*/, &s_aShClSSMClientPODState[0], NULL);
    24832484    AssertRCReturn(rc, rc);
    24842485
    2485     rc = SSMR3PutStructEx(pSSM, &pClient->State.Transfers, sizeof(pClient->State.Transfers), 0 /*fFlags*/, &s_aShClSSMClientTransferState[0], NULL);
     2486    rc = pVMM->pfnSSMR3PutStructEx(pSSM, &pClient->State.Transfers, sizeof(pClient->State.Transfers), 0 /*fFlags*/, &s_aShClSSMClientTransferState[0], NULL);
    24862487    AssertRCReturn(rc, rc);
    24872488
    24882489    /* Serialize the client's internal message queue. */
    2489     rc = SSMR3PutU64(pSSM, pClient->cMsgAllocated);
     2490    rc = pVMM->pfnSSMR3PutU64(pSSM, pClient->cMsgAllocated);
    24902491    AssertRCReturn(rc, rc);
    24912492
     
    24932494    RTListForEach(&pClient->MsgQueue, pMsg, SHCLCLIENTMSG, ListEntry)
    24942495    {
    2495         SSMR3PutStructEx(pSSM, pMsg, sizeof(SHCLCLIENTMSG), 0 /*fFlags*/, &s_aShClSSMClientMsgHdr[0], NULL);
    2496         SSMR3PutStructEx(pSSM, pMsg, sizeof(SHCLCLIENTMSG), 0 /*fFlags*/, &s_aShClSSMClientMsgCtx[0], NULL);
     2496        pVMM->pfnSSMR3PutStructEx(pSSM, pMsg, sizeof(SHCLCLIENTMSG), 0 /*fFlags*/, &s_aShClSSMClientMsgHdr[0], NULL);
     2497        pVMM->pfnSSMR3PutStructEx(pSSM, pMsg, sizeof(SHCLCLIENTMSG), 0 /*fFlags*/, &s_aShClSSMClientMsgCtx[0], NULL);
    24972498
    24982499        for (uint32_t iParm = 0; iParm < pMsg->cParms; iParm++)
    2499             HGCMSvcSSMR3Put(&pMsg->aParms[iParm], pSSM);
    2500     }
    2501 
    2502     rc = SSMR3PutU64(pSSM, pClient->Legacy.cCID);
     2500            HGCMSvcSSMR3Put(&pMsg->aParms[iParm], pSSM, pVMM);
     2501    }
     2502
     2503    rc = pVMM->pfnSSMR3PutU64(pSSM, pClient->Legacy.cCID);
    25032504    AssertRCReturn(rc, rc);
    25042505
     
    25062507    RTListForEach(&pClient->Legacy.lstCID, pCID, SHCLCLIENTLEGACYCID, Node)
    25072508    {
    2508         rc = SSMR3PutStructEx(pSSM, pCID, sizeof(SHCLCLIENTLEGACYCID), 0 /*fFlags*/, &s_aShClSSMClientLegacyCID[0], NULL);
     2509        rc = pVMM->pfnSSMR3PutStructEx(pSSM, pCID, sizeof(SHCLCLIENTLEGACYCID), 0 /*fFlags*/, &s_aShClSSMClientLegacyCID[0], NULL);
    25092510        AssertRCReturn(rc, rc);
    25102511    }
    25112512#else  /* UNIT_TEST */
    2512     RT_NOREF3(u32ClientID, pvClient, pSSM);
     2513    RT_NOREF(u32ClientID, pvClient, pSSM, pVMM);
    25132514#endif /* UNIT_TEST */
    25142515    return VINF_SUCCESS;
     
    25162517
    25172518#ifndef UNIT_TEST
    2518 static int svcLoadStateV0(uint32_t u32ClientID, void *pvClient, PSSMHANDLE pSSM, uint32_t uVersion)
     2519static int svcLoadStateV0(uint32_t u32ClientID, void *pvClient, PSSMHANDLE pSSM, PCVMMR3VTABLE pVMM, uint32_t uVersion)
    25192520{
    25202521    RT_NOREF(u32ClientID, pvClient, pSSM, uVersion);
    25212522
    25222523    uint32_t uMarker;
    2523     int rc = SSMR3GetU32(pSSM, &uMarker);   /* Begin marker. */
     2524    int rc = pVMM->pfnSSMR3GetU32(pSSM, &uMarker);   /* Begin marker. */
    25242525    AssertRC(rc);
    25252526    Assert(uMarker == UINT32_C(0x19200102)  /* SSMR3STRUCT_BEGIN */);
    25262527
    2527     rc = SSMR3Skip(pSSM, sizeof(uint32_t)); /* Client ID */
     2528    rc = pVMM->pfnSSMR3Skip(pSSM, sizeof(uint32_t)); /* Client ID */
    25282529    AssertRCReturn(rc, rc);
    25292530
    25302531    bool fValue;
    2531     rc = SSMR3GetBool(pSSM, &fValue);       /* fHostMsgQuit */
     2532    rc = pVMM->pfnSSMR3GetBool(pSSM, &fValue);       /* fHostMsgQuit */
    25322533    AssertRCReturn(rc, rc);
    25332534
    2534     rc = SSMR3GetBool(pSSM, &fValue);       /* fHostMsgReadData */
     2535    rc = pVMM->pfnSSMR3GetBool(pSSM, &fValue);       /* fHostMsgReadData */
    25352536    AssertRCReturn(rc, rc);
    25362537
    2537     rc = SSMR3GetBool(pSSM, &fValue);       /* fHostMsgFormats */
     2538    rc = pVMM->pfnSSMR3GetBool(pSSM, &fValue);       /* fHostMsgFormats */
    25382539    AssertRCReturn(rc, rc);
    25392540
    25402541    uint32_t fFormats;
    2541     rc = SSMR3GetU32(pSSM, &fFormats);      /* u32RequestedFormat */
     2542    rc = pVMM->pfnSSMR3GetU32(pSSM, &fFormats);      /* u32RequestedFormat */
    25422543    AssertRCReturn(rc, rc);
    25432544
    2544     rc = SSMR3GetU32(pSSM, &uMarker);       /* End marker. */
     2545    rc = pVMM->pfnSSMR3GetU32(pSSM, &uMarker);       /* End marker. */
    25452546    AssertRCReturn(rc, rc);
    25462547    Assert(uMarker == UINT32_C(0x19920406) /* SSMR3STRUCT_END */);
     
    25502551#endif /* UNIT_TEST */
    25512552
    2552 static DECLCALLBACK(int) svcLoadState(void *, uint32_t u32ClientID, void *pvClient, PSSMHANDLE pSSM, uint32_t uVersion)
     2553static DECLCALLBACK(int) svcLoadState(void *, uint32_t u32ClientID, void *pvClient,
     2554                                      PSSMHANDLE pSSM, PCVMMR3VTABLE pVMM, uint32_t uVersion)
    25532555{
    25542556    LogFlowFuncEnter();
     
    25632565    /* Restore the client data. */
    25642566    uint32_t lenOrVer;
    2565     int rc = SSMR3GetU32(pSSM, &lenOrVer);
     2567    int rc = pVMM->pfnSSMR3GetU32(pSSM, &lenOrVer);
    25662568    AssertRCReturn(rc, rc);
    25672569
     
    25692571
    25702572    if (lenOrVer == VBOX_SHCL_SAVED_STATE_VER_3_1)
    2571         return svcLoadStateV0(u32ClientID, pvClient, pSSM, uVersion);
     2573        return svcLoadStateV0(u32ClientID, pvClient, pSSM, pVMM, uVersion);
    25722574
    25732575    if (   lenOrVer >= VBOX_SHCL_SAVED_STATE_VER_6_1B2
     
    25762578        if (lenOrVer >= VBOX_SHCL_SAVED_STATE_VER_6_1RC1)
    25772579        {
    2578             SSMR3GetStructEx(pSSM, &pClient->State, sizeof(pClient->State), 0 /* fFlags */, &s_aShClSSMClientState[0], NULL);
    2579             SSMR3GetStructEx(pSSM, &pClient->State.POD, sizeof(pClient->State.POD), 0 /* fFlags */,
    2580                              &s_aShClSSMClientPODState[0], NULL);
     2580            pVMM->pfnSSMR3GetStructEx(pSSM, &pClient->State, sizeof(pClient->State), 0 /* fFlags */,
     2581                                      &s_aShClSSMClientState[0], NULL);
     2582            pVMM->pfnSSMR3GetStructEx(pSSM, &pClient->State.POD, sizeof(pClient->State.POD), 0 /* fFlags */,
     2583                                      &s_aShClSSMClientPODState[0], NULL);
    25812584        }
    25822585        else
    2583             SSMR3GetStructEx(pSSM, &pClient->State, sizeof(pClient->State), 0 /* fFlags */, &s_aShClSSMClientState61B1[0], NULL);
    2584         rc = SSMR3GetStructEx(pSSM, &pClient->State.Transfers, sizeof(pClient->State.Transfers), 0 /* fFlags */,
    2585                               &s_aShClSSMClientTransferState[0], NULL);
     2586            pVMM->pfnSSMR3GetStructEx(pSSM, &pClient->State, sizeof(pClient->State), 0 /* fFlags */,
     2587                                      &s_aShClSSMClientState61B1[0], NULL);
     2588        rc = pVMM->pfnSSMR3GetStructEx(pSSM, &pClient->State.Transfers, sizeof(pClient->State.Transfers), 0 /* fFlags */,
     2589                                       &s_aShClSSMClientTransferState[0], NULL);
    25862590        AssertRCReturn(rc, rc);
    25872591
    25882592        /* Load the client's internal message queue. */
    25892593        uint64_t cMsgs;
    2590         rc = SSMR3GetU64(pSSM, &cMsgs);
     2594        rc = pVMM->pfnSSMR3GetU64(pSSM, &cMsgs);
    25912595        AssertRCReturn(rc, rc);
    25922596        AssertLogRelMsgReturn(cMsgs < _16K, ("Too many messages: %u (%x)\n", cMsgs, cMsgs), VERR_SSM_DATA_UNIT_FORMAT_CHANGED);
     
    26002604            } u;
    26012605
    2602             SSMR3GetStructEx(pSSM, &u.Msg, RT_UOFFSETOF(SHCLCLIENTMSG, aParms), 0 /*fFlags*/, &s_aShClSSMClientMsgHdr[0], NULL);
    2603             rc = SSMR3GetStructEx(pSSM, &u.Msg, RT_UOFFSETOF(SHCLCLIENTMSG, aParms), 0 /*fFlags*/, &s_aShClSSMClientMsgCtx[0], NULL);
     2606            pVMM->pfnSSMR3GetStructEx(pSSM, &u.Msg, RT_UOFFSETOF(SHCLCLIENTMSG, aParms), 0 /*fFlags*/,
     2607                                      &s_aShClSSMClientMsgHdr[0], NULL);
     2608            rc = pVMM->pfnSSMR3GetStructEx(pSSM, &u.Msg, RT_UOFFSETOF(SHCLCLIENTMSG, aParms), 0 /*fFlags*/,
     2609                                           &s_aShClSSMClientMsgCtx[0], NULL);
    26042610            AssertRCReturn(rc, rc);
    26052611
     
    26142620            for (uint32_t p = 0; p < pMsg->cParms; p++)
    26152621            {
    2616                 rc = HGCMSvcSSMR3Get(&pMsg->aParms[p], pSSM);
     2622                rc = HGCMSvcSSMR3Get(&pMsg->aParms[p], pSSM, pVMM);
    26172623                AssertRCReturnStmt(rc, shClSvcMsgFree(pClient, pMsg), rc);
    26182624            }
     
    26262632        {
    26272633            uint64_t cCID;
    2628             rc = SSMR3GetU64(pSSM, &cCID);
     2634            rc = pVMM->pfnSSMR3GetU64(pSSM, &cCID);
    26292635            AssertRCReturn(rc, rc);
    26302636            AssertLogRelMsgReturn(cCID < _16K, ("Too many context IDs: %u (%x)\n", cCID, cCID), VERR_SSM_DATA_UNIT_FORMAT_CHANGED);
     
    26352641                AssertPtrReturn(pCID, VERR_NO_MEMORY);
    26362642
    2637                 SSMR3GetStructEx(pSSM, pCID, sizeof(SHCLCLIENTLEGACYCID), 0 /* fFlags */, &s_aShClSSMClientLegacyCID[0], NULL);
     2643                pVMM->pfnSSMR3GetStructEx(pSSM, pCID, sizeof(SHCLCLIENTLEGACYCID), 0 /* fFlags */,
     2644                                          &s_aShClSSMClientLegacyCID[0], NULL);
    26382645                RTListAppend(&pClient->Legacy.lstCID, &pCID->Node);
    26392646            }
     
    26502657
    26512658#else  /* UNIT_TEST */
    2652     RT_NOREF(u32ClientID, pvClient, pSSM, uVersion);
     2659    RT_NOREF(u32ClientID, pvClient, pSSM, pVMM, uVersion);
    26532660#endif /* UNIT_TEST */
    26542661    return VINF_SUCCESS;
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