首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

COM组件原理_Com组件

COM中,接口就是一个抽象类,每个接口有一个接口ID(uuid)。一个COM组件通常是连续继承下来的类,比如 IUNknow ->IDispath->IXX->CXX。...这就形成了一个COM组件,当然组件一般是一个钻石继承的样子,这里为了简化原理把他们当成一个串形继承下来。...每个COM组件都有一个CLSID(uuid),这个CLSID是注册的时候写进注册表的,可以把这个CLSID理解为这个组件最终可以实例化的子类的一个ID。...这样就可以通过查询注册表中的CLSID来找到COM组件所在的dll的名称。然后调用的时候。...所以遇到COM组件的时候不要一根筋,非要纠结这个与标准的COM的不同之处。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

1.6K20

COM学习(一)——COM基础思想

概述 学习微软技术COM是绕不开的一道坎,最近做项目的时候发现有许多功能需要用到COM中的内容,虽然只是简单的使用COM中封装好的内容,但是许多代码仍然只知其然,不知其所以然,所以我决定从头开始好好学习一下...COM是基于组件化编程的思想,在COM中每一个组件成为一个模块,它可以是动态链接库或者可执行文件,一个组件程序可以包含一个或者多个组件对象,COM对象不同于OOP(面向对象)中的对象,COM对象是定义在二进制机器代码基础之上...根据 COM 规范,一个 COM 对象如果实现了多个接口,则可以某个接口得到该对象的任意其他接口。 由此可看出,客户与 COM 对象只通过接口打交道,对象对于客户来说只是一组接口。...而CLSID的定义如下: typedef GUID CLSID; 其实在COM中一般涉及ID的都是GUID,只是利用typedef另外定义了一个名称而已 另外COM也提供了一组函数用来对GUID进行操作...接口的一般使用步骤 一般使用COM中的时候首先使用CoInitialize初始化COM环境,不用的时候使用CoUninitialize卸载COM环境,在使用接口中一般需要进行下面的步骤 1.

1.4K30
您找到你想要的搜索结果了吗?
是的
没有找到

COM学习(三)——COM的跨语言

COM是基于二进制的组件模块,设计之初就以支持所有语言作为它的一个目标,这篇文章主要探讨COM的跨语言部分。...idl文件 一般COM接口的实现肯定是以某一具体语言来实现的,比如说使用VC++语言,这就造成了一个问题,不同的语言对于接口的定义,各个变量的定义各不相同,如何让使用vc++或者说Java等其他语言定义的接口能被别的语言识别...DllCanUnloadNow:函数用来询问是否可以卸载对应的dll,一般在COM中有两个全局的引用计数,用来记录当前内存中有多少个模块中的类,以及当前有多少个线程在使用它,如果当前没有线程使用或者存在的对象数为...InprocServer32)位置处找到对应模块的路径 加载该模块 根据IDL文件告知其他语言里面存在的接口,由语言调用对应的创建接口的函数创建接口 调用模块的导出函数DllGetClassObject将查询的...至此结构上说明了为了实现跨语言COM组件内部做了哪些工作,当然只有这些工作是肯定不够的,后面会继续说明它所做的另一块工作——提供的一堆通用的变量类型。

1.8K40

COM编程_第一讲_深入COM框架以及实现简单的COM

