昨天心血来潮看了下LPC,查了些资料,发现涉及到的东西真不少,先记录下吧,研究清楚了再继续。
LPC通信的基本步骤大概如下:
1. NtCreatePort 来创建一个命名端口,这个端口叫连接端口。
2.服务器通过NtListenPort来监听这个连接端口以获得新的通信请求。服务器必须始终有一个
线程在这个端口上等待
3.客户端 NtConnectPort发送一个连接请求道服务器以启动一个新的链接,这个请求被发送到
步骤1所创建的端口上
4.服务器分析链接请求,并且根据它的策略,通过NtAcceptConnectPort和
NtCompleteConnectPort来接收连接
5.连接建立后,客户端和服务端都有了一个端口对象可用于实际通信
6.服务器在连接端口启动一个循环,包括接收新消息,处理消息,以及通过
NtReplyWaitReceivePort来响应客户端
7.NtRequestWaitReplyPort 发送一个新的请求到服务器,并且等待服务器来处理请求,在客
户端与服务器的整个回话期间,步骤6和步骤7将重复进行
其中毛德操写的“漫谈兼容内核之十八:Windows的LPC机制”对LPC的内核实现有了详细的介绍,也可以借鉴
《Windows内核情景分析》其中的LPC一节。看到网上有人用native api实现过LPC通信,回头可以自己试验下