SwapChain hooking functionality for DirectX11 applications.
Download the latest release, include NexusHook.h and link the .lib against your project.
#include "NexusHook.h"
#pragma comment(lib, "NexusHook.lib")
typedef HRESULT(__stdcall *D3D11PresentHook) (IDXGISwapChain* pThis, UINT SyncInterval, UINT Flags);
NexusHook hkMngr;
// Present hook
HRESULT __stdcall SwapChainPresentHook(IDXGISwapChain* pThis, UINT SyncInterval, UINT Flags) {
std::cout << "Hook called!" << std::endl;
return ((D3D11PresentHook)hkMngr.oFunctions[SC_PRESENT])(pThis, SyncInterval, Flags);
}
void main() {
// Init hook manager
hkMngr.Init();
// Hook present
hkMngr.HookSwapChain((DWORD_PTR)SwapChainPresentHook, SC_PRESENT);
}bool Init();Initializes the hook manager. Returns true on success, false otherwise.
| Argument | Description | Default |
|---|---|---|
| None | None | None |
bool HookSwapChain(DWORD_PTR newFunc, int index);Hooks the specified function of the current SwapChain. Returns true on success, false otherwise.
| Argument | Description | Default |
|---|---|---|
| newFunc | Pointer to your replacement function. | None |
| url | Vtable index of the function you want to hook. | None |
const static int iHookNumber = SC_GETLASTPRESENTCOUNT + 1;Number of functions you can hook. Specified in Dx11Indexes.h
VMTHook hkHooks[iHookNumber];All hooks stored in their respecting index number.
DWORD oFunctions[iHookNumber] = { NULL };;All original functions from the original SwapChain.
SwapChainManager hMngr;SwapChainManager, you shouldn't need to access this.
