2 * VBoxGuestLib - VirtualBox Guest Additions Library.
6 * Copyright (C) 2006-2017 Oracle Corporation
8 * This file is part of VirtualBox Open Source Edition (OSE), as
9 * available from http://www.virtualbox.org. This file is free software;
10 * you can redistribute it and/or modify it under the terms of the GNU
11 * General Public License (GPL) as published by the Free Software
12 * Foundation, in version 2 as it comes in the "COPYING" file of the
13 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
14 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 * The contents of this file may alternatively be used under the terms
17 * of the Common Development and Distribution License Version 1.0
18 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
19 * VirtualBox OSE distribution, in which case the provisions of the
20 * CDDL are applicable instead of those of the GPL.
22 * You may elect to license modified versions of this file under the
23 * terms and conditions of either the GPL or the CDDL or both.
26 #ifndef ___VBox_VBoxGuestLib_h
27 #define ___VBox_VBoxGuestLib_h
29 #include <VBox/types.h>
30 #include <VBox/VMMDevCoreTypes.h>
31 #include <VBox/VBoxGuestCoreTypes.h>
33 /** @defgroup grp_vboxguest_lib VirtualBox Guest Additions Library
34 * @ingroup grp_vboxguest
38 /** @page pg_guest_lib VirtualBox Guest Library
40 * This is a library for abstracting the additions driver interface. There are
41 * multiple versions of the library depending on the context. The main
42 * distinction is between kernel and user mode where the interfaces are very
46 * @section sec_guest_lib_ring0 Ring-0
48 * In ring-0 there are two version:
49 * - VBOX_LIB_VBGL_R0_BASE / VBoxGuestR0LibBase for the VBoxGuest main driver,
50 * who is responsible for managing the VMMDev virtual hardware.
51 * - VBOX_LIB_VBGL_R0 / VBoxGuestR0Lib for other (client) guest drivers.
54 * The library source code and the header have a define VBGL_VBOXGUEST, which is
55 * defined for VBoxGuest and undefined for other drivers. Drivers must choose
56 * right library in their makefiles and set VBGL_VBOXGUEST accordingly.
58 * The libraries consists of:
59 * - common code to be used by both VBoxGuest and other drivers;
60 * - VBoxGuest specific code;
61 * - code for other drivers which communicate with VBoxGuest via an IOCTL.
64 * @section sec_guest_lib_ring3 Ring-3
66 * There are more variants of the library here:
67 * - VBOX_LIB_VBGL_R3 / VBoxGuestR3Lib for programs.
68 * - VBOX_LIB_VBGL_R3_XFREE86 / VBoxGuestR3LibXFree86 for old style XFree
69 * drivers which uses special loader and or symbol resolving strategy.
70 * - VBOX_LIB_VBGL_R3_SHARED / VBoxGuestR3LibShared for shared objects / DLLs /
78 * @todo Promote to VBox/types.h */
79 typedef uint32_t HGCMCLIENTID
;
82 /** @defgroup grp_vboxguest_lib_r0 Ring-0 interface.
87 * Declare a VBGL ring-0 API with the right calling convention and visibilitiy.
88 * @param type Return type. */
89 # ifdef RT_OS_DARWIN /** @todo probably apply to all, but don't want a forest fire on our hands right now. */
90 # define DECLR0VBGL(type) DECLHIDDEN(type) VBOXCALL
92 # define DECLR0VBGL(type) type VBOXCALL
94 # define DECLVBGL(type) DECLR0VBGL(type)
98 * The library initialization function to be used by the main VBoxGuest driver.
100 * @return VBox status code.
102 DECLR0VBGL(int) VbglR0InitPrimary(RTIOPORT portVMMDev
, struct VMMDevMemory
*pVMMDevMemory
);
105 * The library termination function to be used by the main VBoxGuest driver.
107 * @author bird (2017-08-23)
109 DECLR0VBGL(void) VbglR0TerminatePrimary(void);
112 * The library initialization function to be used by all drivers
113 * other than the main VBoxGuest system driver.
115 * @return VBox status code.
117 DECLR0VBGL(int) VbglR0InitClient(void);
120 * The library termination function.
122 DECLR0VBGL(void) VbglR0TerminateClient(void);
125 /** @name The IDC Client Interface
130 * Inter-Driver Communication Handle.
132 typedef union VBGLIDCHANDLE
134 /** Padding for opaque usage.
135 * Must be greater or equal in size than the private struct. */
137 #ifdef VBGLIDCHANDLEPRIVATE_DECLARED
138 /** The private view. */
139 struct VBGLIDCHANDLEPRIVATE s
;
142 /** Pointer to a handle. */
143 typedef VBGLIDCHANDLE
*PVBGLIDCHANDLE
;
145 DECLR0VBGL(int) VbglR0IdcOpen(PVBGLIDCHANDLE pHandle
, uint32_t uReqVersion
, uint32_t uMinVersion
,
146 uint32_t *puSessionVersion
, uint32_t *puDriverVersion
, uint32_t *puDriverRevision
);
148 DECLR0VBGL(int) VbglR0IdcCallRaw(PVBGLIDCHANDLE pHandle
, uintptr_t uReq
, struct VBGLREQHDR
*pReqHdr
, uint32_t cbReq
);
149 DECLR0VBGL(int) VbglR0IdcCall(PVBGLIDCHANDLE pHandle
, uintptr_t uReq
, struct VBGLREQHDR
*pReqHdr
, uint32_t cbReq
);
150 DECLR0VBGL(int) VbglR0IdcClose(PVBGLIDCHANDLE pHandle
);
155 /** @name Generic request functions.
160 * Allocate memory for generic request and initialize the request header.
162 * @returns VBox status code.
163 * @param ppReq Where to return the pointer to the allocated memory.
164 * @param cbReq Size of memory block required for the request.
165 * @param enmReqType the generic request type.
167 # if defined(___VBox_VMMDev_h) || defined(DOXYGEN_RUNNING)
168 DECLR0VBGL(int) VbglR0GRAlloc(struct VMMDevRequestHeader
**ppReq
, size_t cbReq
, VMMDevRequestType enmReqType
);
170 DECLR0VBGL(int) VbglR0GRAlloc(struct VMMDevRequestHeader
**ppReq
, size_t cbReq
, int32_t enmReqType
);
174 * Perform the generic request.
176 * @param pReq pointer the request structure.
178 * @return VBox status code.
180 DECLR0VBGL(int) VbglR0GRPerform(struct VMMDevRequestHeader
*pReq
);
183 * Free the generic request memory.
185 * @param pReq pointer the request structure.
187 * @return VBox status code.
189 DECLR0VBGL(void) VbglR0GRFree(struct VMMDevRequestHeader
*pReq
);
192 * Verify the generic request header.
194 * @param pReq pointer the request header structure.
195 * @param cbReq size of the request memory block. It should be equal to the request size
196 * for fixed size requests. It can be greater than the request size for
197 * variable size requests.
199 * @return VBox status code.
201 DECLR0VBGL(int) VbglGR0Verify(const struct VMMDevRequestHeader
*pReq
, size_t cbReq
);
205 # ifdef VBOX_WITH_HGCM
206 struct VBGLIOCHGCMCALL
;
208 # ifdef VBGL_VBOXGUEST
211 * Callback function called from HGCM helpers when a wait for request
212 * completion IRQ is required.
214 * @returns VINF_SUCCESS, VERR_INTERRUPT or VERR_TIMEOUT.
215 * @param pvData VBoxGuest pointer to be passed to callback.
216 * @param u32Data VBoxGuest 32 bit value to be passed to callback.
218 typedef DECLCALLBACK(int) FNVBGLHGCMCALLBACK(VMMDevHGCMRequestHeader
*pHeader
, void *pvData
, uint32_t u32Data
);
219 /** Pointer to a FNVBGLHGCMCALLBACK. */
220 typedef FNVBGLHGCMCALLBACK
*PFNVBGLHGCMCALLBACK
;
223 * Perform a connect request.
225 * That is locate required service and obtain a client identifier for future
228 * @note This function can NOT handle cancelled requests!
230 * @param pLoc The service to connect to.
231 * @param pidClient Where to return the client ID on success.
232 * @param pfnAsyncCallback Required pointer to function that is calledwhen
233 * host returns VINF_HGCM_ASYNC_EXECUTE. VBoxGuest
234 * implements waiting for an IRQ in this function.
235 * @param pvAsyncData An arbitrary VBoxGuest pointer to be passed to callback.
236 * @param u32AsyncData An arbitrary VBoxGuest 32 bit value to be passed to callback.
238 * @return VBox status code.
240 DECLR0VBGL(int) VbglR0HGCMInternalConnect(HGCMServiceLocation
const *pLoc
, HGCMCLIENTID
*pidClient
,
241 PFNVBGLHGCMCALLBACK pfnAsyncCallback
, void *pvAsyncData
, uint32_t u32AsyncData
);
245 * Perform a disconnect request.
247 * That is tell the host that the client will not call the service anymore.
249 * @note This function can NOT handle cancelled requests!
251 * @param idClient The client ID to disconnect.
252 * @param pfnAsyncCallback Required pointer to function that is called when
253 * host returns VINF_HGCM_ASYNC_EXECUTE. VBoxGuest
254 * implements waiting for an IRQ in this function.
255 * @param pvAsyncData An arbitrary VBoxGuest pointer to be passed to callback.
256 * @param u32AsyncData An arbitrary VBoxGuest 32 bit value to be passed to
259 * @return VBox status code.
262 DECLR0VBGL(int) VbglR0HGCMInternalDisconnect(HGCMCLIENTID idClient
,
263 PFNVBGLHGCMCALLBACK pfnAsyncCallback
, void *pvAsyncData
, uint32_t u32AsyncData
);
265 /** Call a HGCM service.
267 * @note This function can deal with cancelled requests.
269 * @param pCallInfo The request data.
270 * @param fFlags Flags, see VBGLR0_HGCMCALL_F_XXX.
271 * @param pfnAsyncCallback Required pointer to function that is called when
272 * host returns VINF_HGCM_ASYNC_EXECUTE. VBoxGuest
273 * implements waiting for an IRQ in this function.
274 * @param pvAsyncData An arbitrary VBoxGuest pointer to be passed to callback.
275 * @param u32AsyncData An arbitrary VBoxGuest 32 bit value to be passed to callback.
277 * @return VBox status code.
279 DECLR0VBGL(int) VbglR0HGCMInternalCall(struct VBGLIOCHGCMCALL
*pCallInfo
, uint32_t cbCallInfo
, uint32_t fFlags
,
280 PFNVBGLHGCMCALLBACK pfnAsyncCallback
, void *pvAsyncData
, uint32_t u32AsyncData
);
282 /** Call a HGCM service. (32 bits packet structure in a 64 bits guest)
284 * @note This function can deal with cancelled requests.
286 * @param pCallInfo The request data.
287 * @param fFlags Flags, see VBGLR0_HGCMCALL_F_XXX.
288 * @param pfnAsyncCallback Required pointer to function that is called when
289 * host returns VINF_HGCM_ASYNC_EXECUTE. VBoxGuest
290 * implements waiting for an IRQ in this function.
291 * @param pvAsyncData An arbitrary VBoxGuest pointer to be passed to callback.
292 * @param u32AsyncData An arbitrary VBoxGuest 32 bit value to be passed to callback.
294 * @return VBox status code.
296 DECLR0VBGL(int) VbglR0HGCMInternalCall32(struct VBGLIOCHGCMCALL
*pCallInfo
, uint32_t cbCallInfo
, uint32_t fFlags
,
297 PFNVBGLHGCMCALLBACK pfnAsyncCallback
, void *pvAsyncData
, uint32_t u32AsyncData
);
299 /** @name VbglR0HGCMInternalCall flags
301 /** User mode request.
302 * Indicates that only user mode addresses are permitted as parameters. */
303 #define VBGLR0_HGCMCALL_F_USER UINT32_C(0)
304 /** Kernel mode request.
305 * Indicates that kernel mode addresses are permitted as parameters. Whether or
306 * not user mode addresses are permitted is, unfortunately, OS specific. The
307 * following OSes allows user mode addresses: Windows, TODO.
309 #define VBGLR0_HGCMCALL_F_KERNEL UINT32_C(1)
311 #define VBGLR0_HGCMCALL_F_MODE_MASK UINT32_C(1)
314 # else /* !VBGL_VBOXGUEST */
316 struct VBGLHGCMHANDLEDATA
;
317 typedef struct VBGLHGCMHANDLEDATA
*VBGLHGCMHANDLE
;
319 /** @name HGCM functions
324 * Initializes HGCM in the R0 guest library. Must be called before any HGCM
325 * connections are made. Is called by VbglInitClient().
327 * @return VBox status code.
329 DECLR0VBGL(int) VbglR0HGCMInit(void);
332 * Terminates HGCM in the R0 guest library. Is called by VbglTerminate().
334 * @return VBox status code.
336 DECLR0VBGL(int) VbglR0HGCMTerminate(void);
339 * Connect to a service.
341 * @param pHandle Pointer to variable that will hold a handle to be used
342 * further in VbglHGCMCall and VbglHGCMClose.
343 * @param pszServiceName The service to connect to.
344 * @param pidClient Where to return the client ID for the connection.
346 * @return VBox status code.
348 * @todo consider baking the client Id into the handle.
350 DECLR0VBGL(int) VbglR0HGCMConnect(VBGLHGCMHANDLE
*pHandle
, const char *pszServiceName
, HGCMCLIENTID
*pidClient
);
353 * Connect to a service.
355 * @param handle Handle of the connection.
356 * @param idClient The ID of the client connection.
358 * @return VBox status code.
360 * @todo consider baking the client Id into the handle.
362 DECLR0VBGL(int) VbglR0HGCMDisconnect(VBGLHGCMHANDLE handle
, HGCMCLIENTID idClient
);
365 * Call to a service, returning only the I/O control status code.
367 * @param handle Handle of the connection.
368 * @param pData Call request information structure, including function parameters.
369 * @param cbData Length in bytes of data.
371 * @return VBox status code.
373 DECLR0VBGL(int) VbglR0HGCMCallRaw(VBGLHGCMHANDLE handle
, struct VBGLIOCHGCMCALL
*pData
, uint32_t cbData
);
376 * Call to a service, returning the HGCM status code.
378 * @param handle Handle of the connection.
379 * @param pData Call request information structure, including function parameters.
380 * @param cbData Length in bytes of data.
382 * @return VBox status code. Either the I/O control status code if that failed,
383 * or the HGCM status code (pData->Hdr.rc).
385 DECLR0VBGL(int) VbglR0HGCMCall(VBGLHGCMHANDLE handle
, struct VBGLIOCHGCMCALL
*pData
, uint32_t cbData
);
388 * Call to a service with user-mode data received by the calling driver from the User-Mode process.
389 * The call must be done in the context of a calling process.
391 * @param handle Handle of the connection.
392 * @param pData Call request information structure, including function parameters.
393 * @param cbData Length in bytes of data.
395 * @return VBox status code.
397 DECLR0VBGL(int) VbglR0HGCMCallUserDataRaw(VBGLHGCMHANDLE handle
, struct VBGLIOCHGCMCALL
*pData
, uint32_t cbData
);
401 /** @name Undocumented helpers for talking to the Chromium OpenGL Host Service
403 typedef VBGLHGCMHANDLE VBGLCRCTLHANDLE
;
404 DECLR0VBGL(int) VbglR0CrCtlCreate(VBGLCRCTLHANDLE
*phCtl
);
405 DECLR0VBGL(int) VbglR0CrCtlDestroy(VBGLCRCTLHANDLE hCtl
);
406 DECLR0VBGL(int) VbglR0CrCtlConConnect(VBGLCRCTLHANDLE hCtl
, HGCMCLIENTID
*pidClient
);
407 DECLR0VBGL(int) VbglR0CrCtlConDisconnect(VBGLCRCTLHANDLE hCtl
, HGCMCLIENTID idClient
);
408 struct VBGLIOCHGCMCALL
;
409 DECLR0VBGL(int) VbglR0CrCtlConCallRaw(VBGLCRCTLHANDLE hCtl
, struct VBGLIOCHGCMCALL
*pCallInfo
, int cbCallInfo
);
410 DECLR0VBGL(int) VbglR0CrCtlConCall(VBGLCRCTLHANDLE hCtl
, struct VBGLIOCHGCMCALL
*pCallInfo
, int cbCallInfo
);
411 DECLR0VBGL(int) VbglR0CrCtlConCallUserDataRaw(VBGLCRCTLHANDLE hCtl
, struct VBGLIOCHGCMCALL
*pCallInfo
, int cbCallInfo
);
414 # endif /* !VBGL_VBOXGUEST */
416 # endif /* VBOX_WITH_HGCM */
420 * Initialize the heap.
422 * @returns VBox status code.
424 DECLR0VBGL(int) VbglR0PhysHeapInit(void);
429 DECLR0VBGL(void) VbglR0PhysHeapTerminate(void);
432 * Allocate a memory block.
434 * @returns Virtual address of the allocated memory block.
435 * @param cbSize Size of block to be allocated.
437 DECLR0VBGL(void *) VbglR0PhysHeapAlloc(uint32_t cbSize
);
440 * Get physical address of memory block pointed by the virtual address.
443 * The function does not acquire the Heap mutex!
444 * When calling the function make sure that the pointer is a valid one and
445 * is not being deallocated. This function can NOT be used for verifying
446 * if the given pointer is a valid one allocated from the heap.
448 * @param pv Virtual address of memory block.
449 * @returns Physical address of the memory block.
451 DECLR0VBGL(uint32_t) VbglR0PhysHeapGetPhysAddr(void *pv
);
454 * Free a memory block.
456 * @param pv Virtual address of memory block.
458 DECLR0VBGL(void) VbglR0PhysHeapFree(void *pv
);
460 DECLR0VBGL(int) VbglR0QueryVMMDevMemory(struct VMMDevMemory
**ppVMMDevMemory
);
461 DECLR0VBGL(bool) VbglR0CanUsePhysPageList(void);
466 DECLR0VBGL(int) VbglR0SetMouseNotifyCallback(PFNVBOXGUESTMOUSENOTIFY pfnNotify
, void *pvUser
);
467 DECLR0VBGL(int) VbglR0GetMouseStatus(uint32_t *pfFeatures
, uint32_t *px
, uint32_t *py
);
468 DECLR0VBGL(int) VbglR0SetMouseStatus(uint32_t fFeatures
);
470 # endif /* VBOX_GUEST */
472 #endif /* IN_RING0 */
477 /** @defgroup grp_vboxguest_lib_r3 Ring-3 interface.
483 * Ring 3 VBGL declaration.
484 * @param type The return type of the function declaration.
486 # define VBGLR3DECL(type) DECLHIDDEN(type) VBOXCALL
488 /** @name General-purpose functions
490 VBGLR3DECL(int) VbglR3Init(void);
491 VBGLR3DECL(int) VbglR3InitUser(void);
492 VBGLR3DECL(void) VbglR3Term(void);
493 # ifdef ___iprt_time_h
494 VBGLR3DECL(int) VbglR3GetHostTime(PRTTIMESPEC pTime
);
496 VBGLR3DECL(int) VbglR3InterruptEventWaits(void);
497 VBGLR3DECL(int) VbglR3WriteLog(const char *pch
, size_t cch
);
498 VBGLR3DECL(int) VbglR3CtlFilterMask(uint32_t fOr
, uint32_t fNot
);
499 VBGLR3DECL(int) VbglR3Daemonize(bool fNoChDir
, bool fNoClose
, bool fRespawn
, unsigned *pcRespawn
);
500 VBGLR3DECL(int) VbglR3PidFile(const char *pszPath
, PRTFILE phFile
);
501 VBGLR3DECL(void) VbglR3ClosePidFile(const char *pszPath
, RTFILE hFile
);
502 VBGLR3DECL(int) VbglR3SetGuestCaps(uint32_t fOr
, uint32_t fNot
);
503 VBGLR3DECL(int) VbglR3AcquireGuestCaps(uint32_t fOr
, uint32_t fNot
, bool fConfig
);
504 VBGLR3DECL(int) VbglR3WaitEvent(uint32_t fMask
, uint32_t cMillies
, uint32_t *pfEvents
);
506 VBGLR3DECL(int) VbglR3ReportAdditionsStatus(VBoxGuestFacilityType Facility
, VBoxGuestFacilityStatus StatusCurrent
,
508 VBGLR3DECL(int) VbglR3GetAdditionsVersion(char **ppszVer
, char **ppszVerEx
, char **ppszRev
);
509 VBGLR3DECL(int) VbglR3GetAdditionsInstallationPath(char **ppszPath
);
510 VBGLR3DECL(int) VbglR3GetSessionId(uint64_t *pu64IdSession
);
514 /** @name Shared clipboard
516 VBGLR3DECL(int) VbglR3ClipboardConnect(HGCMCLIENTID
*pidClient
);
517 VBGLR3DECL(int) VbglR3ClipboardDisconnect(HGCMCLIENTID idClient
);
518 VBGLR3DECL(int) VbglR3ClipboardGetHostMsg(HGCMCLIENTID idClient
, uint32_t *pMsg
, uint32_t *pfFormats
);
519 VBGLR3DECL(int) VbglR3ClipboardReadData(HGCMCLIENTID idClient
, uint32_t fFormat
, void *pv
, uint32_t cb
, uint32_t *pcb
);
520 VBGLR3DECL(int) VbglR3ClipboardReportFormats(HGCMCLIENTID idClient
, uint32_t fFormats
);
521 VBGLR3DECL(int) VbglR3ClipboardWriteData(HGCMCLIENTID idClient
, uint32_t fFormat
, void *pv
, uint32_t cb
);
524 /** @name Seamless mode
526 VBGLR3DECL(int) VbglR3SeamlessSetCap(bool fState
);
527 VBGLR3DECL(int) VbglR3SeamlessWaitEvent(VMMDevSeamlessMode
*pMode
);
528 VBGLR3DECL(int) VbglR3SeamlessSendRects(uint32_t cRects
, PRTRECT pRects
);
529 VBGLR3DECL(int) VbglR3SeamlessGetLastEvent(VMMDevSeamlessMode
*pMode
);
535 VBGLR3DECL(int) VbglR3GetMouseStatus(uint32_t *pfFeatures
, uint32_t *px
, uint32_t *py
);
536 VBGLR3DECL(int) VbglR3SetMouseStatus(uint32_t fFeatures
);
541 VBGLR3DECL(int) VbglR3VideoAccelEnable(bool fEnable
);
542 VBGLR3DECL(int) VbglR3VideoAccelFlush(void);
543 VBGLR3DECL(int) VbglR3SetPointerShape(uint32_t fFlags
, uint32_t xHot
, uint32_t yHot
, uint32_t cx
, uint32_t cy
,
544 const void *pvImg
, size_t cbImg
);
545 VBGLR3DECL(int) VbglR3SetPointerShapeReq(struct VMMDevReqMousePointer
*pReq
);
550 /** The folder for the video mode hint unix domain socket on Unix-like guests.
551 * @note This can be safely changed as all users are rebuilt in lock-step. */
552 #define VBGLR3HOSTDISPSOCKETPATH "/tmp/.VBoxService"
553 /** The path to the video mode hint unix domain socket on Unix-like guests. */
554 #define VBGLR3HOSTDISPSOCKET VBGLR3VIDEOMODEHINTSOCKETPATH "/VideoModeHint"
556 /** The folder for saving video mode hints to between sessions. */
557 #define VBGLR3HOSTDISPSAVEDMODEPATH "/var/lib/VBoxGuestAdditions"
558 /** The path to the file for saving video mode hints to between sessions. */
559 #define VBGLR3HOSTDISPSAVEDMODE VBGLR3HOSTDISPSAVEDMODEPATH "/SavedVideoModes"
561 VBGLR3DECL(int) VbglR3GetDisplayChangeRequest(uint32_t *pcx
, uint32_t *pcy
, uint32_t *pcBits
, uint32_t *piDisplay
,
562 uint32_t *pdx
, uint32_t *pdy
, bool *pfEnabled
, bool *pfChangeOrigin
, bool fAck
);
563 VBGLR3DECL(bool) VbglR3HostLikesVideoMode(uint32_t cx
, uint32_t cy
, uint32_t cBits
);
564 VBGLR3DECL(int) VbglR3VideoModeGetHighestSavedScreen(unsigned *pcScreen
);
565 VBGLR3DECL(int) VbglR3SaveVideoMode(unsigned cScreen
, unsigned cx
, unsigned cy
, unsigned cBits
,
566 unsigned x
, unsigned y
, bool fEnabled
);
567 VBGLR3DECL(int) VbglR3RetrieveVideoMode(unsigned cScreen
, unsigned *pcx
, unsigned *pcy
, unsigned *pcBits
,
568 unsigned *px
, unsigned *py
, bool *pfEnabled
);
573 VBGLR3DECL(int) VbglR3VrdpGetChangeRequest(bool *pfActive
, uint32_t *puExperienceLevel
);
576 /** @name VM Statistics
578 VBGLR3DECL(int) VbglR3StatQueryInterval(uint32_t *pu32Interval
);
579 # if defined(___VBox_VMMDev_h) || defined(DOXYGEN_RUNNING)
580 VBGLR3DECL(int) VbglR3StatReport(VMMDevReportGuestStats
*pReq
);
584 /** @name Memory ballooning
586 VBGLR3DECL(int) VbglR3MemBalloonRefresh(uint32_t *pcChunks
, bool *pfHandleInR3
);
587 VBGLR3DECL(int) VbglR3MemBalloonChange(void *pv
, bool fInflate
);
592 VBGLR3DECL(int) VbglR3WriteCoreDump(void);
596 # ifdef VBOX_WITH_GUEST_PROPS
597 /** @name Guest properties
600 typedef struct VBGLR3GUESTPROPENUM VBGLR3GUESTPROPENUM
;
602 typedef VBGLR3GUESTPROPENUM
*PVBGLR3GUESTPROPENUM
;
603 VBGLR3DECL(int) VbglR3GuestPropConnect(uint32_t *pidClient
);
604 VBGLR3DECL(int) VbglR3GuestPropDisconnect(HGCMCLIENTID idClient
);
605 VBGLR3DECL(int) VbglR3GuestPropWrite(HGCMCLIENTID idClient
, const char *pszName
, const char *pszValue
, const char *pszFlags
);
606 VBGLR3DECL(int) VbglR3GuestPropWriteValue(HGCMCLIENTID idClient
, const char *pszName
, const char *pszValue
);
607 VBGLR3DECL(int) VbglR3GuestPropWriteValueV(HGCMCLIENTID idClient
, const char *pszName
,
608 const char *pszValueFormat
, va_list va
) RT_IPRT_FORMAT_ATTR(3, 0);
609 VBGLR3DECL(int) VbglR3GuestPropWriteValueF(HGCMCLIENTID idClient
, const char *pszName
,
610 const char *pszValueFormat
, ...) RT_IPRT_FORMAT_ATTR(3, 4);
611 VBGLR3DECL(int) VbglR3GuestPropRead(HGCMCLIENTID idClient
, const char *pszName
, void *pvBuf
, uint32_t cbBuf
, char **ppszValue
,
612 uint64_t *pu64Timestamp
, char **ppszFlags
, uint32_t *pcbBufActual
);
613 VBGLR3DECL(int) VbglR3GuestPropReadValue(uint32_t ClientId
, const char *pszName
, char *pszValue
, uint32_t cchValue
,
614 uint32_t *pcchValueActual
);
615 VBGLR3DECL(int) VbglR3GuestPropReadValueAlloc(HGCMCLIENTID idClient
, const char *pszName
, char **ppszValue
);
616 VBGLR3DECL(void) VbglR3GuestPropReadValueFree(char *pszValue
);
617 VBGLR3DECL(int) VbglR3GuestPropEnumRaw(HGCMCLIENTID idClient
, const char *paszPatterns
, char *pcBuf
, uint32_t cbBuf
,
618 uint32_t *pcbBufActual
);
619 VBGLR3DECL(int) VbglR3GuestPropEnum(HGCMCLIENTID idClient
, char const * const *ppaszPatterns
, uint32_t cPatterns
,
620 PVBGLR3GUESTPROPENUM
*ppHandle
, char const **ppszName
, char const **ppszValue
,
621 uint64_t *pu64Timestamp
, char const **ppszFlags
);
622 VBGLR3DECL(int) VbglR3GuestPropEnumNext(PVBGLR3GUESTPROPENUM pHandle
, char const **ppszName
, char const **ppszValue
,
623 uint64_t *pu64Timestamp
, char const **ppszFlags
);
624 VBGLR3DECL(void) VbglR3GuestPropEnumFree(PVBGLR3GUESTPROPENUM pHandle
);
625 VBGLR3DECL(int) VbglR3GuestPropDelete(HGCMCLIENTID idClient
, const char *pszName
);
626 VBGLR3DECL(int) VbglR3GuestPropDelSet(HGCMCLIENTID idClient
, char const * const *papszPatterns
, uint32_t cPatterns
);
627 VBGLR3DECL(int) VbglR3GuestPropWait(HGCMCLIENTID idClient
, const char *pszPatterns
, void *pvBuf
, uint32_t cbBuf
,
628 uint64_t u64Timestamp
, uint32_t cMillies
, char ** ppszName
, char **ppszValue
,
629 uint64_t *pu64Timestamp
, char **ppszFlags
, uint32_t *pcbBufActual
);
632 /** @name Guest user handling / reporting.
634 VBGLR3DECL(int) VbglR3GuestUserReportState(const char *pszUser
, const char *pszDomain
, VBoxGuestUserState enmState
,
635 uint8_t *pbDetails
, uint32_t cbDetails
);
638 /** @name Host version handling
640 VBGLR3DECL(int) VbglR3HostVersionCheckForUpdate(HGCMCLIENTID idClient
, bool *pfUpdate
, char **ppszHostVersion
,
641 char **ppszGuestVersion
);
642 VBGLR3DECL(int) VbglR3HostVersionLastCheckedLoad(HGCMCLIENTID idClient
, char **ppszVer
);
643 VBGLR3DECL(int) VbglR3HostVersionLastCheckedStore(HGCMCLIENTID idClient
, const char *pszVer
);
645 # endif /* VBOX_WITH_GUEST_PROPS defined */
647 # ifdef VBOX_WITH_SHARED_FOLDERS
648 /** @name Shared folders
651 * Structure containing mapping information for a shared folder.
653 typedef struct VBGLR3SHAREDFOLDERMAPPING
655 /** Mapping status. */
659 } VBGLR3SHAREDFOLDERMAPPING
;
660 /** Pointer to a shared folder mapping information structure. */
661 typedef VBGLR3SHAREDFOLDERMAPPING
*PVBGLR3SHAREDFOLDERMAPPING
;
662 /** Pointer to a const shared folder mapping information structure. */
663 typedef VBGLR3SHAREDFOLDERMAPPING
const *PCVBGLR3SHAREDFOLDERMAPPING
;
665 VBGLR3DECL(int) VbglR3SharedFolderConnect(uint32_t *pidClient
);
666 VBGLR3DECL(int) VbglR3SharedFolderDisconnect(HGCMCLIENTID idClient
);
667 VBGLR3DECL(bool) VbglR3SharedFolderExists(HGCMCLIENTID idClient
, const char *pszShareName
);
668 VBGLR3DECL(int) VbglR3SharedFolderGetMappings(HGCMCLIENTID idClient
, bool fAutoMountOnly
,
669 PVBGLR3SHAREDFOLDERMAPPING
*ppaMappings
, uint32_t *pcMappings
);
670 VBGLR3DECL(void) VbglR3SharedFolderFreeMappings(PVBGLR3SHAREDFOLDERMAPPING paMappings
);
671 VBGLR3DECL(int) VbglR3SharedFolderGetName(HGCMCLIENTID idClient
,uint32_t u32Root
, char **ppszName
);
672 VBGLR3DECL(int) VbglR3SharedFolderGetMountPrefix(char **ppszPrefix
);
673 VBGLR3DECL(int) VbglR3SharedFolderGetMountDir(char **ppszDir
);
675 # endif /* VBOX_WITH_SHARED_FOLDERS defined */
677 # ifdef VBOX_WITH_GUEST_CONTROL
678 /** @name Guest control
682 * Structure containing the context required for
683 * either retrieving or sending a HGCM guest control
684 * commands from or to the host.
686 * Note: Do not change parameter order without also
687 * adapting all structure initializers.
689 typedef struct VBGLR3GUESTCTRLCMDCTX
691 /** @todo This struct could be handy if we want to implement
692 * a second communication channel, e.g. via TCP/IP.
693 * Use a union for the HGCM stuff then. */
695 /** IN: HGCM client ID to use for
698 /** IN/OUT: Context ID to retrieve
701 /** IN: Protocol version to use. */
703 /** OUT: Number of parameters retrieved. */
705 } VBGLR3GUESTCTRLCMDCTX
, *PVBGLR3GUESTCTRLCMDCTX
;
707 /* General message handling on the guest. */
708 VBGLR3DECL(int) VbglR3GuestCtrlConnect(uint32_t *pidClient
);
709 VBGLR3DECL(int) VbglR3GuestCtrlDisconnect(uint32_t idClient
);
710 VBGLR3DECL(int) VbglR3GuestCtrlMsgFilterSet(uint32_t uClientId
, uint32_t uValue
, uint32_t uMaskAdd
, uint32_t uMaskRemove
);
711 VBGLR3DECL(int) VbglR3GuestCtrlMsgFilterUnset(uint32_t uClientId
);
712 VBGLR3DECL(int) VbglR3GuestCtrlMsgReply(PVBGLR3GUESTCTRLCMDCTX pCtx
, int rc
);
713 VBGLR3DECL(int) VbglR3GuestCtrlMsgReplyEx(PVBGLR3GUESTCTRLCMDCTX pCtx
, int rc
, uint32_t uType
,
714 void *pvPayload
, uint32_t cbPayload
);
715 VBGLR3DECL(int) VbglR3GuestCtrlMsgSkip(uint32_t uClientId
);
716 VBGLR3DECL(int) VbglR3GuestCtrlMsgWaitFor(uint32_t uClientId
, uint32_t *puMsg
, uint32_t *puNumParms
);
717 VBGLR3DECL(int) VbglR3GuestCtrlCancelPendingWaits(HGCMCLIENTID idClient
);
718 /* Guest session handling. */
719 VBGLR3DECL(int) VbglR3GuestCtrlSessionClose(PVBGLR3GUESTCTRLCMDCTX pCtx
, uint32_t fFlags
);
720 VBGLR3DECL(int) VbglR3GuestCtrlSessionNotify(PVBGLR3GUESTCTRLCMDCTX pCtx
, uint32_t uType
, uint32_t uResult
);
721 VBGLR3DECL(int) VbglR3GuestCtrlSessionGetOpen(PVBGLR3GUESTCTRLCMDCTX pCtx
, uint32_t *puProtocol
, char *pszUser
, uint32_t cbUser
,
722 char *pszPassword
, uint32_t cbPassword
, char *pszDomain
, uint32_t cbDomain
,
723 uint32_t *pfFlags
, uint32_t *pidSession
);
724 VBGLR3DECL(int) VbglR3GuestCtrlSessionGetClose(PVBGLR3GUESTCTRLCMDCTX pCtx
, uint32_t *pfFlags
, uint32_t *pidSession
);
725 /* Guest path handling. */
726 VBGLR3DECL(int) VbglR3GuestCtrlPathGetRename(PVBGLR3GUESTCTRLCMDCTX pCtx
, char *pszSource
, uint32_t cbSource
, char *pszDest
,
727 uint32_t cbDest
, uint32_t *pfFlags
);
728 /* Guest process execution. */
729 VBGLR3DECL(int) VbglR3GuestCtrlProcGetStart(PVBGLR3GUESTCTRLCMDCTX pCtx
, char *pszCmd
, uint32_t cbCmd
, uint32_t *pfFlags
,
730 char *pszArgs
, uint32_t cbArgs
, uint32_t *puNumArgs
, char *pszEnv
, uint32_t *pcbEnv
,
731 uint32_t *puNumEnvVars
, char *pszUser
, uint32_t cbUser
, char *pszPassword
,
732 uint32_t cbPassword
, uint32_t *puTimeoutMS
, uint32_t *puPriority
,
733 uint64_t *puAffinity
, uint32_t cbAffinity
, uint32_t *pcAffinity
);
734 VBGLR3DECL(int) VbglR3GuestCtrlProcGetTerminate(PVBGLR3GUESTCTRLCMDCTX pCtx
, uint32_t *puPID
);
735 VBGLR3DECL(int) VbglR3GuestCtrlProcGetInput(PVBGLR3GUESTCTRLCMDCTX pCtx
, uint32_t *puPID
, uint32_t *pfFlags
, void *pvData
,
736 uint32_t cbData
, uint32_t *pcbSize
);
737 VBGLR3DECL(int) VbglR3GuestCtrlProcGetOutput(PVBGLR3GUESTCTRLCMDCTX pCtx
, uint32_t *puPID
, uint32_t *puHandle
, uint32_t *pfFlags
);
738 VBGLR3DECL(int) VbglR3GuestCtrlProcGetWaitFor(PVBGLR3GUESTCTRLCMDCTX pCtx
, uint32_t *puPID
, uint32_t *puWaitFlags
,
739 uint32_t *puTimeoutMS
);
740 /* Guest native directory handling. */
741 VBGLR3DECL(int) VbglR3GuestCtrlDirGetRemove(PVBGLR3GUESTCTRLCMDCTX pCtx
, char *pszPath
, uint32_t cbPath
, uint32_t *pfFlags
);
742 /* Guest native file handling. */
743 VBGLR3DECL(int) VbglR3GuestCtrlFileGetOpen(PVBGLR3GUESTCTRLCMDCTX pCtx
, char *pszFileName
, uint32_t cbFileName
, char *pszOpenMode
,
744 uint32_t cbOpenMode
, char *pszDisposition
, uint32_t cbDisposition
, char *pszSharing
,
745 uint32_t cbSharing
, uint32_t *puCreationMode
, uint64_t *puOffset
);
746 VBGLR3DECL(int) VbglR3GuestCtrlFileGetClose(PVBGLR3GUESTCTRLCMDCTX pCtx
, uint32_t *puHandle
);
747 VBGLR3DECL(int) VbglR3GuestCtrlFileGetRead(PVBGLR3GUESTCTRLCMDCTX pCtx
, uint32_t *puHandle
, uint32_t *puToRead
);
748 VBGLR3DECL(int) VbglR3GuestCtrlFileGetReadAt(PVBGLR3GUESTCTRLCMDCTX pCtx
, uint32_t *puHandle
,
749 uint32_t *puToRead
, uint64_t *poffRead
);
750 VBGLR3DECL(int) VbglR3GuestCtrlFileGetWrite(PVBGLR3GUESTCTRLCMDCTX pCtx
, uint32_t *puHandle
,
751 void *pvData
, uint32_t cbData
, uint32_t *pcbActual
);
752 VBGLR3DECL(int) VbglR3GuestCtrlFileGetWriteAt(PVBGLR3GUESTCTRLCMDCTX pCtx
, uint32_t *puHandle
, void *pvData
, uint32_t cbData
,
753 uint32_t *pcbActual
, uint64_t *poffWrite
);
754 VBGLR3DECL(int) VbglR3GuestCtrlFileGetSeek(PVBGLR3GUESTCTRLCMDCTX pCtx
, uint32_t *puHandle
,
755 uint32_t *puSeekMethod
, uint64_t *poffSeek
);
756 VBGLR3DECL(int) VbglR3GuestCtrlFileGetTell(PVBGLR3GUESTCTRLCMDCTX pCtx
, uint32_t *puHandle
);
758 VBGLR3DECL(int) VbglR3GuestCtrlFileCbOpen(PVBGLR3GUESTCTRLCMDCTX pCtx
, uint32_t uRc
, uint32_t uFileHandle
);
759 VBGLR3DECL(int) VbglR3GuestCtrlFileCbClose(PVBGLR3GUESTCTRLCMDCTX pCtx
, uint32_t uRc
);
760 VBGLR3DECL(int) VbglR3GuestCtrlFileCbError(PVBGLR3GUESTCTRLCMDCTX pCtx
, uint32_t uRc
);
761 VBGLR3DECL(int) VbglR3GuestCtrlFileCbRead(PVBGLR3GUESTCTRLCMDCTX pCtx
, uint32_t uRc
, void *pvData
, uint32_t cbData
);
762 VBGLR3DECL(int) VbglR3GuestCtrlFileCbWrite(PVBGLR3GUESTCTRLCMDCTX pCtx
, uint32_t uRc
, uint32_t uWritten
);
763 VBGLR3DECL(int) VbglR3GuestCtrlFileCbSeek(PVBGLR3GUESTCTRLCMDCTX pCtx
, uint32_t uRc
, uint64_t uOffActual
);
764 VBGLR3DECL(int) VbglR3GuestCtrlFileCbTell(PVBGLR3GUESTCTRLCMDCTX pCtx
, uint32_t uRc
, uint64_t uOffActual
);
765 VBGLR3DECL(int) VbglR3GuestCtrlProcCbStatus(PVBGLR3GUESTCTRLCMDCTX pCtx
, uint32_t uPID
, uint32_t uStatus
, uint32_t fFlags
,
766 void *pvData
, uint32_t cbData
);
767 VBGLR3DECL(int) VbglR3GuestCtrlProcCbOutput(PVBGLR3GUESTCTRLCMDCTX pCtx
, uint32_t uPID
, uint32_t uHandle
, uint32_t fFlags
,
768 void *pvData
, uint32_t cbData
);
769 VBGLR3DECL(int) VbglR3GuestCtrlProcCbStatusInput(PVBGLR3GUESTCTRLCMDCTX pCtx
, uint32_t u32PID
, uint32_t uStatus
,
770 uint32_t fFlags
, uint32_t cbWritten
);
773 # endif /* VBOX_WITH_GUEST_CONTROL defined */
775 /** @name Auto-logon handling
777 VBGLR3DECL(int) VbglR3AutoLogonReportStatus(VBoxGuestFacilityStatus enmStatus
);
778 VBGLR3DECL(bool) VbglR3AutoLogonIsRemoteSession(void);
781 /** @name User credentials handling
783 VBGLR3DECL(int) VbglR3CredentialsQueryAvailability(void);
784 VBGLR3DECL(int) VbglR3CredentialsRetrieve(char **ppszUser
, char **ppszPassword
, char **ppszDomain
);
785 VBGLR3DECL(int) VbglR3CredentialsRetrieveUtf16(PRTUTF16
*ppwszUser
, PRTUTF16
*ppwszPassword
, PRTUTF16
*ppwszDomain
);
786 VBGLR3DECL(void) VbglR3CredentialsDestroy(char *pszUser
, char *pszPassword
, char *pszDomain
, uint32_t cPasses
);
787 VBGLR3DECL(void) VbglR3CredentialsDestroyUtf16(PRTUTF16 pwszUser
, PRTUTF16 pwszPassword
, PRTUTF16 pwszDomain
,
791 /** @name CPU hotplug monitor
793 VBGLR3DECL(int) VbglR3CpuHotPlugInit(void);
794 VBGLR3DECL(int) VbglR3CpuHotPlugTerm(void);
795 VBGLR3DECL(int) VbglR3CpuHotPlugWaitForEvent(VMMDevCpuEventType
*penmEventType
, uint32_t *pidCpuCore
, uint32_t *pidCpuPackage
);
798 /** @name Page sharing
800 struct VMMDEVSHAREDREGIONDESC
;
801 VBGLR3DECL(int) VbglR3RegisterSharedModule(char *pszModuleName
, char *pszVersion
, RTGCPTR64 GCBaseAddr
, uint32_t cbModule
,
802 unsigned cRegions
, struct VMMDEVSHAREDREGIONDESC
*pRegions
);
803 VBGLR3DECL(int) VbglR3UnregisterSharedModule(char *pszModuleName
, char *pszVersion
, RTGCPTR64 GCBaseAddr
, uint32_t cbModule
);
804 VBGLR3DECL(int) VbglR3CheckSharedModules(void);
805 VBGLR3DECL(bool) VbglR3PageSharingIsEnabled(void);
806 VBGLR3DECL(int) VbglR3PageIsShared(RTGCPTR pPage
, bool *pfShared
, uint64_t *puPageFlags
);
809 # ifdef VBOX_WITH_DRAG_AND_DROP
810 /** @name Drag and Drop
813 * Structure containing the context required for
814 * either retrieving or sending a HGCM guest drag'n drop
815 * commands from or to the host.
817 * Note: Do not change parameter order without also
818 * adapting all structure initializers.
820 typedef struct VBGLR3GUESTDNDCMDCTX
822 /** @todo This struct could be handy if we want to implement
823 * a second communication channel, e.g. via TCP/IP.
824 * Use a union for the HGCM stuff then. */
826 /** HGCM client ID to use for communication. */
828 /** The VM's current session ID. */
830 /** Protocol version to use. */
832 /** Number of parameters retrieved for the current command. */
834 /** Max chunk size (in bytes) for data transfers. */
835 uint32_t cbMaxChunkSize
;
836 } VBGLR3GUESTDNDCMDCTX
, *PVBGLR3GUESTDNDCMDCTX
;
838 typedef struct VBGLR3DNDHGCMEVENT
840 uint32_t uType
; /** The event type this struct contains. */
841 uint32_t uScreenId
; /** Screen ID this request belongs to. */
842 char *pszFormats
; /** Format list (\r\n separated). */
843 uint32_t cbFormats
; /** Size (in bytes) of pszFormats (\0 included). */
848 uint32_t uXpos
; /** X position of guest screen. */
849 uint32_t uYpos
; /** Y position of guest screen. */
850 uint32_t uDefAction
; /** Proposed DnD action. */
851 uint32_t uAllActions
; /** Allowed DnD actions. */
852 } a
; /** Values used in init, move and drop event type. */
855 void *pvData
; /** Data request. */
856 uint32_t cbData
; /** Size (in bytes) of pvData. */
857 } b
; /** Values used in drop data event type. */
859 } VBGLR3DNDHGCMEVENT
;
860 typedef VBGLR3DNDHGCMEVENT
*PVBGLR3DNDHGCMEVENT
;
861 typedef const PVBGLR3DNDHGCMEVENT CPVBGLR3DNDHGCMEVENT
;
862 VBGLR3DECL(int) VbglR3DnDConnect(PVBGLR3GUESTDNDCMDCTX pCtx
);
863 VBGLR3DECL(int) VbglR3DnDDisconnect(PVBGLR3GUESTDNDCMDCTX pCtx
);
865 VBGLR3DECL(int) VbglR3DnDRecvNextMsg(PVBGLR3GUESTDNDCMDCTX pCtx
, CPVBGLR3DNDHGCMEVENT pEvent
);
867 VBGLR3DECL(int) VbglR3DnDHGSendAckOp(PVBGLR3GUESTDNDCMDCTX pCtx
, uint32_t uAction
);
868 VBGLR3DECL(int) VbglR3DnDHGSendReqData(PVBGLR3GUESTDNDCMDCTX pCtx
, const char *pcszFormat
);
869 VBGLR3DECL(int) VbglR3DnDHGSendProgress(PVBGLR3GUESTDNDCMDCTX pCtx
, uint32_t uStatus
, uint8_t uPercent
, int rcErr
);
870 # ifdef VBOX_WITH_DRAG_AND_DROP_GH
871 VBGLR3DECL(int) VbglR3DnDGHSendAckPending(PVBGLR3GUESTDNDCMDCTX pCtx
, uint32_t uDefAction
, uint32_t uAllActions
, const char* pcszFormats
, uint32_t cbFormats
);
872 VBGLR3DECL(int) VbglR3DnDGHSendData(PVBGLR3GUESTDNDCMDCTX pCtx
, const char *pszFormat
, void *pvData
, uint32_t cbData
);
873 VBGLR3DECL(int) VbglR3DnDGHSendError(PVBGLR3GUESTDNDCMDCTX pCtx
, int rcOp
);
874 # endif /* VBOX_WITH_DRAG_AND_DROP_GH */
876 # endif /* VBOX_WITH_DRAG_AND_DROP */
878 /* Generic Host Channel Service. */
879 VBGLR3DECL(int) VbglR3HostChannelInit(uint32_t *pidClient
);
880 VBGLR3DECL(void) VbglR3HostChannelTerm(uint32_t idClient
);
881 VBGLR3DECL(int) VbglR3HostChannelAttach(uint32_t *pu32ChannelHandle
, uint32_t u32HGCMClientId
,
882 const char *pszName
, uint32_t u32Flags
);
883 VBGLR3DECL(void) VbglR3HostChannelDetach(uint32_t u32ChannelHandle
, uint32_t u32HGCMClientId
);
884 VBGLR3DECL(int) VbglR3HostChannelSend(uint32_t u32ChannelHandle
, uint32_t u32HGCMClientId
,
885 void *pvData
, uint32_t cbData
);
886 VBGLR3DECL(int) VbglR3HostChannelRecv(uint32_t u32ChannelHandle
, uint32_t u32HGCMClientId
,
887 void *pvData
, uint32_t cbData
,
888 uint32_t *pu32SizeReceived
, uint32_t *pu32SizeRemaining
);
889 VBGLR3DECL(int) VbglR3HostChannelControl(uint32_t u32ChannelHandle
, uint32_t u32HGCMClientId
,
890 uint32_t u32Code
, void *pvParm
, uint32_t cbParm
,
891 void *pvData
, uint32_t cbData
, uint32_t *pu32SizeDataReturned
);
892 VBGLR3DECL(int) VbglR3HostChannelEventWait(uint32_t *pu32ChannelHandle
, uint32_t u32HGCMClientId
,
893 uint32_t *pu32EventId
, void *pvParm
, uint32_t cbParm
,
894 uint32_t *pu32SizeReturned
);
895 VBGLR3DECL(int) VbglR3HostChannelEventCancel(uint32_t u32ChannelHandle
, uint32_t u32HGCMClientId
);
896 VBGLR3DECL(int) VbglR3HostChannelQuery(const char *pszName
, uint32_t u32HGCMClientId
, uint32_t u32Code
,
897 void *pvParm
, uint32_t cbParm
, void *pvData
, uint32_t cbData
,
898 uint32_t *pu32SizeDataReturned
);
900 /** @name Mode hint storage
902 VBGLR3DECL(int) VbglR3ReadVideoMode(unsigned cDisplay
, unsigned *cx
,
903 unsigned *cy
, unsigned *cBPP
, unsigned *x
,
904 unsigned *y
, unsigned *fEnabled
);
905 VBGLR3DECL(int) VbglR3WriteVideoMode(unsigned cDisplay
, unsigned cx
,
906 unsigned cy
, unsigned cBPP
, unsigned x
,
907 unsigned y
, unsigned fEnabled
);
910 /** @name Generic HGCM
912 VBGLR3DECL(int) VbglR3HGCMConnect(const char *pszServiceName
, HGCMCLIENTID
*pidClient
);
913 VBGLR3DECL(int) VbglR3HGCMDisconnect(HGCMCLIENTID idClient
);
914 struct VBGLIOCHGCMCALL
;
915 VBGLR3DECL(int) VbglR3HGCMCall(struct VBGLIOCHGCMCALL
*pInfo
, size_t cbInfo
);
918 #endif /* IN_RING3 */