diff options
Diffstat (limited to 'src/pal/src/include/pal/module.h')
-rw-r--r-- | src/pal/src/include/pal/module.h | 203 |
1 files changed, 203 insertions, 0 deletions
diff --git a/src/pal/src/include/pal/module.h b/src/pal/src/include/pal/module.h new file mode 100644 index 0000000000..95fa605c21 --- /dev/null +++ b/src/pal/src/include/pal/module.h @@ -0,0 +1,203 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +/*++ + + + +Module Name: + + include/pal/module.h + +Abstract: + Header file for modle management utilities. + + + +--*/ + +#ifndef _PAL_MODULE_H_ +#define _PAL_MODULE_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif // __cplusplus + +typedef BOOL (__stdcall *PDLLMAIN)(HINSTANCE, DWORD, LPVOID); /* entry point of module */ +typedef HINSTANCE (PALAPI *PREGISTER_MODULE)(LPCSTR); /* used to create the HINSTANCE for above DLLMain entry point */ +typedef VOID (PALAPI *PUNREGISTER_MODULE)(HINSTANCE); /* used to cleanup the HINSTANCE for above DLLMain entry point */ + +typedef struct _MODSTRUCT +{ + HMODULE self; /* circular reference to this module */ + void *dl_handle; /* handle returned by dlopen() */ + HINSTANCE hinstance; /* handle returned by PAL_RegisterLibrary */ + LPWSTR lib_name; /* full path of module */ + INT refcount; /* reference count */ + /* -1 means infinite reference count - module is never released */ + BOOL threadLibCalls; /* TRUE for DLL_THREAD_ATTACH/DETACH notifications enabled, FALSE if they are disabled */ + +#if RETURNS_NEW_HANDLES_ON_REPEAT_DLOPEN + ino_t inode; + dev_t device; +#endif + + PDLLMAIN pDllMain; /* entry point of module */ + + /* reference to next and previous modules in list (in load order) */ + struct _MODSTRUCT *next; + struct _MODSTRUCT *prev; +} MODSTRUCT; + + +/*++ +Function : + LOADInitializeModules + + Initialize the process-wide list of modules + +Parameters : + None + +Return value : + TRUE on success, FALSE on failure + +--*/ +BOOL LOADInitializeModules(); + +/*++ +Function : + LOADSetExeName + + Set the exe name path + +Parameters : + LPWSTR man exe path and name + +Return value : + TRUE if initialization succeedded + FALSE otherwise + +--*/ +BOOL LOADSetExeName(LPWSTR name); + +/*++ +Function : + LOADCallDllMain + + Call DllMain for all modules (that have one) with the given "fwReason" + +Parameters : + DWORD dwReason : parameter to pass down to DllMain, one of DLL_PROCESS_ATTACH, DLL_PROCESS_DETACH, + DLL_THREAD_ATTACH, DLL_THREAD_DETACH + + LPVOID lpReserved : parameter to pass down to DllMain + If dwReason is DLL_PROCESS_ATTACH, lpvReserved is NULL for dynamic loads and non-NULL for static loads. + If dwReason is DLL_PROCESS_DETACH, lpvReserved is NULL if DllMain has been called by using FreeLibrary + and non-NULL if DllMain has been called during process termination. + +(no return value) + +Notes : + This is used to send DLL_THREAD_*TACH messages to modules +--*/ +void LOADCallDllMain(DWORD dwReason, LPVOID lpReserved); + +/*++ +Function: + LockModuleList + +Abstract + Enter the critical section associated to the module list + +Parameter + void + +Return + void +--*/ +void LockModuleList(); + +/*++ +Function: + UnlockModuleList + +Abstract + Leave the critical section associated to the module list + +Parameter + void + +Return + void +--*/ +void UnlockModuleList(); + +/*++ +Function: + PAL_LOADLoadPEFile + +Abstract + Loads a PE file into memory. Properly maps all of the sections in the PE file. Returns a pointer to the + loaded base. + +Parameters: + IN hFile - The file to load + +Return value: + A valid base address if successful. + 0 if failure +--*/ +void * PAL_LOADLoadPEFile(HANDLE hFile); + +/*++ + PAL_LOADUnloadPEFile + + Unload a PE file that was loaded by PAL_LOADLoadPEFile(). + +Parameters: + IN ptr - the file pointer returned by PAL_LOADLoadPEFile() + +Return value: + TRUE - success + FALSE - failure (incorrect ptr, etc.) +--*/ +BOOL PAL_LOADUnloadPEFile(void * ptr); + +/*++ + LOADInitializeCoreCLRModule + + Run the initialization methods for CoreCLR module. + +Parameters: + None + +Return value: + TRUE if successful + FALSE if failure +--*/ +BOOL LOADInitializeCoreCLRModule(); + +/*++ +Function : + LOADGetPalLibrary + + Load and initialize the PAL module. + +Parameters : + None + +Return value : + handle to loaded module + +--*/ +MODSTRUCT *LOADGetPalLibrary(); + +#ifdef __cplusplus +} +#endif // __cplusplus + +#endif /* _PAL_MODULE_H_ */ + |