有没有办法绕过 UWP 对某些 API 的限制?
Is there a way to bypass UWP restrictions on certain APIs?
我已经尝试创建 Windows-10 C++ UWP xaml 应用程序。
我选择这个平台的动机是避免使用多种语言(C# 用于 WPF gui,C++-CLI 用于互操作)并且只使用 C++ 和一些 C++-CX。
我的目标是创建一个用于调试 PCI 驱动程序的内部工具,而不是创建某种高度安全的 windows 存储应用程序。
在我看来,UWP 应用程序在使用某些 WIN API 功能时受到很大限制。例如,我不能使用我的静态库,因为它们使用 CreateFile 和 DeviceIoControl。我收到一条错误消息:error C3861: 'CreateFileA': identifier not found
.
即使我以某种方式设法 link 我的本地库(通过在 .cpp 文件中隐藏这些函数的使用),这些函数似乎在运行时失败。
有没有办法绕过这些限制?
我只想将此平台用于其 C++ UI 功能。
抱歉告诉你这个坏消息。事实上,如果您不符合上述限制,您的选择就不是 UWP。改用 WPF。
UWP 应用旨在进行集中控制。因此,您可以通过 Store 分发它们,限制它们的文件系统访问,管理内存占用和生命周期等。您可以将其视为尝试停止 Win32 API(它相当陈旧,容易受到黑客攻击且无政府主义)并使用沙盒作为替代者。
许多 "old" 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 服务器上。
我已经尝试创建 Windows-10 C++ UWP xaml 应用程序。
我选择这个平台的动机是避免使用多种语言(C# 用于 WPF gui,C++-CLI 用于互操作)并且只使用 C++ 和一些 C++-CX。
我的目标是创建一个用于调试 PCI 驱动程序的内部工具,而不是创建某种高度安全的 windows 存储应用程序。
在我看来,UWP 应用程序在使用某些 WIN API 功能时受到很大限制。例如,我不能使用我的静态库,因为它们使用 CreateFile 和 DeviceIoControl。我收到一条错误消息:error C3861: 'CreateFileA': identifier not found
.
即使我以某种方式设法 link 我的本地库(通过在 .cpp 文件中隐藏这些函数的使用),这些函数似乎在运行时失败。
有没有办法绕过这些限制? 我只想将此平台用于其 C++ UI 功能。
抱歉告诉你这个坏消息。事实上,如果您不符合上述限制,您的选择就不是 UWP。改用 WPF。
UWP 应用旨在进行集中控制。因此,您可以通过 Store 分发它们,限制它们的文件系统访问,管理内存占用和生命周期等。您可以将其视为尝试停止 Win32 API(它相当陈旧,容易受到黑客攻击且无政府主义)并使用沙盒作为替代者。
许多 "old" 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 服务器上。