123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- /*
- * Memory DLL loading code
- * Version 0.0.4
- *
- * Copyright (c) 2004-2015 by Joachim Bauch / mail@joachim-bauch.de
- * http://www.joachim-bauch.de
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 2.0 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is MemoryModule.h
- *
- * The Initial Developer of the Original Code is Joachim Bauch.
- *
- * Portions created by Joachim Bauch are Copyright (C) 2004-2015
- * Joachim Bauch. All Rights Reserved.
- *
- */
- #ifndef __MEMORY_MODULE_HEADER
- #define __MEMORY_MODULE_HEADER
- #include <windows.h>
- typedef void *HMEMORYMODULE;
- typedef void *HMEMORYRSRC;
- typedef void *HCUSTOMMODULE;
- #ifdef __cplusplus
- extern "C" {
- #endif
- typedef HCUSTOMMODULE (*CustomLoadLibraryFunc)(LPCSTR, void *);
- typedef FARPROC (*CustomGetProcAddressFunc)(HCUSTOMMODULE, LPCSTR, void *);
- typedef void (*CustomFreeLibraryFunc)(HCUSTOMMODULE, void *);
- /**
- * Load EXE/DLL from memory location with the given size.
- *
- * All dependencies are resolved using default LoadLibrary/GetProcAddress
- * calls through the Windows API.
- */
- HMEMORYMODULE MemoryLoadLibrary(const void *, size_t);
- /**
- * Load EXE/DLL from memory location with the given size using custom dependency
- * resolvers.
- *
- * Dependencies will be resolved using passed callback methods.
- */
- HMEMORYMODULE MemoryLoadLibraryEx(const void *, size_t,
- CustomLoadLibraryFunc,
- CustomGetProcAddressFunc,
- CustomFreeLibraryFunc,
- void *);
- /**
- * Get address of exported method. Supports loading both by name and by
- * ordinal value.
- */
- FARPROC MemoryGetProcAddress(HMEMORYMODULE, LPCSTR);
- /**
- * Free previously loaded EXE/DLL.
- */
- void MemoryFreeLibrary(HMEMORYMODULE);
- /**
- * Execute entry point (EXE only). The entry point can only be executed
- * if the EXE has been loaded to the correct base address or it could
- * be relocated (i.e. relocation information have not been stripped by
- * the linker).
- *
- * Important: calling this function will not return, i.e. once the loaded
- * EXE finished running, the process will terminate.
- *
- * Returns a negative value if the entry point could not be executed.
- */
- int MemoryCallEntryPoint(HMEMORYMODULE);
- /**
- * Find the location of a resource with the specified type and name.
- */
- HMEMORYRSRC MemoryFindResource(HMEMORYMODULE, LPCTSTR, LPCTSTR);
- /**
- * Find the location of a resource with the specified type, name and language.
- */
- HMEMORYRSRC MemoryFindResourceEx(HMEMORYMODULE, LPCTSTR, LPCTSTR, WORD);
- /**
- * Get the size of the resource in bytes.
- */
- DWORD MemorySizeofResource(HMEMORYMODULE, HMEMORYRSRC);
- /**
- * Get a pointer to the contents of the resource.
- */
- LPVOID MemoryLoadResource(HMEMORYMODULE, HMEMORYRSRC);
- /**
- * Load a string resource.
- */
- int MemoryLoadString(HMEMORYMODULE, UINT, LPTSTR, int);
- /**
- * Load a string resource with a given language.
- */
- int MemoryLoadStringEx(HMEMORYMODULE, UINT, LPTSTR, int, WORD);
- /**
- * Default implementation of CustomLoadLibraryFunc that calls LoadLibraryA
- * internally to load an additional libary.
- *
- * This is the default as used by MemoryLoadLibrary.
- */
- HCUSTOMMODULE MemoryDefaultLoadLibrary(LPCSTR, void *);
- /**
- * Default implementation of CustomGetProcAddressFunc that calls GetProcAddress
- * internally to get the address of an exported function.
- *
- * This is the default as used by MemoryLoadLibrary.
- */
- FARPROC MemoryDefaultGetProcAddress(HCUSTOMMODULE, LPCSTR, void *);
- /**
- * Default implementation of CustomFreeLibraryFunc that calls FreeLibrary
- * internally to release an additional libary.
- *
- * This is the default as used by MemoryLoadLibrary.
- */
- void MemoryDefaultFreeLibrary(HCUSTOMMODULE, void *);
- #ifdef __cplusplus
- }
- #endif
- #endif // __MEMORY_MODULE_HEADER
|