用LPC实现进程通信
LPC的概念
LPC即是”本地过程调用(Local Procedure Call)”。
LPC的原理
端口是一种面向连接的通信机制,通信的双方需要先建立起“连接”。这种连接一般建立在用户进程之间。在建立了连接的双方之间有几种交换报文的方法:
不带数据的纯报文。
不大于256字节的短报文。
如果是大于256字节的长报文,就要在双方之间建立两个共享内存区(Section)。双方通过共享内存区交换数据,但通过报文进行协调和同步。
Tips:大块数据之所以要通过共享内存区交换,一来是因为这样就为用于Port机制的缓冲区设置了一个上限,便于内存管理。而更重要的是提高了效率,因为否则便要在发送端把大块数据搬入内核空间,又在接收端把大块数据搬到用户空间。
典型的LPC建立连接和通信过程如下:
符号说明:S提供服务方(服务端) C请求服务方(客户端)
S1、服务线程首先通过NtCreatePort()创建一个命名的连接端口、即Port对象(这个对象名应为客户线程所知).
S2、建立上述连接端口后,服务线程通过NtListenPort()等待接收来自客户线程的连接请求(服务线程被阻塞).
C1、客户线程通过NtConnectPort()创建客户方的无名通信端口,向上述命名的连接端口发出连接请求(客户线程阻塞)。
S3、服务线程收到连接请求(被唤
原创力文档

文档评论(0)