http://bugs.winehq.org/show_bug.cgi?id=20296
--- Comment #54 from Christoph Hohmann reboot@gmx.ch 2011-04-10 17:15:11 CDT --- I think you mixed up the DcomLaunch service and dllhost.exe a bit in the first part.
What I understood is:
1. services.exe is the service manager. When it is started it checks the registry for services that have to be started. Services are executables (.exe). I think this is already implemented in Wine.
2. DcomLaunch is a service (Found in the registry under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services) - Service name: DcomLaunch - Display name: DCOM Server Process Launcher - Commandline: svchost.exe -k DcomLaunch
3. svchost.exe is a wrapper for services in DLLs. It get the registry entry specified as the -k parameter from HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\SvcHost, splits it into service names, gets the service DLLs from ServiceDll in HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services%servicename\Parameters, loads the DLL in the Parameters as a DLL, and invokes the service entry point (ServiceMain). I think this already implemented in Wine.
4. rpcss.dll implements the DCOM Server Process Launcher service. When it receives a request to start a surrogate it launches dllhost.exe. This seems to be only a part of what the DLL contains, but that is what would be needed for League of Legends.
5. dllhost.exe loads the DLL that implements the COM interface and calls CoRegisterSurrogateEx.
I have no idea how the communication between the application and the COM Server Process Launcher works. That it provides a COM object itself that is used by ole32.dll to start the surrogate server could be possible.
services.exe and svchost.exe already seems to do what they do on Windows. So all that is needed is to implement rpcss.dll, add it to the registry and find a way to tell it to start a dllhost.exe process from the application that needs a COM server. DcomLaunch itself is always running, it gets the AppID it should pass to dllhost.exe when it receives a request to start a COM server.
Maybe it would be better to ask on the wine-devel mailinglist how Wine's COM implementation works. There seems to be some support for LOCAL_SERVER that is not using DllSurrogate, so there has to be a way to wait for a COM server that provides a CLSID to become available.