New Features:
Viewport fix without patching (1440p+ issues) Now default to d3d9.dll wrapper, delete old dinput8.dll Possibility to use DXVK on Windows - rename 32bit DXVK d3d9.dll as dxvk.dll Disable triple buffering by default for DXVK Code refactoring MinHook as git submodule
This commit is contained in:
parent
40c3bf9146
commit
e0e756333f
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[submodule "MinHook"]
|
||||||
|
path = MinHook
|
||||||
|
url = https://github.com/TsudaKageyu/minhook.git
|
|
@ -13,7 +13,6 @@
|
||||||
class Logger
|
class Logger
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
std::mutex printLogMutex;
|
|
||||||
Logger(const Logger&) = delete;
|
Logger(const Logger&) = delete;
|
||||||
const Logger& operator=(Logger& other) = delete;
|
const Logger& operator=(Logger& other) = delete;
|
||||||
|
|
||||||
|
@ -28,6 +27,8 @@ public:
|
||||||
CloseHandle(m_file);
|
CloseHandle(m_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::mutex& writeMutex() const { return m_writeMutex; }
|
||||||
|
|
||||||
static Logger& Logger::Get()
|
static Logger& Logger::Get()
|
||||||
{
|
{
|
||||||
static Logger instance;
|
static Logger instance;
|
||||||
|
@ -111,6 +112,7 @@ private:
|
||||||
SYSTEMTIME m_systime;
|
SYSTEMTIME m_systime;
|
||||||
HANDLE m_console;
|
HANDLE m_console;
|
||||||
HANDLE m_file;
|
HANDLE m_file;
|
||||||
|
mutable std::mutex m_writeMutex;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline void LogFile(const std::string& logname)
|
inline void LogFile(const std::string& logname)
|
||||||
|
@ -125,7 +127,7 @@ inline void LogConsole(const char* title = nullptr)
|
||||||
|
|
||||||
inline void PrintLog(const char* format, ...)
|
inline void PrintLog(const char* format, ...)
|
||||||
{
|
{
|
||||||
const std::lock_guard<std::mutex> lock(Logger::Get().printLogMutex);
|
const std::lock_guard<std::mutex> lock(Logger::Get().writeMutex());
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, format);
|
va_start(args, format);
|
||||||
Logger::Get().Print(format, args);
|
Logger::Get().Print(format, args);
|
||||||
|
|
42
Common/MemPatch.h
Normal file
42
Common/MemPatch.h
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
#pragma once
|
||||||
|
#include <Windows.h>
|
||||||
|
|
||||||
|
namespace MemPatch
|
||||||
|
{
|
||||||
|
class CUnprotect
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CUnprotect(void* address, unsigned long size) : m_adress(address), m_size(size)
|
||||||
|
{
|
||||||
|
VirtualProtect(m_adress, m_size, PAGE_EXECUTE_READWRITE, &m_oldprotect);
|
||||||
|
}
|
||||||
|
|
||||||
|
~CUnprotect()
|
||||||
|
{
|
||||||
|
DWORD oldProtect;
|
||||||
|
VirtualProtect(m_adress, m_size, m_oldprotect, &oldProtect);
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
void* m_adress;
|
||||||
|
unsigned long m_size;
|
||||||
|
DWORD m_oldprotect;
|
||||||
|
};
|
||||||
|
|
||||||
|
__forceinline static void Patch(void* address, void* data, unsigned long size)
|
||||||
|
{
|
||||||
|
CUnprotect unp(address, size);
|
||||||
|
memcpy(address, data, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
__forceinline static void Fill(void* address, unsigned char byte, unsigned long size)
|
||||||
|
{
|
||||||
|
CUnprotect unp(address, size);
|
||||||
|
memset(address, byte, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
__forceinline static void Nop(void* address, unsigned long size)
|
||||||
|
{
|
||||||
|
Fill(address, 0x90, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1422,7 +1422,7 @@ CSimpleIniTempl<SI_CHAR,SI_STRLESS,SI_CONVERTER>::LoadFile(
|
||||||
}
|
}
|
||||||
|
|
||||||
// allocate and ensure NULL terminated
|
// allocate and ensure NULL terminated
|
||||||
char * pData = new char[lSize+1];
|
char * pData = new(std::nothrow) char[lSize+1];
|
||||||
if (!pData) {
|
if (!pData) {
|
||||||
return SI_NOMEM;
|
return SI_NOMEM;
|
||||||
}
|
}
|
||||||
|
@ -1471,7 +1471,7 @@ CSimpleIniTempl<SI_CHAR,SI_STRLESS,SI_CONVERTER>::LoadData(
|
||||||
|
|
||||||
// allocate memory for the data, ensure that there is a NULL
|
// allocate memory for the data, ensure that there is a NULL
|
||||||
// terminator wherever the converted data ends
|
// terminator wherever the converted data ends
|
||||||
SI_CHAR * pData = new SI_CHAR[uLen+1];
|
SI_CHAR * pData = new(std::nothrow) SI_CHAR[uLen+1];
|
||||||
if (!pData) {
|
if (!pData) {
|
||||||
return SI_NOMEM;
|
return SI_NOMEM;
|
||||||
}
|
}
|
||||||
|
@ -1896,7 +1896,7 @@ CSimpleIniTempl<SI_CHAR,SI_STRLESS,SI_CONVERTER>::CopyString(
|
||||||
for ( ; a_pString[uLen]; ++uLen) /*loop*/ ;
|
for ( ; a_pString[uLen]; ++uLen) /*loop*/ ;
|
||||||
}
|
}
|
||||||
++uLen; // NULL character
|
++uLen; // NULL character
|
||||||
SI_CHAR * pCopy = new SI_CHAR[uLen];
|
SI_CHAR * pCopy = new(std::nothrow) SI_CHAR[uLen];
|
||||||
if (!pCopy) {
|
if (!pCopy) {
|
||||||
return SI_NOMEM;
|
return SI_NOMEM;
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,14 +62,18 @@ typedef BOOL(WINAPI* GetProductInfo_t)(DWORD dwOSMajorVersion, DWORD dwOSMinorVe
|
||||||
|
|
||||||
inline BOOL MyGetVersionExA(OSVERSIONINFOEXA* lpVersionInformation)
|
inline BOOL MyGetVersionExA(OSVERSIONINFOEXA* lpVersionInformation)
|
||||||
{
|
{
|
||||||
GetVersionExA_t RealGetVersionExA = (GetVersionExA_t)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "GetVersionExA");
|
HMODULE hkernel = GetModuleHandle(TEXT("kernel32.dll"));
|
||||||
|
if (!hkernel) return FALSE;
|
||||||
|
GetVersionExA_t RealGetVersionExA = (GetVersionExA_t)GetProcAddress(hkernel, "GetVersionExA");
|
||||||
if (!RealGetVersionExA) return FALSE;
|
if (!RealGetVersionExA) return FALSE;
|
||||||
return RealGetVersionExA(lpVersionInformation);
|
return RealGetVersionExA(lpVersionInformation);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline BOOL MyGetProductInfo(DWORD dwOSMajorVersion, DWORD dwOSMinorVersion, DWORD dwSpMajorVersion, DWORD dwSpMinorVersion, PDWORD pdwReturnedProductType)
|
inline BOOL MyGetProductInfo(DWORD dwOSMajorVersion, DWORD dwOSMinorVersion, DWORD dwSpMajorVersion, DWORD dwSpMinorVersion, PDWORD pdwReturnedProductType)
|
||||||
{
|
{
|
||||||
GetProductInfo_t RealGetProductInfo = (GetProductInfo_t)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "GetProductInfo");
|
HMODULE hkernel = GetModuleHandle(TEXT("kernel32.dll"));
|
||||||
|
if (!hkernel) return FALSE;
|
||||||
|
GetProductInfo_t RealGetProductInfo = (GetProductInfo_t)GetProcAddress(hkernel, "GetProductInfo");
|
||||||
if (!RealGetProductInfo) return FALSE;
|
if (!RealGetProductInfo) return FALSE;
|
||||||
return RealGetProductInfo(dwOSMajorVersion, dwOSMinorVersion, dwSpMajorVersion, dwSpMinorVersion, pdwReturnedProductType);
|
return RealGetProductInfo(dwOSMajorVersion, dwOSMinorVersion, dwSpMajorVersion, dwSpMinorVersion, pdwReturnedProductType);
|
||||||
}
|
}
|
||||||
|
|
1
MinHook
Submodule
1
MinHook
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 423d1e45af2ed2719a5c31e990e935ef301ed9c3
|
|
@ -1,22 +0,0 @@
|
||||||
# EditorConfig is awesome: http://EditorConfig.org
|
|
||||||
|
|
||||||
# top-most EditorConfig file
|
|
||||||
root = true
|
|
||||||
|
|
||||||
# Windows-style newlines with a newline ending every file
|
|
||||||
[*]
|
|
||||||
end_of_line = crlf
|
|
||||||
insert_final_newline = true
|
|
||||||
|
|
||||||
# 4 space indentation
|
|
||||||
[*.{c,h,def}]
|
|
||||||
indent_style = space
|
|
||||||
indent_size = 4
|
|
||||||
|
|
||||||
# Trim trailing whitespaces
|
|
||||||
[*.{c,h,def,txt}]
|
|
||||||
trim_trailing_whitespace = true
|
|
||||||
|
|
||||||
# UTF-8 with BOM
|
|
||||||
[*.{c,h,def,txt}]
|
|
||||||
charset=utf-8-bom
|
|
43
MinHook/.gitignore
vendored
43
MinHook/.gitignore
vendored
|
@ -1,43 +0,0 @@
|
||||||
#OS junk files
|
|
||||||
[Tt]humbs.db
|
|
||||||
*.DS_Store
|
|
||||||
|
|
||||||
#Visual Studio files
|
|
||||||
*.[Oo]bj
|
|
||||||
*.user
|
|
||||||
*.aps
|
|
||||||
*.pch
|
|
||||||
*.vspscc
|
|
||||||
*.vssscc
|
|
||||||
*_i.c
|
|
||||||
*_p.c
|
|
||||||
*.ncb
|
|
||||||
*.suo
|
|
||||||
*.tlb
|
|
||||||
*.tlh
|
|
||||||
*.bak
|
|
||||||
*.[Cc]ache
|
|
||||||
*.ilk
|
|
||||||
*.log
|
|
||||||
*.sbr
|
|
||||||
*.sdf
|
|
||||||
*.opensdf
|
|
||||||
*.unsuccessfulbuild
|
|
||||||
ipch/
|
|
||||||
obj/
|
|
||||||
[Ll]ib
|
|
||||||
[Bb]in
|
|
||||||
[Dd]ebug*/
|
|
||||||
[Rr]elease*/
|
|
||||||
Ankh.NoLoad
|
|
||||||
*.VC.db
|
|
||||||
|
|
||||||
#GCC files
|
|
||||||
*.o
|
|
||||||
*.d
|
|
||||||
*.res
|
|
||||||
*.dll
|
|
||||||
*.a
|
|
||||||
|
|
||||||
#Visual Studio Code files
|
|
||||||
.vscode/
|
|
|
@ -1,8 +0,0 @@
|
||||||
Tsuda Kageyu <tsuda.kageyu@gmail.com>
|
|
||||||
Creator, maintainer
|
|
||||||
|
|
||||||
Michael Maltsev <leahcimmar@gmail.com>
|
|
||||||
Added "Queue" functions. A lot of bug fixes.
|
|
||||||
|
|
||||||
Andrey Unis <uniskz@gmail.com>
|
|
||||||
Rewrote the hook engine in plain C.
|
|
|
@ -1,81 +0,0 @@
|
||||||
MinHook - The Minimalistic API Hooking Library for x64/x86
|
|
||||||
Copyright (C) 2009-2017 Tsuda Kageyu.
|
|
||||||
All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions
|
|
||||||
are met:
|
|
||||||
|
|
||||||
1. Redistributions of source code must retain the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer.
|
|
||||||
2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in the
|
|
||||||
documentation and/or other materials provided with the distribution.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
||||||
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
|
||||||
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER
|
|
||||||
OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
||||||
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
||||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
||||||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
================================================================================
|
|
||||||
Portions of this software are Copyright (c) 2008-2009, Vyacheslav Patkov.
|
|
||||||
================================================================================
|
|
||||||
Hacker Disassembler Engine 32 C
|
|
||||||
Copyright (c) 2008-2009, Vyacheslav Patkov.
|
|
||||||
All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions
|
|
||||||
are met:
|
|
||||||
|
|
||||||
1. Redistributions of source code must retain the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer.
|
|
||||||
2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in the
|
|
||||||
documentation and/or other materials provided with the distribution.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
||||||
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
|
||||||
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
|
||||||
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
||||||
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
||||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
||||||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
|
||||||
Hacker Disassembler Engine 64 C
|
|
||||||
Copyright (c) 2008-2009, Vyacheslav Patkov.
|
|
||||||
All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions
|
|
||||||
are met:
|
|
||||||
|
|
||||||
1. Redistributions of source code must retain the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer.
|
|
||||||
2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in the
|
|
||||||
documentation and/or other materials provided with the distribution.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
||||||
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
|
||||||
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
|
||||||
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
||||||
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
||||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
||||||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
@ -1,88 +0,0 @@
|
||||||
# MinHook
|
|
||||||
|
|
||||||
[![License](https://img.shields.io/badge/License-BSD%202--Clause-orange.svg)](https://opensource.org/licenses/BSD-2-Clause)
|
|
||||||
|
|
||||||
The Minimalistic x86/x64 API Hooking Library for Windows
|
|
||||||
|
|
||||||
http://www.codeproject.com/KB/winsdk/LibMinHook.aspx
|
|
||||||
|
|
||||||
### Donation please
|
|
||||||
|
|
||||||
I need some funds to continue developing this library. All contributions gratefully accepted.
|
|
||||||
|
|
||||||
<a href='https://pledgie.com/campaigns/27314'><img alt='Click here to lend your support to: MinHook - Help me continue to develop this library and make a donation at pledgie.com !' src='https://pledgie.com/campaigns/27314.png?skin_name=chrome' border='0' ></a>
|
|
||||||
|
|
||||||
### Version history
|
|
||||||
|
|
||||||
- ####v1.3.3 - 8 Jan 2017
|
|
||||||
* Added a helper function ```MH_CreateHookApiEx```. (Thanks to asm256)
|
|
||||||
* Support Visual Studio 2017 RC.
|
|
||||||
|
|
||||||
- ####v1.3.2.1 - 9 Nov 2015 (Nuget package only)
|
|
||||||
* Fixed an insufficient support for Visual Studio 2015.
|
|
||||||
|
|
||||||
- ####v1.3.2 - 1 Nov 2015
|
|
||||||
* Support Visual Studio 2015.
|
|
||||||
* Support MinGW.
|
|
||||||
|
|
||||||
- ####v1.3.2-beta3 - 21 Jul 2015 (Nuget package only)
|
|
||||||
* Support MinGW. (Experimental)
|
|
||||||
|
|
||||||
- ####v1.3.2-beta2 - 18 May 2015
|
|
||||||
* Fixed some subtle bugs. (Thanks to RaMMicHaeL)
|
|
||||||
* Added a helper function ```MH_StatusToString```. (Thanks to Jan Klass)
|
|
||||||
|
|
||||||
- ####v1.3.2-beta - 12 May 2015
|
|
||||||
* Fixed a possible thread deadlock in x64 mode. (Thanks to Aleh Kazakevich)
|
|
||||||
* Reduced the footprint a little more.
|
|
||||||
* Support Visual Studio 2015 RC. (Experimental)
|
|
||||||
|
|
||||||
- ####v1.3.1.1 - 7 Apr 2015 (Nuget package only)
|
|
||||||
* Support for WDK8.0 and 8.1.
|
|
||||||
|
|
||||||
- ####v1.3.1 - 19 Mar 2015
|
|
||||||
* No major changes from v1.3.1-beta.
|
|
||||||
|
|
||||||
- ####v1.3.1-beta - 11 Mar 2015
|
|
||||||
* Added a helper function ```MH_CreateHookApi```. (Thanks to uniskz).
|
|
||||||
* Fixed a false memory leak reported by some tools.
|
|
||||||
* Fixed a degradated compatibility issue.
|
|
||||||
|
|
||||||
- ####v1.3 - 13 Sep 2014
|
|
||||||
* No major changes from v1.3-beta3.
|
|
||||||
|
|
||||||
- ####v1.3-beta3 - 31 Jul 2014
|
|
||||||
|
|
||||||
* Fixed some small bugs.
|
|
||||||
* Improved the memory management.
|
|
||||||
|
|
||||||
- ####v1.3-beta2 - 21 Jul 2014
|
|
||||||
|
|
||||||
* Changed the parameters to Windows-friendly types. (void* to LPVOID)
|
|
||||||
* Fixed some small bugs.
|
|
||||||
* Reorganized the source files.
|
|
||||||
* Reduced the footprint a little more.
|
|
||||||
|
|
||||||
- ####v1.3-beta - 17 Jul 2014
|
|
||||||
|
|
||||||
* Rewrote in plain C to reduce the footprint and memory usage. (suggested by Andrey Unis)
|
|
||||||
* Simplified the overall code base to make it more readable and maintainable.
|
|
||||||
* Changed the license from 3-clause to 2-clause BSD License.
|
|
||||||
|
|
||||||
- ####v1.2 - 28 Sep 2013
|
|
||||||
|
|
||||||
* Removed boost dependency ([jarredholman](https://github.com/jarredholman/minhook)).
|
|
||||||
* Fixed a small bug in the GetRelativeBranchDestination function ([pillbug99](http://www.codeproject.com/Messages/4058892/Small-Bug-Found.aspx)).
|
|
||||||
* Added the ```MH_RemoveHook``` function, which removes a hook created with the ```MH_CreateHook``` function.
|
|
||||||
* Added the following functions to enable or disable multiple hooks in one go: ```MH_QueueEnableHook```, ```MH_QueueDisableHook```, ```MH_ApplyQueued```. This is the preferred way of handling multiple hooks as every call to `MH_EnableHook` or `MH_DisableHook` suspends and resumes all threads.
|
|
||||||
* Made the functions ```MH_EnableHook``` and ```MH_DisableHook``` enable/disable all created hooks when the ```MH_ALL_HOOKS``` parameter is passed. This, too, is an efficient way of handling multiple hooks.
|
|
||||||
* If the target function is too small to be patched with a jump, MinHook tries to place the jump above the function. If that fails as well, the ```MH_CreateHook``` function returns ```MH_ERROR_UNSUPPORTED_FUNCTION```. This fixes an issue of hooking the LoadLibraryExW function on Windows 7 x64 ([reported by Obble](http://www.codeproject.com/Messages/4578613/Re-Bug-LoadLibraryExW-hook-fails-on-windows-2008-r.aspx)).
|
|
||||||
|
|
||||||
- ####v1.1 - 26 Nov 2009
|
|
||||||
|
|
||||||
* Changed the interface to create a hook and a trampoline function in one go to prevent the detour function from being called before the trampoline function is created. ([reported by xliqz](http://www.codeproject.com/Messages/3280374/Unsafe.aspx))
|
|
||||||
* Shortened the function names from ```MinHook_*``` to ```MH_*``` to make them handier.
|
|
||||||
|
|
||||||
- ####v1.0 - 22 Nov 2009
|
|
||||||
|
|
||||||
* Initial release.
|
|
|
@ -1,33 +0,0 @@
|
||||||
WINDRES:=$(CROSS_PREFIX)windres
|
|
||||||
DLLTOOL:=$(CROSS_PREFIX)dlltool
|
|
||||||
AR:=$(CROSS_PREFIX)ar
|
|
||||||
CC:=$(CROSS_PREFIX)gcc
|
|
||||||
CCLD:=$(CC)
|
|
||||||
SRCS:=$(wildcard src/*.c src/hde/*.c)
|
|
||||||
OBJS:=$(SRCS:%.c=%.o)
|
|
||||||
DEPS:=$(SRCS:%.c=%.d)
|
|
||||||
INCS:=-Isrc -Iinclude
|
|
||||||
CFLAGS:=-masm=intel -Wall -Werror -std=c11
|
|
||||||
LDFLAGS:=-Wl,-enable-stdcall-fixup -s -static-libgcc
|
|
||||||
|
|
||||||
all: MinHook.dll libMinHook.dll.a libMinHook.a
|
|
||||||
|
|
||||||
-include $(DEPS)
|
|
||||||
|
|
||||||
libMinHook.a: $(OBJS)
|
|
||||||
$(AR) r $@ $^
|
|
||||||
libMinHook.dll.a: MinHook.dll dll_resources/MinHook.def
|
|
||||||
$(DLLTOOL) --dllname MinHook.dll --def dll_resources/MinHook.def --output-lib $@
|
|
||||||
MinHook.dll: $(OBJS) dll_resources/MinHook.res dll_resources/MinHook.def
|
|
||||||
$(CCLD) -o $@ -shared $(LDFLAGS) $^
|
|
||||||
|
|
||||||
.rc.res:
|
|
||||||
$(WINDRES) -o $@ --input-format=rc --output-format=coff $<
|
|
||||||
.c.o:
|
|
||||||
$(CC) -o $@ -c -MMD -MP $(INCS) $(CFLAGS) $<
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f $(OBJS) $(DEPS) MinHook.dll libMinHook.dll.a libMinHook.a dll_resources/MinHook.res
|
|
||||||
|
|
||||||
.PHONY: clean
|
|
||||||
.SUFFIXES: .rc .res
|
|
|
@ -1 +0,0 @@
|
||||||
windres -i ../../dll_resources/MinHook.rc -o MinHook_rc.o && dllwrap --driver-name g++ -o MinHook.dll -masm=intel --def ../../dll_resources/MinHook.def -Wl,-enable-stdcall-fixup -Wall MinHook_rc.o ../../src/*.c ../../src/HDE/*.c -I../../include -I../../src -Werror -std=c++11 -s -static-libgcc -static-libstdc++|| pause
|
|
|
@ -1,189 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<ItemGroup Label="ProjectConfigurations">
|
|
||||||
<ProjectConfiguration Include="Debug|Win32">
|
|
||||||
<Configuration>Debug</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug|x64">
|
|
||||||
<Configuration>Debug</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release|Win32">
|
|
||||||
<Configuration>Release</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release|x64">
|
|
||||||
<Configuration>Release</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
</ItemGroup>
|
|
||||||
<PropertyGroup Label="Globals">
|
|
||||||
<ProjectGuid>{027FAC75-3FDB-4044-8DD0-BC297BD4C461}</ProjectGuid>
|
|
||||||
<RootNamespace>MinHook</RootNamespace>
|
|
||||||
<Keyword>Win32Proj</Keyword>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
|
||||||
<ImportGroup Label="ExtensionSettings">
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<PropertyGroup Label="UserMacros" />
|
|
||||||
<PropertyGroup>
|
|
||||||
<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)bin\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)bin\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)bin\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)bin\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName).x86</TargetName>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName).x86</TargetName>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName).x64</TargetName>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectName).x64</TargetName>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>Disabled</Optimization>
|
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;MINHOOK_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
|
||||||
<PrecompiledHeader>
|
|
||||||
</PrecompiledHeader>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>
|
|
||||||
</DebugInformationFormat>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>$(SolutionDir)..\..\dll_resources\MinHook.def</ModuleDefinitionFile>
|
|
||||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
|
||||||
<SubSystem>Windows</SubSystem>
|
|
||||||
<TargetMachine>MachineX86</TargetMachine>
|
|
||||||
<AdditionalDependencies>$(SolutionDir)lib\$(Configuration)\libMinHook.x86.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
|
||||||
<Midl>
|
|
||||||
<TargetEnvironment>X64</TargetEnvironment>
|
|
||||||
</Midl>
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>Disabled</Optimization>
|
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;MINHOOK_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
|
||||||
<PrecompiledHeader>
|
|
||||||
</PrecompiledHeader>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>
|
|
||||||
</DebugInformationFormat>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>$(SolutionDir)..\..\dll_resources\MinHook.def</ModuleDefinitionFile>
|
|
||||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
|
||||||
<SubSystem>Windows</SubSystem>
|
|
||||||
<TargetMachine>MachineX64</TargetMachine>
|
|
||||||
<AdditionalDependencies>$(SolutionDir)lib\$(Configuration)\libMinHook.x64.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>MinSpace</Optimization>
|
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MINHOOK_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
|
||||||
<PrecompiledHeader>
|
|
||||||
</PrecompiledHeader>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>
|
|
||||||
</DebugInformationFormat>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>$(SolutionDir)..\..\dll_resources\MinHook.def</ModuleDefinitionFile>
|
|
||||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
|
||||||
<SubSystem>Windows</SubSystem>
|
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
|
||||||
<TargetMachine>MachineX86</TargetMachine>
|
|
||||||
<AdditionalDependencies>$(SolutionDir)lib\$(Configuration)\libMinHook.x86.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
<NoEntryPoint>true</NoEntryPoint>
|
|
||||||
<MergeSections>.CRT=.text</MergeSections>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
|
||||||
<Midl>
|
|
||||||
<TargetEnvironment>X64</TargetEnvironment>
|
|
||||||
</Midl>
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>MinSpace</Optimization>
|
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MINHOOK_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
|
||||||
<PrecompiledHeader>
|
|
||||||
</PrecompiledHeader>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>
|
|
||||||
</DebugInformationFormat>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>$(SolutionDir)..\..\dll_resources\MinHook.def</ModuleDefinitionFile>
|
|
||||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
|
||||||
<SubSystem>Windows</SubSystem>
|
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
|
||||||
<TargetMachine>MachineX64</TargetMachine>
|
|
||||||
<AdditionalDependencies>$(SolutionDir)lib\$(Configuration)\libMinHook.x64.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
<NoEntryPoint>true</NoEntryPoint>
|
|
||||||
<MergeSections>.CRT=.text</MergeSections>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<None Include="..\..\dll_resources\MinHook.def" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ResourceCompile Include="..\..\dll_resources\MinHook.rc" />
|
|
||||||
</ItemGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
|
||||||
<ImportGroup Label="ExtensionTargets">
|
|
||||||
</ImportGroup>
|
|
||||||
</Project>
|
|
|
@ -1,39 +0,0 @@
|
||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 11.00
|
|
||||||
# Visual Studio 2010
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libMinHook", "libMinHook.vcxproj", "{F142A341-5EE0-442D-A15F-98AE9B48DBAE}"
|
|
||||||
EndProject
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MinHook", "MinHook.vcxproj", "{027FAC75-3FDB-4044-8DD0-BC297BD4C461}"
|
|
||||||
ProjectSection(ProjectDependencies) = postProject
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE} = {F142A341-5EE0-442D-A15F-98AE9B48DBAE}
|
|
||||||
EndProjectSection
|
|
||||||
EndProject
|
|
||||||
Global
|
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
|
||||||
Debug|Win32 = Debug|Win32
|
|
||||||
Debug|x64 = Debug|x64
|
|
||||||
Release|Win32 = Release|Win32
|
|
||||||
Release|x64 = Release|x64
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|x64.ActiveCfg = Debug|x64
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|x64.Build.0 = Debug|x64
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|x64.ActiveCfg = Release|x64
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|x64.Build.0 = Release|x64
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Debug|x64.ActiveCfg = Debug|x64
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Debug|x64.Build.0 = Debug|x64
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Release|x64.ActiveCfg = Release|x64
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Release|x64.Build.0 = Release|x64
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
|
||||||
HideSolutionNode = FALSE
|
|
||||||
EndGlobalSection
|
|
||||||
EndGlobal
|
|
|
@ -1,172 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<ItemGroup Label="ProjectConfigurations">
|
|
||||||
<ProjectConfiguration Include="Debug|Win32">
|
|
||||||
<Configuration>Debug</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug|x64">
|
|
||||||
<Configuration>Debug</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release|Win32">
|
|
||||||
<Configuration>Release</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release|x64">
|
|
||||||
<Configuration>Release</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
</ItemGroup>
|
|
||||||
<PropertyGroup Label="Globals">
|
|
||||||
<ProjectGuid>{F142A341-5EE0-442D-A15F-98AE9B48DBAE}</ProjectGuid>
|
|
||||||
<RootNamespace>libMinHook</RootNamespace>
|
|
||||||
<Keyword>Win32Proj</Keyword>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
|
||||||
<ImportGroup Label="ExtensionSettings">
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<PropertyGroup Label="UserMacros" />
|
|
||||||
<PropertyGroup>
|
|
||||||
<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)lib\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)lib\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)lib\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)lib\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName).x86</TargetName>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName).x86</TargetName>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName).x64</TargetName>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectName).x64</TargetName>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>Disabled</Optimization>
|
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;STRICT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>
|
|
||||||
</DebugInformationFormat>
|
|
||||||
<WholeProgramOptimization>false</WholeProgramOptimization>
|
|
||||||
</ClCompile>
|
|
||||||
<Lib />
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
|
||||||
<Midl>
|
|
||||||
<TargetEnvironment>X64</TargetEnvironment>
|
|
||||||
</Midl>
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>Disabled</Optimization>
|
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;STRICT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>
|
|
||||||
</DebugInformationFormat>
|
|
||||||
<WholeProgramOptimization>false</WholeProgramOptimization>
|
|
||||||
</ClCompile>
|
|
||||||
<Lib />
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>MinSpace</Optimization>
|
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;STRICT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>
|
|
||||||
</DebugInformationFormat>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
|
||||||
</ClCompile>
|
|
||||||
<Lib />
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
|
||||||
<Midl>
|
|
||||||
<TargetEnvironment>X64</TargetEnvironment>
|
|
||||||
</Midl>
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>MinSpace</Optimization>
|
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;STRICT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>
|
|
||||||
</DebugInformationFormat>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
|
||||||
</ClCompile>
|
|
||||||
<Lib />
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ClCompile Include="..\..\src\buffer.c" />
|
|
||||||
<ClCompile Include="..\..\src\HDE\hde32.c">
|
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
|
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\HDE\hde64.c">
|
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\hook.c" />
|
|
||||||
<ClCompile Include="..\..\src\trampoline.c" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ClInclude Include="..\..\include\MinHook.h" />
|
|
||||||
<ClInclude Include="..\..\src\buffer.h" />
|
|
||||||
<ClInclude Include="..\..\src\HDE\hde32.h" />
|
|
||||||
<ClInclude Include="..\..\src\HDE\hde64.h" />
|
|
||||||
<ClInclude Include="..\..\src\HDE\pstdint.h" />
|
|
||||||
<ClInclude Include="..\..\src\HDE\table32.h" />
|
|
||||||
<ClInclude Include="..\..\src\HDE\table64.h" />
|
|
||||||
<ClInclude Include="..\..\src\trampoline.h" />
|
|
||||||
</ItemGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
|
||||||
<ImportGroup Label="ExtensionTargets">
|
|
||||||
</ImportGroup>
|
|
||||||
</Project>
|
|
|
@ -1,55 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<ItemGroup>
|
|
||||||
<ClCompile Include="..\..\src\buffer.c">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\hook.c">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\trampoline.c">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\HDE\hde32.c">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\HDE\hde64.c">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ClInclude Include="..\..\src\trampoline.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\buffer.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\include\MinHook.h" />
|
|
||||||
<ClInclude Include="..\..\src\HDE\hde32.h">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\HDE\hde64.h">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\HDE\pstdint.h">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\HDE\table32.h">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\HDE\table64.h">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Filter Include="Source Files">
|
|
||||||
<UniqueIdentifier>{9d24b740-be2e-4cfd-b9a4-340a50946ee9}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="Header Files">
|
|
||||||
<UniqueIdentifier>{76381bc7-2863-4cc5-aede-926ec2c506e4}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="HDE">
|
|
||||||
<UniqueIdentifier>{56ddb326-6179-430d-ae19-e13bfd767bfa}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
</ItemGroup>
|
|
||||||
</Project>
|
|
|
@ -1,189 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<ItemGroup Label="ProjectConfigurations">
|
|
||||||
<ProjectConfiguration Include="Debug|Win32">
|
|
||||||
<Configuration>Debug</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug|x64">
|
|
||||||
<Configuration>Debug</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release|Win32">
|
|
||||||
<Configuration>Release</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release|x64">
|
|
||||||
<Configuration>Release</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
</ItemGroup>
|
|
||||||
<PropertyGroup Label="Globals">
|
|
||||||
<ProjectGuid>{027FAC75-3FDB-4044-8DD0-BC297BD4C461}</ProjectGuid>
|
|
||||||
<RootNamespace>MinHook</RootNamespace>
|
|
||||||
<Keyword>Win32Proj</Keyword>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
<PlatformToolset>v110_xp</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<PlatformToolset>v110_xp</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
<PlatformToolset>v110_xp</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<PlatformToolset>v110_xp</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
|
||||||
<ImportGroup Label="ExtensionSettings">
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<PropertyGroup Label="UserMacros" />
|
|
||||||
<PropertyGroup>
|
|
||||||
<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)bin\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)bin\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)bin\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)bin\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName).x86</TargetName>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName).x86</TargetName>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName).x64</TargetName>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectName).x64</TargetName>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>Disabled</Optimization>
|
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;MINHOOK_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
|
||||||
<PrecompiledHeader>
|
|
||||||
</PrecompiledHeader>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>None</DebugInformationFormat>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>$(SolutionDir)..\..\dll_resources\MinHook.def</ModuleDefinitionFile>
|
|
||||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
|
||||||
<SubSystem>Windows</SubSystem>
|
|
||||||
<TargetMachine>MachineX86</TargetMachine>
|
|
||||||
<AdditionalDependencies>$(SolutionDir)lib\$(Configuration)\libMinHook.x86.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
|
||||||
<Midl>
|
|
||||||
<TargetEnvironment>X64</TargetEnvironment>
|
|
||||||
</Midl>
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>Disabled</Optimization>
|
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;MINHOOK_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
|
||||||
<PrecompiledHeader>
|
|
||||||
</PrecompiledHeader>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>None</DebugInformationFormat>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>$(SolutionDir)..\..\dll_resources\MinHook.def</ModuleDefinitionFile>
|
|
||||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
|
||||||
<SubSystem>Windows</SubSystem>
|
|
||||||
<TargetMachine>MachineX64</TargetMachine>
|
|
||||||
<AdditionalDependencies>$(SolutionDir)lib\$(Configuration)\libMinHook.x64.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>MinSpace</Optimization>
|
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MINHOOK_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
|
||||||
<PrecompiledHeader>
|
|
||||||
</PrecompiledHeader>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>None</DebugInformationFormat>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>$(SolutionDir)..\..\dll_resources\MinHook.def</ModuleDefinitionFile>
|
|
||||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
|
||||||
<SubSystem>Windows</SubSystem>
|
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
|
||||||
<TargetMachine>MachineX86</TargetMachine>
|
|
||||||
<AdditionalDependencies>$(SolutionDir)lib\$(Configuration)\libMinHook.x86.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
<NoEntryPoint>true</NoEntryPoint>
|
|
||||||
<MergeSections>.CRT=.text</MergeSections>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
|
||||||
<Midl>
|
|
||||||
<TargetEnvironment>X64</TargetEnvironment>
|
|
||||||
</Midl>
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>MinSpace</Optimization>
|
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MINHOOK_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
|
||||||
<PrecompiledHeader>
|
|
||||||
</PrecompiledHeader>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>None</DebugInformationFormat>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>$(SolutionDir)..\..\dll_resources\MinHook.def</ModuleDefinitionFile>
|
|
||||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
|
||||||
<SubSystem>Windows</SubSystem>
|
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
|
||||||
<TargetMachine>MachineX64</TargetMachine>
|
|
||||||
<AdditionalDependencies>$(SolutionDir)lib\$(Configuration)\libMinHook.x64.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
<NoEntryPoint>true</NoEntryPoint>
|
|
||||||
<MergeSections>.CRT=.text</MergeSections>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<None Include="..\..\dll_resources\MinHook.def" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ResourceCompile Include="..\..\dll_resources\MinHook.rc" />
|
|
||||||
</ItemGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
|
||||||
<ImportGroup Label="ExtensionTargets">
|
|
||||||
</ImportGroup>
|
|
||||||
</Project>
|
|
|
@ -1,39 +0,0 @@
|
||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
|
||||||
# Visual Studio 2012
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libMinHook", "libMinHook.vcxproj", "{F142A341-5EE0-442D-A15F-98AE9B48DBAE}"
|
|
||||||
EndProject
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MinHook", "MinHook.vcxproj", "{027FAC75-3FDB-4044-8DD0-BC297BD4C461}"
|
|
||||||
ProjectSection(ProjectDependencies) = postProject
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE} = {F142A341-5EE0-442D-A15F-98AE9B48DBAE}
|
|
||||||
EndProjectSection
|
|
||||||
EndProject
|
|
||||||
Global
|
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
|
||||||
Debug|Win32 = Debug|Win32
|
|
||||||
Debug|x64 = Debug|x64
|
|
||||||
Release|Win32 = Release|Win32
|
|
||||||
Release|x64 = Release|x64
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|x64.ActiveCfg = Debug|x64
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|x64.Build.0 = Debug|x64
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|x64.ActiveCfg = Release|x64
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|x64.Build.0 = Release|x64
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Debug|x64.ActiveCfg = Debug|x64
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Debug|x64.Build.0 = Debug|x64
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Release|x64.ActiveCfg = Release|x64
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Release|x64.Build.0 = Release|x64
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
|
||||||
HideSolutionNode = FALSE
|
|
||||||
EndGlobalSection
|
|
||||||
EndGlobal
|
|
|
@ -1,172 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<ItemGroup Label="ProjectConfigurations">
|
|
||||||
<ProjectConfiguration Include="Debug|Win32">
|
|
||||||
<Configuration>Debug</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug|x64">
|
|
||||||
<Configuration>Debug</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release|Win32">
|
|
||||||
<Configuration>Release</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release|x64">
|
|
||||||
<Configuration>Release</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
</ItemGroup>
|
|
||||||
<PropertyGroup Label="Globals">
|
|
||||||
<ProjectGuid>{F142A341-5EE0-442D-A15F-98AE9B48DBAE}</ProjectGuid>
|
|
||||||
<RootNamespace>libMinHook</RootNamespace>
|
|
||||||
<Keyword>Win32Proj</Keyword>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
<PlatformToolset>v110_xp</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<PlatformToolset>v110_xp</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
<PlatformToolset>v110_xp</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<PlatformToolset>v110_xp</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
|
||||||
<ImportGroup Label="ExtensionSettings">
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<PropertyGroup Label="UserMacros" />
|
|
||||||
<PropertyGroup>
|
|
||||||
<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)lib\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)lib\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)lib\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)lib\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName).x86</TargetName>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName).x86</TargetName>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName).x64</TargetName>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectName).x64</TargetName>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>Disabled</Optimization>
|
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;STRICT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>None</DebugInformationFormat>
|
|
||||||
<EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
|
|
||||||
</ClCompile>
|
|
||||||
<Lib />
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
|
||||||
<Midl>
|
|
||||||
<TargetEnvironment>X64</TargetEnvironment>
|
|
||||||
</Midl>
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>Disabled</Optimization>
|
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;STRICT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>None</DebugInformationFormat>
|
|
||||||
</ClCompile>
|
|
||||||
<Lib />
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>MinSpace</Optimization>
|
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;STRICT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>None</DebugInformationFormat>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
|
||||||
<EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
|
|
||||||
</ClCompile>
|
|
||||||
<Lib />
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
|
||||||
<Midl>
|
|
||||||
<TargetEnvironment>X64</TargetEnvironment>
|
|
||||||
</Midl>
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>MinSpace</Optimization>
|
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;STRICT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>None</DebugInformationFormat>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
|
||||||
</ClCompile>
|
|
||||||
<Lib />
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ClCompile Include="..\..\src\buffer.c" />
|
|
||||||
<ClCompile Include="..\..\src\HDE\hde32.c">
|
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
|
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\HDE\hde64.c">
|
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\hook.c" />
|
|
||||||
<ClCompile Include="..\..\src\trampoline.c" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ClInclude Include="..\..\include\MinHook.h" />
|
|
||||||
<ClInclude Include="..\..\src\buffer.h" />
|
|
||||||
<ClInclude Include="..\..\src\HDE\hde32.h" />
|
|
||||||
<ClInclude Include="..\..\src\HDE\hde64.h" />
|
|
||||||
<ClInclude Include="..\..\src\HDE\pstdint.h" />
|
|
||||||
<ClInclude Include="..\..\src\HDE\table32.h" />
|
|
||||||
<ClInclude Include="..\..\src\HDE\table64.h" />
|
|
||||||
<ClInclude Include="..\..\src\trampoline.h" />
|
|
||||||
</ItemGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
|
||||||
<ImportGroup Label="ExtensionTargets">
|
|
||||||
</ImportGroup>
|
|
||||||
</Project>
|
|
|
@ -1,55 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<ItemGroup>
|
|
||||||
<ClCompile Include="..\..\src\buffer.c">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\hook.c">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\trampoline.c">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\HDE\hde32.c">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\HDE\hde64.c">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ClInclude Include="..\..\src\trampoline.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\buffer.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\include\MinHook.h" />
|
|
||||||
<ClInclude Include="..\..\src\HDE\hde32.h">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\HDE\hde64.h">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\HDE\pstdint.h">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\HDE\table32.h">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\HDE\table64.h">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Filter Include="Source Files">
|
|
||||||
<UniqueIdentifier>{9d24b740-be2e-4cfd-b9a4-340a50946ee9}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="Header Files">
|
|
||||||
<UniqueIdentifier>{76381bc7-2863-4cc5-aede-926ec2c506e4}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="HDE">
|
|
||||||
<UniqueIdentifier>{56ddb326-6179-430d-ae19-e13bfd767bfa}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
</ItemGroup>
|
|
||||||
</Project>
|
|
|
@ -1,189 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<ItemGroup Label="ProjectConfigurations">
|
|
||||||
<ProjectConfiguration Include="Debug|Win32">
|
|
||||||
<Configuration>Debug</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug|x64">
|
|
||||||
<Configuration>Debug</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release|Win32">
|
|
||||||
<Configuration>Release</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release|x64">
|
|
||||||
<Configuration>Release</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
</ItemGroup>
|
|
||||||
<PropertyGroup Label="Globals">
|
|
||||||
<ProjectGuid>{027FAC75-3FDB-4044-8DD0-BC297BD4C461}</ProjectGuid>
|
|
||||||
<RootNamespace>MinHook</RootNamespace>
|
|
||||||
<Keyword>Win32Proj</Keyword>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
<PlatformToolset>v120_xp</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<PlatformToolset>v120_xp</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
<PlatformToolset>v120_xp</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<PlatformToolset>v120_xp</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
|
||||||
<ImportGroup Label="ExtensionSettings">
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<PropertyGroup Label="UserMacros" />
|
|
||||||
<PropertyGroup>
|
|
||||||
<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)bin\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)bin\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)bin\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)bin\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName).x86</TargetName>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName).x86</TargetName>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName).x64</TargetName>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectName).x64</TargetName>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>Disabled</Optimization>
|
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;MINHOOK_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
|
||||||
<PrecompiledHeader>
|
|
||||||
</PrecompiledHeader>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>None</DebugInformationFormat>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>$(SolutionDir)..\..\dll_resources\MinHook.def</ModuleDefinitionFile>
|
|
||||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
|
||||||
<SubSystem>Windows</SubSystem>
|
|
||||||
<TargetMachine>MachineX86</TargetMachine>
|
|
||||||
<AdditionalDependencies>$(SolutionDir)lib\$(Configuration)\libMinHook.x86.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
|
||||||
<Midl>
|
|
||||||
<TargetEnvironment>X64</TargetEnvironment>
|
|
||||||
</Midl>
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>Disabled</Optimization>
|
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;MINHOOK_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
|
||||||
<PrecompiledHeader>
|
|
||||||
</PrecompiledHeader>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>None</DebugInformationFormat>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>$(SolutionDir)..\..\dll_resources\MinHook.def</ModuleDefinitionFile>
|
|
||||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
|
||||||
<SubSystem>Windows</SubSystem>
|
|
||||||
<TargetMachine>MachineX64</TargetMachine>
|
|
||||||
<AdditionalDependencies>$(SolutionDir)lib\$(Configuration)\libMinHook.x64.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>MinSpace</Optimization>
|
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MINHOOK_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
|
||||||
<PrecompiledHeader>
|
|
||||||
</PrecompiledHeader>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>None</DebugInformationFormat>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>$(SolutionDir)..\..\dll_resources\MinHook.def</ModuleDefinitionFile>
|
|
||||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
|
||||||
<SubSystem>Windows</SubSystem>
|
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
|
||||||
<TargetMachine>MachineX86</TargetMachine>
|
|
||||||
<AdditionalDependencies>$(SolutionDir)lib\$(Configuration)\libMinHook.x86.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
<NoEntryPoint>true</NoEntryPoint>
|
|
||||||
<MergeSections>.CRT=.text</MergeSections>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
|
||||||
<Midl>
|
|
||||||
<TargetEnvironment>X64</TargetEnvironment>
|
|
||||||
</Midl>
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>MinSpace</Optimization>
|
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MINHOOK_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
|
||||||
<PrecompiledHeader>
|
|
||||||
</PrecompiledHeader>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>None</DebugInformationFormat>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>$(SolutionDir)..\..\dll_resources\MinHook.def</ModuleDefinitionFile>
|
|
||||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
|
||||||
<SubSystem>Windows</SubSystem>
|
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
|
||||||
<TargetMachine>MachineX64</TargetMachine>
|
|
||||||
<AdditionalDependencies>$(SolutionDir)lib\$(Configuration)\libMinHook.x64.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
<NoEntryPoint>true</NoEntryPoint>
|
|
||||||
<MergeSections>.CRT=.text</MergeSections>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<None Include="..\..\dll_resources\MinHook.def" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ResourceCompile Include="..\..\dll_resources\MinHook.rc" />
|
|
||||||
</ItemGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
|
||||||
<ImportGroup Label="ExtensionTargets">
|
|
||||||
</ImportGroup>
|
|
||||||
</Project>
|
|
|
@ -1,41 +0,0 @@
|
||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
|
||||||
# Visual Studio 2013
|
|
||||||
VisualStudioVersion = 12.0.30501.0
|
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libMinHook", "libMinHook.vcxproj", "{F142A341-5EE0-442D-A15F-98AE9B48DBAE}"
|
|
||||||
EndProject
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MinHook", "MinHook.vcxproj", "{027FAC75-3FDB-4044-8DD0-BC297BD4C461}"
|
|
||||||
ProjectSection(ProjectDependencies) = postProject
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE} = {F142A341-5EE0-442D-A15F-98AE9B48DBAE}
|
|
||||||
EndProjectSection
|
|
||||||
EndProject
|
|
||||||
Global
|
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
|
||||||
Debug|Win32 = Debug|Win32
|
|
||||||
Debug|x64 = Debug|x64
|
|
||||||
Release|Win32 = Release|Win32
|
|
||||||
Release|x64 = Release|x64
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|x64.ActiveCfg = Debug|x64
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|x64.Build.0 = Debug|x64
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|x64.ActiveCfg = Release|x64
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|x64.Build.0 = Release|x64
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Debug|x64.ActiveCfg = Debug|x64
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Debug|x64.Build.0 = Debug|x64
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Release|x64.ActiveCfg = Release|x64
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Release|x64.Build.0 = Release|x64
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
|
||||||
HideSolutionNode = FALSE
|
|
||||||
EndGlobalSection
|
|
||||||
EndGlobal
|
|
|
@ -1,174 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<ItemGroup Label="ProjectConfigurations">
|
|
||||||
<ProjectConfiguration Include="Debug|Win32">
|
|
||||||
<Configuration>Debug</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug|x64">
|
|
||||||
<Configuration>Debug</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release|Win32">
|
|
||||||
<Configuration>Release</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release|x64">
|
|
||||||
<Configuration>Release</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
</ItemGroup>
|
|
||||||
<PropertyGroup Label="Globals">
|
|
||||||
<ProjectGuid>{F142A341-5EE0-442D-A15F-98AE9B48DBAE}</ProjectGuid>
|
|
||||||
<RootNamespace>libMinHook</RootNamespace>
|
|
||||||
<Keyword>Win32Proj</Keyword>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
<PlatformToolset>v120_xp</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<PlatformToolset>v120_xp</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
<PlatformToolset>v120_xp</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<PlatformToolset>v120_xp</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
|
||||||
<ImportGroup Label="ExtensionSettings">
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<PropertyGroup Label="UserMacros" />
|
|
||||||
<PropertyGroup>
|
|
||||||
<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)lib\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)lib\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)lib\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)lib\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName).x86</TargetName>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName).x86</TargetName>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName).x64</TargetName>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectName).x64</TargetName>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>Disabled</Optimization>
|
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;STRICT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>None</DebugInformationFormat>
|
|
||||||
<EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
|
|
||||||
</ClCompile>
|
|
||||||
<Lib />
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
|
||||||
<Midl>
|
|
||||||
<TargetEnvironment>X64</TargetEnvironment>
|
|
||||||
</Midl>
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>Disabled</Optimization>
|
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;STRICT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>None</DebugInformationFormat>
|
|
||||||
<EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
|
|
||||||
</ClCompile>
|
|
||||||
<Lib />
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>MinSpace</Optimization>
|
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;STRICT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>None</DebugInformationFormat>
|
|
||||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
|
||||||
<CompileAs>CompileAsC</CompileAs>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
<EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
|
|
||||||
</ClCompile>
|
|
||||||
<Lib />
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
|
||||||
<Midl>
|
|
||||||
<TargetEnvironment>X64</TargetEnvironment>
|
|
||||||
</Midl>
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>MinSpace</Optimization>
|
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;STRICT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>None</DebugInformationFormat>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
|
||||||
</ClCompile>
|
|
||||||
<Lib />
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ClCompile Include="..\..\src\buffer.c" />
|
|
||||||
<ClCompile Include="..\..\src\HDE\hde32.c">
|
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
|
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\HDE\hde64.c">
|
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\hook.c" />
|
|
||||||
<ClCompile Include="..\..\src\trampoline.c" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ClInclude Include="..\..\include\MinHook.h" />
|
|
||||||
<ClInclude Include="..\..\src\buffer.h" />
|
|
||||||
<ClInclude Include="..\..\src\HDE\hde32.h" />
|
|
||||||
<ClInclude Include="..\..\src\HDE\hde64.h" />
|
|
||||||
<ClInclude Include="..\..\src\HDE\pstdint.h" />
|
|
||||||
<ClInclude Include="..\..\src\HDE\table32.h" />
|
|
||||||
<ClInclude Include="..\..\src\HDE\table64.h" />
|
|
||||||
<ClInclude Include="..\..\src\trampoline.h" />
|
|
||||||
</ItemGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
|
||||||
<ImportGroup Label="ExtensionTargets">
|
|
||||||
</ImportGroup>
|
|
||||||
</Project>
|
|
|
@ -1,55 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<ItemGroup>
|
|
||||||
<ClCompile Include="..\..\src\buffer.c">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\hook.c">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\trampoline.c">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\HDE\hde32.c">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\HDE\hde64.c">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ClInclude Include="..\..\src\trampoline.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\buffer.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\include\MinHook.h" />
|
|
||||||
<ClInclude Include="..\..\src\HDE\hde32.h">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\HDE\hde64.h">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\HDE\pstdint.h">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\HDE\table32.h">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\HDE\table64.h">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Filter Include="Source Files">
|
|
||||||
<UniqueIdentifier>{9d24b740-be2e-4cfd-b9a4-340a50946ee9}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="Header Files">
|
|
||||||
<UniqueIdentifier>{76381bc7-2863-4cc5-aede-926ec2c506e4}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="HDE">
|
|
||||||
<UniqueIdentifier>{56ddb326-6179-430d-ae19-e13bfd767bfa}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
</ItemGroup>
|
|
||||||
</Project>
|
|
|
@ -1,189 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<ItemGroup Label="ProjectConfigurations">
|
|
||||||
<ProjectConfiguration Include="Debug|Win32">
|
|
||||||
<Configuration>Debug</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug|x64">
|
|
||||||
<Configuration>Debug</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release|Win32">
|
|
||||||
<Configuration>Release</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release|x64">
|
|
||||||
<Configuration>Release</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
</ItemGroup>
|
|
||||||
<PropertyGroup Label="Globals">
|
|
||||||
<ProjectGuid>{027FAC75-3FDB-4044-8DD0-BC297BD4C461}</ProjectGuid>
|
|
||||||
<RootNamespace>MinHook</RootNamespace>
|
|
||||||
<Keyword>Win32Proj</Keyword>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
<PlatformToolset>v140_xp</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<PlatformToolset>v140_xp</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
<PlatformToolset>v140_xp</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<PlatformToolset>v140_xp</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
|
||||||
<ImportGroup Label="ExtensionSettings">
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<PropertyGroup Label="UserMacros" />
|
|
||||||
<PropertyGroup>
|
|
||||||
<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)bin\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)bin\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)bin\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)bin\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName).x86</TargetName>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName).x86</TargetName>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName).x64</TargetName>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectName).x64</TargetName>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>Disabled</Optimization>
|
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;MINHOOK_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
|
||||||
<PrecompiledHeader>
|
|
||||||
</PrecompiledHeader>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>None</DebugInformationFormat>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>$(SolutionDir)..\..\dll_resources\MinHook.def</ModuleDefinitionFile>
|
|
||||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
|
||||||
<SubSystem>Windows</SubSystem>
|
|
||||||
<TargetMachine>MachineX86</TargetMachine>
|
|
||||||
<AdditionalDependencies>$(SolutionDir)lib\$(Configuration)\libMinHook.x86.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
|
||||||
<Midl>
|
|
||||||
<TargetEnvironment>X64</TargetEnvironment>
|
|
||||||
</Midl>
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>Disabled</Optimization>
|
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;MINHOOK_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
|
||||||
<PrecompiledHeader>
|
|
||||||
</PrecompiledHeader>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>None</DebugInformationFormat>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>$(SolutionDir)..\..\dll_resources\MinHook.def</ModuleDefinitionFile>
|
|
||||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
|
||||||
<SubSystem>Windows</SubSystem>
|
|
||||||
<TargetMachine>MachineX64</TargetMachine>
|
|
||||||
<AdditionalDependencies>$(SolutionDir)lib\$(Configuration)\libMinHook.x64.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>MinSpace</Optimization>
|
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MINHOOK_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
|
||||||
<PrecompiledHeader>
|
|
||||||
</PrecompiledHeader>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>None</DebugInformationFormat>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>$(SolutionDir)..\..\dll_resources\MinHook.def</ModuleDefinitionFile>
|
|
||||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
|
||||||
<SubSystem>Windows</SubSystem>
|
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
|
||||||
<TargetMachine>MachineX86</TargetMachine>
|
|
||||||
<AdditionalDependencies>$(SolutionDir)lib\$(Configuration)\libMinHook.x86.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
<NoEntryPoint>true</NoEntryPoint>
|
|
||||||
<MergeSections>.CRT=.text</MergeSections>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
|
||||||
<Midl>
|
|
||||||
<TargetEnvironment>X64</TargetEnvironment>
|
|
||||||
</Midl>
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>MinSpace</Optimization>
|
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MINHOOK_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
|
||||||
<PrecompiledHeader>
|
|
||||||
</PrecompiledHeader>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>None</DebugInformationFormat>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>$(SolutionDir)..\..\dll_resources\MinHook.def</ModuleDefinitionFile>
|
|
||||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
|
||||||
<SubSystem>Windows</SubSystem>
|
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
|
||||||
<TargetMachine>MachineX64</TargetMachine>
|
|
||||||
<AdditionalDependencies>$(SolutionDir)lib\$(Configuration)\libMinHook.x64.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
<NoEntryPoint>true</NoEntryPoint>
|
|
||||||
<MergeSections>.CRT=.text</MergeSections>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<None Include="..\..\dll_resources\MinHook.def" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ResourceCompile Include="..\..\dll_resources\MinHook.rc" />
|
|
||||||
</ItemGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
|
||||||
<ImportGroup Label="ExtensionTargets">
|
|
||||||
</ImportGroup>
|
|
||||||
</Project>
|
|
|
@ -1,41 +0,0 @@
|
||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
|
||||||
# Visual Studio 14
|
|
||||||
VisualStudioVersion = 14.0.22823.1
|
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libMinHook", "libMinHook.vcxproj", "{F142A341-5EE0-442D-A15F-98AE9B48DBAE}"
|
|
||||||
EndProject
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MinHook", "MinHook.vcxproj", "{027FAC75-3FDB-4044-8DD0-BC297BD4C461}"
|
|
||||||
ProjectSection(ProjectDependencies) = postProject
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE} = {F142A341-5EE0-442D-A15F-98AE9B48DBAE}
|
|
||||||
EndProjectSection
|
|
||||||
EndProject
|
|
||||||
Global
|
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
|
||||||
Debug|Win32 = Debug|Win32
|
|
||||||
Debug|x64 = Debug|x64
|
|
||||||
Release|Win32 = Release|Win32
|
|
||||||
Release|x64 = Release|x64
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|x64.ActiveCfg = Debug|x64
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|x64.Build.0 = Debug|x64
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|x64.ActiveCfg = Release|x64
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|x64.Build.0 = Release|x64
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Debug|x64.ActiveCfg = Debug|x64
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Debug|x64.Build.0 = Debug|x64
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Release|x64.ActiveCfg = Release|x64
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Release|x64.Build.0 = Release|x64
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
|
||||||
HideSolutionNode = FALSE
|
|
||||||
EndGlobalSection
|
|
||||||
EndGlobal
|
|
|
@ -1,174 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<ItemGroup Label="ProjectConfigurations">
|
|
||||||
<ProjectConfiguration Include="Debug|Win32">
|
|
||||||
<Configuration>Debug</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug|x64">
|
|
||||||
<Configuration>Debug</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release|Win32">
|
|
||||||
<Configuration>Release</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release|x64">
|
|
||||||
<Configuration>Release</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
</ItemGroup>
|
|
||||||
<PropertyGroup Label="Globals">
|
|
||||||
<ProjectGuid>{F142A341-5EE0-442D-A15F-98AE9B48DBAE}</ProjectGuid>
|
|
||||||
<RootNamespace>libMinHook</RootNamespace>
|
|
||||||
<Keyword>Win32Proj</Keyword>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
<PlatformToolset>v140_xp</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<PlatformToolset>v140_xp</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
<PlatformToolset>v140_xp</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<PlatformToolset>v140_xp</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
|
||||||
<ImportGroup Label="ExtensionSettings">
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<PropertyGroup Label="UserMacros" />
|
|
||||||
<PropertyGroup>
|
|
||||||
<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)lib\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)lib\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)lib\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)lib\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName).x86</TargetName>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName).x86</TargetName>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName).x64</TargetName>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectName).x64</TargetName>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>Disabled</Optimization>
|
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;STRICT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>None</DebugInformationFormat>
|
|
||||||
<EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
|
|
||||||
</ClCompile>
|
|
||||||
<Lib />
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
|
||||||
<Midl>
|
|
||||||
<TargetEnvironment>X64</TargetEnvironment>
|
|
||||||
</Midl>
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>Disabled</Optimization>
|
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;STRICT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>None</DebugInformationFormat>
|
|
||||||
<EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
|
|
||||||
</ClCompile>
|
|
||||||
<Lib />
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>MinSpace</Optimization>
|
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;STRICT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>None</DebugInformationFormat>
|
|
||||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
|
||||||
<CompileAs>CompileAsC</CompileAs>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
<EnableEnhancedInstructionSet>NoExtensions</EnableEnhancedInstructionSet>
|
|
||||||
</ClCompile>
|
|
||||||
<Lib />
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
|
||||||
<Midl>
|
|
||||||
<TargetEnvironment>X64</TargetEnvironment>
|
|
||||||
</Midl>
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>MinSpace</Optimization>
|
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;STRICT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>None</DebugInformationFormat>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
|
||||||
</ClCompile>
|
|
||||||
<Lib />
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ClCompile Include="..\..\src\buffer.c" />
|
|
||||||
<ClCompile Include="..\..\src\HDE\hde32.c">
|
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
|
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\HDE\hde64.c">
|
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\hook.c" />
|
|
||||||
<ClCompile Include="..\..\src\trampoline.c" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ClInclude Include="..\..\include\MinHook.h" />
|
|
||||||
<ClInclude Include="..\..\src\buffer.h" />
|
|
||||||
<ClInclude Include="..\..\src\HDE\hde32.h" />
|
|
||||||
<ClInclude Include="..\..\src\HDE\hde64.h" />
|
|
||||||
<ClInclude Include="..\..\src\HDE\pstdint.h" />
|
|
||||||
<ClInclude Include="..\..\src\HDE\table32.h" />
|
|
||||||
<ClInclude Include="..\..\src\HDE\table64.h" />
|
|
||||||
<ClInclude Include="..\..\src\trampoline.h" />
|
|
||||||
</ItemGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
|
||||||
<ImportGroup Label="ExtensionTargets">
|
|
||||||
</ImportGroup>
|
|
||||||
</Project>
|
|
|
@ -1,55 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<ItemGroup>
|
|
||||||
<ClCompile Include="..\..\src\buffer.c">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\hook.c">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\trampoline.c">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\HDE\hde32.c">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\HDE\hde64.c">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ClInclude Include="..\..\src\trampoline.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\buffer.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\include\MinHook.h" />
|
|
||||||
<ClInclude Include="..\..\src\HDE\hde32.h">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\HDE\hde64.h">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\HDE\pstdint.h">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\HDE\table32.h">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\HDE\table64.h">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Filter Include="Source Files">
|
|
||||||
<UniqueIdentifier>{9d24b740-be2e-4cfd-b9a4-340a50946ee9}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="Header Files">
|
|
||||||
<UniqueIdentifier>{76381bc7-2863-4cc5-aede-926ec2c506e4}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="HDE">
|
|
||||||
<UniqueIdentifier>{56ddb326-6179-430d-ae19-e13bfd767bfa}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
</ItemGroup>
|
|
||||||
</Project>
|
|
|
@ -1,189 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<ItemGroup Label="ProjectConfigurations">
|
|
||||||
<ProjectConfiguration Include="Debug|Win32">
|
|
||||||
<Configuration>Debug</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug|x64">
|
|
||||||
<Configuration>Debug</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release|Win32">
|
|
||||||
<Configuration>Release</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release|x64">
|
|
||||||
<Configuration>Release</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
</ItemGroup>
|
|
||||||
<PropertyGroup Label="Globals">
|
|
||||||
<ProjectGuid>{027FAC75-3FDB-4044-8DD0-BC297BD4C461}</ProjectGuid>
|
|
||||||
<RootNamespace>MinHook</RootNamespace>
|
|
||||||
<Keyword>Win32Proj</Keyword>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
<PlatformToolset>v141_xp</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<PlatformToolset>v141_xp</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
<PlatformToolset>v141_xp</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
|
||||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<PlatformToolset>v141_xp</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
|
||||||
<ImportGroup Label="ExtensionSettings">
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<PropertyGroup Label="UserMacros" />
|
|
||||||
<PropertyGroup>
|
|
||||||
<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)bin\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)bin\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)bin\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)bin\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName).x86</TargetName>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName).x86</TargetName>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName).x64</TargetName>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectName).x64</TargetName>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>Disabled</Optimization>
|
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;MINHOOK_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
|
||||||
<PrecompiledHeader>
|
|
||||||
</PrecompiledHeader>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>None</DebugInformationFormat>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>$(SolutionDir)..\..\dll_resources\MinHook.def</ModuleDefinitionFile>
|
|
||||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
|
||||||
<SubSystem>Windows</SubSystem>
|
|
||||||
<TargetMachine>MachineX86</TargetMachine>
|
|
||||||
<AdditionalDependencies>$(SolutionDir)lib\$(Configuration)\libMinHook.x86.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
|
||||||
<Midl>
|
|
||||||
<TargetEnvironment>X64</TargetEnvironment>
|
|
||||||
</Midl>
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>Disabled</Optimization>
|
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;MINHOOK_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
|
||||||
<PrecompiledHeader>
|
|
||||||
</PrecompiledHeader>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>None</DebugInformationFormat>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>$(SolutionDir)..\..\dll_resources\MinHook.def</ModuleDefinitionFile>
|
|
||||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
|
||||||
<SubSystem>Windows</SubSystem>
|
|
||||||
<TargetMachine>MachineX64</TargetMachine>
|
|
||||||
<AdditionalDependencies>$(SolutionDir)lib\$(Configuration)\libMinHook.x64.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>MinSpace</Optimization>
|
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MINHOOK_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
|
||||||
<PrecompiledHeader>
|
|
||||||
</PrecompiledHeader>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>None</DebugInformationFormat>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>$(SolutionDir)..\..\dll_resources\MinHook.def</ModuleDefinitionFile>
|
|
||||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
|
||||||
<SubSystem>Windows</SubSystem>
|
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
|
||||||
<TargetMachine>MachineX86</TargetMachine>
|
|
||||||
<AdditionalDependencies>$(SolutionDir)lib\$(Configuration)\libMinHook.x86.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
<NoEntryPoint>true</NoEntryPoint>
|
|
||||||
<MergeSections>.CRT=.text</MergeSections>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
|
||||||
<Midl>
|
|
||||||
<TargetEnvironment>X64</TargetEnvironment>
|
|
||||||
</Midl>
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>MinSpace</Optimization>
|
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MINHOOK_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
|
||||||
<PrecompiledHeader>
|
|
||||||
</PrecompiledHeader>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>None</DebugInformationFormat>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
</ClCompile>
|
|
||||||
<Link>
|
|
||||||
<ModuleDefinitionFile>$(SolutionDir)..\..\dll_resources\MinHook.def</ModuleDefinitionFile>
|
|
||||||
<GenerateDebugInformation>false</GenerateDebugInformation>
|
|
||||||
<SubSystem>Windows</SubSystem>
|
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
|
||||||
<TargetMachine>MachineX64</TargetMachine>
|
|
||||||
<AdditionalDependencies>$(SolutionDir)lib\$(Configuration)\libMinHook.x64.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
<NoEntryPoint>true</NoEntryPoint>
|
|
||||||
<MergeSections>.CRT=.text</MergeSections>
|
|
||||||
</Link>
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<None Include="..\..\dll_resources\MinHook.def" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ResourceCompile Include="..\..\dll_resources\MinHook.rc" />
|
|
||||||
</ItemGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
|
||||||
<ImportGroup Label="ExtensionTargets">
|
|
||||||
</ImportGroup>
|
|
||||||
</Project>
|
|
|
@ -1,41 +0,0 @@
|
||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
|
||||||
# Visual Studio 15
|
|
||||||
VisualStudioVersion = 15.0.25123.0
|
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libMinHook", "libMinHook.vcxproj", "{F142A341-5EE0-442D-A15F-98AE9B48DBAE}"
|
|
||||||
EndProject
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MinHook", "MinHook.vcxproj", "{027FAC75-3FDB-4044-8DD0-BC297BD4C461}"
|
|
||||||
ProjectSection(ProjectDependencies) = postProject
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE} = {F142A341-5EE0-442D-A15F-98AE9B48DBAE}
|
|
||||||
EndProjectSection
|
|
||||||
EndProject
|
|
||||||
Global
|
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
|
||||||
Debug|Win32 = Debug|Win32
|
|
||||||
Debug|x64 = Debug|x64
|
|
||||||
Release|Win32 = Release|Win32
|
|
||||||
Release|x64 = Release|x64
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|x64.ActiveCfg = Debug|x64
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|x64.Build.0 = Debug|x64
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|x64.ActiveCfg = Release|x64
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|x64.Build.0 = Release|x64
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Debug|x64.ActiveCfg = Debug|x64
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Debug|x64.Build.0 = Debug|x64
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Release|x64.ActiveCfg = Release|x64
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Release|x64.Build.0 = Release|x64
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
|
||||||
HideSolutionNode = FALSE
|
|
||||||
EndGlobalSection
|
|
||||||
EndGlobal
|
|
|
@ -1,171 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<ItemGroup Label="ProjectConfigurations">
|
|
||||||
<ProjectConfiguration Include="Debug|Win32">
|
|
||||||
<Configuration>Debug</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Debug|x64">
|
|
||||||
<Configuration>Debug</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release|Win32">
|
|
||||||
<Configuration>Release</Configuration>
|
|
||||||
<Platform>Win32</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
<ProjectConfiguration Include="Release|x64">
|
|
||||||
<Configuration>Release</Configuration>
|
|
||||||
<Platform>x64</Platform>
|
|
||||||
</ProjectConfiguration>
|
|
||||||
</ItemGroup>
|
|
||||||
<PropertyGroup Label="Globals">
|
|
||||||
<ProjectGuid>{F142A341-5EE0-442D-A15F-98AE9B48DBAE}</ProjectGuid>
|
|
||||||
<RootNamespace>libMinHook</RootNamespace>
|
|
||||||
<Keyword>Win32Proj</Keyword>
|
|
||||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
<PlatformToolset>v142</PlatformToolset>
|
|
||||||
<SpectreMitigation>false</SpectreMitigation>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<PlatformToolset>v142</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
<PlatformToolset>v142</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
|
||||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
|
||||||
<CharacterSet>Unicode</CharacterSet>
|
|
||||||
<PlatformToolset>v142</PlatformToolset>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
|
||||||
<ImportGroup Label="ExtensionSettings">
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
</ImportGroup>
|
|
||||||
<PropertyGroup Label="UserMacros" />
|
|
||||||
<PropertyGroup>
|
|
||||||
<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)lib\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)lib\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)lib\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)lib\$(Configuration)\</OutDir>
|
|
||||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectName).x86</TargetName>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectName).x86</TargetName>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(ProjectName).x64</TargetName>
|
|
||||||
<TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(ProjectName).x64</TargetName>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>Disabled</Optimization>
|
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;STRICT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>None</DebugInformationFormat>
|
|
||||||
</ClCompile>
|
|
||||||
<Lib />
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
|
||||||
<Midl>
|
|
||||||
<TargetEnvironment>X64</TargetEnvironment>
|
|
||||||
</Midl>
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>Disabled</Optimization>
|
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;STRICT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
|
||||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>None</DebugInformationFormat>
|
|
||||||
<EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
|
|
||||||
</ClCompile>
|
|
||||||
<Lib />
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>MinSpace</Optimization>
|
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;STRICT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>None</DebugInformationFormat>
|
|
||||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
|
||||||
<CompileAs>CompileAsC</CompileAs>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
|
||||||
</ClCompile>
|
|
||||||
<Lib />
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
|
||||||
<Midl>
|
|
||||||
<TargetEnvironment>X64</TargetEnvironment>
|
|
||||||
</Midl>
|
|
||||||
<ClCompile>
|
|
||||||
<Optimization>MinSpace</Optimization>
|
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
|
||||||
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;STRICT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
|
||||||
<WarningLevel>Level3</WarningLevel>
|
|
||||||
<DebugInformationFormat>None</DebugInformationFormat>
|
|
||||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
|
||||||
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
|
|
||||||
</ClCompile>
|
|
||||||
<Lib />
|
|
||||||
</ItemDefinitionGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ClCompile Include="..\..\src\buffer.c" />
|
|
||||||
<ClCompile Include="..\..\src\HDE\hde32.c">
|
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
|
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\HDE\hde64.c">
|
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
|
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\hook.c" />
|
|
||||||
<ClCompile Include="..\..\src\trampoline.c" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ClInclude Include="..\..\include\MinHook.h" />
|
|
||||||
<ClInclude Include="..\..\src\buffer.h" />
|
|
||||||
<ClInclude Include="..\..\src\HDE\hde32.h" />
|
|
||||||
<ClInclude Include="..\..\src\HDE\hde64.h" />
|
|
||||||
<ClInclude Include="..\..\src\HDE\pstdint.h" />
|
|
||||||
<ClInclude Include="..\..\src\HDE\table32.h" />
|
|
||||||
<ClInclude Include="..\..\src\HDE\table64.h" />
|
|
||||||
<ClInclude Include="..\..\src\trampoline.h" />
|
|
||||||
</ItemGroup>
|
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
|
||||||
<ImportGroup Label="ExtensionTargets">
|
|
||||||
</ImportGroup>
|
|
||||||
</Project>
|
|
|
@ -1,55 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<ItemGroup>
|
|
||||||
<ClCompile Include="..\..\src\buffer.c">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\hook.c">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\trampoline.c">
|
|
||||||
<Filter>Source Files</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\HDE\hde32.c">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\HDE\hde64.c">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ClInclude Include="..\..\src\trampoline.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\buffer.h">
|
|
||||||
<Filter>Header Files</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\include\MinHook.h" />
|
|
||||||
<ClInclude Include="..\..\src\HDE\hde32.h">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\HDE\hde64.h">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\HDE\pstdint.h">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\HDE\table32.h">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
<ClInclude Include="..\..\src\HDE\table64.h">
|
|
||||||
<Filter>HDE</Filter>
|
|
||||||
</ClInclude>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Filter Include="Source Files">
|
|
||||||
<UniqueIdentifier>{9d24b740-be2e-4cfd-b9a4-340a50946ee9}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="Header Files">
|
|
||||||
<UniqueIdentifier>{76381bc7-2863-4cc5-aede-926ec2c506e4}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
<Filter Include="HDE">
|
|
||||||
<UniqueIdentifier>{56ddb326-6179-430d-ae19-e13bfd767bfa}</UniqueIdentifier>
|
|
||||||
</Filter>
|
|
||||||
</ItemGroup>
|
|
||||||
</Project>
|
|
|
@ -1,343 +0,0 @@
|
||||||
<?xml version="1.0" encoding="shift_jis"?>
|
|
||||||
<VisualStudioProject
|
|
||||||
ProjectType="Visual C++"
|
|
||||||
Version="9.00"
|
|
||||||
Name="MinHook"
|
|
||||||
ProjectGUID="{027FAC75-3FDB-4044-8DD0-BC297BD4C461}"
|
|
||||||
RootNamespace="MinHook"
|
|
||||||
Keyword="Win32Proj"
|
|
||||||
TargetFrameworkVersion="196613"
|
|
||||||
>
|
|
||||||
<Platforms>
|
|
||||||
<Platform
|
|
||||||
Name="Win32"
|
|
||||||
/>
|
|
||||||
<Platform
|
|
||||||
Name="x64"
|
|
||||||
/>
|
|
||||||
</Platforms>
|
|
||||||
<ToolFiles>
|
|
||||||
</ToolFiles>
|
|
||||||
<Configurations>
|
|
||||||
<Configuration
|
|
||||||
Name="Debug|Win32"
|
|
||||||
OutputDirectory="$(SolutionDir)bin\$(ConfigurationName)"
|
|
||||||
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\$(ProjectName)"
|
|
||||||
ConfigurationType="2"
|
|
||||||
CharacterSet="1"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="0"
|
|
||||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;MINHOOK_EXPORTS"
|
|
||||||
MinimalRebuild="false"
|
|
||||||
BasicRuntimeChecks="3"
|
|
||||||
RuntimeLibrary="1"
|
|
||||||
UsePrecompiledHeader="0"
|
|
||||||
WarningLevel="3"
|
|
||||||
DebugInformationFormat="4"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLinkerTool"
|
|
||||||
OutputFile="$(OutDir)\$(ProjectName).x86.dll"
|
|
||||||
LinkIncremental="2"
|
|
||||||
ModuleDefinitionFile="$(SolutionDir)..\..\dll_resources\MinHook.def"
|
|
||||||
GenerateDebugInformation="false"
|
|
||||||
SubSystem="2"
|
|
||||||
TargetMachine="1"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCALinkTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManifestTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXDCMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCBscMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCFxCopTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCAppVerifierTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration
|
|
||||||
Name="Debug|x64"
|
|
||||||
OutputDirectory="$(SolutionDir)bin\$(ConfigurationName)"
|
|
||||||
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\$(ProjectName)"
|
|
||||||
ConfigurationType="2"
|
|
||||||
CharacterSet="1"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
TargetEnvironment="3"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="0"
|
|
||||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;MINHOOK_EXPORTS"
|
|
||||||
MinimalRebuild="false"
|
|
||||||
BasicRuntimeChecks="3"
|
|
||||||
RuntimeLibrary="1"
|
|
||||||
UsePrecompiledHeader="0"
|
|
||||||
WarningLevel="3"
|
|
||||||
DebugInformationFormat="3"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLinkerTool"
|
|
||||||
OutputFile="$(OutDir)\$(ProjectName).x64.dll"
|
|
||||||
LinkIncremental="2"
|
|
||||||
ModuleDefinitionFile="$(SolutionDir)..\..\dll_resources\MinHook.def"
|
|
||||||
GenerateDebugInformation="false"
|
|
||||||
SubSystem="2"
|
|
||||||
TargetMachine="17"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCALinkTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManifestTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXDCMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCBscMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCFxCopTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCAppVerifierTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration
|
|
||||||
Name="Release|Win32"
|
|
||||||
OutputDirectory="$(SolutionDir)bin\$(ConfigurationName)"
|
|
||||||
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\$(ProjectName)"
|
|
||||||
ConfigurationType="2"
|
|
||||||
CharacterSet="1"
|
|
||||||
WholeProgramOptimization="1"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="1"
|
|
||||||
EnableIntrinsicFunctions="true"
|
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;MINHOOK_EXPORTS"
|
|
||||||
MinimalRebuild="false"
|
|
||||||
RuntimeLibrary="0"
|
|
||||||
EnableFunctionLevelLinking="true"
|
|
||||||
UsePrecompiledHeader="0"
|
|
||||||
WarningLevel="3"
|
|
||||||
DebugInformationFormat="3"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLinkerTool"
|
|
||||||
OutputFile="$(OutDir)\$(ProjectName).x86.dll"
|
|
||||||
LinkIncremental="1"
|
|
||||||
ModuleDefinitionFile="$(SolutionDir)..\..\dll_resources\MinHook.def"
|
|
||||||
GenerateDebugInformation="false"
|
|
||||||
SubSystem="2"
|
|
||||||
OptimizeReferences="2"
|
|
||||||
EnableCOMDATFolding="2"
|
|
||||||
ResourceOnlyDLL="true"
|
|
||||||
MergeSections=".CRT=.text"
|
|
||||||
TargetMachine="1"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCALinkTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManifestTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXDCMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCBscMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCFxCopTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCAppVerifierTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration
|
|
||||||
Name="Release|x64"
|
|
||||||
OutputDirectory="$(SolutionDir)bin\$(ConfigurationName)"
|
|
||||||
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\$(ProjectName)"
|
|
||||||
ConfigurationType="2"
|
|
||||||
CharacterSet="1"
|
|
||||||
WholeProgramOptimization="1"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
TargetEnvironment="3"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="1"
|
|
||||||
EnableIntrinsicFunctions="true"
|
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;MINHOOK_EXPORTS"
|
|
||||||
MinimalRebuild="false"
|
|
||||||
RuntimeLibrary="0"
|
|
||||||
EnableFunctionLevelLinking="true"
|
|
||||||
UsePrecompiledHeader="0"
|
|
||||||
WarningLevel="3"
|
|
||||||
DebugInformationFormat="3"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLinkerTool"
|
|
||||||
OutputFile="$(OutDir)\$(ProjectName).x64.dll"
|
|
||||||
LinkIncremental="1"
|
|
||||||
ModuleDefinitionFile="$(SolutionDir)..\..\dll_resources\MinHook.def"
|
|
||||||
GenerateDebugInformation="false"
|
|
||||||
SubSystem="2"
|
|
||||||
OptimizeReferences="2"
|
|
||||||
EnableCOMDATFolding="2"
|
|
||||||
ResourceOnlyDLL="true"
|
|
||||||
MergeSections=".CRT=.text"
|
|
||||||
TargetMachine="17"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCALinkTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManifestTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXDCMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCBscMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCFxCopTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCAppVerifierTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
</Configuration>
|
|
||||||
</Configurations>
|
|
||||||
<References>
|
|
||||||
</References>
|
|
||||||
<Files>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\dll_resources\MinHook.def"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\dll_resources\MinHook.rc"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
</Files>
|
|
||||||
<Globals>
|
|
||||||
</Globals>
|
|
||||||
</VisualStudioProject>
|
|
|
@ -1,39 +0,0 @@
|
||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 10.00
|
|
||||||
# Visual Studio 2008
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libMinHook", "libMinHook.vcproj", "{F142A341-5EE0-442D-A15F-98AE9B48DBAE}"
|
|
||||||
EndProject
|
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MinHook", "MinHook.vcproj", "{027FAC75-3FDB-4044-8DD0-BC297BD4C461}"
|
|
||||||
ProjectSection(ProjectDependencies) = postProject
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE} = {F142A341-5EE0-442D-A15F-98AE9B48DBAE}
|
|
||||||
EndProjectSection
|
|
||||||
EndProject
|
|
||||||
Global
|
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
|
||||||
Debug|Win32 = Debug|Win32
|
|
||||||
Debug|x64 = Debug|x64
|
|
||||||
Release|Win32 = Release|Win32
|
|
||||||
Release|x64 = Release|x64
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|x64.ActiveCfg = Debug|x64
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Debug|x64.Build.0 = Debug|x64
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|x64.ActiveCfg = Release|x64
|
|
||||||
{F142A341-5EE0-442D-A15F-98AE9B48DBAE}.Release|x64.Build.0 = Release|x64
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Debug|x64.ActiveCfg = Debug|x64
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Debug|x64.Build.0 = Debug|x64
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Release|x64.ActiveCfg = Release|x64
|
|
||||||
{027FAC75-3FDB-4044-8DD0-BC297BD4C461}.Release|x64.Build.0 = Release|x64
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
|
||||||
HideSolutionNode = FALSE
|
|
||||||
EndGlobalSection
|
|
||||||
EndGlobal
|
|
|
@ -1,410 +0,0 @@
|
||||||
<?xml version="1.0" encoding="shift_jis"?>
|
|
||||||
<VisualStudioProject
|
|
||||||
ProjectType="Visual C++"
|
|
||||||
Version="9.00"
|
|
||||||
Name="libMinHook"
|
|
||||||
ProjectGUID="{F142A341-5EE0-442D-A15F-98AE9B48DBAE}"
|
|
||||||
RootNamespace="libMinHook"
|
|
||||||
Keyword="Win32Proj"
|
|
||||||
TargetFrameworkVersion="196613"
|
|
||||||
>
|
|
||||||
<Platforms>
|
|
||||||
<Platform
|
|
||||||
Name="Win32"
|
|
||||||
/>
|
|
||||||
<Platform
|
|
||||||
Name="x64"
|
|
||||||
/>
|
|
||||||
</Platforms>
|
|
||||||
<ToolFiles>
|
|
||||||
</ToolFiles>
|
|
||||||
<Configurations>
|
|
||||||
<Configuration
|
|
||||||
Name="Debug|Win32"
|
|
||||||
OutputDirectory="$(SolutionDir)lib\$(ConfigurationName)"
|
|
||||||
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\$(ProjectName)"
|
|
||||||
ConfigurationType="4"
|
|
||||||
CharacterSet="1"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="0"
|
|
||||||
AdditionalIncludeDirectories=""
|
|
||||||
PreprocessorDefinitions="WIN32;_DEBUG;_LIB;STRICT"
|
|
||||||
MinimalRebuild="false"
|
|
||||||
BasicRuntimeChecks="3"
|
|
||||||
RuntimeLibrary="1"
|
|
||||||
UsePrecompiledHeader="0"
|
|
||||||
WarningLevel="3"
|
|
||||||
DebugInformationFormat="0"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLibrarianTool"
|
|
||||||
OutputFile="$(OutDir)\$(ProjectName).x86.lib"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCALinkTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXDCMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCBscMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCFxCopTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration
|
|
||||||
Name="Debug|x64"
|
|
||||||
OutputDirectory="$(SolutionDir)lib\$(ConfigurationName)"
|
|
||||||
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\$(ProjectName)"
|
|
||||||
ConfigurationType="4"
|
|
||||||
CharacterSet="1"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
TargetEnvironment="3"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="0"
|
|
||||||
WholeProgramOptimization="false"
|
|
||||||
AdditionalIncludeDirectories=""
|
|
||||||
PreprocessorDefinitions="WIN32;_DEBUG;_LIB;STRICT"
|
|
||||||
MinimalRebuild="false"
|
|
||||||
BasicRuntimeChecks="3"
|
|
||||||
RuntimeLibrary="1"
|
|
||||||
UsePrecompiledHeader="0"
|
|
||||||
WarningLevel="3"
|
|
||||||
DebugInformationFormat="0"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLibrarianTool"
|
|
||||||
OutputFile="$(OutDir)\$(ProjectName).x64.lib"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCALinkTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXDCMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCBscMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCFxCopTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration
|
|
||||||
Name="Release|Win32"
|
|
||||||
OutputDirectory="$(SolutionDir)lib\$(ConfigurationName)"
|
|
||||||
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\$(ProjectName)"
|
|
||||||
ConfigurationType="4"
|
|
||||||
CharacterSet="1"
|
|
||||||
WholeProgramOptimization="1"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="1"
|
|
||||||
InlineFunctionExpansion="2"
|
|
||||||
EnableIntrinsicFunctions="true"
|
|
||||||
WholeProgramOptimization="true"
|
|
||||||
AdditionalIncludeDirectories=""
|
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_LIB;STRICT"
|
|
||||||
MinimalRebuild="false"
|
|
||||||
RuntimeLibrary="0"
|
|
||||||
EnableFunctionLevelLinking="true"
|
|
||||||
UsePrecompiledHeader="0"
|
|
||||||
AssemblerOutput="2"
|
|
||||||
WarningLevel="3"
|
|
||||||
DebugInformationFormat="0"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLibrarianTool"
|
|
||||||
OutputFile="$(OutDir)\$(ProjectName).x86.lib"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCALinkTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXDCMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCBscMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCFxCopTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration
|
|
||||||
Name="Release|x64"
|
|
||||||
OutputDirectory="$(SolutionDir)lib\$(ConfigurationName)"
|
|
||||||
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\$(ProjectName)"
|
|
||||||
ConfigurationType="4"
|
|
||||||
CharacterSet="1"
|
|
||||||
WholeProgramOptimization="1"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
TargetEnvironment="3"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="1"
|
|
||||||
InlineFunctionExpansion="2"
|
|
||||||
EnableIntrinsicFunctions="true"
|
|
||||||
WholeProgramOptimization="true"
|
|
||||||
AdditionalIncludeDirectories=""
|
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_LIB;STRICT"
|
|
||||||
MinimalRebuild="false"
|
|
||||||
RuntimeLibrary="0"
|
|
||||||
EnableFunctionLevelLinking="true"
|
|
||||||
UsePrecompiledHeader="0"
|
|
||||||
AssemblerOutput="2"
|
|
||||||
WarningLevel="3"
|
|
||||||
DebugInformationFormat="0"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLibrarianTool"
|
|
||||||
OutputFile="$(OutDir)\$(ProjectName).x64.lib"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCALinkTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXDCMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCBscMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCFxCopTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
</Configuration>
|
|
||||||
</Configurations>
|
|
||||||
<References>
|
|
||||||
</References>
|
|
||||||
<Files>
|
|
||||||
<Filter
|
|
||||||
Name="Source Files"
|
|
||||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
|
||||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
|
||||||
>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\src\buffer.c"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\src\hook.c"
|
|
||||||
>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="Release|Win32"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="2"
|
|
||||||
/>
|
|
||||||
</FileConfiguration>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="Release|x64"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="2"
|
|
||||||
/>
|
|
||||||
</FileConfiguration>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\src\trampoline.c"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
</Filter>
|
|
||||||
<Filter
|
|
||||||
Name="Header Files"
|
|
||||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
|
||||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
|
||||||
>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\src\buffer.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\src\trampoline.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
</Filter>
|
|
||||||
<Filter
|
|
||||||
Name="HDE"
|
|
||||||
>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\src\HDE\hde32.c"
|
|
||||||
>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="Debug|x64"
|
|
||||||
ExcludedFromBuild="true"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
/>
|
|
||||||
</FileConfiguration>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="Release|x64"
|
|
||||||
ExcludedFromBuild="true"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
/>
|
|
||||||
</FileConfiguration>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\src\HDE\hde32.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\src\HDE\hde64.c"
|
|
||||||
>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="Debug|Win32"
|
|
||||||
ExcludedFromBuild="true"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
/>
|
|
||||||
</FileConfiguration>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="Release|Win32"
|
|
||||||
ExcludedFromBuild="true"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
/>
|
|
||||||
</FileConfiguration>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\src\HDE\hde64.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\src\HDE\pstdint.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\src\HDE\table32.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\src\HDE\table64.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
</Filter>
|
|
||||||
<File
|
|
||||||
RelativePath="..\..\include\MinHook.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
</Files>
|
|
||||||
<Globals>
|
|
||||||
</Globals>
|
|
||||||
</VisualStudioProject>
|
|
|
@ -1,14 +0,0 @@
|
||||||
EXPORTS
|
|
||||||
MH_Initialize
|
|
||||||
MH_Uninitialize
|
|
||||||
|
|
||||||
MH_CreateHook
|
|
||||||
MH_CreateHookApi
|
|
||||||
MH_CreateHookApiEx
|
|
||||||
MH_RemoveHook
|
|
||||||
MH_EnableHook
|
|
||||||
MH_DisableHook
|
|
||||||
MH_QueueEnableHook
|
|
||||||
MH_QueueDisableHook
|
|
||||||
MH_ApplyQueued
|
|
||||||
MH_StatusToString
|
|
|
@ -1,32 +0,0 @@
|
||||||
1 VERSIONINFO
|
|
||||||
FILEVERSION 1,3,3,0
|
|
||||||
PRODUCTVERSION 1,3,3,0
|
|
||||||
FILEFLAGSMASK 0x17L
|
|
||||||
#ifdef _DEBUG
|
|
||||||
FILEFLAGS 0x1L
|
|
||||||
#else
|
|
||||||
FILEFLAGS 0x0L
|
|
||||||
#endif
|
|
||||||
FILEOS 0x4L
|
|
||||||
FILETYPE 0x2L
|
|
||||||
FILESUBTYPE 0x0L
|
|
||||||
BEGIN
|
|
||||||
BLOCK "StringFileInfo"
|
|
||||||
BEGIN
|
|
||||||
BLOCK "040904b0"
|
|
||||||
BEGIN
|
|
||||||
VALUE "CompanyName", "Tsuda Kageyu"
|
|
||||||
VALUE "FileDescription", "MinHook - The Minimalistic API Hook Library for x64/x86"
|
|
||||||
VALUE "FileVersion", "1.3.3.0"
|
|
||||||
VALUE "InternalName", "MinHookD"
|
|
||||||
VALUE "LegalCopyright", "Copyright (C) 2009-2017 Tsuda Kageyu. All rights reserved."
|
|
||||||
VALUE "LegalTrademarks", "Tsuda Kageyu"
|
|
||||||
VALUE "ProductName", "MinHook DLL"
|
|
||||||
VALUE "ProductVersion", "1.3.3.0"
|
|
||||||
END
|
|
||||||
END
|
|
||||||
BLOCK "VarFileInfo"
|
|
||||||
BEGIN
|
|
||||||
VALUE "Translation", 0x409, 1200
|
|
||||||
END
|
|
||||||
END
|
|
|
@ -1,186 +0,0 @@
|
||||||
/*
|
|
||||||
* MinHook - The Minimalistic API Hooking Library for x64/x86
|
|
||||||
* Copyright (C) 2009-2017 Tsuda Kageyu.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
||||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
|
||||||
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER
|
|
||||||
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
||||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
||||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
||||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#if !(defined _M_IX86) && !(defined _M_X64) && !(defined __i386__) && !(defined __x86_64__)
|
|
||||||
#error MinHook supports only x86 and x64 systems.
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <windows.h>
|
|
||||||
|
|
||||||
// MinHook Error Codes.
|
|
||||||
typedef enum MH_STATUS
|
|
||||||
{
|
|
||||||
// Unknown error. Should not be returned.
|
|
||||||
MH_UNKNOWN = -1,
|
|
||||||
|
|
||||||
// Successful.
|
|
||||||
MH_OK = 0,
|
|
||||||
|
|
||||||
// MinHook is already initialized.
|
|
||||||
MH_ERROR_ALREADY_INITIALIZED,
|
|
||||||
|
|
||||||
// MinHook is not initialized yet, or already uninitialized.
|
|
||||||
MH_ERROR_NOT_INITIALIZED,
|
|
||||||
|
|
||||||
// The hook for the specified target function is already created.
|
|
||||||
MH_ERROR_ALREADY_CREATED,
|
|
||||||
|
|
||||||
// The hook for the specified target function is not created yet.
|
|
||||||
MH_ERROR_NOT_CREATED,
|
|
||||||
|
|
||||||
// The hook for the specified target function is already enabled.
|
|
||||||
MH_ERROR_ENABLED,
|
|
||||||
|
|
||||||
// The hook for the specified target function is not enabled yet, or already
|
|
||||||
// disabled.
|
|
||||||
MH_ERROR_DISABLED,
|
|
||||||
|
|
||||||
// The specified pointer is invalid. It points the address of non-allocated
|
|
||||||
// and/or non-executable region.
|
|
||||||
MH_ERROR_NOT_EXECUTABLE,
|
|
||||||
|
|
||||||
// The specified target function cannot be hooked.
|
|
||||||
MH_ERROR_UNSUPPORTED_FUNCTION,
|
|
||||||
|
|
||||||
// Failed to allocate memory.
|
|
||||||
MH_ERROR_MEMORY_ALLOC,
|
|
||||||
|
|
||||||
// Failed to change the memory protection.
|
|
||||||
MH_ERROR_MEMORY_PROTECT,
|
|
||||||
|
|
||||||
// The specified module is not loaded.
|
|
||||||
MH_ERROR_MODULE_NOT_FOUND,
|
|
||||||
|
|
||||||
// The specified function is not found.
|
|
||||||
MH_ERROR_FUNCTION_NOT_FOUND
|
|
||||||
}
|
|
||||||
MH_STATUS;
|
|
||||||
|
|
||||||
// Can be passed as a parameter to MH_EnableHook, MH_DisableHook,
|
|
||||||
// MH_QueueEnableHook or MH_QueueDisableHook.
|
|
||||||
#define MH_ALL_HOOKS NULL
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Initialize the MinHook library. You must call this function EXACTLY ONCE
|
|
||||||
// at the beginning of your program.
|
|
||||||
MH_STATUS WINAPI MH_Initialize(VOID);
|
|
||||||
|
|
||||||
// Uninitialize the MinHook library. You must call this function EXACTLY
|
|
||||||
// ONCE at the end of your program.
|
|
||||||
MH_STATUS WINAPI MH_Uninitialize(VOID);
|
|
||||||
|
|
||||||
// Creates a Hook for the specified target function, in disabled state.
|
|
||||||
// Parameters:
|
|
||||||
// pTarget [in] A pointer to the target function, which will be
|
|
||||||
// overridden by the detour function.
|
|
||||||
// pDetour [in] A pointer to the detour function, which will override
|
|
||||||
// the target function.
|
|
||||||
// ppOriginal [out] A pointer to the trampoline function, which will be
|
|
||||||
// used to call the original target function.
|
|
||||||
// This parameter can be NULL.
|
|
||||||
MH_STATUS WINAPI MH_CreateHook(LPVOID pTarget, LPVOID pDetour, LPVOID *ppOriginal);
|
|
||||||
|
|
||||||
// Creates a Hook for the specified API function, in disabled state.
|
|
||||||
// Parameters:
|
|
||||||
// pszModule [in] A pointer to the loaded module name which contains the
|
|
||||||
// target function.
|
|
||||||
// pszTarget [in] A pointer to the target function name, which will be
|
|
||||||
// overridden by the detour function.
|
|
||||||
// pDetour [in] A pointer to the detour function, which will override
|
|
||||||
// the target function.
|
|
||||||
// ppOriginal [out] A pointer to the trampoline function, which will be
|
|
||||||
// used to call the original target function.
|
|
||||||
// This parameter can be NULL.
|
|
||||||
MH_STATUS WINAPI MH_CreateHookApi(
|
|
||||||
LPCWSTR pszModule, LPCSTR pszProcName, LPVOID pDetour, LPVOID *ppOriginal);
|
|
||||||
|
|
||||||
// Creates a Hook for the specified API function, in disabled state.
|
|
||||||
// Parameters:
|
|
||||||
// pszModule [in] A pointer to the loaded module name which contains the
|
|
||||||
// target function.
|
|
||||||
// pszTarget [in] A pointer to the target function name, which will be
|
|
||||||
// overridden by the detour function.
|
|
||||||
// pDetour [in] A pointer to the detour function, which will override
|
|
||||||
// the target function.
|
|
||||||
// ppOriginal [out] A pointer to the trampoline function, which will be
|
|
||||||
// used to call the original target function.
|
|
||||||
// This parameter can be NULL.
|
|
||||||
// ppTarget [out] A pointer to the target function, which will be used
|
|
||||||
// with other functions.
|
|
||||||
// This parameter can be NULL.
|
|
||||||
MH_STATUS WINAPI MH_CreateHookApiEx(
|
|
||||||
LPCWSTR pszModule, LPCSTR pszProcName, LPVOID pDetour, LPVOID *ppOriginal, LPVOID *ppTarget);
|
|
||||||
|
|
||||||
// Removes an already created hook.
|
|
||||||
// Parameters:
|
|
||||||
// pTarget [in] A pointer to the target function.
|
|
||||||
MH_STATUS WINAPI MH_RemoveHook(LPVOID pTarget);
|
|
||||||
|
|
||||||
// Enables an already created hook.
|
|
||||||
// Parameters:
|
|
||||||
// pTarget [in] A pointer to the target function.
|
|
||||||
// If this parameter is MH_ALL_HOOKS, all created hooks are
|
|
||||||
// enabled in one go.
|
|
||||||
MH_STATUS WINAPI MH_EnableHook(LPVOID pTarget);
|
|
||||||
|
|
||||||
// Disables an already created hook.
|
|
||||||
// Parameters:
|
|
||||||
// pTarget [in] A pointer to the target function.
|
|
||||||
// If this parameter is MH_ALL_HOOKS, all created hooks are
|
|
||||||
// disabled in one go.
|
|
||||||
MH_STATUS WINAPI MH_DisableHook(LPVOID pTarget);
|
|
||||||
|
|
||||||
// Queues to enable an already created hook.
|
|
||||||
// Parameters:
|
|
||||||
// pTarget [in] A pointer to the target function.
|
|
||||||
// If this parameter is MH_ALL_HOOKS, all created hooks are
|
|
||||||
// queued to be enabled.
|
|
||||||
MH_STATUS WINAPI MH_QueueEnableHook(LPVOID pTarget);
|
|
||||||
|
|
||||||
// Queues to disable an already created hook.
|
|
||||||
// Parameters:
|
|
||||||
// pTarget [in] A pointer to the target function.
|
|
||||||
// If this parameter is MH_ALL_HOOKS, all created hooks are
|
|
||||||
// queued to be disabled.
|
|
||||||
MH_STATUS WINAPI MH_QueueDisableHook(LPVOID pTarget);
|
|
||||||
|
|
||||||
// Applies all queued changes in one go.
|
|
||||||
MH_STATUS WINAPI MH_ApplyQueued(VOID);
|
|
||||||
|
|
||||||
// Translates the MH_STATUS to its name as a string.
|
|
||||||
const char * WINAPI MH_StatusToString(MH_STATUS status);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -1,326 +0,0 @@
|
||||||
/*
|
|
||||||
* Hacker Disassembler Engine 32 C
|
|
||||||
* Copyright (c) 2008-2009, Vyacheslav Patkov.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined(_M_IX86) || defined(__i386__)
|
|
||||||
|
|
||||||
#include "hde32.h"
|
|
||||||
#include "table32.h"
|
|
||||||
|
|
||||||
unsigned int hde32_disasm(const void *code, hde32s *hs)
|
|
||||||
{
|
|
||||||
uint8_t x, c, *p = (uint8_t *)code, cflags, opcode, pref = 0;
|
|
||||||
uint8_t *ht = hde32_table, m_mod, m_reg, m_rm, disp_size = 0;
|
|
||||||
|
|
||||||
// Avoid using memset to reduce the footprint.
|
|
||||||
#ifndef _MSC_VER
|
|
||||||
memset((LPBYTE)hs, 0, sizeof(hde32s));
|
|
||||||
#else
|
|
||||||
__stosb((LPBYTE)hs, 0, sizeof(hde32s));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
for (x = 16; x; x--)
|
|
||||||
switch (c = *p++) {
|
|
||||||
case 0xf3:
|
|
||||||
hs->p_rep = c;
|
|
||||||
pref |= PRE_F3;
|
|
||||||
break;
|
|
||||||
case 0xf2:
|
|
||||||
hs->p_rep = c;
|
|
||||||
pref |= PRE_F2;
|
|
||||||
break;
|
|
||||||
case 0xf0:
|
|
||||||
hs->p_lock = c;
|
|
||||||
pref |= PRE_LOCK;
|
|
||||||
break;
|
|
||||||
case 0x26: case 0x2e: case 0x36:
|
|
||||||
case 0x3e: case 0x64: case 0x65:
|
|
||||||
hs->p_seg = c;
|
|
||||||
pref |= PRE_SEG;
|
|
||||||
break;
|
|
||||||
case 0x66:
|
|
||||||
hs->p_66 = c;
|
|
||||||
pref |= PRE_66;
|
|
||||||
break;
|
|
||||||
case 0x67:
|
|
||||||
hs->p_67 = c;
|
|
||||||
pref |= PRE_67;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
goto pref_done;
|
|
||||||
}
|
|
||||||
pref_done:
|
|
||||||
|
|
||||||
hs->flags = (uint32_t)pref << 23;
|
|
||||||
|
|
||||||
if (!pref)
|
|
||||||
pref |= PRE_NONE;
|
|
||||||
|
|
||||||
if ((hs->opcode = c) == 0x0f) {
|
|
||||||
hs->opcode2 = c = *p++;
|
|
||||||
ht += DELTA_OPCODES;
|
|
||||||
} else if (c >= 0xa0 && c <= 0xa3) {
|
|
||||||
if (pref & PRE_67)
|
|
||||||
pref |= PRE_66;
|
|
||||||
else
|
|
||||||
pref &= ~PRE_66;
|
|
||||||
}
|
|
||||||
|
|
||||||
opcode = c;
|
|
||||||
cflags = ht[ht[opcode / 4] + (opcode % 4)];
|
|
||||||
|
|
||||||
if (cflags == C_ERROR) {
|
|
||||||
hs->flags |= F_ERROR | F_ERROR_OPCODE;
|
|
||||||
cflags = 0;
|
|
||||||
if ((opcode & -3) == 0x24)
|
|
||||||
cflags++;
|
|
||||||
}
|
|
||||||
|
|
||||||
x = 0;
|
|
||||||
if (cflags & C_GROUP) {
|
|
||||||
uint16_t t;
|
|
||||||
t = *(uint16_t *)(ht + (cflags & 0x7f));
|
|
||||||
cflags = (uint8_t)t;
|
|
||||||
x = (uint8_t)(t >> 8);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hs->opcode2) {
|
|
||||||
ht = hde32_table + DELTA_PREFIXES;
|
|
||||||
if (ht[ht[opcode / 4] + (opcode % 4)] & pref)
|
|
||||||
hs->flags |= F_ERROR | F_ERROR_OPCODE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cflags & C_MODRM) {
|
|
||||||
hs->flags |= F_MODRM;
|
|
||||||
hs->modrm = c = *p++;
|
|
||||||
hs->modrm_mod = m_mod = c >> 6;
|
|
||||||
hs->modrm_rm = m_rm = c & 7;
|
|
||||||
hs->modrm_reg = m_reg = (c & 0x3f) >> 3;
|
|
||||||
|
|
||||||
if (x && ((x << m_reg) & 0x80))
|
|
||||||
hs->flags |= F_ERROR | F_ERROR_OPCODE;
|
|
||||||
|
|
||||||
if (!hs->opcode2 && opcode >= 0xd9 && opcode <= 0xdf) {
|
|
||||||
uint8_t t = opcode - 0xd9;
|
|
||||||
if (m_mod == 3) {
|
|
||||||
ht = hde32_table + DELTA_FPU_MODRM + t*8;
|
|
||||||
t = ht[m_reg] << m_rm;
|
|
||||||
} else {
|
|
||||||
ht = hde32_table + DELTA_FPU_REG;
|
|
||||||
t = ht[t] << m_reg;
|
|
||||||
}
|
|
||||||
if (t & 0x80)
|
|
||||||
hs->flags |= F_ERROR | F_ERROR_OPCODE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pref & PRE_LOCK) {
|
|
||||||
if (m_mod == 3) {
|
|
||||||
hs->flags |= F_ERROR | F_ERROR_LOCK;
|
|
||||||
} else {
|
|
||||||
uint8_t *table_end, op = opcode;
|
|
||||||
if (hs->opcode2) {
|
|
||||||
ht = hde32_table + DELTA_OP2_LOCK_OK;
|
|
||||||
table_end = ht + DELTA_OP_ONLY_MEM - DELTA_OP2_LOCK_OK;
|
|
||||||
} else {
|
|
||||||
ht = hde32_table + DELTA_OP_LOCK_OK;
|
|
||||||
table_end = ht + DELTA_OP2_LOCK_OK - DELTA_OP_LOCK_OK;
|
|
||||||
op &= -2;
|
|
||||||
}
|
|
||||||
for (; ht != table_end; ht++)
|
|
||||||
if (*ht++ == op) {
|
|
||||||
if (!((*ht << m_reg) & 0x80))
|
|
||||||
goto no_lock_error;
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
hs->flags |= F_ERROR | F_ERROR_LOCK;
|
|
||||||
no_lock_error:
|
|
||||||
;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hs->opcode2) {
|
|
||||||
switch (opcode) {
|
|
||||||
case 0x20: case 0x22:
|
|
||||||
m_mod = 3;
|
|
||||||
if (m_reg > 4 || m_reg == 1)
|
|
||||||
goto error_operand;
|
|
||||||
else
|
|
||||||
goto no_error_operand;
|
|
||||||
case 0x21: case 0x23:
|
|
||||||
m_mod = 3;
|
|
||||||
if (m_reg == 4 || m_reg == 5)
|
|
||||||
goto error_operand;
|
|
||||||
else
|
|
||||||
goto no_error_operand;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
switch (opcode) {
|
|
||||||
case 0x8c:
|
|
||||||
if (m_reg > 5)
|
|
||||||
goto error_operand;
|
|
||||||
else
|
|
||||||
goto no_error_operand;
|
|
||||||
case 0x8e:
|
|
||||||
if (m_reg == 1 || m_reg > 5)
|
|
||||||
goto error_operand;
|
|
||||||
else
|
|
||||||
goto no_error_operand;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_mod == 3) {
|
|
||||||
uint8_t *table_end;
|
|
||||||
if (hs->opcode2) {
|
|
||||||
ht = hde32_table + DELTA_OP2_ONLY_MEM;
|
|
||||||
table_end = ht + sizeof(hde32_table) - DELTA_OP2_ONLY_MEM;
|
|
||||||
} else {
|
|
||||||
ht = hde32_table + DELTA_OP_ONLY_MEM;
|
|
||||||
table_end = ht + DELTA_OP2_ONLY_MEM - DELTA_OP_ONLY_MEM;
|
|
||||||
}
|
|
||||||
for (; ht != table_end; ht += 2)
|
|
||||||
if (*ht++ == opcode) {
|
|
||||||
if (*ht++ & pref && !((*ht << m_reg) & 0x80))
|
|
||||||
goto error_operand;
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
goto no_error_operand;
|
|
||||||
} else if (hs->opcode2) {
|
|
||||||
switch (opcode) {
|
|
||||||
case 0x50: case 0xd7: case 0xf7:
|
|
||||||
if (pref & (PRE_NONE | PRE_66))
|
|
||||||
goto error_operand;
|
|
||||||
break;
|
|
||||||
case 0xd6:
|
|
||||||
if (pref & (PRE_F2 | PRE_F3))
|
|
||||||
goto error_operand;
|
|
||||||
break;
|
|
||||||
case 0xc5:
|
|
||||||
goto error_operand;
|
|
||||||
}
|
|
||||||
goto no_error_operand;
|
|
||||||
} else
|
|
||||||
goto no_error_operand;
|
|
||||||
|
|
||||||
error_operand:
|
|
||||||
hs->flags |= F_ERROR | F_ERROR_OPERAND;
|
|
||||||
no_error_operand:
|
|
||||||
|
|
||||||
c = *p++;
|
|
||||||
if (m_reg <= 1) {
|
|
||||||
if (opcode == 0xf6)
|
|
||||||
cflags |= C_IMM8;
|
|
||||||
else if (opcode == 0xf7)
|
|
||||||
cflags |= C_IMM_P66;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (m_mod) {
|
|
||||||
case 0:
|
|
||||||
if (pref & PRE_67) {
|
|
||||||
if (m_rm == 6)
|
|
||||||
disp_size = 2;
|
|
||||||
} else
|
|
||||||
if (m_rm == 5)
|
|
||||||
disp_size = 4;
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
disp_size = 1;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
disp_size = 2;
|
|
||||||
if (!(pref & PRE_67))
|
|
||||||
disp_size <<= 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_mod != 3 && m_rm == 4 && !(pref & PRE_67)) {
|
|
||||||
hs->flags |= F_SIB;
|
|
||||||
p++;
|
|
||||||
hs->sib = c;
|
|
||||||
hs->sib_scale = c >> 6;
|
|
||||||
hs->sib_index = (c & 0x3f) >> 3;
|
|
||||||
if ((hs->sib_base = c & 7) == 5 && !(m_mod & 1))
|
|
||||||
disp_size = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
p--;
|
|
||||||
switch (disp_size) {
|
|
||||||
case 1:
|
|
||||||
hs->flags |= F_DISP8;
|
|
||||||
hs->disp.disp8 = *p;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
hs->flags |= F_DISP16;
|
|
||||||
hs->disp.disp16 = *(uint16_t *)p;
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
hs->flags |= F_DISP32;
|
|
||||||
hs->disp.disp32 = *(uint32_t *)p;
|
|
||||||
}
|
|
||||||
p += disp_size;
|
|
||||||
} else if (pref & PRE_LOCK)
|
|
||||||
hs->flags |= F_ERROR | F_ERROR_LOCK;
|
|
||||||
|
|
||||||
if (cflags & C_IMM_P66) {
|
|
||||||
if (cflags & C_REL32) {
|
|
||||||
if (pref & PRE_66) {
|
|
||||||
hs->flags |= F_IMM16 | F_RELATIVE;
|
|
||||||
hs->imm.imm16 = *(uint16_t *)p;
|
|
||||||
p += 2;
|
|
||||||
goto disasm_done;
|
|
||||||
}
|
|
||||||
goto rel32_ok;
|
|
||||||
}
|
|
||||||
if (pref & PRE_66) {
|
|
||||||
hs->flags |= F_IMM16;
|
|
||||||
hs->imm.imm16 = *(uint16_t *)p;
|
|
||||||
p += 2;
|
|
||||||
} else {
|
|
||||||
hs->flags |= F_IMM32;
|
|
||||||
hs->imm.imm32 = *(uint32_t *)p;
|
|
||||||
p += 4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cflags & C_IMM16) {
|
|
||||||
if (hs->flags & F_IMM32) {
|
|
||||||
hs->flags |= F_IMM16;
|
|
||||||
hs->disp.disp16 = *(uint16_t *)p;
|
|
||||||
} else if (hs->flags & F_IMM16) {
|
|
||||||
hs->flags |= F_2IMM16;
|
|
||||||
hs->disp.disp16 = *(uint16_t *)p;
|
|
||||||
} else {
|
|
||||||
hs->flags |= F_IMM16;
|
|
||||||
hs->imm.imm16 = *(uint16_t *)p;
|
|
||||||
}
|
|
||||||
p += 2;
|
|
||||||
}
|
|
||||||
if (cflags & C_IMM8) {
|
|
||||||
hs->flags |= F_IMM8;
|
|
||||||
hs->imm.imm8 = *p++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cflags & C_REL32) {
|
|
||||||
rel32_ok:
|
|
||||||
hs->flags |= F_IMM32 | F_RELATIVE;
|
|
||||||
hs->imm.imm32 = *(uint32_t *)p;
|
|
||||||
p += 4;
|
|
||||||
} else if (cflags & C_REL8) {
|
|
||||||
hs->flags |= F_IMM8 | F_RELATIVE;
|
|
||||||
hs->imm.imm8 = *p++;
|
|
||||||
}
|
|
||||||
|
|
||||||
disasm_done:
|
|
||||||
|
|
||||||
if ((hs->len = (uint8_t)(p-(uint8_t *)code)) > 15) {
|
|
||||||
hs->flags |= F_ERROR | F_ERROR_LENGTH;
|
|
||||||
hs->len = 15;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (unsigned int)hs->len;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // defined(_M_IX86) || defined(__i386__)
|
|
|
@ -1,105 +0,0 @@
|
||||||
/*
|
|
||||||
* Hacker Disassembler Engine 32
|
|
||||||
* Copyright (c) 2006-2009, Vyacheslav Patkov.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* hde32.h: C/C++ header file
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _HDE32_H_
|
|
||||||
#define _HDE32_H_
|
|
||||||
|
|
||||||
/* stdint.h - C99 standard header
|
|
||||||
* http://en.wikipedia.org/wiki/stdint.h
|
|
||||||
*
|
|
||||||
* if your compiler doesn't contain "stdint.h" header (for
|
|
||||||
* example, Microsoft Visual C++), you can download file:
|
|
||||||
* http://www.azillionmonkeys.com/qed/pstdint.h
|
|
||||||
* and change next line to:
|
|
||||||
* #include "pstdint.h"
|
|
||||||
*/
|
|
||||||
#include "pstdint.h"
|
|
||||||
|
|
||||||
#define F_MODRM 0x00000001
|
|
||||||
#define F_SIB 0x00000002
|
|
||||||
#define F_IMM8 0x00000004
|
|
||||||
#define F_IMM16 0x00000008
|
|
||||||
#define F_IMM32 0x00000010
|
|
||||||
#define F_DISP8 0x00000020
|
|
||||||
#define F_DISP16 0x00000040
|
|
||||||
#define F_DISP32 0x00000080
|
|
||||||
#define F_RELATIVE 0x00000100
|
|
||||||
#define F_2IMM16 0x00000800
|
|
||||||
#define F_ERROR 0x00001000
|
|
||||||
#define F_ERROR_OPCODE 0x00002000
|
|
||||||
#define F_ERROR_LENGTH 0x00004000
|
|
||||||
#define F_ERROR_LOCK 0x00008000
|
|
||||||
#define F_ERROR_OPERAND 0x00010000
|
|
||||||
#define F_PREFIX_REPNZ 0x01000000
|
|
||||||
#define F_PREFIX_REPX 0x02000000
|
|
||||||
#define F_PREFIX_REP 0x03000000
|
|
||||||
#define F_PREFIX_66 0x04000000
|
|
||||||
#define F_PREFIX_67 0x08000000
|
|
||||||
#define F_PREFIX_LOCK 0x10000000
|
|
||||||
#define F_PREFIX_SEG 0x20000000
|
|
||||||
#define F_PREFIX_ANY 0x3f000000
|
|
||||||
|
|
||||||
#define PREFIX_SEGMENT_CS 0x2e
|
|
||||||
#define PREFIX_SEGMENT_SS 0x36
|
|
||||||
#define PREFIX_SEGMENT_DS 0x3e
|
|
||||||
#define PREFIX_SEGMENT_ES 0x26
|
|
||||||
#define PREFIX_SEGMENT_FS 0x64
|
|
||||||
#define PREFIX_SEGMENT_GS 0x65
|
|
||||||
#define PREFIX_LOCK 0xf0
|
|
||||||
#define PREFIX_REPNZ 0xf2
|
|
||||||
#define PREFIX_REPX 0xf3
|
|
||||||
#define PREFIX_OPERAND_SIZE 0x66
|
|
||||||
#define PREFIX_ADDRESS_SIZE 0x67
|
|
||||||
|
|
||||||
#pragma pack(push,1)
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
uint8_t len;
|
|
||||||
uint8_t p_rep;
|
|
||||||
uint8_t p_lock;
|
|
||||||
uint8_t p_seg;
|
|
||||||
uint8_t p_66;
|
|
||||||
uint8_t p_67;
|
|
||||||
uint8_t opcode;
|
|
||||||
uint8_t opcode2;
|
|
||||||
uint8_t modrm;
|
|
||||||
uint8_t modrm_mod;
|
|
||||||
uint8_t modrm_reg;
|
|
||||||
uint8_t modrm_rm;
|
|
||||||
uint8_t sib;
|
|
||||||
uint8_t sib_scale;
|
|
||||||
uint8_t sib_index;
|
|
||||||
uint8_t sib_base;
|
|
||||||
union {
|
|
||||||
uint8_t imm8;
|
|
||||||
uint16_t imm16;
|
|
||||||
uint32_t imm32;
|
|
||||||
} imm;
|
|
||||||
union {
|
|
||||||
uint8_t disp8;
|
|
||||||
uint16_t disp16;
|
|
||||||
uint32_t disp32;
|
|
||||||
} disp;
|
|
||||||
uint32_t flags;
|
|
||||||
} hde32s;
|
|
||||||
|
|
||||||
#pragma pack(pop)
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* __cdecl */
|
|
||||||
unsigned int hde32_disasm(const void *code, hde32s *hs);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* _HDE32_H_ */
|
|
|
@ -1,337 +0,0 @@
|
||||||
/*
|
|
||||||
* Hacker Disassembler Engine 64 C
|
|
||||||
* Copyright (c) 2008-2009, Vyacheslav Patkov.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined(_M_X64) || defined(__x86_64__)
|
|
||||||
|
|
||||||
#include "hde64.h"
|
|
||||||
#include "table64.h"
|
|
||||||
|
|
||||||
unsigned int hde64_disasm(const void *code, hde64s *hs)
|
|
||||||
{
|
|
||||||
uint8_t x, c, *p = (uint8_t *)code, cflags, opcode, pref = 0;
|
|
||||||
uint8_t *ht = hde64_table, m_mod, m_reg, m_rm, disp_size = 0;
|
|
||||||
uint8_t op64 = 0;
|
|
||||||
|
|
||||||
// Avoid using memset to reduce the footprint.
|
|
||||||
#ifndef _MSC_VER
|
|
||||||
memset((LPBYTE)hs, 0, sizeof(hde64s));
|
|
||||||
#else
|
|
||||||
__stosb((LPBYTE)hs, 0, sizeof(hde64s));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
for (x = 16; x; x--)
|
|
||||||
switch (c = *p++) {
|
|
||||||
case 0xf3:
|
|
||||||
hs->p_rep = c;
|
|
||||||
pref |= PRE_F3;
|
|
||||||
break;
|
|
||||||
case 0xf2:
|
|
||||||
hs->p_rep = c;
|
|
||||||
pref |= PRE_F2;
|
|
||||||
break;
|
|
||||||
case 0xf0:
|
|
||||||
hs->p_lock = c;
|
|
||||||
pref |= PRE_LOCK;
|
|
||||||
break;
|
|
||||||
case 0x26: case 0x2e: case 0x36:
|
|
||||||
case 0x3e: case 0x64: case 0x65:
|
|
||||||
hs->p_seg = c;
|
|
||||||
pref |= PRE_SEG;
|
|
||||||
break;
|
|
||||||
case 0x66:
|
|
||||||
hs->p_66 = c;
|
|
||||||
pref |= PRE_66;
|
|
||||||
break;
|
|
||||||
case 0x67:
|
|
||||||
hs->p_67 = c;
|
|
||||||
pref |= PRE_67;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
goto pref_done;
|
|
||||||
}
|
|
||||||
pref_done:
|
|
||||||
|
|
||||||
hs->flags = (uint32_t)pref << 23;
|
|
||||||
|
|
||||||
if (!pref)
|
|
||||||
pref |= PRE_NONE;
|
|
||||||
|
|
||||||
if ((c & 0xf0) == 0x40) {
|
|
||||||
hs->flags |= F_PREFIX_REX;
|
|
||||||
if ((hs->rex_w = (c & 0xf) >> 3) && (*p & 0xf8) == 0xb8)
|
|
||||||
op64++;
|
|
||||||
hs->rex_r = (c & 7) >> 2;
|
|
||||||
hs->rex_x = (c & 3) >> 1;
|
|
||||||
hs->rex_b = c & 1;
|
|
||||||
if (((c = *p++) & 0xf0) == 0x40) {
|
|
||||||
opcode = c;
|
|
||||||
goto error_opcode;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((hs->opcode = c) == 0x0f) {
|
|
||||||
hs->opcode2 = c = *p++;
|
|
||||||
ht += DELTA_OPCODES;
|
|
||||||
} else if (c >= 0xa0 && c <= 0xa3) {
|
|
||||||
op64++;
|
|
||||||
if (pref & PRE_67)
|
|
||||||
pref |= PRE_66;
|
|
||||||
else
|
|
||||||
pref &= ~PRE_66;
|
|
||||||
}
|
|
||||||
|
|
||||||
opcode = c;
|
|
||||||
cflags = ht[ht[opcode / 4] + (opcode % 4)];
|
|
||||||
|
|
||||||
if (cflags == C_ERROR) {
|
|
||||||
error_opcode:
|
|
||||||
hs->flags |= F_ERROR | F_ERROR_OPCODE;
|
|
||||||
cflags = 0;
|
|
||||||
if ((opcode & -3) == 0x24)
|
|
||||||
cflags++;
|
|
||||||
}
|
|
||||||
|
|
||||||
x = 0;
|
|
||||||
if (cflags & C_GROUP) {
|
|
||||||
uint16_t t;
|
|
||||||
t = *(uint16_t *)(ht + (cflags & 0x7f));
|
|
||||||
cflags = (uint8_t)t;
|
|
||||||
x = (uint8_t)(t >> 8);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hs->opcode2) {
|
|
||||||
ht = hde64_table + DELTA_PREFIXES;
|
|
||||||
if (ht[ht[opcode / 4] + (opcode % 4)] & pref)
|
|
||||||
hs->flags |= F_ERROR | F_ERROR_OPCODE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cflags & C_MODRM) {
|
|
||||||
hs->flags |= F_MODRM;
|
|
||||||
hs->modrm = c = *p++;
|
|
||||||
hs->modrm_mod = m_mod = c >> 6;
|
|
||||||
hs->modrm_rm = m_rm = c & 7;
|
|
||||||
hs->modrm_reg = m_reg = (c & 0x3f) >> 3;
|
|
||||||
|
|
||||||
if (x && ((x << m_reg) & 0x80))
|
|
||||||
hs->flags |= F_ERROR | F_ERROR_OPCODE;
|
|
||||||
|
|
||||||
if (!hs->opcode2 && opcode >= 0xd9 && opcode <= 0xdf) {
|
|
||||||
uint8_t t = opcode - 0xd9;
|
|
||||||
if (m_mod == 3) {
|
|
||||||
ht = hde64_table + DELTA_FPU_MODRM + t*8;
|
|
||||||
t = ht[m_reg] << m_rm;
|
|
||||||
} else {
|
|
||||||
ht = hde64_table + DELTA_FPU_REG;
|
|
||||||
t = ht[t] << m_reg;
|
|
||||||
}
|
|
||||||
if (t & 0x80)
|
|
||||||
hs->flags |= F_ERROR | F_ERROR_OPCODE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pref & PRE_LOCK) {
|
|
||||||
if (m_mod == 3) {
|
|
||||||
hs->flags |= F_ERROR | F_ERROR_LOCK;
|
|
||||||
} else {
|
|
||||||
uint8_t *table_end, op = opcode;
|
|
||||||
if (hs->opcode2) {
|
|
||||||
ht = hde64_table + DELTA_OP2_LOCK_OK;
|
|
||||||
table_end = ht + DELTA_OP_ONLY_MEM - DELTA_OP2_LOCK_OK;
|
|
||||||
} else {
|
|
||||||
ht = hde64_table + DELTA_OP_LOCK_OK;
|
|
||||||
table_end = ht + DELTA_OP2_LOCK_OK - DELTA_OP_LOCK_OK;
|
|
||||||
op &= -2;
|
|
||||||
}
|
|
||||||
for (; ht != table_end; ht++)
|
|
||||||
if (*ht++ == op) {
|
|
||||||
if (!((*ht << m_reg) & 0x80))
|
|
||||||
goto no_lock_error;
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
hs->flags |= F_ERROR | F_ERROR_LOCK;
|
|
||||||
no_lock_error:
|
|
||||||
;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hs->opcode2) {
|
|
||||||
switch (opcode) {
|
|
||||||
case 0x20: case 0x22:
|
|
||||||
m_mod = 3;
|
|
||||||
if (m_reg > 4 || m_reg == 1)
|
|
||||||
goto error_operand;
|
|
||||||
else
|
|
||||||
goto no_error_operand;
|
|
||||||
case 0x21: case 0x23:
|
|
||||||
m_mod = 3;
|
|
||||||
if (m_reg == 4 || m_reg == 5)
|
|
||||||
goto error_operand;
|
|
||||||
else
|
|
||||||
goto no_error_operand;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
switch (opcode) {
|
|
||||||
case 0x8c:
|
|
||||||
if (m_reg > 5)
|
|
||||||
goto error_operand;
|
|
||||||
else
|
|
||||||
goto no_error_operand;
|
|
||||||
case 0x8e:
|
|
||||||
if (m_reg == 1 || m_reg > 5)
|
|
||||||
goto error_operand;
|
|
||||||
else
|
|
||||||
goto no_error_operand;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_mod == 3) {
|
|
||||||
uint8_t *table_end;
|
|
||||||
if (hs->opcode2) {
|
|
||||||
ht = hde64_table + DELTA_OP2_ONLY_MEM;
|
|
||||||
table_end = ht + sizeof(hde64_table) - DELTA_OP2_ONLY_MEM;
|
|
||||||
} else {
|
|
||||||
ht = hde64_table + DELTA_OP_ONLY_MEM;
|
|
||||||
table_end = ht + DELTA_OP2_ONLY_MEM - DELTA_OP_ONLY_MEM;
|
|
||||||
}
|
|
||||||
for (; ht != table_end; ht += 2)
|
|
||||||
if (*ht++ == opcode) {
|
|
||||||
if (*ht++ & pref && !((*ht << m_reg) & 0x80))
|
|
||||||
goto error_operand;
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
goto no_error_operand;
|
|
||||||
} else if (hs->opcode2) {
|
|
||||||
switch (opcode) {
|
|
||||||
case 0x50: case 0xd7: case 0xf7:
|
|
||||||
if (pref & (PRE_NONE | PRE_66))
|
|
||||||
goto error_operand;
|
|
||||||
break;
|
|
||||||
case 0xd6:
|
|
||||||
if (pref & (PRE_F2 | PRE_F3))
|
|
||||||
goto error_operand;
|
|
||||||
break;
|
|
||||||
case 0xc5:
|
|
||||||
goto error_operand;
|
|
||||||
}
|
|
||||||
goto no_error_operand;
|
|
||||||
} else
|
|
||||||
goto no_error_operand;
|
|
||||||
|
|
||||||
error_operand:
|
|
||||||
hs->flags |= F_ERROR | F_ERROR_OPERAND;
|
|
||||||
no_error_operand:
|
|
||||||
|
|
||||||
c = *p++;
|
|
||||||
if (m_reg <= 1) {
|
|
||||||
if (opcode == 0xf6)
|
|
||||||
cflags |= C_IMM8;
|
|
||||||
else if (opcode == 0xf7)
|
|
||||||
cflags |= C_IMM_P66;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (m_mod) {
|
|
||||||
case 0:
|
|
||||||
if (pref & PRE_67) {
|
|
||||||
if (m_rm == 6)
|
|
||||||
disp_size = 2;
|
|
||||||
} else
|
|
||||||
if (m_rm == 5)
|
|
||||||
disp_size = 4;
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
disp_size = 1;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
disp_size = 2;
|
|
||||||
if (!(pref & PRE_67))
|
|
||||||
disp_size <<= 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_mod != 3 && m_rm == 4) {
|
|
||||||
hs->flags |= F_SIB;
|
|
||||||
p++;
|
|
||||||
hs->sib = c;
|
|
||||||
hs->sib_scale = c >> 6;
|
|
||||||
hs->sib_index = (c & 0x3f) >> 3;
|
|
||||||
if ((hs->sib_base = c & 7) == 5 && !(m_mod & 1))
|
|
||||||
disp_size = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
p--;
|
|
||||||
switch (disp_size) {
|
|
||||||
case 1:
|
|
||||||
hs->flags |= F_DISP8;
|
|
||||||
hs->disp.disp8 = *p;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
hs->flags |= F_DISP16;
|
|
||||||
hs->disp.disp16 = *(uint16_t *)p;
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
hs->flags |= F_DISP32;
|
|
||||||
hs->disp.disp32 = *(uint32_t *)p;
|
|
||||||
}
|
|
||||||
p += disp_size;
|
|
||||||
} else if (pref & PRE_LOCK)
|
|
||||||
hs->flags |= F_ERROR | F_ERROR_LOCK;
|
|
||||||
|
|
||||||
if (cflags & C_IMM_P66) {
|
|
||||||
if (cflags & C_REL32) {
|
|
||||||
if (pref & PRE_66) {
|
|
||||||
hs->flags |= F_IMM16 | F_RELATIVE;
|
|
||||||
hs->imm.imm16 = *(uint16_t *)p;
|
|
||||||
p += 2;
|
|
||||||
goto disasm_done;
|
|
||||||
}
|
|
||||||
goto rel32_ok;
|
|
||||||
}
|
|
||||||
if (op64) {
|
|
||||||
hs->flags |= F_IMM64;
|
|
||||||
hs->imm.imm64 = *(uint64_t *)p;
|
|
||||||
p += 8;
|
|
||||||
} else if (!(pref & PRE_66)) {
|
|
||||||
hs->flags |= F_IMM32;
|
|
||||||
hs->imm.imm32 = *(uint32_t *)p;
|
|
||||||
p += 4;
|
|
||||||
} else
|
|
||||||
goto imm16_ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (cflags & C_IMM16) {
|
|
||||||
imm16_ok:
|
|
||||||
hs->flags |= F_IMM16;
|
|
||||||
hs->imm.imm16 = *(uint16_t *)p;
|
|
||||||
p += 2;
|
|
||||||
}
|
|
||||||
if (cflags & C_IMM8) {
|
|
||||||
hs->flags |= F_IMM8;
|
|
||||||
hs->imm.imm8 = *p++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cflags & C_REL32) {
|
|
||||||
rel32_ok:
|
|
||||||
hs->flags |= F_IMM32 | F_RELATIVE;
|
|
||||||
hs->imm.imm32 = *(uint32_t *)p;
|
|
||||||
p += 4;
|
|
||||||
} else if (cflags & C_REL8) {
|
|
||||||
hs->flags |= F_IMM8 | F_RELATIVE;
|
|
||||||
hs->imm.imm8 = *p++;
|
|
||||||
}
|
|
||||||
|
|
||||||
disasm_done:
|
|
||||||
|
|
||||||
if ((hs->len = (uint8_t)(p-(uint8_t *)code)) > 15) {
|
|
||||||
hs->flags |= F_ERROR | F_ERROR_LENGTH;
|
|
||||||
hs->len = 15;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (unsigned int)hs->len;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // defined(_M_X64) || defined(__x86_64__)
|
|
|
@ -1,112 +0,0 @@
|
||||||
/*
|
|
||||||
* Hacker Disassembler Engine 64
|
|
||||||
* Copyright (c) 2008-2009, Vyacheslav Patkov.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* hde64.h: C/C++ header file
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _HDE64_H_
|
|
||||||
#define _HDE64_H_
|
|
||||||
|
|
||||||
/* stdint.h - C99 standard header
|
|
||||||
* http://en.wikipedia.org/wiki/stdint.h
|
|
||||||
*
|
|
||||||
* if your compiler doesn't contain "stdint.h" header (for
|
|
||||||
* example, Microsoft Visual C++), you can download file:
|
|
||||||
* http://www.azillionmonkeys.com/qed/pstdint.h
|
|
||||||
* and change next line to:
|
|
||||||
* #include "pstdint.h"
|
|
||||||
*/
|
|
||||||
#include "pstdint.h"
|
|
||||||
|
|
||||||
#define F_MODRM 0x00000001
|
|
||||||
#define F_SIB 0x00000002
|
|
||||||
#define F_IMM8 0x00000004
|
|
||||||
#define F_IMM16 0x00000008
|
|
||||||
#define F_IMM32 0x00000010
|
|
||||||
#define F_IMM64 0x00000020
|
|
||||||
#define F_DISP8 0x00000040
|
|
||||||
#define F_DISP16 0x00000080
|
|
||||||
#define F_DISP32 0x00000100
|
|
||||||
#define F_RELATIVE 0x00000200
|
|
||||||
#define F_ERROR 0x00001000
|
|
||||||
#define F_ERROR_OPCODE 0x00002000
|
|
||||||
#define F_ERROR_LENGTH 0x00004000
|
|
||||||
#define F_ERROR_LOCK 0x00008000
|
|
||||||
#define F_ERROR_OPERAND 0x00010000
|
|
||||||
#define F_PREFIX_REPNZ 0x01000000
|
|
||||||
#define F_PREFIX_REPX 0x02000000
|
|
||||||
#define F_PREFIX_REP 0x03000000
|
|
||||||
#define F_PREFIX_66 0x04000000
|
|
||||||
#define F_PREFIX_67 0x08000000
|
|
||||||
#define F_PREFIX_LOCK 0x10000000
|
|
||||||
#define F_PREFIX_SEG 0x20000000
|
|
||||||
#define F_PREFIX_REX 0x40000000
|
|
||||||
#define F_PREFIX_ANY 0x7f000000
|
|
||||||
|
|
||||||
#define PREFIX_SEGMENT_CS 0x2e
|
|
||||||
#define PREFIX_SEGMENT_SS 0x36
|
|
||||||
#define PREFIX_SEGMENT_DS 0x3e
|
|
||||||
#define PREFIX_SEGMENT_ES 0x26
|
|
||||||
#define PREFIX_SEGMENT_FS 0x64
|
|
||||||
#define PREFIX_SEGMENT_GS 0x65
|
|
||||||
#define PREFIX_LOCK 0xf0
|
|
||||||
#define PREFIX_REPNZ 0xf2
|
|
||||||
#define PREFIX_REPX 0xf3
|
|
||||||
#define PREFIX_OPERAND_SIZE 0x66
|
|
||||||
#define PREFIX_ADDRESS_SIZE 0x67
|
|
||||||
|
|
||||||
#pragma pack(push,1)
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
uint8_t len;
|
|
||||||
uint8_t p_rep;
|
|
||||||
uint8_t p_lock;
|
|
||||||
uint8_t p_seg;
|
|
||||||
uint8_t p_66;
|
|
||||||
uint8_t p_67;
|
|
||||||
uint8_t rex;
|
|
||||||
uint8_t rex_w;
|
|
||||||
uint8_t rex_r;
|
|
||||||
uint8_t rex_x;
|
|
||||||
uint8_t rex_b;
|
|
||||||
uint8_t opcode;
|
|
||||||
uint8_t opcode2;
|
|
||||||
uint8_t modrm;
|
|
||||||
uint8_t modrm_mod;
|
|
||||||
uint8_t modrm_reg;
|
|
||||||
uint8_t modrm_rm;
|
|
||||||
uint8_t sib;
|
|
||||||
uint8_t sib_scale;
|
|
||||||
uint8_t sib_index;
|
|
||||||
uint8_t sib_base;
|
|
||||||
union {
|
|
||||||
uint8_t imm8;
|
|
||||||
uint16_t imm16;
|
|
||||||
uint32_t imm32;
|
|
||||||
uint64_t imm64;
|
|
||||||
} imm;
|
|
||||||
union {
|
|
||||||
uint8_t disp8;
|
|
||||||
uint16_t disp16;
|
|
||||||
uint32_t disp32;
|
|
||||||
} disp;
|
|
||||||
uint32_t flags;
|
|
||||||
} hde64s;
|
|
||||||
|
|
||||||
#pragma pack(pop)
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* __cdecl */
|
|
||||||
unsigned int hde64_disasm(const void *code, hde64s *hs);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* _HDE64_H_ */
|
|
|
@ -1,39 +0,0 @@
|
||||||
/*
|
|
||||||
* MinHook - The Minimalistic API Hooking Library for x64/x86
|
|
||||||
* Copyright (C) 2009-2017 Tsuda Kageyu. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
|
|
||||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
||||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
||||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
||||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
||||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <windows.h>
|
|
||||||
|
|
||||||
// Integer types for HDE.
|
|
||||||
typedef INT8 int8_t;
|
|
||||||
typedef INT16 int16_t;
|
|
||||||
typedef INT32 int32_t;
|
|
||||||
typedef INT64 int64_t;
|
|
||||||
typedef UINT8 uint8_t;
|
|
||||||
typedef UINT16 uint16_t;
|
|
||||||
typedef UINT32 uint32_t;
|
|
||||||
typedef UINT64 uint64_t;
|
|
|
@ -1,73 +0,0 @@
|
||||||
/*
|
|
||||||
* Hacker Disassembler Engine 32 C
|
|
||||||
* Copyright (c) 2008-2009, Vyacheslav Patkov.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define C_NONE 0x00
|
|
||||||
#define C_MODRM 0x01
|
|
||||||
#define C_IMM8 0x02
|
|
||||||
#define C_IMM16 0x04
|
|
||||||
#define C_IMM_P66 0x10
|
|
||||||
#define C_REL8 0x20
|
|
||||||
#define C_REL32 0x40
|
|
||||||
#define C_GROUP 0x80
|
|
||||||
#define C_ERROR 0xff
|
|
||||||
|
|
||||||
#define PRE_ANY 0x00
|
|
||||||
#define PRE_NONE 0x01
|
|
||||||
#define PRE_F2 0x02
|
|
||||||
#define PRE_F3 0x04
|
|
||||||
#define PRE_66 0x08
|
|
||||||
#define PRE_67 0x10
|
|
||||||
#define PRE_LOCK 0x20
|
|
||||||
#define PRE_SEG 0x40
|
|
||||||
#define PRE_ALL 0xff
|
|
||||||
|
|
||||||
#define DELTA_OPCODES 0x4a
|
|
||||||
#define DELTA_FPU_REG 0xf1
|
|
||||||
#define DELTA_FPU_MODRM 0xf8
|
|
||||||
#define DELTA_PREFIXES 0x130
|
|
||||||
#define DELTA_OP_LOCK_OK 0x1a1
|
|
||||||
#define DELTA_OP2_LOCK_OK 0x1b9
|
|
||||||
#define DELTA_OP_ONLY_MEM 0x1cb
|
|
||||||
#define DELTA_OP2_ONLY_MEM 0x1da
|
|
||||||
|
|
||||||
unsigned char hde32_table[] = {
|
|
||||||
0xa3,0xa8,0xa3,0xa8,0xa3,0xa8,0xa3,0xa8,0xa3,0xa8,0xa3,0xa8,0xa3,0xa8,0xa3,
|
|
||||||
0xa8,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xac,0xaa,0xb2,0xaa,0x9f,0x9f,
|
|
||||||
0x9f,0x9f,0xb5,0xa3,0xa3,0xa4,0xaa,0xaa,0xba,0xaa,0x96,0xaa,0xa8,0xaa,0xc3,
|
|
||||||
0xc3,0x96,0x96,0xb7,0xae,0xd6,0xbd,0xa3,0xc5,0xa3,0xa3,0x9f,0xc3,0x9c,0xaa,
|
|
||||||
0xaa,0xac,0xaa,0xbf,0x03,0x7f,0x11,0x7f,0x01,0x7f,0x01,0x3f,0x01,0x01,0x90,
|
|
||||||
0x82,0x7d,0x97,0x59,0x59,0x59,0x59,0x59,0x7f,0x59,0x59,0x60,0x7d,0x7f,0x7f,
|
|
||||||
0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x9a,0x88,0x7d,
|
|
||||||
0x59,0x50,0x50,0x50,0x50,0x59,0x59,0x59,0x59,0x61,0x94,0x61,0x9e,0x59,0x59,
|
|
||||||
0x85,0x59,0x92,0xa3,0x60,0x60,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,
|
|
||||||
0x59,0x59,0x9f,0x01,0x03,0x01,0x04,0x03,0xd5,0x03,0xcc,0x01,0xbc,0x03,0xf0,
|
|
||||||
0x10,0x10,0x10,0x10,0x50,0x50,0x50,0x50,0x14,0x20,0x20,0x20,0x20,0x01,0x01,
|
|
||||||
0x01,0x01,0xc4,0x02,0x10,0x00,0x00,0x00,0x00,0x01,0x01,0xc0,0xc2,0x10,0x11,
|
|
||||||
0x02,0x03,0x11,0x03,0x03,0x04,0x00,0x00,0x14,0x00,0x02,0x00,0x00,0xc6,0xc8,
|
|
||||||
0x02,0x02,0x02,0x02,0x00,0x00,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0xff,0xca,
|
|
||||||
0x01,0x01,0x01,0x00,0x06,0x00,0x04,0x00,0xc0,0xc2,0x01,0x01,0x03,0x01,0xff,
|
|
||||||
0xff,0x01,0x00,0x03,0xc4,0xc4,0xc6,0x03,0x01,0x01,0x01,0xff,0x03,0x03,0x03,
|
|
||||||
0xc8,0x40,0x00,0x0a,0x00,0x04,0x00,0x00,0x00,0x00,0x7f,0x00,0x33,0x01,0x00,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0xff,0xbf,0xff,0xff,0x00,0x00,0x00,0x00,0x07,0x00,
|
|
||||||
0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
||||||
0x00,0xff,0xff,0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
|
|
||||||
0x7f,0x00,0x00,0xff,0x4a,0x4a,0x4a,0x4a,0x4b,0x52,0x4a,0x4a,0x4a,0x4a,0x4f,
|
|
||||||
0x4c,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x55,0x45,0x40,0x4a,0x4a,0x4a,
|
|
||||||
0x45,0x59,0x4d,0x46,0x4a,0x5d,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,
|
|
||||||
0x4a,0x4a,0x4a,0x4a,0x4a,0x61,0x63,0x67,0x4e,0x4a,0x4a,0x6b,0x6d,0x4a,0x4a,
|
|
||||||
0x45,0x6d,0x4a,0x4a,0x44,0x45,0x4a,0x4a,0x00,0x00,0x00,0x02,0x0d,0x06,0x06,
|
|
||||||
0x06,0x06,0x0e,0x00,0x00,0x00,0x00,0x06,0x06,0x06,0x00,0x06,0x06,0x02,0x06,
|
|
||||||
0x00,0x0a,0x0a,0x07,0x07,0x06,0x02,0x05,0x05,0x02,0x02,0x00,0x00,0x04,0x04,
|
|
||||||
0x04,0x04,0x00,0x00,0x00,0x0e,0x05,0x06,0x06,0x06,0x01,0x06,0x00,0x00,0x08,
|
|
||||||
0x00,0x10,0x00,0x18,0x00,0x20,0x00,0x28,0x00,0x30,0x00,0x80,0x01,0x82,0x01,
|
|
||||||
0x86,0x00,0xf6,0xcf,0xfe,0x3f,0xab,0x00,0xb0,0x00,0xb1,0x00,0xb3,0x00,0xba,
|
|
||||||
0xf8,0xbb,0x00,0xc0,0x00,0xc1,0x00,0xc7,0xbf,0x62,0xff,0x00,0x8d,0xff,0x00,
|
|
||||||
0xc4,0xff,0x00,0xc5,0xff,0x00,0xff,0xff,0xeb,0x01,0xff,0x0e,0x12,0x08,0x00,
|
|
||||||
0x13,0x09,0x00,0x16,0x08,0x00,0x17,0x09,0x00,0x2b,0x09,0x00,0xae,0xff,0x07,
|
|
||||||
0xb2,0xff,0x00,0xb4,0xff,0x00,0xb5,0xff,0x00,0xc3,0x01,0x00,0xc7,0xff,0xbf,
|
|
||||||
0xe7,0x08,0x00,0xf0,0x02,0x00
|
|
||||||
};
|
|
|
@ -1,74 +0,0 @@
|
||||||
/*
|
|
||||||
* Hacker Disassembler Engine 64 C
|
|
||||||
* Copyright (c) 2008-2009, Vyacheslav Patkov.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define C_NONE 0x00
|
|
||||||
#define C_MODRM 0x01
|
|
||||||
#define C_IMM8 0x02
|
|
||||||
#define C_IMM16 0x04
|
|
||||||
#define C_IMM_P66 0x10
|
|
||||||
#define C_REL8 0x20
|
|
||||||
#define C_REL32 0x40
|
|
||||||
#define C_GROUP 0x80
|
|
||||||
#define C_ERROR 0xff
|
|
||||||
|
|
||||||
#define PRE_ANY 0x00
|
|
||||||
#define PRE_NONE 0x01
|
|
||||||
#define PRE_F2 0x02
|
|
||||||
#define PRE_F3 0x04
|
|
||||||
#define PRE_66 0x08
|
|
||||||
#define PRE_67 0x10
|
|
||||||
#define PRE_LOCK 0x20
|
|
||||||
#define PRE_SEG 0x40
|
|
||||||
#define PRE_ALL 0xff
|
|
||||||
|
|
||||||
#define DELTA_OPCODES 0x4a
|
|
||||||
#define DELTA_FPU_REG 0xfd
|
|
||||||
#define DELTA_FPU_MODRM 0x104
|
|
||||||
#define DELTA_PREFIXES 0x13c
|
|
||||||
#define DELTA_OP_LOCK_OK 0x1ae
|
|
||||||
#define DELTA_OP2_LOCK_OK 0x1c6
|
|
||||||
#define DELTA_OP_ONLY_MEM 0x1d8
|
|
||||||
#define DELTA_OP2_ONLY_MEM 0x1e7
|
|
||||||
|
|
||||||
unsigned char hde64_table[] = {
|
|
||||||
0xa5,0xaa,0xa5,0xb8,0xa5,0xaa,0xa5,0xaa,0xa5,0xb8,0xa5,0xb8,0xa5,0xb8,0xa5,
|
|
||||||
0xb8,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xac,0xc0,0xcc,0xc0,0xa1,0xa1,
|
|
||||||
0xa1,0xa1,0xb1,0xa5,0xa5,0xa6,0xc0,0xc0,0xd7,0xda,0xe0,0xc0,0xe4,0xc0,0xea,
|
|
||||||
0xea,0xe0,0xe0,0x98,0xc8,0xee,0xf1,0xa5,0xd3,0xa5,0xa5,0xa1,0xea,0x9e,0xc0,
|
|
||||||
0xc0,0xc2,0xc0,0xe6,0x03,0x7f,0x11,0x7f,0x01,0x7f,0x01,0x3f,0x01,0x01,0xab,
|
|
||||||
0x8b,0x90,0x64,0x5b,0x5b,0x5b,0x5b,0x5b,0x92,0x5b,0x5b,0x76,0x90,0x92,0x92,
|
|
||||||
0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x6a,0x73,0x90,
|
|
||||||
0x5b,0x52,0x52,0x52,0x52,0x5b,0x5b,0x5b,0x5b,0x77,0x7c,0x77,0x85,0x5b,0x5b,
|
|
||||||
0x70,0x5b,0x7a,0xaf,0x76,0x76,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,0x5b,
|
|
||||||
0x5b,0x5b,0x86,0x01,0x03,0x01,0x04,0x03,0xd5,0x03,0xd5,0x03,0xcc,0x01,0xbc,
|
|
||||||
0x03,0xf0,0x03,0x03,0x04,0x00,0x50,0x50,0x50,0x50,0xff,0x20,0x20,0x20,0x20,
|
|
||||||
0x01,0x01,0x01,0x01,0xc4,0x02,0x10,0xff,0xff,0xff,0x01,0x00,0x03,0x11,0xff,
|
|
||||||
0x03,0xc4,0xc6,0xc8,0x02,0x10,0x00,0xff,0xcc,0x01,0x01,0x01,0x00,0x00,0x00,
|
|
||||||
0x00,0x01,0x01,0x03,0x01,0xff,0xff,0xc0,0xc2,0x10,0x11,0x02,0x03,0x01,0x01,
|
|
||||||
0x01,0xff,0xff,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0xff,0xff,0xff,0xff,0x10,
|
|
||||||
0x10,0x10,0x10,0x02,0x10,0x00,0x00,0xc6,0xc8,0x02,0x02,0x02,0x02,0x06,0x00,
|
|
||||||
0x04,0x00,0x02,0xff,0x00,0xc0,0xc2,0x01,0x01,0x03,0x03,0x03,0xca,0x40,0x00,
|
|
||||||
0x0a,0x00,0x04,0x00,0x00,0x00,0x00,0x7f,0x00,0x33,0x01,0x00,0x00,0x00,0x00,
|
|
||||||
0x00,0x00,0xff,0xbf,0xff,0xff,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0xff,0x00,
|
|
||||||
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,
|
|
||||||
0x00,0x00,0x00,0xbf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0x00,0x00,
|
|
||||||
0xff,0x40,0x40,0x40,0x40,0x41,0x49,0x40,0x40,0x40,0x40,0x4c,0x42,0x40,0x40,
|
|
||||||
0x40,0x40,0x40,0x40,0x40,0x40,0x4f,0x44,0x53,0x40,0x40,0x40,0x44,0x57,0x43,
|
|
||||||
0x5c,0x40,0x60,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
|
|
||||||
0x40,0x40,0x64,0x66,0x6e,0x6b,0x40,0x40,0x6a,0x46,0x40,0x40,0x44,0x46,0x40,
|
|
||||||
0x40,0x5b,0x44,0x40,0x40,0x00,0x00,0x00,0x00,0x06,0x06,0x06,0x06,0x01,0x06,
|
|
||||||
0x06,0x02,0x06,0x06,0x00,0x06,0x00,0x0a,0x0a,0x00,0x00,0x00,0x02,0x07,0x07,
|
|
||||||
0x06,0x02,0x0d,0x06,0x06,0x06,0x0e,0x05,0x05,0x02,0x02,0x00,0x00,0x04,0x04,
|
|
||||||
0x04,0x04,0x05,0x06,0x06,0x06,0x00,0x00,0x00,0x0e,0x00,0x00,0x08,0x00,0x10,
|
|
||||||
0x00,0x18,0x00,0x20,0x00,0x28,0x00,0x30,0x00,0x80,0x01,0x82,0x01,0x86,0x00,
|
|
||||||
0xf6,0xcf,0xfe,0x3f,0xab,0x00,0xb0,0x00,0xb1,0x00,0xb3,0x00,0xba,0xf8,0xbb,
|
|
||||||
0x00,0xc0,0x00,0xc1,0x00,0xc7,0xbf,0x62,0xff,0x00,0x8d,0xff,0x00,0xc4,0xff,
|
|
||||||
0x00,0xc5,0xff,0x00,0xff,0xff,0xeb,0x01,0xff,0x0e,0x12,0x08,0x00,0x13,0x09,
|
|
||||||
0x00,0x16,0x08,0x00,0x17,0x09,0x00,0x2b,0x09,0x00,0xae,0xff,0x07,0xb2,0xff,
|
|
||||||
0x00,0xb4,0xff,0x00,0xb5,0xff,0x00,0xc3,0x01,0x00,0xc7,0xff,0xbf,0xe7,0x08,
|
|
||||||
0x00,0xf0,0x02,0x00
|
|
||||||
};
|
|
|
@ -1,312 +0,0 @@
|
||||||
/*
|
|
||||||
* MinHook - The Minimalistic API Hooking Library for x64/x86
|
|
||||||
* Copyright (C) 2009-2017 Tsuda Kageyu.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
||||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
|
||||||
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER
|
|
||||||
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
||||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
||||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
||||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <windows.h>
|
|
||||||
#include "buffer.h"
|
|
||||||
|
|
||||||
// Size of each memory block. (= page size of VirtualAlloc)
|
|
||||||
#define MEMORY_BLOCK_SIZE 0x1000
|
|
||||||
|
|
||||||
// Max range for seeking a memory block. (= 1024MB)
|
|
||||||
#define MAX_MEMORY_RANGE 0x40000000
|
|
||||||
|
|
||||||
// Memory protection flags to check the executable address.
|
|
||||||
#define PAGE_EXECUTE_FLAGS \
|
|
||||||
(PAGE_EXECUTE | PAGE_EXECUTE_READ | PAGE_EXECUTE_READWRITE | PAGE_EXECUTE_WRITECOPY)
|
|
||||||
|
|
||||||
// Memory slot.
|
|
||||||
typedef struct _MEMORY_SLOT
|
|
||||||
{
|
|
||||||
union
|
|
||||||
{
|
|
||||||
struct _MEMORY_SLOT *pNext;
|
|
||||||
UINT8 buffer[MEMORY_SLOT_SIZE];
|
|
||||||
};
|
|
||||||
} MEMORY_SLOT, *PMEMORY_SLOT;
|
|
||||||
|
|
||||||
// Memory block info. Placed at the head of each block.
|
|
||||||
typedef struct _MEMORY_BLOCK
|
|
||||||
{
|
|
||||||
struct _MEMORY_BLOCK *pNext;
|
|
||||||
PMEMORY_SLOT pFree; // First element of the free slot list.
|
|
||||||
UINT usedCount;
|
|
||||||
} MEMORY_BLOCK, *PMEMORY_BLOCK;
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
// Global Variables:
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// First element of the memory block list.
|
|
||||||
PMEMORY_BLOCK g_pMemoryBlocks;
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
VOID InitializeBuffer(VOID)
|
|
||||||
{
|
|
||||||
// Nothing to do for now.
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
VOID UninitializeBuffer(VOID)
|
|
||||||
{
|
|
||||||
PMEMORY_BLOCK pBlock = g_pMemoryBlocks;
|
|
||||||
g_pMemoryBlocks = NULL;
|
|
||||||
|
|
||||||
while (pBlock)
|
|
||||||
{
|
|
||||||
PMEMORY_BLOCK pNext = pBlock->pNext;
|
|
||||||
VirtualFree(pBlock, 0, MEM_RELEASE);
|
|
||||||
pBlock = pNext;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
#if defined(_M_X64) || defined(__x86_64__)
|
|
||||||
static LPVOID FindPrevFreeRegion(LPVOID pAddress, LPVOID pMinAddr, DWORD dwAllocationGranularity)
|
|
||||||
{
|
|
||||||
ULONG_PTR tryAddr = (ULONG_PTR)pAddress;
|
|
||||||
|
|
||||||
// Round down to the allocation granularity.
|
|
||||||
tryAddr -= tryAddr % dwAllocationGranularity;
|
|
||||||
|
|
||||||
// Start from the previous allocation granularity multiply.
|
|
||||||
tryAddr -= dwAllocationGranularity;
|
|
||||||
|
|
||||||
while (tryAddr >= (ULONG_PTR)pMinAddr)
|
|
||||||
{
|
|
||||||
MEMORY_BASIC_INFORMATION mbi;
|
|
||||||
if (VirtualQuery((LPVOID)tryAddr, &mbi, sizeof(mbi)) == 0)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (mbi.State == MEM_FREE)
|
|
||||||
return (LPVOID)tryAddr;
|
|
||||||
|
|
||||||
if ((ULONG_PTR)mbi.AllocationBase < dwAllocationGranularity)
|
|
||||||
break;
|
|
||||||
|
|
||||||
tryAddr = (ULONG_PTR)mbi.AllocationBase - dwAllocationGranularity;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
#if defined(_M_X64) || defined(__x86_64__)
|
|
||||||
static LPVOID FindNextFreeRegion(LPVOID pAddress, LPVOID pMaxAddr, DWORD dwAllocationGranularity)
|
|
||||||
{
|
|
||||||
ULONG_PTR tryAddr = (ULONG_PTR)pAddress;
|
|
||||||
|
|
||||||
// Round down to the allocation granularity.
|
|
||||||
tryAddr -= tryAddr % dwAllocationGranularity;
|
|
||||||
|
|
||||||
// Start from the next allocation granularity multiply.
|
|
||||||
tryAddr += dwAllocationGranularity;
|
|
||||||
|
|
||||||
while (tryAddr <= (ULONG_PTR)pMaxAddr)
|
|
||||||
{
|
|
||||||
MEMORY_BASIC_INFORMATION mbi;
|
|
||||||
if (VirtualQuery((LPVOID)tryAddr, &mbi, sizeof(mbi)) == 0)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (mbi.State == MEM_FREE)
|
|
||||||
return (LPVOID)tryAddr;
|
|
||||||
|
|
||||||
tryAddr = (ULONG_PTR)mbi.BaseAddress + mbi.RegionSize;
|
|
||||||
|
|
||||||
// Round up to the next allocation granularity.
|
|
||||||
tryAddr += dwAllocationGranularity - 1;
|
|
||||||
tryAddr -= tryAddr % dwAllocationGranularity;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
static PMEMORY_BLOCK GetMemoryBlock(LPVOID pOrigin)
|
|
||||||
{
|
|
||||||
PMEMORY_BLOCK pBlock;
|
|
||||||
#if defined(_M_X64) || defined(__x86_64__)
|
|
||||||
ULONG_PTR minAddr;
|
|
||||||
ULONG_PTR maxAddr;
|
|
||||||
|
|
||||||
SYSTEM_INFO si;
|
|
||||||
GetSystemInfo(&si);
|
|
||||||
minAddr = (ULONG_PTR)si.lpMinimumApplicationAddress;
|
|
||||||
maxAddr = (ULONG_PTR)si.lpMaximumApplicationAddress;
|
|
||||||
|
|
||||||
// pOrigin ± 512MB
|
|
||||||
if ((ULONG_PTR)pOrigin > MAX_MEMORY_RANGE && minAddr < (ULONG_PTR)pOrigin - MAX_MEMORY_RANGE)
|
|
||||||
minAddr = (ULONG_PTR)pOrigin - MAX_MEMORY_RANGE;
|
|
||||||
|
|
||||||
if (maxAddr > (ULONG_PTR)pOrigin + MAX_MEMORY_RANGE)
|
|
||||||
maxAddr = (ULONG_PTR)pOrigin + MAX_MEMORY_RANGE;
|
|
||||||
|
|
||||||
// Make room for MEMORY_BLOCK_SIZE bytes.
|
|
||||||
maxAddr -= MEMORY_BLOCK_SIZE - 1;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Look the registered blocks for a reachable one.
|
|
||||||
for (pBlock = g_pMemoryBlocks; pBlock != NULL; pBlock = pBlock->pNext)
|
|
||||||
{
|
|
||||||
#if defined(_M_X64) || defined(__x86_64__)
|
|
||||||
// Ignore the blocks too far.
|
|
||||||
if ((ULONG_PTR)pBlock < minAddr || (ULONG_PTR)pBlock >= maxAddr)
|
|
||||||
continue;
|
|
||||||
#endif
|
|
||||||
// The block has at least one unused slot.
|
|
||||||
if (pBlock->pFree != NULL)
|
|
||||||
return pBlock;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(_M_X64) || defined(__x86_64__)
|
|
||||||
// Alloc a new block above if not found.
|
|
||||||
{
|
|
||||||
LPVOID pAlloc = pOrigin;
|
|
||||||
while ((ULONG_PTR)pAlloc >= minAddr)
|
|
||||||
{
|
|
||||||
pAlloc = FindPrevFreeRegion(pAlloc, (LPVOID)minAddr, si.dwAllocationGranularity);
|
|
||||||
if (pAlloc == NULL)
|
|
||||||
break;
|
|
||||||
|
|
||||||
pBlock = (PMEMORY_BLOCK)VirtualAlloc(
|
|
||||||
pAlloc, MEMORY_BLOCK_SIZE, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
|
|
||||||
if (pBlock != NULL)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Alloc a new block below if not found.
|
|
||||||
if (pBlock == NULL)
|
|
||||||
{
|
|
||||||
LPVOID pAlloc = pOrigin;
|
|
||||||
while ((ULONG_PTR)pAlloc <= maxAddr)
|
|
||||||
{
|
|
||||||
pAlloc = FindNextFreeRegion(pAlloc, (LPVOID)maxAddr, si.dwAllocationGranularity);
|
|
||||||
if (pAlloc == NULL)
|
|
||||||
break;
|
|
||||||
|
|
||||||
pBlock = (PMEMORY_BLOCK)VirtualAlloc(
|
|
||||||
pAlloc, MEMORY_BLOCK_SIZE, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
|
|
||||||
if (pBlock != NULL)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
// In x86 mode, a memory block can be placed anywhere.
|
|
||||||
pBlock = (PMEMORY_BLOCK)VirtualAlloc(
|
|
||||||
NULL, MEMORY_BLOCK_SIZE, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (pBlock != NULL)
|
|
||||||
{
|
|
||||||
// Build a linked list of all the slots.
|
|
||||||
PMEMORY_SLOT pSlot = (PMEMORY_SLOT)pBlock + 1;
|
|
||||||
pBlock->pFree = NULL;
|
|
||||||
pBlock->usedCount = 0;
|
|
||||||
do
|
|
||||||
{
|
|
||||||
pSlot->pNext = pBlock->pFree;
|
|
||||||
pBlock->pFree = pSlot;
|
|
||||||
pSlot++;
|
|
||||||
} while ((ULONG_PTR)pSlot - (ULONG_PTR)pBlock <= MEMORY_BLOCK_SIZE - MEMORY_SLOT_SIZE);
|
|
||||||
|
|
||||||
pBlock->pNext = g_pMemoryBlocks;
|
|
||||||
g_pMemoryBlocks = pBlock;
|
|
||||||
}
|
|
||||||
|
|
||||||
return pBlock;
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
LPVOID AllocateBuffer(LPVOID pOrigin)
|
|
||||||
{
|
|
||||||
PMEMORY_SLOT pSlot;
|
|
||||||
PMEMORY_BLOCK pBlock = GetMemoryBlock(pOrigin);
|
|
||||||
if (pBlock == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
// Remove an unused slot from the list.
|
|
||||||
pSlot = pBlock->pFree;
|
|
||||||
pBlock->pFree = pSlot->pNext;
|
|
||||||
pBlock->usedCount++;
|
|
||||||
#ifdef _DEBUG
|
|
||||||
// Fill the slot with INT3 for debugging.
|
|
||||||
memset(pSlot, 0xCC, sizeof(MEMORY_SLOT));
|
|
||||||
#endif
|
|
||||||
return pSlot;
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
VOID FreeBuffer(LPVOID pBuffer)
|
|
||||||
{
|
|
||||||
PMEMORY_BLOCK pBlock = g_pMemoryBlocks;
|
|
||||||
PMEMORY_BLOCK pPrev = NULL;
|
|
||||||
ULONG_PTR pTargetBlock = ((ULONG_PTR)pBuffer / MEMORY_BLOCK_SIZE) * MEMORY_BLOCK_SIZE;
|
|
||||||
|
|
||||||
while (pBlock != NULL)
|
|
||||||
{
|
|
||||||
if ((ULONG_PTR)pBlock == pTargetBlock)
|
|
||||||
{
|
|
||||||
PMEMORY_SLOT pSlot = (PMEMORY_SLOT)pBuffer;
|
|
||||||
#ifdef _DEBUG
|
|
||||||
// Clear the released slot for debugging.
|
|
||||||
memset(pSlot, 0x00, sizeof(*pSlot));
|
|
||||||
#endif
|
|
||||||
// Restore the released slot to the list.
|
|
||||||
pSlot->pNext = pBlock->pFree;
|
|
||||||
pBlock->pFree = pSlot;
|
|
||||||
pBlock->usedCount--;
|
|
||||||
|
|
||||||
// Free if unused.
|
|
||||||
if (pBlock->usedCount == 0)
|
|
||||||
{
|
|
||||||
if (pPrev)
|
|
||||||
pPrev->pNext = pBlock->pNext;
|
|
||||||
else
|
|
||||||
g_pMemoryBlocks = pBlock->pNext;
|
|
||||||
|
|
||||||
VirtualFree(pBlock, 0, MEM_RELEASE);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
pPrev = pBlock;
|
|
||||||
pBlock = pBlock->pNext;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
BOOL IsExecutableAddress(LPVOID pAddress)
|
|
||||||
{
|
|
||||||
MEMORY_BASIC_INFORMATION mi;
|
|
||||||
VirtualQuery(pAddress, &mi, sizeof(mi));
|
|
||||||
|
|
||||||
return (mi.State == MEM_COMMIT && (mi.Protect & PAGE_EXECUTE_FLAGS));
|
|
||||||
}
|
|
|
@ -1,42 +0,0 @@
|
||||||
/*
|
|
||||||
* MinHook - The Minimalistic API Hooking Library for x64/x86
|
|
||||||
* Copyright (C) 2009-2017 Tsuda Kageyu.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
||||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
|
||||||
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER
|
|
||||||
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
||||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
||||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
||||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
// Size of each memory slot.
|
|
||||||
#if defined(_M_X64) || defined(__x86_64__)
|
|
||||||
#define MEMORY_SLOT_SIZE 64
|
|
||||||
#else
|
|
||||||
#define MEMORY_SLOT_SIZE 32
|
|
||||||
#endif
|
|
||||||
|
|
||||||
VOID InitializeBuffer(VOID);
|
|
||||||
VOID UninitializeBuffer(VOID);
|
|
||||||
LPVOID AllocateBuffer(LPVOID pOrigin);
|
|
||||||
VOID FreeBuffer(LPVOID pBuffer);
|
|
||||||
BOOL IsExecutableAddress(LPVOID pAddress);
|
|
|
@ -1,889 +0,0 @@
|
||||||
/*
|
|
||||||
* MinHook - The Minimalistic API Hooking Library for x64/x86
|
|
||||||
* Copyright (C) 2009-2017 Tsuda Kageyu.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
||||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
|
||||||
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER
|
|
||||||
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
||||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
||||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
||||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <windows.h>
|
|
||||||
#include <tlhelp32.h>
|
|
||||||
#include <limits.h>
|
|
||||||
|
|
||||||
#include "../include/MinHook.h"
|
|
||||||
#include "buffer.h"
|
|
||||||
#include "trampoline.h"
|
|
||||||
|
|
||||||
#ifndef ARRAYSIZE
|
|
||||||
#define ARRAYSIZE(A) (sizeof(A)/sizeof((A)[0]))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Initial capacity of the HOOK_ENTRY buffer.
|
|
||||||
#define INITIAL_HOOK_CAPACITY 32
|
|
||||||
|
|
||||||
// Initial capacity of the thread IDs buffer.
|
|
||||||
#define INITIAL_THREAD_CAPACITY 128
|
|
||||||
|
|
||||||
// Special hook position values.
|
|
||||||
#define INVALID_HOOK_POS UINT_MAX
|
|
||||||
#define ALL_HOOKS_POS UINT_MAX
|
|
||||||
|
|
||||||
// Freeze() action argument defines.
|
|
||||||
#define ACTION_DISABLE 0
|
|
||||||
#define ACTION_ENABLE 1
|
|
||||||
#define ACTION_APPLY_QUEUED 2
|
|
||||||
|
|
||||||
// Thread access rights for suspending/resuming threads.
|
|
||||||
#define THREAD_ACCESS \
|
|
||||||
(THREAD_SUSPEND_RESUME | THREAD_GET_CONTEXT | THREAD_QUERY_INFORMATION | THREAD_SET_CONTEXT)
|
|
||||||
|
|
||||||
// Hook information.
|
|
||||||
typedef struct _HOOK_ENTRY
|
|
||||||
{
|
|
||||||
LPVOID pTarget; // Address of the target function.
|
|
||||||
LPVOID pDetour; // Address of the detour or relay function.
|
|
||||||
LPVOID pTrampoline; // Address of the trampoline function.
|
|
||||||
UINT8 backup[8]; // Original prologue of the target function.
|
|
||||||
|
|
||||||
UINT8 patchAbove : 1; // Uses the hot patch area.
|
|
||||||
UINT8 isEnabled : 1; // Enabled.
|
|
||||||
UINT8 queueEnable : 1; // Queued for enabling/disabling when != isEnabled.
|
|
||||||
|
|
||||||
UINT nIP : 4; // Count of the instruction boundaries.
|
|
||||||
UINT8 oldIPs[8]; // Instruction boundaries of the target function.
|
|
||||||
UINT8 newIPs[8]; // Instruction boundaries of the trampoline function.
|
|
||||||
} HOOK_ENTRY, *PHOOK_ENTRY;
|
|
||||||
|
|
||||||
// Suspended threads for Freeze()/Unfreeze().
|
|
||||||
typedef struct _FROZEN_THREADS
|
|
||||||
{
|
|
||||||
LPDWORD pItems; // Data heap
|
|
||||||
UINT capacity; // Size of allocated data heap, items
|
|
||||||
UINT size; // Actual number of data items
|
|
||||||
} FROZEN_THREADS, *PFROZEN_THREADS;
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
// Global Variables:
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
|
|
||||||
// Spin lock flag for EnterSpinLock()/LeaveSpinLock().
|
|
||||||
volatile LONG g_isLocked = FALSE;
|
|
||||||
|
|
||||||
// Private heap handle. If not NULL, this library is initialized.
|
|
||||||
HANDLE g_hHeap = NULL;
|
|
||||||
|
|
||||||
// Hook entries.
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
PHOOK_ENTRY pItems; // Data heap
|
|
||||||
UINT capacity; // Size of allocated data heap, items
|
|
||||||
UINT size; // Actual number of data items
|
|
||||||
} g_hooks;
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
// Returns INVALID_HOOK_POS if not found.
|
|
||||||
static UINT FindHookEntry(LPVOID pTarget)
|
|
||||||
{
|
|
||||||
UINT i;
|
|
||||||
for (i = 0; i < g_hooks.size; ++i)
|
|
||||||
{
|
|
||||||
if ((ULONG_PTR)pTarget == (ULONG_PTR)g_hooks.pItems[i].pTarget)
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
return INVALID_HOOK_POS;
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
static PHOOK_ENTRY AddHookEntry()
|
|
||||||
{
|
|
||||||
if (g_hooks.pItems == NULL)
|
|
||||||
{
|
|
||||||
g_hooks.capacity = INITIAL_HOOK_CAPACITY;
|
|
||||||
g_hooks.pItems = (PHOOK_ENTRY)HeapAlloc(
|
|
||||||
g_hHeap, 0, g_hooks.capacity * sizeof(HOOK_ENTRY));
|
|
||||||
if (g_hooks.pItems == NULL)
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
else if (g_hooks.size >= g_hooks.capacity)
|
|
||||||
{
|
|
||||||
PHOOK_ENTRY p = (PHOOK_ENTRY)HeapReAlloc(
|
|
||||||
g_hHeap, 0, g_hooks.pItems, (g_hooks.capacity * 2) * sizeof(HOOK_ENTRY));
|
|
||||||
if (p == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
g_hooks.capacity *= 2;
|
|
||||||
g_hooks.pItems = p;
|
|
||||||
}
|
|
||||||
|
|
||||||
return &g_hooks.pItems[g_hooks.size++];
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
static void DeleteHookEntry(UINT pos)
|
|
||||||
{
|
|
||||||
if (pos < g_hooks.size - 1)
|
|
||||||
g_hooks.pItems[pos] = g_hooks.pItems[g_hooks.size - 1];
|
|
||||||
|
|
||||||
g_hooks.size--;
|
|
||||||
|
|
||||||
if (g_hooks.capacity / 2 >= INITIAL_HOOK_CAPACITY && g_hooks.capacity / 2 >= g_hooks.size)
|
|
||||||
{
|
|
||||||
PHOOK_ENTRY p = (PHOOK_ENTRY)HeapReAlloc(
|
|
||||||
g_hHeap, 0, g_hooks.pItems, (g_hooks.capacity / 2) * sizeof(HOOK_ENTRY));
|
|
||||||
if (p == NULL)
|
|
||||||
return;
|
|
||||||
|
|
||||||
g_hooks.capacity /= 2;
|
|
||||||
g_hooks.pItems = p;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
static DWORD_PTR FindOldIP(PHOOK_ENTRY pHook, DWORD_PTR ip)
|
|
||||||
{
|
|
||||||
UINT i;
|
|
||||||
|
|
||||||
if (pHook->patchAbove && ip == ((DWORD_PTR)pHook->pTarget - sizeof(JMP_REL)))
|
|
||||||
return (DWORD_PTR)pHook->pTarget;
|
|
||||||
|
|
||||||
for (i = 0; i < pHook->nIP; ++i)
|
|
||||||
{
|
|
||||||
if (ip == ((DWORD_PTR)pHook->pTrampoline + pHook->newIPs[i]))
|
|
||||||
return (DWORD_PTR)pHook->pTarget + pHook->oldIPs[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(_M_X64) || defined(__x86_64__)
|
|
||||||
// Check relay function.
|
|
||||||
if (ip == (DWORD_PTR)pHook->pDetour)
|
|
||||||
return (DWORD_PTR)pHook->pTarget;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
static DWORD_PTR FindNewIP(PHOOK_ENTRY pHook, DWORD_PTR ip)
|
|
||||||
{
|
|
||||||
UINT i;
|
|
||||||
for (i = 0; i < pHook->nIP; ++i)
|
|
||||||
{
|
|
||||||
if (ip == ((DWORD_PTR)pHook->pTarget + pHook->oldIPs[i]))
|
|
||||||
return (DWORD_PTR)pHook->pTrampoline + pHook->newIPs[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
static void ProcessThreadIPs(HANDLE hThread, UINT pos, UINT action)
|
|
||||||
{
|
|
||||||
// If the thread suspended in the overwritten area,
|
|
||||||
// move IP to the proper address.
|
|
||||||
|
|
||||||
CONTEXT c;
|
|
||||||
#if defined(_M_X64) || defined(__x86_64__)
|
|
||||||
DWORD64 *pIP = &c.Rip;
|
|
||||||
#else
|
|
||||||
DWORD *pIP = &c.Eip;
|
|
||||||
#endif
|
|
||||||
UINT count;
|
|
||||||
|
|
||||||
c.ContextFlags = CONTEXT_CONTROL;
|
|
||||||
if (!GetThreadContext(hThread, &c))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (pos == ALL_HOOKS_POS)
|
|
||||||
{
|
|
||||||
pos = 0;
|
|
||||||
count = g_hooks.size;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
count = pos + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (; pos < count; ++pos)
|
|
||||||
{
|
|
||||||
PHOOK_ENTRY pHook = &g_hooks.pItems[pos];
|
|
||||||
BOOL enable;
|
|
||||||
DWORD_PTR ip;
|
|
||||||
|
|
||||||
switch (action)
|
|
||||||
{
|
|
||||||
case ACTION_DISABLE:
|
|
||||||
enable = FALSE;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ACTION_ENABLE:
|
|
||||||
enable = TRUE;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default: // ACTION_APPLY_QUEUED
|
|
||||||
enable = pHook->queueEnable;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (pHook->isEnabled == enable)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (enable)
|
|
||||||
ip = FindNewIP(pHook, *pIP);
|
|
||||||
else
|
|
||||||
ip = FindOldIP(pHook, *pIP);
|
|
||||||
|
|
||||||
if (ip != 0)
|
|
||||||
{
|
|
||||||
*pIP = ip;
|
|
||||||
SetThreadContext(hThread, &c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
static VOID EnumerateThreads(PFROZEN_THREADS pThreads)
|
|
||||||
{
|
|
||||||
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
|
|
||||||
if (hSnapshot != INVALID_HANDLE_VALUE)
|
|
||||||
{
|
|
||||||
THREADENTRY32 te;
|
|
||||||
te.dwSize = sizeof(THREADENTRY32);
|
|
||||||
if (Thread32First(hSnapshot, &te))
|
|
||||||
{
|
|
||||||
do
|
|
||||||
{
|
|
||||||
if (te.dwSize >= (FIELD_OFFSET(THREADENTRY32, th32OwnerProcessID) + sizeof(DWORD))
|
|
||||||
&& te.th32OwnerProcessID == GetCurrentProcessId()
|
|
||||||
&& te.th32ThreadID != GetCurrentThreadId())
|
|
||||||
{
|
|
||||||
if (pThreads->pItems == NULL)
|
|
||||||
{
|
|
||||||
pThreads->capacity = INITIAL_THREAD_CAPACITY;
|
|
||||||
pThreads->pItems
|
|
||||||
= (LPDWORD)HeapAlloc(g_hHeap, 0, pThreads->capacity * sizeof(DWORD));
|
|
||||||
if (pThreads->pItems == NULL)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else if (pThreads->size >= pThreads->capacity)
|
|
||||||
{
|
|
||||||
LPDWORD p = (LPDWORD)HeapReAlloc(
|
|
||||||
g_hHeap, 0, pThreads->pItems, (pThreads->capacity * 2) * sizeof(DWORD));
|
|
||||||
if (p == NULL)
|
|
||||||
break;
|
|
||||||
|
|
||||||
pThreads->capacity *= 2;
|
|
||||||
pThreads->pItems = p;
|
|
||||||
}
|
|
||||||
pThreads->pItems[pThreads->size++] = te.th32ThreadID;
|
|
||||||
}
|
|
||||||
|
|
||||||
te.dwSize = sizeof(THREADENTRY32);
|
|
||||||
} while (Thread32Next(hSnapshot, &te));
|
|
||||||
}
|
|
||||||
CloseHandle(hSnapshot);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
static VOID Freeze(PFROZEN_THREADS pThreads, UINT pos, UINT action)
|
|
||||||
{
|
|
||||||
pThreads->pItems = NULL;
|
|
||||||
pThreads->capacity = 0;
|
|
||||||
pThreads->size = 0;
|
|
||||||
EnumerateThreads(pThreads);
|
|
||||||
|
|
||||||
if (pThreads->pItems != NULL)
|
|
||||||
{
|
|
||||||
UINT i;
|
|
||||||
for (i = 0; i < pThreads->size; ++i)
|
|
||||||
{
|
|
||||||
HANDLE hThread = OpenThread(THREAD_ACCESS, FALSE, pThreads->pItems[i]);
|
|
||||||
if (hThread != NULL)
|
|
||||||
{
|
|
||||||
SuspendThread(hThread);
|
|
||||||
ProcessThreadIPs(hThread, pos, action);
|
|
||||||
CloseHandle(hThread);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
static VOID Unfreeze(PFROZEN_THREADS pThreads)
|
|
||||||
{
|
|
||||||
if (pThreads->pItems != NULL)
|
|
||||||
{
|
|
||||||
UINT i;
|
|
||||||
for (i = 0; i < pThreads->size; ++i)
|
|
||||||
{
|
|
||||||
HANDLE hThread = OpenThread(THREAD_ACCESS, FALSE, pThreads->pItems[i]);
|
|
||||||
if (hThread != NULL)
|
|
||||||
{
|
|
||||||
ResumeThread(hThread);
|
|
||||||
CloseHandle(hThread);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
HeapFree(g_hHeap, 0, pThreads->pItems);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
static MH_STATUS EnableHookLL(UINT pos, BOOL enable)
|
|
||||||
{
|
|
||||||
PHOOK_ENTRY pHook = &g_hooks.pItems[pos];
|
|
||||||
DWORD oldProtect;
|
|
||||||
SIZE_T patchSize = sizeof(JMP_REL);
|
|
||||||
LPBYTE pPatchTarget = (LPBYTE)pHook->pTarget;
|
|
||||||
|
|
||||||
if (pHook->patchAbove)
|
|
||||||
{
|
|
||||||
pPatchTarget -= sizeof(JMP_REL);
|
|
||||||
patchSize += sizeof(JMP_REL_SHORT);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!VirtualProtect(pPatchTarget, patchSize, PAGE_EXECUTE_READWRITE, &oldProtect))
|
|
||||||
return MH_ERROR_MEMORY_PROTECT;
|
|
||||||
|
|
||||||
if (enable)
|
|
||||||
{
|
|
||||||
PJMP_REL pJmp = (PJMP_REL)pPatchTarget;
|
|
||||||
pJmp->opcode = 0xE9;
|
|
||||||
pJmp->operand = (UINT32)((LPBYTE)pHook->pDetour - (pPatchTarget + sizeof(JMP_REL)));
|
|
||||||
|
|
||||||
if (pHook->patchAbove)
|
|
||||||
{
|
|
||||||
PJMP_REL_SHORT pShortJmp = (PJMP_REL_SHORT)pHook->pTarget;
|
|
||||||
pShortJmp->opcode = 0xEB;
|
|
||||||
pShortJmp->operand = (UINT8)(0 - (sizeof(JMP_REL_SHORT) + sizeof(JMP_REL)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (pHook->patchAbove)
|
|
||||||
memcpy(pPatchTarget, pHook->backup, sizeof(JMP_REL) + sizeof(JMP_REL_SHORT));
|
|
||||||
else
|
|
||||||
memcpy(pPatchTarget, pHook->backup, sizeof(JMP_REL));
|
|
||||||
}
|
|
||||||
|
|
||||||
VirtualProtect(pPatchTarget, patchSize, oldProtect, &oldProtect);
|
|
||||||
|
|
||||||
// Just-in-case measure.
|
|
||||||
FlushInstructionCache(GetCurrentProcess(), pPatchTarget, patchSize);
|
|
||||||
|
|
||||||
pHook->isEnabled = enable;
|
|
||||||
pHook->queueEnable = enable;
|
|
||||||
|
|
||||||
return MH_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
static MH_STATUS EnableAllHooksLL(BOOL enable)
|
|
||||||
{
|
|
||||||
MH_STATUS status = MH_OK;
|
|
||||||
UINT i, first = INVALID_HOOK_POS;
|
|
||||||
|
|
||||||
for (i = 0; i < g_hooks.size; ++i)
|
|
||||||
{
|
|
||||||
if (g_hooks.pItems[i].isEnabled != enable)
|
|
||||||
{
|
|
||||||
first = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (first != INVALID_HOOK_POS)
|
|
||||||
{
|
|
||||||
FROZEN_THREADS threads;
|
|
||||||
Freeze(&threads, ALL_HOOKS_POS, enable ? ACTION_ENABLE : ACTION_DISABLE);
|
|
||||||
|
|
||||||
for (i = first; i < g_hooks.size; ++i)
|
|
||||||
{
|
|
||||||
if (g_hooks.pItems[i].isEnabled != enable)
|
|
||||||
{
|
|
||||||
status = EnableHookLL(i, enable);
|
|
||||||
if (status != MH_OK)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Unfreeze(&threads);
|
|
||||||
}
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
static VOID EnterSpinLock(VOID)
|
|
||||||
{
|
|
||||||
SIZE_T spinCount = 0;
|
|
||||||
|
|
||||||
// Wait until the flag is FALSE.
|
|
||||||
while (InterlockedCompareExchange(&g_isLocked, TRUE, FALSE) != FALSE)
|
|
||||||
{
|
|
||||||
// No need to generate a memory barrier here, since InterlockedCompareExchange()
|
|
||||||
// generates a full memory barrier itself.
|
|
||||||
|
|
||||||
// Prevent the loop from being too busy.
|
|
||||||
if (spinCount < 32)
|
|
||||||
Sleep(0);
|
|
||||||
else
|
|
||||||
Sleep(1);
|
|
||||||
|
|
||||||
spinCount++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
static VOID LeaveSpinLock(VOID)
|
|
||||||
{
|
|
||||||
// No need to generate a memory barrier here, since InterlockedExchange()
|
|
||||||
// generates a full memory barrier itself.
|
|
||||||
|
|
||||||
InterlockedExchange(&g_isLocked, FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
MH_STATUS WINAPI MH_Initialize(VOID)
|
|
||||||
{
|
|
||||||
MH_STATUS status = MH_OK;
|
|
||||||
|
|
||||||
EnterSpinLock();
|
|
||||||
|
|
||||||
if (g_hHeap == NULL)
|
|
||||||
{
|
|
||||||
g_hHeap = HeapCreate(0, 0, 0);
|
|
||||||
if (g_hHeap != NULL)
|
|
||||||
{
|
|
||||||
// Initialize the internal function buffer.
|
|
||||||
InitializeBuffer();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
status = MH_ERROR_MEMORY_ALLOC;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
status = MH_ERROR_ALREADY_INITIALIZED;
|
|
||||||
}
|
|
||||||
|
|
||||||
LeaveSpinLock();
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
MH_STATUS WINAPI MH_Uninitialize(VOID)
|
|
||||||
{
|
|
||||||
MH_STATUS status = MH_OK;
|
|
||||||
|
|
||||||
EnterSpinLock();
|
|
||||||
|
|
||||||
if (g_hHeap != NULL)
|
|
||||||
{
|
|
||||||
status = EnableAllHooksLL(FALSE);
|
|
||||||
if (status == MH_OK)
|
|
||||||
{
|
|
||||||
// Free the internal function buffer.
|
|
||||||
|
|
||||||
// HeapFree is actually not required, but some tools detect a false
|
|
||||||
// memory leak without HeapFree.
|
|
||||||
|
|
||||||
UninitializeBuffer();
|
|
||||||
|
|
||||||
HeapFree(g_hHeap, 0, g_hooks.pItems);
|
|
||||||
HeapDestroy(g_hHeap);
|
|
||||||
|
|
||||||
g_hHeap = NULL;
|
|
||||||
|
|
||||||
g_hooks.pItems = NULL;
|
|
||||||
g_hooks.capacity = 0;
|
|
||||||
g_hooks.size = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
status = MH_ERROR_NOT_INITIALIZED;
|
|
||||||
}
|
|
||||||
|
|
||||||
LeaveSpinLock();
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
MH_STATUS WINAPI MH_CreateHook(LPVOID pTarget, LPVOID pDetour, LPVOID *ppOriginal)
|
|
||||||
{
|
|
||||||
MH_STATUS status = MH_OK;
|
|
||||||
|
|
||||||
EnterSpinLock();
|
|
||||||
|
|
||||||
if (g_hHeap != NULL)
|
|
||||||
{
|
|
||||||
if (IsExecutableAddress(pTarget) && IsExecutableAddress(pDetour))
|
|
||||||
{
|
|
||||||
UINT pos = FindHookEntry(pTarget);
|
|
||||||
if (pos == INVALID_HOOK_POS)
|
|
||||||
{
|
|
||||||
LPVOID pBuffer = AllocateBuffer(pTarget);
|
|
||||||
if (pBuffer != NULL)
|
|
||||||
{
|
|
||||||
TRAMPOLINE ct;
|
|
||||||
|
|
||||||
ct.pTarget = pTarget;
|
|
||||||
ct.pDetour = pDetour;
|
|
||||||
ct.pTrampoline = pBuffer;
|
|
||||||
if (CreateTrampolineFunction(&ct))
|
|
||||||
{
|
|
||||||
PHOOK_ENTRY pHook = AddHookEntry();
|
|
||||||
if (pHook != NULL)
|
|
||||||
{
|
|
||||||
pHook->pTarget = ct.pTarget;
|
|
||||||
#if defined(_M_X64) || defined(__x86_64__)
|
|
||||||
pHook->pDetour = ct.pRelay;
|
|
||||||
#else
|
|
||||||
pHook->pDetour = ct.pDetour;
|
|
||||||
#endif
|
|
||||||
pHook->pTrampoline = ct.pTrampoline;
|
|
||||||
pHook->patchAbove = ct.patchAbove;
|
|
||||||
pHook->isEnabled = FALSE;
|
|
||||||
pHook->queueEnable = FALSE;
|
|
||||||
pHook->nIP = ct.nIP;
|
|
||||||
memcpy(pHook->oldIPs, ct.oldIPs, ARRAYSIZE(ct.oldIPs));
|
|
||||||
memcpy(pHook->newIPs, ct.newIPs, ARRAYSIZE(ct.newIPs));
|
|
||||||
|
|
||||||
// Back up the target function.
|
|
||||||
|
|
||||||
if (ct.patchAbove)
|
|
||||||
{
|
|
||||||
memcpy(
|
|
||||||
pHook->backup,
|
|
||||||
(LPBYTE)pTarget - sizeof(JMP_REL),
|
|
||||||
sizeof(JMP_REL) + sizeof(JMP_REL_SHORT));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
memcpy(pHook->backup, pTarget, sizeof(JMP_REL));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ppOriginal != NULL)
|
|
||||||
*ppOriginal = pHook->pTrampoline;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
status = MH_ERROR_MEMORY_ALLOC;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
status = MH_ERROR_UNSUPPORTED_FUNCTION;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (status != MH_OK)
|
|
||||||
{
|
|
||||||
FreeBuffer(pBuffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
status = MH_ERROR_MEMORY_ALLOC;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
status = MH_ERROR_ALREADY_CREATED;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
status = MH_ERROR_NOT_EXECUTABLE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
status = MH_ERROR_NOT_INITIALIZED;
|
|
||||||
}
|
|
||||||
|
|
||||||
LeaveSpinLock();
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
MH_STATUS WINAPI MH_RemoveHook(LPVOID pTarget)
|
|
||||||
{
|
|
||||||
MH_STATUS status = MH_OK;
|
|
||||||
|
|
||||||
EnterSpinLock();
|
|
||||||
|
|
||||||
if (g_hHeap != NULL)
|
|
||||||
{
|
|
||||||
UINT pos = FindHookEntry(pTarget);
|
|
||||||
if (pos != INVALID_HOOK_POS)
|
|
||||||
{
|
|
||||||
if (g_hooks.pItems[pos].isEnabled)
|
|
||||||
{
|
|
||||||
FROZEN_THREADS threads;
|
|
||||||
Freeze(&threads, pos, ACTION_DISABLE);
|
|
||||||
|
|
||||||
status = EnableHookLL(pos, FALSE);
|
|
||||||
|
|
||||||
Unfreeze(&threads);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (status == MH_OK)
|
|
||||||
{
|
|
||||||
FreeBuffer(g_hooks.pItems[pos].pTrampoline);
|
|
||||||
DeleteHookEntry(pos);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
status = MH_ERROR_NOT_CREATED;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
status = MH_ERROR_NOT_INITIALIZED;
|
|
||||||
}
|
|
||||||
|
|
||||||
LeaveSpinLock();
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
static MH_STATUS EnableHook(LPVOID pTarget, BOOL enable)
|
|
||||||
{
|
|
||||||
MH_STATUS status = MH_OK;
|
|
||||||
|
|
||||||
EnterSpinLock();
|
|
||||||
|
|
||||||
if (g_hHeap != NULL)
|
|
||||||
{
|
|
||||||
if (pTarget == MH_ALL_HOOKS)
|
|
||||||
{
|
|
||||||
status = EnableAllHooksLL(enable);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
FROZEN_THREADS threads;
|
|
||||||
UINT pos = FindHookEntry(pTarget);
|
|
||||||
if (pos != INVALID_HOOK_POS)
|
|
||||||
{
|
|
||||||
if (g_hooks.pItems[pos].isEnabled != enable)
|
|
||||||
{
|
|
||||||
Freeze(&threads, pos, ACTION_ENABLE);
|
|
||||||
|
|
||||||
status = EnableHookLL(pos, enable);
|
|
||||||
|
|
||||||
Unfreeze(&threads);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
status = enable ? MH_ERROR_ENABLED : MH_ERROR_DISABLED;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
status = MH_ERROR_NOT_CREATED;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
status = MH_ERROR_NOT_INITIALIZED;
|
|
||||||
}
|
|
||||||
|
|
||||||
LeaveSpinLock();
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
MH_STATUS WINAPI MH_EnableHook(LPVOID pTarget)
|
|
||||||
{
|
|
||||||
return EnableHook(pTarget, TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
MH_STATUS WINAPI MH_DisableHook(LPVOID pTarget)
|
|
||||||
{
|
|
||||||
return EnableHook(pTarget, FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
static MH_STATUS QueueHook(LPVOID pTarget, BOOL queueEnable)
|
|
||||||
{
|
|
||||||
MH_STATUS status = MH_OK;
|
|
||||||
|
|
||||||
EnterSpinLock();
|
|
||||||
|
|
||||||
if (g_hHeap != NULL)
|
|
||||||
{
|
|
||||||
if (pTarget == MH_ALL_HOOKS)
|
|
||||||
{
|
|
||||||
UINT i;
|
|
||||||
for (i = 0; i < g_hooks.size; ++i)
|
|
||||||
g_hooks.pItems[i].queueEnable = queueEnable;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
UINT pos = FindHookEntry(pTarget);
|
|
||||||
if (pos != INVALID_HOOK_POS)
|
|
||||||
{
|
|
||||||
g_hooks.pItems[pos].queueEnable = queueEnable;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
status = MH_ERROR_NOT_CREATED;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
status = MH_ERROR_NOT_INITIALIZED;
|
|
||||||
}
|
|
||||||
|
|
||||||
LeaveSpinLock();
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
MH_STATUS WINAPI MH_QueueEnableHook(LPVOID pTarget)
|
|
||||||
{
|
|
||||||
return QueueHook(pTarget, TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
MH_STATUS WINAPI MH_QueueDisableHook(LPVOID pTarget)
|
|
||||||
{
|
|
||||||
return QueueHook(pTarget, FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
MH_STATUS WINAPI MH_ApplyQueued(VOID)
|
|
||||||
{
|
|
||||||
MH_STATUS status = MH_OK;
|
|
||||||
UINT i, first = INVALID_HOOK_POS;
|
|
||||||
|
|
||||||
EnterSpinLock();
|
|
||||||
|
|
||||||
if (g_hHeap != NULL)
|
|
||||||
{
|
|
||||||
for (i = 0; i < g_hooks.size; ++i)
|
|
||||||
{
|
|
||||||
if (g_hooks.pItems[i].isEnabled != g_hooks.pItems[i].queueEnable)
|
|
||||||
{
|
|
||||||
first = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (first != INVALID_HOOK_POS)
|
|
||||||
{
|
|
||||||
FROZEN_THREADS threads;
|
|
||||||
Freeze(&threads, ALL_HOOKS_POS, ACTION_APPLY_QUEUED);
|
|
||||||
|
|
||||||
for (i = first; i < g_hooks.size; ++i)
|
|
||||||
{
|
|
||||||
PHOOK_ENTRY pHook = &g_hooks.pItems[i];
|
|
||||||
if (pHook->isEnabled != pHook->queueEnable)
|
|
||||||
{
|
|
||||||
status = EnableHookLL(i, pHook->queueEnable);
|
|
||||||
if (status != MH_OK)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Unfreeze(&threads);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
status = MH_ERROR_NOT_INITIALIZED;
|
|
||||||
}
|
|
||||||
|
|
||||||
LeaveSpinLock();
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
MH_STATUS WINAPI MH_CreateHookApiEx(
|
|
||||||
LPCWSTR pszModule, LPCSTR pszProcName, LPVOID pDetour,
|
|
||||||
LPVOID *ppOriginal, LPVOID *ppTarget)
|
|
||||||
{
|
|
||||||
HMODULE hModule;
|
|
||||||
LPVOID pTarget;
|
|
||||||
|
|
||||||
hModule = GetModuleHandleW(pszModule);
|
|
||||||
if (hModule == NULL)
|
|
||||||
return MH_ERROR_MODULE_NOT_FOUND;
|
|
||||||
|
|
||||||
pTarget = (LPVOID)GetProcAddress(hModule, pszProcName);
|
|
||||||
if (pTarget == NULL)
|
|
||||||
return MH_ERROR_FUNCTION_NOT_FOUND;
|
|
||||||
|
|
||||||
if(ppTarget != NULL)
|
|
||||||
*ppTarget = pTarget;
|
|
||||||
|
|
||||||
return MH_CreateHook(pTarget, pDetour, ppOriginal);
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
MH_STATUS WINAPI MH_CreateHookApi(
|
|
||||||
LPCWSTR pszModule, LPCSTR pszProcName, LPVOID pDetour, LPVOID *ppOriginal)
|
|
||||||
{
|
|
||||||
return MH_CreateHookApiEx(pszModule, pszProcName, pDetour, ppOriginal, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
const char * WINAPI MH_StatusToString(MH_STATUS status)
|
|
||||||
{
|
|
||||||
#define MH_ST2STR(x) \
|
|
||||||
case x: \
|
|
||||||
return #x;
|
|
||||||
|
|
||||||
switch (status) {
|
|
||||||
MH_ST2STR(MH_UNKNOWN)
|
|
||||||
MH_ST2STR(MH_OK)
|
|
||||||
MH_ST2STR(MH_ERROR_ALREADY_INITIALIZED)
|
|
||||||
MH_ST2STR(MH_ERROR_NOT_INITIALIZED)
|
|
||||||
MH_ST2STR(MH_ERROR_ALREADY_CREATED)
|
|
||||||
MH_ST2STR(MH_ERROR_NOT_CREATED)
|
|
||||||
MH_ST2STR(MH_ERROR_ENABLED)
|
|
||||||
MH_ST2STR(MH_ERROR_DISABLED)
|
|
||||||
MH_ST2STR(MH_ERROR_NOT_EXECUTABLE)
|
|
||||||
MH_ST2STR(MH_ERROR_UNSUPPORTED_FUNCTION)
|
|
||||||
MH_ST2STR(MH_ERROR_MEMORY_ALLOC)
|
|
||||||
MH_ST2STR(MH_ERROR_MEMORY_PROTECT)
|
|
||||||
MH_ST2STR(MH_ERROR_MODULE_NOT_FOUND)
|
|
||||||
MH_ST2STR(MH_ERROR_FUNCTION_NOT_FOUND)
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef MH_ST2STR
|
|
||||||
|
|
||||||
return "(unknown)";
|
|
||||||
}
|
|
|
@ -1,316 +0,0 @@
|
||||||
/*
|
|
||||||
* MinHook - The Minimalistic API Hooking Library for x64/x86
|
|
||||||
* Copyright (C) 2009-2017 Tsuda Kageyu.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
||||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
|
||||||
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER
|
|
||||||
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
||||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
||||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
||||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <windows.h>
|
|
||||||
|
|
||||||
#ifndef ARRAYSIZE
|
|
||||||
#define ARRAYSIZE(A) (sizeof(A)/sizeof((A)[0]))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(_M_X64) || defined(__x86_64__)
|
|
||||||
#include "./hde/hde64.h"
|
|
||||||
typedef hde64s HDE;
|
|
||||||
#define HDE_DISASM(code, hs) hde64_disasm(code, hs)
|
|
||||||
#else
|
|
||||||
#include "./hde/hde32.h"
|
|
||||||
typedef hde32s HDE;
|
|
||||||
#define HDE_DISASM(code, hs) hde32_disasm(code, hs)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "trampoline.h"
|
|
||||||
#include "buffer.h"
|
|
||||||
|
|
||||||
// Maximum size of a trampoline function.
|
|
||||||
#if defined(_M_X64) || defined(__x86_64__)
|
|
||||||
#define TRAMPOLINE_MAX_SIZE (MEMORY_SLOT_SIZE - sizeof(JMP_ABS))
|
|
||||||
#else
|
|
||||||
#define TRAMPOLINE_MAX_SIZE MEMORY_SLOT_SIZE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
static BOOL IsCodePadding(LPBYTE pInst, UINT size)
|
|
||||||
{
|
|
||||||
UINT i;
|
|
||||||
|
|
||||||
if (pInst[0] != 0x00 && pInst[0] != 0x90 && pInst[0] != 0xCC)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
for (i = 1; i < size; ++i)
|
|
||||||
{
|
|
||||||
if (pInst[i] != pInst[0])
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
BOOL CreateTrampolineFunction(PTRAMPOLINE ct)
|
|
||||||
{
|
|
||||||
#if defined(_M_X64) || defined(__x86_64__)
|
|
||||||
CALL_ABS call = {
|
|
||||||
0xFF, 0x15, 0x00000002, // FF15 00000002: CALL [RIP+8]
|
|
||||||
0xEB, 0x08, // EB 08: JMP +10
|
|
||||||
0x0000000000000000ULL // Absolute destination address
|
|
||||||
};
|
|
||||||
JMP_ABS jmp = {
|
|
||||||
0xFF, 0x25, 0x00000000, // FF25 00000000: JMP [RIP+6]
|
|
||||||
0x0000000000000000ULL // Absolute destination address
|
|
||||||
};
|
|
||||||
JCC_ABS jcc = {
|
|
||||||
0x70, 0x0E, // 7* 0E: J** +16
|
|
||||||
0xFF, 0x25, 0x00000000, // FF25 00000000: JMP [RIP+6]
|
|
||||||
0x0000000000000000ULL // Absolute destination address
|
|
||||||
};
|
|
||||||
#else
|
|
||||||
CALL_REL call = {
|
|
||||||
0xE8, // E8 xxxxxxxx: CALL +5+xxxxxxxx
|
|
||||||
0x00000000 // Relative destination address
|
|
||||||
};
|
|
||||||
JMP_REL jmp = {
|
|
||||||
0xE9, // E9 xxxxxxxx: JMP +5+xxxxxxxx
|
|
||||||
0x00000000 // Relative destination address
|
|
||||||
};
|
|
||||||
JCC_REL jcc = {
|
|
||||||
0x0F, 0x80, // 0F8* xxxxxxxx: J** +6+xxxxxxxx
|
|
||||||
0x00000000 // Relative destination address
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
UINT8 oldPos = 0;
|
|
||||||
UINT8 newPos = 0;
|
|
||||||
ULONG_PTR jmpDest = 0; // Destination address of an internal jump.
|
|
||||||
BOOL finished = FALSE; // Is the function completed?
|
|
||||||
#if defined(_M_X64) || defined(__x86_64__)
|
|
||||||
UINT8 instBuf[16];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ct->patchAbove = FALSE;
|
|
||||||
ct->nIP = 0;
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
HDE hs;
|
|
||||||
UINT copySize;
|
|
||||||
LPVOID pCopySrc;
|
|
||||||
ULONG_PTR pOldInst = (ULONG_PTR)ct->pTarget + oldPos;
|
|
||||||
ULONG_PTR pNewInst = (ULONG_PTR)ct->pTrampoline + newPos;
|
|
||||||
|
|
||||||
copySize = HDE_DISASM((LPVOID)pOldInst, &hs);
|
|
||||||
if (hs.flags & F_ERROR)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
pCopySrc = (LPVOID)pOldInst;
|
|
||||||
if (oldPos >= sizeof(JMP_REL))
|
|
||||||
{
|
|
||||||
// The trampoline function is long enough.
|
|
||||||
// Complete the function with the jump to the target function.
|
|
||||||
#if defined(_M_X64) || defined(__x86_64__)
|
|
||||||
jmp.address = pOldInst;
|
|
||||||
#else
|
|
||||||
jmp.operand = (UINT32)(pOldInst - (pNewInst + sizeof(jmp)));
|
|
||||||
#endif
|
|
||||||
pCopySrc = &jmp;
|
|
||||||
copySize = sizeof(jmp);
|
|
||||||
|
|
||||||
finished = TRUE;
|
|
||||||
}
|
|
||||||
#if defined(_M_X64) || defined(__x86_64__)
|
|
||||||
else if ((hs.modrm & 0xC7) == 0x05)
|
|
||||||
{
|
|
||||||
// Instructions using RIP relative addressing. (ModR/M = 00???101B)
|
|
||||||
|
|
||||||
// Modify the RIP relative address.
|
|
||||||
PUINT32 pRelAddr;
|
|
||||||
|
|
||||||
// Avoid using memcpy to reduce the footprint.
|
|
||||||
#ifndef _MSC_VER
|
|
||||||
memcpy(instBuf, (LPBYTE)pOldInst, copySize);
|
|
||||||
#else
|
|
||||||
__movsb(instBuf, (LPBYTE)pOldInst, copySize);
|
|
||||||
#endif
|
|
||||||
pCopySrc = instBuf;
|
|
||||||
|
|
||||||
// Relative address is stored at (instruction length - immediate value length - 4).
|
|
||||||
pRelAddr = (PUINT32)(instBuf + hs.len - ((hs.flags & 0x3C) >> 2) - 4);
|
|
||||||
*pRelAddr
|
|
||||||
= (UINT32)((pOldInst + hs.len + (INT32)hs.disp.disp32) - (pNewInst + hs.len));
|
|
||||||
|
|
||||||
// Complete the function if JMP (FF /4).
|
|
||||||
if (hs.opcode == 0xFF && hs.modrm_reg == 4)
|
|
||||||
finished = TRUE;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
else if (hs.opcode == 0xE8)
|
|
||||||
{
|
|
||||||
// Direct relative CALL
|
|
||||||
ULONG_PTR dest = pOldInst + hs.len + (INT32)hs.imm.imm32;
|
|
||||||
#if defined(_M_X64) || defined(__x86_64__)
|
|
||||||
call.address = dest;
|
|
||||||
#else
|
|
||||||
call.operand = (UINT32)(dest - (pNewInst + sizeof(call)));
|
|
||||||
#endif
|
|
||||||
pCopySrc = &call;
|
|
||||||
copySize = sizeof(call);
|
|
||||||
}
|
|
||||||
else if ((hs.opcode & 0xFD) == 0xE9)
|
|
||||||
{
|
|
||||||
// Direct relative JMP (EB or E9)
|
|
||||||
ULONG_PTR dest = pOldInst + hs.len;
|
|
||||||
|
|
||||||
if (hs.opcode == 0xEB) // isShort jmp
|
|
||||||
dest += (INT8)hs.imm.imm8;
|
|
||||||
else
|
|
||||||
dest += (INT32)hs.imm.imm32;
|
|
||||||
|
|
||||||
// Simply copy an internal jump.
|
|
||||||
if ((ULONG_PTR)ct->pTarget <= dest
|
|
||||||
&& dest < ((ULONG_PTR)ct->pTarget + sizeof(JMP_REL)))
|
|
||||||
{
|
|
||||||
if (jmpDest < dest)
|
|
||||||
jmpDest = dest;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
#if defined(_M_X64) || defined(__x86_64__)
|
|
||||||
jmp.address = dest;
|
|
||||||
#else
|
|
||||||
jmp.operand = (UINT32)(dest - (pNewInst + sizeof(jmp)));
|
|
||||||
#endif
|
|
||||||
pCopySrc = &jmp;
|
|
||||||
copySize = sizeof(jmp);
|
|
||||||
|
|
||||||
// Exit the function If it is not in the branch
|
|
||||||
finished = (pOldInst >= jmpDest);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if ((hs.opcode & 0xF0) == 0x70
|
|
||||||
|| (hs.opcode & 0xFC) == 0xE0
|
|
||||||
|| (hs.opcode2 & 0xF0) == 0x80)
|
|
||||||
{
|
|
||||||
// Direct relative Jcc
|
|
||||||
ULONG_PTR dest = pOldInst + hs.len;
|
|
||||||
|
|
||||||
if ((hs.opcode & 0xF0) == 0x70 // Jcc
|
|
||||||
|| (hs.opcode & 0xFC) == 0xE0) // LOOPNZ/LOOPZ/LOOP/JECXZ
|
|
||||||
dest += (INT8)hs.imm.imm8;
|
|
||||||
else
|
|
||||||
dest += (INT32)hs.imm.imm32;
|
|
||||||
|
|
||||||
// Simply copy an internal jump.
|
|
||||||
if ((ULONG_PTR)ct->pTarget <= dest
|
|
||||||
&& dest < ((ULONG_PTR)ct->pTarget + sizeof(JMP_REL)))
|
|
||||||
{
|
|
||||||
if (jmpDest < dest)
|
|
||||||
jmpDest = dest;
|
|
||||||
}
|
|
||||||
else if ((hs.opcode & 0xFC) == 0xE0)
|
|
||||||
{
|
|
||||||
// LOOPNZ/LOOPZ/LOOP/JCXZ/JECXZ to the outside are not supported.
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
UINT8 cond = ((hs.opcode != 0x0F ? hs.opcode : hs.opcode2) & 0x0F);
|
|
||||||
#if defined(_M_X64) || defined(__x86_64__)
|
|
||||||
// Invert the condition in x64 mode to simplify the conditional jump logic.
|
|
||||||
jcc.opcode = 0x71 ^ cond;
|
|
||||||
jcc.address = dest;
|
|
||||||
#else
|
|
||||||
jcc.opcode1 = 0x80 | cond;
|
|
||||||
jcc.operand = (UINT32)(dest - (pNewInst + sizeof(jcc)));
|
|
||||||
#endif
|
|
||||||
pCopySrc = &jcc;
|
|
||||||
copySize = sizeof(jcc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if ((hs.opcode & 0xFE) == 0xC2)
|
|
||||||
{
|
|
||||||
// RET (C2 or C3)
|
|
||||||
|
|
||||||
// Complete the function if not in a branch.
|
|
||||||
finished = (pOldInst >= jmpDest);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Can't alter the instruction length in a branch.
|
|
||||||
if (pOldInst < jmpDest && copySize != hs.len)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
// Trampoline function is too large.
|
|
||||||
if ((newPos + copySize) > TRAMPOLINE_MAX_SIZE)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
// Trampoline function has too many instructions.
|
|
||||||
if (ct->nIP >= ARRAYSIZE(ct->oldIPs))
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
ct->oldIPs[ct->nIP] = oldPos;
|
|
||||||
ct->newIPs[ct->nIP] = newPos;
|
|
||||||
ct->nIP++;
|
|
||||||
|
|
||||||
// Avoid using memcpy to reduce the footprint.
|
|
||||||
#ifndef _MSC_VER
|
|
||||||
memcpy((LPBYTE)ct->pTrampoline + newPos, pCopySrc, copySize);
|
|
||||||
#else
|
|
||||||
__movsb((LPBYTE)ct->pTrampoline + newPos, pCopySrc, copySize);
|
|
||||||
#endif
|
|
||||||
newPos += copySize;
|
|
||||||
oldPos += hs.len;
|
|
||||||
}
|
|
||||||
while (!finished);
|
|
||||||
|
|
||||||
// Is there enough place for a long jump?
|
|
||||||
if (oldPos < sizeof(JMP_REL)
|
|
||||||
&& !IsCodePadding((LPBYTE)ct->pTarget + oldPos, sizeof(JMP_REL) - oldPos))
|
|
||||||
{
|
|
||||||
// Is there enough place for a short jump?
|
|
||||||
if (oldPos < sizeof(JMP_REL_SHORT)
|
|
||||||
&& !IsCodePadding((LPBYTE)ct->pTarget + oldPos, sizeof(JMP_REL_SHORT) - oldPos))
|
|
||||||
{
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Can we place the long jump above the function?
|
|
||||||
if (!IsExecutableAddress((LPBYTE)ct->pTarget - sizeof(JMP_REL)))
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
if (!IsCodePadding((LPBYTE)ct->pTarget - sizeof(JMP_REL), sizeof(JMP_REL)))
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
ct->patchAbove = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(_M_X64) || defined(__x86_64__)
|
|
||||||
// Create a relay function.
|
|
||||||
jmp.address = (ULONG_PTR)ct->pDetour;
|
|
||||||
|
|
||||||
ct->pRelay = (LPBYTE)ct->pTrampoline + newPos;
|
|
||||||
memcpy(ct->pRelay, &jmp, sizeof(jmp));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
|
@ -1,105 +0,0 @@
|
||||||
/*
|
|
||||||
* MinHook - The Minimalistic API Hooking Library for x64/x86
|
|
||||||
* Copyright (C) 2009-2017 Tsuda Kageyu.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
||||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
|
||||||
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER
|
|
||||||
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
||||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
||||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
||||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
||||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
||||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#pragma pack(push, 1)
|
|
||||||
|
|
||||||
// Structs for writing x86/x64 instructions.
|
|
||||||
|
|
||||||
// 8-bit relative jump.
|
|
||||||
typedef struct _JMP_REL_SHORT
|
|
||||||
{
|
|
||||||
UINT8 opcode; // EB xx: JMP +2+xx
|
|
||||||
UINT8 operand;
|
|
||||||
} JMP_REL_SHORT, *PJMP_REL_SHORT;
|
|
||||||
|
|
||||||
// 32-bit direct relative jump/call.
|
|
||||||
typedef struct _JMP_REL
|
|
||||||
{
|
|
||||||
UINT8 opcode; // E9/E8 xxxxxxxx: JMP/CALL +5+xxxxxxxx
|
|
||||||
UINT32 operand; // Relative destination address
|
|
||||||
} JMP_REL, *PJMP_REL, CALL_REL;
|
|
||||||
|
|
||||||
// 64-bit indirect absolute jump.
|
|
||||||
typedef struct _JMP_ABS
|
|
||||||
{
|
|
||||||
UINT8 opcode0; // FF25 00000000: JMP [+6]
|
|
||||||
UINT8 opcode1;
|
|
||||||
UINT32 dummy;
|
|
||||||
UINT64 address; // Absolute destination address
|
|
||||||
} JMP_ABS, *PJMP_ABS;
|
|
||||||
|
|
||||||
// 64-bit indirect absolute call.
|
|
||||||
typedef struct _CALL_ABS
|
|
||||||
{
|
|
||||||
UINT8 opcode0; // FF15 00000002: CALL [+6]
|
|
||||||
UINT8 opcode1;
|
|
||||||
UINT32 dummy0;
|
|
||||||
UINT8 dummy1; // EB 08: JMP +10
|
|
||||||
UINT8 dummy2;
|
|
||||||
UINT64 address; // Absolute destination address
|
|
||||||
} CALL_ABS;
|
|
||||||
|
|
||||||
// 32-bit direct relative conditional jumps.
|
|
||||||
typedef struct _JCC_REL
|
|
||||||
{
|
|
||||||
UINT8 opcode0; // 0F8* xxxxxxxx: J** +6+xxxxxxxx
|
|
||||||
UINT8 opcode1;
|
|
||||||
UINT32 operand; // Relative destination address
|
|
||||||
} JCC_REL;
|
|
||||||
|
|
||||||
// 64bit indirect absolute conditional jumps that x64 lacks.
|
|
||||||
typedef struct _JCC_ABS
|
|
||||||
{
|
|
||||||
UINT8 opcode; // 7* 0E: J** +16
|
|
||||||
UINT8 dummy0;
|
|
||||||
UINT8 dummy1; // FF25 00000000: JMP [+6]
|
|
||||||
UINT8 dummy2;
|
|
||||||
UINT32 dummy3;
|
|
||||||
UINT64 address; // Absolute destination address
|
|
||||||
} JCC_ABS;
|
|
||||||
|
|
||||||
#pragma pack(pop)
|
|
||||||
|
|
||||||
typedef struct _TRAMPOLINE
|
|
||||||
{
|
|
||||||
LPVOID pTarget; // [In] Address of the target function.
|
|
||||||
LPVOID pDetour; // [In] Address of the detour function.
|
|
||||||
LPVOID pTrampoline; // [In] Buffer address for the trampoline and relay function.
|
|
||||||
|
|
||||||
#if defined(_M_X64) || defined(__x86_64__)
|
|
||||||
LPVOID pRelay; // [Out] Address of the relay function.
|
|
||||||
#endif
|
|
||||||
BOOL patchAbove; // [Out] Should use the hot patch area?
|
|
||||||
UINT nIP; // [Out] Number of the instruction boundaries.
|
|
||||||
UINT8 oldIPs[8]; // [Out] Instruction boundaries of the target function.
|
|
||||||
UINT8 newIPs[8]; // [Out] Instruction boundaries of the trampoline function.
|
|
||||||
} TRAMPOLINE, *PTRAMPOLINE;
|
|
||||||
|
|
||||||
BOOL CreateTrampolineFunction(PTRAMPOLINE ct);
|
|
|
@ -9,6 +9,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Common", "Common", "{5DB3A8
|
||||||
ProjectSection(SolutionItems) = preProject
|
ProjectSection(SolutionItems) = preProject
|
||||||
Common\Defines.h = Common\Defines.h
|
Common\Defines.h = Common\Defines.h
|
||||||
Common\Logger.h = Common\Logger.h
|
Common\Logger.h = Common\Logger.h
|
||||||
|
Common\MemPatch.h = Common\MemPatch.h
|
||||||
Common\SimpleIni.h = Common\SimpleIni.h
|
Common\SimpleIni.h = Common\SimpleIni.h
|
||||||
Common\StringUtil.h = Common\StringUtil.h
|
Common\StringUtil.h = Common\StringUtil.h
|
||||||
Common\Timer.h = Common\Timer.h
|
Common\Timer.h = Common\Timer.h
|
||||||
|
@ -17,7 +18,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Common", "Common", "{5DB3A8
|
||||||
Common\WinVer.h = Common\WinVer.h
|
Common\WinVer.h = Common\WinVer.h
|
||||||
EndProjectSection
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libMinHook", "MinHook\build\VC15\libMinHook.vcxproj", "{F142A341-5EE0-442D-A15F-98AE9B48DBAE}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libMinHook", "MinHook\build\VC16\libMinHook.vcxproj", "{F142A341-5EE0-442D-A15F-98AE9B48DBAE}"
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
|
|
@ -8,28 +8,16 @@ void MainContext::EnableAutoFix()
|
||||||
std::string exe_name = ModuleNameA(NULL);
|
std::string exe_name = ModuleNameA(NULL);
|
||||||
std::transform(exe_name.begin(), exe_name.end(), exe_name.begin(), std::tolower);
|
std::transform(exe_name.begin(), exe_name.end(), exe_name.begin(), std::tolower);
|
||||||
|
|
||||||
if (exe_name == "game.exe" || exe_name == "game.dat")
|
|
||||||
{
|
|
||||||
autofix = RESIDENT_EVIL_4;
|
|
||||||
PrintLog("AutoFix for \"Resident Evil 4\" enabled");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (exe_name == "kb.exe")
|
|
||||||
{
|
|
||||||
autofix = KINGS_BOUNTY_LEGEND;
|
|
||||||
PrintLog("AutoFix for \"Kings Bounty: Legend\" enabled");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (exe_name == "ffxiiiimg.exe")
|
if (exe_name == "ffxiiiimg.exe")
|
||||||
{
|
{
|
||||||
autofix = FINAL_FANTASY_XIII;
|
autofix = AutoFixes::FINAL_FANTASY_XIII;
|
||||||
PrintLog("AutoFix for \"Final Fantasy XIII\" enabled");
|
PrintLog("AutoFix for \"Final Fantasy XIII\" enabled");
|
||||||
FF13_InitializeGameAddresses();
|
FF13_InitializeGameAddresses();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (exe_name == "ffxiii2img.exe")
|
if (exe_name == "ffxiii2img.exe")
|
||||||
{
|
{
|
||||||
autofix = FINAL_FANTASY_XIII2;
|
autofix = AutoFixes::FINAL_FANTASY_XIII2;
|
||||||
PrintLog("AutoFix for \"Final Fantasy XIII-2\" enabled");
|
PrintLog("AutoFix for \"Final Fantasy XIII-2\" enabled");
|
||||||
FF13_2_InitializeGameAddresses();
|
FF13_2_InitializeGameAddresses();
|
||||||
FF13_2_CreateSetFrameRateCodeBlock();
|
FF13_2_CreateSetFrameRateCodeBlock();
|
||||||
|
@ -38,8 +26,7 @@ void MainContext::EnableAutoFix()
|
||||||
|
|
||||||
const std::map<const MainContext::AutoFixes, const uint32_t> MainContext::behaviorflags_fixes =
|
const std::map<const MainContext::AutoFixes, const uint32_t> MainContext::behaviorflags_fixes =
|
||||||
{
|
{
|
||||||
{ RESIDENT_EVIL_4, D3DCREATE_SOFTWARE_VERTEXPROCESSING },
|
|
||||||
{ KINGS_BOUNTY_LEGEND, D3DCREATE_MIXED_VERTEXPROCESSING }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void MainContext::FixBehaviorFlagConflict(const DWORD flags_in, DWORD* flags_out)
|
void MainContext::FixBehaviorFlagConflict(const DWORD flags_in, DWORD* flags_out)
|
||||||
|
@ -75,44 +62,88 @@ bool MainContext::ApplyBehaviorFlagsFix(DWORD* flags)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainContext::ScaleScissorRect(RECT * rect) {
|
HRESULT MainContext::SetScissorRect(IDirect3DDevice9* pIDirect3DDevice9, CONST RECT* rect)
|
||||||
rect->left = (LONG) (rect->left * scissor_scaling_factor_w);
|
{
|
||||||
rect->top = (LONG) (rect->top * scissor_scaling_factor_h);
|
if (rect)
|
||||||
rect->right = (LONG)(rect->right * scissor_scaling_factor_w);
|
{
|
||||||
rect->bottom = (LONG) (rect-> bottom * scissor_scaling_factor_h);
|
RECT* r = const_cast<RECT*>(rect);
|
||||||
|
r->left = (LONG)(r->left * scissor_scaling_factor_w);
|
||||||
|
r->top = (LONG)(r->top * scissor_scaling_factor_h);
|
||||||
|
r->right = (LONG)(r->right * scissor_scaling_factor_w);
|
||||||
|
r->bottom = (LONG)(r->bottom * scissor_scaling_factor_h);
|
||||||
|
return pIDirect3DDevice9->SetScissorRect(r);
|
||||||
|
}
|
||||||
|
return pIDirect3DDevice9->SetScissorRect(rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT APIENTRY MainContext::ApplyVertexBufferFix(IDirect3DDevice9* pIDirect3DDevice9, UINT Length, DWORD Usage, DWORD FVF, D3DPOOL Pool, IDirect3DVertexBuffer9** ppVertexBuffer, HANDLE* pSharedHandle)
|
HRESULT MainContext::SetViewport(IDirect3DDevice9* pIDirect3DDevice9, CONST D3DVIEWPORT9* pViewport)
|
||||||
{
|
{
|
||||||
switch (autofix) {
|
if (pViewport)
|
||||||
case AutoFixes::NONE:
|
{
|
||||||
return pIDirect3DDevice9->CreateVertexBuffer(Length, Usage, FVF, Pool, ppVertexBuffer, pSharedHandle);
|
D3DVIEWPORT9* vp = const_cast<D3DVIEWPORT9*>(pViewport);
|
||||||
case FINAL_FANTASY_XIII:
|
if (pViewport->Width > 1280 && pViewport->Height > 720)
|
||||||
case FINAL_FANTASY_XIII2:
|
{
|
||||||
|
vp->Width--;
|
||||||
|
vp->X++;
|
||||||
|
|
||||||
|
vp->Height--;
|
||||||
|
vp->Y++;
|
||||||
|
}
|
||||||
|
return pIDirect3DDevice9->SetViewport(vp);
|
||||||
|
}
|
||||||
|
return pIDirect3DDevice9->SetViewport(pViewport);
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT MainContext::CreateVertexBuffer(IDirect3DDevice9* pIDirect3DDevice9, UINT Length, DWORD Usage, DWORD FVF, D3DPOOL Pool, IDirect3DVertexBuffer9** ppVertexBuffer, HANDLE* pSharedHandle)
|
||||||
|
{
|
||||||
|
switch (autofix)
|
||||||
|
{
|
||||||
|
case AutoFixes::FINAL_FANTASY_XIII:
|
||||||
|
case AutoFixes::FINAL_FANTASY_XIII2:
|
||||||
// Both games lock a vertex buffer 358400 before drawing any 2D element on screen (sometimes multiple times per frame)
|
// Both games lock a vertex buffer 358400 before drawing any 2D element on screen (sometimes multiple times per frame)
|
||||||
if (Length == 358400 && Pool == D3DPOOL_MANAGED) {
|
if (Length == 358400 && Pool == D3DPOOL_MANAGED) {
|
||||||
Usage = D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY;
|
Usage = D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY;
|
||||||
Pool = D3DPOOL_SYSTEMMEM;
|
Pool = D3DPOOL_SYSTEMMEM;
|
||||||
|
|
||||||
//IDirect3DVertexBuffer9* buffer = nullptr;
|
|
||||||
//HRESULT hr = pIDirect3DDevice9->CreateVertexBuffer(Length, Usage, FVF, Pool, &buffer, NULL);
|
|
||||||
//if (FAILED(hr))
|
|
||||||
//{
|
|
||||||
// return pIDirect3DDevice9->CreateVertexBuffer(Length, Usage, FVF, Pool, ppVertexBuffer, pSharedHandle);
|
|
||||||
//}
|
|
||||||
|
|
||||||
//if(ppVertexBuffer) *ppVertexBuffer = new hkIDirect3DVertexBuffer9(pIDirect3DDevice9, buffer);
|
|
||||||
//return hr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Crashing on Lock/Unlock, why???
|
||||||
|
// //IDirect3DVertexBuffer9* buffer = nullptr;
|
||||||
|
// //HRESULT hr = pIDirect3DDevice9->CreateVertexBuffer(Length, Usage, FVF, Pool, &buffer, NULL);
|
||||||
|
// //if (FAILED(hr))
|
||||||
|
// //{
|
||||||
|
// // return pIDirect3DDevice9->CreateVertexBuffer(Length, Usage, FVF, Pool, ppVertexBuffer, pSharedHandle);
|
||||||
|
// //}
|
||||||
|
|
||||||
|
// //if(ppVertexBuffer) *ppVertexBuffer = new hkIDirect3DVertexBuffer9(pIDirect3DDevice9, buffer);
|
||||||
|
// //return hr;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return pIDirect3DDevice9->CreateVertexBuffer(Length, Usage, FVF, Pool, ppVertexBuffer, pSharedHandle);
|
return pIDirect3DDevice9->CreateVertexBuffer(Length, Usage, FVF, Pool, ppVertexBuffer, pSharedHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainContext::FF13_AsyncPatching() {
|
void MainContext::OneTimeFix(std::unique_ptr<wchar_t[]>& className)
|
||||||
|
{
|
||||||
|
if (wcscmp(className.get(), L"SQEX.CDev.Engine.Framework.MainWindow") == 0) {
|
||||||
|
std::thread fix(&context.Fix_Thread);
|
||||||
|
fix.detach();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainContext::Fix_Thread()
|
||||||
|
{
|
||||||
std::this_thread::sleep_for(std::chrono::milliseconds(2000));
|
std::this_thread::sleep_for(std::chrono::milliseconds(2000));
|
||||||
context.FF13_OneTimeFixes();
|
|
||||||
|
std::lock_guard<std::mutex> lock(context.fix_mutex);
|
||||||
|
if (context.autofix == AutoFixes::FINAL_FANTASY_XIII) {
|
||||||
|
PrintLog("Starting FFXIII one time RAM patches.");
|
||||||
|
context.FF13_OneTimeFixes();
|
||||||
|
}
|
||||||
|
else if (context.autofix == AutoFixes::FINAL_FANTASY_XIII2) {
|
||||||
|
PrintLog("Starting FFXIII-2 one time RAM patches.");
|
||||||
|
context.FF13_2_OneTimeFixes();
|
||||||
|
}
|
||||||
|
MessageBeep(MB_ICONASTERISK);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainContext::FF13_InitializeGameAddresses()
|
void MainContext::FF13_InitializeGameAddresses()
|
||||||
|
@ -142,33 +173,15 @@ void MainContext::FF13_InitializeGameAddresses()
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainContext::FF13_OneTimeFixes() {
|
void MainContext::FF13_OneTimeFixes() {
|
||||||
MainContext::FF13_Workaround_1440_Res_Bug();
|
FF13_NOPIngameFrameRateLimitSetter();
|
||||||
MainContext::FF13_NOPIngameFrameRateLimitSetter();
|
FF13_RemoveContinuousControllerScan();
|
||||||
MainContext::FF13_RemoveContinuousControllerScan();
|
FF13_FixScissorRect();
|
||||||
MainContext::FF13_FixScissorRect();
|
FF13_EnableControllerVibration();
|
||||||
MainContext::FF13_EnableControllerVibration();
|
FF13_SetFrameRateVariables();
|
||||||
MainContext::FF13_SetFrameRateVariables();
|
|
||||||
|
|
||||||
PrintLog("Finished FF13 One Time Fixes");
|
PrintLog("Finished FF13 One Time Fixes");
|
||||||
context.didOneTimeFixes = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainContext::FF13_Workaround_1440_Res_Bug()
|
|
||||||
{
|
|
||||||
if (*ff13_internal_res_w == 2560 && *ff13_internal_res_h == 1440) {
|
|
||||||
// We need to reduce one or another. Increasing the internal res causes crashes.
|
|
||||||
// Decreasing the internal res width by one pixel causes the last pixel column displayed on the screen to stay black.
|
|
||||||
PrintLog("Applying workaround for resolution 2560x1440 bug.");
|
|
||||||
*ff13_internal_res_w = 2559;
|
|
||||||
}
|
|
||||||
else if (*ff13_internal_res_w == 3440 && *ff13_internal_res_h == 1440) {
|
|
||||||
// Fix ultrawide pixelation also.
|
|
||||||
PrintLog("Applying workaround for resolution 3440x1440 bug.");
|
|
||||||
*ff13_internal_res_w = 3439;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void MainContext::FF13_EnableControllerVibration()
|
void MainContext::FF13_EnableControllerVibration()
|
||||||
{
|
{
|
||||||
if (!config.GetFFXIIIEnableControllerVibration()) {
|
if (!config.GetFFXIIIEnableControllerVibration()) {
|
||||||
|
@ -180,24 +193,14 @@ void MainContext::FF13_EnableControllerVibration()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
PrintLog("Enabling controller vibration...");
|
PrintLog("Enabling controller vibration...");
|
||||||
ChangeMemoryProtectionToReadWriteExecute(ff13_vibration_low_set_zero_address, 5);
|
MemPatch::Nop(ff13_vibration_low_set_zero_address, 5);
|
||||||
|
MemPatch::Nop(ff13_vibration_high_set_zero_address, 5);
|
||||||
|
|
||||||
*ff13_vibration_low_set_zero_address = 0x90;
|
|
||||||
*(ff13_vibration_low_set_zero_address + 1) = 0x90;
|
|
||||||
*(ff13_vibration_low_set_zero_address + 2) = 0x90;
|
|
||||||
*(ff13_vibration_low_set_zero_address + 3) = 0x90;
|
|
||||||
*(ff13_vibration_low_set_zero_address + 4) = 0x90;
|
|
||||||
|
|
||||||
ChangeMemoryProtectionToReadWriteExecute(ff13_vibration_high_set_zero_address, 5);
|
|
||||||
*ff13_vibration_high_set_zero_address = 0x90;
|
|
||||||
*(ff13_vibration_high_set_zero_address + 1) = 0x90;
|
|
||||||
*(ff13_vibration_high_set_zero_address + 2) = 0x90;
|
|
||||||
*(ff13_vibration_high_set_zero_address + 3) = 0x90;
|
|
||||||
*(ff13_vibration_high_set_zero_address + 4) = 0x90;
|
|
||||||
xinputManager = new XInputManager(ff13_base_controller_input_address_ptr);
|
xinputManager = new XInputManager(ff13_base_controller_input_address_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainContext::FF13_RemoveContinuousControllerScan() {
|
void MainContext::FF13_RemoveContinuousControllerScan()
|
||||||
|
{
|
||||||
if (!config.GetFFXIIIDisableIngameControllerHotSwapping()) {
|
if (!config.GetFFXIIIDisableIngameControllerHotSwapping()) {
|
||||||
PrintLog("Continuous controller scanning not disabled (config)");
|
PrintLog("Continuous controller scanning not disabled (config)");
|
||||||
return;
|
return;
|
||||||
|
@ -205,12 +208,12 @@ void MainContext::FF13_RemoveContinuousControllerScan() {
|
||||||
// Disable continuous controller scanning.
|
// Disable continuous controller scanning.
|
||||||
|
|
||||||
PrintLog("Removing game slow and synchronous controller continuous controller scanning...");
|
PrintLog("Removing game slow and synchronous controller continuous controller scanning...");
|
||||||
context.ChangeMemoryProtectionToReadWriteExecute(ff13_continuous_scan_instruction_address, 1);
|
|
||||||
// change a jne to jmp
|
// change a jne to jmp
|
||||||
*(uint8_t*)ff13_continuous_scan_instruction_address = 0xEB;
|
MemPatch::Fill(ff13_continuous_scan_instruction_address, 0xEB, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainContext::FF13_FixScissorRect() {
|
void MainContext::FF13_FixScissorRect()
|
||||||
|
{
|
||||||
PrintLog("Fixing ScissorRect...");
|
PrintLog("Fixing ScissorRect...");
|
||||||
const float originalWidth = 1280.0F;
|
const float originalWidth = 1280.0F;
|
||||||
const float resolutionFactorW = (float)*ff13_internal_res_w / originalWidth;
|
const float resolutionFactorW = (float)*ff13_internal_res_w / originalWidth;
|
||||||
|
@ -223,81 +226,25 @@ void MainContext::FF13_FixScissorRect() {
|
||||||
// The game scales some scissor rects, but not all of them.
|
// The game scales some scissor rects, but not all of them.
|
||||||
// It seems easier to neuter its internal scaling process and scale everything on our own...
|
// It seems easier to neuter its internal scaling process and scale everything on our own...
|
||||||
|
|
||||||
context.ChangeMemoryProtectionToReadWriteExecute(ff13_loading_screen_scissor_scaling_factor_1, 3);
|
MemPatch::Nop(ff13_loading_screen_scissor_scaling_factor_1, 3);
|
||||||
*(ff13_loading_screen_scissor_scaling_factor_1) = 0x90; // NOP
|
MemPatch::Nop(ff13_loading_screen_scissor_scaling_factor_2, 3);
|
||||||
*(ff13_loading_screen_scissor_scaling_factor_1 + 1) = 0x90; // NOP
|
MemPatch::Nop(ff13_loading_screen_scissor_scaling_factor_3, 3);
|
||||||
*(ff13_loading_screen_scissor_scaling_factor_1 + 2) = 0x90; // NOP
|
MemPatch::Nop(ff13_loading_screen_scissor_scaling_factor_4, 3);
|
||||||
|
MemPatch::Nop(ff13_settings_screen_scissor_scaling_factor, 5);
|
||||||
context.ChangeMemoryProtectionToReadWriteExecute(ff13_loading_screen_scissor_scaling_factor_2, 3);
|
MemPatch::Nop(ff13_party_screen_scissor_scaling_factor_1, 4);
|
||||||
*(ff13_loading_screen_scissor_scaling_factor_2 + 0) = 0x90; // NOP
|
MemPatch::Nop(ff13_party_screen_scissor_scaling_factor_2, 7);
|
||||||
*(ff13_loading_screen_scissor_scaling_factor_2 + 1) = 0x90; // NOP
|
MemPatch::Nop(ff13_party_screen_scissor_scaling_factor_3, 7);
|
||||||
*(ff13_loading_screen_scissor_scaling_factor_2 + 2) = 0x90; // NOP
|
MemPatch::Nop(ff13_party_screen_scissor_scaling_factor_3, 5);
|
||||||
|
|
||||||
context.ChangeMemoryProtectionToReadWriteExecute(ff13_loading_screen_scissor_scaling_factor_3, 3);
|
|
||||||
*(ff13_loading_screen_scissor_scaling_factor_3 + 0) = 0x90; // NOP
|
|
||||||
*(ff13_loading_screen_scissor_scaling_factor_3 + 1) = 0x90; // NOP
|
|
||||||
*(ff13_loading_screen_scissor_scaling_factor_3 + 2) = 0x90; // NOP
|
|
||||||
|
|
||||||
context.ChangeMemoryProtectionToReadWriteExecute(ff13_loading_screen_scissor_scaling_factor_4, 3);
|
|
||||||
*(ff13_loading_screen_scissor_scaling_factor_4 + 0) = 0x90; // NOP
|
|
||||||
*(ff13_loading_screen_scissor_scaling_factor_4 + 1) = 0x90; // NOP
|
|
||||||
*(ff13_loading_screen_scissor_scaling_factor_4 + 2) = 0x90; // NOP
|
|
||||||
|
|
||||||
context.ChangeMemoryProtectionToReadWriteExecute(ff13_settings_screen_scissor_scaling_factor, 5);
|
|
||||||
*(ff13_settings_screen_scissor_scaling_factor) = 0x90; // NOP
|
|
||||||
*(ff13_settings_screen_scissor_scaling_factor + 1) = 0x90; // NOP
|
|
||||||
*(ff13_settings_screen_scissor_scaling_factor + 2) = 0x90; // NOP
|
|
||||||
*(ff13_settings_screen_scissor_scaling_factor + 3) = 0x90; // NOP
|
|
||||||
*(ff13_settings_screen_scissor_scaling_factor + 4) = 0x90; // NOP
|
|
||||||
|
|
||||||
context.ChangeMemoryProtectionToReadWriteExecute(ff13_party_screen_scissor_scaling_factor_1, 4);
|
|
||||||
*(ff13_party_screen_scissor_scaling_factor_1) = 0x90; // NOP
|
|
||||||
*(ff13_party_screen_scissor_scaling_factor_1 + 1) = 0x90; // NOP
|
|
||||||
*(ff13_party_screen_scissor_scaling_factor_1 + 2) = 0x90; // NOP
|
|
||||||
*(ff13_party_screen_scissor_scaling_factor_1 + 3) = 0x90; // NOP
|
|
||||||
|
|
||||||
context.ChangeMemoryProtectionToReadWriteExecute(ff13_party_screen_scissor_scaling_factor_2, 7);
|
|
||||||
*(ff13_party_screen_scissor_scaling_factor_2) = 0x90; // NOP
|
|
||||||
*(ff13_party_screen_scissor_scaling_factor_2 + 1) = 0x90; // NOP
|
|
||||||
*(ff13_party_screen_scissor_scaling_factor_2 + 2) = 0x90; // NOP
|
|
||||||
*(ff13_party_screen_scissor_scaling_factor_2 + 3) = 0x90; // NOP
|
|
||||||
*(ff13_party_screen_scissor_scaling_factor_2 + 4) = 0x90; // NOP
|
|
||||||
*(ff13_party_screen_scissor_scaling_factor_2 + 5) = 0x90; // NOP
|
|
||||||
*(ff13_party_screen_scissor_scaling_factor_2 + 6) = 0x90; // NOP
|
|
||||||
|
|
||||||
context.ChangeMemoryProtectionToReadWriteExecute(ff13_party_screen_scissor_scaling_factor_3, 7);
|
|
||||||
*(ff13_party_screen_scissor_scaling_factor_3) = 0x90; // NOP
|
|
||||||
*(ff13_party_screen_scissor_scaling_factor_3 + 1) = 0x90; // NOP
|
|
||||||
*(ff13_party_screen_scissor_scaling_factor_3 + 2) = 0x90; // NOP
|
|
||||||
*(ff13_party_screen_scissor_scaling_factor_3 + 3) = 0x90; // NOP
|
|
||||||
*(ff13_party_screen_scissor_scaling_factor_3 + 4) = 0x90; // NOP
|
|
||||||
*(ff13_party_screen_scissor_scaling_factor_3 + 5) = 0x90; // NOP
|
|
||||||
*(ff13_party_screen_scissor_scaling_factor_3 + 6) = 0x90; // NOP
|
|
||||||
|
|
||||||
context.ChangeMemoryProtectionToReadWriteExecute(ff13_party_screen_scissor_scaling_factor_4, 5);
|
|
||||||
*(ff13_party_screen_scissor_scaling_factor_4) = 0x90; // NOP
|
|
||||||
*(ff13_party_screen_scissor_scaling_factor_4 + 1) = 0x90; // NOP
|
|
||||||
*(ff13_party_screen_scissor_scaling_factor_4 + 2) = 0x90; // NOP
|
|
||||||
*(ff13_party_screen_scissor_scaling_factor_4 + 3) = 0x90; // NOP
|
|
||||||
*(ff13_party_screen_scissor_scaling_factor_4 + 4) = 0x90; // NOP
|
|
||||||
*(ff13_party_screen_scissor_scaling_factor_4 + 5) = 0x90; // NOP
|
|
||||||
*(ff13_party_screen_scissor_scaling_factor_4 + 6) = 0x90; // NOP
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainContext::FF13_NOPIngameFrameRateLimitSetter() {
|
void MainContext::FF13_NOPIngameFrameRateLimitSetter()
|
||||||
|
{
|
||||||
PrintLog("NOPing the in-game instruction that sets the frame rate.");
|
PrintLog("NOPing the in-game instruction that sets the frame rate.");
|
||||||
|
MemPatch::Nop(ff13_set_framerate_ingame_instruction_address, 5);
|
||||||
context.ChangeMemoryProtectionToReadWriteExecute(ff13_set_framerate_ingame_instruction_address, 5);
|
|
||||||
|
|
||||||
// patching to: NOP NOP NOP NOP
|
|
||||||
*ff13_set_framerate_ingame_instruction_address = 0x90;
|
|
||||||
*(ff13_set_framerate_ingame_instruction_address + 1) = 0x90;
|
|
||||||
*(ff13_set_framerate_ingame_instruction_address + 2) = 0x90;
|
|
||||||
*(ff13_set_framerate_ingame_instruction_address + 3) = 0x90;
|
|
||||||
*(ff13_set_framerate_ingame_instruction_address + 4) = 0x90;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainContext::FF13_SetFrameRateVariables() {
|
void MainContext::FF13_SetFrameRateVariables()
|
||||||
|
{
|
||||||
float* framePacerTargetPtr = *ff13_frame_pacer_ptr;
|
float* framePacerTargetPtr = *ff13_frame_pacer_ptr;
|
||||||
if (framePacerTargetPtr) {
|
if (framePacerTargetPtr) {
|
||||||
PrintLog("Frame pacer target frame rate is at address %x", framePacerTargetPtr);
|
PrintLog("Frame pacer target frame rate is at address %x", framePacerTargetPtr);
|
||||||
|
@ -306,20 +253,18 @@ void MainContext::FF13_SetFrameRateVariables() {
|
||||||
*ingameFrameRateFramePacerTarget = MAX_FRAME_RATE_LIMIT;
|
*ingameFrameRateFramePacerTarget = MAX_FRAME_RATE_LIMIT;
|
||||||
PrintLog("Frame pacer disabled.");
|
PrintLog("Frame pacer disabled.");
|
||||||
|
|
||||||
const float frameRateConfig = (float)context.config.GetFFXIIIIngameFrameRateLimit();
|
if (config.GetFFXIIIIngameFrameRateLimit() != 0)
|
||||||
const bool unlimitedFrameRate = AreAlmostTheSame(frameRateConfig, -1.0f);
|
{
|
||||||
const bool shouldSetFrameRateLimit = !AreAlmostTheSame(frameRateConfig, 0.0f);
|
const s32 frameRateConfig = config.GetFFXIIIIngameFrameRateLimit();
|
||||||
|
float frameRateLimit = 0;
|
||||||
|
|
||||||
float frameRateLimit = 0;
|
if (frameRateConfig == -1) {
|
||||||
|
frameRateLimit = MAX_FRAME_RATE_LIMIT;
|
||||||
|
}
|
||||||
|
else if (frameRateConfig > 0) {
|
||||||
|
frameRateLimit = (float)std::min(frameRateConfig, (s32)MAX_FRAME_RATE_LIMIT);
|
||||||
|
}
|
||||||
|
|
||||||
if (unlimitedFrameRate) {
|
|
||||||
frameRateLimit = MAX_FRAME_RATE_LIMIT;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
frameRateLimit = frameRateConfig;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (shouldSetFrameRateLimit) {
|
|
||||||
float* ingameFrameRateLimitPtr = framePacerTargetPtr + 1;
|
float* ingameFrameRateLimitPtr = framePacerTargetPtr + 1;
|
||||||
*ingameFrameRateLimitPtr = frameRateLimit;
|
*ingameFrameRateLimitPtr = frameRateLimit;
|
||||||
PrintLog("Target frame rate set to %f", frameRateLimit);
|
PrintLog("Target frame rate set to %f", frameRateLimit);
|
||||||
|
@ -330,40 +275,22 @@ void MainContext::FF13_SetFrameRateVariables() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainContext::FF13_2_AsyncPatching() {
|
void MainContext::FF13_2_OneTimeFixes()
|
||||||
std::this_thread::sleep_for(std::chrono::milliseconds(2000));
|
{
|
||||||
context.FF13_2_OneTimeFixes();
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainContext::FF13_2_OneTimeFixes() {
|
|
||||||
|
|
||||||
if (*ff13_2_frame_pacer_ptr_address) {
|
if (*ff13_2_frame_pacer_ptr_address) {
|
||||||
**ff13_2_frame_pacer_ptr_address = MAX_FRAME_RATE_LIMIT;
|
**ff13_2_frame_pacer_ptr_address = MAX_FRAME_RATE_LIMIT;
|
||||||
PrintLog("Frame pacer disabled");
|
PrintLog("Frame pacer disabled");
|
||||||
|
|
||||||
context.FF13_2_Workaround_2560_1440_Res_Bug();
|
FF13_2_AddHookIngameFrameRateLimitSetter();
|
||||||
context.FF13_2_AddHookIngameFrameRateLimitSetter();
|
FF13_2_RemoveContinuousControllerScan();
|
||||||
context.FF13_2_RemoveContinuousControllerScan();
|
FF13_2_EnableControllerVibration();
|
||||||
context.FF13_2_EnableControllerVibration();
|
|
||||||
PrintLog("Finished FF13-2 One Time Fixes");
|
PrintLog("Finished FF13-2 One Time Fixes");
|
||||||
context.didOneTimeFixes = true;
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
PrintLog("Unable to apply FF13-2 One Time Fixes. Report this!");
|
PrintLog("Unable to apply FF13-2 One Time Fixes. Report this!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainContext::FF13_2_Workaround_2560_1440_Res_Bug()
|
|
||||||
{
|
|
||||||
if (*ff13_2_internal_res_w == 2560 && *ff13_2_internal_res_h == 1440) {
|
|
||||||
// We need to reduce one or another. Increasing the internal res causes crashes.
|
|
||||||
// Decreasing the internal res width by one pixel causes the last pixel column displayed on the screen to stay black.
|
|
||||||
PrintLog("Applying workaround for resolution 2560x1440 bug.");
|
|
||||||
*ff13_2_internal_res_w = 2559;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void MainContext::FF13_2_EnableControllerVibration()
|
void MainContext::FF13_2_EnableControllerVibration()
|
||||||
{
|
{
|
||||||
if (!config.GetFFXIIIEnableControllerVibration()) {
|
if (!config.GetFFXIIIEnableControllerVibration()) {
|
||||||
|
@ -371,20 +298,9 @@ void MainContext::FF13_2_EnableControllerVibration()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
PrintLog("Enabling controller vibration...");
|
PrintLog("Enabling controller vibration...");
|
||||||
ChangeMemoryProtectionToReadWriteExecute(ff13_2_vibration_low_set_zero_address, 5);
|
|
||||||
|
|
||||||
*ff13_2_vibration_low_set_zero_address = 0x90;
|
MemPatch::Nop(ff13_2_vibration_low_set_zero_address, 5);
|
||||||
*(ff13_2_vibration_low_set_zero_address + 1) = 0x90;
|
MemPatch::Nop(ff13_2_vibration_high_set_zero_address, 5);
|
||||||
*(ff13_2_vibration_low_set_zero_address + 2) = 0x90;
|
|
||||||
*(ff13_2_vibration_low_set_zero_address + 3) = 0x90;
|
|
||||||
*(ff13_2_vibration_low_set_zero_address + 4) = 0x90;
|
|
||||||
|
|
||||||
ChangeMemoryProtectionToReadWriteExecute(ff13_2_vibration_high_set_zero_address, 5);
|
|
||||||
*ff13_2_vibration_high_set_zero_address = 0x90;
|
|
||||||
*(ff13_2_vibration_high_set_zero_address + 1) = 0x90;
|
|
||||||
*(ff13_2_vibration_high_set_zero_address + 2) = 0x90;
|
|
||||||
*(ff13_2_vibration_high_set_zero_address + 3) = 0x90;
|
|
||||||
*(ff13_2_vibration_high_set_zero_address + 4) = 0x90;
|
|
||||||
|
|
||||||
xinputManager = new XInputManager(ff13_2_base_controller_input_address_ptr);
|
xinputManager = new XInputManager(ff13_2_base_controller_input_address_ptr);
|
||||||
}
|
}
|
||||||
|
@ -405,7 +321,8 @@ void MainContext::FF13_2_InitializeGameAddresses()
|
||||||
ff13_2_internal_res_h = ff13_2_internal_res_w + 1;
|
ff13_2_internal_res_h = ff13_2_internal_res_w + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainContext::FF13_2_RemoveContinuousControllerScan() {
|
void MainContext::FF13_2_RemoveContinuousControllerScan()
|
||||||
|
{
|
||||||
if (!config.GetFFXIIIDisableIngameControllerHotSwapping()) {
|
if (!config.GetFFXIIIDisableIngameControllerHotSwapping()) {
|
||||||
PrintLog("Continuous controller scanning not disabled (config)");
|
PrintLog("Continuous controller scanning not disabled (config)");
|
||||||
return;
|
return;
|
||||||
|
@ -413,20 +330,20 @@ void MainContext::FF13_2_RemoveContinuousControllerScan() {
|
||||||
// Disable continuous controller scanning.
|
// Disable continuous controller scanning.
|
||||||
|
|
||||||
PrintLog("Removing game slow and synchronous controller continuous controller scanning...");
|
PrintLog("Removing game slow and synchronous controller continuous controller scanning...");
|
||||||
context.ChangeMemoryProtectionToReadWriteExecute(ff13_2_continuous_scan_instruction_address, 1);
|
|
||||||
// change a jne to jmp
|
// change a jne to jmp
|
||||||
*(uint8_t*)ff13_2_continuous_scan_instruction_address = 0xEB;
|
MemPatch::Fill(ff13_2_continuous_scan_instruction_address, 0xEB, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainContext::FF13_2_AddHookIngameFrameRateLimitSetter() {
|
void MainContext::FF13_2_AddHookIngameFrameRateLimitSetter()
|
||||||
if (context.AreAlmostTheSame((float)context.config.GetFFXIIIIngameFrameRateLimit(), 0.0F)) {
|
{
|
||||||
|
if (config.GetFFXIIIIngameFrameRateLimit() == 0) {
|
||||||
PrintLog("Frame rate should not be changed (config = 0)");
|
PrintLog("Frame rate should not be changed (config = 0)");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
PrintLog("Hooking the instruction that sets the frame rate...");
|
PrintLog("Hooking the instruction that sets the frame rate...");
|
||||||
|
|
||||||
context.ChangeMemoryProtectionToReadWriteExecute(ff13_2_set_frame_rate_address, 5);
|
MemPatch::CUnprotect unp(ff13_2_set_frame_rate_address, 5);
|
||||||
|
|
||||||
// patching to: jmp FF13_2_SET_FRAME_RATE_INJECTED_CODE
|
// patching to: jmp FF13_2_SET_FRAME_RATE_INJECTED_CODE
|
||||||
*ff13_2_set_frame_rate_address = 0xE9;
|
*ff13_2_set_frame_rate_address = 0xE9;
|
||||||
|
@ -436,16 +353,26 @@ void MainContext::FF13_2_AddHookIngameFrameRateLimitSetter() {
|
||||||
void MainContext::FF13_2_CreateSetFrameRateCodeBlock()
|
void MainContext::FF13_2_CreateSetFrameRateCodeBlock()
|
||||||
{
|
{
|
||||||
const int blockSize = 31;
|
const int blockSize = 31;
|
||||||
FF13_2_SET_FRAME_RATE_INJECTED_CODE = new uint8_t[blockSize];
|
FF13_2_SET_FRAME_RATE_INJECTED_CODE = new(std::nothrow) uint8_t[blockSize];
|
||||||
|
if (!FF13_2_SET_FRAME_RATE_INJECTED_CODE) {
|
||||||
ChangeMemoryProtectionToReadWriteExecute(FF13_2_SET_FRAME_RATE_INJECTED_CODE, blockSize);
|
PrintLog("Failed to initialize FFXIII-2 code block");
|
||||||
|
return;
|
||||||
float frameRateConfigValue = (float)context.config.GetFFXIIIIngameFrameRateLimit();
|
|
||||||
if (AreAlmostTheSame(frameRateConfigValue, -1.0F) || frameRateConfigValue > FF13_2_MAX_FRAME_CAP) {
|
|
||||||
ff13_2_targetFrameRate = FF13_2_MAX_FRAME_CAP;
|
|
||||||
}
|
}
|
||||||
else {
|
DWORD oldProtect;
|
||||||
ff13_2_targetFrameRate = frameRateConfigValue;
|
VirtualProtect(FF13_2_SET_FRAME_RATE_INJECTED_CODE, blockSize, PAGE_EXECUTE_READWRITE, &oldProtect);
|
||||||
|
|
||||||
|
if (config.GetFFXIIIIngameFrameRateLimit() != 0)
|
||||||
|
{
|
||||||
|
const s32 frameRateConfig = config.GetFFXIIIIngameFrameRateLimit();
|
||||||
|
|
||||||
|
if (frameRateConfig == -1) {
|
||||||
|
ff13_2_targetFrameRate = FF13_2_MAX_FRAME_CAP;
|
||||||
|
}
|
||||||
|
else if (frameRateConfig > 0) {
|
||||||
|
ff13_2_targetFrameRate = (float)std::min(frameRateConfig, (s32)FF13_2_MAX_FRAME_CAP);
|
||||||
|
}
|
||||||
|
|
||||||
|
PrintLog("Target frame rate set to %f", ff13_2_targetFrameRate);
|
||||||
}
|
}
|
||||||
|
|
||||||
// movss xmm1,[&FF13_2_30_FPS]
|
// movss xmm1,[&FF13_2_30_FPS]
|
||||||
|
@ -484,12 +411,6 @@ void MainContext::FF13_2_CreateSetFrameRateCodeBlock()
|
||||||
*(uint32_t*)(FF13_2_SET_FRAME_RATE_INJECTED_CODE + 27) = ff13_2_set_frame_rate_address - FF13_2_SET_FRAME_RATE_INJECTED_CODE - 26;
|
*(uint32_t*)(FF13_2_SET_FRAME_RATE_INJECTED_CODE + 27) = ff13_2_set_frame_rate_address - FF13_2_SET_FRAME_RATE_INJECTED_CODE - 26;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void MainContext::ChangeMemoryProtectionToReadWriteExecute(void* address, const int size) {
|
|
||||||
DWORD oldProtection;
|
|
||||||
VirtualProtect(address, size, PAGE_EXECUTE_READWRITE, &oldProtection);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainContext::PrintVersionInfo() {
|
void MainContext::PrintVersionInfo() {
|
||||||
PrintLog("FF13Fix 1.4.6 https://github.com/rebtd7/FF13Fix");
|
PrintLog("FF13Fix 1.4.6 https://github.com/rebtd7/FF13Fix");
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,7 @@ MainContext::MainContext() : oldWndProc(nullptr)
|
||||||
LogFile("FF13Fix.log");
|
LogFile("FF13Fix.log");
|
||||||
context.PrintVersionInfo();
|
context.PrintVersionInfo();
|
||||||
|
|
||||||
if (config.GetAutoFix()) EnableAutoFix();
|
if (config.GetOptionsAutoFix()) EnableAutoFix();
|
||||||
|
|
||||||
PrintLog("Enabling hooks:");
|
PrintLog("Enabling hooks:");
|
||||||
const MH_STATUS initializeHooks = MH_Initialize();
|
const MH_STATUS initializeHooks = MH_Initialize();
|
||||||
|
@ -74,8 +74,6 @@ MainContext::MainContext() : oldWndProc(nullptr)
|
||||||
PrintLog("createHookSetWindowLongW = %d", createHookSetWindowLongW);
|
PrintLog("createHookSetWindowLongW = %d", createHookSetWindowLongW);
|
||||||
const MH_STATUS enableHookSetWindowLongW = MH_EnableHook(SetWindowLongW);
|
const MH_STATUS enableHookSetWindowLongW = MH_EnableHook(SetWindowLongW);
|
||||||
PrintLog("enableHookSetWindowLongW = %d", enableHookSetWindowLongW);
|
PrintLog("enableHookSetWindowLongW = %d", enableHookSetWindowLongW);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MainContext::~MainContext()
|
MainContext::~MainContext()
|
||||||
|
@ -125,47 +123,48 @@ bool MainContext::ApplyPresentationParameters(D3DPRESENT_PARAMETERS* pPresentati
|
||||||
{
|
{
|
||||||
if (pPresentationParameters)
|
if (pPresentationParameters)
|
||||||
{
|
{
|
||||||
if (config.GetTripleBuffering())
|
// -1 = Auto, enabled when no DXVK is used
|
||||||
|
if (config.GetOptionsTripleBuffering() == 1 || (config.GetOptionsTripleBuffering() == -1 && !D3D9DLL::Get().IsDXVK()))
|
||||||
{
|
{
|
||||||
pPresentationParameters->BackBufferCount = 3;
|
pPresentationParameters->BackBufferCount = 3;
|
||||||
PrintLog("BackBufferCount: BackBufferCount set to %u", pPresentationParameters->BackBufferCount);
|
PrintLog("BackBufferCount: BackBufferCount set to %u", pPresentationParameters->BackBufferCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((s32)config.GetFullScreenRefreshRate() >= 0 && pPresentationParameters->FullScreen_RefreshRateInHz != 0)
|
if ((s32)config.GetOptionsFullScreenRefreshRate() >= 0 && pPresentationParameters->FullScreen_RefreshRateInHz != 0)
|
||||||
{
|
{
|
||||||
PrintLog("Changing refresh rate from %u to %u", pPresentationParameters->FullScreen_RefreshRateInHz, config.GetFullScreenRefreshRate());
|
PrintLog("Changing refresh rate from %u to %u", pPresentationParameters->FullScreen_RefreshRateInHz, config.GetOptionsFullScreenRefreshRate());
|
||||||
pPresentationParameters->FullScreen_RefreshRateInHz = config.GetFullScreenRefreshRate();
|
pPresentationParameters->FullScreen_RefreshRateInHz = config.GetOptionsFullScreenRefreshRate();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config.GetMultisample() > 0)
|
if (config.GetOptionsMultisample() > 0)
|
||||||
{
|
{
|
||||||
pPresentationParameters->SwapEffect = D3DSWAPEFFECT_DISCARD;
|
pPresentationParameters->SwapEffect = D3DSWAPEFFECT_DISCARD;
|
||||||
pPresentationParameters->MultiSampleType = (D3DMULTISAMPLE_TYPE)config.GetMultisample();
|
pPresentationParameters->MultiSampleType = (D3DMULTISAMPLE_TYPE)config.GetOptionsMultisample();
|
||||||
pPresentationParameters->MultiSampleQuality = 0;
|
pPresentationParameters->MultiSampleQuality = 0;
|
||||||
|
|
||||||
PrintLog("MultiSampleType %u, MultiSampleQuality %u", pPresentationParameters->MultiSampleType, pPresentationParameters->MultiSampleQuality);
|
PrintLog("MultiSampleType %u, MultiSampleQuality %u", pPresentationParameters->MultiSampleType, pPresentationParameters->MultiSampleQuality);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config.GetPresentationInterval() != -1)
|
if (config.GetOptionsPresentationInterval() != -1)
|
||||||
{
|
{
|
||||||
pPresentationParameters->PresentationInterval = config.GetPresentationInterval();
|
pPresentationParameters->PresentationInterval = config.GetOptionsPresentationInterval();
|
||||||
PrintLog("PresentationInterval: PresentationInterval set to %u", pPresentationParameters->PresentationInterval);
|
PrintLog("PresentationInterval: PresentationInterval set to %u", pPresentationParameters->PresentationInterval);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((s32)config.GetSwapEffect() != -1)
|
if (config.GetOptionsSwapEffect() != -1)
|
||||||
{
|
{
|
||||||
pPresentationParameters->SwapEffect = (D3DSWAPEFFECT)config.GetSwapEffect();
|
pPresentationParameters->SwapEffect = (D3DSWAPEFFECT)config.GetOptionsSwapEffect();
|
||||||
PrintLog("SwapEffect: SwapEffect set to %u", pPresentationParameters->SwapEffect);
|
PrintLog("SwapEffect: SwapEffect set to %u", pPresentationParameters->SwapEffect);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config.GetBorderless())
|
if (config.GetBorderlessBorderless())
|
||||||
{
|
{
|
||||||
int cx = GetSystemMetrics(SM_CXSCREEN);
|
int cx = GetSystemMetrics(SM_CXSCREEN);
|
||||||
int cy = GetSystemMetrics(SM_CYSCREEN);
|
int cy = GetSystemMetrics(SM_CYSCREEN);
|
||||||
|
|
||||||
SetWindowPos(pPresentationParameters->hDeviceWindow, HWND_TOP, 0, 0, cx, cy, SWP_SHOWWINDOW | SWP_NOCOPYBITS | SWP_NOSENDCHANGING);
|
SetWindowPos(pPresentationParameters->hDeviceWindow, HWND_TOP, 0, 0, cx, cy, SWP_SHOWWINDOW | SWP_NOCOPYBITS | SWP_NOSENDCHANGING);
|
||||||
|
|
||||||
if (config.GetForceWindowedMode())
|
if (config.GetBorderlessForceWindowedMode())
|
||||||
{
|
{
|
||||||
pPresentationParameters->SwapEffect = pPresentationParameters->MultiSampleType == D3DMULTISAMPLE_NONE ? D3DSWAPEFFECT_DISCARD : D3DSWAPEFFECT_FLIP;
|
pPresentationParameters->SwapEffect = pPresentationParameters->MultiSampleType == D3DMULTISAMPLE_NONE ? D3DSWAPEFFECT_DISCARD : D3DSWAPEFFECT_FLIP;
|
||||||
pPresentationParameters->Windowed = TRUE;
|
pPresentationParameters->Windowed = TRUE;
|
||||||
|
@ -174,7 +173,7 @@ bool MainContext::ApplyPresentationParameters(D3DPRESENT_PARAMETERS* pPresentati
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config.GetHideCursor()) while (::ShowCursor(FALSE) >= 0); // ShowCursor < 0 -> hidden
|
if (config.GetOptionsHideCursor()) while (::ShowCursor(FALSE) >= 0); // ShowCursor < 0 -> hidden
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -191,32 +190,18 @@ bool MainContext::CheckWindow(HWND hWnd)
|
||||||
|
|
||||||
PrintLog("HWND 0x%p: ClassName \"%ls\", WindowName: \"%ls\"", hWnd, className.get(), windowName.get());
|
PrintLog("HWND 0x%p: ClassName \"%ls\", WindowName: \"%ls\"", hWnd, className.get(), windowName.get());
|
||||||
|
|
||||||
if (!context.didOneTimeFixes) {
|
OneTimeFix(className);
|
||||||
if (context.autofix == FINAL_FANTASY_XIII && wcscmp(className.get(), L"SQEX.CDev.Engine.Framework.MainWindow") == 0) {
|
|
||||||
const std::lock_guard<std::mutex> lock(context.oneTimeFixesMutex);
|
bool class_found = config.GetBorderlessWindowClass().compare(className.get()) == 0;
|
||||||
if(!context.didOneTimeFixes && patchingThread == NULL){
|
bool window_found = config.GetBorderlessWindowName().compare(windowName.get()) == 0;
|
||||||
PrintLog("Starting FFXIII one time RAM patches.");
|
bool force = config.GetBorderlessAllWindows();
|
||||||
patchingThread = new std::thread(&context.FF13_AsyncPatching);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (context.autofix == FINAL_FANTASY_XIII2 && wcscmp(className.get(), L"SQEX.CDev.Engine.Framework.MainWindow") == 0) {
|
|
||||||
const std::lock_guard<std::mutex> lock(context.oneTimeFixesMutex);
|
|
||||||
if (!context.didOneTimeFixes && patchingThread == NULL) {
|
|
||||||
PrintLog("Starting FFXIII-2 one time RAM patches.");
|
|
||||||
patchingThread = new std::thread(&context.FF13_2_AsyncPatching);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
bool class_found = config.GetWindowClass().compare(className.get()) == 0;
|
|
||||||
bool window_found = config.GetWindowName().compare(windowName.get()) == 0;
|
|
||||||
bool force = config.GetAllWindows();
|
|
||||||
|
|
||||||
return class_found || window_found || force;
|
return class_found || window_found || force;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainContext::ApplyWndProc(HWND hWnd)
|
void MainContext::ApplyWndProc(HWND hWnd)
|
||||||
{
|
{
|
||||||
if (config.GetAlwaysActive() || config.GetHideCursor())
|
if (config.GetOptionsAlwaysActive() || config.GetOptionsHideCursor())
|
||||||
{
|
{
|
||||||
context.oldWndProc = (WNDPROC)context.TrueSetWindowLongA(hWnd, GWLP_WNDPROC, (LONG_PTR)context.WindowProc);
|
context.oldWndProc = (WNDPROC)context.TrueSetWindowLongA(hWnd, GWLP_WNDPROC, (LONG_PTR)context.WindowProc);
|
||||||
}
|
}
|
||||||
|
@ -224,7 +209,7 @@ void MainContext::ApplyWndProc(HWND hWnd)
|
||||||
|
|
||||||
void MainContext::ApplyBorderless(HWND hWnd)
|
void MainContext::ApplyBorderless(HWND hWnd)
|
||||||
{
|
{
|
||||||
if (config.GetBorderless())
|
if (config.GetBorderlessBorderless())
|
||||||
{
|
{
|
||||||
LONG_PTR dwStyle = GetWindowLongPtr(hWnd, GWL_STYLE);
|
LONG_PTR dwStyle = GetWindowLongPtr(hWnd, GWL_STYLE);
|
||||||
LONG_PTR dwExStyle = GetWindowLongPtr(hWnd, GWL_EXSTYLE);
|
LONG_PTR dwExStyle = GetWindowLongPtr(hWnd, GWL_EXSTYLE);
|
||||||
|
@ -243,7 +228,6 @@ void MainContext::ApplyBorderless(HWND hWnd)
|
||||||
|
|
||||||
PrintLog("HWND 0x%p: Borderless dwStyle: %lX->%lX", hWnd, dwStyle, new_dwStyle);
|
PrintLog("HWND 0x%p: Borderless dwStyle: %lX->%lX", hWnd, dwStyle, new_dwStyle);
|
||||||
PrintLog("HWND 0x%p: Borderless dwExStyle: %lX->%lX", hWnd, dwExStyle, new_dwExStyle);
|
PrintLog("HWND 0x%p: Borderless dwExStyle: %lX->%lX", hWnd, dwExStyle, new_dwExStyle);
|
||||||
MessageBeep(MB_ICONASTERISK);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -261,21 +245,21 @@ LRESULT CALLBACK MainContext::WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LP
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WA_INACTIVE:
|
case WA_INACTIVE:
|
||||||
if (context.config.GetAlwaysActive())
|
if (context.config.GetOptionsAlwaysActive())
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
if (!context.config.GetForceHideCursor())
|
if (!context.config.GetOptionsForceHideCursor())
|
||||||
while (::ShowCursor(TRUE) < 0);
|
while (::ShowCursor(TRUE) < 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case WM_ACTIVATEAPP:
|
case WM_ACTIVATEAPP:
|
||||||
if (context.config.GetAlwaysActive())
|
if (context.config.GetOptionsAlwaysActive())
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (context.config.GetForceHideCursor())
|
if (context.config.GetOptionsForceHideCursor())
|
||||||
while (::ShowCursor(FALSE) >= 0);
|
while (::ShowCursor(FALSE) >= 0);
|
||||||
|
|
||||||
return CallWindowProc(context.oldWndProc, hWnd, uMsg, wParam, lParam);
|
return CallWindowProc(context.oldWndProc, hWnd, uMsg, wParam, lParam);
|
||||||
|
@ -283,7 +267,7 @@ LRESULT CALLBACK MainContext::WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LP
|
||||||
|
|
||||||
LONG WINAPI MainContext::HookSetWindowLongA(HWND hWnd, int nIndex, LONG dwNewLong)
|
LONG WINAPI MainContext::HookSetWindowLongA(HWND hWnd, int nIndex, LONG dwNewLong)
|
||||||
{
|
{
|
||||||
if (context.config.GetBorderless())
|
if (context.config.GetBorderlessBorderless())
|
||||||
{
|
{
|
||||||
DWORD olddwNewLong = dwNewLong;
|
DWORD olddwNewLong = dwNewLong;
|
||||||
if (nIndex == GWL_STYLE)
|
if (nIndex == GWL_STYLE)
|
||||||
|
@ -303,7 +287,7 @@ LONG WINAPI MainContext::HookSetWindowLongA(HWND hWnd, int nIndex, LONG dwNewLon
|
||||||
|
|
||||||
LONG WINAPI MainContext::HookSetWindowLongW(HWND hWnd, int nIndex, LONG dwNewLong)
|
LONG WINAPI MainContext::HookSetWindowLongW(HWND hWnd, int nIndex, LONG dwNewLong)
|
||||||
{
|
{
|
||||||
if (context.config.GetBorderless())
|
if (context.config.GetBorderlessBorderless())
|
||||||
{
|
{
|
||||||
DWORD olddwNewLong = dwNewLong;
|
DWORD olddwNewLong = dwNewLong;
|
||||||
if (nIndex == GWL_STYLE)
|
if (nIndex == GWL_STYLE)
|
||||||
|
|
267
d3d9ex/Context.h
267
d3d9ex/Context.h
|
@ -1,151 +1,148 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <array>
|
#include <array>
|
||||||
#include "d3d9.h"
|
#include "d3d9.h"
|
||||||
#include <MinHook.h>
|
#include <MinHook.h>
|
||||||
#include "SimpleIni.h"
|
#include "SimpleIni.h"
|
||||||
#include "XInputManager.h"
|
#include "XInputManager.h"
|
||||||
|
#include "MemPatch.h"
|
||||||
struct hkIDirect3D9;
|
|
||||||
|
struct hkIDirect3D9;
|
||||||
static const char* inifilename = "FF13Fix.ini";
|
|
||||||
#define CONFIG_VERSION 4
|
static const char* inifilename = "FF13Fix.ini";
|
||||||
|
#define CONFIG_VERSION 5
|
||||||
class Config
|
|
||||||
{
|
class Config
|
||||||
public:
|
{
|
||||||
Config(const Config&) = delete;
|
public:
|
||||||
const Config& operator=(Config& other) = delete;
|
Config(const Config&) = delete;
|
||||||
|
const Config& operator=(Config& other) = delete;
|
||||||
Config();
|
|
||||||
|
Config();
|
||||||
#define SETTING(_type, _func, _var, _section, _defaultval) \
|
|
||||||
private: _type _var; \
|
#define SETTING(_type, _func, _var, _section, _defaultval) \
|
||||||
public: const _type& Get##_var() const { return _var; };
|
private: _type _var; \
|
||||||
#include "Settings.h"
|
public: const _type& Get##_section##_var() const { return _var; };
|
||||||
#undef SETTING
|
#include "Settings.h"
|
||||||
};
|
#undef SETTING
|
||||||
|
};
|
||||||
#define DECLARE_HOOK(type, callconv, name, ...) \
|
|
||||||
public: type(callconv* True##name)(__VA_ARGS__) = name; \
|
#define DECLARE_HOOK(type, callconv, name, ...) \
|
||||||
private: static type callconv Hook##name(__VA_ARGS__);
|
public: type(callconv* True##name)(__VA_ARGS__) = name; \
|
||||||
|
private: static type callconv Hook##name(__VA_ARGS__);
|
||||||
class MainContext
|
|
||||||
{
|
class MainContext
|
||||||
MainContext(const MainContext&) = delete;
|
{
|
||||||
const MainContext& operator=(MainContext& other) = delete;
|
MainContext(const MainContext&) = delete;
|
||||||
|
const MainContext& operator=(MainContext& other) = delete;
|
||||||
DECLARE_HOOK(IDirect3D9*, WINAPI, Direct3DCreate9, UINT SDKVersion);
|
|
||||||
DECLARE_HOOK(LONG, WINAPI, SetWindowLongA, HWND hWnd, int nIndex, LONG dwNewLong);
|
DECLARE_HOOK(IDirect3D9*, WINAPI, Direct3DCreate9, UINT SDKVersion);
|
||||||
DECLARE_HOOK(LONG, WINAPI, SetWindowLongW, HWND hWnd, int nIndex, LONG dwNewLong);
|
DECLARE_HOOK(LONG, WINAPI, SetWindowLongA, HWND hWnd, int nIndex, LONG dwNewLong);
|
||||||
DECLARE_HOOK(HWND, WINAPI, CreateWindowExA, DWORD dwExStyle, LPCSTR lpClassName, LPCSTR lpWindowName,
|
DECLARE_HOOK(LONG, WINAPI, SetWindowLongW, HWND hWnd, int nIndex, LONG dwNewLong);
|
||||||
DWORD dwStyle, int X, int Y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam);
|
DECLARE_HOOK(HWND, WINAPI, CreateWindowExA, DWORD dwExStyle, LPCSTR lpClassName, LPCSTR lpWindowName,
|
||||||
DECLARE_HOOK(HWND, WINAPI, CreateWindowExW, DWORD dwExStyle, LPCWSTR lpClassName, LPCWSTR lpWindowName,
|
DWORD dwStyle, int X, int Y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam);
|
||||||
DWORD dwStyle, int X, int Y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam);
|
DECLARE_HOOK(HWND, WINAPI, CreateWindowExW, DWORD dwExStyle, LPCWSTR lpClassName, LPCWSTR lpWindowName,
|
||||||
|
DWORD dwStyle, int X, int Y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam);
|
||||||
public:
|
|
||||||
|
public:
|
||||||
MainContext();
|
MainContext();
|
||||||
~MainContext();
|
~MainContext();
|
||||||
|
|
||||||
bool ApplyPresentationParameters(D3DPRESENT_PARAMETERS* pPresentationParameters);
|
bool ApplyPresentationParameters(D3DPRESENT_PARAMETERS* pPresentationParameters);
|
||||||
bool ApplyBehaviorFlagsFix(DWORD* flags);
|
bool ApplyBehaviorFlagsFix(DWORD* flags);
|
||||||
void ScaleScissorRect(RECT * rect);
|
HRESULT SetScissorRect(IDirect3DDevice9* pIDirect3DDevice9, CONST RECT* rect);
|
||||||
HRESULT APIENTRY ApplyVertexBufferFix(IDirect3DDevice9* pIDirect3DDevice9, UINT Length, DWORD Usage, DWORD FVF, D3DPOOL Pool, IDirect3DVertexBuffer9** ppVertexBuffer, HANDLE* pSharedHandle);
|
HRESULT CreateVertexBuffer(IDirect3DDevice9* pIDirect3DDevice9, UINT Length, DWORD Usage, DWORD FVF, D3DPOOL Pool, IDirect3DVertexBuffer9** ppVertexBuffer, HANDLE* pSharedHandle);
|
||||||
bool BehaviorFlagsToString(DWORD BehaviorFlags, std::string* BehaviorFlagsString);
|
HRESULT SetViewport(IDirect3DDevice9* pIDirect3DDevice9, CONST D3DVIEWPORT9* pViewport);
|
||||||
|
bool BehaviorFlagsToString(DWORD BehaviorFlags, std::string* BehaviorFlagsString);
|
||||||
bool CheckWindow(HWND hWnd);
|
|
||||||
|
bool CheckWindow(HWND hWnd);
|
||||||
void ApplyWndProc(HWND hWnd);
|
|
||||||
void ApplyBorderless(HWND hWnd);
|
void ApplyWndProc(HWND hWnd);
|
||||||
|
void ApplyBorderless(HWND hWnd);
|
||||||
Config config;
|
|
||||||
|
Config config;
|
||||||
private:
|
|
||||||
enum AutoFixes : u32
|
private:
|
||||||
{
|
enum class AutoFixes : u32
|
||||||
NONE = 0,
|
{
|
||||||
RESIDENT_EVIL_4,
|
NONE = 0,
|
||||||
KINGS_BOUNTY_LEGEND,
|
RESIDENT_EVIL_4,
|
||||||
FINAL_FANTASY_XIII,
|
KINGS_BOUNTY_LEGEND,
|
||||||
FINAL_FANTASY_XIII2,
|
FINAL_FANTASY_XIII,
|
||||||
};
|
FINAL_FANTASY_XIII2,
|
||||||
|
};
|
||||||
void EnableAutoFix();
|
|
||||||
|
void EnableAutoFix();
|
||||||
AutoFixes autofix = AutoFixes::NONE;
|
|
||||||
|
AutoFixes autofix = AutoFixes::NONE;
|
||||||
std::mutex oneTimeFixesMutex;
|
|
||||||
bool didOneTimeFixes = false;
|
std::mutex fix_mutex;
|
||||||
|
|
||||||
const float MAX_FRAME_RATE_LIMIT = 250000.0F;
|
const float MAX_FRAME_RATE_LIMIT = 250000.0F;
|
||||||
float** ff13_frame_pacer_ptr = NULL;
|
float** ff13_frame_pacer_ptr = NULL;
|
||||||
uint8_t* ff13_set_framerate_ingame_instruction_address = NULL;
|
uint8_t* ff13_set_framerate_ingame_instruction_address = NULL;
|
||||||
uint8_t* ff13_continuous_scan_instruction_address = NULL;
|
uint8_t* ff13_continuous_scan_instruction_address = NULL;
|
||||||
uint8_t* ff13_enemy_scan_box_code_address = NULL;
|
uint8_t* ff13_enemy_scan_box_code_address = NULL;
|
||||||
uint8_t** ff13_base_controller_input_address_ptr = NULL;
|
uint8_t** ff13_base_controller_input_address_ptr = NULL;
|
||||||
uint8_t* ff13_vibration_high_set_zero_address = NULL;
|
uint8_t* ff13_vibration_high_set_zero_address = NULL;
|
||||||
uint8_t* ff13_vibration_low_set_zero_address = NULL;
|
uint8_t* ff13_vibration_low_set_zero_address = NULL;
|
||||||
uint8_t* ff13_loading_screen_scissor_scaling_factor_1 = NULL;
|
uint8_t* ff13_loading_screen_scissor_scaling_factor_1 = NULL;
|
||||||
uint8_t* ff13_loading_screen_scissor_scaling_factor_2 = NULL;
|
uint8_t* ff13_loading_screen_scissor_scaling_factor_2 = NULL;
|
||||||
uint8_t* ff13_loading_screen_scissor_scaling_factor_3 = NULL;
|
uint8_t* ff13_loading_screen_scissor_scaling_factor_3 = NULL;
|
||||||
uint8_t* ff13_loading_screen_scissor_scaling_factor_4 = NULL;
|
uint8_t* ff13_loading_screen_scissor_scaling_factor_4 = NULL;
|
||||||
uint8_t* ff13_settings_screen_scissor_scaling_factor = NULL;
|
uint8_t* ff13_settings_screen_scissor_scaling_factor = NULL;
|
||||||
uint8_t* ff13_party_screen_scissor_scaling_factor_1 = NULL;
|
uint8_t* ff13_party_screen_scissor_scaling_factor_1 = NULL;
|
||||||
uint8_t* ff13_party_screen_scissor_scaling_factor_2 = NULL;
|
uint8_t* ff13_party_screen_scissor_scaling_factor_2 = NULL;
|
||||||
uint8_t* ff13_party_screen_scissor_scaling_factor_3 = NULL;
|
uint8_t* ff13_party_screen_scissor_scaling_factor_3 = NULL;
|
||||||
uint8_t* ff13_party_screen_scissor_scaling_factor_4 = NULL;
|
uint8_t* ff13_party_screen_scissor_scaling_factor_4 = NULL;
|
||||||
uint32_t* ff13_internal_res_w;
|
uint32_t* ff13_internal_res_w;
|
||||||
uint32_t* ff13_internal_res_h;
|
uint32_t* ff13_internal_res_h;
|
||||||
|
|
||||||
uint8_t* FF13_2_SET_FRAME_RATE_INJECTED_CODE = NULL;
|
uint8_t* FF13_2_SET_FRAME_RATE_INJECTED_CODE = NULL;
|
||||||
uint8_t* ff13_2_continuous_scan_instruction_address;
|
uint8_t* ff13_2_continuous_scan_instruction_address;
|
||||||
uint8_t* ff13_2_set_frame_rate_address;
|
uint8_t* ff13_2_set_frame_rate_address;
|
||||||
float** ff13_2_frame_pacer_ptr_address;
|
float** ff13_2_frame_pacer_ptr_address;
|
||||||
float ff13_2_targetFrameRate;
|
float ff13_2_targetFrameRate;
|
||||||
uint8_t** ff13_2_base_controller_input_address_ptr = NULL;
|
uint8_t** ff13_2_base_controller_input_address_ptr = NULL;
|
||||||
uint8_t* ff13_2_vibration_high_set_zero_address = NULL;
|
uint8_t* ff13_2_vibration_high_set_zero_address = NULL;
|
||||||
uint8_t* ff13_2_vibration_low_set_zero_address = NULL;
|
uint8_t* ff13_2_vibration_low_set_zero_address = NULL;
|
||||||
uint32_t* ff13_2_internal_res_w;
|
uint32_t* ff13_2_internal_res_w;
|
||||||
uint32_t* ff13_2_internal_res_h;
|
uint32_t* ff13_2_internal_res_h;
|
||||||
|
|
||||||
const float FF13_2_30_FPS = 30.0F;
|
const float FF13_2_30_FPS = 30.0F;
|
||||||
const float FF13_2_MAX_FRAME_CAP = 1000.0F;
|
const float FF13_2_MAX_FRAME_CAP = 1000.0F;
|
||||||
|
|
||||||
float scissor_scaling_factor_w = 1.0f;
|
float scissor_scaling_factor_w = 1.0f;
|
||||||
float scissor_scaling_factor_h = 1.0f;
|
float scissor_scaling_factor_h = 1.0f;
|
||||||
|
|
||||||
XInputManager* xinputManager;
|
XInputManager* xinputManager;
|
||||||
std::thread * patchingThread = NULL;
|
|
||||||
|
void FixBehaviorFlagConflict(const DWORD flags_in, DWORD* flags_out);
|
||||||
void FixBehaviorFlagConflict(const DWORD flags_in, DWORD* flags_out);
|
static const std::map<const AutoFixes, const uint32_t> behaviorflags_fixes;
|
||||||
static const std::map<const AutoFixes, const uint32_t> behaviorflags_fixes;
|
|
||||||
|
static LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||||
static LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
WNDPROC oldWndProc;
|
||||||
WNDPROC oldWndProc;
|
|
||||||
|
|
||||||
void ChangeMemoryProtectionToReadWriteExecute(void* address, const int size);
|
|
||||||
bool AreAlmostTheSame(float a, float b);
|
bool AreAlmostTheSame(float a, float b);
|
||||||
void PrintVersionInfo();
|
void PrintVersionInfo();
|
||||||
|
|
||||||
|
void FF13_InitializeGameAddresses();
|
||||||
static void FF13_AsyncPatching();
|
void FF13_OneTimeFixes();
|
||||||
void FF13_InitializeGameAddresses();
|
void FF13_EnableControllerVibration();
|
||||||
void FF13_OneTimeFixes();
|
|
||||||
void FF13_Workaround_1440_Res_Bug();
|
|
||||||
void FF13_EnableControllerVibration();
|
|
||||||
void FF13_NOPIngameFrameRateLimitSetter();
|
void FF13_NOPIngameFrameRateLimitSetter();
|
||||||
void FF13_SetFrameRateVariables();
|
void FF13_SetFrameRateVariables();
|
||||||
void FF13_FixScissorRect();
|
void FF13_FixScissorRect();
|
||||||
void FF13_RemoveContinuousControllerScan();
|
void FF13_RemoveContinuousControllerScan();
|
||||||
|
|
||||||
static void FF13_2_AsyncPatching();
|
|
||||||
void FF13_2_CreateSetFrameRateCodeBlock();
|
void FF13_2_CreateSetFrameRateCodeBlock();
|
||||||
void FF13_2_InitializeGameAddresses();
|
void FF13_2_InitializeGameAddresses();
|
||||||
void FF13_2_RemoveContinuousControllerScan();
|
void FF13_2_RemoveContinuousControllerScan();
|
||||||
void FF13_2_AddHookIngameFrameRateLimitSetter();
|
void FF13_2_AddHookIngameFrameRateLimitSetter();
|
||||||
void FF13_2_OneTimeFixes();
|
void FF13_2_OneTimeFixes();
|
||||||
void FF13_2_Workaround_2560_1440_Res_Bug();
|
void FF13_2_EnableControllerVibration();
|
||||||
void FF13_2_EnableControllerVibration();
|
|
||||||
};
|
void OneTimeFix(std::unique_ptr<wchar_t[]>& className);
|
||||||
|
static void Fix_Thread();
|
||||||
extern MainContext context;
|
};
|
||||||
|
|
||||||
|
extern MainContext context;
|
||||||
|
|
|
@ -53,10 +53,10 @@ UINT APIENTRY hkIDirect3D9::GetAdapterCount() {
|
||||||
HRESULT APIENTRY hkIDirect3D9::GetAdapterIdentifier(UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER9* pIdentifier) {
|
HRESULT APIENTRY hkIDirect3D9::GetAdapterIdentifier(UINT Adapter, DWORD Flags, D3DADAPTER_IDENTIFIER9* pIdentifier) {
|
||||||
PrintLog(__FUNCTION__);
|
PrintLog(__FUNCTION__);
|
||||||
HRESULT rt = m_pWrapped->GetAdapterIdentifier(Adapter, Flags, pIdentifier);
|
HRESULT rt = m_pWrapped->GetAdapterIdentifier(Adapter, Flags, pIdentifier);
|
||||||
if (context.config.GetAdapter() && SUCCEEDED(rt) && pIdentifier)
|
if (context.config.GetAdapterAdapter() && SUCCEEDED(rt) && pIdentifier)
|
||||||
{
|
{
|
||||||
pIdentifier->VendorId = context.config.GetVendorId();
|
pIdentifier->VendorId = context.config.GetAdapterVendorId();
|
||||||
pIdentifier->DeviceId = context.config.GetDeviceId();
|
pIdentifier->DeviceId = context.config.GetAdapterDeviceId();
|
||||||
}
|
}
|
||||||
|
|
||||||
return rt;
|
return rt;
|
||||||
|
@ -79,7 +79,7 @@ HRESULT APIENTRY hkIDirect3D9::GetAdapterDisplayMode(UINT Adapter, D3DDISPLAYMOD
|
||||||
|
|
||||||
HRESULT APIENTRY hkIDirect3D9::CheckDeviceType(UINT Adapter, D3DDEVTYPE DevType, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed) {
|
HRESULT APIENTRY hkIDirect3D9::CheckDeviceType(UINT Adapter, D3DDEVTYPE DevType, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat, BOOL bWindowed) {
|
||||||
IDirect3D9_PrintLog(__FUNCTION__);
|
IDirect3D9_PrintLog(__FUNCTION__);
|
||||||
if (context.config.GetForceWindowedMode()) bWindowed = TRUE;
|
if (context.config.GetBorderlessForceWindowedMode()) bWindowed = TRUE;
|
||||||
return m_pWrapped->CheckDeviceType(Adapter, DevType, AdapterFormat, BackBufferFormat, bWindowed);
|
return m_pWrapped->CheckDeviceType(Adapter, DevType, AdapterFormat, BackBufferFormat, bWindowed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -122,9 +122,9 @@ HRESULT APIENTRY hkIDirect3D9::CreateDevice(UINT Adapter, D3DDEVTYPE DeviceType,
|
||||||
|
|
||||||
PrintLog("BehaviorFlags: %08X %s", BehaviorFlags, BehaviorFlagsString.c_str());
|
PrintLog("BehaviorFlags: %08X %s", BehaviorFlags, BehaviorFlagsString.c_str());
|
||||||
|
|
||||||
if (context.config.GetBehaviorFlags() > 0)
|
if (context.config.GetOptionsBehaviorFlags() > 0)
|
||||||
{
|
{
|
||||||
BehaviorFlags = context.config.GetBehaviorFlags();
|
BehaviorFlags = context.config.GetOptionsBehaviorFlags();
|
||||||
PrintLog("Advanced Mode: BehaviorFlags set");
|
PrintLog("Advanced Mode: BehaviorFlags set");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
#include <intrin.h>
|
#include <intrin.h>
|
||||||
|
|
||||||
#define IDirect3DDevice9_PrintLog(...) //PrintLog(format, __VA_ARGS__);
|
#define IDirect3DDevice9_PrintLog(...) //PrintLog("%s", __VA_ARGS__);
|
||||||
|
|
||||||
HRESULT APIENTRY hkIDirect3DDevice9::QueryInterface(REFIID riid, void** ppvObj) {
|
HRESULT APIENTRY hkIDirect3DDevice9::QueryInterface(REFIID riid, void** ppvObj) {
|
||||||
IDirect3DDevice9_PrintLog(__FUNCTION__);
|
IDirect3DDevice9_PrintLog(__FUNCTION__);
|
||||||
|
@ -102,22 +102,10 @@ HRESULT APIENTRY hkIDirect3DDevice9::GetSwapChain(UINT iSwapChain, IDirect3DSwap
|
||||||
|
|
||||||
// Steam Overlay Fix
|
// Steam Overlay Fix
|
||||||
// Add some space, 16bytes should be enough
|
// Add some space, 16bytes should be enough
|
||||||
__nop();
|
__nop(); __nop(); __nop(); __nop();
|
||||||
__nop();
|
__nop(); __nop(); __nop(); __nop();
|
||||||
__nop();
|
__nop(); __nop(); __nop(); __nop();
|
||||||
__nop();
|
__nop(); __nop(); __nop(); __nop();
|
||||||
__nop();
|
|
||||||
__nop();
|
|
||||||
__nop();
|
|
||||||
__nop();
|
|
||||||
__nop();
|
|
||||||
__nop();
|
|
||||||
__nop();
|
|
||||||
__nop();
|
|
||||||
__nop();
|
|
||||||
__nop();
|
|
||||||
__nop();
|
|
||||||
__nop();
|
|
||||||
|
|
||||||
return m_pWrapped->GetSwapChain(iSwapChain, pSwapChain);
|
return m_pWrapped->GetSwapChain(iSwapChain, pSwapChain);
|
||||||
}
|
}
|
||||||
|
@ -181,7 +169,7 @@ HRESULT APIENTRY hkIDirect3DDevice9::CreateCubeTexture(UINT EdgeLength, UINT Lev
|
||||||
|
|
||||||
HRESULT APIENTRY hkIDirect3DDevice9::CreateVertexBuffer(UINT Length, DWORD Usage, DWORD FVF, D3DPOOL Pool, IDirect3DVertexBuffer9** ppVertexBuffer, HANDLE* pSharedHandle) {
|
HRESULT APIENTRY hkIDirect3DDevice9::CreateVertexBuffer(UINT Length, DWORD Usage, DWORD FVF, D3DPOOL Pool, IDirect3DVertexBuffer9** ppVertexBuffer, HANDLE* pSharedHandle) {
|
||||||
//PrintLog("hkIDirect3DDevice9::CreateVertexBuffer %08u %x %x %x %p %p", Length, Usage, FVF, Pool, ppVertexBuffer, pSharedHandle);
|
//PrintLog("hkIDirect3DDevice9::CreateVertexBuffer %08u %x %x %x %p %p", Length, Usage, FVF, Pool, ppVertexBuffer, pSharedHandle);
|
||||||
return context.ApplyVertexBufferFix(m_pWrapped, Length, Usage, FVF, Pool, ppVertexBuffer, pSharedHandle);
|
return context.CreateVertexBuffer(m_pWrapped, Length, Usage, FVF, Pool, ppVertexBuffer, pSharedHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT APIENTRY hkIDirect3DDevice9::CreateIndexBuffer(UINT Length, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DIndexBuffer9** ppIndexBuffer, HANDLE* pSharedHandle) {
|
HRESULT APIENTRY hkIDirect3DDevice9::CreateIndexBuffer(UINT Length, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DIndexBuffer9** ppIndexBuffer, HANDLE* pSharedHandle) {
|
||||||
|
@ -286,7 +274,7 @@ HRESULT APIENTRY hkIDirect3DDevice9::MultiplyTransform(D3DTRANSFORMSTATETYPE Sta
|
||||||
|
|
||||||
HRESULT APIENTRY hkIDirect3DDevice9::SetViewport(CONST D3DVIEWPORT9* pViewport) {
|
HRESULT APIENTRY hkIDirect3DDevice9::SetViewport(CONST D3DVIEWPORT9* pViewport) {
|
||||||
IDirect3DDevice9_PrintLog(__FUNCTION__);
|
IDirect3DDevice9_PrintLog(__FUNCTION__);
|
||||||
return m_pWrapped->SetViewport(pViewport);
|
return context.SetViewport(m_pWrapped, pViewport);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT APIENTRY hkIDirect3DDevice9::GetViewport(D3DVIEWPORT9* pViewport) {
|
HRESULT APIENTRY hkIDirect3DDevice9::GetViewport(D3DVIEWPORT9* pViewport) {
|
||||||
|
@ -426,8 +414,7 @@ HRESULT APIENTRY hkIDirect3DDevice9::GetCurrentTexturePalette(UINT *PaletteNumbe
|
||||||
|
|
||||||
HRESULT APIENTRY hkIDirect3DDevice9::SetScissorRect(CONST RECT* pRect) {
|
HRESULT APIENTRY hkIDirect3DDevice9::SetScissorRect(CONST RECT* pRect) {
|
||||||
IDirect3DDevice9_PrintLog(__FUNCTION__);
|
IDirect3DDevice9_PrintLog(__FUNCTION__);
|
||||||
context.ScaleScissorRect((RECT*)pRect);
|
return context.SetScissorRect(m_pWrapped, pRect);
|
||||||
return m_pWrapped->SetScissorRect(pRect);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT APIENTRY hkIDirect3DDevice9::GetScissorRect(RECT* pRect) {
|
HRESULT APIENTRY hkIDirect3DDevice9::GetScissorRect(RECT* pRect) {
|
||||||
|
|
|
@ -1,19 +1,18 @@
|
||||||
|
|
||||||
SETTING(u32, LongValue, PresentationInterval, Options, 1);
|
SETTING(s32, LongValue, PresentationInterval, Options, 1);
|
||||||
SETTING(bool, BoolValue, TripleBuffering, Options, true);
|
SETTING(s32, LongValue, TripleBuffering, Options, -1);
|
||||||
SETTING(u32, LongValue, FullScreenRefreshRate, Options, 0);
|
SETTING(s32, LongValue, FullScreenRefreshRate, Options, 0);
|
||||||
SETTING(u32, LongValue, SwapEffect, Options, -1);
|
SETTING(s32, LongValue, SwapEffect, Options, -1);
|
||||||
SETTING(bool, BoolValue, AlwaysActive, Options, false);
|
SETTING(bool, BoolValue, AlwaysActive, Options, false);
|
||||||
SETTING(bool, BoolValue, AutoFix, Options, true);
|
SETTING(bool, BoolValue, AutoFix, Options, true);
|
||||||
SETTING(u32, LongValue, Multisample, Options, 0);
|
SETTING(s32, LongValue, Multisample, Options, 0);
|
||||||
SETTING(bool, BoolValue, HideCursor, Options, false);
|
SETTING(bool, BoolValue, HideCursor, Options, false);
|
||||||
SETTING(bool, BoolValue, ForceHideCursor, Options, false);
|
SETTING(bool, BoolValue, ForceHideCursor, Options, false);
|
||||||
SETTING(u32, LongValue, BehaviorFlags, Options, 0);
|
SETTING(u32, LongValue, BehaviorFlags, Options, 0);
|
||||||
|
|
||||||
SETTING(double, DoubleValue, FFXIIIIngameFrameRateLimit, Options, 0.0);
|
SETTING(s32, LongValue, IngameFrameRateLimit, FFXIII, 0);
|
||||||
SETTING(bool, BoolValue, FFXIIIDisableIngameControllerHotSwapping, Options, true);
|
SETTING(bool, BoolValue, DisableIngameControllerHotSwapping, FFXIII, true);
|
||||||
SETTING(bool, BoolValue, FFXIIIEnableControllerVibration, Options, true);
|
SETTING(bool, BoolValue, EnableControllerVibration, FFXIII, true);
|
||||||
|
|
||||||
|
|
||||||
SETTING(bool, BoolValue, Adapter, Adapter, false);
|
SETTING(bool, BoolValue, Adapter, Adapter, false);
|
||||||
SETTING(u32, LongValue, VendorId, Adapter, 0);
|
SETTING(u32, LongValue, VendorId, Adapter, 0);
|
||||||
|
|
137
d3d9ex/Wrapper.h
137
d3d9ex/Wrapper.h
|
@ -3,7 +3,6 @@
|
||||||
#include "comdef.h"
|
#include "comdef.h"
|
||||||
|
|
||||||
#include "d3d9.h"
|
#include "d3d9.h"
|
||||||
#include "dinput.h"
|
|
||||||
#include "xinput.h"
|
#include "xinput.h"
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
|
@ -31,13 +30,16 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void WrapperLoad(const char* module_name)
|
bool WrapperLoad(const char* module_name, bool use_system_dir = true, bool fail_is_critical = true)
|
||||||
{
|
{
|
||||||
module_path = CreateSystemModulePath(module_name);
|
use_system_dir ? module_path = CreateSystemModulePath(module_name) : module_path = module_name;
|
||||||
m_module = LoadLibraryA(module_path.c_str());
|
m_module = LoadLibraryA(module_path.c_str());
|
||||||
|
|
||||||
if (!m_module)
|
if (m_module) {
|
||||||
{
|
PrintLog("Loaded %s", module_path.c_str());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if(fail_is_critical) {
|
||||||
HRESULT hr = HRESULT_FROM_WIN32(GetLastError());
|
HRESULT hr = HRESULT_FROM_WIN32(GetLastError());
|
||||||
_com_error err(hr);
|
_com_error err(hr);
|
||||||
|
|
||||||
|
@ -47,8 +49,7 @@ protected:
|
||||||
MessageBoxA(NULL, msg.c_str(), "Error", MB_ICONERROR);
|
MessageBoxA(NULL, msg.c_str(), "Error", MB_ICONERROR);
|
||||||
ExitProcess(hr);
|
ExitProcess(hr);
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
PrintLog("Loaded %s", module_path.c_str());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
|
@ -77,9 +78,11 @@ public:
|
||||||
void (WINAPI* D3DPERF_SetOptions)(DWORD dwOptions);
|
void (WINAPI* D3DPERF_SetOptions)(DWORD dwOptions);
|
||||||
void (WINAPI* D3DPERF_SetRegion)(D3DCOLOR col, LPCWSTR wszName);
|
void (WINAPI* D3DPERF_SetRegion)(D3DCOLOR col, LPCWSTR wszName);
|
||||||
|
|
||||||
|
bool IsDXVK() { return m_isdxvk; }
|
||||||
|
|
||||||
D3D9DLL()
|
D3D9DLL()
|
||||||
{
|
{
|
||||||
WrapperLoad("d3d9.dll");
|
WrapperLoad("dxvk.dll", false, false) ? m_isdxvk = true : WrapperLoad("d3d9.dll");
|
||||||
|
|
||||||
StoreAddress(&Direct3DCreate9, "Direct3DCreate9");
|
StoreAddress(&Direct3DCreate9, "Direct3DCreate9");
|
||||||
StoreAddress(&Direct3DCreate9Ex, "Direct3DCreate9Ex");
|
StoreAddress(&Direct3DCreate9Ex, "Direct3DCreate9Ex");
|
||||||
|
@ -93,6 +96,9 @@ public:
|
||||||
StoreAddress(&D3DPERF_SetOptions, "D3DPERF_SetOptions");
|
StoreAddress(&D3DPERF_SetOptions, "D3DPERF_SetOptions");
|
||||||
StoreAddress(&D3DPERF_SetRegion, "D3DPERF_SetRegion");
|
StoreAddress(&D3DPERF_SetRegion, "D3DPERF_SetRegion");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool m_isdxvk = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
|
@ -143,118 +149,3 @@ extern "C"
|
||||||
return D3D9DLL::Get().D3DPERF_SetRegion(col, wszName);
|
return D3D9DLL::Get().D3DPERF_SetRegion(col, wszName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class DINPUT8DLL : public WrapperBase<DINPUT8DLL>
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
HRESULT (WINAPI* DirectInput8Create)(HINSTANCE hinst, DWORD dwVersion, REFIID riidltf, LPVOID *ppvOut, LPUNKNOWN punkOuter);
|
|
||||||
|
|
||||||
DINPUT8DLL()
|
|
||||||
{
|
|
||||||
WrapperLoad("dinput8.dll");
|
|
||||||
|
|
||||||
StoreAddress(&DirectInput8Create, "DirectInput8Create");
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
extern "C"
|
|
||||||
{
|
|
||||||
HRESULT WINAPI _DirectInput8Create(HINSTANCE hinst, DWORD dwVersion, REFIID riidltf, LPVOID *ppvOut, LPUNKNOWN punkOuter)
|
|
||||||
{
|
|
||||||
return DINPUT8DLL::Get().DirectInput8Create(hinst, dwVersion, riidltf, ppvOut, punkOuter);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class XINPUTDLL : public WrapperBase<XINPUTDLL>
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
// XInput 1.3 and older functions
|
|
||||||
DWORD(WINAPI* XInputGetState)(DWORD dwUserIndex, XINPUT_STATE* pState);
|
|
||||||
DWORD(WINAPI* XInputSetState)(DWORD dwUserIndex, XINPUT_VIBRATION* pVibration);
|
|
||||||
DWORD(WINAPI* XInputGetCapabilities)(DWORD dwUserIndex, DWORD dwFlags, XINPUT_CAPABILITIES* pCapabilities);
|
|
||||||
VOID(WINAPI* XInputEnable)(BOOL enable);
|
|
||||||
DWORD(WINAPI* XInputGetDSoundAudioDeviceGuids)(DWORD dwUserIndex, GUID* pDSoundRenderGuid, GUID* pDSoundCaptureGuid);
|
|
||||||
DWORD(WINAPI* XInputGetBatteryInformation)(DWORD dwUserIndex, uint8_t devType, XINPUT_BATTERY_INFORMATION* pBatteryInformation);
|
|
||||||
DWORD(WINAPI* XInputGetKeystroke)(DWORD dwUserIndex, DWORD dwReserved, PXINPUT_KEYSTROKE pKeystroke);
|
|
||||||
|
|
||||||
// XInput 1.3 undocumented functions
|
|
||||||
DWORD(WINAPI* XInputGetStateEx)(DWORD dwUserIndex, XINPUT_STATE *pState); // 100
|
|
||||||
DWORD(WINAPI* XInputWaitForGuideButton)(DWORD dwUserIndex, DWORD dwFlag, LPVOID pVoid); // 101
|
|
||||||
DWORD(WINAPI* XInputCancelGuideButtonWait)(DWORD dwUserIndex); // 102
|
|
||||||
DWORD(WINAPI* XInputPowerOffController)(DWORD dwUserIndex); // 103
|
|
||||||
|
|
||||||
// XInput 1.4 functions
|
|
||||||
DWORD(WINAPI* XInputGetAudioDeviceIds)(DWORD dwUserIndex, LPWSTR pRenderDeviceId, UINT* pRenderCount, LPWSTR pCaptureDeviceId, UINT* pCaptureCount);
|
|
||||||
|
|
||||||
// XInput 1.4 undocumented functionss
|
|
||||||
DWORD(WINAPI* XInputGetBaseBusInformation)(DWORD dwUserIndex, struct XINPUT_BUSINFO* pBusinfo); // 104
|
|
||||||
DWORD(WINAPI* XInputGetCapabilitiesEx)(DWORD unk1, DWORD dwUserIndex, DWORD dwFlags, struct XINPUT_CAPABILITIESEX* pCapabilitiesEx); // 108
|
|
||||||
|
|
||||||
XINPUTDLL()
|
|
||||||
{
|
|
||||||
WrapperLoad("xinput1_3.dll");
|
|
||||||
|
|
||||||
// XInput 1.3 and older functions
|
|
||||||
StoreAddress(&XInputGetState, "XInputGetState");
|
|
||||||
StoreAddress(&XInputSetState, "XInputSetState");
|
|
||||||
StoreAddress(&XInputGetCapabilities, "XInputGetCapabilities");
|
|
||||||
StoreAddress(&XInputEnable, "XInputEnable");
|
|
||||||
StoreAddress(&XInputGetDSoundAudioDeviceGuids, "XInputGetDSoundAudioDeviceGuids");
|
|
||||||
StoreAddress(&XInputGetBatteryInformation, "XInputGetBatteryInformation");
|
|
||||||
StoreAddress(&XInputGetKeystroke, "XInputGetKeystroke");
|
|
||||||
|
|
||||||
// XInput 1.3 undocumented functions
|
|
||||||
StoreAddress(&XInputGetStateEx, (const char*)100);
|
|
||||||
StoreAddress(&XInputWaitForGuideButton, (const char*)101);
|
|
||||||
StoreAddress(&XInputCancelGuideButtonWait, (const char*)102);
|
|
||||||
StoreAddress(&XInputPowerOffController, (const char*)103);
|
|
||||||
|
|
||||||
// XInput 1.4 functions
|
|
||||||
StoreAddress(&XInputGetAudioDeviceIds, "XInputGetAudioDeviceIds");
|
|
||||||
|
|
||||||
// XInput 1.4 undocumented functionss
|
|
||||||
StoreAddress(&XInputGetBaseBusInformation, (const char*)104);
|
|
||||||
StoreAddress(&XInputGetCapabilitiesEx, (const char*)108);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
extern "C"
|
|
||||||
{
|
|
||||||
// XInput 1.3 and older functions
|
|
||||||
DWORD WINAPI _XInputGetState(DWORD dwUserIndex, XINPUT_STATE* pState)
|
|
||||||
{
|
|
||||||
return XINPUTDLL::Get().XInputGetState(dwUserIndex, pState);
|
|
||||||
}
|
|
||||||
|
|
||||||
DWORD WINAPI _XInputSetState(DWORD dwUserIndex, XINPUT_VIBRATION* pVibration)
|
|
||||||
{
|
|
||||||
return XINPUTDLL::Get().XInputSetState(dwUserIndex, pVibration);
|
|
||||||
}
|
|
||||||
|
|
||||||
DWORD WINAPI _XInputGetCapabilities(DWORD dwUserIndex, DWORD dwFlags, XINPUT_CAPABILITIES* pCapabilities)
|
|
||||||
{
|
|
||||||
return XINPUTDLL::Get().XInputGetCapabilities(dwUserIndex, dwFlags, pCapabilities);
|
|
||||||
}
|
|
||||||
|
|
||||||
VOID WINAPI _XInputEnable(BOOL enable)
|
|
||||||
{
|
|
||||||
return XINPUTDLL::Get().XInputEnable(enable);
|
|
||||||
}
|
|
||||||
|
|
||||||
DWORD WINAPI _XInputGetDSoundAudioDeviceGuids(DWORD dwUserIndex, GUID* pDSoundRenderGuid, GUID* pDSoundCaptureGuid)
|
|
||||||
{
|
|
||||||
return XINPUTDLL::Get().XInputGetDSoundAudioDeviceGuids(dwUserIndex, pDSoundRenderGuid, pDSoundCaptureGuid);
|
|
||||||
}
|
|
||||||
|
|
||||||
DWORD WINAPI _XInputGetBatteryInformation(DWORD dwUserIndex, uint8_t devType, XINPUT_BATTERY_INFORMATION* pBatteryInformation)
|
|
||||||
{
|
|
||||||
return XINPUTDLL::Get().XInputGetBatteryInformation(dwUserIndex, devType, pBatteryInformation);
|
|
||||||
}
|
|
||||||
|
|
||||||
DWORD WINAPI _XInputGetKeystroke(DWORD dwUserIndex, DWORD dwReserved, PXINPUT_KEYSTROKE pKeystroke)
|
|
||||||
{
|
|
||||||
return XINPUTDLL::Get().XInputGetKeystroke(dwUserIndex, dwReserved, pKeystroke);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -83,7 +83,7 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<LinkIncremental>false</LinkIncremental>
|
<LinkIncremental>false</LinkIncremental>
|
||||||
<TargetName>dinput8</TargetName>
|
<TargetName>d3d9</TargetName>
|
||||||
<IncludePath>$(SolutionDir)\Common;$(SolutionDir)\MinHook\include;$(DXSDK_DIR)\Include;$(IncludePath)</IncludePath>
|
<IncludePath>$(SolutionDir)\Common;$(SolutionDir)\MinHook\include;$(DXSDK_DIR)\Include;$(IncludePath)</IncludePath>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
@ -137,8 +137,8 @@
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<AdditionalDependencies>XINPUT9_1_0.LIB;d3d9.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
|
||||||
<ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
|
<ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
|
||||||
|
<AdditionalDependencies>d3d9.lib;XINPUT9_1_0.LIB;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
@ -193,7 +193,9 @@
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="IDirect3D9.cpp" />
|
<ClCompile Include="IDirect3D9.cpp" />
|
||||||
<ClCompile Include="IDirect3DDevice9.cpp" />
|
<ClCompile Include="IDirect3DDevice9.cpp" />
|
||||||
<ClCompile Include="IDirect3DVertexBuffer9.cpp" />
|
<ClCompile Include="IDirect3DVertexBuffer9.cpp">
|
||||||
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
|
||||||
|
</ClCompile>
|
||||||
<ClCompile Include="stdafx.cpp">
|
<ClCompile Include="stdafx.cpp">
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
|
||||||
|
@ -206,7 +208,7 @@
|
||||||
<None Include="exports.def" />
|
<None Include="exports.def" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\MinHook\build\VC15\libMinHook.vcxproj">
|
<ProjectReference Include="..\MinHook\build\VC16\libMinHook.vcxproj">
|
||||||
<Project>{f142a341-5ee0-442d-a15f-98ae9b48dbae}</Project>
|
<Project>{f142a341-5ee0-442d-a15f-98ae9b48dbae}</Project>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
|
@ -11,12 +11,4 @@ D3DPERF_SetMarker=_D3DPERF_SetMarker @24
|
||||||
D3DPERF_SetOptions=_D3DPERF_SetOptions @25
|
D3DPERF_SetOptions=_D3DPERF_SetOptions @25
|
||||||
D3DPERF_SetRegion=_D3DPERF_SetRegion @26
|
D3DPERF_SetRegion=_D3DPERF_SetRegion @26
|
||||||
|
|
||||||
DirectInput8Create=_DirectInput8Create
|
|
||||||
|
|
||||||
XInputGetState=_XInputGetState @2
|
|
||||||
XInputSetState=_XInputSetState @3
|
|
||||||
XInputGetCapabilities=_XInputGetCapabilities @4
|
|
||||||
XInputEnable=_XInputEnable @5
|
|
||||||
XInputGetDSoundAudioDeviceGuids=_XInputGetDSoundAudioDeviceGuids @6
|
|
||||||
XInputGetBatteryInformation=_XInputGetBatteryInformation @7
|
|
||||||
XInputGetKeystroke=_XInputGetKeystroke @8
|
|
||||||
|
|
Loading…
Reference in a new issue