From f215e02bf85f68d3a6106c2a1f4f7f063f819064 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Thu, 11 Apr 2024 10:17:27 +0200 Subject: Adding upstream version 7.0.14-dfsg. Signed-off-by: Daniel Baumann --- src/VBox/Main/src-client/win/Makefile.kup | 0 src/VBox/Main/src-client/win/VBoxC.def | 37 +++++ src/VBox/Main/src-client/win/VBoxC.rc | 72 ++++++++++ src/VBox/Main/src-client/win/VBoxClient-x86.def | 36 +++++ src/VBox/Main/src-client/win/VBoxClient-x86.rc | 73 ++++++++++ src/VBox/Main/src-client/win/dllmain.cpp | 176 ++++++++++++++++++++++++ src/VBox/Main/src-client/win/precomp_vcc.h | 49 +++++++ 7 files changed, 443 insertions(+) create mode 100644 src/VBox/Main/src-client/win/Makefile.kup create mode 100644 src/VBox/Main/src-client/win/VBoxC.def create mode 100644 src/VBox/Main/src-client/win/VBoxC.rc create mode 100644 src/VBox/Main/src-client/win/VBoxClient-x86.def create mode 100644 src/VBox/Main/src-client/win/VBoxClient-x86.rc create mode 100644 src/VBox/Main/src-client/win/dllmain.cpp create mode 100644 src/VBox/Main/src-client/win/precomp_vcc.h (limited to 'src/VBox/Main/src-client/win') diff --git a/src/VBox/Main/src-client/win/Makefile.kup b/src/VBox/Main/src-client/win/Makefile.kup new file mode 100644 index 00000000..e69de29b diff --git a/src/VBox/Main/src-client/win/VBoxC.def b/src/VBox/Main/src-client/win/VBoxC.def new file mode 100644 index 00000000..a5aabf2a --- /dev/null +++ b/src/VBox/Main/src-client/win/VBoxC.def @@ -0,0 +1,37 @@ +;; @file +; +; VBoxC DLL Definition File. +; + +; +; Copyright (C) 2006-2023 Oracle and/or its affiliates. +; +; This file is part of VirtualBox base platform packages, as +; available from https://www.virtualbox.org. +; +; This program is free software; you can redistribute it and/or +; modify it under the terms of the GNU General Public License +; as published by the Free Software Foundation, in version 3 of the +; License. +; +; This program is distributed in the hope that it will be useful, but +; WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +; General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this program; if not, see . +; +; SPDX-License-Identifier: GPL-3.0-only +; + +LIBRARY VBoxC.dll + +EXPORTS + ; COM entry points + DllGetClassObject PRIVATE + DllCanUnloadNow PRIVATE + DllRegisterServer PRIVATE + DllUnregisterServer PRIVATE + ; private entry points + VBoxDriversRegister PRIVATE diff --git a/src/VBox/Main/src-client/win/VBoxC.rc b/src/VBox/Main/src-client/win/VBoxC.rc new file mode 100644 index 00000000..2cb362e0 --- /dev/null +++ b/src/VBox/Main/src-client/win/VBoxC.rc @@ -0,0 +1,72 @@ +/* $Id: VBoxC.rc $ */ +/** @file + * VBoxC - Resource file containing version info and icon. + */ + +/* + * Copyright (C) 2006-2023 Oracle and/or its affiliates. + * + * This file is part of VirtualBox base platform packages, as + * available from https://www.virtualbox.org. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, in version 3 of the + * License. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + * + * SPDX-License-Identifier: GPL-3.0-only + */ + +#include +#include + +#include "win/resource.h" + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VBOX_RC_FILE_VERSION + PRODUCTVERSION VBOX_RC_FILE_VERSION + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK + FILEFLAGS VBOX_RC_FILE_FLAGS + FILEOS VBOX_RC_FILE_OS + FILETYPE VBOX_RC_TYPE_DLL + FILESUBTYPE VFT2_UNKNOWN +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904E4" // Lang=US English, CharSet=Windows Multilingual + BEGIN + VALUE "FileDescription", "VirtualBox Interface\0" + VALUE "InternalName", "VBoxC\0" + VALUE "OriginalFilename", "VBoxC.dll\0" + VALUE "CompanyName", VBOX_RC_COMPANY_NAME + VALUE "FileVersion", VBOX_RC_FILE_VERSION_STR + VALUE "LegalCopyright", VBOX_RC_LEGAL_COPYRIGHT + VALUE "ProductName", VBOX_RC_PRODUCT_NAME_STR + VALUE "ProductVersion", VBOX_RC_PRODUCT_VERSION_STR + VBOX_RC_MORE_STRINGS + + VALUE "OLESelfRegister", "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +///////////////////////////////////////////////////////////////////////////// +// +// REGISTRY +// + +//IDR_VIRTUALBOX REGISTRY "VBoxC.rgs" + +1 TYPELIB "VirtualBox.tlb" diff --git a/src/VBox/Main/src-client/win/VBoxClient-x86.def b/src/VBox/Main/src-client/win/VBoxClient-x86.def new file mode 100644 index 00000000..94711fa2 --- /dev/null +++ b/src/VBox/Main/src-client/win/VBoxClient-x86.def @@ -0,0 +1,36 @@ +; $Id: VBoxClient-x86.def $ +;; @file +; VBoxClient-x86 DLL Definition File. +; + +; +; Copyright (C) 2006-2023 Oracle and/or its affiliates. +; +; This file is part of VirtualBox base platform packages, as +; available from https://www.virtualbox.org. +; +; This program is free software; you can redistribute it and/or +; modify it under the terms of the GNU General Public License +; as published by the Free Software Foundation, in version 3 of the +; License. +; +; This program is distributed in the hope that it will be useful, but +; WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +; General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this program; if not, see . +; +; SPDX-License-Identifier: GPL-3.0-only +; + +LIBRARY VBoxClient-x86.dll + +EXPORTS + ; COM entry points + DllGetClassObject PRIVATE + DllCanUnloadNow PRIVATE + DllRegisterServer PRIVATE + DllUnregisterServer PRIVATE + diff --git a/src/VBox/Main/src-client/win/VBoxClient-x86.rc b/src/VBox/Main/src-client/win/VBoxClient-x86.rc new file mode 100644 index 00000000..85b3c8da --- /dev/null +++ b/src/VBox/Main/src-client/win/VBoxClient-x86.rc @@ -0,0 +1,73 @@ +/* $Id: VBoxClient-x86.rc $ */ +/** @file + * VBoxC - Resource file containing version info and icon. + */ + +/* + * Copyright (C) 2006-2023 Oracle and/or its affiliates. + * + * This file is part of VirtualBox base platform packages, as + * available from https://www.virtualbox.org. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, in version 3 of the + * License. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + * + * SPDX-License-Identifier: GPL-3.0-only + */ + +#include +#include + +#include "win/resource.h" + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VBOX_RC_FILE_VERSION + PRODUCTVERSION VBOX_RC_FILE_VERSION + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK + FILEFLAGS VBOX_RC_FILE_FLAGS + FILEOS VBOX_RC_FILE_OS + FILETYPE VBOX_RC_TYPE_DLL + FILESUBTYPE VFT2_UNKNOWN +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904E4" // Lang=US English, CharSet=Windows Multilingual + BEGIN + VALUE "FileDescription", "VirtualBox Interface (32-bit)\0" + VALUE "InternalName", "VBoxClient-x86\0" + VALUE "OriginalFilename", "VBoxClient-x86.dll\0" + VALUE "CompanyName", VBOX_RC_COMPANY_NAME + VALUE "FileVersion", VBOX_RC_FILE_VERSION_STR + VALUE "LegalCopyright", VBOX_RC_LEGAL_COPYRIGHT + VALUE "ProductName", VBOX_RC_PRODUCT_NAME_STR + VALUE "ProductVersion", VBOX_RC_PRODUCT_VERSION_STR + VBOX_RC_MORE_STRINGS + + VALUE "OLESelfRegister", "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +///////////////////////////////////////////////////////////////////////////// +// +// REGISTRY +// + +IDR_VIRTUALBOX REGISTRY "VBoxClient-x86.rgs" + +1 TYPELIB "VirtualBox-x86.tlb" + diff --git a/src/VBox/Main/src-client/win/dllmain.cpp b/src/VBox/Main/src-client/win/dllmain.cpp new file mode 100644 index 00000000..57b7c839 --- /dev/null +++ b/src/VBox/Main/src-client/win/dllmain.cpp @@ -0,0 +1,176 @@ +/* $Id: dllmain.cpp $ */ +/** @file + * VBoxC - COM DLL exports and DLL init/term. + */ + +/* + * Copyright (C) 2006-2023 Oracle and/or its affiliates. + * + * This file is part of VirtualBox base platform packages, as + * available from https://www.virtualbox.org. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, in version 3 of the + * License. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + * + * SPDX-License-Identifier: GPL-3.0-only + */ + + +/********************************************************************************************************************************* +* Header Files * +*********************************************************************************************************************************/ +#include "VBox/com/defs.h" + +#include +#include + +#include + + +/********************************************************************************************************************************* +* Global Variables * +*********************************************************************************************************************************/ +static ATL::CComModule *g_pAtlComModule; + +BEGIN_OBJECT_MAP(ObjectMap) + OBJECT_ENTRY(CLSID_Session, Session) + OBJECT_ENTRY(CLSID_VirtualBoxClient, VirtualBoxClient) +END_OBJECT_MAP() + + +///////////////////////////////////////////////////////////////////////////// +// DLL Entry Point + +extern "C" +BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/) +{ + if (dwReason == DLL_PROCESS_ATTACH) + { + // idempotent, so doesn't harm, and needed for COM embedding scenario + RTR3InitDll(RTR3INIT_FLAGS_UNOBTRUSIVE); + + g_pAtlComModule = new(ATL::CComModule); + if (!g_pAtlComModule) + return FALSE; + + g_pAtlComModule->Init(ObjectMap, hInstance, &LIBID_VirtualBox); + DisableThreadLibraryCalls(hInstance); + } + else if (dwReason == DLL_PROCESS_DETACH) + { + if (g_pAtlComModule) + { + g_pAtlComModule->Term(); + delete g_pAtlComModule; + g_pAtlComModule = NULL; + } + } + return TRUE; +} + +///////////////////////////////////////////////////////////////////////////// +// Used to determine whether the DLL can be unloaded by OLE + +STDAPI DllCanUnloadNow(void) +{ + AssertReturn(g_pAtlComModule, S_OK); + LONG const cLocks = g_pAtlComModule->GetLockCount(); + Assert(cLocks >= VirtualBoxClient::s_cUnnecessaryAtlModuleLocks); + return cLocks <= VirtualBoxClient::s_cUnnecessaryAtlModuleLocks ? S_OK : S_FALSE; +} + +///////////////////////////////////////////////////////////////////////////// +// Returns a class factory to create an object of the requested type + +STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) +{ + AssertReturn(g_pAtlComModule, E_UNEXPECTED); + return g_pAtlComModule->GetClassObject(rclsid, riid, ppv); +} + +///////////////////////////////////////////////////////////////////////////// +// DllRegisterServer - Adds entries to the system registry + +STDAPI DllRegisterServer(void) +{ +#ifndef VBOX_WITH_MIDL_PROXY_STUB + // registers object, typelib and all interfaces in typelib + AssertReturn(g_pAtlComModule, E_UNEXPECTED); + return g_pAtlComModule->RegisterServer(TRUE); +#else + return S_OK; /* VBoxProxyStub does all the work, no need to duplicate it here. */ +#endif +} + +///////////////////////////////////////////////////////////////////////////// +// DllUnregisterServer - Removes entries from the system registry + +STDAPI DllUnregisterServer(void) +{ +#ifndef VBOX_WITH_MIDL_PROXY_STUB + AssertReturn(g_pAtlComModule, E_UNEXPECTED); + HRESULT hrc = g_pAtlComModule->UnregisterServer(TRUE); + return hrc; +#else + return S_OK; /* VBoxProxyStub does all the work, no need to duplicate it here. */ +#endif +} + + +#ifdef RT_OS_WINDOWS +/* + * HACK ALERT! Really ugly trick to make the VirtualBoxClient object go away + * when nobody uses it anymore. This is to prevent its uninit() + * method from accessing IVirtualBox and similar proxy stubs after + * COM has been officially shut down. + * + * It is simply TOO LATE to destroy the client object from DllMain/detach! + * + * This hack ASSUMES ObjectMap order. + * This hack is subject to a re-instantiation race. + */ +ULONG VirtualBoxClient::InternalRelease() +{ + ULONG cRefs = VirtualBoxClientWrap::InternalRelease(); +# ifdef DEBUG_bird + char szMsg[64]; + RTStrPrintf(szMsg, sizeof(szMsg), "VirtualBoxClient: cRefs=%d\n", cRefs); + OutputDebugStringA(szMsg); +# endif +# if 1 /* enable ugly hack */ + if (cRefs == 1) + { + /* Make the factory to drop its reference. */ + if (ObjectMap[1].pCF) + { + InternalAddRef(); + + CMyComClassFactorySingleton *pFactory; + pFactory = dynamic_cast *>(ObjectMap[1].pCF); + Assert(pFactory); + if (pFactory) + { + IUnknown *pUnknown = pFactory->m_spObj; + pFactory->m_spObj = NULL; + if (pUnknown) + pUnknown->Release(); + } + + cRefs = VirtualBoxClientWrap::InternalRelease(); + } + } +# endif + return cRefs; +} +#endif + diff --git a/src/VBox/Main/src-client/win/precomp_vcc.h b/src/VBox/Main/src-client/win/precomp_vcc.h new file mode 100644 index 00000000..be69459e --- /dev/null +++ b/src/VBox/Main/src-client/win/precomp_vcc.h @@ -0,0 +1,49 @@ +/* $Id: precomp_vcc.h $ */ +/** @file + * VirtualBox COM - Visual C++ precompiled header for VBoxC. + */ + +/* + * Copyright (C) 2006-2023 Oracle and/or its affiliates. + * + * This file is part of VirtualBox base platform packages, as + * available from https://www.virtualbox.org. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, in version 3 of the + * License. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + * + * SPDX-License-Identifier: GPL-3.0-only + */ + + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "VBox/com/VirtualBox.h" + +#if defined(Log) || defined(LogIsEnabled) +# error "Log() from iprt/log.h cannot be defined in the precompiled header!" +#endif + -- cgit v1.2.3