从 CLSID 创建基于服务的 COM 实例
Creating service-based COM instance from CLSID
Windows Linux 的子系统(Win10 中的新技术)使用 LxssUserSession
服务。此服务未记录,但用作 WSL 的 API(bash.exe
将此服务用于 运行 ELF)。如我所见,它是 COM 的一部分:注册表中有 CLSID
条记录 AppID
。 AppID
有 LocalService
条记录:LxssUserSession
。
我对COM不熟悉,但如果我理解正确的话,这个服务应该有COM组件支持。我无法从脚本创建此 COM 的实例,因为没有 ProgID,但我尝试使用 OleView
实例化它。然而,它报告 CoCreateInstance
返回错误。如何调试这个错误?难道是不能创建 COM 组件并将其用于不同的东西(即有一些其他接口)。通常是否可以使用未记录的 COM 组件?我可以跟踪 bash.exe
调用此服务(类似 logger.exe
或 ltrace
但对于 COM?)
一些背景:
这是我收到的错误:http://s32.postimg.org/wpthro5kl/error.png
bash.exe
!= /bin/bash
。 bash.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.
Windows Linux 的子系统(Win10 中的新技术)使用 LxssUserSession
服务。此服务未记录,但用作 WSL 的 API(bash.exe
将此服务用于 运行 ELF)。如我所见,它是 COM 的一部分:注册表中有 CLSID
条记录 AppID
。 AppID
有 LocalService
条记录:LxssUserSession
。
我对COM不熟悉,但如果我理解正确的话,这个服务应该有COM组件支持。我无法从脚本创建此 COM 的实例,因为没有 ProgID,但我尝试使用 OleView
实例化它。然而,它报告 CoCreateInstance
返回错误。如何调试这个错误?难道是不能创建 COM 组件并将其用于不同的东西(即有一些其他接口)。通常是否可以使用未记录的 COM 组件?我可以跟踪 bash.exe
调用此服务(类似 logger.exe
或 ltrace
但对于 COM?)
一些背景: 这是我收到的错误:http://s32.postimg.org/wpthro5kl/error.png
bash.exe
!= /bin/bash
。 bash.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.