Changeset 1080 in vbox
- Timestamp:
- Feb 28, 2007 8:28:11 AM (18 years ago)
- svn:sync-xref-src-repo-rev:
- 18972
- Location:
- trunk/src/VBox/Main
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Main/VMMDevInterface.cpp
r906 r1080 36 36 #ifdef VBOX_HGCM 37 37 #include "hgcm/HGCM.h" 38 #include "hgcm/HGCMObjects.h" 38 39 #endif 39 40 … … 328 329 PDRVMAINVMMDEV pDrv = PDMINS2DATA(pDrvIns, PDRVMAINVMMDEV); 329 330 330 return hgcmSaveStateInternal (pDrv->pHGCMPort, pDrv->pVMMDev->mSharedFolderClientId, pSSM); 331 /* Save the current handle count and restore afterwards to avoid client id conflicts. */ 332 int rc = SSMR3PutU32(pSSM, hgcmObjQueryHandleCount()); 333 AssertRCReturn(rc, rc); 334 335 return hgcmSaveStateInternal (pDrv->pVMMDev->mSharedFolderClientId, pSSM); 331 336 } 332 337 … … 343 348 { 344 349 PDRVMAINVMMDEV pDrv = PDMINS2DATA(pDrvIns, PDRVMAINVMMDEV); 350 uint32_t u32HandleCount; 345 351 346 352 if (u32Version != HGCM_SSM_VERSION) 347 353 return VERR_SSM_UNSUPPORTED_DATA_UNIT_VERSION; 348 354 349 return hgcmLoadStateInternal (pDrv->pHGCMPort, pDrv->pVMMDev->mSharedFolderClientId, pSSM); 355 /* Save the current handle count and restore afterwards to avoid client id conflicts. */ 356 int rc = SSMR3GetU32(pSSM, &u32HandleCount); 357 AssertRCReturn(rc, rc); 358 hgcmObjSetHandleCount(u32HandleCount); 359 360 /* Unload all HGCM services to refresh client ids. */ 361 /** @todo shared clipboard too! */ 362 /** @todo need other solution! */ 363 if (pDrv->pVMMDev->mSharedFolderClientId) 364 { 365 uint64_t dummy = 0; 366 PVBOXHGCMCMD cmd = (PVBOXHGCMCMD)&dummy; 367 368 pDrv->pVMMDev->hgcmDisconnect(cmd, pDrv->pVMMDev->getShFlClientId()); 369 370 /* Reload Shared Folder HGCM service */ 371 HGCMSERVICELOCATION loc; 372 373 cmd = (PVBOXHGCMCMD)&dummy; 374 375 Log(("Connect to Shared Folders service\n")); 376 pDrv->pVMMDev->mSharedFolderClientId = 0; 377 loc.type = VMMDevHGCMLoc_LocalHost; 378 strcpy(loc.u.host.achName, "VBoxSharedFolders"); 379 int rc = pDrv->pVMMDev->hgcmConnect(cmd, &loc, &pDrv->pVMMDev->mSharedFolderClientId); 380 if (rc != VINF_SUCCESS) 381 { 382 AssertMsgFailed(("hgcmConnect returned %Vrc\n", rc)); 383 } 384 } 385 386 return hgcmLoadStateInternal (pDrv->pVMMDev->mSharedFolderClientId, pSSM); 350 387 } 351 388 … … 575 612 pData->pVMMDev->mSharedFolderClientId = 0; 576 613 } 577 #if 0 /* enable later */578 614 pDrvIns->pDrvHlp->pfnSSMRegister(pDrvIns, "HGCM", 0, HGCM_SSM_VERSION, 4096/* bad guess */, NULL, iface_hgcmSave, NULL, NULL, iface_hgcmLoad, NULL); 579 #endif580 615 #endif 581 616 -
trunk/src/VBox/Main/hgcm/HGCM.cpp
r910 r1080 161 161 int GuestCall (PPDMIHGCMPORT pHGCMPort, PVBOXHGCMCMD pCmd, uint32_t u32ClientID, uint32_t u32Function, uint32_t cParms, VBOXHGCMSVCPARM aParms[], bool fBlock); 162 162 int HostCall (PVBOXHGCMCMD pCmd, uint32_t u32ClientID, uint32_t u32Function, uint32_t cParms, VBOXHGCMSVCPARM aParms[]); 163 164 int SaveState(uint32_t u32ClientID, PSSMHANDLE pSSM); 165 int LoadState(uint32_t u32ClientID, PSSMHANDLE pSSM); 163 166 }; 164 167 … … 167 170 { 168 171 public: 172 HGCMClient () : HGCMObject(HGCMOBJ_CLIENT) {}; 169 173 ~HGCMClient (); 170 174 … … 471 475 rc = VINF_SUCCESS; 472 476 473 HGCMClient *pClient = (HGCMClient *)hgcmObjReference (pMsg->u32ClientID );477 HGCMClient *pClient = (HGCMClient *)hgcmObjReference (pMsg->u32ClientID, HGCMOBJ_CLIENT); 474 478 475 479 if (pClient) … … 489 493 rc = VINF_SUCCESS; 490 494 491 HGCMClient *pClient = (HGCMClient *)hgcmObjReference (pMsg->u32ClientID );495 HGCMClient *pClient = (HGCMClient *)hgcmObjReference (pMsg->u32ClientID, HGCMOBJ_CLIENT); 492 496 493 497 if (pClient) … … 507 511 rc = VINF_SUCCESS; 508 512 509 HGCMClient *pClient = (HGCMClient *)hgcmObjReference (pMsg->u32ClientID );513 HGCMClient *pClient = (HGCMClient *)hgcmObjReference (pMsg->u32ClientID, HGCMOBJ_CLIENT); 510 514 511 515 if (pClient) … … 517 521 else 518 522 { 519 rc = VERR_ INVALID_HANDLE;523 rc = VERR_HGCM_INVALID_CLIENT_ID; 520 524 } 521 525 } break; … … 531 535 rc = VINF_SUCCESS; 532 536 } break; 537 538 case HGCMMSGID_LOADSTATE: 539 { 540 LogFlow(("HGCMMSGID_LOADSTATE\n")); 541 542 HGCMMsgLoadSaveState *pMsg = (HGCMMsgLoadSaveState *)pMsgCore; 543 HGCMClient *pClient = (HGCMClient *)hgcmObjReference (pMsg->u32ClientID, HGCMOBJ_CLIENT); 544 545 rc = VINF_SUCCESS; 546 if (pClient && pSvc->m_fntable.pfnLoadState) 547 { 548 rc = pSvc->m_fntable.pfnLoadState (pMsg->u32ClientID, HGCM_CLIENT_DATA(pSvc, pClient), pMsg->pSSM); 549 hgcmObjDereference (pClient); 550 } 551 break; 552 } 553 554 case HGCMMSGID_SAVESTATE: 555 { 556 LogFlow(("HGCMMSGID_SAVESTATE\n")); 557 558 HGCMMsgLoadSaveState *pMsg = (HGCMMsgLoadSaveState *)pMsgCore; 559 HGCMClient *pClient = (HGCMClient *)hgcmObjReference (pMsg->u32ClientID, HGCMOBJ_CLIENT); 560 561 rc = VINF_SUCCESS; 562 if (pClient && pSvc->m_fntable.pfnSaveState) 563 { 564 rc = pSvc->m_fntable.pfnSaveState (pMsg->u32ClientID, HGCM_CLIENT_DATA(pSvc, pClient), pMsg->pSSM); 565 hgcmObjDereference (pClient); 566 } 567 break; 568 } 533 569 534 570 default: … … 894 930 if (VBOX_SUCCESS(rc)) 895 931 { 896 HGCMMsgSvcConnect *pMsg = (HGCMMsgSvcConnect *)hgcmObjReference (hMsg );932 HGCMMsgSvcConnect *pMsg = (HGCMMsgSvcConnect *)hgcmObjReference (hMsg, HGCMOBJ_MSG); 897 933 898 934 AssertRelease(pMsg); … … 924 960 if (VBOX_SUCCESS(rc)) 925 961 { 926 HGCMMsgSvcDisconnect *pMsg = (HGCMMsgSvcDisconnect *)hgcmObjReference (hMsg );962 HGCMMsgSvcDisconnect *pMsg = (HGCMMsgSvcDisconnect *)hgcmObjReference (hMsg, HGCMOBJ_MSG); 927 963 928 964 AssertRelease(pMsg); … … 954 990 if (VBOX_SUCCESS(rc)) 955 991 { 956 HGCMMsgCall *pMsg = (HGCMMsgCall *)hgcmObjReference (hMsg );992 HGCMMsgCall *pMsg = (HGCMMsgCall *)hgcmObjReference (hMsg, HGCMOBJ_MSG); 957 993 958 994 AssertRelease(pMsg); … … 998 1034 if (VBOX_SUCCESS(rc)) 999 1035 { 1000 HGCMMsgHostCall *pMsg = (HGCMMsgHostCall *)hgcmObjReference (hMsg );1036 HGCMMsgHostCall *pMsg = (HGCMMsgHostCall *)hgcmObjReference (hMsg, HGCMOBJ_MSG); 1001 1037 1002 1038 AssertRelease(pMsg); … … 1016 1052 { 1017 1053 Log(("MAIN::HGCMService::Call: Message allocation failed: %Vrc\n", rc)); 1054 } 1055 1056 return rc; 1057 } 1058 1059 int HGCMService::SaveState(uint32_t u32ClientID, PSSMHANDLE pSSM) 1060 { 1061 HGCMMSGHANDLE hMsg = 0; 1062 1063 LogFlow(("MAIN::HGCMService::SaveState %s\n", m_pszSvcName)); 1064 1065 int rc = hgcmMsgAlloc (m_thread, &hMsg, HGCMMSGID_SAVESTATE, sizeof (HGCMMsgLoadSaveState), hgcmMessageAlloc); 1066 1067 if (VBOX_SUCCESS(rc)) 1068 { 1069 HGCMMsgLoadSaveState *pMsg = (HGCMMsgLoadSaveState *)hgcmObjReference (hMsg, HGCMOBJ_MSG); 1070 1071 AssertRelease(pMsg); 1072 1073 pMsg->u32ClientID = u32ClientID; 1074 pMsg->pSSM = pSSM; 1075 1076 hgcmObjDereference (pMsg); 1077 1078 rc = hgcmMsgSend (hMsg); 1079 } 1080 else 1081 { 1082 Log(("MAIN::HGCMService::SaveState: Message allocation failed: %Vrc\n", rc)); 1083 } 1084 1085 return rc; 1086 } 1087 1088 int HGCMService::LoadState (uint32_t u32ClientID, PSSMHANDLE pSSM) 1089 { 1090 HGCMMSGHANDLE hMsg = 0; 1091 1092 LogFlow(("MAIN::HGCMService::LoadState %s\n", m_pszSvcName)); 1093 1094 int rc = hgcmMsgAlloc (m_thread, &hMsg, HGCMMSGID_LOADSTATE, sizeof (HGCMMsgLoadSaveState), hgcmMessageAlloc); 1095 1096 if (VBOX_SUCCESS(rc)) 1097 { 1098 HGCMMsgLoadSaveState *pMsg = (HGCMMsgLoadSaveState *)hgcmObjReference (hMsg, HGCMOBJ_MSG); 1099 1100 AssertRelease(pMsg); 1101 1102 pMsg->u32ClientID = u32ClientID; 1103 pMsg->pSSM = pSSM; 1104 1105 hgcmObjDereference (pMsg); 1106 1107 rc = hgcmMsgSend (hMsg); 1108 } 1109 else 1110 { 1111 Log(("MAIN::HGCMService::LoadState: Message allocation failed: %Vrc\n", rc)); 1018 1112 } 1019 1113 … … 1119 1213 1120 1214 /* Forward call to the service dedicated HGCM thread. */ 1121 HGCMClient *pClient = (HGCMClient *)hgcmObjReference (pMsg->u32ClientID );1215 HGCMClient *pClient = (HGCMClient *)hgcmObjReference (pMsg->u32ClientID, HGCMOBJ_CLIENT); 1122 1216 1123 1217 if (!pClient) … … 1164 1258 } break; 1165 1259 1166 #if 01167 case HGCMMSGID_LOADSTATE:1168 {1169 LogFlow(("HGCMMSGID_LOADSTATE\n"));1170 1171 HGCMMsgLoadSaveState *pMsg = (HGCMMsgLoadSaveState *)pMsgCore;1172 HGCMClient *pClient = (HGCMClient *)hgcmObjReference (pMsg->u32ClientID);1173 1174 rc = VINF_SUCCESS;1175 if (pClient && pService->m_fntable.pfnLoadState)1176 {1177 rc = pService->m_fntable.pfnLoadState (pMsg->u32ClientID, HGCM_CLIENT_DATA(pService, pClient), pMsg->pSSM);1178 hgcmObjDereference (pClient);1179 }1180 break;1181 }1182 1183 case HGCMMSGID_SAVESTATE:1184 {1185 LogFlow(("HGCMMSGID_SAVESTATE\n"));1186 1187 HGCMMsgLoadSaveState *pMsg = (HGCMMsgLoadSaveState *)pMsgCore;1188 HGCMClient *pClient = (HGCMClient *)hgcmObjReference (pMsg->u32ClientID);1189 1190 rc = VINF_SUCCESS;1191 if (pClient && pService->m_fntable.pfnSaveState)1192 {1193 rc = pService->m_fntable.pfnSaveState (pMsg->u32ClientID, HGCM_CLIENT_DATA(pService, pClient), pMsg->pSSM);1194 hgcmObjDereference (pClient);1195 }1196 break;1197 }1198 #endif1199 1260 default: 1200 1261 { … … 1234 1295 if (VBOX_SUCCESS(rc)) 1235 1296 { 1236 HGCMMsgConnect *pMsg = (HGCMMsgConnect *)hgcmObjReference (hMsg );1297 HGCMMsgConnect *pMsg = (HGCMMsgConnect *)hgcmObjReference (hMsg, HGCMOBJ_MSG); 1237 1298 1238 1299 AssertRelease(pMsg); … … 1289 1350 if (VBOX_SUCCESS(rc)) 1290 1351 { 1291 HGCMMsgDisconnect *pMsg = (HGCMMsgDisconnect *)hgcmObjReference (hMsg );1352 HGCMMsgDisconnect *pMsg = (HGCMMsgDisconnect *)hgcmObjReference (hMsg, HGCMOBJ_MSG); 1292 1353 1293 1354 AssertRelease(pMsg); … … 1319 1380 } 1320 1381 1321 int hgcmSaveStateInternal ( PPDMIHGCMPORT pHGCMPort,uint32_t u32ClientID, PSSMHANDLE pSSM)1382 int hgcmSaveStateInternal (uint32_t u32ClientID, PSSMHANDLE pSSM) 1322 1383 { 1323 1384 int rc = VINF_SUCCESS; 1324 1385 1325 LogFlow(("MAIN::hgcmSaveStateInternal: pHGCMPort = %p, u32ClientID = %d\n", 1326 pHGCMPort, u32ClientID)); 1327 1328 if (!pHGCMPort) 1329 { 1330 return VERR_INVALID_PARAMETER; 1331 } 1332 1333 HGCMMSGHANDLE hMsg = 0; 1334 1335 rc = hgcmMsgAlloc (g_hgcmThread, &hMsg, HGCMMSGID_SAVESTATE, sizeof (HGCMMsgLoadSaveState), hgcmMessageAlloc); 1336 1337 if (VBOX_SUCCESS(rc)) 1338 { 1339 HGCMMsgLoadSaveState *pMsg = (HGCMMsgLoadSaveState *)hgcmObjReference (hMsg); 1340 1341 AssertRelease(pMsg); 1342 1343 pMsg->pHGCMPort = pHGCMPort; 1344 pMsg->u32ClientID = u32ClientID; 1345 pMsg->pSSM = pSSM; 1346 1347 rc = hgcmMsgSend (hMsg); 1348 1349 hgcmObjDereference (pMsg); 1350 } 1351 else 1352 { 1353 Log(("MAIN::hgcmSaveStateInternal: Message allocation failed: %Vrc\n", rc)); 1354 } 1355 1356 return rc; 1357 } 1358 1359 int hgcmLoadStateInternal (PPDMIHGCMPORT pHGCMPort, uint32_t u32ClientID, PSSMHANDLE pSSM) 1386 LogFlow(("MAIN::hgcmSaveStateInternal: u32ClientID = %d\n", u32ClientID)); 1387 1388 HGCMClient *pClient = (HGCMClient *)hgcmObjReference (u32ClientID, HGCMOBJ_CLIENT); 1389 1390 if (!pClient) 1391 { 1392 Log(("MAIN::hgcmCallInternal: FAILURE resolving client id %d\n", u32ClientID)); 1393 return VERR_HGCM_INVALID_CLIENT_ID; 1394 } 1395 1396 AssertRelease(pClient->pService); 1397 1398 rc = pClient->pService->SaveState (u32ClientID, pSSM); 1399 1400 hgcmObjDereference (pClient); 1401 1402 return rc; 1403 } 1404 1405 int hgcmLoadStateInternal (uint32_t u32ClientID, PSSMHANDLE pSSM) 1360 1406 { 1361 1407 int rc = VINF_SUCCESS; 1362 1408 1363 LogFlow(("MAIN::hgcmLoadStateInternal: pHGCMPort = %p, u32ClientID = %d\n", 1364 pHGCMPort, u32ClientID)); 1365 1366 if (!pHGCMPort) 1367 { 1368 return VERR_INVALID_PARAMETER; 1369 } 1370 1371 HGCMMSGHANDLE hMsg = 0; 1372 1373 rc = hgcmMsgAlloc (g_hgcmThread, &hMsg, HGCMMSGID_LOADSTATE, sizeof (HGCMMsgLoadSaveState), hgcmMessageAlloc); 1374 1375 if (VBOX_SUCCESS(rc)) 1376 { 1377 HGCMMsgLoadSaveState *pMsg = (HGCMMsgLoadSaveState *)hgcmObjReference (hMsg); 1378 1379 AssertRelease(pMsg); 1380 1381 pMsg->pHGCMPort = pHGCMPort; 1382 pMsg->u32ClientID = u32ClientID; 1383 pMsg->pSSM = pSSM; 1384 1385 rc = hgcmMsgSend (hMsg); 1386 1387 hgcmObjDereference (pMsg); 1388 } 1389 else 1390 { 1391 Log(("MAIN::hgcmLoadStateInternal: Message allocation failed: %Vrc\n", rc)); 1392 } 1393 1409 LogFlow(("MAIN::hgcmLoadStateInternal: u32ClientID = %d\n", u32ClientID)); 1410 1411 HGCMClient *pClient = (HGCMClient *)hgcmObjReference (u32ClientID, HGCMOBJ_CLIENT); 1412 1413 if (!pClient) 1414 { 1415 Log(("MAIN::hgcmCallInternal: FAILURE resolving client id %d\n", u32ClientID)); 1416 return VERR_HGCM_INVALID_CLIENT_ID; 1417 } 1418 1419 AssertRelease(pClient->pService); 1420 1421 rc = pClient->pService->LoadState (u32ClientID, pSSM); 1422 1423 hgcmObjDereference (pClient); 1394 1424 return rc; 1395 1425 } … … 1413 1443 if (VBOX_SUCCESS(rc)) 1414 1444 { 1415 HGCMMsgLoad *pMsg = (HGCMMsgLoad *)hgcmObjReference (hMsg );1445 HGCMMsgLoad *pMsg = (HGCMMsgLoad *)hgcmObjReference (hMsg, HGCMOBJ_MSG); 1416 1446 1417 1447 AssertRelease(pMsg); … … 1455 1485 } 1456 1486 1457 HGCMClient *pClient = (HGCMClient *)hgcmObjReference (u32ClientID );1487 HGCMClient *pClient = (HGCMClient *)hgcmObjReference (u32ClientID, HGCMOBJ_CLIENT); 1458 1488 1459 1489 if (!pClient) 1460 1490 { 1461 1491 Log(("MAIN::hgcmCallInternal: FAILURE resolving client id %d\n", u32ClientID)); 1462 return VERR_ INVALID_PARAMETER;1492 return VERR_HGCM_INVALID_CLIENT_ID; 1463 1493 } 1464 1494 … … 1494 1524 if (VBOX_SUCCESS(rc)) 1495 1525 { 1496 HGCMMsgHostCall *pMsg = (HGCMMsgHostCall *)hgcmObjReference (hMsg );1526 HGCMMsgHostCall *pMsg = (HGCMMsgHostCall *)hgcmObjReference (hMsg, HGCMOBJ_MSG); 1497 1527 1498 1528 AssertRelease(pMsg); -
trunk/src/VBox/Main/hgcm/HGCMObjects.cpp
r1 r1080 173 173 } 174 174 175 HGCMObject *hgcmObjReference (uint32_t handle )175 HGCMObject *hgcmObjReference (uint32_t handle, HGCMOBJ_TYPE enmObjType) 176 176 { 177 177 LogFlow(("MAIN::hgcmObjReference: handle %d\n", handle)); … … 185 185 ObjectAVLCore *pCore = (ObjectAVLCore *)RTAvlULGet (&g_pTree, handle); 186 186 187 if (pCore) 187 Assert(!pCore || (pCore->pSelf && pCore->pSelf->Type() == enmObjType)); 188 if ( pCore 189 && pCore->pSelf 190 && pCore->pSelf->Type() == enmObjType) 188 191 { 189 192 pObject = pCore->pSelf; … … 216 219 LogFlow(("MAIN::hgcmObjDereference: return\n")); 217 220 } 221 222 uint32_t hgcmObjQueryHandleCount () 223 { 224 return g_u32HandleCount; 225 } 226 227 void hgcmObjSetHandleCount (uint32_t u32HandleCount) 228 { 229 Assert(g_u32HandleCount <= u32HandleCount); 230 231 int rc = hgcmObjEnter (); 232 233 if (VBOX_SUCCESS(rc)) 234 { 235 if (g_u32HandleCount <= u32HandleCount) 236 g_u32HandleCount = u32HandleCount; 237 hgcmObjLeave (); 238 } 239 } -
trunk/src/VBox/Main/hgcm/HGCMThread.cpp
r313 r1080 209 209 } 210 210 211 HGCMThread::HGCMThread () 211 HGCMThread::HGCMThread () 212 212 : 213 HGCMObject(HGCMOBJ_THREAD), 213 214 m_pfnThread (NULL), 214 215 m_pvUser (NULL), … … 733 734 int rc = VINF_SUCCESS; 734 735 735 HGCMThread *pThread = (HGCMThread *)hgcmObjReference (hThread );736 HGCMThread *pThread = (HGCMThread *)hgcmObjReference (hThread, HGCMOBJ_THREAD); 736 737 737 738 if (!pThread) … … 757 758 int rc = VINF_SUCCESS; 758 759 759 HGCMMsgCore *pMsg = (HGCMMsgCore *)hgcmObjReference (hMsg );760 HGCMMsgCore *pMsg = (HGCMMsgCore *)hgcmObjReference (hMsg, HGCMOBJ_MSG); 760 761 761 762 if (!pMsg) … … 808 809 int rc = VINF_SUCCESS; 809 810 810 HGCMThread *pThread = (HGCMThread *)hgcmObjReference (hThread );811 HGCMThread *pThread = (HGCMThread *)hgcmObjReference (hThread, HGCMOBJ_THREAD); 811 812 812 813 if (!pThread) -
trunk/src/VBox/Main/include/hgcm/HGCM.h
r906 r1080 43 43 int hgcmHostCallInternal (const char *pszServiceName, uint32_t function, uint32_t cParms, VBOXHGCMSVCPARM aParms[]); 44 44 45 int hgcmSaveStateInternal ( PPDMIHGCMPORT pHGCMPort,uint32_t clientID, PSSMHANDLE pSSM);46 int hgcmLoadStateInternal ( PPDMIHGCMPORT pHGCMPort,uint32_t clientID, PSSMHANDLE pSSM);45 int hgcmSaveStateInternal (uint32_t clientID, PSSMHANDLE pSSM); 46 int hgcmLoadStateInternal (uint32_t clientID, PSSMHANDLE pSSM); 47 47 48 48 __END_DECLS -
trunk/src/VBox/Main/include/hgcm/HGCMObjects.h
r1 r1080 36 36 } ObjectAVLCore; 37 37 38 typedef enum 39 { 40 HGCMOBJ_CLIENT, 41 HGCMOBJ_THREAD, 42 HGCMOBJ_MSG, 43 HGCMOBJ_SizeHack = 0x7fffffff 44 } HGCMOBJ_TYPE; 45 38 46 class HGCMObject 39 47 { … … 42 50 43 51 int32_t volatile cRef; 52 HGCMOBJ_TYPE enmObjType; 44 53 45 54 ObjectAVLCore Core; … … 51 60 52 61 public: 53 HGCMObject () : cRef (0) {}; 62 HGCMObject (HGCMOBJ_TYPE enmObjType) : cRef (0) 63 { 64 this->enmObjType = enmObjType; 65 }; 54 66 55 67 void Reference (void) … … 79 91 return Core.AvlCore.Key; 80 92 }; 93 94 HGCMOBJ_TYPE Type (void) 95 { 96 return enmObjType; 97 }; 81 98 }; 82 99 … … 89 106 void hgcmObjDeleteHandle (uint32_t handle); 90 107 91 HGCMObject *hgcmObjReference (uint32_t handle );108 HGCMObject *hgcmObjReference (uint32_t handle, HGCMOBJ_TYPE enmObjType); 92 109 93 110 void hgcmObjDereference (HGCMObject *pObject); 94 111 112 uint32_t hgcmObjQueryHandleCount (); 113 void hgcmObjSetHandleCount (uint32_t u32HandleCount); 114 95 115 #endif /* __HGCMOBJECTS__H */ -
trunk/src/VBox/Main/include/hgcm/HGCMThread.h
r1 r1080 95 95 96 96 public: 97 HGCMMsgCore () {};97 HGCMMsgCore () : HGCMObject(HGCMOBJ_MSG) {}; 98 98 99 99 uint32_t MsgId (void) { return m_u32Msg; };
Note:
See TracChangeset
for help on using the changeset viewer.