【问题标题】:UWP CreateFile2 ERROR_NOT_SUPPORTED_IN_APPCONTAINER on opening a deviceUWP CreateFile2 ERROR_NOT_SUPPORTED_IN_APPCONTAINER 打开设备
【发布时间】:2019-03-20 15:55:54
【问题描述】:

我们有在 UWP 应用程序中 P/Invoked 的 C++ dll。该 dll 使用 CreateFile 函数打开一个 USB 设备。

hDevice = CreateFile("\\\\.\\EZUSB_FX2", GENERIC_WRITE, 0, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0, NULL);

一切正常,除了我们的应用程序必须侧加载。

展望未来,我们已将 C++ dll 中的大部分不合规函数替换为合规函数。

但是,当使用 CreateFile2 打开设备时,它会失败并显示错误代码 ERROR_NOT_SUPPORTED_IN_APPCONTAINER

hDevice = CreateFile2(L"\\\\.\\EZUSB_FX2", GENERIC_WRITE, 0, OPEN_EXISTING, NULL);

在 UWP 中通过 Win32 调用打开设备的推荐方式是什么?

【问题讨论】:

    标签: uwp device


    【解决方案1】:

    派生自documentation

    当从 Windows 应用商店应用调用时,CreateFile2 被简化。您只能打开 ApplicationData.LocalFolder 或 Package.InstalledLocation 目录中的文件或目录。您无法打开命名管道或邮槽或创建加密文件 (FILE_ATTRIBUTE_ENCRYPTED)。

    这就是您收到错误的原因。 如果你想在你的 USB 设备中创建文件,更好的方法是使用 UWP RemovableDevices api。有关更多详细信息,请参阅此tutorial。如果你坚持使用win32 api,也许你需要考虑一下desktopbridge技术。

    【讨论】:

    • 这很令人失望。我想知道 UWP 在什么逻辑下允许 DeviceIoControl 但首先不允许像 CreateFile 这样的函数?我们已经有一个侧面加载的应用程序,考虑使用桌面桥是倒退的一步。使用 UWP API 超出了我们的能力范围。我们宁愿继续使用 CreateFile 和 Side Load 我们的应用程序。希望MS能在不久的将来给出解决方案。
    猜你喜欢
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多