COM编程学习笔记

COM&DCOM编程指南 COM&DCOM编程指南,看着不错,介绍给大家吧。 立即下载

平时分析病毒时,难免遇到一些用COM的,分析这种时比较头疼。找到一篇老外写的文章,通俗易懂,跟着练习了一把,消除对COM的陌生感!

文章地址 :

而且这个老外还发布过一些IE扩展的文章,感觉也不错:
https://www.codeproject.com/Articles/Michael-Dunn#Article

下面是根据第一篇文章写的COM Client的代码。

学习目的:COM客户端,多接口和单接口的查询使用。

实现功能:使用单接口查询当前电脑壁纸图片路径,然后通过多接口来实现生成一个lnk快捷方式

#include "stdafx.h"
#include <windows.h>
#include "Wininet.h "
#include "winnls.h"
#include <shlobj.h>
#include "shobjidl.h"
#include <Objbase.h>
#include "objidl.h"
#include "shlguid.h"
#include <iostream>

using namespace std;

WCHAR* GetWallpaperPath()
{
	WCHAR wszWallpaper[MAX_PATH];
	HRESULT hr;
	IActiveDesktop* pIAD;


	CoInitialize(NULL);

	hr = CoCreateInstance(CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER, IID_IActiveDesktop, (void**)&pIAD);
	if (SUCCEEDED(hr))
	{
		// Call methods using pISL here.
		hr = pIAD->GetWallpaper(wszWallpaper, MAX_PATH, 0);
		if (SUCCEEDED(hr))
		{
			wcout << L"Wallpaper path is: \n   " << wszWallpaper << endl << endl;
		}
		else
		{
			cout << _T("GetWallpaper() failed.") << endl << endl;
		}

		// Tell the COM object that we're done with it.
		pIAD->Release();
	}
	else
	{
		// Couldn't create the COM Object. hr holds the error code.
		printf("Couldn't create the COM Object. err code: %d", &hr);
	}
	CoUninitialize();

	return wszWallpaper;

}

void demo2()
{
	HRESULT hr;
	IShellLink* pISL;
	IPersistFile* pIPF;


	CoInitialize(NULL);

	hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void**)&pISL);
	if (SUCCEEDED(hr))
	{
		// Call methods using pISL here.
		hr = pISL->SetPath(GetWallpaperPath());
		if (SUCCEEDED(hr))
		{
			// Get the second interface from the COM Object.
			hr = pISL->QueryInterface(IID_IPersistFile, (void**)&pIPF);
			if (SUCCEEDED(hr))
			{
				hr = pIPF->Save(L"d:\\wallpaper.lnk", FALSE);
				pIPF->Release();
			}
		}

		// Tell the COM object that we're done with it.
		pISL->Release();
	}
	else
	{
		// Couldn't create the COM Object. hr holds the error code.
		printf("Couldn't create the COM Object. err code: %d", &hr);
	}
	CoUninitialize();
}


int _tmain(int argc, _TCHAR* argv[])
{
	demo2();

	return 0;
}

攻击时间控制的动态逆三维制导律(源代码) %参考文献:《攻击时间控制的动态逆三维制导律》,哈尔滨工程大学学报,2010 %编程难点:视线坐标系与参考坐标系间的转换关系 一、采用本文方法结果 二、偏航通道采用增广比例导引律 阅读详情

相关推荐

速腾RS-LiDAR-16激光雷达ROS配置全攻略:从硬件连接到Rviz点云可视化

本文详细介绍了速腾RS-LiDAR-16激光雷达在ROS环境中的配置与使用全攻略,涵盖硬件连接、网络配置、ROS驱动安装及Rviz点云可视化等关键步骤。通过实战案例和技术解析,帮助开发者快速实现激光雷达数据采集与处理,提升机器人感知系统的部署效率。

ooo22的博客 248

COM编程总结

一、Com概念 所谓COM(Componet Object Model,组件对象模型),是一种说明如何建立可动态互变组件的规范,此规范提供了为保证能够互操作,客户和组件应遵循的一些二进制和网络标准。通过这种标准将可以在任意两个组件之间进行通信而不用考虑其所处的操作环境是否相同、使用的开发语言是否一致以及是否运行于同一台计算机。 在COM规范下将能够以高度灵活的编程手段来开发、维护应用程序。可以将一个单独的复杂程序划分为多个独立的模块进行开发,这里的每一个独立模块都是一个自给自足的组件,可以采取不同的开发

翻肚鱼儿的博客 2919

使用 Ansys Q3D 进行电容提取

精确的电容提取在高速和 RF 设计中至关重要。在本博客中,我们演示了如何使用Ansys Q3D Extractor来计算电容值,从基本的平行板电容器开始,然后转到MEMS芯片的切口,以检查焊盘和RF线对整体电容的影响。在下面的比较中,我们使用 Q3D 从 MEMS 芯片切口中提取两种配置的电容矩阵:一种仅带有焊盘,另一种带有连接到 RF 线路的焊盘。这种比较表明,焊盘是总电容的主要贡献者,而 RF 线路则略有增加。按照上述工作流程,提取焊盘的电容,得到的电容矩阵如下所示。,选择一个已识别的网络,然后单击。

