mmc20创建进程c/c++实现

news2025/1/10 22:03:59

背景

最近写了一份遍历clsid所有接口的代码(链接点这里),在查找有意思的包含exe方法的时候发现了mmc20,且接口是6efc2da2-b38c-457e-9abb-ed2d189b8c38。

但常见的使用mmc20都是用的vbs和powershell来创建的进程,这里提供c/c++的实现。

#include<iostream>
#include<Windows.h>
#include<comdef.h>
#include<rpcdce.h>

#pragma comment(lib, "Rpcrt4.lib")
using namespace std;

void MMC20ExeDemo2()
{
	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 ;
}

int main()
{
	MMC20ExeDemo2();
	system("pause");
	return TRUE;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1024037.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hadoop的HDFS高可用方案

一、Hadoop高可用简介 Hadoop 高可用 (High Availability) 分为 HDFS 高可用和 YARN 高可用&#xff0c;两者的实现基本类似&#xff0c;但 HDFSNameNode 对数据存储及其一致性的要求比 YARN ResourceManger 高得多&#xff0c;所以它的实现也更加复杂 1、HDFS系统高可用简介…

链家网房源价格信息的爬虫分析工具

导语 链家网是中国最大的房地产交易平台之一&#xff0c;提供了全国各地的房源信息&#xff0c;包括价格、面积、户型、楼层、朝向、小区、地理位置等。这些信息对于房地产市场的分析和预测有着重要的价值&#xff0c;但是链家网并没有提供方便的数据接口&#xff0c;因此需要…

用flask框架flask-sock和websocket创建一个自己的聊天界面

WebSocket 协议在10年前就已经标准化了(在2011年&#xff0c;你能相信吗?)所以我相信你不需要介绍。但是如果你不熟悉它&#xff0c;WebSocket 是 HTTP 协议的一个扩展&#xff0c;它在客户端和服务器之间提供了一个永久的、双向的通信通道&#xff0c;在这里双方可以实时地发…

91 # 实现 express 的优化处理

上一节实现 express 的请求处理&#xff0c;这一节来进行实现 express 的优化处理 让 layer 提供 match 方法去匹配 pathname&#xff0c;方便拓展让 layer 提供 handle_request 方法&#xff0c;方便拓展利用第三方库 methods 批量生成方法性能优化问题 进行路由懒加载&#…

亚马逊 CodeWhisperer 初体验

1、CodeWhisperer 介绍 CodeWhisperer 是亚马逊出品的一款基于机器学习的通用代码生成器&#xff0c;可实时提供代码建议。类似 Cursor 和 Github Copilot 编码工具。 官网&#xff1a;AI 代码生成器 - Amazon CodeWhisperer - AWS 在编写代码时&#xff0c;它会自动根据您现…

Flink sql 1.17笔记

环境准备 # 启动hadoop集群 # 启动Flink yarn session (base) [link999hadoop102 flink-1.17.0]$ bin/yarn-session.sh -d# 启动finksql客户端 (base) [link999hadoop102 flink-1.17.0]$ bin/sql-client.sh -s yarn-session# 如果有初始化文件 bin/sql-client.sh embedded -s …

数据结构 - 二叉树

文章目录 目录 文章目录 前言 一 . 树型结构 1.1 树的概念(了解) 1.2 数的常用术语 (掌握) 1.3 树的应用(了解) 1.4 树相较于数组和链表的优势(了解) 二 . 二叉树(重点) 2.1 二叉树的概念 2.2 两种特殊的二叉树 2.3 二叉树的性质 2.4 二叉树的基本操作 2.4.1 二叉树的前序遍历 …

高云FPGA系列教程(7):ARM GPIO外部中断

文章目录 [toc]GPIO中断简介FPGA配置常用函数MCU程序设计工程下载 本文是高云FPGA系列教程的第7篇文章。 本篇文章介绍片上ARM Cortex-M3硬核处理器GPIO外部的使用&#xff0c;演示按键中断方式来控制LED亮灭&#xff0c;基于TangNano 4K开发板。 参考文档&#xff1a;Gowin_E…

go学习之函数知识

函数 文章目录 函数1.函数入门(1)为什么需要函数&#xff1f;(2)什么是函数&#xff1a;2.包3.函数的调用机制通俗理解调用过程&#xff1a;return语句递归调用 4.函数注意事项和细节讨论5.init函数6.匿名函数7.闭包8.defer9.函数参数的传递方式10.字符串中常用的函数11.时间和…

JVM中的java同步互斥工具应用演示及设计分析

1.火车站售票系统仿真 某火车站目前正在出售火车票&#xff0c;共有50张票&#xff0c;而它有3个售票窗口同时售票&#xff0c;下面设计了一个程序模拟该火车站售票&#xff0c;通过实现Runnable接口实现&#xff08;模拟网络延迟&#xff09;。 伪代码&#xff1a; Ticket类…

Java代码质量评估工具

概述 Java代码的质量评估主要包括代码的可维护性、健壮性、以及在运行时能达到既定的性能目标&#xff0c;可维护性主要包括代码的可读性、在关键的代码上提供详细注释、在设计类、方法以及代码逻辑时符合设定的编码规范&#xff0c;健壮性主要包括编写代码时应使用常用的设计…

【JAVA-Day26】数组解析:什么是数组?如何定义?

数组解析&#xff1a;什么是数组&#xff1f;如何定义&#xff1f; 数组解析&#xff1a;什么是数组&#xff1f;如何定义&#xff1f;摘要一、什么是数组数组的特性&#xff1a;不同类型的数组&#xff1a;数组的应用场景&#xff1a;数组的限制和挑战&#xff1a; 二、如何定…

【论文阅读 07】Anomaly region detection and localization in metal surface inspection

比较老的一篇论文&#xff0c;金属表面检测中的异常区域检测与定位 总结&#xff1a;提出了一个找模板图的方法&#xff0c;使用SIFT做特征提取&#xff0c;姿态估计看差异有哪些&#xff0c;Hough聚类做描述符筛选&#xff0c;仿射变换可视化匹配图之间的关系&#xf…

【算法基础】数学知识

质数 质数的判定 866. 试除法判定质数 - AcWing题库 时间复杂度是logN #include<bits/stdc.h> using namespace std; int n; bool isprime(int x) {if(x<2) return false;for(int i2;i<x/i;i){if(x%i0) return false;}return true; } signed main() {cin>&g…

Git学习笔记1

任务要求&#xff1a; 1、使用git提交代码到仓库&#xff1b; 2、实现自动代码发布系统&#xff1b; 1、了解DevOps的发展历程和思想&#xff1b; 2、学会git版本控制&#xff1b; 3、会使用github公有仓库和gitlab私有仓库&#xff1b; 4、了解CI/CD&#xff1b; 5、使用…

svn(乌龟svn)和SVN-VS2022插件(visualsvn) 下载

下载地址: https://www.visualsvn.com/visualsvn/download/

Go的error接口

从本书的开始&#xff0c;我们就已经创建和使用过神秘的预定义error类型&#xff0c;而且没有解释它究竟是什么。实际上它就是interface类型&#xff0c;这个类型有一个返回错误信息的单一方法&#xff1a; type error interface { Error() string } 创建一个error最简单的方…

cutree 算法

传播 ​ 由于块与块之间具有参考关系&#xff0c;提升被参考块的质量&#xff0c;可以改善后续参考块的质量 ​ Pn1帧中CU0,1完全参考Pn的CU1,1。且Pn1帧中CU0,1块帧内预测和帧间预测的代价分别为 c x , y n 1 ( 0 , 0 ) c_{x,y}^{n1}(0,0) cx,yn1​(0,0)和 c x , y n 1 ( d…

vue获取本地缓存并转为json格式

场景 要求获取当前登录用户id&#xff0c;传入后台去筛选属于该用户的数据&#xff1b; 当前登录用户信息一般会在本地存储中&#xff0c;有些则是在session中&#xff0c;此处只对本地存储做讨论&#xff1b; 本地缓存的用法 1 存储数据 localStorage.setltem(userId,"…

【版本控制】Github和Gitlab同时使用ssh

前言 最近在使用 WSL 时会同时用到 GitHub和 Gitlab &#xff0c;因此与传统配置 ssh 方式有些不一样的地方&#xff0c;这里特别记录一下 本地生成公私密钥 首先确保把之前的 ssh 信息清除&#xff0c;也可以将整个 ~/.ssh 目录删除 rm -rf ~/.ssh/*我们分别生成 Github 和…