KNSoft.SlimDetours 1.0.0-beta

This is a prerelease version of KNSoft.SlimDetours.
There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package KNSoft.SlimDetours --version 1.0.0-beta                
NuGet\Install-Package KNSoft.SlimDetours -Version 1.0.0-beta                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="KNSoft.SlimDetours" Version="1.0.0-beta" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add KNSoft.SlimDetours --version 1.0.0-beta                
#r "nuget: KNSoft.SlimDetours, 1.0.0-beta"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install KNSoft.SlimDetours as a Cake Addin
#addin nuget:?package=KNSoft.SlimDetours&version=1.0.0-beta&prerelease

// Install KNSoft.SlimDetours as a Cake Tool
#tool nuget:?package=KNSoft.SlimDetours&version=1.0.0-beta&prerelease                
English (en-US) įŽ€äŊ“中文 (zh-CN)

<br>

KNSoft.SlimDetours

NuGet Downloads GitHub Actions Workflow Status PR Welcome GitHub License

SlimDetours is an improved Windows API hooking library base on Microsoft Detours.

Feature

Compared to the original Detours, the advantages are:

Usage

NuGet Downloads

TL;DR

KNSoft.SlimDetours package contains both of SlimDetours and the original Microsoft Detours.

Include header SlimDetours.h for KNSoft.SlimDetours, or header detours.h for the original Microsoft Detours, then link compiled library KNSoft.SlimDetours.lib.

NuGet package KNSoft.SlimDetours is out-of-the-box, install to project and the compiled library will be linked automatically.

#include <KNSoft/SlimDetours/SlimDetours.h> // KNSoft.SlimDetours
#include <KNSoft/SlimDetours/detours.h>     // Microsoft Detours

If your project configuration name is neither "Release" nor "Debug", MSBuild sheet in NuGet package cannot link compiled library automatically, link manually is required, for example:

#pragma comment(lib, "Debug/KNSoft.SlimDetours.lib")

Usage is similiar to the original Microsoft Detours, but:

  • Function name begin with "SlimDetours", most of return values are NTSTATUS, use NT_SUCCESS macro to check them.
  • Threads are updated automatically, DetourUpdateThread is removed.
Status = SlimDetoursTransactionBegin();
if (!NT_SUCCESS(Status))
{
    return Status;
}
Status = SlimDetoursAttach((PVOID*)&g_pfnXxx, Hooked_Xxx);
if (!NT_SUCCESS(Status))
{
    SlimDetoursTransactionAbort();
    return Status;
}
return SlimDetoursTransactionCommit();

Delay Hook

"Delay Hook" will set hooks automatically when target DLL loaded.

For example, call SlimDetoursDelayAttach to hook a.dll!FuncXxx automatically when a.dll loaded:

SlimDetoursDelayAttach((PVOID*)&g_pfnFuncXxx,
                       Hooked_FuncXxx,
                       L"a.dll",
                       L"FuncXxx",
                       NULL,
                       NULL);

Demo: DelayHook.c

Compatibility

Project building: only support for the latest MSVC generation tools and SDKs is considered, but it is generally more widely backward compatible.

Artifact integration: it is widely backward compatible with MSVC generation tools and different compilation configurations (e.g., /MD, /MT).

Runtime environment: NT6 or above OS, x86/x64/ARM64 platform.

[!CAUTION] In beta stage, should be used with caution.

License

GitHub License

KNSoft.SlimDetours is licensed under the MPL-2.0 license.

Source is based on Microsoft Detours which is licensed under the MIT license.

Also uses KNSoft.NDK to access low-level Windows NT APIs and its Unit Test Framework.

There are no supported framework assets in this package.

Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.1.0-beta 54 10/31/2024
1.0.2-beta 60 10/11/2024
1.0.1-beta 80 8/13/2024
1.0.0-beta 65 7/25/2024