Merge nucleic/lucid-river-toad-6efj into dev

This commit is contained in:
2026-07-29 03:20:15 -07:00
parent df63a5fc00
commit 8f081ab58a
2 changed files with 10 additions and 2 deletions
+6 -1
View File
@@ -123,7 +123,12 @@ CLSID in it, so `CoCreateInstance` has nothing to name. The only registered cocl
IDLs belong to the compat surface (`WSLCCompatSessionManager` and its factory) and to the WSL IDLs belong to the compat surface (`WSLCCompatSessionManager` and its factory) and to the WSL
service proper (`LxssUserSession`, `LxssUserSessionInBox`). service proper (`LxssUserSession`, `LxssUserSessionInBox`).
The likely answer is that one of those objects also implements the internal interface — COM **Answered on hardware (WSL 2.9.4): yes.** `WSLCCompatSessionManager`
(`a9b7a1b9-0671-405c-95f1-e0612cb4ce8f`) — the same class the SDK itself activates — answers a QI
for `IWSLCSessionManager`. One object, two faces. `IWSLCVirtualMachine` was refused by every
class, confirming §13.1's retraction against the machine rather than against an IDL.
The hypothesis was that one of those objects also implements the internal interface — COM
objects routinely expose several — so `--internal` activates each and QIs for the internal IIDs. objects routinely expose several — so `--internal` activates each and QIs for the internal IIDs.
It **never calls a method**, so a vtable mismatch cannot crash it, and QI alone answers the It **never calls a method**, so a vtable mismatch cannot crash it, and QI alone answers the
question. `--internal-call` then calls `GetVersion` (slot 3) and `ListSessions` to confirm the question. `--internal-call` then calls `GetVersion` (slot 3) and `ListSessions` to confirm the
+4 -1
View File
@@ -52,7 +52,10 @@ internal static class InternalComProbe
("IWSLCSessionManager", new Guid("82A7ABC8-6B50-43FC-AB96-15FBBE7E8760"), ("IWSLCSessionManager", new Guid("82A7ABC8-6B50-43FC-AB96-15FBBE7E8760"),
"THE one that matters — OpenSessionByName/EnterSession/ListSessions, i.e. reattach"), "THE one that matters — OpenSessionByName/EnterSession/ListSessions, i.e. reattach"),
("IWSLCSession", new Guid("EF0661E4-6364-40EA-B433-E2FDF11F3519"), ("IWSLCSession", new Guid("EF0661E4-6364-40EA-B433-E2FDF11F3519"),
"ListContainers/OpenContainer — enumeration and the container half of reattach"), "ListContainers/OpenContainer. EXPECTED to fail here, and its failure is not a gap: a "
+ "session is RETURNED BY the manager (OpenSessionByName/EnterSession/CreateSession), "
+ "not QI'd off it. Probed only to confirm the manager is a manager and not a "
+ "do-everything object"),
("IWSLCVirtualMachine", new Guid("B5E2D8F1-9A3C-4E6B-8D1F-7C4A2E9B6D3A"), ("IWSLCVirtualMachine", new Guid("B5E2D8F1-9A3C-4E6B-8D1F-7C4A2E9B6D3A"),
"GetId → the VM GUID an AF_HYPERV bind needs. Per the IDL only a factory the SYSTEM " "GetId → the VM GUID an AF_HYPERV bind needs. Per the IDL only a factory the SYSTEM "
+ "service owns can produce one, so this is EXPECTED to fail — probed anyway, " + "service owns can produce one, so this is EXPECTED to fail — probed anyway, "