网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > 网络攻防 > 黑客技术 > 系列教程 > 《加密解密技术内幕》 COM 原理与应用  

《加密解密技术内幕》 COM 原理与应用

2008-04-09  作者:bitsCN整理  来源:中国网管联盟  点评 投稿 收藏

第一部分 COM原理

按:文章对COM原理具有高度总结性,推荐学习COM的朋友都看一看,COM注定要淘汰的,但学习COM的编程思想是非常有意义的。

 

dREAMtHEATER推荐必属佳品

 

《COM 原理与应用》学习笔记 - 第一部分 COM原理

 

savetime2k@yahoo.com

 

 

(本文内容基本上是从《COM 原理与应用》书中摘录,版权由作者潘爱民所有)

 

目录

===============================================================================

⊙ 第一章 概述

   COM 是什么

   COM 对象与接口

   COM 进程模型

   COM 可重用性

⊙ 第二章 COM 对象模型

   全局唯一标识符 GUID

   COM 对象

   COM 接口

   接口描述语言 IDL

   IUnknown 接口 网管联盟bitsCN_com

   COM 对象的接口原则

⊙ 第三章 COM 的实现

   COM 组件注册信息

   注册 COM 组件

   类厂和 DllGetObjectClass 函数

   CoGetClassObject 函数

   CoCreateInstance / CoCreateInstanceEx 函数

   COM 库的初始化

   COM 库的内存管理

   组件程序的装载和卸载

   COM 库常用函数

   HRESULT 类型

⊙ 第四章 COM 特性

   可重用性:包容和聚合

   进程透明性 (待学)

   安全性 (待学)

   多线程特性 (待学)

⊙ 第五章 用 Visual C++ 开发 COM 应用

   Win32 SDK 提供的一些头文件的说明

   与 COM 接口有关的一些宏

===============================================================================

网管下载dl.bitscn.com



 

 

正 文

===============================================================================

⊙ 第一章 概述

===============================================================================

   COM 是什么

-------------------------------------------------------------------------------

COM 是由 Microsoft 提出的组件标准,它不仅定义了组件程序之间进行交互的标准,并且也提供了组件程序运行所需的环境。在 COM 标准中,一个组件程序也被称为一个模块,它可以是一个动态链接库,被称为进程内组件(in-process component);也可以是一个可执行程序(即 EXE 程序),被称作进程外组件(out-of-process component)。一个组件程序可以包含一个或多个组件对象,因为 COM 是以对象为基本单元的模型,所以在程序与程序之间进行通信时,通信的双方应该是组件对象,也叫做 COM 对象,而组件程序(或称作 COM 程序)是提供 COM 对象的代码载体。

 

COM 对象不同于一般面向对象语言(如 C++ 语言)中的对象概念,COM 对象是建立在二进制可执行代码级的基础上,而 C++ 等语言中的对象是建立在源代码级基础上的,因此 COM 对象是语言无关的。这一特性使用不同编程语言开发的组件对象进行交互成为可能。 网管bitscn_com

 

-------------------------------------------------------------------------------

   COM 对象与接口

-------------------------------------------------------------------------------

类似于 C++ 中对象的概念,对象是某个类(class)的一个实例;而类则是一组相关的数据和功能组合在一起的一个定义。使用对象的应用(或另一个对象)称为客户,有时也称为对象的用户。

 

接口是一组逻辑上相关的函数集合,其函数也被称为接口成员函数。按照习惯,接口名常是以“I”为前缀。对象通过接口成员函数为客户提供各种形式的服务。

 

在 COM 模型中,对象本身对于客户来说是不可见的,客户请求服务时,只能通过接口进行。每一个接口都由一个 128 位的全局唯一标识符(GUID,Global Unique Identifier)来标识。客户通过 GUID 来获得接口的指针,再通过接口指针,客户就可以调用其相应的成员函数。

