本地过程调用

✍ dations ◷ 2025-12-02 07:51:10 #进程间通信

本地过程调用(LPC,Local Procedure Call,通常也被称为轻量过程调用或者本地进程间通信) 是一种由Windows NT内核提供的内部进程间通信方式。通过这一方式,同一计算机上的进程可以进行轻量的通信。在Windows Vista中,ALPC(Advanced Local Procedure Call,高级本地进程通信)替代了LPC。ALPC提供了一个高速可度量的通信机制,这样便于实现需要在用户模式下高速通信的用户模式驱动程序框架(UMDF,User-Mode Driver Framework)。

本地过程调用接口是Windows NT未公开原生API的一部分。这样的API不能够直接使用,但是可以通过如下方式间接使用:

LPC由内核的“端口”对象实现,这样可以确保安全(由访问控制表规定持有特定的安全标识符才可以访问)并可以验证链接另一端进程的身份。程序也可以对每一个信息设定安全标识符,并测试对应信息的变化,以实现每一条消息的安全性。

服务端和客户端之间典型的连接由下列过程表示:

本地过程调用支持以下三种交换信息的方式:

高级本地过程调用(ALPC)拥有比以往的本地过程调用(LPC)更优的性能。因为LPC只能通过同步请求/应答机制通信,而ALPC还可以使用IOCP实现通信。这样,ALPC就可以在消息数量和进程数量间保持一定平衡,保证了端口的高速通信。此外,ALPC还允许信息的批量传输,减少了进程在用户模式和内核模式之间的切换次数。

本地过程调用在Windows NT及其衍生系统中得到了广泛应用。在Win32子系统中,LPC应用于客户端和子系统服务器之间的通信(CSRSS)。在Windows NT 3.51版本中引入了快速LPC以提高调用速度。然而由于NT4.0中将部分关键服务端移入内核模式(win32k.sys)以提高系统效能,这一方法已基本被摒弃。

本地安全认证子系统服务(LSASS),会话管理器(SMSS)以及服务控制管理器均使用LPC端口和客户进程直接通信。Winlogon和安全引用监视器与LSASS进程之间的通信同样使用了LPC。

正如前文提到的,当消息在同一计算机内传输时,Microsoft RPC将调用LPC进行通信。许多仅在同一计算机内进行通信的服务采用LPC作为唯一的通信方式。远程对象连接与嵌入和分布式组件对象模型的实现也在很多地方使用了LPC作为本地通信的方式。

相关

  • 败血性关节炎败血性关节炎(英语:Septic arthritis),又作化脓性关节炎(英语:Pyogenic arthritis)或感染性关节炎(英语:Infectious arthritis),是病原体侵入关节导致的关节炎。症状通常包括单一关节发
  • 漏斗漏斗是一个筒型物体,被用作把液体及幼粉状物体注入入口较细小的容器。在漏斗咀部较细小的管状部分可以有不同长度。漏斗通常以不锈钢或塑胶制造,但纸制漏斗亦有时被使用于难以
  • 自杀用塑料袋自杀用塑料袋(英语:Suicide bag、exit bag、hood),或称解脱袋、自杀袋,是一款自带拉绳的大塑料袋,用以予人透过惰性气体窒息(英语:Inert gas asphyxiation)来自杀。它一般会通过充入
  • 重晶石重晶石(英文:Barite或Baryte),主要成分为硫酸钡(BaSO4),颜色从白色至透明,同时也是钡的主要来源之一。而在重晶石矿物群(英语:baryte group)主要由重金石、天青石、硫酸铅矿(英语:Anglesi
  • 东柴东柴郡(Cheshire East)是英国柴郡的一个单一管理区和自治市镇,当地政府是东柴郡议会。2009年4月1日随着英国兰当地政府结构改革而成立。根据2011年英国人口普查,东柴郡有370,127
  • M2迫击炮M2迫击炮为美国于1940年代制造的滑膛前装式迫击炮。美国于1920年代开始进行迫击炮规格审查,主要目的为进行新型步兵轻型支援武器测试,在经过各种迫炮的测试以后决定购买法国兵
  • 八边形数八边形数是能排成八边形的多边形数,是有形数的一种。其概念类似三角形数及平方数,不过八边形数和三角形数及平方数不同,所对应的形状没有旋转群对称性(英语:Rotational symmetry)
  • 瓦萨奇-卡什国家森林瓦萨奇-卡什国家森林(英语:Wasatch-Cache National Forest)是一座美国国家森林,面积1,607,177英亩(6,504.01平方千米),主要位于犹他州北部地区(占81.23%),剩下小部分位于爱达荷州东南
  • 阿非利加 (罗马行省)阿非利加行省(拉丁语:Africa)是罗马共和国及其继承者罗马帝国在今北非的一个行省,范围约在今日的突尼斯北部及利比亚西部靠地中海沿岸的地区。阿非利加行省是好几个罗马帝国时代
  • 2008年亚足联U-16锦标赛2008年亚足联U-16锦标赛是由亚洲足球联合会组织的AFC U-17锦标赛的第13场比赛,于2008年10月4日至19日在乌兹别克斯坦塔什干举行。亚足联U-17锦标赛2008年资格赛于2007年10月1