Skip to content

Latest commit

 

History

History
103 lines (75 loc) · 6.27 KB

File metadata and controls

103 lines (75 loc) · 6.27 KB
English (en-US) 简体中文 (zh-CN)

 

KNSoft.SlimDetours

NuGet Downloads GitHub Actions Workflow Status PR Welcome GitHub License

SlimDetours是一个基于Microsoft Detours改进而来的Windows API挂钩库。

相比于原版Detours,有以下优势:

用法

NuGet Downloads

提要

KNSoft.SlimDetours NuGet包是开箱即用的,同时含有SlimDetours与最新的Microsoft Detours,包含对应的头文件(SlimDetours.h or detours.h)和编译出的静态库以使用它们。

/* KNSoft.SlimDetours */
#include <KNSoft/SlimDetours/SlimDetours.h>
#pragma comment(lib, "KNSoft.SlimDetours.lib")

/* Microsoft Detours */
#include <KNSoft/SlimDetours/detours.h>
#pragma comment(lib, "Microsoft.Detours.lib")

如果你项目的配置名称既不包含“Release”也不包含“Debug”,NuGet包中的MSBuild表单无法自动确定库路径的最后一层目录名("Release"或"Debug"),需要手动加上它,例如:

#if DBG
#pragma comment(lib, "Debug/KNSoft.SlimDetours.lib")
#else
#pragma comment(lib, "Release/KNSoft.SlimDetours.lib")
#endif

用法已进行了简化,例如挂钩仅需一行:

SlimDetoursInlineHook(TRUE, (PVOID*)&g_pfnXxx, Hooked_Xxx);  // 挂钩
...
SlimDetoursInlineHook(FALSE, (PVOID*)&g_pfnXxx, Hooked_Xxx); // 脱钩

更多简化的API参考InlineHook.c

详细说明

原版Microsoft Detours风格的函数也有保留,但有少许不同:

hr = SlimDetoursTransactionBegin();
if (FAILED(hr))
{
    return hr;
}
hr = SlimDetoursAttach((PVOID*)&g_pfnXxx, Hooked_Xxx);
if (FAILED(hr))
{
    SlimDetoursTransactionAbort();
    return hr;
}
return SlimDetoursTransactionCommit();

兼容性

项目构建:主要考虑对最新MSVC生成工具和SDK的支持。本项目代码能向下兼容MSVC生成工具与GCC,但具体还要看其依赖的NDK,参考SlimDetours.NDK.inl。支持随ReactOS一同构建。SlimDetours默认最低目标平台为NT6,编译时指定_WIN32_WINNT宏可以构建支持更低NT版本的二进制。

制品集成:广泛地兼容MSVC生成工具(已知支持VS2015),以及不同编译配置(如/MD/MT)。

运行环境:NT5及以上操作系统,x86/x64/ARM64/ARM64EC目标平台。

Caution

处于beta阶段,应慎重使用。有些API可能频繁调整,请留意发行说明。

协议

GitHub License

KNSoft.SlimDetours根据MIT协议进行许可。

源码基于Microsoft Detours,其根据MIT协议进行许可。

同时使用了KNSoft.NDK以访问底层Windows NT API及其中的单元测试框架。