有没有办法绕过某些API的UWP限制?

时间:2018-05-03 08:52:24

标签: uwp win-universal-app windows-10-universal c++-cx c++-winrt

我已经尝试过创建Windows-10 C ++ UWP xaml应用程序。

我选择这个平台的动机是避免使用多种语言(C#表示WPF gui,C ++表示CLI用于互操作),只使用C ++和一些C ++ - CX。

我的目标是创建一个内部工具来调试PCI驱动程序,而不是创建某种高度安全的Windows应用程序。

在我看来,在使用一些WIN API函数时,UWP应用程序非常严格。例如,我不能使用我的静态库,因为它们使用CreateFile& DeviceIoControl的。我收到一条错误消息:error C3861: 'CreateFileA': identifier not found

即使我以某种方式设法链接我的本机库(通过隐藏在.cpp文件中使用这些函数),这些函数似乎在运行时失败。

有没有绕过这些限制? 我只想将此平台用于其C ++ UI功能。

2 个答案:

答案 0 :(得分:4)

抱歉这个坏消息。实际上,如果您不符合上述限制,则您的选择不是UWP。改为WPF。

UWP应用程序用于集中控制。因此,您可以通过Store分发它们,限制其文件系统访问,管理内存占用和你可以把它想象成试图停止使用Win32 API(相当陈旧,容易出现黑客和无政府主义)并使用沙盒作为取代者。

答案 1 :(得分:2)

许多“旧的” win32函数仍然可用或在Windows 1803中可用。以UWP API为目标当然不同于Win32 API。 Microsoft在以下位置提供了官方支持的Win32 API的列表: https://docs.microsoft.com/en-us/uwp/win32-and-com/win32-apis

CreateFileA不在该列表上,但CreateFile2在该列表上。

对于设备访问,UWP在名称空间Windows.Devices.Custom中提供了功能

LoadLibrary \ GetProcAddress也可以作为解决方案。

大多数限制仅适用于上传到商店的UWP应用,不适用于并排加载的应用。您只需创建该软件包并将其放在本地网络共享或http服务器上即可。