2015-06-19 125 views
2

我已经被赋予了尝试重新创建一个DLL的任务,这个DLL对原始DLL有轻微的修改,当另一个程序运行时它将被执行。基本上是用于测试/模拟较大系统其他部分的DLL的模拟版本。如何判断库是COM还是DCOM?

我查找是否有任何方法来检查库是COM还是DCOM,但没有找到任何方法。我是aware of thedifferences,但给出了一个DLL库,我该如何判断它是COM或DCOM库

此外,有没有办法用新技术换出COM/DCOM库,但不改变调用COM/DCOM库的代码部分?

+1

几乎每个COM服务器都能够在不更改可执行文件的情况下进行DCOM,只需要额外的配置即可。关注它现在如何被使用。 –

+0

感谢您的建议。看着它! – matrixanomaly

回答

2

单独拥有可执行代码,除了如果代理/存根dll附带它,你可以认为它是DCOM,你不能分辨它是哪一个。

可见的区别在于事物的注册方式。根据注册的实施情况,挖掘注册过程可能很容易,也可能不那么容易。如果注册参数是在代码中手工粘贴的,则必须以更难的方式对其进行反向工程。如果注册使用存储在资源中的.rgs文件,则可以提取它并查看注册是如何完成的。无论如何,最好的办法是使用虚拟机并导出其注册表,然后注册该组件,再次导出注册表并查看其中的差异 - 添加了哪些内容。

+0

我注意到COM如何使用cocreateInstance函数,而DCOM是cocreateInstanceEx,其中调用可执行代码的其他代码使用该函数。这是确定库是COM还是DCOM的可能方法? – matrixanomaly

+1

@matrixanomaly'CoCreateInstanceEx()'允许在另一台计算机上实例化一个DCOM服务器,但是您也可以使用'CoCreateInstance()'在同一台计算机上实例化它。 – sharptooth

2

哇,你要去这里读书了!

如果我没记错的话,任何有效的COM对象也可以参与DCOM。操作系统级别的远程过程调用的接线不是?

https://msdn.microsoft.com/en-us/library/aa295360(v=vs.60).aspx

一旦COM被改编通过网络工作,那么任何接口, 是不依赖于本地执行模型(一些接口对本地机器设备固有 的依赖,如那些绘制接口 ,其方法具有把设备上下文作为参数的句柄)将具有分布的能力:接口消费者将 请求给定的接口;可以通过在不同的 机器上运行(或运行)的对象的实例来提供该接口 。 COM内部的分配机制将 消费者连接到提供者,使得由 消费者进行的方法调用将出现在提供者端,其将执行 。任何返回值然后将被发回给消费者。 对于所有意图和目的,分销行为对于消费者和提供者都是透明的。

现在已经存在如此多种COM。 DCOM(用于'分布式COM')是 附带版本的Windows NT从版本4.0开始。由于 1996年末,它也可用于Windows 95及其衍生产品 。在这两种情况下,DCOM都包含一组替代和附加DLL,以及一些实用程序,这些实用程序既提供本地COM功能,也提供远程COM功能。因此,它现在是基于Win32的平台的固有部分,并且随着时间的推移,其他组织将在其他平台上提供其他平台 。

+0

是的,我知道是的,我现在的实习是让我尝试用模拟的函数替换掉一个函数库,返回true/false来测试系统的一个大部分。无法帮助我不容易获得上述图书馆的来源。当我提到它时,所有完成COM/DCOM(没有那么多)的人都会呻吟,对我感觉不好。谢谢。 – matrixanomaly

+2

今天Windows仍然在使用COM。 DCOM并不总是意味着“交易”。这只是他们在通过网络添加COM的能力时想出的一个奇特名称。与此同时,由于这个原因,他们删除了对Windows进程间通信的严重依赖,尽管它仍然被使用/可用。 –

相关问题