Changeset 33064 in vbox for trunk/src/VBox/Additions/common/VBoxGuestLib
- Timestamp:
- Oct 12, 2010 1:20:50 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/common/VBoxGuestLib/VBoxGuestR3LibGuestCtrl.cpp
r30013 r33064 105 105 VBGLR3DECL(int) VbglR3GuestCtrlGetHostMsg(uint32_t u32ClientId, uint32_t *puMsg, uint32_t *puNumParms) 106 106 { 107 AssertPtr (puMsg);108 AssertPtr (puNumParms);107 AssertPtrReturn(puMsg, VERR_INVALID_PARAMETER); 108 AssertPtrReturn(puNumParms, VERR_INVALID_PARAMETER); 109 109 110 110 VBoxGuestCtrlHGCMMsgType Msg; … … 178 178 uint32_t *puTimeLimit) 179 179 { 180 AssertPtr (puContext);181 AssertPtr (pszCmd);182 AssertPtr (puFlags);183 AssertPtr (pszArgs);184 AssertPtr (puNumArgs);185 AssertPtr (pszEnv);186 AssertPtr (pcbEnv);187 AssertPtr (puNumEnvVars);188 AssertPtr (pszUser);189 AssertPtr (pszPassword);190 AssertPtr (puTimeLimit);180 AssertPtrReturn(puContext, VERR_INVALID_PARAMETER); 181 AssertPtrReturn(pszCmd, VERR_INVALID_PARAMETER); 182 AssertPtrReturn(puFlags, VERR_INVALID_PARAMETER); 183 AssertPtrReturn(pszArgs, VERR_INVALID_PARAMETER); 184 AssertPtrReturn(puNumArgs, VERR_INVALID_PARAMETER); 185 AssertPtrReturn(pszEnv, VERR_INVALID_PARAMETER); 186 AssertPtrReturn(pcbEnv, VERR_INVALID_PARAMETER); 187 AssertPtrReturn(puNumEnvVars, VERR_INVALID_PARAMETER); 188 AssertPtrReturn(pszUser, VERR_INVALID_PARAMETER); 189 AssertPtrReturn(pszPassword, VERR_INVALID_PARAMETER); 190 AssertPtrReturn(puTimeLimit, VERR_INVALID_PARAMETER); 191 191 192 192 VBoxGuestCtrlHGCMMsgExecCmd Msg; … … 197 197 Msg.hdr.cParms = uNumParms; 198 198 199 VbglHGCMParmUInt32Set(&Msg.context, 0); /** @todo Put this some header struct! */199 VbglHGCMParmUInt32Set(&Msg.context, 0); 200 200 VbglHGCMParmPtrSet(&Msg.cmd, pszCmd, cbCmd); 201 201 VbglHGCMParmUInt32Set(&Msg.flags, 0); … … 245 245 uint32_t *puHandle, uint32_t *puFlags) 246 246 { 247 AssertPtr(puContext); 248 AssertPtr(puPID); 247 AssertPtrReturn(puContext, VERR_INVALID_PARAMETER); 248 AssertPtrReturn(puPID, VERR_INVALID_PARAMETER); 249 AssertPtrReturn(puHandle, VERR_INVALID_PARAMETER); 250 AssertPtrReturn(puFlags, VERR_INVALID_PARAMETER); 249 251 250 252 VBoxGuestCtrlHGCMMsgExecOut Msg; … … 255 257 Msg.hdr.cParms = uNumParms; 256 258 257 VbglHGCMParmUInt32Set(&Msg.context, 0); /** @todo Put this some header struct! */259 VbglHGCMParmUInt32Set(&Msg.context, 0); 258 260 VbglHGCMParmUInt32Set(&Msg.pid, 0); 259 261 VbglHGCMParmUInt32Set(&Msg.handle, 0); … … 274 276 Msg.handle.GetUInt32(puHandle); 275 277 Msg.flags.GetUInt32(puFlags); 278 } 279 } 280 return rc; 281 } 282 283 284 /** 285 * Retrieves the input data from host which then gets sent to the 286 * started process. 287 * 288 * This will block until data becomes available. 289 * 290 * @returns VBox status code. 291 * @param u32ClientId The client id returned by VbglR3GuestCtrlConnect(). 292 * @param uNumParms 293 ** @todo Docs! 294 */ 295 VBGLR3DECL(int) VbglR3GuestCtrlExecGetHostCmdInput(uint32_t u32ClientId, uint32_t uNumParms, 296 uint32_t *puContext, uint32_t *puPID, 297 uint32_t *puFlags, 298 void *pvData, uint32_t cbData, 299 uint32_t *pcbSize) 300 { 301 AssertPtrReturn(puContext, VERR_INVALID_PARAMETER); 302 AssertPtrReturn(puPID, VERR_INVALID_PARAMETER); 303 AssertPtrReturn(puFlags, VERR_INVALID_PARAMETER); 304 AssertPtrReturn(pvData, VERR_INVALID_PARAMETER); 305 AssertPtrReturn(pcbSize, VERR_INVALID_PARAMETER); 306 307 VBoxGuestCtrlHGCMMsgExecIn Msg; 308 309 Msg.hdr.result = VERR_WRONG_ORDER; 310 Msg.hdr.u32ClientID = u32ClientId; 311 Msg.hdr.u32Function = GUEST_GET_HOST_MSG; 312 Msg.hdr.cParms = uNumParms; 313 314 VbglHGCMParmUInt32Set(&Msg.context, 0); 315 VbglHGCMParmUInt32Set(&Msg.pid, 0); 316 VbglHGCMParmUInt32Set(&Msg.flags, 0); 317 VbglHGCMParmPtrSet(&Msg.data, pvData, cbData); 318 VbglHGCMParmUInt32Set(&Msg.size, 0); 319 320 int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg)); 321 if (RT_SUCCESS(rc)) 322 { 323 int rc2 = Msg.hdr.result; 324 if (RT_FAILURE(rc2)) 325 { 326 rc = rc2; 327 } 328 else 329 { 330 Msg.context.GetUInt32(puContext); 331 Msg.pid.GetUInt32(puPID); 332 Msg.flags.GetUInt32(puFlags); 333 Msg.size.GetUInt32(pcbSize); 276 334 } 277 335 } … … 355 413 } 356 414 415 416 /** 417 * Reports back the input status to the host. 418 * 419 * @returns VBox status code. 420 ** @todo Docs! 421 */ 422 VBGLR3DECL(int) VbglR3GuestCtrlExecReportStatusIn(uint32_t u32ClientId, 423 uint32_t u32Context, 424 uint32_t u32PID, 425 uint32_t u32Flags, 426 uint32_t cbWritten) 427 { 428 VBoxGuestCtrlHGCMMsgExecStatusIn Msg; 429 430 Msg.hdr.result = VERR_WRONG_ORDER; 431 Msg.hdr.u32ClientID = u32ClientId; 432 Msg.hdr.u32Function = GUEST_EXEC_SEND_INPUT_STATUS; 433 Msg.hdr.cParms = 4; 434 435 VbglHGCMParmUInt32Set(&Msg.context, u32Context); 436 VbglHGCMParmUInt32Set(&Msg.pid, u32PID); 437 VbglHGCMParmUInt32Set(&Msg.flags, u32Flags); 438 VbglHGCMParmUInt32Set(&Msg.written, cbWritten); 439 440 int rc = vbglR3DoIOCtl(VBOXGUEST_IOCTL_HGCM_CALL(sizeof(Msg)), &Msg, sizeof(Msg)); 441 if (RT_SUCCESS(rc)) 442 { 443 int rc2 = Msg.hdr.result; 444 if (RT_FAILURE(rc2)) 445 rc = rc2; 446 } 447 return rc; 448 }
Note:
See TracChangeset
for help on using the changeset viewer.