本地过程调用

✍ dations ◷ 2025-12-08 19:35:32 #进程间通信

本地过程调用(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作为本地通信的方式。

相关

  • 酸血症酸中毒(英语:Acidosis)是指血液中或其他身体组织中酸度升高的现象(即氢离子浓度升高)。如果不作进一步的说明,“酸中毒”通常指的是血浆的酸度。一般人们用动脉血的pH值来判定是否
  • 氢溴酸氢溴酸是溴化氢的水溶液,其pKa为−9,酸性比盐酸强,但比氢碘酸弱。它是最强的无机酸之一。室温下饱和氢溴酸的浓度为68.85%(质量比),恒沸混合物中含47.38%质量HBr,沸点126°C。氢溴
  • HuHU、Hu或hu可以指:
  • 截流站截流站为一种建设于河道上,并用于拦截水流的水工构造物与环保工程。截流站设立的目的在于,在河道将受污染的河水排放至大海前,预先透过截流站将污水截流,并运送至污水处理厂净化
  • 1145年重要事件及趋势重要人物
  • 西阿塞拜疆西阿塞拜疆省(波斯语:آذربایجان غربی)是伊朗三十一个省份之一。面积37,463公里,在所有省份中排行第11。人口约2,949,400(2005年数据);首府位于乌尔米耶市。该省居民大
  • 刘建康刘建康(1917年9月1日-2017年11月6日),中国鱼类学家、生态学家,中国淡水生态学奠基人、鱼类实验生物学主要开创者之一。江苏吴江人。1938年毕业于东吴大学生物系,获理学士学位。194
  • 塞纳省塞纳省(法语:département de la Seine)是法国历史上的一个省份,编号75。由塞纳河得名。1790年设立时称巴黎省,1795年改称塞纳省。所辖区域是此前法兰西岛行省的一部分。1968年撤
  • 延津县延津县是中华人民共和国河南省新乡市下辖的一个县。延津县位于河南省北部,开封市西北部。西距新乡37公里,南望郑州93公里,东南至开封50公里,北距安阳130公里。区域南北宽45.5公
  • 近交系动物近交系动物(英语:Inbred Strain Animals)是指经过至少连续20代的、完全由同胞兄弟姐妹交配、或者亲代与子代交配而培育的、近交系数大于99%的动物品系。在近交系中,所有个体都可