Microsoft ActiveSync是如何封装底层的不同连接?

bobseadream 2009-06-02 10:06:20
根据ActiveSync帮助文档中的描述,ActiveSync可支持多种与Windows Moblie设备连接的方式:
o USB cable(USB线)
o Serial cable(串口线)
o Infrared(红外线)
o Bluetooth(蓝牙)
o Network(计算机网络)

也就是说,只要在PC与设备之间建立上述任何一种连接,就可以进行PC和设备间的数据交换了。
PC端管理Windows Moblie设备是通过RAPI来实现的,RAPI是MS专门为PC远程管理设备而制定的API,这些API实际上是RPC调用的封装。
问题就来了
1)RAPI是RPC,而RPC是基于tcp/ip网络socket的应用,即没有tcp/ip协议栈,RAPI是无法work的?
2)如果RAPI基于tcp/ip的,那么ActiveSync是如何建立PC与设备之间的tcp/ip的连接,而不论底层的物理连接是什么?可能的方案是,为每一种物理连接添加一个tcp/ip适配层(驱动),屏蔽tcp/ip的传输层。传统上,tcp/ip的传输层是网卡+网线或WiFi,而这个适配层要做的工作是将传输层改为上述任一可用的连接。对于USB连接,这个适配层可能是一个驱动,安装ActiveSync时也发现最后会更新USB驱动。
3)如果不需要建立tcp/ip连接,那么RPC是基于何种连接上实现RPC调用的?

对于这几个问题非常困惑,望指教。先谢过了。
...全文
641 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
chocol0128 2010-06-20
  • 打赏
  • 举报
回复
学习!
iwillbeback008 2010-01-14
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 kwovex 的回复:]
mark,谁能逆一下rapi.dll之类的看是怎么实现的
[/Quote]

方子不错!!
iwillbeback008 2010-01-14
  • 打赏
  • 举报
回复
感觉真的很复杂,帮顶了。
关注,学习。
kwovex 2009-12-01
  • 打赏
  • 举报
回复
mark,谁能逆一下rapi.dll之类的看是怎么实现的
BenjaminHuang 2009-06-04
  • 打赏
  • 举报
回复
首先要谢谢 bobseadream 给出关于 RNDIS 的链接,我在里面找到了许多有用的信息。

RNDIS 基于传统 NDIS ,将 Miniport 划分为消息集和介质传输两部分,厂商开发的驱动就只需要实现介质相关的消息传输。
NDIS/RNDIS Miniport/RNDIS Transport 这个驱动层面负责 TCP/IP 数据链路层(MAC)的处理;物理连接上要处理数据和电平信号的转换,由相应接口驱动(如USB接口驱动,蓝牙适配器驱动,串口驱动等)去处理。

由此可见 RNDIS 的支持是不需要特殊的网络适配器的,至于那个虚拟网卡,本人认为它的作用是让 Windows 能用管理其他网路连接的方式管理通过 RNDIS 建立的连接。
它不属于'Remote NDIS driver for USB transport’ 的一部分,它只有在建立与 WM 设备的连接时才被激活,至于是支持 RNDIS 体系的 Windows 内建的,还是安装 ActiveSync 时创建的,就不敢妄下结论了,个人倾向于第一种可能性。

*之前有想过用抓包的方式去研究一些细节,但是无奈事情比较多,人也比较懒,所以只能在空闲时再搞了,同时也期待在座的各位仁兄有空能做一下这个实验,能把结果分享一下。

*回lanruoshui的问题:我用个问题啊,用RAPI实现设备与电脑的连接时,能否主动捕捉到这个连接事件呢?

我查了一下 SDK 和设备连接时的一些情况,发现可以通过 WM State and Notifications Broker 机制,订阅 HKLM\System\State\Connections\Desktop\Count 这个键值,捕捉到这个事件并进行处理。
lanruoshui 2009-06-04
  • 打赏
  • 举报
回复
我用个问题啊,用RAPI实现设备与电脑的连接时,能否主动捕捉到这个连接事件呢?
lanruoshui 2009-06-04
  • 打赏
  • 举报
回复
这个贴子好高深,仔细研究中。。。
lanruoshui 2009-06-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 roc196 的回复:]
恩,同意~~~
研究USB的连接可以抓一下169.254.2.1(手机)与PC之间的包,比较直观~~~
其他介质没怎么接触过~~~
[/Quote]

研究中。。。
ppc_2008 2009-06-04
  • 打赏
  • 举报
回复
学习
BenjaminHuang 2009-06-03
  • 打赏
  • 举报
回复
多思考是好习惯,支持一下。

在TCP/IP 的5层结构中,不同物理层链和路层的支持可以封装成不同的 SP(Service Provider), 这些 SP 共享同一标准接口 (SPI), 向上层提供服务。
按照这样的设计,不管一层和二层走的是怎么样的物理链路,是要有相应的SP,就可以支撑上层的 TCP/IP 应用。(为了把问题说明白,这里借用了SP这个术语)

