利用COM接口实现进程断链执行.md
实现原理
IHxHelpPaneServer是Windows的帮助和支持服务的一部分,它提供了一系列方法用于显示帮助内容、执行搜索等功能。关键点在于其中的Execute方法,这个方法原本设计用来启动与帮助文档相关的程序或脚本,但它也可以被利用来执行任意命令或程序
代码思路
1.定义COM接口
定义一个COM接口IHxHelpPaneServer,此接口包括一个Execute方法用于执行程序。DEFINE_GUID宏用于定义接口的ID,这是后续创建COM对象时需要的
struct IHxHelpPaneServer : public IUnknown {
virtual HRESULT __stdcall DisplayTask(PWCHAR) = 0;
virtual HRESULT __stdcall DisplayContents(PWCHAR) = 0;
virtual HRESULT __stdcall DisplaySearchResults(PWCHAR) = 0;
virtual HRESULT __stdcall Execute(const PWCHAR) = 0;
};
DEFINE_GUID(IID_IHxHelpPaneServer, 0x8cec592c, 0x07a1, 0x11d9, 0xB1, 0x5E, 0x00, 0x0D, 0x56, 0xBF, 0xE6, 0xEE);2.创建IHxHelpPaneServer接口实例
首先使用CoInitializeEx函数初始化COM库
调用IIDFromString函数将字符串格式的GUID转换为GUID结构体,这个GUID结构用于描述COM对象的类型,也就是类ID
获取到类ID和接口ID后,使用CoCreateInstance函数创建IHxHelpPaneServer接口的实例
3.执行程序
通过构造file://开头的路径字符串,调用IHxHelpPaneServer接口的Execute方法执行指定的文件
完整代码
最后更新于