C++ 用于Windows通用应用程序的IPC,用于启用调用所有Win32 API

C++ 用于Windows通用应用程序的IPC,用于启用调用所有Win32 API,c++,windows,ipc,tcp-ip,kmdf,C++,Windows,Ipc,Tcp Ip,Kmdf,我正在Windows 10上开发一个与自定义设备驱动程序、NTFS文件系统和DirectX 12交互的应用程序。该应用程序是一个Windows通用应用程序编写的C++,WRL,XAML和DirectX。对于DirectX,我选择了SwapChainPanel控件,应用程序的DirectX部分工作得非常好。这个应用程序是侧装的,所以我比需要通过商店的应用程序有更多的自由度 不幸的是,Windows通用应用程序在API调用方面有很多限制。WinRt API受到青睐 以下是要调用以替换Win32 AP

我正在Windows 10上开发一个与自定义设备驱动程序、NTFS文件系统和DirectX 12交互的应用程序。该应用程序是一个Windows通用应用程序编写的C++,WRL,XAML和DirectX。对于DirectX,我选择了SwapChainPanel控件,应用程序的DirectX部分工作得非常好。这个应用程序是侧装的,所以我比需要通过商店的应用程序有更多的自由度

不幸的是,Windows通用应用程序在API调用方面有很多限制。WinRt API受到青睐

以下是要调用以替换Win32 API的WinRt API列表:

此外,Windows Universal Apps可以调用分区到应用程序的Win32 API(但不是分区到桌面的API),如每个函数的文档和头文件中所示。以下是一个链接:

此外,Windows通用应用程序现在允许使用Winsock API

然而,我仍然没有我最喜欢的(和必要的API)

特别是,我需要在没有用户交互的情况下将文件读写到所有位置(而不是Windows Universal App沙盒限制的位置)。此外,我需要向我的多个设备驱动程序发送ioctl

我可以放弃Windows通用应用程序,选择WPF。然而,我有一个触摸密集型应用程序,我需要触摸工作得很好。此外,我还想知道,代表微软的WPF缺乏修复和承诺。我考虑过其他UI框架,但没有一个像Windows通用应用程序那样有前途

Microsoft在Windows 10中为通用应用程序提供了两条路径,允许调用所有Win32函数(用于侧加载的应用程序)

代理Windows运行时组件 通过TCPIP实现IPC

我已经编写了一个代理windows运行时组件,它运行良好。但是,解决方案要求混合使用C#应用程序,我不需要/不希望这样,因为我需要应用程序的快速加载时间,并且不希望引入CLR

下一个选项是IPC到TCPIP。我会使用Fast TCP Loopback,正如在博客文章中所解释的:Windows Server 2012 TCP Loopback Fast Path的Fast TCP Loopback性能和低延迟。我想链接到它,但我在我的(非常慷慨)两个链接的第一篇文章的限制

我有几个问题:

1) 如果我走这条路线,我应该将IPC放在XAML控件/按钮和应用程序其余部分之间吗?这将允许应用程序的其余部分严格使用Win32。或者,我应该将IPC放在应用程序和对特定函数的调用之间,这些特定函数不属于Win32允许的范围


2) 我一直在寻找一个库或论文,其中包含用TCPIP实现IPC的代码和/或想法。然而,到目前为止,关于IPC和TCPIP的文章似乎只是简单地描述了winsock编程,这是我已经知道的。我喜欢编写IPC,但更喜欢经过测试的解决方案。这需要完美的工作,我宁愿有一些时间在它的代码。有没有人使用过或听说过可以共享的IPC-over-TCPIP代码或设计?

COM/DCOM呢?@Jonathan这将是一个优雅的解决方案。我还可以直接通过C++调用Win32 DLL。这两种技术似乎都是允许的。最好澄清一下,COM服务器和/或Win32 DLL中允许使用所有Win32 API。这肯定会使事情简单化。就我个人而言,我从来没有听说过这样的限制,也不认为存在这样的限制。另一方面,Windows本身严重依赖DLL和com对象。@Jonathan Windows Universal Apps可以调用分区到应用程序的WinRT API和Win32 API。此外,还为较新的操作系统版本添加了Winsock。本机Windows Universal应用程序可以调用本机分区到应用程序空间的Win32 API。侧面加载的应用程序也可以毫无怨言地调用分区到桌面的Win32 API,但该行为被称为未定义。托管应用程序必须使用pInvoke调用Win32 API。通过使用IPC,我们可以克服侧面加载应用程序的这一限制,但它仅限于TCPIP和代理运行时应用程序。我指的是您认为可能存在的DLL方面的限制。我相信由于其沙箱特性,通用应用程序存在局限性。COM/DCOM呢?@Jonathan这将是一个优雅的解决方案。我还可以直接通过C++调用Win32 DLL。这两种技术似乎都是允许的。最好澄清一下,COM服务器和/或Win32 DLL中允许使用所有Win32 API。这肯定会使事情简单化。就我个人而言,我从来没有听说过这样的限制,也不认为存在这样的限制。另一方面,Windows本身严重依赖DLL和com对象。@Jonathan Windows Universal Apps可以调用分区到应用程序的WinRT API和Win32 API。此外,还为较新的操作系统版本添加了Winsock。本机Windows Universal应用程序可以调用本机分区到应用程序空间的Win32 API。侧面加载的应用程序也可以毫无怨言地调用分区到桌面的Win32 API,但该行为被称为未定义。托管应用程序必须使用pInvoke调用Win32 API。通过使用IPC,我们可以克服侧面加载应用程序的这一限制,但它仅限于TCPIP和代理运行时应用程序。我指的是您认为可能存在的DLL方面的限制。我认为,由于其沙箱特性,通用应用程序存在局限性。
CreateFile()
ReadFile()
WriteFile()
DeviceIoControl()
CloseHandle()