VirtualBox

source: vbox/trunk/src/VBox/Frontends/VBoxBFE/HGCMObjects.h@ 5999

最後變更 在這個檔案從5999是 5999,由 vboxsync 提交於 17 年 前

The Giant CDDL Dual-License Header Change.

  • 屬性 svn:eol-style 設為 native
  • 屬性 svn:keywords 設為 Author Date Id Revision
檔案大小: 2.2 KB
 
1/** @file
2 *
3 * HGCMObjects - Host-Guest Communication Manager objects header.
4 */
5
6/*
7 * Copyright (C) 2006-2007 innotek GmbH
8 *
9 * innotek GmbH confidential
10 * All rights reserved
11 */
12
13#ifndef __HGCMOBJECTS__H
14#define __HGCMOBJECTS__H
15
16#define LOG_GROUP_MAIN_OVERRIDE LOG_GROUP_HGCM
17#include "Logging.h"
18
19#include <iprt/assert.h>
20#include <iprt/avl.h>
21#include <iprt/critsect.h>
22#include <iprt/asm.h>
23
24class HGCMObject;
25
26typedef struct _ObjectAVLCore
27{
28 AVLULNODECORE AvlCore;
29 HGCMObject *pSelf;
30} ObjectAVLCore;
31
32typedef enum
33{
34 HGCMOBJ_CLIENT,
35 HGCMOBJ_THREAD,
36 HGCMOBJ_MSG,
37 HGCMOBJ_SizeHack = 0x7fffffff
38} HGCMOBJ_TYPE;
39
40class HGCMObject
41{
42 private:
43 friend uint32_t hgcmObjMake (HGCMObject *pObject, uint32_t u32HandleIn);
44
45 int32_t volatile cRef;
46 HGCMOBJ_TYPE enmObjType;
47
48 ObjectAVLCore Core;
49
50 protected:
51 virtual ~HGCMObject (void) {};
52
53 public:
54 HGCMObject (HGCMOBJ_TYPE enmObjType) : cRef (0)
55 {
56 this->enmObjType = enmObjType;
57 };
58
59 void Reference (void)
60 {
61 int32_t refCnt = ASMAtomicIncS32 (&cRef);
62 NOREF(refCnt);
63 Log(("Reference: refCnt = %d\n", refCnt));
64 }
65
66 void Dereference (void)
67 {
68 int32_t refCnt = ASMAtomicDecS32 (&cRef);
69
70 Log(("Dereference: refCnt = %d\n", refCnt));
71
72 AssertRelease(refCnt >= 0);
73
74 if (refCnt)
75 {
76 return;
77 }
78
79 delete this;
80 }
81
82 uint32_t Handle (void)
83 {
84 return Core.AvlCore.Key;
85 };
86
87 HGCMOBJ_TYPE Type (void)
88 {
89 return enmObjType;
90 };
91};
92
93int hgcmObjInit (void);
94
95void hgcmObjUninit (void);
96
97uint32_t hgcmObjGenerateHandle (HGCMObject *pObject);
98uint32_t hgcmObjAssignHandle (HGCMObject *pObject, uint32_t u32Handle);
99
100void hgcmObjDeleteHandle (uint32_t handle);
101
102HGCMObject *hgcmObjReference (uint32_t handle, HGCMOBJ_TYPE enmObjType);
103
104void hgcmObjDereference (HGCMObject *pObject);
105
106uint32_t hgcmObjQueryHandleCount ();
107void hgcmObjSetHandleCount (uint32_t u32HandleCount);
108
109#endif /* __HGCMOBJECTS__H */
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette