http://bugs.winehq.org/show_bug.cgi?id=20296
--- Comment #44 from Christoph Hohmann reboot@gmx.ch 2011-04-06 15:38:01 CDT ---
From what I understood from the Wine code and reading some MSDN is that there
are 2 different ways for an LOCAL server.
The first is that the AppID entry in the registry specifies an executable, that provides a COM object of the class. When an object of a CLSID is requested by a process that has not been started yet, the executeable that is specified in the registry is started, it then registers an object of the class with the COM system and the requesting process can then access it. Wine seems to support this and it starts the executable.
The second possibility is, that the AppID contains DllSurrogate. In this case there is no executeable to start. Only a DLL specified in the CLSID entry. Windows then starts the program dllhost with the AppID as a parameter. This program loads the DLL, creates an instance of the COM object and registers it as a local server in the COM system. This method is not supported by Wine. So to support this, Wine would have to check for the DllSurrogate entry and then start dllhost.exe. I have tried to run the original dllhost.exe of a Windows XP on Wine and it seems to load the DLL and then fails to register the COM object because a call is not implemented. Wine would probably have to implement dllhost.exe and the missing call in the COM system.
For League of Legends it is used to run some code as a Windows service with administrative priviledges. This process then gives the priviledges to the League of Legends launcher, because it has to write to the Program Files directory of League of Legends, what a normal user process can not do with User Account Control. As far as I know, Wine has no access control to files. It doesn't really need that, because it is already a user process that has to follow the access control of the host operating system. So I guess the code in the DLL has no effect on Linux anyway, and it does not matter if the DLL is loaded in process or into a service process started by dllhost.exe.
To make League of Legends run out of the box DllSurrogate would have to be supported. But maybe it would also be possible to simply modify the registry entry of the CLSID to load the DLL in process instead of patching wine.