detours捕获了SleepEx、DrawText,却捕获不了TextOut

hhhcj hhhcj 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我没辙了,不要怪我问得模糊,这问题实在太奇怪了,代码都一样,我认为没有半点问题。TextOutA和TextOutW都试过了,挂上没反应。
附DLL源代码如下:
//////////////////////////////////////////////////////////////////////////////
//
// Detours Test Program (simple.cpp of simple.dll)
//
// Microsoft Research Detours Package, Version 3.0.
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// This DLL will detour the Windows SleepEx API so that TimedSleep function
// gets called instead. TimedSleepEx records the before and after times, and
// calls the real SleepEx API through the TrueSleepEx function pointer.
//
#include <stdio.h>
#include <windows.h>
#include <atlstr.h>
#include "detours.h"

static LONG dwSlept = 0;
static CString flag="wrong";
static DWORD (WINAPI * TrueSleepEx)(DWORD dwMilliseconds, BOOL bAlertable) = SleepEx;
static BOOL (WINAPI* TrueTextOut)(HDC hdc,int nXStart,int nYStart,LPCWSTR lpString,int cchString)=TextOut;
static int (WINAPI* TrueDrawText)(HDC hdc,LPCTSTR lpchText,int nCount,LPRECT lpRect,UINT uFormat)=DrawText;

DWORD WINAPI TimedSleepEx(DWORD dwMilliseconds, BOOL bAlertable)
{
DWORD dwBeg = GetTickCount();
DWORD ret = TrueSleepEx(dwMilliseconds, bAlertable);
DWORD dwEnd = GetTickCount();

InterlockedExchangeAdd(&dwSlept, dwEnd - dwBeg);
flag="right";

return ret;
}

BOOL WINAPI SaveTextOut(HDC hdc,int nXStart,int nYStart,LPCWSTR lpString,int cchString){
BOOL b= TrueTextOut(hdc,nXStart,nYStart,lpString,cchString);
flag="right+wrong";

return b;
}

int WINAPI NewDrawText(HDC hdc,LPCTSTR lpchText,int nCount,LPRECT lpRect,UINT uFormat){
int b=TrueDrawText(hdc,lpchText,nCount,lpRect,uFormat);
flag="right 3";

return b;
}

BOOL WINAPI DllMain(HINSTANCE hinst, DWORD dwReason, LPVOID reserved)
{
LONG error;
(void)hinst;
(void)reserved;

if (DetourIsHelperProcess()) {
return TRUE;
}

if (dwReason == DLL_PROCESS_ATTACH) {
DetourRestoreAfterWith();

printf("simple" DETOURS_STRINGIFY(DETOURS_BITS) ".dll:"
" Starting.\n");
fflush(stdout);

DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)TrueSleepEx, TimedSleepEx);
DetourAttach(&(PVOID&)TrueTextOut,SaveTextOut);
DetourAttach(&(PVOID&)TrueDrawText,NewDrawText);
error = DetourTransactionCommit();

if (error == NO_ERROR) {
printf("simple" DETOURS_STRINGIFY(DETOURS_BITS) ".dll:"
" Detoured SleepEx().\n");
}
else {
printf("simple" DETOURS_STRINGIFY(DETOURS_BITS) ".dll:"
" Error detouring SleepEx(): %d\n", error);
}
}
else if (dwReason == DLL_PROCESS_DETACH) {
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourDetach(&(PVOID&)TrueSleepEx, TimedSleepEx);
DetourDetach(&(PVOID&)TrueTextOut,SaveTextOut);
DetourDetach(&(PVOID&)TrueDrawText,NewDrawText);
error = DetourTransactionCommit();

printf("simple" DETOURS_STRINGIFY(DETOURS_BITS) ".dll:"
" Removed SleepEx() (result=%d), slept %d ticks.\n" , error, dwSlept);
printf("%S\n",flag);
fflush(stdout);
}
return TRUE;
}

__declspec(dllexport) void ExportFunc(void)
{
}


//
///////////////////////////////////////////////////////////////// End of File.
...全文

相关推荐

【高速互连技术】基于线性均衡的PCIe链路扩展方案:重驱动器在高损耗通道中的信号完整性优化