jkh920184196的博客 1812

学懂C++(五十八):深入详解 C++ COM编程开发技术

学懂C++:深入详解 C++ COM编程开发技术

编程技术探索者,分享C/C++、C#、Java、数据库等开发经验,聚焦实战技巧与AI兴趣,助力编程爱好者成长。 4022

Cadence 中Cutout、Design_Outline 和 Outline的区别

摘要: 在PCB设计中,Cutout、Design_Outline和Outline都与电路板外形相关但用途不同。Cutout用于定义切割区域(如孔、槽),直接影响制造;Design_Outline仅标记设计边界,作为参考不影响切割;Outline则是实际切割轮廓层,用于制造。三者区别在于:Cutout针对具体切割区域,Design_Outline是设计参考,Outline是最终切割依据。设计时需根据需求选择合适层:外形参考用Design_Outline/Outline,切割区域用Cutout。

卤煮小鱼的博客 1785

逆向实战:从x-mini签名到RPC调用,Frida动态分析小红书加密协议

本文通过实战案例,详细拆解了小红书App的加密协议逆向分析过程。从识别x-mini签名等关键参数入手,结合静态分析与Frida动态Hook技术,追踪到核心的RPC调用入口,并最终封装成可独立调用的RPC函数,为安全研究和协议理解提供了完整的技术路径。

moss5的博客 1028

COM编程入门Part Ⅰ- 什么是COM和如何使用COM [译]

COM(Component Object Model)是最近WIndows世界中最流行的TLA(three-letter acronym)。一些新技术的出现都是基于COM的。并且这些技术文档中抛出了很多术语, 比如 COM对象 、 接口 、 服务器 等等,但都假设您已熟悉COM的基本工作原理和使用方法。本文由浅入深描述COM的内在运行机制,并展示了如何使用其他人提供的COM对象(特别是Windows sheel)。阅读完本片文章,您将具备能够使用Windows和第三方提供的COM对象的能力。

learning attitude 2772

引以为戒:一个“看不见”的空格,导致上下文超限——从 `llama-server` 错误说起

文章摘要: 本文分享了Qwen工程团队在部署llama-server时遇到的参数失效问题:明明设置了-c 32768上下文参数,却仍报错"超出4096 tokens限制"。经排查发现,问题根源是批处理脚本中续行符^后存在两个空格,导致参数被忽略。文章详细解析了Windows批处理中^的严格语法规则(必须紧贴前字符),对比了错误与正确写法的差异,并给出4条实用建议:使用编辑器显示空白字符、调试时关闭@echo off、预检完整命令、优先单行命令。最后强调在AI系统部署中,此类"隐

刘一说的IT专栏 538

COM编程攻略(四 COM对象创建的原理及ATL实现)

COM编程攻略(四 COM对象创建的原理及ATL实现)

heusunduo88的博客 1465

25、BDS-3卫星信号性能与PPP-B2b增强消息完整性分析

本文对BDS-3卫星信号性能及PPP-B2b增强消息的完整性进行了系统分析。评估了MEO、IGSO和GEO卫星的轨道与时钟精度,得出BDS-3总体SISRE为0.25 m,系统完整性可覆盖99.999%的误差。分析表明SIS中断主要由时钟调整和轨道机动引起,个别卫星存在因境外监测受限导致的非计划中断。通过自研解码软件对PPP-B2b增强消息进行采集与解析,实验结果显示BDS-3和GPS的平均历元完整性率均高于98.55%,其中卫星掩码和时钟校正消息的完整性率超过99.8%。研究还发现IGSO卫星相比MEO卫

quiet的专栏 143

PCIe Base Specification解析(二)

PCIe事务层,Transaction Layer Specification

Crazzy_M的博客 1291

程序员编程笔记

1.查看电脑当前进程和端口cmd netstat -pid netstat -a 查看全部端口信息:netstat –ano 2.创建文件夹 mkdir 文件名或文件路径 3.删除文件夹 rmdir 4.删除文件 del 5.打开计算机calc 6.打开画图mspaint 7.用echo "写入新数据">d:\a.txt,echo 字符串 >文件路径 文件名(会覆盖原内容) 8.用echo "写入新数据">>d:\a.txt,echo 字符串 >文件路径 文件名.

weixin_40789007的博客 5774

华为OD新系统机试真题 - 获取大写字母瓷砖拼出独特图案数量

华为OD机试新系统真题【获取大写字母瓷砖拼出独特图案数量】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD新系统四月二十九号机试真题【获取大写字母瓷砖拼出独特图案数量】

qq_45776114的博客 1218

COM编程--学习笔记

C++与COM 对象通信方法 1、调用COM DLL时COM不需要做什么特别的工作; 2、但是调用COM EXE服务器上的方法时,在实际过程中程序并不是马上进入被调用的函数,而先执行一个“代理”的中间函数:代理函数将调用的参数序列化为标准的COM客户/服务器协议的格式,然后放到连向COM EXE的信道中;在信道的另一端是一个叫做“桩子”的函数,“桩子”函数将参数包解开,真正实现对所请求...