由此带来的好处是多方面的:可以将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;可以在多个应用系统中重复利用同一个组件;可以方便的将应用系统扩展网络环境下;COM与语言,平台无关的特性使所有的程序员均可充分发挥自己的才智与专长编写组件模块...,可以给其他的程序使用 实现简单的COM接口设计模式开始  什么是接口模式 1.接口模式就是我们不知道,但是当用户用的时候,才知道是什么类型,所以可以是已知的,规范一下接口即可....简单来说:   接口模式就是类似于U盘 插入电脑上,中间的USB的那个接口,只要是支持这个接口的,都可以插入电脑上 比如硬盘等等. 2.插件模式: 插件模式是未知的,比如用户怎么写你都是不知道的,所以定义好规范...,可以看下.虽然函数不多,就一个类,但是底层讲起,为什么这么做所以比较多. 1.定义接口类 class IUnKnow { public: virtual HRESULT QueryInterFace...基本高级的源码写出来,这样能熟悉一下COM的框架 接口设计的细节问题 (解决为什么要用Release) 1名称粉碎 .我们想一下,C语言的函数,看一下二进制或者DLL,是不是都是原本什么样子就是什么样子

3.3K01

COM学习(二)——COM的注册和卸载

COM组件是跨语言的,组件被注册注册表中,在加载时由加载函数在注册表中查找到对应模块的路径并进行相关加载。它的存储规则如下: 1....在注册表的HKEY_CLASSES_ROOT中以模块名的方式保存着COM模块的GUID,比如HKEY_CLASSES_ROOT\ADODB.Error\CLSID键中保存着模块ADODB.Error的GUID...-8000-00AA006D2EA4}\InprocServer32\项的默认键中保存着模块所在路径为%CommonProgramFiles%\System\ado\msado15.dll 一般的COM...模块都是使用regsvr32程序注册注册表中,该程序在注册时会在模块中查找DllRegisterServer函数,卸载时调用模块中提供的DllUnregisterServer,所以要实现注册的功能主要需要实现这两个函数...__stdcall 所以这个宏展开也就是 extern "C" HRESULT __stdcall DllRegisterServer(); 为了实现注册功能,首先定义一个全局的变量,用来表示需要写入注册表中的项

2.6K20

GitHub.com放弃使用jQuery说起

原文链接:https://github.blog/2018-09-06-removing-jquery-from-github-frontend/ 以下为译文: GitHub.com 网站前端移除...jQuery 我们最近完成了一项里程碑式的工作,去除了GitHub.com 网站前端代码对 jQuery 的依赖。...在这篇文章中,我们将解释一下我们最初是如何依赖 jQuery 的,又是如何意识何时不再需要它的,并指出——我们能够使用标准浏览器 API 实现我们需要的一切(而不是用另一个库或框架替换它)。...回到 jQuery 身上,我们将 jQuery API 与现代浏览器中支持的 Web API 进行了比较,并意识一些问题: $(selector)完全可以使用querySelectorAll()来替代...我们维护了一个自定义构建的 jQuery 版本,当我们发现不再使用某个 jQuery 模块时,我们会将其自定义版本中删除并发布一个更精简的版本。

87520

COM学习(四)——COM中的数据类型

上一次说到,COM为了跨语言,有一套完整的规则,只要COM组件按照规则编写,而不同的语言也按照对应的规则调用,那么就可以实现不同语言间相互调用。...COM中使用的是UNICODE字符串,在编写COM程序的时候经常涉及CString、WCHAR、char等的相互转化,其实本质上就是多字节字符与宽字节字符之间的转化。...COM为了方便使用,另外也提供了一组转化函数_com_util::ConvertBSTRToString以及_com_util::ConvertStringToBSTR用在在char与BSTR之间进行转化...VARIANT_NAME_3; } __VARIANT_NAME_2; DECIMAL decVal; } __VARIANT_NAME_1; }; 定义上看出...但是在使用里面的值时还是得判断它的vt成员的值 COM中的其他操作 最后附上一张COM常用函数表以供参考: ?

1K30

域名 ename.cn 转到 name.com

终于把这个域名 ename.cn 转移到 name.com,下面讲下转移的过程: 1. ename.cn 的域名是可以通过手机获取转移密码的,但是需要实名认证,这个相比其他国内注册商已经好很多了。...登录 name.com,点击页底的 Transfer Domain Names。 4....在转移中碰到第一个的问题是,name.com 无法获取域名的管理员邮箱,可能是 ename.cn 的格式不对,这个时候可以给 name.com 的客服(support@name.com)发封邮件: Acquire..., please click on the following URL:https://www.name.com/transfers_in/accept.php?...老实说 ename.cn 的服务算是不错的,不过相比之下,name.com 使用更简单,界面更简洁,其他所有的域名都在上面,也不想更多地方进行管理,太麻烦,所以就转移到 name.com。 ----。

