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/include/UnattendedImpl.h | 318 +++++++++++++++++++++++++++++++++ 1 file changed, 318 insertions(+) create mode 100644 src/VBox/Main/include/UnattendedImpl.h (limited to 'src/VBox/Main/include/UnattendedImpl.h') diff --git a/src/VBox/Main/include/UnattendedImpl.h b/src/VBox/Main/include/UnattendedImpl.h new file mode 100644 index 00000000..de78c2bf --- /dev/null +++ b/src/VBox/Main/include/UnattendedImpl.h @@ -0,0 +1,318 @@ +/* $Id: UnattendedImpl.h $ */ +/** @file + * Unattended class header + */ + +/* + * 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 + */ + +#ifndef MAIN_INCLUDED_UnattendedImpl_h +#define MAIN_INCLUDED_UnattendedImpl_h +#ifndef RT_WITHOUT_PRAGMA_ONCE +# pragma once +#endif + +#include +#include +#include "UnattendedWrap.h" + +/* Forward declarations. */ +class UnattendedInstaller; +struct UnattendedInstallationDisk; +struct ControllerSlot; + +/** + * A data type to store image data which is read from intall.wim file. + * Currently relevant only for Windows OSs. + */ +struct WIMImage +{ + Utf8Str mName; + Utf8Str mVersion; + Utf8Str mArch; + Utf8Str mFlavor; + RTCList mLanguages; + Utf8Str mDefaultLanguage; + uint32_t mImageIndex; + VBOXOSTYPE mOSType; + WIMImage() : mImageIndex(0), mOSType(VBOXOSTYPE_Unknown) { } + const Utf8Str &formatName(Utf8Str &r_strName) const; + VBOXOSTYPE mEnmOsType; +}; + +/** + * Class implementing the IUnattended interface. + * + * This class is instantiated on the request by IMachine::getUnattended. + */ +class ATL_NO_VTABLE Unattended + : public UnattendedWrap +{ +public: + DECLARE_COMMON_CLASS_METHODS(Unattended) + + HRESULT FinalConstruct(); + void FinalRelease(); + + // public initializer/uninitializer for internal purposes only + HRESULT initUnattended(VirtualBox *aParent); + void uninit(); + + // public methods for internal purposes + Utf8Str const &i_getIsoPath() const; + Utf8Str const &i_getUser() const; + Utf8Str const &i_getPassword() const; + Utf8Str const &i_getFullUserName() const; + Utf8Str const &i_getProductKey() const; + Utf8Str const &i_getProxy() const; + Utf8Str const &i_getAdditionsIsoPath() const; + bool i_getInstallGuestAdditions() const; + Utf8Str const &i_getValidationKitIsoPath() const; + bool i_getInstallTestExecService() const; + Utf8Str const &i_getTimeZone() const; + PCRTTIMEZONEINFO i_getTimeZoneInfo() const; + Utf8Str const &i_getLocale() const; + Utf8Str const &i_getLanguage() const; + Utf8Str const &i_getCountry() const; + bool i_isMinimalInstallation() const; + Utf8Str const &i_getHostname() const; + Utf8Str const &i_getAuxiliaryBasePath() const; + ULONG i_getImageIndex() const; + Utf8Str const &i_getScriptTemplatePath() const; + Utf8Str const &i_getPostInstallScriptTemplatePath() const; + Utf8Str const &i_getPostInstallCommand() const; + /** The directory where the unattended install config and script is + * located, from the perspective of the running unattended install. */ + Utf8Str const &i_getAuxiliaryInstallDir() const; + Utf8Str const &i_getExtraInstallKernelParameters() const; + + bool i_isRtcUsingUtc() const; + bool i_isGuestOs64Bit() const; + bool i_isFirmwareEFI() const; + Utf8Str const &i_getDetectedOSVersion(); + bool i_getAvoidUpdatesOverNetwork() const; + +private: + ComPtr const mParent; /**< Strong reference to the parent object (VirtualBox/IMachine). */ + ComPtr mMachine; /**< Strong reference to the machine object (Machine/IMachine). */ + Guid mMachineUuid; /**< The machine UUID. */ + RTNATIVETHREAD mhThreadReconfigureVM; /**< Set when reconfigureVM is running. */ + Utf8Str mStrGuestOsTypeId; /**< Guest OS type ID (set by prepare). */ + bool mfRtcUseUtc; /**< Copy of IMachine::RTCUseUTC (locking reasons). */ + bool mfGuestOs64Bit; /**< 64-bit (true) or 32-bit guest OS (set by prepare). */ + FirmwareType_T menmFirmwareType; /**< Firmware type BIOS/EFI (set by prepare). */ + UnattendedInstaller *mpInstaller; /**< The installer instance (set by prepare, deleted by done). */ + + /** @name Values of the IUnattended attributes. + * @{ */ + Utf8Str mStrUser; + Utf8Str mStrPassword; + Utf8Str mStrFullUserName; + Utf8Str mStrProductKey; + Utf8Str mStrIsoPath; + Utf8Str mStrAdditionsIsoPath; + bool mfInstallGuestAdditions; + bool mfInstallTestExecService; + Utf8Str mStrValidationKitIsoPath; + Utf8Str mStrTimeZone; + PCRTTIMEZONEINFO mpTimeZoneInfo; + Utf8Str mStrLocale; + Utf8Str mStrLanguage; /**< (only relevant for windows at the moment) */ + Utf8Str mStrCountry; + RTCList mPackageSelectionAdjustments; + Utf8Str mStrHostname; + Utf8Str mStrAuxiliaryBasePath; + bool mfIsDefaultAuxiliaryBasePath; + ULONG midxImage; + Utf8Str mStrScriptTemplatePath; + Utf8Str mStrPostInstallScriptTemplatePath; + Utf8Str mStrPostInstallCommand; + Utf8Str mStrExtraInstallKernelParameters; + Utf8Str mStrProxy; + + bool mfDoneDetectIsoOS; /**< Set by detectIsoOS(), cleared by setIsoPath(). */ + Utf8Str mStrDetectedOSTypeId; + Utf8Str mStrDetectedOSVersion; + Utf8Str mStrDetectedOSFlavor; + VBOXOSTYPE mEnmOsType; + RTCList mDetectedOSLanguages; /**< (only relevant for windows at the moment) */ + Utf8Str mStrDetectedOSHints; + RTCList mDetectedImages; + bool mfAvoidUpdatesOverNetwork; + /** @} */ + + // wrapped IUnattended functions: + + /** + * Checks what mStrIsoPath points to and sets the detectedOS* properties. + */ + HRESULT detectIsoOS(); + + /** + * Prepare any data, environment, etc. + */ + HRESULT prepare(); + + /** + * Prepare installation ISO/floppy. + */ + HRESULT constructMedia(); + + /** + * Prepare a VM to run an unattended installation + */ + HRESULT reconfigureVM(); + + /** + * Done with all media construction and VM configuration and stuff. + */ + HRESULT done(); + + // wrapped IUnattended attributes: + HRESULT getIsoPath(com::Utf8Str &isoPath); + HRESULT setIsoPath(const com::Utf8Str &isoPath); + HRESULT getUser(com::Utf8Str &user); + HRESULT setUser(const com::Utf8Str &user); + HRESULT getPassword(com::Utf8Str &password); + HRESULT setPassword(const com::Utf8Str &password); + HRESULT getFullUserName(com::Utf8Str &user); + HRESULT setFullUserName(const com::Utf8Str &user); + HRESULT getProductKey(com::Utf8Str &productKey); + HRESULT setProductKey(const com::Utf8Str &productKey); + HRESULT getAdditionsIsoPath(com::Utf8Str &additionsIsoPath); + HRESULT setAdditionsIsoPath(const com::Utf8Str &additionsIsoPath); + HRESULT getInstallGuestAdditions(BOOL *installGuestAdditions); + HRESULT setInstallGuestAdditions(BOOL installGuestAdditions); + HRESULT getValidationKitIsoPath(com::Utf8Str &aValidationKitIsoPath); + HRESULT setValidationKitIsoPath(const com::Utf8Str &aValidationKitIsoPath); + HRESULT getInstallTestExecService(BOOL *aInstallTestExecService); + HRESULT setInstallTestExecService(BOOL aInstallTestExecService); + HRESULT getTimeZone(com::Utf8Str &aTimezone); + HRESULT setTimeZone(const com::Utf8Str &aTimezone); + HRESULT getLocale(com::Utf8Str &aLocale); + HRESULT setLocale(const com::Utf8Str &aLocale); + HRESULT getLanguage(com::Utf8Str &aLanguage); + HRESULT setLanguage(const com::Utf8Str &aLanguage); + HRESULT getCountry(com::Utf8Str &aCountry); + HRESULT setCountry(const com::Utf8Str &aCountry); + HRESULT getProxy(com::Utf8Str &aProxy); + HRESULT setProxy(const com::Utf8Str &aProxy); + HRESULT getPackageSelectionAdjustments(com::Utf8Str &aPackageSelectionAdjustments); + HRESULT setPackageSelectionAdjustments(const com::Utf8Str &aPackageSelectionAdjustments); + HRESULT getHostname(com::Utf8Str &aHostname); + HRESULT setHostname(const com::Utf8Str &aHostname); + HRESULT getAuxiliaryBasePath(com::Utf8Str &aAuxiliaryBasePath); + HRESULT setAuxiliaryBasePath(const com::Utf8Str &aAuxiliaryBasePath); + HRESULT getImageIndex(ULONG *index); + HRESULT setImageIndex(ULONG index); + HRESULT getMachine(ComPtr &aMachine); + HRESULT setMachine(const ComPtr &aMachine); + HRESULT getScriptTemplatePath(com::Utf8Str &aScriptTemplatePath); + HRESULT setScriptTemplatePath(const com::Utf8Str &aScriptTemplatePath); + HRESULT getPostInstallScriptTemplatePath(com::Utf8Str &aPostInstallScriptTemplatePath); + HRESULT setPostInstallScriptTemplatePath(const com::Utf8Str &aPostInstallScriptTemplatePath); + HRESULT getPostInstallCommand(com::Utf8Str &aPostInstallCommand); + HRESULT setPostInstallCommand(const com::Utf8Str &aPostInstallCommand); + HRESULT getExtraInstallKernelParameters(com::Utf8Str &aExtraInstallKernelParameters); + HRESULT setExtraInstallKernelParameters(const com::Utf8Str &aExtraInstallKernelParameters); + HRESULT getDetectedOSTypeId(com::Utf8Str &aDetectedOSTypeId); + HRESULT getDetectedOSVersion(com::Utf8Str &aDetectedOSVersion); + HRESULT getDetectedOSLanguages(com::Utf8Str &aDetectedOSLanguages); + HRESULT getDetectedOSFlavor(com::Utf8Str &aDetectedOSFlavor); + HRESULT getDetectedOSHints(com::Utf8Str &aDetectedOSHints); + HRESULT getDetectedImageNames(std::vector &aDetectedImageNames); + HRESULT getDetectedImageIndices(std::vector &aDetectedImageIndices); + HRESULT getIsUnattendedInstallSupported(BOOL *aIsUnattendedInstallSupported); + HRESULT getAvoidUpdatesOverNetwork(BOOL *aAvoidUpdatesOverNetwork); + HRESULT setAvoidUpdatesOverNetwork(BOOL aAvoidUpdatesOverNetwork); + //internal functions + + /** + * Worker for detectIsoOs(). + * + * @returns COM status code. + * @retval S_OK if detected. + * @retval S_FALSE if not detected. + * + * @param hVfsIso The ISO file system handle. + */ + HRESULT i_innerDetectIsoOS(RTVFS hVfsIso); + typedef union DETECTBUFFER + { + char sz[4096]; + char ach[4096]; + uint8_t ab[4096]; + uint32_t au32[1024]; + } DETECTBUFFER; + HRESULT i_innerDetectIsoOSWindows(RTVFS hVfsIso, DETECTBUFFER *puBuf); + HRESULT i_innerDetectIsoOSLinux(RTVFS hVfsIso, DETECTBUFFER *puBuf); + HRESULT i_innerDetectIsoOSLinuxFedora(RTVFS hVfsIso, DETECTBUFFER *puBuf, char *pszVolId); + HRESULT i_innerDetectIsoOSOs2(RTVFS hVfsIso, DETECTBUFFER *puBuf); + HRESULT i_innerDetectIsoOSFreeBsd(RTVFS hVfsIso, DETECTBUFFER *puBuf); + + /** + * Worker for reconfigureVM(). + * The caller makes sure to close the session whatever happens. + */ + HRESULT i_innerReconfigureVM(AutoMultiWriteLock2 &rAutoLock, StorageBus_T enmRecommendedStorageBus, + ComPtr const &rPtrSessionMachine); + HRESULT i_reconfigureFloppy(com::SafeIfaceArray &rControllers, + std::vector &rVecInstallatationDisks, + ComPtr const &rPtrSessionMachine, + AutoMultiWriteLock2 &rAutoLock); + HRESULT i_reconfigureIsos(com::SafeIfaceArray &rControllers, + std::vector &rVecInstallatationDisks, + ComPtr const &rPtrSessionMachine, + AutoMultiWriteLock2 &rAutoLock, StorageBus_T enmRecommendedStorageBus); + + /** + * Adds all free slots on the controller to @a rOutput. + */ + HRESULT i_findOrCreateNeededFreeSlots(const Utf8Str &rStrControllerName, StorageBus_T enmStorageBus, + ComPtr const &rPtrSessionMachine, uint32_t cSlotsNeeded, + std::list &rDvdSlots); + + /** + * Attach to VM a disk + */ + HRESULT i_attachImage(UnattendedInstallationDisk const *pImage, ComPtr const &rPtrSessionMachine, + AutoMultiWriteLock2 &rLock); + + /* + * Wrapper functions + */ + + /** + * Check whether guest is 64bit platform or not + */ + bool i_isGuestOSArchX64(Utf8Str const &rStrGuestOsTypeId); + + /** + * Updates the detected attributes when the image index or image list changes. + * + * @returns true if we've got all necessary stuff for a successful detection. + */ + bool i_updateDetectedAttributeForImage(WIMImage const &rImage); + +}; + +#endif /* !MAIN_INCLUDED_UnattendedImpl_h */ -- cgit v1.2.3