weixin_33919950的博客 290

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【COM编程】从C++到COM,学习笔记

转载自:http://blog.youkuaiyun.com/netanimals/article/details/6863403 COM的产生   一. 为什么要引入COM? 先给一个答案:COM的产生是为了解决OLE技术。当然今天OLE已经变成了COM的一个成功应用例,就好比牛顿当初发明微积分是为了解决物理运动问题,但是今天物理运动问题只是微积分的一个应用而已——以上不

每一次对问题的深究,总会收获新的知识和体会 1739

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

组件编程:COM学习笔记

     COM的全称是Component Object Model,是一种用来建立组件二进制和网络规范。COM组件是遵守COM规范的软件模块,可以是dll,也可以是exe。COM应用是基于C/S模型的,概括起来就是COM组件向COM客户端提供服务。从技术上讲,一个进程内的COM完全可以被认为就是一个普通的DLL—动态连接库!如果抛弃常用的COM API,CreateCOMObject()或者Cr

luyysea的专栏 2251

【COM编程】从C++到COM,学习笔记,转自网络,对于理解COM原理学习很好!

COM的产生   一. 为什么要引入COM? 先给一个答案:COM的产生是为了解决OLE技术。当然今天OLE已经变成了COM的一个成功应用例,就好比牛顿当初发明微积分是为了解决物理运动问题,但是今天物理运动问题只是微积分的一个应用而已——以上不是我瞎猜的,是那本Inside

netanimals的专栏 1万+

COM学习笔记一《用VC进行COM编程所必须掌握的理论知识》

  1、   为什么要用COMOO vs. COM —— 重用的方法不同(1)类库 —— 类库的重用基于源码的方式① 限制了编程语言② 每次都必须重新编译(2)DLL —— ① 函数重名问题② 各编译器对C++函数的名称修饰不兼容问题(也可以用extern "C";来强调使用标准的C函数特性,关闭修饰功能,但这样也丧失了C++的重载多态性功能)③ 路径问题④ D

dengrk的专栏 791

python核心编程学习笔记-2016-10-01-01-客户端COM编程

23.1 #-*-coding: utf-8-*- from time import ctime from urllib import urlopen ticks = ('YHOO', 'GOOG', 'EBAY', 'AMZN') URL = 'http://quote.yahoo.com/d/quotes.csv?s=%s&f=sl1c1p2' # f=sl1c1p2中的s、l1、c1和

mengzm的博客 1308

《C#高级编程》学习笔记------什么是COM组件

COM是Component Object Model (组件对象模型)的缩写。 用户需要什么样的软件产品?这是一个多选题,但高效,健壮是肯定会被选中的。作为一名软件开发人员如何做才能满足用户的需要呢?必须要保证升级应用时不破坏与以前版本的向后兼容性。必须做到扩展系统服务时不依赖特定的操作系统。面向对象的程序设计显然是一次革命性的改变。采用面向对象的设计方法我们可以很容易的把要解决的问题事物抽象成各...

weixin_34075268的博客 241

Python中文API文档与学习笔记

Python中文API文档与学习笔记 【下载地址】Python中文API文档与学习笔记 探索Python世界的绝佳资源!本开源项目精心整理了Python的中文API文档与学习笔记,助您轻松掌握Python编程精髓。API文档详尽解析了Python标准库的各个模块与函数,是深入学习Python的必备宝典。同时,项目还提供了...

gitblog_06783的博客 421

Nodejs学习笔记大全资源下载

Nodejs学习笔记大全资源下载 去发现同类优质开源项目:https://gitcode.com/ 此仓库为您提供了2020年Nodejs自学学习笔记大全的完整版,内容详尽,涵盖Nodejs的核心概念、编程技巧以及实践经验。本学习笔记是您深入学习Nodejs的宝贵资料。 文件信息 文件名称:Nodejs学习笔记大全.pdf 文件描述:2020Nodejs自学学习笔记大全 欢迎下载使用,祝您学习...

gitblog_06788的博客 334

Numpy学习笔记pdf下载

Numpy学习笔记pdf下载 去发现同类优质开源项目:https://gitcode.com/ 此仓库提供了《Numpy学习笔记》的PDF版本,适用于希望深入学习Numpy库使用方法的用户。该资源详细记录了Numpy库的基本使用、高级功能和实例解析,是学习Numpy不可多得的参考资料。通过这份学习笔记,你可以系统地掌握Numpy的核心概念和编程技巧,为数据处理、科学计算打下坚实基础。 去发现同类...

gitblog_06739的博客 315

kotlin学习笔记-异常好玩的list集合总结

kotlin学习笔记-异常好玩的list集合总结

weixin_46246967的博客 70
上一篇: Abuse process command line
下一篇: 将shellcode隐在BitNumber结构中
FFE4
博客等级 码龄9年 234粉丝 166原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值