Changeset 93444 in vbox for trunk/src/VBox/HostServices/SharedClipboard
- Timestamp:
- Jan 26, 2022 6:01:15 PM (3 years ago)
- svn:sync-xref-src-repo-rev:
- 149556
- Location:
- trunk/src/VBox/HostServices/SharedClipboard
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/HostServices/SharedClipboard/Makefile.kmk
r93115 r93444 73 73 74 74 VBoxSharedClipboard_LIBS = \ 75 $(LIB_VMM) \ 76 $(LIB_RUNTIME) \ 77 $(LIB_REM) 75 $(LIB_RUNTIME) 78 76 if1of ($(KBUILD_TARGET), linux solaris freebsd) 79 77 ifndef VBOX_HEADLESS -
trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc.cpp
r93316 r93444 184 184 #define LOG_GROUP LOG_GROUP_SHARED_CLIPBOARD 185 185 #include <VBox/log.h> 186 #include <VBox/vmm/vmmr3vtable.h> /* must be included before hgcmsvc.h */ 186 187 187 188 #include <VBox/GuestHost/clipboard-helper.h> … … 2457 2458 #endif /* !UNIT_TEST */ 2458 2459 2459 static DECLCALLBACK(int) svcSaveState(void *, uint32_t u32ClientID, void *pvClient, PSSMHANDLE pSSM )2460 static DECLCALLBACK(int) svcSaveState(void *, uint32_t u32ClientID, void *pvClient, PSSMHANDLE pSSM, PCVMMR3VTABLE pVMM) 2460 2461 { 2461 2462 LogFlowFuncEnter(); … … 2475 2476 2476 2477 /* 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); 2480 2481 AssertRCReturn(rc, rc); 2481 2482 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); 2483 2484 AssertRCReturn(rc, rc); 2484 2485 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); 2486 2487 AssertRCReturn(rc, rc); 2487 2488 2488 2489 /* Serialize the client's internal message queue. */ 2489 rc = SSMR3PutU64(pSSM, pClient->cMsgAllocated);2490 rc = pVMM->pfnSSMR3PutU64(pSSM, pClient->cMsgAllocated); 2490 2491 AssertRCReturn(rc, rc); 2491 2492 … … 2493 2494 RTListForEach(&pClient->MsgQueue, pMsg, SHCLCLIENTMSG, ListEntry) 2494 2495 { 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); 2497 2498 2498 2499 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); 2503 2504 AssertRCReturn(rc, rc); 2504 2505 … … 2506 2507 RTListForEach(&pClient->Legacy.lstCID, pCID, SHCLCLIENTLEGACYCID, Node) 2507 2508 { 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); 2509 2510 AssertRCReturn(rc, rc); 2510 2511 } 2511 2512 #else /* UNIT_TEST */ 2512 RT_NOREF 3(u32ClientID, pvClient, pSSM);2513 RT_NOREF(u32ClientID, pvClient, pSSM, pVMM); 2513 2514 #endif /* UNIT_TEST */ 2514 2515 return VINF_SUCCESS; … … 2516 2517 2517 2518 #ifndef UNIT_TEST 2518 static int svcLoadStateV0(uint32_t u32ClientID, void *pvClient, PSSMHANDLE pSSM, uint32_t uVersion)2519 static int svcLoadStateV0(uint32_t u32ClientID, void *pvClient, PSSMHANDLE pSSM, PCVMMR3VTABLE pVMM, uint32_t uVersion) 2519 2520 { 2520 2521 RT_NOREF(u32ClientID, pvClient, pSSM, uVersion); 2521 2522 2522 2523 uint32_t uMarker; 2523 int rc = SSMR3GetU32(pSSM, &uMarker); /* Begin marker. */2524 int rc = pVMM->pfnSSMR3GetU32(pSSM, &uMarker); /* Begin marker. */ 2524 2525 AssertRC(rc); 2525 2526 Assert(uMarker == UINT32_C(0x19200102) /* SSMR3STRUCT_BEGIN */); 2526 2527 2527 rc = SSMR3Skip(pSSM, sizeof(uint32_t)); /* Client ID */2528 rc = pVMM->pfnSSMR3Skip(pSSM, sizeof(uint32_t)); /* Client ID */ 2528 2529 AssertRCReturn(rc, rc); 2529 2530 2530 2531 bool fValue; 2531 rc = SSMR3GetBool(pSSM, &fValue); /* fHostMsgQuit */2532 rc = pVMM->pfnSSMR3GetBool(pSSM, &fValue); /* fHostMsgQuit */ 2532 2533 AssertRCReturn(rc, rc); 2533 2534 2534 rc = SSMR3GetBool(pSSM, &fValue); /* fHostMsgReadData */2535 rc = pVMM->pfnSSMR3GetBool(pSSM, &fValue); /* fHostMsgReadData */ 2535 2536 AssertRCReturn(rc, rc); 2536 2537 2537 rc = SSMR3GetBool(pSSM, &fValue); /* fHostMsgFormats */2538 rc = pVMM->pfnSSMR3GetBool(pSSM, &fValue); /* fHostMsgFormats */ 2538 2539 AssertRCReturn(rc, rc); 2539 2540 2540 2541 uint32_t fFormats; 2541 rc = SSMR3GetU32(pSSM, &fFormats); /* u32RequestedFormat */2542 rc = pVMM->pfnSSMR3GetU32(pSSM, &fFormats); /* u32RequestedFormat */ 2542 2543 AssertRCReturn(rc, rc); 2543 2544 2544 rc = SSMR3GetU32(pSSM, &uMarker); /* End marker. */2545 rc = pVMM->pfnSSMR3GetU32(pSSM, &uMarker); /* End marker. */ 2545 2546 AssertRCReturn(rc, rc); 2546 2547 Assert(uMarker == UINT32_C(0x19920406) /* SSMR3STRUCT_END */); … … 2550 2551 #endif /* UNIT_TEST */ 2551 2552 2552 static DECLCALLBACK(int) svcLoadState(void *, uint32_t u32ClientID, void *pvClient, PSSMHANDLE pSSM, uint32_t uVersion) 2553 static DECLCALLBACK(int) svcLoadState(void *, uint32_t u32ClientID, void *pvClient, 2554 PSSMHANDLE pSSM, PCVMMR3VTABLE pVMM, uint32_t uVersion) 2553 2555 { 2554 2556 LogFlowFuncEnter(); … … 2563 2565 /* Restore the client data. */ 2564 2566 uint32_t lenOrVer; 2565 int rc = SSMR3GetU32(pSSM, &lenOrVer);2567 int rc = pVMM->pfnSSMR3GetU32(pSSM, &lenOrVer); 2566 2568 AssertRCReturn(rc, rc); 2567 2569 … … 2569 2571 2570 2572 if (lenOrVer == VBOX_SHCL_SAVED_STATE_VER_3_1) 2571 return svcLoadStateV0(u32ClientID, pvClient, pSSM, uVersion);2573 return svcLoadStateV0(u32ClientID, pvClient, pSSM, pVMM, uVersion); 2572 2574 2573 2575 if ( lenOrVer >= VBOX_SHCL_SAVED_STATE_VER_6_1B2 … … 2576 2578 if (lenOrVer >= VBOX_SHCL_SAVED_STATE_VER_6_1RC1) 2577 2579 { 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); 2581 2584 } 2582 2585 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); 2586 2590 AssertRCReturn(rc, rc); 2587 2591 2588 2592 /* Load the client's internal message queue. */ 2589 2593 uint64_t cMsgs; 2590 rc = SSMR3GetU64(pSSM, &cMsgs);2594 rc = pVMM->pfnSSMR3GetU64(pSSM, &cMsgs); 2591 2595 AssertRCReturn(rc, rc); 2592 2596 AssertLogRelMsgReturn(cMsgs < _16K, ("Too many messages: %u (%x)\n", cMsgs, cMsgs), VERR_SSM_DATA_UNIT_FORMAT_CHANGED); … … 2600 2604 } u; 2601 2605 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); 2604 2610 AssertRCReturn(rc, rc); 2605 2611 … … 2614 2620 for (uint32_t p = 0; p < pMsg->cParms; p++) 2615 2621 { 2616 rc = HGCMSvcSSMR3Get(&pMsg->aParms[p], pSSM );2622 rc = HGCMSvcSSMR3Get(&pMsg->aParms[p], pSSM, pVMM); 2617 2623 AssertRCReturnStmt(rc, shClSvcMsgFree(pClient, pMsg), rc); 2618 2624 } … … 2626 2632 { 2627 2633 uint64_t cCID; 2628 rc = SSMR3GetU64(pSSM, &cCID);2634 rc = pVMM->pfnSSMR3GetU64(pSSM, &cCID); 2629 2635 AssertRCReturn(rc, rc); 2630 2636 AssertLogRelMsgReturn(cCID < _16K, ("Too many context IDs: %u (%x)\n", cCID, cCID), VERR_SSM_DATA_UNIT_FORMAT_CHANGED); … … 2635 2641 AssertPtrReturn(pCID, VERR_NO_MEMORY); 2636 2642 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); 2638 2645 RTListAppend(&pClient->Legacy.lstCID, &pCID->Node); 2639 2646 } … … 2650 2657 2651 2658 #else /* UNIT_TEST */ 2652 RT_NOREF(u32ClientID, pvClient, pSSM, uVersion);2659 RT_NOREF(u32ClientID, pvClient, pSSM, pVMM, uVersion); 2653 2660 #endif /* UNIT_TEST */ 2654 2661 return VINF_SUCCESS;
Note:
See TracChangeset
for help on using the changeset viewer.