内容概要:本文介绍了如何利用线性均衡技术扩展PCI Express(PCIe)链路的传输距离,重点探讨了重驱动器(Re-Driver)在补偿PCB和电缆信道损耗中的作用。文章回顾了Re-Driver的发展历程,分析其性能特点,解释其在不同信道环境下的应用条件,并强调线性操作对保持信号完整性及满足PCIe规范的重要性。通过眼图分析、频率响应和Tx预设波形等手段,展示了R

Kernel_RDMA

谐波去噪基于随机奇异值分解和软阈值的大型数据集中的强大高效谐波去噪研究(Matlab代码实现)

内容概要:本文研究了一种基于随机奇异值分解(Randomized SVD)和软阈值(Soft Thresholding)的高效谐波去噪方法,旨在解决大型数据集中谐波干扰的抑制问题。该方法通过引入随机化技术加速传统奇异值分解过程,在保障信号主要特征完整性的同时,显著提升了高维数据处理的计算效率与实时性,适用于电力系统、通信等领域的复杂信号处理场景。文中系统阐述了算法的数学理论基础、实现步骤及在Matlab环境下的具体代码实现,并通过仿真实验验证了其在不同噪声水平下对谐波成分的有效识别与去除能力,展现出优异的鲁棒性与工程实用价值。; 适合人群:具备一定信号处理理论基础和Matlab编程能力,从事电力系统分析、通信工程、自动化控制或相关领域研究的研发人员及硕士、博士研究生。; 使用场景及目标:①应用于大规模实测信号中谐波成分的快速提取与抑制;②用于提升电能质量监测、设备故障诊断、精密仪器测量等应用中的信号信噪比;③为高维时序数据的高效去噪提供可复现、易部署的算法模板与技术参考。; 阅读建议:建议读者结合提供的Matlab代码逐模块理解算法实现细节,重点掌握随机SVD与软阈值去噪的协同机制,并尝试在实际采集数据上进行参数调优与性能测试,以深入理解其适用边界与优化潜力。

三伯

binutils-2.19.92.tar.bz2

binutils-2.19.92.tar.bz2

一and一>二

Agent Skills 实战速查包(Claude Code 技能体系/格式全表/加载位置/触发传参/上下文成本/打包分发/安全治理/排错)

Agent Skills 是 2025 年底以来 AI 编码工具领域事实上的新开放标准(Anthropic 开源、agentskills.io 承载规范),Claude Code、claude.ai、Claude API 及各兼容 agent 都在用;但规范页、Claude Code 文档、示例仓库三处全英文且互相引用,行为细节(比如哪些 frontmatter 字段出了 Claude Code 上传就会失败)散落各段。本包按「看懂格式 → 放对位置 → 控制触发 → 算清 token → 打包分发 → 审安全 → 排错」一条线整理:技能三层渐进加载与 CLAUDE.md/命令/MCP 的边界、7 种加载位置与同名优先级、SKILL.md 开放标准 6 字段 + Claude Code 扩展 17 字段逐条约束与跨产品红线、$ARGUMENTS/$1/命名参数两种传参、描述列表 1% 压缩预算与 skillOverrides 四状态、context:fork 子代理与动态注入的完整行为矩阵(位置规则/失败语义/权限检查)、官方写法最佳实践与对照基线的 eval 闭环、Git/插件市场/企业托管三条分发路与 marketplace.json 结构、自放行与第三方技能进场审查、YAML 解析失败静默降级与非零退出中止整个技能调用等 16 类症状反查。附 SKILL.template、marketplace.template、settings.template 三份可直接改占位的骨架与一个零依赖校验脚本(合法 exit 0、错误 exit 1 逐条打印)。本包不含任何程序本体,只整理规则与配置骨架;示例一律 YOUR_*/your-* 占位。

xiaoqiangclub

mongodb-org-mongos_8.0.13_arm64.deb

mongodb-org-mongos_8.0.13_arm64

一and一>二
评论 2
收藏 已收藏
分享
返回顶部
hhhcj
进程/线程/DLL 15,466 成员 49,169 内容