实现形式 先程内组件 in process component 进程外组件 out of process component
实现形式 !进程内组件 – in process component in process component !进程外组件 – out of process component out of process component
进程肉组件 少组件:做成D一引出函数 客户:用到的AP函数, LoadLibrary GetProcAddress, FreeLibrary ☆说明: 1.也可以引出全局变量 2. DumpBin检查组件的引出函数和变量
进程内组件 !组件:做成DLL——引出函数 !客户:用到的API函数,LoadLibrary LoadLibrary、 GetProcAddress GetProcAddress、FreeLibrary FreeLibrary !说明: – 1. 也可以引出全局变量 也可以引出全局变量 – 2. DumpBin DumpBin检查组件的引出函数和变量 检查组件的引出函数和变量
进程外组作 实现形式:EXE IPC:DDE、消息机制、共享内存、 RPC/LPO等等 例:应用调用系统服务 ④存根DLL返 应用A 回最终结果 (进程A) ①应用A ②存根DL通过 进程B 调用系统 LPC调用服务f API函数 存根DL 服务 ③服务f通过 LPC返回结果
进程外组件 !实现形式:EXE !IPC:DDE、消息机制、共享内存、 消息机制、共享内存、 RPC/LPC RPC/LPC等等 !例:应用调用系统服务 例:应用调用系统服务 应用 A (进程 A) 存根 DLL 进程 B 服务 f ①应用 A 调用系统 API 函数 ②存根 DLL 通过 LPC 调用服务 f ③服务 f 通 过 LPC 返回结果 ④存根 DLL 返 回最终结果
进程外组件(续)一 ⑥代理对象返客户程<-19 组件程序 回最终结果 (客户进程) ①2③ (组件进程) ④服务完成 ①客户调 组件对象 ②代理对象通过 后返回 用接口成 LPC调用组件存根 员函数 代理DLL 存根DLL ③调用组件 中代理对象 对象接口成 ⑤存根DL通过 员函数 LPC返回结果
进程外组件(续) 客户程序 (客户进程) 代理 DLL 中代理对象 组件程序 (组件进程) 存根 DLL ①客户调 用接口成 员函数 ②代理对象通过 LPC 调用组件存根 ⑤存根 DLL 通过 LPC 返回结果 ⑥代理对象返 回最终结果 组件对象 ③调用组件 对象接口成 员函数 ④服务完成 后返回 ⑥⑤④ ①②③
回顾:对象与客户之间的连接 客户通过vabe与对象进行通信 客户如何获得第一个接口指针? Create String引出函数 如何创建( create)?激活( activate)? 创建工作一定是由组件中的一个函数来 完成:创建函数 Createobject 冷客户如何访问这个函数?
回顾:对象与客户之间的连接 回顾:对象与客户之间的连接 !客户通过vtable与对象进行通信 与对象进行通信 !客户如何获得第一个接口指针? 客户如何获得第一个接口指针? – CreateString CreateString引出函数 !如何创建 (create) create) ?激活 (activate) activate) ? !创建工作一定是由组件中的一个函数来 创建工作一定是由组件中的一个函数来 完成:创建函数 完成:创建函数CreateObject CreateObject !客户如何访问 这个函数?