Changeset 76067 in vbox
- Timestamp:
- Dec 8, 2018 12:54:36 AM (6 years ago)
- svn:sync-xref-src-repo-rev:
- 127307
- Location:
- trunk/src/VBox/Main
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Main/Makefile.kmk
r76064 r76067 306 306 VBoxSDS_INCS = \ 307 307 include \ 308 $(VBoxSDS_0_OUTDIR) \ 309 $(VBOX_MAIN_APIWRAPPER_INCS) 308 $(VBoxSDS_0_OUTDIR) 310 309 VBoxSDS_INCS.win = \ 311 310 $(VBoxCOM_0_OUTDIR) 312 VBoxSDS_LIBS += \313 $(PATH_STAGE_LIB)/VBoxAPIWrap$(VBOX_SUFF_LIB)314 311 VBoxSDS_INTERMEDIATES = \ 315 $(VBOX_MAIN_PREREQS) \ 316 $(VBOX_MAIN_APIWRAPPER_GEN_HDRS) 312 $(VBOX_MAIN_PREREQS) 317 313 VBoxSDS_SOURCES = \ 318 src-all/Global.cpp \319 src-all/AutoCaller.cpp \320 src-all/VirtualBoxBase.cpp \321 src-all/VirtualBoxErrorInfoImpl.cpp \322 314 src-global/VirtualBoxSDSImpl.cpp 323 315 VBoxSDS_SOURCES.win = \ 324 src-global/win/VirtualBoxClientListImpl.cpp \325 316 src-global/win/VBoxSDS.cpp \ 326 317 src-global/win/VBoxSDS.rc … … 1208 1199 $(PATH_SUB_CURRENT)/src-all/win/VBoxProxyStub.def \ 1209 1200 $(PATH_SUB_CURRENT)/src-all/win/VBoxProxyStub.rc \ 1210 $(PATH_SUB_CURRENT)/src-all/win/RpcChannelHook.cpp \1211 1201 $(PATH_SUB_CURRENT)/src-all/win/VBoxProxyStub.c 1202 # $(PATH_SUB_CURRENT)/src-all/win/RpcChannelHook.cpp 1212 1203 src-all/win/VBoxProxyStub.rc_DEPS = $(VBoxCOM_0_OUTDIR)/VirtualBox.tlb 1213 1204 VBoxProxyStub_VirtualBox_p.c_CFLAGS.x86 = /Gz # Workaround for incorrect ObjectStublessClient* prototypes in SDK v7.1. … … 1224 1215 src-all/win/VBoxProxyStub.def \ 1225 1216 src-all/win/VBoxProxyStubLegacy.rc \ 1226 src-all/win/RpcChannelHook.cpp \1227 1217 src-all/win/VBoxProxyStub.c 1218 # src-all/win/RpcChannelHook.cpp 1228 1219 src-all/win/VBoxProxyStubLegacy.rc_DEPS = $(VBoxCOM_0_OUTDIR)/legacy/VirtualBox.tlb 1229 1220 … … 1240 1231 src-all/win/VBoxProxyStub.c \ 1241 1232 src-all/win/VBoxProxyStub-x86.rc \ 1242 src-all/win/RpcChannelHook.cpp \1243 1233 src-all/win/VBoxProxyStub.def 1234 # src-all/win/RpcChannelHook.cpp 1244 1235 src-all/win/VBoxProxyStub-x86.rc_DEPS = $(VBoxCOM-x86_0_OUTDIR)/VirtualBox-x86.tlb 1245 1236 endif -
trunk/src/VBox/Main/idl/VirtualBox.xidl
r75926 r76067 25769 25769 </application> 25770 25770 25771 <if target="midl"> 25771 25772 <!-- Pay attention! Application uuid of this application is used in midl.xsl 25772 25773 So if you change it then change filter in "interface" and "class" template in midl.xsl too … … 25777 25778 supportsErrorInfo="yes" 25778 25779 > 25779 25780 <if target="midl">25781 25780 25782 25781 <!-- … … 25819 25818 <interface 25820 25819 name="IVirtualBoxSDS" extends="$unknown" notdual="yes" 25821 uuid=" 787d20ed-faf3-4170-6697-3a2a7de6e086"25820 uuid="152265b8-fe7d-4077-9dd6-032bc3f1c5a3" 25822 25821 wsmap="suppress" internal="yes" 25823 25822 reservedMethods="0" reservedAttributes="0" … … 25857 25856 </method> 25858 25857 25859 <method name="notifyClientsFinished">25860 <desc>Notify SDS that clients finished.</desc>25861 </method>25862 25863 25858 </interface> 25864 25865 <!--25866 // IVirtualBoxClientList25867 //////////////////////////////////////////////////////////////////////////25868 -->25869 25870 <interface25871 name="IVirtualBoxClientList" extends="$unknown"25872 uuid="6e7f09c9-da13-4126-9cc8-9aab81fed413"25873 wsmap="suppress"25874 reservedMethods="2" reservedAttributes="2"25875 >25876 <desc>25877 The IVirtualBoxClientList interface represents a list of VirtualBox API clients.25878 </desc>25879 25880 <method name="registerClient">25881 <desc>Register VirtualBox API Client.</desc>25882 <param name="pid" type="long" dir="in">25883 <desc>Process ID of VirtualBox API client.</desc>25884 </param>25885 </method>25886 25887 <attribute name="clients" readonly="yes" type="long" dir="out" safearray="yes">25888 <desc>List of registered VirtualBox API clients.</desc>25889 </attribute>25890 25891 </interface>25892 25893 </if> <!-- bird: shouldn't this if-element at leat include the VBoxSDS module, if not the whole system service application? -->25894 25859 25895 25860 <!-- Warning: the name of module should coincide with real windows service name. … … 25907 25872 <interface name="IVirtualBoxSDS" default="yes"/> 25908 25873 </class> 25909 <class name="VirtualBoxClientList" uuid="b2313c29-07eb-4613-ab27-f86bda7a0cae" namespace="virtualbox.org" >25910 <interface name="IVirtualBoxClientList" default="yes" />25911 </class>25912 25874 </module> 25913 25875 </application> 25876 </if> 25914 25877 25915 25878 </library> -
trunk/src/VBox/Main/idl/midl.xsl
r69770 r76067 127 127 <xsl:text>
</xsl:text> 128 128 <!-- forward declarations --> 129 <xsl:apply-templates select=" application/if |application/interface" mode="forward"/>129 <xsl:apply-templates select="descendant::application/if | descendant::application/interface" mode="forward"/> 130 130 <xsl:text>
</xsl:text> 131 131 <!-- all enums go first --> 132 <xsl:apply-templates select=" application/enum |application/if[enum]"/>132 <xsl:apply-templates select="descendant::application/enum | descendant::application/if[enum]"/> 133 133 <!-- declare the interfaces --> 134 <xsl:apply-templates select=" application/if |application/interface"/>134 <xsl:apply-templates select="descendant::application/if | descendant::application/interface"/> 135 135 </xsl:if> 136 136 … … 153 153 <xsl:when test="$g_fGenProxy = 'yes'"> 154 154 <!-- reference enums and interfaces --> 155 <xsl:apply-templates select=" application/if |application/interface" mode="forward"/>156 <xsl:apply-templates select=" application/enum |application/if[enum]" mode="forward"/>155 <xsl:apply-templates select="descendant::application/if | descendant::application/interface" mode="forward"/> 156 <xsl:apply-templates select="descendant::application/enum | descendant::application/if[enum]" mode="forward"/> 157 157 <!-- the modules (i.e. everything else) --> 158 <xsl:apply-templates select=" application/module |application/if[module]"/>158 <xsl:apply-templates select="descendant::application/module | descendant::application/if[module]"/> 159 159 </xsl:when> 160 160 <xsl:otherwise> 161 161 <!-- forward declarations --> 162 <xsl:apply-templates select=" application/if |application/interface" mode="forward"/>162 <xsl:apply-templates select="descendant::application/if | descendant::application/interface" mode="forward"/> 163 163 <!-- all enums go first --> 164 <xsl:apply-templates select=" application/enum |application/if[enum]"/>164 <xsl:apply-templates select="descendant::application/enum | descendant::application/if[enum]"/> 165 165 <!-- everything else but result codes and enums --> 166 <xsl:apply-templates select=" application/interface |application/if[interface]167 | application/module |application/if[module]"/>166 <xsl:apply-templates select=" descendant::application/interface | descendant::application/if[interface] 167 | descendant::application/module | descendant::application/if[module]"/> 168 168 </xsl:otherwise> 169 169 </xsl:choose> … … 857 857 <!-- enum types --> 858 858 <xsl:when test=" 859 (ancestor::library/application/enum[@name=current()]) or 860 (ancestor::library/application/if[@target=$self_target]/enum[@name=current()]) 859 (ancestor::library/application/enum[@name=current()]) 860 or (ancestor::library/if/application/enum[@name=current()]) 861 or (ancestor::library/application/if[@target=$self_target]/enum[@name=current()]) 862 or (ancestor::library/if/application/if[@target=$self_target]/enum[@name=current()]) 861 863 "> 862 864 <xsl:value-of select="."/> … … 864 866 <!-- custom interface types --> 865 867 <xsl:when test=" 866 ((ancestor::library/application/interface[@name=current()]) or 867 (ancestor::library/application/if[@target=$self_target]/interface[@name=current()]) 868 ( (ancestor::library/application/interface[@name=current()]) 869 or (ancestor::library/if/application/interface[@name=current()]) 870 or (ancestor::library/application/if[@target=$self_target]/interface[@name=current()]) 871 or (ancestor::library/if/application/if[@target=$self_target]/interface[@name=current()]) 868 872 ) 869 873 "> … … 887 891 <!-- Filters for switch on/off VBoxSDS definitions --> 888 892 889 <xsl:template match=" application[@uuid='ec0e78e8-fa43-43e8-ac0a-02c784c4a4fa']//module/class" >893 <xsl:template match="if[@target='midl']/application[@uuid='ec0e78e8-fa43-43e8-ac0a-02c784c4a4fa']//module/class" > 890 894 <xsl:if test="$g_fVBoxWithSDS='yes'" > 891 895 <xsl:call-template name="template_class" /> … … 893 897 </xsl:template> 894 898 895 <xsl:template match=" application[@uuid='ec0e78e8-fa43-43e8-ac0a-02c784c4a4fa']/if//interface899 <xsl:template match="if[@target='midl']/application[@uuid='ec0e78e8-fa43-43e8-ac0a-02c784c4a4fa']/if//interface 896 900 | application[@uuid='ec0e78e8-fa43-43e8-ac0a-02c784c4a4fa']//interface" > 897 901 <xsl:if test="$g_fVBoxWithSDS='yes'" > … … 900 904 </xsl:template> 901 905 902 <xsl:template match=" application[@uuid='ec0e78e8-fa43-43e8-ac0a-02c784c4a4fa']//interface" mode="forward" >906 <xsl:template match="if[@target='midl']/application[@uuid='ec0e78e8-fa43-43e8-ac0a-02c784c4a4fa']//interface" mode="forward" > 903 907 <xsl:if test="$g_fVBoxWithSDS='yes'" > 904 908 <xsl:call-template name="template_interface_forward" /> -
trunk/src/VBox/Main/include/RpcChannelHook.h
r71716 r76067 1 1 /* $Id$ */ 2 2 /** @file 3 * VBox COM Rpc Channel Hook definition 4 */3 * VirtualBox Main - RPC Channel Hook Hack, VBoxProxyStub. 4 */ 5 5 6 6 /* … … 21 21 #include <iprt/cdefs.h> 22 22 23 #ifdef RT_OS_WINDOWS 23 #ifndef RT_OS_WINDOWS 24 # error "Oops" 25 #endif 26 24 27 #include <iprt/win/windows.h> 25 28 #include <ObjIdl.h> 26 29 27 30 28 typedef void *PRPC_CHANNEL_HOOK; 31 RT_C_DECLS_BEGIN 29 32 30 / / {CEDA3E95-A46A-4C41-AA01-EFFD856E455C}33 /* {CEDA3E95-A46A-4C41-AA01-EFFD856E455C} */ 31 34 static const GUID RPC_CHANNEL_EXTENSION_GUID = 32 35 { 0xceda3e95, 0xa46a, 0x4c41,{ 0xaa, 0x1, 0xef, 0xfd, 0x85, 0x6e, 0x45, 0x5c } }; 33 36 34 RT_C_DECLS_BEGIN 35 // C wrapper for using in proxy 37 /** C wrapper for using in proxy (C code). */ 36 38 void SetupClientRpcChannelHook(void); 39 37 40 RT_C_DECLS_END 38 41 39 42 40 #if defined(__cplusplus)43 #ifdef __cplusplus 41 44 42 /* 43 * This is RPC channel hook implementation for registering VirtualBox API clients. 44 * This channel hook instantiated in COM client process by VBoxProxyStub 45 * We use it to catch a moment when a new VirtualBox object sucessfully instantiated to 46 * register new API client in a VBoxSDS clients list. 47 */ 45 /** 46 * This is RPC channel hook implementation for registering VirtualBox API clients. 47 * 48 * This channel hook instantiated in COM client process by VBoxProxyStub 49 * We use it to catch a moment when a new VirtualBox object sucessfully instantiated to 50 * register new API client in a VBoxSDS clients list. 51 */ 48 52 class CRpcChannelHook : public IChannelHook 49 53 { … … 52 56 53 57 /* IUnknown Interface methods */ 54 STDMETHOD IMP QueryInterface(REFIID riid, void **ppv);55 STDMETHOD IMP_(ULONG) AddRef(void);56 STDMETHOD IMP_(ULONG) Release(void);58 STDMETHOD(QueryInterface)(REFIID riid, void **ppv); 59 STDMETHOD_(ULONG, AddRef)(void); 60 STDMETHOD_(ULONG, Release)(void); 57 61 58 62 /* IChannelHook Interface methods */ 59 STDMETHOD IMP_(void) ClientGetSize(REFGUID uExtent, REFIID riid, ULONG *pDataSize);60 STDMETHOD IMP_(void) ClientFillBuffer(REFGUID uExtent, REFIID riid, ULONG *pDataSize, void *pDataBuffer);61 STDMETHOD IMP_(void) ClientNotify(REFGUID uExtent, REFIID riid, ULONG cbDataSize, void *pDataBuffer, DWORD lDataRep, HRESULT hrFault);63 STDMETHOD_(void, ClientGetSize)(REFGUID uExtent, REFIID riid, ULONG *pDataSize); 64 STDMETHOD_(void, ClientFillBuffer)(REFGUID uExtent, REFIID riid, ULONG *pDataSize, void *pDataBuffer); 65 STDMETHOD_(void, ClientNotify)(REFGUID uExtent, REFIID riid, ULONG cbDataSize, void *pDataBuffer, DWORD lDataRep, HRESULT hrFault); 62 66 63 STDMETHOD IMP_(void) ServerNotify(REFGUID uExtent, REFIID riid, ULONG cbDataSize, void *pDataBuffer, DWORD lDataRep);64 STDMETHOD IMP_(void) ServerGetSize(REFGUID uExtent, REFIID riid, HRESULT hrFault, ULONG *pDataSize);65 STDMETHOD IMP_(void) ServerFillBuffer(REFGUID uExtent, REFIID riid, ULONG *pDataSize, void *pDataBuffer, HRESULT hrFault);67 STDMETHOD_(void, ServerNotify)(REFGUID uExtent, REFIID riid, ULONG cbDataSize, void *pDataBuffer, DWORD lDataRep); 68 STDMETHOD_(void, ServerGetSize)(REFGUID uExtent, REFIID riid, HRESULT hrFault, ULONG *pDataSize); 69 STDMETHOD_(void, ServerFillBuffer)(REFGUID uExtent, REFIID riid, ULONG *pDataSize, void *pDataBuffer, HRESULT hrFault); 66 70 67 71 protected: … … 70 74 71 75 protected: 72 const GUID m_ChannelHookID;73 static volatile bool s_fChannelRegistered;74 static volatile bool s_fVBpoxSDSCalledOnce;75 static CRpcChannelHook s_RpcChannelHook;76 const GUID m_ChannelHookID; 77 static volatile bool s_fChannelRegistered; 78 static volatile bool s_fVBpoxSDSCalledOnce; 79 static CRpcChannelHook s_RpcChannelHook; 76 80 77 81 /* C wrapper*/ … … 79 83 }; 80 84 85 #endif /* __cplusplus */ 81 86 82 #endif // #if defined(__cplusplus) 83 84 85 #endif // #ifdef RT_OS_WINDOWS 86 87 #endif // ____H_RPCCHANNELHOOK 87 #endif -
trunk/src/VBox/Main/include/VirtualBoxSDSImpl.h
r76066 r76067 75 75 STDMETHOD(RegisterVBoxSVC)(IVBoxSVCRegistration *aVBoxSVC, LONG aPid, IUnknown **aExistingVirtualBox); 76 76 STDMETHOD(DeregisterVBoxSVC)(IVBoxSVCRegistration *aVBoxSVC, LONG aPid); 77 STDMETHOD(NotifyClientsFinished)(); /**< @todo r=bird: Internal within SDS! Make private. */78 77 /** @} */ 79 78 -
trunk/src/VBox/Main/src-all/win/RpcChannelHook.cpp
r73919 r76067 1 1 /* $Id$ */ 2 2 /** @file 3 * VBox Global COM Class implementation.4 */3 * VirtualBox Main - RPC Channel Hook Hack, VBoxProxyStub. 4 */ 5 5 6 6 /* … … 17 17 18 18 19 #include <iprt\assert.h> 20 #include <iprt\process.h> 21 #include <iprt\string.h> 19 /********************************************************************************************************************************* 20 * Header Files * 21 *********************************************************************************************************************************/ 22 #include <iprt/assert.h> 23 #include <iprt/process.h> 24 #include <iprt/string.h> 22 25 #include <iprt/asm.h> 23 26 #include "Logging.h" 24 27 #include <VBox/com/VirtualBox.h> 25 28 26 #include <string>27 28 29 #include "VirtualBox.h" 29 30 #include "RpcChannelHook.h" 31 30 32 31 33 #if defined(RT_OS_WINDOWS) && defined(VBOX_WITH_SDS) … … 43 45 { 44 46 if (riid == IID_IUnknown) 45 { 46 *ppv = (IUnknown*)this; 47 } 47 *ppv = (IUnknown *)this; 48 48 else if (riid == IID_IChannelHook) 49 { 50 *ppv = (IChannelHook*)this; 51 } 49 *ppv = (IChannelHook *)this; 52 50 else 53 51 { 54 *ppv = 0;52 *ppv = NULL; 55 53 return E_NOINTERFACE; 56 54 } 55 57 56 this->AddRef(); 58 57 return S_OK; -
trunk/src/VBox/Main/src-all/win/VBoxProxyStub.c
r71717 r76067 1357 1357 &LIBID_VirtualBox, "LocalServer32", pwszVBoxDir, pszSdsExe, NULL /*N/A*/); 1358 1358 1359 # if 0 1359 1360 VbpsRegisterClassName(pState, "VirtualBox.VirtualBoxClientList.1", "VirtualBoxClientList Class", &CLSID_VirtualBoxClientList, NULL); 1360 1361 VbpsRegisterClassName(pState, "VirtualBox.VirtualBoxClientList", "VirtualBoxClientList Class", &CLSID_VirtualBoxClientList, ".1"); 1361 1362 VbpsRegisterClassId(pState, &CLSID_VirtualBoxClientList, "VirtualBoxClientList Class", pszSdsAppId, "VirtualBox.VirtualBoxClientList", ".1", 1362 1363 &LIBID_VirtualBox, "LocalServer32", pwszVBoxDir, pszSdsExe, NULL /*N/A*/); 1364 # endif 1363 1365 #endif 1364 1366 } -
trunk/src/VBox/Main/src-global/VirtualBoxSDSImpl.cpp
r76066 r76067 53 53 * This is NULL if not set. */ 54 54 ComPtr<IVBoxSVCRegistration> m_ptrTheChosenOne; 55 ComPtr<IVirtualBoxClientList> m_ptrClientList;56 55 private: 57 56 /** Reference count to make destruction safe wrt hung callers. … … 184 183 LogRel(("VirtualBoxSDS::registerVBoxSVC: Seems VBoxSVC instance died. Dropping it and letting caller take over. (hrc=%Rhrc)\n", hrc)); 185 184 pUserData->m_ptrTheChosenOne.setNull(); 186 187 /* Release the client list and stop client list watcher thread*/188 pUserData->m_ptrClientList.setNull();189 185 } 190 186 } … … 194 190 /* 195 191 * Is the caller the chosen one? 196 * The chosen one always have a client list object for monitoring purposes.197 192 */ 198 193 if (pUserData->m_ptrTheChosenOne.isNull()) … … 200 195 LogRel(("VirtualBoxSDS::registerVBoxSVC: Making aPid=%u (%#x) the chosen one for user %s (%s)!\n", 201 196 aPid, aPid, pUserData->m_strUserSid.c_str(), pUserData->m_strUsername.c_str())); 202 try 203 { 204 /// @todo r=bird: Enable when design has been corrected. 205 ///hrc = pUserData->m_ptrClientList.createLocalObject(CLSID_VirtualBoxClientList); 206 hrc = S_OK; 207 if (SUCCEEDED(hrc)) 208 { 209 LogFunc(("Created API client list instance in VBoxSDS: hrc=%Rhrc\n", hrc)); 210 pUserData->m_ptrTheChosenOne = aVBoxSVC; 211 } 212 else 213 LogRel(("VirtualBoxSDS::registerVBoxSVC: Error in creating API client list instance: hrc=%Rhrc\n", hrc)); 214 } 215 catch (...) 216 { 217 LogRel(("VirtualBoxSDS::registerVBoxSVC: Unexpected exception setting the chosen one!\n")); 218 hrc = E_UNEXPECTED; 219 } 197 pUserData->m_ptrTheChosenOne = aVBoxSVC; 220 198 } 221 199 … … 255 233 pUserData->m_strUserSid.c_str(), pUserData->m_strUsername.c_str())); 256 234 pUserData->m_ptrTheChosenOne.setNull(); 257 /* Release the client list and stop client list watcher thread*/258 pUserData->m_ptrClientList.setNull();259 235 } 260 236 else … … 283 259 284 260 285 STDMETHODIMP VirtualBoxSDS::NotifyClientsFinished() 286 { 287 LogRelFlowThisFuncEnter(); 288 289 int vrc = RTCritSectRwEnterShared(&m_MapCritSect); 290 if (RT_SUCCESS(vrc)) 291 { 292 /** @todo r=bird: Why notify all VBoxSVC instances? That makes zero sense! */ 293 for (UserDataMap_T::iterator it = m_UserDataMap.begin(); it != m_UserDataMap.end(); ++it) 294 { 295 VBoxSDSPerUserData *pUserData = it->second; 296 if (pUserData && pUserData->m_ptrTheChosenOne) 297 { 298 /* 299 * Notify VBoxSVC about finishing all API clients it should free 300 * references to VBoxSDS and clean up itself 301 */ 302 LogRelFunc(("Notify VBoxSVC that all clients finished\n")); 303 if (pUserData->m_ptrClientList.isNotNull()) 304 pUserData->m_ptrClientList.setNull(); 305 306 pUserData->m_ptrTheChosenOne->NotifyClientsFinished(); 307 } 308 } 309 RTCritSectRwLeaveShared(&m_MapCritSect); 310 } 311 312 LogRelFlowThisFuncLeave(); 313 return S_OK; 314 } 315 316 // private methods 317 /////////////////////////////////////////////////////////////////////////////// 261 /********************************************************************************************************************************* 262 * Internal Methods * 263 *********************************************************************************************************************************/ 318 264 319 265 /*static*/ bool VirtualBoxSDS::i_getClientUserSid(com::Utf8Str *a_pStrSid, com::Utf8Str *a_pStrUsername) -
trunk/src/VBox/Main/src-global/win/VBoxSDS.cpp
r76065 r76067 87 87 88 88 #include "VirtualBoxSDSImpl.h" 89 #include "VirtualBoxClientListImpl.h"90 89 #include "Logging.h" 91 90 … … 926 925 BEGIN_OBJECT_MAP(s_aObjectMap) 927 926 OBJECT_ENTRY(CLSID_VirtualBoxSDS, VirtualBoxSDS) 928 OBJECT_ENTRY(CLSID_VirtualBoxClientList, VirtualBoxClientList)929 927 END_OBJECT_MAP() 930 928 hrcExit = pServiceModule->init(s_aObjectMap, hInstance, &LIBID_VirtualBox, -
trunk/src/VBox/Main/src-server/win/svcmain.cpp
r76066 r76067 98 98 99 99 100 #if def VBOX_WITH_SDS100 #if 0 //def VBOX_WITH_SDS 101 101 102 102 BOOL CALLBACK CloseWindowProc(_In_ HWND hWnd, _In_ LPARAM /* lParam */) … … 691 691 g_pModule->bActivity, g_pModule->GetLockCount())); 692 692 693 #if def VBOX_WITH_SDS693 #if 0 //def VBOX_WITH_SDS 694 694 // On Windows 7 our clients doesn't receive right sequence of Session End events 695 695 // So we send them all WM_QUIT to forcible close them.
Note:
See TracChangeset
for help on using the changeset viewer.