1
0
mirror of https://github.com/UzixLS/KernelEx.git synced 2025-07-18 23:11:19 +03:00
Files
KernelEx/core/apilib.h
2018-11-03 16:21:13 +03:00

68 lines
1.9 KiB
C++
Executable File

/*
* KernelEx
* Copyright (C) 2008-2009, Xeno86
*
* This file is part of KernelEx source code.
*
* KernelEx 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; version 2 of the License.
*
* KernelEx 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 GNU Make; see the file COPYING. If not, write to
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/
#ifndef __APILIB_H
#define __APILIB_H
#include "kexcoresdk.h"
struct ApiLibrary
{
apilib_api_table* api_tables;
HMODULE mod_handle;
int index;
char apilib_name[1]; // variable size array
bool is_shared() const { return (DWORD) mod_handle >= 0x80000000; }
void get_dll_path(char* out);
};
class ApiLibraryManager
{
public:
ApiLibraryManager();
~ApiLibraryManager();
bool load_apilib(const char* apilib_name);
ApiLibrary* get_apilib(const char* apilib_name);
ApiLibrary* get_apilib_by_index(int index);
protected:
private:
bool initialized;
ApiLibrary** apilib_ptrs;
int apilib_cnt;
bool initialize();
bool are_api_tables_sorted(const apilib_api_table* tab);
apilib_api_table* make_shared_api_tables(const apilib_api_table* in);
int required_api_table_space(const apilib_api_table* tab, bool copy_strings);
bool add_overridden_module(const char* mod);
bool parse_system_dll(const char* dll_name, apilib_api_table* api_tab);
};
extern ApiLibraryManager apilibmgr;
extern const char** overridden_module_names;
extern int overridden_module_count;
#endif