与接口类似,每个组件也用一个 128 位 GUID 来标识,称为 CLSID(class identifer,类标识符或类 ID),用 CLSID 标识对象可以保证(概率意义上)在全球范围内的唯一性。实际上,客户成功地创建对象后,它得到的是一个指向对象某个接口的指针,因为 COM 对象至少实现一个接口(没有接口的 COM 对象是没有意义的),所以客户就可以调用该接口提供的所有服务。根据 COM 规范,一个 COM 对象如果实现了多个接口,则可以从某个接口得到该对象的任意其他接口。从这个过程我们也可以看出,客户与 COM 对象只通过接口打交道,对象对于客户来说只是一组接口。

中国网管论坛bbs.bitsCN.com



 

-------------------------------------------------------------------------------

   COM 进程模型

-------------------------------------------------------------------------------

COM 所提供的服务组件对象在实现时有两种进程模型:进程内对象和进程外对象。如果是进程内对象,则它在客户进程空间中运行;如果是进程外对象,则它运行在同机器上的另一个进程空间或者在远程机器的空间。

 

进程内服务程序:

服务程序被加载到客户的进程空间,在 Windows 环境下,通常服务程序的代码以动态连接库(DLL)的形式实现。

 

本地服务程序:

服务程序与客户程序运行在同一台机器上,服务程序是一个独立的应用程序,通常它是一个 EXE 文件。

 

远程服务程序:

服务程序运行在与客户不同的机器上,它既可以是一个 DLL 模块,也可以是一个 EXE 文件。如果远程服务程序是以 DLL 形式实现的话,则远程机器会创建一个代理进程。

 

虽然 COM 对象有不同的进程模型,但这种区别对于客户程序来说是透明的,因此客户程序在使用组件对象时可以不管这种区别的存在,只要遵照 COM 规范即可。然而,在实现 COM 对象时,还是应该慎重选择进程模型。进程内模型的优点是效率高,但组件不稳定会引起客户进程崩溃,因此组件可能会危及客户;(savetime 注:这里有点问题,如果组件不稳定,进程外模型也同样会出问题,可能是因为进程内组件和客户同处一个地址空间,出现冲突的可能性比较大?)进程外模型的优点是稳定性好,组件进程不会危及客户程序,一个组件进程可以为多个客户进程提供服务,但进程外组件开销大,而且调用效率相对低一点。

网管下载dl.bitscn.com



 

-------------------------------------------------------------------------------

   COM 可重用性

-------------------------------------------------------------------------------

由于 COM 标准是建立在二进制代码级的,因此 COM 对象的可重用性与一般的面向对象语言如 C++ 中对象的重用过程不同。对于 COM 对象的客户程序来说,它只是通过接口使用对象提供的服务,它并不知道对象内部的实现过程,因此,组件对象的重用性可建立在组件对象的行为方式上,而不是具体实现上,这是建立重用的关键。COM 用两种机制实现对象的重用。我们假定有两个 COM 对象,对象1 希望能重用对象2 的功能,我们把对象1 称为外部对象,对象2 称为内部对象。

 

(1)包容方式。

对象1 包含了对象2,当对象1 需要用到对象2 的功能时,它可以简单地把实现交给对象2 来完成,虽然对象1 和对象2 支持同样的接口,但对象1 在实现接口时实际上调用了对象2 的实现。

 

(2)聚合方式。

对象1 只需简单地把对象2 的接口递交给客户即可,对象1 并没有实现对象2 的接口,但它把对象2 的接口也暴露给客户程序,而客户程序并不知道内部对象2 的存在。

中国网管联盟bitsCN.com



 

===============================================================================

⊙ 第二章 COM 对象模型

===============================================================================

   全局唯一标识符 GUID

-------------------------------------------------------------------------------

COM 规范采用了 128 位全局唯一标识符 GUID 来标识对象和接口,这是一个随机数,并不需要专门机构进行分配和管理。因为 GUID 是个随机数,所以并不绝对保证唯一性,但发生标识符相重的可能性非常小。从理论上讲,如果一台机器每秒产生 10000000 个 GUID,则可以保证(概率意义上)的 3240 年不重复)。

TAGs
 上一篇:《加密解密技术内幕》 完全用VB进行ASM编程的示例   下一篇:《加密解密技术内幕》如何通过崩溃地址找到出错的代码行
《加密解密技术内幕》 COM 原理与应用 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: