当前位置: 首页 > news >正文

通过C++调用Com接口

头文件

#include <iostream>
#include <Windows.h>
#include <comdef.h>
#include <rpcdce.h>
using namespace std;
#pragma comment(lib, "Rpcrt4.lib")

72C24DD5-D70A-438B-8A42-98424B88AFB8

通过Wscript.Shell来创建进程:

void WscriptShell() {CLSID clsidshell;LPDISPATCH lpDisp;HRESULT hres = E_FAIL;hres = CoInitializeEx(0, COINIT_MULTITHREADED);hres = CLSIDFromString(L"{72C24DD5-D70A-438B-8A42-98424B88AFB8}", &clsidshell);if (FAILED(hres)){printf("CLSIDFromProgID or CLSIDFromString failed %x \n", hres);CoUninitialize();return;}hres = CoCreateInstance(clsidshell, NULL, CLSCTX_INPROC_SERVER, IID_IDispatch, (LPVOID *)&lpDisp);if (FAILED(hres)) {printf("CoCreateInstance failed %x \n", hres);CoUninitialize();return;}LPOLESTR pFuncName = (LPOLESTR)L"Run";DISPID Run;hres = lpDisp->GetIDsOfNames(IID_NULL, &pFuncName, 1, LOCALE_SYSTEM_DEFAULT, &Run);if (FAILED(hres)) {printf("lpDisp->GetIDsOfNames (%s) failed %x \n", pFuncName, hres);}VARIANTARG V[1];V[0].vt = VT_BSTR;V[0].bstrVal = _bstr_t(L"calc.exe");DISPPARAMS disParams3 = { V, NULL, 1, 0 };VARIANT pVarResult3;hres = lpDisp->Invoke(Run, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD, &disParams3, &pVarResult3, NULL, NULL);if (FAILED(hres))printf("lpDisp->Invoke failed %x \n", hres);
}

利用helppane.exe接口来执行com调用

IHxInteractiveUserExecute

CLSID: 8CEC58E7-07A1-11D9-B15E-000D56BFE6EE
IID: 8CEC595B-07A1-11D9-B15E-000D56BFE6EE
MIDL_INTERFACE("8CEC595B-07A1-11D9-B15E-000D56BFE6EE")
IHxInteractiveUser : public IUnknown{
public:virtual 	HRESULT STDMETHODCALLTYPE Execute(__RPC__in LPWSTR pcUrl);
};void IHxInteractiveUserExecute() {CLSID clsidshell;IID iid;IHxInteractiveUser* lpDisp;HRESULT hres = E_FAIL;hres = CoInitializeEx(0, COINIT_MULTITHREADED);IIDFromString(L"{8CEC58E7-07A1-11D9-B15E-000D56BFE6EE}", &clsidshell);IIDFromString(L"{8CEC595B-07A1-11D9-B15E-000D56BFE6EE}", &iid);hres = CoCreateInstance(clsidshell, 0i64, 0x17u, iid, (LPVOID *)&lpDisp);if (FAILED(hres)){printf("CoCreateInstance failed %x \n", hres);CoUninitialize();return;}printf("lpDisp %p \n", lpDisp);system("pause");lpDisp->Execute((LPWSTR)TEXT("file:///C:/Windows/system32/notepad.exe"));CoUninitialize();
}

IHxHelpPaneServerExecute

CLSID: 8CEC58AE-07A1-11D9-B15E-000D56BFE6EE
IID: 8CEC592C-07A1-11D9-B15E-000D56BFE6EE
MIDL_INTERFACE("8CEC592C-07A1-11D9-B15E-000D56BFE6EE")
IHxHelpPaneServer : public IUnknown{
public:virtual		HRESULT STDMETHODCALLTYPE DisplayTask(__RPC__in BSTR bstrUrl);virtual 	HRESULT STDMETHODCALLTYPE DisplayContents(__RPC__in BSTR bstrUrl);virtual 	HRESULT STDMETHODCALLTYPE DisplaySearchResults(__RPC__in BSTR bstrSearchQuery);virtual 	HRESULT STDMETHODCALLTYPE Execute(__RPC__in LPWSTR pcUrl);
};void IHxHelpPaneServerExecute() {CLSID clsidshell;IID iid;IHxHelpPaneServer* lpDisp;HRESULT hres = E_FAIL;hres = CoInitializeEx(0, COINIT_MULTITHREADED);IIDFromString(L"{8CEC58AE-07A1-11D9-B15E-000D56BFE6EE}", &clsidshell);IIDFromString(L"{8CEC592C-07A1-11D9-B15E-000D56BFE6EE}", &iid);hres = CoCreateInstance(clsidshell, 0i64, 0x17u, iid, (LPVOID *)&lpDisp);lpDisp->Execute((LPWSTR)TEXT("file:///C:/Windows/system32/notepad.exe"));if (FAILED(hres)){printf("CoCreateInstance failed %x \n", hres);CoUninitialize();return;}CoUninitialize();
}

利用mmc.exe接口来执行com调用

