本地过程调用

✍ dations ◷ 2025-01-23 09:22:58 #进程间通信

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

相关

  • 醚(汉语拼音:mí,英语:Ether)是具有醚官能团的一类有机化合物。醚官能团是由一个氧原子连接两个烷基或芳基所形成,醚的通式为:R–O–R。它还可看作是醇或酚羟基上的氢被烃基所取代
  • 抽水马桶抽水马桶,又称冲水马桶,约翰·哈林顿(Dr. John Harington)被认为是第一个发明抽水马桶的人,1778年由约瑟夫·布拉梅(英语:Joseph Bramah)发明,是以杠杆原理把定量水由水箱拉下,把排泄
  • 长部,为汉字索引中的部首之一,康熙字典214个部首中的第一百六十八个(八划的则为第二个)。就正体中文中,长部归于八划部首,而简体中文则归在四划。长部只以左方为部字。且无其他部
  • span class=chemf style=white-space:nowrap;Csub16/sub十六烷(英语:hexadecane、cetane)是化学式为C16H34的烷烃。十六烷由16个碳原子直链组成,头和尾被3个氢原子连着,中间2个。十六烷值用以量度柴油的易燃性。在压缩下,十六烷非常易燃
  • 地球的板块构造构造板块(英语:tectonic plates)是岩石圈(地壳和上层地幔)的一部分。一般板块厚约100公里(62英里),材料组成有两种主要类型:海洋地壳(硅、镁组成的硅镁层)和大陆地壳(硅、铝组成的硅铝层
  • Diels-Alder反应狄尔斯–阿尔德反应(英语:Diels–Alder reaction)又叫Diels–Alder反应、双烯加成反应,其中狄尔斯又译作第尔斯–阿尔德又译作阿德尔、阿德耳。狄尔斯–阿尔德反应是一种有机反
  • 齐语齐语可以指:
  • 韦科韦科(Waco /ˈweɪkoʊ/ WAY-koh)是位于美国得克萨斯州中部的一座城市,也是麦克伦南县的县治所在。贝勒大学位于韦科,也是当地最大的雇主。它距离达拉斯市南部大约七十英哩,在布
  • 欧洲组织欧洲政党(英语:European political party) 是运行于欧洲各国和欧洲联盟机构内部的一种政党组织。它们受欧盟法律监督并得到欧盟的拨款作为活动经费。它们往往由各国政党共同创
  • 印度尼西亚日治时期荷属东印度日占时期,是指从1942年3月直至1945年第二次世界大战结束,日本帝国一直保持着对印度尼西亚的占领。日本的占领是第一次对于荷兰人在印度尼西亚统治的真正挑战—结束