hook com IFileOpenDialog 接口的GetResults函数,请帮忙解答下,急
int HookVtbl(void* pObject, unsigned int classIdx, unsigned int methodIdx,unsigned int newMethod);
typedef HRESULT (__stdcall* PGetResults)(IFileOpenDialog*, IShellItemArray**);
static PGetResults GetResults_old = NULL;
#define HOOK(a, b) b##_old = (P##b)HookVtbl(a, 2, 23, (unsigned int)b##_new) //----是不是这块参数不正确啊
HRESULT __stdcall GetResults_new(IFileOpenDialog *pThis,
IShellItemArray **ppenum)
{
OutputDebugStringA("调用了 GetResults_new ");
HRESULT hr = GetResults_old(pThis, ppenum);
return hr;
}
BOOL WINAPI StartHook()
{
PVOID pInterface = NULL;
CoInitialize(NULL);
//CLSCTX_ALL
HRESULT hr = CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_SERVER, IID_IFileOpenDialog, &pInterface);
if(FAILED(hr))
{
OutputDebugStringA("CoCreateInstance 失败");
return FALSE;
}
HOOK(pInterface, GetResults);
return TRUE;
}
int HookVtbl(void* pObject, unsigned int classIdx, unsigned int methodIdx,unsigned int newMethod)
{
int** vtbl = (int**)pObject;
DWORD oldProtect = 0;
int oldMethod = vtbl[classIdx][methodIdx];
VirtualProtect(vtbl[classIdx] + sizeof(int*) * methodIdx, sizeof(int*), PAGE_READWRITE, &oldProtect);
vtbl[classIdx][methodIdx] = newMethod;
VirtualProtect(vtbl[classIdx] + sizeof(int*) * methodIdx, sizeof(int*), oldProtect, &oldProtect);
return oldMethod;
}
相关推荐
CFileDialog定制实战:旧式模板与IFileDialog深度定制指南
CFileDialog是Windows MFC中用于文件选择的核心对话框类,其底层封装了GetOpenFileName API和IFileDialog COM接口两大路径。理解这两层架构是实现标题修改、按钮注入、消息拦截等定制功能的前提。旧式路径依赖OFN_ENABLETEMPLATE与钩子函数协同,需严格遵循资源模板规范与ID避让规则;现代路径则依托IFileDialogCustomize接口,支持Win10/Win11原生UI下的按钮添加与状态同步。技术价值在于兼顾兼容性与现代化体验,广泛应用于ERP、
CISP-CSE注册云安全工程师备考资源包基础教程
随着云计算技术的普及,云安全已成为网络安全领域的核心议题。CISP-CSE(注册云安全工程师)认证由中国信息安全测评中心颁发,旨在培养具备云安全专业知识和实践能力的实战型人才。本教程将结合"CISP-CSE注册云安全工程师备考资源包",系统性地为您梳理云安全的核心知识体系,并提供实战案例分析,助您高效备考。
绘图模拟:在冲动环境中固定时间的示例 附matlab代码.rar
绘图模拟:在冲动环境中固定时间的示例 附matlab代码.rar
基于规则的电动汽车混合能源管理系统,采用MATLAB、Simulink、Simscape Electrical和Stateflow。.zip
1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
完全复现虚拟同步发电机VSG自适应惯量阻尼控制仿真、根轨迹、调节系数对比(Simulink仿真、Matlab代码实现)
内容概要:本文围绕虚拟同步发电机(VSG)的自适应惯量阻尼控制展开深入研究,通过Simulink搭建详细的系统仿真模型,并结合Matlab代码实现控制算法,系统分析了根轨迹特性及不同调节系数对系统动态响应的影响。研究重点在于设计并验证一种能够根据电网频率变化自动调整惯量和阻尼参数的自适应控制策略,有效提升了VSG在面对负载突变或新能源波动时的频率稳定性与抗干扰能力,为高比例可再生能源接入下的电力系统稳定运行提供了关键技术支撑。; 适合人群:具备电力系统分析、自动控制理论及新能源并网技术基础的研究生、科研人员以及从事微电网、分布式能源系统设计与运维的工程技术人员。; 使用场景及目标:①深入理解虚拟同步发电机的工作原理及其在提升电网惯性方面的关键作用;②掌握基于Simulink的电力电子与控制系统建模与仿真方法;③学习并实践惯量和阻尼自适应控制策略的设计流程,通过根轨迹分析手段优化控制器参数,提升系统动态性能。; 阅读建议:建议读者结合所提供的Simulink仿真模型与Matlab代码进行同步操作,重点关注控制器设计逻辑与参数整定过程,通过改变调节系数观察系统响应变化,深化对稳定性判据与控制性能之间关系的理解。


进程/线程/DLL