CLSID: 49b2791a-b1ae-4c90-9b8e-e860ba07f889
$com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application"))
$com.Document.ActiveView.ExecuteShellCommand('cmd.exe',"C:\\","/c calc.exe","Minimized")
void MMC20Executeshellcommand()
{CLSID clsidshell;LPDISPATCH lpDisp;HRESULT hres = E_FAIL;hres = CoInitializeEx(0, COINIT_MULTITHREADED);hres = CLSIDFromString(L"{49b2791a-b1ae-4c90-9b8e-e860ba07f889}", &clsidshell);if (FAILED(hres)){printf("CLSIDFromProgID or CLSIDFromString failed %x \n", hres);CoUninitialize();return;}hres = CoCreateInstance(clsidshell, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (LPVOID *)&lpDisp);if (FAILED(hres)){printf("CoCreateInstance failed %x \n", hres);CoUninitialize();return;}LPOLESTR pFuncName = (LPOLESTR)L"Document";DISPID Run;hres = lpDisp->GetIDsOfNames(IID_NULL, &pFuncName, 1, LOCALE_SYSTEM_DEFAULT, &Run);if (FAILED(hres)){printf("GetIDsOfNames failed %x \n", hres);lpDisp->Release();CoUninitialize();return;}DISPPARAMS disParams = { NULL, NULL, 0, 0 };VARIANT pVarResult;hres = lpDisp->Invoke(Run, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYGET, &disParams, &pVarResult, NULL, NULL);if (FAILED(hres))printf("Invoke failed %x \n", hres);if (pVarResult.vt == VT_DISPATCH){LPDISPATCH lpDisp2 = pVarResult.pdispVal;LPOLESTR pFuncName = (LPOLESTR)L"ActiveView";DISPID Run;hres = lpDisp2->GetIDsOfNames(IID_NULL, &pFuncName, 1, LOCALE_SYSTEM_DEFAULT, &Run);if (FAILED(hres)){printf("lpDisp2->GetIDsOfNames failed %x \n", hres);}DISPPARAMS disParams2 = { NULL, NULL, 0, 0 };VARIANT pVarResult2;hres = lpDisp2->Invoke(Run, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYGET, &disParams2, &pVarResult2, NULL, NULL);if (FAILED(hres))printf("lpDisp2->Invoke failed %x \n", hres);if (pVarResult2.vt == VT_DISPATCH){LPDISPATCH lpDisp3 = pVarResult2.pdispVal;LPOLESTR pFuncName = (LPOLESTR)L"Executeshellcommand";DISPID Run;hres = lpDisp3->GetIDsOfNames(IID_NULL, &pFuncName, 1, LOCALE_SYSTEM_DEFAULT, &Run);if (FAILED(hres)){printf("lpDisp3->GetIDsOfNames failed %x \n", hres);}VARIANTARG V[4];V[0].vt = VT_BSTR;V[0].bstrVal = _bstr_t(L"");V[1].vt = VT_BSTR;V[1].bstrVal = _bstr_t(L"");V[2].vt = VT_BSTR;V[2].bstrVal = _bstr_t(L"");V[3].vt = VT_BSTR;V[3].bstrVal = _bstr_t(L"calc.exe");DISPPARAMS disParams3 = { V, NULL, 4, 0 };VARIANT pVarResult3;hres = lpDisp3->Invoke(Run, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD, &disParams3, &pVarResult3, NULL, NULL);if (FAILED(hres))printf("lpDisp3->Invoke failed %x \n", hres);}}lpDisp->Release();CoUninitialize();return;
}
http://www.lryc.cn/news/204951.html

相关文章:

  • 完全背包问题
  • J2EE的N层体系结构
  • Quirks(怪癖)模式是什么?它和 Standards(标准)模式有什么区别?
  • 自然语言处理---Transformer模型
  • 动画系统的前世今生(一)
  • 11 结构型模式- 代理模式
  • Unity--用户界面
  • BUUCTF 乌镇峰会种图 1
  • Runner GoUI自动化测试发布
  • 【Gensim概念】03/3 NLP玩转 word2vec
  • 【网络协议】聊聊网络路由相关算法
  • Python 深度学习入门之CNN
  • 国产开发板上打造开源ThingsBoard工业网关--基于米尔芯驰MYD-JD9X开发板
  • 英语——语法——从句——名词性从句——笔记
  • PROSTATEx-2 上前列腺癌的 3D CNN 分类
  • npm ERR! node-sass@6.0.1 postinstall: `node scripts/build.js`
  • 3D学习论文参考-ACCURATE EYE PUPIL LOCALIZATION USING HETEROGENEOUS CNN MODELS
  • 迁移conda环境后,非root用户执行pip命令和jupyter命令报错/bad interpreter: Permission denied
  • 虚拟机使用linux常用问题(虚拟机操作系统:ubuntu 22.04LTS)
  • 编译原理-词法分析器
  • Kafka与MySQL的组合使用
  • 2018年亚太杯APMCM数学建模大赛A题老年人平衡能力的实时训练模型求解全过程文档及程序
  • 华盛顿特区选举委员会:黑客可能已侵入整个选民名册
  • kali安装nodejs、npm失败
  • 插入排序(学习笔记)
  • wps excel js编程
  • Python 类继承解释
  • Reactor反应器模式
  • alibaba.fastjson的使用(六) -- JavaBean==》Json字符串、JSONObject、JSONArray
  • uniapp 自定义导航栏