Windows 8 命名管道创建
Posted
技术标签:
【中文标题】Windows 8 命名管道创建【英文标题】:Windows 8 named pipe creation 【发布时间】:2011-10-09 21:26:36 【问题描述】:如何在具有 AppContainer 完整性级别的 Windows 8 中创建命名管道?
【问题讨论】:
我想你在找***.com/questions/18982221/… 【参考方案1】:正如 Pavel Minaev 在 some answer 的一个 cmets 中提到的,WinRT 中没有命名管道(对于 Metro 应用程序,对于桌面应用程序,管道与 Windows 7 中的相同):
例如,命名管道不存在,内存映射文件也不存在。 有套接字(包括服务器套接字),但是当连接到 localhost,只能连接到同一个应用。
您可能对the WinRT API 感兴趣,包括sockets。
【讨论】:
如果套接字满足您的需求,则需要在 Package.appxmanifest 文件中添加“Internet(客户端和服务器)”功能。双击它并转到声明选项卡。 这真的不是答案,因为问题是关于“Windows 8 with AppContainer”而答案是关于“WinRT”。可以在 AppContainer 完整性级别拥有桌面应用程序,并且命名管道可用于 Win8 中的桌面应用程序。不幸的是,我不知道如何创建对高完整性应用程序和“AppContainer”应用程序都可用的管道 - 我得到“访问被拒绝”,所以问题仍然存在。 @Ezh 感谢有效且有争议的反对票。如果您能找到更多相关信息,请提供您自己的答案。【参考方案2】:谈到 WinRT - 你真的无法创建命名管道。
谈论在 AppContainer 完整性级别下运行的 Windows 8 桌面应用程序 - 您可以通过常规 WinAPI 函数创建命名管道。问题是默认情况下只有具有相同 AppContainer ID 的应用程序可以访问它(换句话说 - 只有您自己的应用程序的实例)。但事实上,如果您有处于高或中完整性级别的进程 - 您可以从该进程创建管道并降低其完整性级别,以便 AppContainer 中的应用程序可以使用它。
在此处查看示例:http://msdn.microsoft.com/en-us/library/windows/desktop/hh448493(v=vs.85).aspx
甚至更多 - 从具有高完整性级别的桌面应用程序,您可以使用 dll 注入将您的 dll 注入 WinRT 应用程序,然后再次使用 WinAPI 创建管道。因此,管道在 WinRT 中被拒绝不是因为操作系统设计,而只是因为 WinRT 中缺少接口。
【讨论】:
以上是关于Windows 8 命名管道创建的主要内容,如果未能解决你的问题,请参考以下文章
打破 ReadFile() 阻塞 - 命名管道 (Windows API)