VirtualBox

source: vbox/trunk/src/VBox/HostDrivers/Support/SUPLibInternal.h@ 93254

Last change on this file since 93254 was 93115, checked in by vboxsync, 3 years ago

scm --update-copyright-year

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 19.6 KB
Line 
1/* $Id: SUPLibInternal.h 93115 2022-01-01 11:31:46Z vboxsync $ */
2/** @file
3 * VirtualBox Support Library - Internal header.
4 */
5
6/*
7 * Copyright (C) 2006-2022 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 *
17 * The contents of this file may alternatively be used under the terms
18 * of the Common Development and Distribution License Version 1.0
19 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
20 * VirtualBox OSE distribution, in which case the provisions of the
21 * CDDL are applicable instead of those of the GPL.
22 *
23 * You may elect to license modified versions of this file under the
24 * terms and conditions of either the GPL or the CDDL or both.
25 */
26
27#ifndef VBOX_INCLUDED_SRC_Support_SUPLibInternal_h
28#define VBOX_INCLUDED_SRC_Support_SUPLibInternal_h
29#ifndef RT_WITHOUT_PRAGMA_ONCE
30# pragma once
31#endif
32
33#include <VBox/cdefs.h>
34#include <VBox/types.h>
35#include <iprt/stdarg.h>
36
37
38/*******************************************************************************
39* Defined Constants And Macros *
40*******************************************************************************/
41/** @def SUPLIB_DLL_SUFF
42 * The (typical) DLL/DYLIB/SO suffix. */
43#if defined(RT_OS_DARWIN)
44# define SUPLIB_DLL_SUFF ".dylib"
45#elif defined(RT_OS_L4)
46# define SUPLIB_DLL_SUFF ".s.so"
47#elif defined(RT_OS_OS2) || defined(RT_OS_WINDOWS)
48# define SUPLIB_DLL_SUFF ".dll"
49#else
50# define SUPLIB_DLL_SUFF ".so"
51#endif
52
53#ifdef RT_OS_SOLARIS
54/** Number of dummy files to open (2:ip4, 1:ip6, 1:extra) see
55 * @bugref{4650}. */
56# define SUPLIB_FLT_DUMMYFILES 4
57#endif
58
59/** @def SUPLIB_EXE_SUFF
60 * The (typical) executable suffix. */
61#if defined(RT_OS_OS2) || defined(RT_OS_WINDOWS)
62# define SUPLIB_EXE_SUFF ".exe"
63#else
64# define SUPLIB_EXE_SUFF ""
65#endif
66
67/** @def SUP_HARDENED_SUID
68 * Whether we're employing set-user-ID-on-execute in the hardening.
69 */
70#if (!defined(RT_OS_OS2) && !defined(RT_OS_WINDOWS) && !defined(RT_OS_L4)) || defined(DOXYGEN_RUNNING)
71# define SUP_HARDENED_SUID
72#else
73# undef SUP_HARDENED_SUID
74#endif
75
76#ifdef IN_SUP_HARDENED_R3
77/** @name Make the symbols in SUPR3HardenedStatic different from the VBoxRT ones.
78 * We cannot rely on DECLHIDDEN to make this separation for us since it doesn't
79 * work with all GCC versions. So, we resort to old fashion precompiler hacking.
80 * @{
81 */
82# define supR3HardenedPathAppPrivateNoArch supR3HardenedStaticPathAppPrivateNoArch
83# define supR3HardenedPathAppPrivateArch supR3HardenedStaticPathAppPrivateArch
84# define supR3HardenedPathAppSharedLibs supR3HardenedStaticPathAppSharedLibs
85# define supR3HardenedPathAppDocs supR3HardenedStaticPathAppDocs
86# define supR3HardenedPathAppBin supR3HardenedStaticPathAppBin
87# define supR3HardenedPathFilename supR3HardenedStaticPathFilename
88# define supR3HardenedFatalV supR3HardenedStaticFatalV
89# define supR3HardenedFatal supR3HardenedStaticFatal
90# define supR3HardenedFatalMsgV supR3HardenedStaticFatalMsgV
91# define supR3HardenedFatalMsg supR3HardenedStaticFatalMsg
92# define supR3HardenedErrorV supR3HardenedStaticErrorV
93# define supR3HardenedError supR3HardenedStaticError
94# define supR3HardenedOpenLog supR3HardenedStaticOpenLog
95# define supR3HardenedLogV supR3HardenedStaticLogV
96# define supR3HardenedLog supR3HardenedStaticLog
97# define supR3HardenedLogFlush supR3HardenedStaticLogFlush
98# define supR3HardenedVerifyAll supR3HardenedStaticVerifyAll
99# define supR3HardenedVerifyFixedDir supR3HardenedStaticVerifyFixedDir
100# define supR3HardenedVerifyFixedFile supR3HardenedStaticVerifyFixedFile
101# define supR3HardenedVerifyDir supR3HardenedStaticVerifyDir
102# define supR3HardenedVerifyFile supR3HardenedStaticVerifyFile
103# define supR3HardenedGetPreInitData supR3HardenedStaticGetPreInitData
104# define supR3HardenedRecvPreInitData supR3HardenedStaticRecvPreInitData
105/** @} */
106#endif /* IN_SUP_HARDENED_R3 */
107
108
109/** @name CRT function mappings (not using CRT on Windows).
110 * @{
111 */
112#if defined(IN_SUP_HARDENED_R3) && defined(RT_OS_WINDOWS)
113# define SUP_HARDENED_NEED_CRT_FUNCTIONS
114DECLHIDDEN(int) suplibHardenedMemComp(void const *pvDst, const void *pvSrc, size_t cbToComp);
115DECLHIDDEN(void *) suplibHardenedMemCopy(void *pvDst, const void *pvSrc, size_t cbToCopy);
116DECLHIDDEN(void *) suplibHardenedMemSet(void *pvDst, int ch, size_t cbToSet);
117DECLHIDDEN(char *) suplibHardenedStrCopy(char *pszDst, const char *pszSrc);
118DECLHIDDEN(size_t) suplibHardenedStrLen(const char *psz);
119DECLHIDDEN(char *) suplibHardenedStrCat(char *pszDst, const char *pszSrc);
120DECLHIDDEN(int) suplibHardenedStrCmp(const char *psz1, const char *psz2);
121DECLHIDDEN(int) suplibHardenedStrNCmp(const char *psz1, const char *psz2, size_t cchMax);
122#else
123# undef SUP_HARDENED_NEED_CRT_FUNCTIONS
124# define suplibHardenedMemComp memcmp
125# define suplibHardenedMemCopy memcpy
126# define suplibHardenedMemSet memset
127# define suplibHardenedStrCopy strcpy
128# define suplibHardenedStrLen strlen
129# define suplibHardenedStrCat strcat
130# define suplibHardenedStrCmp strcmp
131# define suplibHardenedStrNCmp strncmp
132#endif
133DECLHIDDEN(DECL_NO_RETURN(void)) suplibHardenedExit(RTEXITCODE rcExit);
134DECLHIDDEN(void) suplibHardenedPrintF(const char *pszFormat, ...);
135DECLHIDDEN(void) suplibHardenedPrintFV(const char *pszFormat, va_list va);
136
137/** @} */
138
139/** Debug output macro. */
140#ifdef IN_SUP_HARDENED_R3
141# if defined(DEBUG_bird) && defined(RT_OS_WINDOWS)
142# define SUP_DPRINTF(a) do { supR3HardenedStaticLog a; suplibHardenedPrintF a; } while (0)
143# else
144# define SUP_DPRINTF(a) do { supR3HardenedStaticLog a; } while (0)
145# endif
146#else
147# if defined(DEBUG_bird) && defined(RT_OS_WINDOWS)
148# define SUP_DPRINTF(a) RTLogPrintf a
149# else
150# define SUP_DPRINTF(a) do { } while (0)
151# endif
152#endif
153
154
155/*******************************************************************************
156* Structures and Typedefs *
157*******************************************************************************/
158/**
159 * The type of an installed file.
160 */
161typedef enum SUPINSTFILETYPE
162{
163 kSupIFT_Invalid = 0,
164 kSupIFT_Exe,
165 kSupIFT_Dll,
166 kSupIFT_Rc,
167 kSupIFT_Sys,
168 kSupIFT_Script,
169 kSupIFT_Data,
170 kSupIFT_TestExe,
171 kSupIFT_TestDll,
172 kSupIFT_End
173} SUPINSTFILETYPE;
174
175/**
176 * Installation directory specifier.
177 */
178typedef enum SUPINSTDIR
179{
180 kSupID_Invalid = 0,
181 kSupID_AppBin,
182 kSupID_AppSharedLib,
183 kSupID_AppPrivArch,
184 kSupID_AppPrivArchComp,
185 kSupID_AppPrivNoArch,
186 kSupID_Testcase,
187#ifdef RT_OS_DARWIN
188 kSupID_AppMacHelper,
189#endif
190 kSupID_End
191} SUPINSTDIR;
192
193/**
194 * Installed file.
195 */
196typedef struct SUPINSTFILE
197{
198 /** File type. */
199 SUPINSTFILETYPE enmType;
200 /** Install directory. */
201 SUPINSTDIR enmDir;
202 /** Optional (true) or mandatory (false. */
203 bool fOptional;
204 /** File name. */
205 const char *pszFile;
206} SUPINSTFILE;
207typedef SUPINSTFILE *PSUPINSTFILE;
208typedef SUPINSTFILE const *PCSUPINSTFILE;
209
210/**
211 * Status data for a verified file.
212 */
213typedef struct SUPVERIFIEDFILE
214{
215 /** The file handle or descriptor. -1 if not open. */
216 intptr_t hFile;
217 /** Whether the file has been validated. */
218 bool fValidated;
219#ifdef RT_OS_WINDOWS
220 /** Whether we've checked the signature of the file. */
221 bool fCheckedSignature;
222#endif
223} SUPVERIFIEDFILE;
224typedef SUPVERIFIEDFILE *PSUPVERIFIEDFILE;
225typedef SUPVERIFIEDFILE const *PCSUPVERIFIEDFILE;
226
227/**
228 * Status data for a verified directory.
229 */
230typedef struct SUPVERIFIEDDIR
231{
232 /** The directory handle or descriptor. -1 if not open. */
233 intptr_t hDir;
234 /** Whether the directory has been validated. */
235 bool fValidated;
236} SUPVERIFIEDDIR;
237typedef SUPVERIFIEDDIR *PSUPVERIFIEDDIR;
238typedef SUPVERIFIEDDIR const *PCSUPVERIFIEDDIR;
239
240
241/**
242 * SUPLib instance data.
243 *
244 * This is data that is passed from the static to the dynamic SUPLib
245 * in a hardened setup.
246 */
247typedef struct SUPLIBDATA
248{
249 /** The device handle. */
250#if defined(RT_OS_WINDOWS)
251 void *hDevice;
252#else
253 int hDevice;
254#endif
255 /** Indicates whether we have unrestricted (true) or restricted access to the
256 * support device. */
257 bool fUnrestricted;
258 /** Set if we're in driverless mode. */
259 bool fDriverless;
260#if defined(RT_OS_DARWIN)
261 /** The connection to the VBoxSupDrv service. */
262 uintptr_t uConnection;
263#elif defined(RT_OS_LINUX)
264 /** Indicates whether madvise(,,MADV_DONTFORK) works. */
265 bool fSysMadviseWorks;
266#elif defined(RT_OS_SOLARIS)
267 /** Extra dummy file descriptors to prevent growing file-descriptor table on
268 * clean up (see @bugref{4650}). */
269 int ahDummy[SUPLIB_FLT_DUMMYFILES];
270#elif defined(RT_OS_WINDOWS)
271#endif
272} SUPLIBDATA;
273/** Pointer to the pre-init data. */
274typedef SUPLIBDATA *PSUPLIBDATA;
275/** Pointer to const pre-init data. */
276typedef SUPLIBDATA const *PCSUPLIBDATA;
277
278/** The NIL value of SUPLIBDATA::hDevice. */
279#if defined(RT_OS_WINDOWS)
280# define SUP_HDEVICE_NIL NULL
281#else
282# define SUP_HDEVICE_NIL (-1)
283#endif
284
285
286/**
287 * Pre-init data that is handed over from the hardened executable stub.
288 */
289typedef struct SUPPREINITDATA
290{
291 /** Magic value (SUPPREINITDATA_MAGIC). */
292 uint32_t u32Magic;
293 /** The SUPLib instance data. */
294 SUPLIBDATA Data;
295 /** The number of entries in paInstallFiles and paVerifiedFiles. */
296 size_t cInstallFiles;
297 /** g_aSupInstallFiles. */
298 PCSUPINSTFILE paInstallFiles;
299 /** g_aSupVerifiedFiles. */
300 PCSUPVERIFIEDFILE paVerifiedFiles;
301 /** The number of entries in paVerifiedDirs. */
302 size_t cVerifiedDirs;
303 /** g_aSupVerifiedDirs. */
304 PCSUPVERIFIEDDIR paVerifiedDirs;
305 /** Magic value (SUPPREINITDATA_MAGIC). */
306 uint32_t u32EndMagic;
307} SUPPREINITDATA;
308typedef SUPPREINITDATA *PSUPPREINITDATA;
309typedef SUPPREINITDATA const *PCSUPPREINITDATA;
310
311/** Magic value for SUPPREINITDATA::u32Magic and SUPPREINITDATA::u32EndMagic. */
312#define SUPPREINITDATA_MAGIC UINT32_C(0xbeef0001)
313
314/** @copydoc supR3PreInit */
315typedef DECLCALLBACKTYPE(int, FNSUPR3PREINIT,(PSUPPREINITDATA pPreInitData, uint32_t fFlags));
316/** Pointer to supR3PreInit. */
317typedef FNSUPR3PREINIT *PFNSUPR3PREINIT;
318
319/** The current SUPR3HardenedMain state / location. */
320typedef enum SUPR3HARDENEDMAINSTATE
321{
322 SUPR3HARDENEDMAINSTATE_NOT_YET_CALLED = 0,
323 SUPR3HARDENEDMAINSTATE_WIN_EARLY_INIT_CALLED,
324 SUPR3HARDENEDMAINSTATE_WIN_EARLY_IMPORTS_RESOLVED,
325 SUPR3HARDENEDMAINSTATE_WIN_EARLY_STUB_DEVICE_OPENED,
326 SUPR3HARDENEDMAINSTATE_WIN_EARLY_REAL_DEVICE_OPENED,
327 SUPR3HARDENEDMAINSTATE_WIN_EP_CALLED,
328 SUPR3HARDENEDMAINSTATE_WIN_IMPORTS_RESOLVED,
329 SUPR3HARDENEDMAINSTATE_WIN_VERSION_INITIALIZED,
330 SUPR3HARDENEDMAINSTATE_WIN_VERIFY_TRUST_READY,
331 SUPR3HARDENEDMAINSTATE_HARDENED_MAIN_CALLED,
332 SUPR3HARDENEDMAINSTATE_INIT_RUNTIME,
333 SUPR3HARDENEDMAINSTATE_GET_TRUSTED_MAIN,
334 SUPR3HARDENEDMAINSTATE_CALLED_TRUSTED_MAIN,
335 SUPR3HARDENEDMAINSTATE_END,
336 SUPR3HARDENEDMAINSTATE_32BIT_HACK = 0x7fffffff
337} SUPR3HARDENEDMAINSTATE;
338
339
340/*******************************************************************************
341* Global Variables *
342*******************************************************************************/
343extern DECL_HIDDEN_DATA(uint32_t) g_u32Cookie;
344extern DECL_HIDDEN_DATA(uint32_t) g_u32SessionCookie;
345extern DECL_HIDDEN_DATA(uint32_t) g_uSupSessionVersion;
346extern DECL_HIDDEN_DATA(SUPLIBDATA) g_supLibData;
347extern DECL_HIDDEN_DATA(uint32_t) g_uSupFakeMode;
348extern DECL_HIDDEN_DATA(PSUPGLOBALINFOPAGE) g_pSUPGlobalInfoPageR0;
349#ifdef VBOX_INCLUDED_SRC_Support_SUPDrvIOC_h
350extern DECL_HIDDEN_DATA(PSUPQUERYFUNCS) g_pSupFunctions;
351#endif
352extern DECL_HIDDEN_DATA(SUPR3HARDENEDMAINSTATE) g_enmSupR3HardenedMainState;
353#ifdef RT_OS_WINDOWS
354extern DECL_HIDDEN_DATA(bool) g_fSupEarlyProcessInit;
355#endif
356
357
358/*******************************************************************************
359* OS Specific Function *
360*******************************************************************************/
361RT_C_DECLS_BEGIN
362DECLHIDDEN(int) suplibOsInstall(void);
363DECLHIDDEN(int) suplibOsUninstall(void);
364DECLHIDDEN(int) suplibOsInit(PSUPLIBDATA pThis, bool fPreInited, uint32_t fFlags, SUPINITOP *penmWhat, PRTERRINFO pErrInfo);
365DECLHIDDEN(int) suplibOsTerm(PSUPLIBDATA pThis);
366DECLHIDDEN(int) suplibOsHardenedVerifyInit(void);
367DECLHIDDEN(int) suplibOsHardenedVerifyTerm(void);
368DECLHIDDEN(int) suplibOsIOCtl(PSUPLIBDATA pThis, uintptr_t uFunction, void *pvReq, size_t cbReq);
369DECLHIDDEN(int) suplibOsIOCtlFast(PSUPLIBDATA pThis, uintptr_t uFunction, uintptr_t idCpu);
370DECLHIDDEN(int) suplibOsPageAlloc(PSUPLIBDATA pThis, size_t cPages, uint32_t fFlags, void **ppvPages);
371DECLHIDDEN(int) suplibOsPageFree(PSUPLIBDATA pThis, void *pvPages, size_t cPages);
372DECLHIDDEN(int) suplibOsQueryVTxSupported(const char **ppszWhy);
373DECLHIDDEN(bool) suplibOsIsNemSupportedWhenNoVtxOrAmdV(void);
374
375
376/**
377 * Performs the pre-initialization of the support library.
378 *
379 * This is dynamically resolved and invoked by the static library before it
380 * calls RTR3InitEx and thereby SUPR3Init.
381 *
382 * @returns IPRT status code.
383 * @param pPreInitData The pre init data.
384 * @param fFlags The SUPR3HardenedMain flags.
385 */
386DECL_NOTHROW(DECLEXPORT(int)) supR3PreInit(PSUPPREINITDATA pPreInitData, uint32_t fFlags);
387
388
389/** @copydoc RTPathAppPrivateNoArch */
390DECLHIDDEN(int) supR3HardenedPathAppPrivateNoArch(char *pszPath, size_t cchPath);
391/** @copydoc RTPathAppPrivateArch */
392DECLHIDDEN(int) supR3HardenedPathAppPrivateArch(char *pszPath, size_t cchPath);
393/** @copydoc RTPathSharedLibs */
394DECLHIDDEN(int) supR3HardenedPathAppSharedLibs(char *pszPath, size_t cchPath);
395/** @copydoc RTPathAppDocs */
396DECLHIDDEN(int) supR3HardenedPathAppDocs(char *pszPath, size_t cchPath);
397/** @copydoc RTPathExecDir */
398DECLHIDDEN(int) supR3HardenedPathAppBin(char *pszPath, size_t cchPath);
399/** @copydoc RTPathFilename */
400DECLHIDDEN(char *) supR3HardenedPathFilename(const char *pszPath);
401
402/**
403 * Display a fatal error and try call TrustedError or quit.
404 */
405DECL_NO_RETURN(DECLHIDDEN(void)) supR3HardenedFatalMsgV(const char *pszWhere, SUPINITOP enmWhat, int rc,
406 const char *pszMsgFmt, va_list va);
407
408/**
409 * Display a fatal error and try call TrustedError or quit.
410 */
411DECL_NO_RETURN(DECLHIDDEN(void)) supR3HardenedFatalMsg(const char *pszWhere, SUPINITOP enmWhat, int rc,
412 const char *pszMsgFmt, ...);
413
414/**
415 * Display a fatal error and quit.
416 */
417DECL_NO_RETURN(DECLHIDDEN(void)) supR3HardenedFatalV(const char *pszFormat, va_list va);
418
419/**
420 * Display a fatal error and quit.
421 */
422DECL_NO_RETURN(DECLHIDDEN(void)) supR3HardenedFatal(const char *pszFormat, ...);
423
424/**
425 * Display an error which may or may not be fatal.
426 */
427DECLHIDDEN(int) supR3HardenedErrorV(int rc, bool fFatal, const char *pszFormat, va_list va);
428
429/**
430 * Display an error which may or may not be fatal.
431 */
432DECLHIDDEN(int) supR3HardenedError(int rc, bool fFatal, const char *pszFormat, ...);
433
434/**
435 * Open any startup log file specified in the argument.
436 */
437DECLHIDDEN(void) supR3HardenedOpenLog(int *pcArgs, char **papszArgs);
438
439/**
440 * Write to the startup log file.
441 */
442DECLHIDDEN(void) supR3HardenedLogV(const char *pszFormat, va_list va);
443
444/**
445 * Write to the startup log file.
446 */
447DECLHIDDEN(void) supR3HardenedLog(const char *pszFormat, ...);
448
449/**
450 * Flushes the log file.
451 */
452DECLHIDDEN(void) supR3HardenedLogFlush(void);
453
454
455DECLHIDDEN(int) supR3HardenedVerifyAll(bool fFatal, const char *pszProgName, const char *pszExePath, uint32_t fMainFlags);
456DECLHIDDEN(int) supR3HardenedVerifyFixedDir(SUPINSTDIR enmDir, bool fFatal, PCSUPINSTFILE pFile);
457DECLHIDDEN(int) supR3HardenedVerifyFixedFile(const char *pszFilename, bool fFatal);
458DECLHIDDEN(int) supR3HardenedVerifyDir(const char *pszDirPath, bool fRecursive, bool fCheckFiles, PRTERRINFO pErrInfo);
459DECLHIDDEN(int) supR3HardenedVerifyFile(const char *pszFilename, RTHCUINTPTR hNativeFile, bool fMaybe3rdParty,
460 PRTERRINFO pErrInfo);
461#if defined(RT_OS_DARWIN) || defined(RT_OS_LINUX)
462DECLHIDDEN(int) supR3HardenedVerifyFileFollowSymlinks(const char *pszFilename, RTHCUINTPTR hNativeFile,
463 bool fMaybe3rdParty, PRTERRINFO pErrInfo);
464#endif
465DECLHIDDEN(void) supR3HardenedGetPreInitData(PSUPPREINITDATA pPreInitData);
466DECLHIDDEN(int) supR3HardenedRecvPreInitData(PCSUPPREINITDATA pPreInitData);
467
468#ifdef RT_OS_WINDOWS
469DECLHIDDEN(void) supR3HardenedWinInit(uint32_t fFlags, bool fAvastKludge);
470DECLHIDDEN(void) supR3HardenedWinInitAppBin(uint32_t fFlags);
471DECLHIDDEN(void) supR3HardenedWinInitVersion(bool fEarlyInit);
472DECLHIDDEN(void) supR3HardenedWinInitImports(void);
473DECLHIDDEN(void) supR3HardenedWinModifyDllSearchPath(uint32_t fFlags, const char *pszAppBinPath);
474# ifdef IPRT_INCLUDED_nt_nt_h
475DECLHIDDEN(void) supR3HardenedWinGetVeryEarlyImports(uintptr_t uNtDllAddr, PFNNTWAITFORSINGLEOBJECT *ppfnNtWaitForSingleObject,
476 PFNNTSETEVENT *ppfnNtSetEvent);
477# endif
478DECLHIDDEN(void) supR3HardenedWinInitImportsEarly(uintptr_t uNtDllAddr);
479DECLHIDDEN(void) supR3HardenedWinInitSyscalls(bool fReportErrors, PRTERRINFO pErrInfo);
480DECLHIDDEN(PFNRT) supR3HardenedWinGetRealDllSymbol(const char *pszDll, const char *pszProcedure);
481DECLHIDDEN(void) supR3HardenedWinEnableThreadCreation(void);
482DECLHIDDEN(void) supR3HardenedWinResolveVerifyTrustApiAndHookThreadCreation(const char *pszProgName);
483DECLHIDDEN(void) supR3HardenedWinFlushLoaderCache();
484DECLHIDDEN(bool) supR3HardenedWinIsReSpawnNeeded(int iWhich, int cArgs, char **papszArgs);
485DECLHIDDEN(int) supR3HardenedWinReSpawn(int iWhich);
486# ifdef _WINDEF_
487DECLHIDDEN(void) supR3HardenedWinCreateParentWatcherThread(HMODULE hVBoxRT);
488# endif
489DECLHIDDEN(void *) supR3HardenedWinLoadLibrary(const char *pszName, bool fSystem32Only, uint32_t fMainFlags);
490extern RTUTF16 g_wszSupLibHardenedExePath[1024];
491# ifdef RTPATH_MAX
492extern char g_szSupLibHardenedExePath[RTPATH_MAX];
493# endif
494DECLHIDDEN(void) supR3HardenedWinCompactHeaps(void);
495DECLHIDDEN(void) supR3HardenedMainOpenDevice(void);
496DECLHIDDEN(char *) supR3HardenedWinReadErrorInfoDevice(char *pszErrorInfo, size_t cbErrorInfo, const char *pszPrefix);
497DECLHIDDEN(void) supR3HardenedWinReportErrorToParent(const char *pszWhere, SUPINITOP enmWhat, int rc,
498 const char *pszFormat, va_list va);
499#else /* !RT_OS_WINDOWS */
500# if !defined(RT_OS_DARWIN)
501DECLHIDDEN(void) supR3HardenedPosixInit(void);
502# else /* !RT_OS_DARWIN */
503DECLHIDDEN(void) supR3HardenedDarwinInit(void);
504#endif /* !RT_OS_DARWIN */
505#endif /* !RT_OS_WINDOWS */
506
507SUPR3DECL(int) supR3PageLock(void *pvStart, size_t cPages, PSUPPAGE paPages);
508SUPR3DECL(int) supR3PageUnlock(void *pvStart);
509
510RT_C_DECLS_END
511
512
513#endif /* !VBOX_INCLUDED_SRC_Support_SUPLibInternal_h */
514
Note: See TracBrowser for help on using the repository browser.

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