当不作为本地系统运行时,命名pipe道访问被拒绝

我正在处理WCF应用程序创build命名pipe道的问题,然后由IIS中运行的asp.net应用程序访问。 我没有写WCF应用程序,我只是想支持它。

应用程序在本地系统环境中运行,而IIS应用程序在本地Windows帐户的上下文中运行,该帐户是本地pipe理员组的成员。 当asp.net应用程序尝试访问命名pipe道时,它将会遇到Access Deniedexception(AddressAccessDeniedException),我不知道在哪里:-(这是我迄今为止所做的debugging问题:

  • 在Process Explorer中确认命名的pipe道存在并且在WCF应用程序启动时被创build。
  • 我通过在Process Explorer中searchBaseNamedObjects来完成这项工作,并最终确定了\ BaseNamedObjects \ net.pipe:Exxxxx == …我可以确认的是我感兴趣的命名pipe道
  • 由于pipe道存在,我专注于IIS,并认为它必须是一个权限问题。 所以,我改变了asp.net应用程序作为本地系统运行,而不是…问题消失了
  • 切换回使用本地的Windows帐户,问题又回来了
  • 比较PE中的工作(本地系统)与非工作(本地用户帐户)令牌的比较…非工作丢失SeAssignPrimarytokenPrivilege
  • 我认为我们在这里find了问题的原因,但即使修改了本地策略(并且在重新启动后确认权限在令牌中),问题仍然存在
  • 将所有其他用户权限和安全选项与工作机器进行比较,他们之间没有什么不同
  • 确认w3wp的实例正在运行Elevated并且UAC被禁用(Elevated = Yes并且UAC Virtualization =不允许在任务pipe理器中)
  • 使用AccessChk比较非工作机器上命名pipe道的权限,它们与工作机器上的权限相同
  • 检查WCF应用程序的清单文件,并将其与工作的文件进行比较,但在那里没有差别

所以,在这里我是…我知道pipe道存在,我知道这是一种权限问题,但所有的权限检查就好了。 我错过了什么? Windows上有一些常规设置可能会阻止用户访问所有命名pipe道吗?

我知道我可以改变“匿名访问命名pipe道”设置,但我不想改变这个,因为它没有在工作机器上configuration,所以这不是真的让我的根本原因。 我也见过一些提及的“远程访问命名pipe道”在谷歌,但我不知道这是否是一个错字…是不是命名pipe道本地的定义??

很明显,我已经做了一些我自己的研究,并发现了一些SOpost和其他博客post,其中包括下面的post,但没有一个帮助我find根本原因。

https://blogs.msdn.microsoft.com/amitlale/2007/01/29/addressaccessdeniedexception-cause-and-solution/

https://stackoverflow.com/questions/41683714/wcf-named-pipe-server-fails-with-addressaccessdeniedexception