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 命名管道创建的主要内容,如果未能解决你的问题,请参考以下文章

windows命名管道

Windows进程间通信—命名管道

无法在 Windows 7 中的命名管道内创建进程

打破 ReadFile() 阻塞 - 命名管道 (Windows API)

Windows DuplicateHandle 命名管道句柄奇怪错误 183“文件已存在”

使用 cmd.exe 或 PowerShell 或 Python 从 Windows 命名管道中读取