从 CLSID 创建基于服务的 COM 实例

Creating service-based COM instance from CLSID

Windows Linux 的子系统(Win10 中的新技术)使用 LxssUserSession 服务。此服务未记录,但用作 WSL 的 API(bash.exe 将此服务用于 运行 ELF)。如我所见,它是 COM 的一部分:注册表中有 CLSID 条记录 AppIDAppIDLocalService 条记录:LxssUserSession

我对COM不熟悉,但如果我理解正确的话,这个服务应该有COM组件支持。我无法从脚本创建此 COM 的实例,因为没有 ProgID,但我尝试使用 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 and here is its headers http://s32.postimg.org/khjjf81th/bash.png。 所以,我确定 bash.exe 使用 COM 连接到 LxssUserSession 并且 LxssUserSession 使用 Pico (Psp..) 函数以 "pico process" 启动 ELF(参见此处 https://blogs.msdn.microsoft.com/wsl/2016/04/22/windows-subsystem-for-linux-overview/). 两者都没有记录,但我相信我可以以某种方式使用 COM,但我收到错误,这是我首先提供的 link:(

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

我只是在做同样的项目。我所做的是逆向工程 "bash.exe" 看看它是如何工作的。目前,我可以创建一个 LxssUserSession 的保险并在其中调用一些方法。但它还没有完成。你可以找到它来源 here.