当前位置: 首页 > 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;
}

相关文章:

通过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 Wscri…...

完全背包问题

目录 1. 朴素解法 2. 优化 原题链接&#xff1a; 3. 完全背包问题 - AcWing题库 题目描述&#xff1a; 有 N 种物品和一个容量是 V 的背包&#xff0c;每种物品都有无限件可用。 第 i 种物品的体积是 vi&#xff0c;价值是 wi。 求解将哪些物品装入背包&#xff0c;可使这些…...

J2EE的N层体系结构

J2EE平台采用了多层分布式应用程序模型&#xff0c;实现不同逻辑功能的应用程序被封装到不同的构件中&#xff0c;处于不同层次的构件可被分别部署到不同的机器中。 RMI/IIOP&#xff1a;RMI&#xff08;Remote Method Invocation&#xff0c;远程方法调用&#xff09;是Java的…...

Quirks(怪癖)模式是什么?它和 Standards(标准)模式有什么区别?

目录 前言: 用法: 代码: Quirks模式示例: Standards模式示例: 理解: Quirks模式&#xff1a; Standards模式&#xff1a; 高质量讨论: 前言: "Quirks模式"和"Standards模式"是与HTML文档渲染模式相关的两种模式。它们影响着浏览器如何解释和渲染HT…...

自然语言处理---Transformer模型

Transformer概述 相比LSTM和GRU模型&#xff0c;Transformer模型有两个显著的优势&#xff1a; Transformer能够利用分布式GPU进行并行训练&#xff0c;提升模型训练效率。 在分析预测更长的文本时&#xff0c;捕捉间隔较长的语义关联效果更好。 Transformer模型的作用 基于seq…...

动画系统的前世今生(一)

掐指一算&#xff0c;五年没更新过我的CSDN账号啦&#xff0c;方向也从人工智能变成了计算机图形学&#xff0c;当然也依旧会关注AI的发展&#xff0c;之前在知乎上写了一些文章[传送门]&#xff0c;后续也会逐渐同步到CSDN上&#xff5e; 这个系列将包含五篇文章&#xff0c;内…...

11 结构型模式- 代理模式

结构性模式一共包括七种&#xff1a; 代理模式、桥接模式、装饰者模式、适配器模式、门面(外观)模式、组合模式、和享元模式。 1 代理模式介绍 软件开发中的代理&#xff1a; 代理模式中引入了一个新的代理对象,代理对象在客户端对象和目标对象之间起到了中介的作用,它去掉客…...

Unity--用户界面

目录 “使用工具栏”&#xff1a; “层次结构”窗口&#xff1a; 层次结构窗口 制作子GameObject “游戏”视图&#xff1a; “场景视图“&#xff1a; ”项目窗口“&#xff1a; 项目窗口工具栏&#xff1a; "Inspector" 窗口&#xff1a; Inspector 游戏…...

BUUCTF 乌镇峰会种图 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 乌镇互联网大会召开了&#xff0c;各国巨头汇聚一堂&#xff0c;他们的照片里隐藏着什么信息呢&#xff1f;&#xff08;答案格式&#xff1a;flag&#xff5b;答案&#xff5d;&#xff0c;只需提交答案&#xff0…...

Runner GoUI自动化测试发布

构建自动化测试体系是当下每个项目团队愿意去做的&#xff0c;自动化测试减少重复操作节省人力成本。 RunnerGo UI自动化平台 RunnerGo提供从API管理到API性能再到可视化的API自动化、UI自动化测试功能模块&#xff0c;覆盖了整个产品测试周期。 RunnerGo UI自动化基于Selen…...

【Gensim概念】03/3 NLP玩转 word2vec

第三部分 对象函数 八 word2vec对象函数 该对象本质上包含单词和嵌入之间的映射。训练后&#xff0c;可以直接使用它以各种方式查询这些嵌入。有关示例&#xff0c;请参阅模块级别文档字符串。 类型 KeyedVectors 1&#xff09; add_lifecycle_event(event_name, log_level2…...

