Investigation of Adobe Lightroom CC after the AI Analyst. (Patreon)
Content
Reference.
https://github.com/sander110419/lightroom-cc-on-linux
What did it get right
A working (not sure how well), copy of Adobe Lightroom CC running under wine. That fact that it got this far is quite impressive.
Identified the limitation of the following
- kernelbase: Missing Function SetThreadpoolTimerEx
- uiautomationcore: Missing Function UiaDisconnectAllProviders
- Missing dll’s ndfapi/wkscli/thumbcache
- d2d1 : Missing support for CLSID_D2D1ColorManagement
- hnetcfg: Missing Enum container class for FwRules.
There is a bunch of winetricks dlls that where installed (namely msxsml6/gdiplus), the rest we don’t really care about to much.
What did it get wrong
The fact that it used a binary patch to force a load a dll, where a simple override of “builtin” would of actually solved the issue. (aka mplat is the case). It clearly over complicated the solution.
Mplat.dll on window doesn’t have a function call MFCreateSampleCopierMFT, so adding a forward from mplat.dll to mf.dll is just wrong. The question here is where is this being calling from and why?
When running it said that interface “{e26b366d-f998-43ce-836f-cb6d904432b0}” was missing. Instead of trying to looking a windows registry or the Windows SDK headers. It created a new DLL (adobe_e26b366d.c) and attempted at guess what what interface looked like. Turns out after a registry/SDK search, rstcom.dll is missing and need to support interface RealTimeStylus. What is produced was completely garbage.
The direction of exports for wkscli were incorrect. The implementation for the needed function are in wkscli and then netapi32 points to the wkscli. For testing, it worked.
What did it miss
The fact it installed some dlls via winericks, it overlooked what functionality was missing in gdiplus and msxml6 to name just two. If it found missing function X, lets override now then to see if we get further would of being nice information. This is what a developer would do.
Whats completed (wine 11.10)
- (upstream) Missing UiaDisconnectAllProviders function
- (upstream) Missing ndfapi dll.
- (upstream) htnetcfg enum iterator for firewall rules.
- (upstream) Missing wkscli.dll
- (upstream) Missing thumbcache.dll
- (wine-staging) Missing SetThreadpoolTimerEx function (Patch from bug https://bugs.winehq.org/show_bug.cgi?id=57980 )
What still todo.
- d2d1 : Missing support for CLSID_D2D1ColorManagement
- rstcom.dll : Missing.
Things that would of improved the AI.
Importing of a fresh registry of windows, for possible GUID lookup.
Importing of the Windows SDK.
Before using winetrick working out what was missing, so it can recorded what else need fixing.
Have access to a windows system, so it can scan exports of a dll to actually workout direction of exports. (or a good web reference that already captures this information). Knowing if its solution of adding function X to a dll is actually correct.
Known how to use WINEDLLOVERRIDES or wine registry to change “Builtin/native” etc. Using a binary patch to force a load of a specific DLL is just wrong.
Final
So far, one regression was fixed for the next wine release, from the code that was accepted.
It will be interesting to see where AI takes these sort of investigations in future. I’m just happy that the solutions is suggested where easy enough to do and move forward.