Changeset 43462 in vbox for trunk/src/VBox/Additions/common
- Timestamp:
- Sep 28, 2012 10:46:41 AM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibHostChannel.cpp
r43346 r43462 276 276 return rc; 277 277 } 278 279 VBGLR3DECL(int) VbglR3HostChannelQuery(const char *pszName, 280 uint32_t u32HGCMClientId, 281 uint32_t u32Code, 282 void *pvParm, 283 uint32_t cbParm, 284 void *pvData, 285 uint32_t cbData, 286 uint32_t *pu32SizeDataReturned) 287 { 288 /* Make a heap copy of the name, because HGCM can not use some of other memory types. */ 289 size_t cbName = strlen(pszName) + 1; 290 char *pszCopy = (char *)RTMemAlloc(cbName); 291 if (pszCopy == NULL) 292 { 293 return VERR_NO_MEMORY; 294 } 295 296 memcpy(pszCopy, pszName, cbName); 297 298 VBoxHostChannelQuery parms; 299 300 parms.hdr.result = VERR_WRONG_ORDER; 301 parms.hdr.u32ClientID = u32HGCMClientId; 302 parms.hdr.u32Function = VBOX_HOST_CHANNEL_FN_QUERY; 303 parms.hdr.cParms = 5; 304 305 VbglHGCMParmPtrSet(&parms.name, pszCopy, (uint32_t)cbName); 306 VbglHGCMParmUInt32Set(&parms.code, u32Code); 307 VbglHGCMParmPtrSet(&parms.parm, pvParm, cbParm); 308 VbglHGCMParmPtrSet(&parms.data, pvData, cbData); 309 VbglHGCMParmUInt32Set(&parms.sizeDataReturned, 0); 310 311 int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(parms)), &parms, sizeof(parms)); 312 313 if (RT_SUCCESS(rc)) 314 { 315 rc = parms.hdr.result; 316 317 if (RT_SUCCESS(rc)) 318 { 319 *pu32SizeDataReturned = parms.sizeDataReturned.u.value32; 320 } 321 } 322 323 RTMemFree(pszCopy); 324 325 return rc; 326 }
Note:
See TracChangeset
for help on using the changeset viewer.