【网络协议】聊聊网络路由相关算法

如何配置路由 路由器是一台网络设备&#xff0c;多张网卡&#xff0c;当一个入口的网络包到达路由器时&#xff0c;会根据本地的信息库决定如何正确的转发流量&#xff0c;通常称为路由表 路由表主要包含如下 核心思想是根据目的 IP 地址来配置路由 目的网络&#xff1a;要去…...

Python 深度学习入门之CNN

CNN 前言一、CNN简介1、简介2、结构 二、CNN简介1、输出层2、卷积层3、池化层4、全连接层5、输出层 前言 1024快乐&#xff01;1024快乐&#xff01;今天开新坑&#xff0c;学点深度学习相关的&#xff0c;说下比较火的CNN。 一、CNN简介 1、简介 CNN的全称是Convolutiona…...

国产开发板上打造开源ThingsBoard工业网关--基于米尔芯驰MYD-JD9X开发板

本篇测评由面包板论坛的优秀测评者“JerryZhen”提供。 本文将介绍基于米尔电子MYD-JD9X开发板打造成开源的Thingsboard网关。 Thingsboard网关是一个开源的软件网关&#xff0c;采用python作为开发语言&#xff0c;可以部署在任何支持 python 运行环境的主机上&#xff0c;灵…...

英语——语法——从句——名词性从句——笔记

文章目录 名词性从句一、定义二、分类&#xff08;一&#xff09;宾语从句&#xff08;二&#xff09;主语从句&#xff08;三&#xff09;C同位语从句&#xff08;四&#xff09;D表语从句 名词性从句 一、句子成分 简而言之&#xff0c;构成一个句子的成分&#xff08;或要素…...

PROSTATEx-2 上前列腺癌的 3D CNN 分类

内容 本文介绍了在多参数 MRI 序列上使用 3D CNN 对前列腺癌进行显着性或不显着性分类。内容如下: 数据集描述Dicom 到 Nifti 文件格式的转换不同 MRI 序列的联合配准...

npm ERR! node-sass@6.0.1 postinstall: `node scripts/build.js`

1.遇到的问题 vue npm install提示以下错误 2.首次尝试方法 尝试用下面的方式重新安装弄得-saas&#xff0c;结果不起作用 。 npm config set sass_binary_sitehttps://npm.taobao.org/mirrors/node-sass npm install node-sass 这时考虑降级node版本&#xff0c;node.js从…...

3D学习论文参考-ACCURATE EYE PUPIL LOCALIZATION USING HETEROGENEOUS CNN MODELS

以下是该文档的关键内容&#xff1a; 该论文提出了一种使用异构卷积神经网络&#xff08;CNN&#xff09;模型的精确眼睛瞳孔定位算法。这种算法可以抵抗光照、图像分辨率和眼镜佩戴等干扰条件&#xff0c;同时具有高准确性。该算法由两部分组成&#xff1a;一是找到近似眼睛区…...

迁移conda环境后,非root用户执行pip命令和jupyter命令报错/bad interpreter: Permission denied

移动conda环境&#xff0c;在移动的环境执行pip和jupyter 报错-bash: /data/home/用户名/anaconda3/envs/llm/bin/pip: /root/anaconda3/envs/llm/bin/python: bad interpreter: Permission denied 报错信息 一、原因 原因是当前的这个data/home/用户名/anaconda3/envs/环境名…...

虚拟机使用linux常用问题(虚拟机操作系统:ubuntu 22.04LTS)

1.虚拟机连接外网 ubuntu解决网络连接的解决方案 CentOS7联网问题解决 明明连接好了但是没有网络的情况 2.虚拟机磁盘扩容 相关博客 利用gparted工具时,直接将unallocated空间的前一个位置的磁盘resize,将unallocated的空间全部覆盖 3.虚拟机与本机共享文件 安装vmtools 设…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...