对于楼主的问题,个人认为:
1. RAPI 同样是基于 TCP/IP 的
2. 以上列举的各种链接方式,已经有对应的SP集成在系统当中(很有可能是 DLL,但肯定不是首次链接 WM 设备时装的驱动)
3. 问题的关键在于,就算不是通过Ethernet(802.1)或 WIFI (802.11)定义的链路和物理层,只要开发出对应的 SP , 使得其能够通过 SPI 提供上层(网络层)所需要的服务,也同样可以在其他几种物理链接之上建立起 TCP/IP 网络连接的。

希望能回到你的问题。

在 ActiveSync 连接下, 对于PC和移动设备之间的寻址问题,本人有一些想法,有兴趣再作进一步交流。
bobseadream 2009-06-03
  • 打赏
  • 举报
回复
总算遇到了行家了,谢谢BenjaminHuang:)

你提到的PC与设备之间的寻址问题,这也是我比较困惑的地方。在ActiveSync中,当移动设备通过某种方式(如USB线)与PC相连时,这时PC会出现“发现新的硬件”的提示,然后加载相应的驱动,这时ActiveSync就可以直接与移动设备交互了,可以认为现在实际上建立了一个以移动设备为服务端,ActiveSync为客户端的C/S网络模型了。
我不清楚的地方是,既然RAPI是基于TCP/IP协议栈的(可能是基于socket来实现的),那么建立TCP/UDP连接首先要知道服务端的IP信息,包括IP地址和端口号。端口号可以预先定义好,但移动设备的IP地址是在什么时候设定的?远在PC端的ActiveSync又是如何获取设备的IP地址呢?

行家可否解释一下从设备插上USB线连接PC后到ActiveSync能与设备进行数据交换,整个流程是怎样的?谢谢了。
88csdn 2009-06-03
  • 打赏
  • 举报
回复
恩,同意~~~
研究USB的连接可以抓一下169.254.2.1(手机)与PC之间的包,比较直观~~~
其他介质没怎么接触过~~~
bobseadream 2009-06-03
  • 打赏
  • 举报
回复
我在MSDN上也查了一些关于RNDIS驱动的资料,参见 http://www.microsoft.com/whdc/device/network/ndis/rmndis.mspx

第一次WM与ActiveSync连接时,要求安装的驱动实际上是RNDIS驱动,准确的说是Remote NDIS driver for USB transport,是微软为支持在USB Bus上建立TCP/IP网络而提出的方案。BenjaminHuang提到的ATP应该就是这个RNDIS驱动。更新USB驱动后,WM端和PC端的RNDIS驱动就成为了两者通信的基础了。之后的过程应该如BenjaminHuang 所描述的那样,先通过DHCP协议为WM端分配ip地址,再建立TCP/IP网络。

其中有个环节仍不清楚,实际上在WM设备与PC相连后,发现在PC端的网络连接中新添加了一个网络连接,也就是一旦连接后,PC端和WM设备都会创建一个虚拟网卡,而后的网络通信看上去是从这个网卡进进出出的。这个虚拟网卡是谁负责创建的?RNDIS驱动?

相互学习,共同进步!谢谢BenjaminHuang
BenjaminHuang 2009-06-03
  • 打赏
  • 举报
回复
继续探讨一下,相互学习。

第一次通过 USB 以 ActiveSync 模式连接到 PC 的时候,提示要求装驱动,这个驱动是包含在 ActiveSync PC 端的安装程序里面的,它的主要功能是让 PC 端能配置建立起在 USB 或者其他 ActiveSync 所支持的物理链路上的 TCP/IP 协议栈,我们可以把这个驱动称为 ActiveSync Transport Provider(ATP)。如我们所知道的,WM 端的 ATP 是集成在系统当中的了(actsyncc.dll),PC 上有了 ATP, 他们之间就可以通过 ATP 所支持的介质建立 TCP/IP 互连的应用。

之后,如果 PC 端的 ActiveSync 进程在运行时发现有 WM 设备连入, 它就跑起 BOOTP/DHCP 一类给客户机配置网络层地址的协议,而 WM 端的 Agent 进程 repllog.exe (主要负责数据同步和复制)在设备连接到 PC 的时候,就可以发送 BOOTP/DHCP 请求得到自己的地址(内部地址),然后创建负责 RAPI 的 Agent 进程 (rapiclnt),把地址信息传递过去。这两个 WM 端的进程各司其职,而 PC 端的 ActiveSync 进程早己得知他们的应用端口,通过请求和回应的记录,也能知道对端所使用的网路层地址。

至此,一切通过 TCP/IP 进行 RPC 的条件都已经具备了。

当然,这里大部分都是通过个人的观察和学习推断出来的,有许多细节还需要和大家一起探讨,未完待续。
世外涛缘 2009-06-02
  • 打赏
  • 举报
回复
感觉真的很复杂,帮顶了。
关注,学习。
moren123 2009-06-02
  • 打赏
  • 举报
回复
看来WM要学习的东西还有很多,帮顶了。

7,655

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