9K70

COM 进程注入技术

C 里面有 IUnknown,Rust 里也不需要我们 IUnknown 开始实现,实际上在 windows-rs 和 winapi 这两个 crate 中都有实现,但是实现方式上有所不同。...IUnknown = ptr::null_mut(); windows-rs let p: IUnknown; 可以看出来 winapi 的接口定义方式更符合 c 的接口调用风格,而 windows-rs 声明上则看不出来是一个指针...对于这块暂时解释这里,想更进一步理解具体怎么用 Rust 定义一个接口的话,可以借鉴我代码里对 IRundown 接口的实现方式。...CoGetObject、CoCreateInstance、CoGetObjectContext 这些 API 获取接口指针,如果获取成功就相当于和服务端连接成功,当通过指针调用方法后,相当于发起一个请求服务端了...好像目前唯一好用的查看 COM 进程信息的工具就是 OleViewDotNet 了,需要提前使用 windbg 或者其他调试器把 combase.dll 的符号下载到本地,然后配置 OleViewDotNet

1.8K30

COM病毒实验原理

0×01 实验内容 编译生成com病毒,用com病毒对测试文件进行感染。 0×02 实验目的 了解COM病毒的原理,掌握COM病毒的分析及其修改过程。...0×03 实验原理 COM文件是一种单段执行结构的文件,其执行文件代码和执行时内存映像完全相同,起始执行偏移地址为100H,对应于文件的偏移00H(文件头)。...MOV DS,AX MOV DX,offset message MOV AH,09h INT 21h MOV AH,4Ch INT 21h RET message db "This a simple com...17所示界面,并在test文件夹中生成了virus的可执行程序 双击virus.exe使之运行,在没有test.com文件的情况下 将test文件夹中的test.asm文件改名为test.com文件...com virus 并且一直循环 这段话意思是: 你被一种概念com通讯病毒感染了 达到一定时间就开始全窗口出现表情 用到的工具MASM

20430

地产终端同行手中收购sold.com

,已售出300多亿美元的住宅和商业资产,为各种各样的房地产客户服务,大型金融机构和机构投资者个人消费者和房地产专业人士。...根据whois的历史记录, 当时Auction.com是在2012年Dominion Enterprises手里收购域名Sold.com的。   ...通过查询可知,目前,Ten-X公司手里还持有ten-x.co、tenx.co、Auction.com、mylandhome.com、mlhdocs.com等等一众域名。   ...还拥有sold.com在房产领域的商标,所以这次sold.com的交易很可能也包含了商标权益,看来这笔交易高价是跑不远了。   ...那么,英文域名sold.com zui后有没有拿来搭建房产销售平台,只有等域名sold.com被正式启用的那天才知道了。

589100

如何使用COM-Hunter检测持久化COM劫持漏洞

关于COM-Hunter  COM-Hunter是一款针对持久化COM劫持漏洞的安全检测工具,该工具基于C#语言开发,可以帮助广大研究人员通过持久化COM劫持技术来检测目标应用程序的安全性。  ...关于COM劫持  微软在Windows 3.11中引入了(Component Object Model, COM),作为一种实现对象的方法,这些对象可以被不同的框架(ActiveX, COM+, DCOM...COM对象的滥用使安防团队能够代表受信任的进程执行任意代码。执行COM劫持不需要管理员权限,因为HKCU注册表配置单元中的类在HKLM中的类之前执行。...v4.8  工具下载  广大研究人员可以使用下列命令将该项目源码克隆至本地: git clone https://github.com/nickvourd/COM-Hunter.git  工具帮助信息...https://twitter.com/zeropointsecltd https://twitter.com/dimtsikopoulos https://twitter.com/0xvm 精彩推荐

85310
领券