【问题标题】:How XFS finds WFPOpen?XFS 如何找到 WFPOpen?
【发布时间】:2017-05-14 07:06:37
【问题描述】:

我将为我自己的硬件(可能是虚拟的)实现一个 SPI。正如我发现(也许我弄错了)当应用程序调用 WFSOpen 时,XFS 在 SPI 中调用 WFPOpen。但是这个“in SPI”是指哪里呢?也许我应该给出在注册表某处找到 WFPOpen 的 dll 文件的地址。我还认为应该在 HKLM\XFS\Service_Provider\\DllName 中给出 dll 路径。是这样吗?够了吗? XFS 是否对此注册表路径和密钥敏感并使用它来查找 SPI 在哪里? 我已经完成了上述操作,但我得到了 WFS_ERR_SERVICE_NOT_FOUND。 XFS 似乎没有在 dll 中查找函数。 有什么问题?

我认为最好发送 xfs 日志以便您能够更好地处理问题。 https://www.dropbox.com/s/6wwbjfpxxibjnl1/9603071652%20-%20XFSTrace.7z?dl=0

【问题讨论】:

  • 您是否从您的 SPI dll 模块中导出了 WFSOpen?您的 SPI 必须导出文档中声明的全套 XFS 函数。然后 XFS 管理器可以从您在注册表中定义的路径加载您的 dll,并为每个函数调用 GetProcAddress。
  • 您真的是指 WFSOpen 而不是 WFPOpen?我认为我应该只将 WFPOpen 和其他 WFP 函数的实现放在我的 SPI DLL 中。现在你说我也应该实现 WFSOpen 的主体?!
  • 当然,你是对的,我是说 WFP 职能
  • 好的,我做到了。我把 spi dll 放在那里,但似乎有问题导致我收到错误。我可以参考哪些文件?你觉得怎么了?
  • 出现此类错误的原因有很多。可能是 dll 导出、依赖项、注册表中的 SPI 注册等有问题。您可以访问 XFS 日志吗?可能有更多关于您的错误原因的详细信息。而XFS documentation 只是关于如何处理 XFS 的一个很好的信息来源。

标签: xfs cen-xfs


【解决方案1】:

当您从应用程序执行 WFSOpen 时,您设置要打开的逻辑服务名称。 XFS 管理器将尝试在 Windows 注册表中找到此名称,位于:

HKEY_USERS/.DEFAULT(或启动会话的用户)/XFS/LOGICAL_SERVICES/。

对于每个逻辑服务名称,都有一个带有“provider”变量的注册表项。

利用这个“provider”变量的值,XFS MANAGER 转到:

HKEY_LOCAL_MACHINE/SOFTWARE/XFS/value_for_this_provider/。

在此文件夹中,变量“dllname”包含要为此 SPI 加载的 dll。

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-27
    相关资源
    最近更新 更多