本地过程调用

✍ dations ◷ 2025-02-24 00:45:47 #进程间通信

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

相关

  • 异丙托溴铵异丙托溴铵(Ipratropium bromide),商品名“Atrovent”,属于一种支气管扩张药。本品通常用于治疗慢性阻塞性肺病(COPD)以及哮喘,通常以吸入剂(英语:metered-dose inhaler)或雾化剂(英语:n
  • 美国细胞生物学学会美国细胞生物学学会(American Society for Cell Biology),简称ASCB, 是一个成立于1960年的学会。它在ASCB官方网站上的宗旨宣示如下:ASCB 是一个涵盖性的,国际性的,由研究细胞与
  • 阿瑟尔期阿瑟尔期(英语:Asselian)是二叠纪的第一个时期,年代大约位于298.9–293.52百万年前。
  • 卢克索酒店卢克索酒店(Luxor Hotel)位于内华达州天堂市赌城大道,是一个以全主题设计的大型度假村酒店。酒店于1991年动工,同年动工的还有金银岛酒店和现在美高梅金殿酒店。卢克索酒店以古
  • 普拉特河普拉特河(英语:Platte River、/plæt/)是内布拉斯加州的一条主要河流,长约500公里,由北普拉特河和南普拉特河汇合而成。
  • 东南苏拉威西东南苏拉威西省(印尼语:Provinsi Sulawesi Tenggara,简称Sultra)是印度尼西亚苏拉威西岛上的一个省,位于东南半岛上,另辖布顿、穆纳、卡巴那和沃沃尼等岛屿以及其他小岛。首府位于
  • 思南县思南县是中华人民共和国贵州省铜仁市下属的一个县,位于贵州东北部,乌江斜贯,武陵山腹地,梵净山西侧。隋为务川县地,明置安化县,为思南府治,1913年改设思南县。思南县下辖3个街道办
  • 水肿水肿(edema、/ɪˈdimə/、oedema、dropsy、hydropsy;希腊语οἴδημα, "swelling"),又称浮肿,是指人体皮下空腔因体液异常堆积所产生的肿大症状。水肿是指血管外的组织间隙中
  • 各国劳动力人数列表这是一个各国劳动力人数列表,大部分数据基于世界概况。
  • 美国工会美国的工会受法律认可为代表劳工利益的组织。工会行使集体协商权,为会员谈判劳动条件、工资、福利;并监督、纠正雇主违法或违背劳动契约的管理行为,必要时以争议行为作为谈判筹