Windows 本地过程调用


Windows 中的消息传递机制称为本地过程调用 (LPC) 机制。LPC 用于同一台机器上两个进程之间的通信。它类似于广泛使用的标准远程过程调用 (RPC) 机制,但它针对 Windows 进行了优化,并且是 Windows 特有的。Windows 使用端口对象来建立和维护两个进程之间的连接,就像 Mach 一样。Windows 使用两种类型的端口:连接端口和通信端口。

通信工作原理如下:

  • 服务器进程发布对所有进程可见的连接端口对象。

  • 当客户端需要子系统的服务时,它会打开服务器连接端口对象的句柄,并向该端口发送连接请求。然后服务器创建一个通道并向客户端返回一个句柄。

  • 该通道包含一对私有的通信端口:一个用于客户端到服务器的消息,另一个用于服务器到客户端的消息。通信通道还支持回调机制,允许客户端和服务器在通常预期回复时接受请求。

创建 LPC 通道时,会选择三种消息传递技术之一:

  • 对于小型消息(最多 256 字节),端口的消息队列用作中间存储,并将消息从一个进程复制到另一个进程。

  • 对于大型消息,必须通过节对象传递,节对象是与通道关联的共享内存区域。

  • 提供了一个 API,允许服务器进程直接读写客户端的地址空间,如果数据量太大而无法放入节对象中。

客户端在设置通道时决定它是否需要发送大型消息。如果客户端确定它确实要发送大型消息,它会请求创建一个节对象。同样,如果服务器确定回复将很大,则它将创建一个节对象。现在要使用节对象,会发送一条小型消息,其中包含关于节对象的指针和大小信息。此方法比上面列出的第一种方法更复杂,但它避免了数据复制。需要注意的是,Windows 中的 LPC 机制不是 Windows API 的一部分,因此应用程序程序员看不到它。而使用 Windows API 的应用程序调用标准远程过程调用。当在同一系统上的进程上调用 RPC 时,RPC 通过 LPC 间接处理。此外,许多内核服务使用 LPC 与客户端进程进行通信。下图显示了 Windows 中本地过程调用的结构。

图:Windows 中的本地过程调用

更新于:2019年10月11日

1K+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告