【问题标题】:Creating service-based COM instance from CLSID从 CLSID 创建基于服务的 COM 实例
【发布时间】:2016-09-10 07:21:04
【问题描述】:

Windows Subsystem For Linux(Win10 中的新技术)使用LxssUserSession 服务。此服务未记录,但它用作 WSL 的 API(bash.exe 使用此服务运行 ELF)。如我所见,它是 COM 的一部分:注册表中有 CLSID 记录,其中有 AppID。而AppIDLocalService 记录:LxssUserSession

我对COM不熟悉,但如果我理解正确的话,应该有这个服务支持的COM组件。由于没有 ProgID,我无法从脚本创建此 COM 的实例,但我尝试使用 OleView 实例化它。但是,它报告 CoCreateInstance 返回错误。如何调试此错误?是不是不能创建 COM 组件并将其用于不同的东西(即有一些其他接口)。通常可以使用未记录的 COM 组件吗?我可以跟踪对此服务的bash.exe 调用(类似于logger.exeltrace,但对于COM?)

一些背景: 这是我得到的错误:http://s32.postimg.org/wpthro5kl/error.png

bash.exe != /bin/bashbash.exe 是连接到LxssUserSession 并要求它运行/bin/bash 的PE(Win64 bin 应用程序)(这是​​ELF(Linux 应用程序!)。bash.exe 最好称为“WLS.exe”,但对于某些人来说他们称之为bash.exe的原因。
请看这里:https://msdnshared.blob.core.windows.net/media/2016/04/LXSS-diagram-1024x472.jpg,这是它的标题http://s32.postimg.org/khjjf81th/bash.png。 所以,我确信bash.exe 使用 COM 连接到LxssUserSessionLxssUserSession 使用 Pico (Psp..) 函数将 ELF 作为“pico 进程”启动(参见此处https://blogs.msdn.microsoft.com/wsl/2016/04/22/windows-subsystem-for-linux-overview/)。 两者都没有记录,但我相信我可以以某种方式使用 COM,但是我收到了我作为第一个链接提供的错误:(

【问题讨论】:

  • 我已经发布了关于 bash 的错误和评论,请查看我的帖子的新版本
  • 谢谢,这很有趣,而且比我最初阅读的 WSL 描述更有意义。所以可能是真正的 COM 问题,与 WSL 本身无关。我从来没有使用过 COM,所以可能帮不上什么忙,抱歉 - 但 Google 搜索错误代码后出现了一些结果,提示您可能需要调用 CoSetProxyBlanket。

标签: windows com ole windows-subsystem-for-linux


【解决方案1】:

通过在组件服务配置中将默认模拟级别设置为“模拟”,我能够使用OleView 实例化对象(您可能需要重新启动)。我现在可以看到ILxssSession 界面。但是由于没有IDispatch,也没有TLB,所以我无能为力:方法对我来说是未知的(

【讨论】:

    【解决方案2】:

    我只是在做同样的项目。我所做的是对“bash.exe”进行逆向工程以查看它是如何工作的。目前,我可以创建LxssUserSession 的保险并在其中调用一些方法。但它仍然不完整。你可以找到它的来源here

    【讨论】:

      猜你喜欢
      • 2019-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-07
      • 1970-01-01
      相关资源
      最近更新 更多