SUPLibInternal.h revision 4db69c2a1302fa56bc5dd7181377b9f47cfd875e
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync/* $Id$ */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync/** @file
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * VirtualBox Support Library - Internal header.
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync/*
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * Copyright (C) 2006-2013 Oracle Corporation
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync *
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * available from http://www.virtualbox.org. This file is free software;
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * you can redistribute it and/or modify it under the terms of the GNU
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * General Public License (GPL) as published by the Free Software
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync *
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * The contents of this file may alternatively be used under the terms
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * of the Common Development and Distribution License Version 1.0
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * VirtualBox OSE distribution, in which case the provisions of the
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * CDDL are applicable instead of those of the GPL.
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync *
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * You may elect to license modified versions of this file under the
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * terms and conditions of either the GPL or the CDDL or both.
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync#ifndef ___SUPLibInternal_h___
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync#define ___SUPLibInternal_h___
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync
c8bcebedf264bc1287bcce50bdf66d08e28a88dcvboxsync#include <VBox/cdefs.h>
5debbbcc37114f1dbecaecfc66c81ea2fbda6140vboxsync#include <VBox/types.h>
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync#include <iprt/stdarg.h>
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync/*******************************************************************************
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync* Defined Constants And Macros *
1f6b1f68eb26f8af1f9a4b5ffd00df66ad7af1devboxsync*******************************************************************************/
3c0e6e6c131cfdaeaeaea598603f6ef6ab10e781vboxsync/** @def SUPLIB_DLL_SUFF
3c0e6e6c131cfdaeaeaea598603f6ef6ab10e781vboxsync * The (typical) DLL/DYLIB/SO suffix. */
3c0e6e6c131cfdaeaeaea598603f6ef6ab10e781vboxsync#if defined(RT_OS_DARWIN)
1f6b1f68eb26f8af1f9a4b5ffd00df66ad7af1devboxsync# define SUPLIB_DLL_SUFF ".dylib"
3c0e6e6c131cfdaeaeaea598603f6ef6ab10e781vboxsync#elif defined(RT_OS_L4)
3c0e6e6c131cfdaeaeaea598603f6ef6ab10e781vboxsync# define SUPLIB_DLL_SUFF ".s.so"
3c0e6e6c131cfdaeaeaea598603f6ef6ab10e781vboxsync#elif defined(RT_OS_OS2) || defined(RT_OS_WINDOWS)
3c0e6e6c131cfdaeaeaea598603f6ef6ab10e781vboxsync# define SUPLIB_DLL_SUFF ".dll"
3c0e6e6c131cfdaeaeaea598603f6ef6ab10e781vboxsync#else
1f6b1f68eb26f8af1f9a4b5ffd00df66ad7af1devboxsync# define SUPLIB_DLL_SUFF ".so"
3c0e6e6c131cfdaeaeaea598603f6ef6ab10e781vboxsync#endif
3c0e6e6c131cfdaeaeaea598603f6ef6ab10e781vboxsync
d44cb80e1d772854c10ef9ae03daba8dcf61d389vboxsync#ifdef RT_OS_SOLARIS
d44cb80e1d772854c10ef9ae03daba8dcf61d389vboxsync/** Number of dummy files to open (2:ip4, 1:ip6, 1:extra) see
d44cb80e1d772854c10ef9ae03daba8dcf61d389vboxsync * @bugref{4650}. */
d44cb80e1d772854c10ef9ae03daba8dcf61d389vboxsync# define SUPLIB_FLT_DUMMYFILES 4
3c0e6e6c131cfdaeaeaea598603f6ef6ab10e781vboxsync#endif
3c0e6e6c131cfdaeaeaea598603f6ef6ab10e781vboxsync
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync/** @def SUPLIB_EXE_SUFF
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * The (typical) executable suffix. */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync#if defined(RT_OS_OS2) || defined(RT_OS_WINDOWS)
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define SUPLIB_EXE_SUFF ".exe"
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync#else
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define SUPLIB_EXE_SUFF ""
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync#endif
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync/** @def SUP_HARDENED_SUID
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * Whether we're employing set-user-ID-on-execute in the hardening.
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync#if !defined(RT_OS_OS2) && !defined(RT_OS_WINDOWS) && !defined(RT_OS_L4)
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define SUP_HARDENED_SUID
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync#else
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# undef SUP_HARDENED_SUID
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync#endif
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync#ifdef IN_SUP_HARDENED_R3
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync/** @name Make the symbols in SUPR3HardenedStatic different from the VBoxRT ones.
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * We cannot rely on DECLHIDDEN to make this separation for us since it doesn't
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * work with all GCC versions. So, we resort to old fashion precompiler hacking.
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * @{
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define supR3HardenedPathAppPrivateNoArch supR3HardenedStaticPathAppPrivateNoArch
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define supR3HardenedPathAppPrivateArch supR3HardenedStaticPathAppPrivateArch
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define supR3HardenedPathSharedLibs supR3HardenedStaticPathSharedLibs
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define supR3HardenedPathAppDocs supR3HardenedStaticPathAppDocs
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define supR3HardenedPathExecDir supR3HardenedStaticPathExecDir
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define supR3HardenedPathFilename supR3HardenedStaticPathFilename
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define supR3HardenedFatalV supR3HardenedStaticFatalV
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define supR3HardenedFatal supR3HardenedStaticFatal
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define supR3HardenedFatalMsgV supR3HardenedStaticFatalMsgV
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define supR3HardenedFatalMsg supR3HardenedStaticFatalMsg
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define supR3HardenedErrorV supR3HardenedStaticErrorV
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define supR3HardenedError supR3HardenedStaticError
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define supR3HardenedOpenLog supR3HardenedStaticOpenLog
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define supR3HardenedLogV supR3HardenedStaticLogV
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define supR3HardenedLog supR3HardenedStaticLog
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define supR3HardenedVerifyAll supR3HardenedStaticVerifyAll
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define supR3HardenedVerifyFixedDir supR3HardenedStaticVerifyFixedDir
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define supR3HardenedVerifyFixedFile supR3HardenedStaticVerifyFixedFile
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define supR3HardenedVerifyDir supR3HardenedStaticVerifyDir
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define supR3HardenedVerifyFile supR3HardenedStaticVerifyFile
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define supR3HardenedGetPreInitData supR3HardenedStaticGetPreInitData
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define supR3HardenedRecvPreInitData supR3HardenedStaticRecvPreInitData
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync/** @} */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync#endif /* IN_SUP_HARDENED_R3 */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync/** @name CRT function mappings (not using CRT on Windows).
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * @{
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync#if defined(IN_SUP_HARDENED_R3) && defined(RT_OS_WINDOWS)
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define SUP_HARDENED_NEED_CRT_FUNCTIONS
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncDECLHIDDEN(int) suplibHardenedMemComp(void const *pvDst, const void *pvSrc, size_t cbToComp);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncDECLHIDDEN(void *) suplibHardenedMemCopy(void *pvDst, const void *pvSrc, size_t cbToCopy);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncDECLHIDDEN(void *) suplibHardenedMemSet(void *pvDst, int ch, size_t cbToSet);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncDECLHIDDEN(char *) suplibHardenedStrCopy(char *pszDst, const char *pszSrc);
e7e60b177e688900656c04404c5123f1dfa1d02cvboxsyncDECLHIDDEN(size_t) suplibHardenedStrLen(const char *psz);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncDECLHIDDEN(char *) suplibHardenedStrCat(char *pszDst, const char *pszSrc);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncDECLHIDDEN(int) suplibHardenedStrCmp(const char *psz1, const char *psz2);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncDECLHIDDEN(int) suplibHardenedStrNCmp(const char *psz1, const char *psz2, size_t cchMax);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync#else
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# undef SUP_HARDENED_NEED_CRT_FUNCTIONS
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define suplibHardenedMemComp memcmp
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define suplibHardenedMemCopy memcpy
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define suplibHardenedMemSet memset
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define suplibHardenedStrCopy strcpy
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define suplibHardenedStrLen strlen
ada022f71e6728d4f2b15e643d35aa94992656c7vboxsync# define suplibHardenedStrCat strcat
bf4de0c2965291e927412f708c6c27eeeb5825d4vboxsync# define suplibHardenedStrCmp strcmp
bf4de0c2965291e927412f708c6c27eeeb5825d4vboxsync# define suplibHardenedStrNCmp strncmp
bf4de0c2965291e927412f708c6c27eeeb5825d4vboxsync#endif
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncDECLNORETURN(void) suplibHardenedExit(RTEXITCODE rcExit);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncDECLHIDDEN(void) suplibHardenedPrintF(const char *pszFormat, ...);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncDECLHIDDEN(void) suplibHardenedPrintFV(const char *pszFormat, va_list va);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync/** @} */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync/** Debug output macro. */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync#ifdef IN_SUP_HARDENED_R3
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# if defined(DEBUG_bird) && defined(RT_OS_WINDOWS)
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define SUP_DPRINTF(a) do { supR3HardenedStaticLog a; suplibHardenedPrintF a; } while (0)
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# else
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define SUP_DPRINTF(a) do { supR3HardenedStaticLog a; } while (0)
bf4de0c2965291e927412f708c6c27eeeb5825d4vboxsync# endif
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync#else
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# if defined(DEBUG_bird) && defined(RT_OS_WINDOWS)
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define SUP_DPRINTF(a) RTLogPrintf a
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# else
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define SUP_DPRINTF(a) do { } while (0)
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# endif
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync#endif
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync/*******************************************************************************
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync* Structures and Typedefs *
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync*******************************************************************************/
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync/**
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * The type of an installed file.
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync */
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsynctypedef enum SUPINSTFILETYPE
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync{
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync kSupIFT_Invalid = 0,
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync kSupIFT_Exe,
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync kSupIFT_Dll,
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync kSupIFT_Rc,
e7e60b177e688900656c04404c5123f1dfa1d02cvboxsync kSupIFT_Sys,
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync kSupIFT_Script,
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync kSupIFT_Data,
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync kSupIFT_TestExe,
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync kSupIFT_TestDll,
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync kSupIFT_End
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync} SUPINSTFILETYPE;
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync/**
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * Installation directory specifier.
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsynctypedef enum SUPINSTDIR
bf4de0c2965291e927412f708c6c27eeeb5825d4vboxsync{
bf4de0c2965291e927412f708c6c27eeeb5825d4vboxsync kSupID_Invalid = 0,
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync kSupID_Bin,
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync kSupID_AppBin,
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync kSupID_SharedLib,
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync kSupID_AppPrivArch,
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync kSupID_AppPrivArchComp,
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync kSupID_AppPrivNoArch,
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync kSupID_Testcase,
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync kSupID_End
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync} SUPINSTDIR;
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync/**
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * Installed file.
bf4de0c2965291e927412f708c6c27eeeb5825d4vboxsync */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsynctypedef struct SUPINSTFILE
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync{
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync /** File type. */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync SUPINSTFILETYPE enmType;
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync /** Install directory. */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync SUPINSTDIR enmDir;
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync /** Optional (true) or mandatory (false. */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync bool fOptional;
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync /** File name. */
9f9eff04f209bd905529ee3b76076e55568db917vboxsync const char *pszFile;
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync} SUPINSTFILE;
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsynctypedef SUPINSTFILE *PSUPINSTFILE;
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsynctypedef SUPINSTFILE const *PCSUPINSTFILE;
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync/**
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync * Status data for a verified file.
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync */
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsynctypedef struct SUPVERIFIEDFILE
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync{
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync /** The file handle or descriptor. -1 if not open. */
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync intptr_t hFile;
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync /** Whether the file has been validated. */
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync bool fValidated;
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync#ifdef RT_OS_WINDOWS
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync /** Whether we've checked the signature of the file. */
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync bool fCheckedSignature;
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync#endif
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync} SUPVERIFIEDFILE;
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsynctypedef SUPVERIFIEDFILE *PSUPVERIFIEDFILE;
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsynctypedef SUPVERIFIEDFILE const *PCSUPVERIFIEDFILE;
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync/**
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync * Status data for a verified directory.
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync */
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsynctypedef struct SUPVERIFIEDDIR
9f9eff04f209bd905529ee3b76076e55568db917vboxsync{
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync /** The directory handle or descriptor. -1 if not open. */
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync intptr_t hDir;
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync /** Whether the directory has been validated. */
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync bool fValidated;
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync} SUPVERIFIEDDIR;
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsynctypedef SUPVERIFIEDDIR *PSUPVERIFIEDDIR;
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsynctypedef SUPVERIFIEDDIR const *PCSUPVERIFIEDDIR;
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync/**
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync * SUPLib instance data.
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync *
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync * This is data that is passed from the static to the dynamic SUPLib
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync * in a hardened setup.
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync */
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsynctypedef struct SUPLIBDATA
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync{
a2d53f020c57ede4a469a06d8ef8f735c7a46596vboxsync /** The device handle. */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync#if defined(RT_OS_WINDOWS)
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync void *hDevice;
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync#else
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync int hDevice;
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync#endif
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync /** Indicates whether we have unrestricted (true) or restricted access to the
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * support device. */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync bool fUnrestricted;
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync#if defined(RT_OS_DARWIN)
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync /** The connection to the VBoxSupDrv service. */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync uintptr_t uConnection;
714655059cb50166bd78a8b4fc9fe2d4b29ef4afvboxsync#elif defined(RT_OS_LINUX)
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync /** Indicates whether madvise(,,MADV_DONTFORK) works. */
3c0e6e6c131cfdaeaeaea598603f6ef6ab10e781vboxsync bool fSysMadviseWorks;
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync#elif defined(RT_OS_SOLARIS)
3c0e6e6c131cfdaeaeaea598603f6ef6ab10e781vboxsync /** Extra dummy file descriptors to prevent growing file-descriptor table on
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * clean up (see @bugref{4650}). */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync int ahDummy[SUPLIB_FLT_DUMMYFILES];
3c0e6e6c131cfdaeaeaea598603f6ef6ab10e781vboxsync#elif defined(RT_OS_WINDOWS)
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync#endif
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync} SUPLIBDATA;
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync/** Pointer to the pre-init data. */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsynctypedef SUPLIBDATA *PSUPLIBDATA;
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync/** Pointer to const pre-init data. */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsynctypedef SUPLIBDATA const *PCSUPLIBDATA;
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync/** The NIL value of SUPLIBDATA::hDevice. */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync#if defined(RT_OS_WINDOWS)
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# define SUP_HDEVICE_NIL NULL
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync#else
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync# define SUP_HDEVICE_NIL (-1)
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync#endif
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync/**
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * Pre-init data that is handed over from the hardened executable stub.
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsynctypedef struct SUPPREINITDATA
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync{
bf4de0c2965291e927412f708c6c27eeeb5825d4vboxsync /** Magic value (SUPPREINITDATA_MAGIC). */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync uint32_t u32Magic;
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync /** The SUPLib instance data. */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync SUPLIBDATA Data;
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync /** The number of entries in paInstallFiles and paVerifiedFiles. */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync size_t cInstallFiles;
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync /** g_aSupInstallFiles. */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync PCSUPINSTFILE paInstallFiles;
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync /** g_aSupVerifiedFiles. */
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync PCSUPVERIFIEDFILE paVerifiedFiles;
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync /** The number of entries in paVerifiedDirs. */
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync size_t cVerifiedDirs;
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync /** g_aSupVerifiedDirs. */
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync PCSUPVERIFIEDDIR paVerifiedDirs;
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync /** Magic value (SUPPREINITDATA_MAGIC). */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync uint32_t u32EndMagic;
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync} SUPPREINITDATA;
70142706c9117b6c1befe7a5be768d25c699ead5vboxsynctypedef SUPPREINITDATA *PSUPPREINITDATA;
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsynctypedef SUPPREINITDATA const *PCSUPPREINITDATA;
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync/** Magic value for SUPPREINITDATA::u32Magic and SUPPREINITDATA::u32EndMagic. */
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync#define SUPPREINITDATA_MAGIC UINT32_C(0xbeef0001)
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync/** @copydoc supR3PreInit */
70142706c9117b6c1befe7a5be768d25c699ead5vboxsynctypedef DECLCALLBACK(int) FNSUPR3PREINIT(PSUPPREINITDATA pPreInitData, uint32_t fFlags);
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync/** Pointer to supR3PreInit. */
70142706c9117b6c1befe7a5be768d25c699ead5vboxsynctypedef FNSUPR3PREINIT *PFNSUPR3PREINIT;
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync/** The current SUPR3HardenedMain state / location. */
70142706c9117b6c1befe7a5be768d25c699ead5vboxsynctypedef enum SUPR3HARDENEDMAINSTATE
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync{
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync SUPR3HARDENEDMAINSTATE_NOT_YET_CALLED = 0,
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync SUPR3HARDENEDMAINSTATE_WIN_EARLY_INIT_CALLED,
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync SUPR3HARDENEDMAINSTATE_WIN_EARLY_IMPORTS_RESOLVED,
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync SUPR3HARDENEDMAINSTATE_WIN_EARLY_DEVICE_OPENED,
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync SUPR3HARDENEDMAINSTATE_WIN_EP_CALLED,
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync SUPR3HARDENEDMAINSTATE_WIN_IMPORTS_RESOLVED,
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync SUPR3HARDENEDMAINSTATE_WIN_VERSION_INITIALIZED,
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync SUPR3HARDENEDMAINSTATE_WIN_VERIFY_TRUST_READY,
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync SUPR3HARDENEDMAINSTATE_HARDENED_MAIN_CALLED,
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync SUPR3HARDENEDMAINSTATE_INIT_RUNTIME,
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync SUPR3HARDENEDMAINSTATE_GET_TRUSTED_MAIN,
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync SUPR3HARDENEDMAINSTATE_CALLED_TRUSTED_MAIN,
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync SUPR3HARDENEDMAINSTATE_END,
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync SUPR3HARDENEDMAINSTATE_32BIT_HACK = 0x7fffffff
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync} SUPR3HARDENEDMAINSTATE;
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync/*******************************************************************************
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync* Global Variables *
70142706c9117b6c1befe7a5be768d25c699ead5vboxsync*******************************************************************************/
70142706c9117b6c1befe7a5be768d25c699ead5vboxsyncextern DECLHIDDEN(uint32_t) g_u32Cookie;
70142706c9117b6c1befe7a5be768d25c699ead5vboxsyncextern DECLHIDDEN(uint32_t) g_u32SessionCookie;
70142706c9117b6c1befe7a5be768d25c699ead5vboxsyncextern DECLHIDDEN(SUPLIBDATA) g_supLibData;
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncextern DECLHIDDEN(uint32_t) g_uSupFakeMode;
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncextern DECLHIDDEN(PSUPGLOBALINFOPAGE) g_pSUPGlobalInfoPageR0;
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync#ifdef ___SUPDrvIOC_h___
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncextern DECLHIDDEN(PSUPQUERYFUNCS) g_pSupFunctions;
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync#endif
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncextern DECLHIDDEN(SUPR3HARDENEDMAINSTATE) g_enmSupR3HardenedMainState;
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync#ifdef RT_OS_WINDOWS
e7e60b177e688900656c04404c5123f1dfa1d02cvboxsyncextern DECLHIDDEN(bool) g_fSupEarlyProcessInit;
243041cd7eae9f34b08e7340533b2a88218ee57evboxsync#endif
e7e60b177e688900656c04404c5123f1dfa1d02cvboxsync
e7e60b177e688900656c04404c5123f1dfa1d02cvboxsync
e7e60b177e688900656c04404c5123f1dfa1d02cvboxsync/*******************************************************************************
e7e60b177e688900656c04404c5123f1dfa1d02cvboxsync* OS Specific Function *
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync*******************************************************************************/
714655059cb50166bd78a8b4fc9fe2d4b29ef4afvboxsyncRT_C_DECLS_BEGIN
243041cd7eae9f34b08e7340533b2a88218ee57evboxsyncint suplibOsInstall(void);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncint suplibOsUninstall(void);
243041cd7eae9f34b08e7340533b2a88218ee57evboxsyncint suplibOsInit(PSUPLIBDATA pThis, bool fPreInited, bool fUnrestricted);
243041cd7eae9f34b08e7340533b2a88218ee57evboxsyncint suplibOsTerm(PSUPLIBDATA pThis);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncint suplibOsHardenedVerifyInit(void);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncint suplibOsHardenedVerifyTerm(void);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncint suplibOsIOCtl(PSUPLIBDATA pThis, uintptr_t uFunction, void *pvReq, size_t cbReq);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncint suplibOsIOCtlFast(PSUPLIBDATA pThis, uintptr_t uFunction, uintptr_t idCpu);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncint suplibOsPageAlloc(PSUPLIBDATA pThis, size_t cPages, void **ppvPages);
243041cd7eae9f34b08e7340533b2a88218ee57evboxsyncint suplibOsPageFree(PSUPLIBDATA pThis, void *pvPages, size_t cPages);
243041cd7eae9f34b08e7340533b2a88218ee57evboxsyncint suplibOsQueryVTxSupported(void);
243041cd7eae9f34b08e7340533b2a88218ee57evboxsync
243041cd7eae9f34b08e7340533b2a88218ee57evboxsync
e7e60b177e688900656c04404c5123f1dfa1d02cvboxsync/**
243041cd7eae9f34b08e7340533b2a88218ee57evboxsync * Performs the pre-initialization of the support library.
e61cd03db2217b7ec7467065af02d7ea7549149evboxsync *
243041cd7eae9f34b08e7340533b2a88218ee57evboxsync * This is dynamically resolved and invoked by the static library before it
243041cd7eae9f34b08e7340533b2a88218ee57evboxsync * calls RTR3InitEx and thereby SUPR3Init.
e61cd03db2217b7ec7467065af02d7ea7549149evboxsync *
243041cd7eae9f34b08e7340533b2a88218ee57evboxsync * @returns IPRT status code.
243041cd7eae9f34b08e7340533b2a88218ee57evboxsync * @param pPreInitData The pre init data.
1f6b1f68eb26f8af1f9a4b5ffd00df66ad7af1devboxsync * @param fFlags The SUPR3HardenedMain flags.
1f6b1f68eb26f8af1f9a4b5ffd00df66ad7af1devboxsync */
1f6b1f68eb26f8af1f9a4b5ffd00df66ad7af1devboxsyncDECLEXPORT(int) supR3PreInit(PSUPPREINITDATA pPreInitData, uint32_t fFlags);
1f6b1f68eb26f8af1f9a4b5ffd00df66ad7af1devboxsync
243041cd7eae9f34b08e7340533b2a88218ee57evboxsync
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync/** @copydoc RTPathAppPrivateNoArch */
243041cd7eae9f34b08e7340533b2a88218ee57evboxsyncDECLHIDDEN(int) supR3HardenedPathAppPrivateNoArch(char *pszPath, size_t cchPath);
243041cd7eae9f34b08e7340533b2a88218ee57evboxsync/** @copydoc RTPathAppPrivateArch */
1f6b1f68eb26f8af1f9a4b5ffd00df66ad7af1devboxsyncDECLHIDDEN(int) supR3HardenedPathAppPrivateArch(char *pszPath, size_t cchPath);
1f6b1f68eb26f8af1f9a4b5ffd00df66ad7af1devboxsync/** @copydoc RTPathSharedLibs */
1f6b1f68eb26f8af1f9a4b5ffd00df66ad7af1devboxsyncDECLHIDDEN(int) supR3HardenedPathSharedLibs(char *pszPath, size_t cchPath);
1f6b1f68eb26f8af1f9a4b5ffd00df66ad7af1devboxsync/** @copydoc RTPathAppDocs */
1f6b1f68eb26f8af1f9a4b5ffd00df66ad7af1devboxsyncDECLHIDDEN(int) supR3HardenedPathAppDocs(char *pszPath, size_t cchPath);
1f6b1f68eb26f8af1f9a4b5ffd00df66ad7af1devboxsync/** @copydoc RTPathExecDir */
1f6b1f68eb26f8af1f9a4b5ffd00df66ad7af1devboxsyncDECLHIDDEN(int) supR3HardenedPathExecDir(char *pszPath, size_t cchPath);
e61cd03db2217b7ec7467065af02d7ea7549149evboxsync/** @copydoc RTPathFilename */
243041cd7eae9f34b08e7340533b2a88218ee57evboxsyncDECLHIDDEN(char *) supR3HardenedPathFilename(const char *pszPath);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync/**
1f6b1f68eb26f8af1f9a4b5ffd00df66ad7af1devboxsync * Display a fatal error and try call TrustedError or quit.
1f6b1f68eb26f8af1f9a4b5ffd00df66ad7af1devboxsync */
1f6b1f68eb26f8af1f9a4b5ffd00df66ad7af1devboxsyncDECLHIDDEN(void) supR3HardenedFatalMsgV(const char *pszWhere, SUPINITOP enmWhat, int rc, const char *pszMsgFmt, va_list va);
1f6b1f68eb26f8af1f9a4b5ffd00df66ad7af1devboxsync
1f6b1f68eb26f8af1f9a4b5ffd00df66ad7af1devboxsync/**
1f6b1f68eb26f8af1f9a4b5ffd00df66ad7af1devboxsync * Display a fatal error and try call TrustedError or quit.
1f6b1f68eb26f8af1f9a4b5ffd00df66ad7af1devboxsync */
1f6b1f68eb26f8af1f9a4b5ffd00df66ad7af1devboxsyncDECLHIDDEN(void) supR3HardenedFatalMsg(const char *pszWhere, SUPINITOP enmWhat, int rc, const char *pszMsgFmt, ...);
1f6b1f68eb26f8af1f9a4b5ffd00df66ad7af1devboxsync
1f6b1f68eb26f8af1f9a4b5ffd00df66ad7af1devboxsync/**
1f6b1f68eb26f8af1f9a4b5ffd00df66ad7af1devboxsync * Display a fatal error and quit.
1f6b1f68eb26f8af1f9a4b5ffd00df66ad7af1devboxsync */
243041cd7eae9f34b08e7340533b2a88218ee57evboxsyncDECLHIDDEN(void) supR3HardenedFatalV(const char *pszFormat, va_list va);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync/**
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * Display a fatal error and quit.
1f6b1f68eb26f8af1f9a4b5ffd00df66ad7af1devboxsync */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncDECLHIDDEN(void) supR3HardenedFatal(const char *pszFormat, ...);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync/**
243041cd7eae9f34b08e7340533b2a88218ee57evboxsync * Display an error which may or may not be fatal.
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncDECLHIDDEN(int) supR3HardenedErrorV(int rc, bool fFatal, const char *pszFormat, va_list va);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync/**
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * Display an error which may or may not be fatal.
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncDECLHIDDEN(int) supR3HardenedError(int rc, bool fFatal, const char *pszFormat, ...);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync/**
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * Open any startup log file specified in the argument.
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncDECLHIDDEN(void) supR3HardenedOpenLog(int *pcArgs, char **papszArgs);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync/**
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * Write to the startup log file.
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncDECLHIDDEN(void) supR3HardenedLogV(const char *pszFormat, va_list va);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync/**
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync * Write to the startup log file.
714655059cb50166bd78a8b4fc9fe2d4b29ef4afvboxsync */
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncDECLHIDDEN(void) supR3HardenedLog(const char *pszFormat, ...);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncDECLHIDDEN(int) supR3HardenedVerifyAll(bool fFatal, const char *pszProgName);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncDECLHIDDEN(int) supR3HardenedVerifyFixedDir(SUPINSTDIR enmDir, bool fFatal);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncDECLHIDDEN(int) supR3HardenedVerifyFixedFile(const char *pszFilename, bool fFatal);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncDECLHIDDEN(int) supR3HardenedVerifyDir(const char *pszDirPath, bool fRecursive, bool fCheckFiles, PRTERRINFO pErrInfo);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncDECLHIDDEN(int) supR3HardenedVerifyFile(const char *pszFilename, RTHCUINTPTR hNativeFile, bool fMaybe3rdParty,
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync PRTERRINFO pErrInfo);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncDECLHIDDEN(void) supR3HardenedGetPreInitData(PSUPPREINITDATA pPreInitData);
bf4de0c2965291e927412f708c6c27eeeb5825d4vboxsyncDECLHIDDEN(int) supR3HardenedRecvPreInitData(PCSUPPREINITDATA pPreInitData);
bf4de0c2965291e927412f708c6c27eeeb5825d4vboxsync
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync#ifdef RT_OS_WINDOWS
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncDECLHIDDEN(void) supR3HardenedWinInit(uint32_t fFlags, bool fAvastKludge);
bf4de0c2965291e927412f708c6c27eeeb5825d4vboxsyncDECLHIDDEN(void) supR3HardenedWinInitVersion(void);
bf4de0c2965291e927412f708c6c27eeeb5825d4vboxsyncDECLHIDDEN(void) supR3HardenedWinInitImports(void);
bf4de0c2965291e927412f708c6c27eeeb5825d4vboxsyncDECLHIDDEN(void) supR3HardenedWinInitImportsEarly(uintptr_t uNtDllAddr);
bf4de0c2965291e927412f708c6c27eeeb5825d4vboxsyncDECLHIDDEN(PFNRT) supR3HardenedWinGetRealDllSymbol(const char *pszDll, const char *pszProcedure);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncDECLHIDDEN(void) supR3HardenedWinVerifyProcess(void);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncDECLHIDDEN(void) supR3HardenedWinEnableThreadCreation(void);
bf4de0c2965291e927412f708c6c27eeeb5825d4vboxsyncDECLHIDDEN(void) supR3HardenedWinResolveVerifyTrustApiAndHookThreadCreation(const char *pszProgName);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncDECLHIDDEN(void) supR3HardenedWinFlushLoaderCache();
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncDECLHIDDEN(bool) supR3HardenedWinIsReSpawnNeeded(int iWhich, int cArgs, char **papszArgs);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncDECLHIDDEN(int) supR3HardenedWinReSpawn(int iWhich);
bf4de0c2965291e927412f708c6c27eeeb5825d4vboxsync# ifdef _WINDEF_
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsyncDECLHIDDEN(void) supR3HardenedWinCreateParentWatcherThread(HMODULE hVBoxRT);
3c3a5ab35783f4d31cb5d3a15db9daadeb804daavboxsync# endif
3c0e6e6c131cfdaeaeaea598603f6ef6ab10e781vboxsyncDECLHIDDEN(void *) supR3HardenedWinLoadLibrary(const char *pszName, bool fSystem32Only);
3c0e6e6c131cfdaeaeaea598603f6ef6ab10e781vboxsyncextern RTUTF16 g_wszSupLibHardenedExePath[1024];
3c0e6e6c131cfdaeaeaea598603f6ef6ab10e781vboxsync# ifdef RTPATH_MAX
3c0e6e6c131cfdaeaeaea598603f6ef6ab10e781vboxsyncextern char g_szSupLibHardenedExePath[RTPATH_MAX];
1f6b1f68eb26f8af1f9a4b5ffd00df66ad7af1devboxsync# endif
0c436e66dac8edc81d43b54cd878ed239a63574bvboxsyncDECLHIDDEN(void) supR3HardenedWinCompactHeaps(void);
0c436e66dac8edc81d43b54cd878ed239a63574bvboxsyncDECLHIDDEN(void) supR3HardenedMainOpenDevice(void);
3c0e6e6c131cfdaeaeaea598603f6ef6ab10e781vboxsyncDECLHIDDEN(void) supR3HardenedWinReportErrorToParent(int rc, const char *pszFormat, va_list va);
3c0e6e6c131cfdaeaeaea598603f6ef6ab10e781vboxsync#endif
3c0e6e6c131cfdaeaeaea598603f6ef6ab10e781vboxsync
0c436e66dac8edc81d43b54cd878ed239a63574bvboxsyncSUPR3DECL(int) supR3PageLock(void *pvStart, size_t cPages, PSUPPAGE paPages);
3c0e6e6c131cfdaeaeaea598603f6ef6ab10e781vboxsyncSUPR3DECL(int) supR3PageUnlock(void *pvStart);
3c0e6e6c131cfdaeaeaea598603f6ef6ab10e781vboxsync
0c436e66dac8edc81d43b54cd878ed239a63574bvboxsyncRT_C_DECLS_END
3c0e6e6c131cfdaeaeaea598603f6ef6ab10e781vboxsync
3c0e6e6c131cfdaeaeaea598603f6ef6ab10e781vboxsync
3c0e6e6c131cfdaeaeaea598603f6ef6ab10e781vboxsync#endif
3c0e6e6c131cfdaeaeaea598603f6ef6ab10e781vboxsync
3c0e6e6c131cfdaeaeaea598603f6ef6ab10e781vboxsync