|Day||Start Time||End Time||Task Time||Day Total||Task(s)||Result(s)|
|11/01/2017||12:00:00||23:00:00||11:00:00||11:00:00||- Before having a deeper look at NTLM+RPCRT problems during Word 2010 installation, I've chosen a different approach: testing other Office apps (PowerPoint viewer 2010, Excel & Word viewers) by supposing that, after all, they will use most of the same feature as Word 2010, and if I can fix some of them with these applications, the work burden for Word 2010 will be less.|
- PPT viewer 2010 shows "fixme:(dll/win32/shell32/CShellLink.cpp:1314) (0232FC98): WIN32_FIND_DATA is not yet filled." traces in debug log. I want to fix those.
- Start playing around with the CShellLink class in shell32, detecting other problems/possible bugs/stuff that seem easy to be implemented.
|By looking at the official .LNK documentation (MSDN): https://msdn.microsoft.com/en-us/library/dd871305.aspx , and being cross-checked with other documentation found on the Internet, I see that our CShellLink code (C++-converted from Wine) misses a lot of stuff. I want to fix most of that, especially since the two JIRA issues: https://jira.reactos.org/browse/CORE-7158 and https://jira.reactos.org/browse/CORE-9236 show missing stuff in CShellLink.|
|12/01/2017||12:00:00||23:00:00||11:00:00||11:00:00||Continuing working + documenting on CShellLink, starting studying the tests failures in shell32_apitest:CShellLink and in shell32_winetest:shelllink||Play also with the shell-lists APIs in shlwapi.dll (SHAdd/Find/RemoveDataBlock, etc...), needed for correctly supporting the extra data binary blocks in shell links.|
|13/01/2017||15:00:00||23:00:00||8:00:00||8:00:00||Cont.||As part of testing/implementing code in CShellLink, I added tests for the PathUnExpandEnvStrings API exported by shlwapi.dll : Commit r73536: https://svn.reactos.org/svn/reactos?view=revision&revision=73536 - Commit r73541: https://svn.reactos.org/svn/reactos?view=revision&revision=73541 to improve the output of the existing shell32_apitest:CShellLink.|
|Day||Start Time||End Time||Task Time||Day Total||Task(s)||Result(s)|
|01/12/2016||20:00:00||21:40:00||1:40:00||1:40:00||Per Sylvain Petreolle's suggestion of using "WINEDBUG=+relay wine setup.exe", I run Word 2010 installation on such a Wine 1.6.x setup under XUbuntu to obtain the traces of all the API calls performed by the installation.||Of 5GB of log trace, only ~= 454kB of it is useful, corresponding to the trace of the MSI action "CAInitSPPTokenStore.x86" and of the SLInitialize call.|
|01/12/2016||21:40:00||00:00:00||2:20:00||4:00:00||Redo Word 2010 installation on ReactOS and trace it using WinDbg, and compare with Wine's trace.||I now know what exactly fails (this is RegCreateKeyExW(HKEY_USERS, L"S-1-5-20\\..."), and S-1-5-20 is the SID of the "NetworkService" account):|
- On Wine, this call succeeds:
0035:Call advapi32.RegCreateKeyExW(80000003,6bed48e8 L"S-1-5-20\\SOFTWARE\\Microsoft\\OfficeSoftwareProtectionPlatform\\Policies\\PayloadOverride\\",00000000,00000000,00000000,000f003f,051bdc74,051bdc84,051bdcb4) ret=6bf07141
0035:Ret advapi32.RegCreateKeyExW() retval=00000000 ret=6bf07141
- On ReactOS, this same call fails:
001b:7c665a10 8bff mov edi,edi
kd> ?? lpSubKey
wchar_t * 0x6bed48e8
001b:7c665bda 8b45fc mov eax,dword ptr [ebp-4]
kd> ?? Status
According to Sylvain Petreolle (and from what I've seen from Wine's code), Wine just merely creates the "S-1-5-20" subkey under HKEY_USERS, making it valid for all the lifetime of the wineserver (and of Word 2010 installation). When the installation finishes, the wineserver exits and these registry keys vanish into thin air (and we see for the nth time that Wine likes to hack stuff).
On real NT (and in ROS), "S-1-5-20" is the registry hive of the "NetworkService" account that is loaded under HKEY_USERS when a service using that account is started. We currently do not support this in ReactOS, therefore the RegCreateKeyExW call just fails, and the Word 2010 installation bails out.
|02/12/2016||14:30:00||19:00:00||4:30:00||4:30:00||Retesting https://jira.reactos.org/browse/CORE-9838 patches with buildbot first.|
|02/12/2016||20:45:00||21:00:00||0:15:00||4:45:00||Final validation tests, formatting, and commit in r73413.|
|04/12/2016||21:00:00||01:00:00||4:00:00||4:00:00||Improving my advapi32_apitest for checking the environment block associated to a service process|
|05/12/2016||13:00:00||17:40:00||4:40:00||4:40:00||- Factor out the service helper functions from advapi32_apitest (from Jacek + Thomas) and slightly improve them, to be used in my test.|
- Reorganize the test around those functions.
|Commits r73430, r73431 and r73432.|
|08/12/2016||15:00:00||17:00:00||2:00:00||2:00:00||Start investigating ways to create a not-so-invading hack for trying to load NetworkService's user profile (see work of 01/12/2016)||Creation of https://jira.reactos.org/browse/CORE-12541 as part of the work.|
|15/12/2016||13:00:00||19:00:00||6:00:00||6:00:00||Investigate more into user profile creation / (un)loading code in userenv.dll||Creation of an apitest for (Un)LoadUserProfile API : https://svn.reactos.org/svn/reactos?view=revision&revision=73458|
|22/12/2016||19:00:00||22:00:00||3:00:00||3:00:00||Improving (Un)LoadUserProfile API because I want to use it for a possible hack to get HKU\S-1-5-20 being loaded.||Work in progress|
|22/12/2016||16:45:00||19:00:00||2:15:00||7:15:00||Testing a possible hack (manually asking userenv.dll to create the profiles for LocalService and NetworkService, then manually load HKEY_USERS\S-1-5-18 and HKEY_USERS\S-1-5-20)||Works, now MSI action "CAInitSPPTokenStore.x86" passes with success! But the following actions: "CAInstallSppPlugin.x86", "CAInstallLicenses" and "CAPopulateSPPCache" fail.|
|22/12/2016||21:00:00||00:00:00||3:00:00||10:15:00||Start investigating why said MSI actions fail.||Work in progress. Concerning "CAInstallSppPlugin.x86", we fail just after a call to EnumerateSecurityPackagesW, whereas on Wine, the EnumerateSecurityPackagesW call is followed by a call to AcquireCredentialsHandleW(L"NTLM"). After a bit further analysis I understood that we fail because *our* secur32.dll does *NOT* include the NTLM package, while Wine's does!!!! See https://jira.reactos.org/browse/CORE-12601 and also https://jira.reactos.org/browse/CORE-11520 .|
|25/12/2016||15:50:00||18:00:00||2:10:00||2:10:00||More work on (Un)LoadUserProfile|
|25/12/2016||19:20:00||23:17:00||3:57:00||6:07:00||Finishing validating my hack + code cleanup + more work on (Un)LoadUserProfile||Hack committed in r73486 and r73487.|
|27/12/2016||15:00:00||17:00:00||2:00:00||2:00:00||More work on (Un)LoadUserProfile|
|27/12/2016||19:50:00||20:52:00||1:02:00||3:02:00||More monitoring of Word 2010 installation on ROS with my service-profiles hack + Samuel's secur32.dll and ntlmssp.dll (adapted from sspi-bringup branch)|
|Day||Start Time||End Time||Task Time||Day Total||Task(s)||Result(s)|
|04/11/2016||15:43:00||15:44:00||0:01:00||0:01:00||Creating JIRA Epic "Word 2010 support for ReactOS Community Edition"||https://jira.reactos.org/browse/CORE-12279|
|04/11/2016||16:26:00||16:37:00||0:11:00||0:12:00||Gathering existing reports concerning Word (possibly some older versions of it too...) and link them to the JIRA Epic. See the epic for more info.|
|07/11/2016||17:00:00||20:20:00||3:20:00||3:20:00||Testing diverse monitoring tools on ROS (to be possibly used to trace/diagnose Word 2010 installation, etc)||ProcMon not supported atm (needs fltmgr); filemon OK; regmon crashes in some kernel registry callback (needs fixing??)|
|07/11/2016||22:30:00||23:00:00||0:30:00||3:50:00||Creating clean installations of local MSVC build of ReactOS, and Windows Server 2003 SP2, for testing/comparisons purposes.||Takes some time (I needed to install twice Windows because it wasn't really clear, from my ISOs, which ones was SP1 and the other SP2, and I did the wrong choice first)|
|07/11/2016||23:00:00||23:15:00||0:15:00||4:05:00||Creating an ISO image of my Office 2010 DVD (to be able to perform many reinstallations for testing purposes)|
|07/11/2016||23:15:00||23:40:00||0:25:00||4:30:00||Checking whether Word install starts on Win2k3|
(--> Install a capable browser to be able to use MS website, then dl and install MSXML 6)
|- It needs MSXML6 + MSXML6 SP1 (dl. at www.microsoft.com/en-us/download/details.aspx?id=3988 and 6276, respectively) (more precisely, version 6.10.1129.0 or above) . OK after the installation.|
- Note that ReactOS doesn't need that a-priori, because our MSXML 6 (imported from Wine) claims to be >= SP1.
|07/11/2016||23:50:00||02:30:00||2:40:00||7:10:00||Dry-run of Word 2010 installation on ReactOS with WinDbg attached (to see quickly the first evident problems and adapt my attack approach)||Installation fails at ~= 70% ; lots of rpcrt4 debug trail, minor msxml trail; some file-not-found errors before the installation error.|
|09/11/2016||16:35:00||17:00:00||0:25:00||0:25:00||Testing diverse monitoring tools on ROS (part 2): ApiMon (Rohitab)||Numerous hangs (certainly due to Win32k painting/messages) --> Won't use it yet|
|09/11/2016||17:00:00||20:06:00||3:06:00||3:31:00||1. Checking the RPCRT4 wine debug flood.|
2. To be sure, install MS' MSXML 6 (+ its SP1) instead of our Wine's version (Wine's suggestion for installing Word 2010, via winetricks of course, is to add dotnet20 (unneeded for the install proper), msxml6 from MS, and add some extra fonts (unrelevant for the install)).
3. Reinstalling Word 2010 and see in more details what happens (first in the debug log).
|1. - Relates to NdrCorrelationInitialize / NdrCorrelationFree. See https://forum.winehq.org/viewtopic.php?f=8&t=26176 - Looks inoffensive at first, so just comment out the FIXME dprints for now... 2. Actually I noticed that using MS' MSXML or ours, doesn't change anything. 3. I get: (H:\trunk\reactos_clean\sdk\lib\rtl\path.c:682) RtlQueryEnvironmentVariable_U returned 0xc0000100 err:(H:\trunk\reactos_clean\dll\win32\msi\action.c:501) Execution halted, action L"CAInitSPPTokenStore.x86" returned 1603 Then installation stops there (it deletes the installed files, that were otherwise correctly copied). Also, some: (H:\trunk\reactos_clean\dll\win32\userenv\profile.c:1288) Invalid profile handle or errors described in https://jira.reactos.org/browse/CORE-11972 do appear. - Mark suggested me to disable MSI Rollback (see https://msdn.microsoft.com/en-us/library/windows/desktop/aa368307(v=vs.85).aspx), and check for MSI logging: https://support.microsoft.com/en-us/kb/223300|
|09/11/2016||22:29:00||01:30:00||3:01:00||6:32:00||1. Inspired by http://www.daknetworks.com/index.php/blog/240-errorcode-16030x643-office-2010-wont-install-on-windows-10 I'm also going to check that "ProfileList" stuff , which is by the way, not correctly filled by ReactOS (the default profiles are missing there). 2. Retesting again Word 2010 installation with Wine-style debugging turned on (see http://reactos.org/wiki/Debugging#WINE_Style) for msi, rpc and ole (could be useful, especially the first one; use "set DEBUGCHANNEL=..." from a console and then run the setup in it), and applying Mark's suggestions too.||1. Not satisfying results 2. Takes a veeeeeeery long time. NOTE to self: http://stackoverflow.com/questions/1006060/windbg-command-output-to-text-file 3. Will redo using VirtualKD instead (advice from Amine).|
|10/11/2016||19:30:00||20:00:00||0:30:00||0:30:00||Set up VirtualKD (latest version)||ok|
|10/11/2016||20:04:00||23:53:00||3:49:00||4:19:00||Restarting my traces. Add a breakpoint at msi!ITERATE_Actions+0x166 (action.c@501)|
I enforce continuing the setup by setting to ERROR_SUCCESS any possible failure return codes.
|1. Much much faster (NOTE for people: use "ReactOS (VBoxDebug)" at the boot screen ; I'm gonna love it xD). NOTE: See also https://blogs.technet.microsoft.com/odsupport/2010/12/30/troubleshooting-office-installation-failures/ Interestingly this link gives a case of example (see section "ANALYZE LOGS EXAMPLE 2 – Access 2010 standalone install") where my encountered "CAInitSPPTokenStore.x86" error happened and might be due to some problem with the "network service" and/or the profile stuff I was a bit looking at, yesterday. 2. Finally I get my results! The installer stops prematurely, because it tries to start the OSPPSVC service, but the latter: a- Is not really started because it seems that there is a problem with the "NetworkService" special account; b- When the service is forced to start, it cannot find the "_wtof" export in msvcrt.dll: (H:\trunk\reactos_clean\dll\ntdll\ldr\ldrpe.c:1057) Failed to snap _wtof (for this latter problem MSI returns the error code 0x65b / 1627: ERROR_FUNCTION_FAILED If the setup execution is continued without any other modifications, it finally fails with error: 0x643 / 1603: ERROR_INSTALL_FAILURE: Fatal error during installation.. 3 or 4 manual return code fixups need to be done (in ) to make the|
|10/11/2016||23:53:00||23:57:00||0:04:00||4:23:00||Create JIRA report https://jira.reactos.org/browse/CORE-12335 for missing export _wtof and link to existing reports related to this problem|
|10/11/2016||23:57:00||00:10:00||0:13:00||4:36:00||Trying starting installed MS Word.||First observation is that the setup program is restarted as a new "configuration step" for MS Word, possibly due to the earlier OSPPSVC failures. Again the setup configuration attemps to restart the service (without success). I'm trying again to fixup by hand the return error codes.|
|11/11/2016||00:10:00||00:36:00||0:26:00||0:26:00||Attempt to finish that extra "configuration step"||It really needs the OSPPSVC service to correctly run, otherwise stuff fails, and the "configuration step" is restarted when one tries to restart Word again. At the end it asks to restart the computer; when restarting Word the same suite of events is repeated. If one doesn't choose to restart, finally Word says that it cannot verify its license, and that the installation needs to be repaired.|
|11/11/2016||22:45:00||00:20:00||1:35:00||2:01:00||Testing proposed patch for _wtof at https://jira.reactos.org/browse/CORE-12335 with a new Word 2010 reinstallation (with full msi tracing)||Patch committed in r73206. This time there are no problems concerning missing exports needed by the OSPPSVC service. However the installation still fails.|
|12/11/2016||00:20:00||01:20:00||1:00:00||1:00:00||Studying in more detail why the OSPPSVC service sometimes fails to start:|
- Checking event logs;
- Tracing with FileMon in Win2k3 and in ROS.
|It appears that the service is not started with correct environment block, therefore per-user variables such as %USERNAME%, %USERPROFILE%, or %ALLUSERSPROFILE% are not initialized (the service in particular searches some files inside "%ALLUSERSPROFILE%\Microsoft\OfficeSoftwareProtectionPlatform\", but since the %ALLUSERSPROFILE% env-var is not initialized, it ends up searching inside "C:\WINDOWS\System32\%ALLUSERSPROFILE%\Microsoft\OfficeSoftwareProtectionPlatform\" which does not exist (well, actually it is wrongly created at setup time too...)). We need to fix/finish implementing user-logging and initializing a correct environment block before calling CreateProcessAsUser from inside the Services Control Manager (cc. Eric Kohl).|
|13/11/2016||18:30:00||20:00:00||1:30:00||1:30:00||Start investigating service account logon (part 1)|
|13/11/2016||23:00:00||01:45:00||2:45:00||4:15:00||Start investigating service account logon (part 2)||Add an advapi32_apitest service to test the validity of the environment blocks inside services. I see that indeed, the %ALLUSERSPROFILE% and co. envvars are inexistent. I therefore added a local modification in services.exe to properly initialize the env blocks.|
|14/11/2016||16:52:00||21:00:00||4:08:00||4:08:00||1. Cont. service account logon investigation.|
2. Isolate the msi module that exports the "CAInitSPPTokenStore" function (== msi action), and pass it through a disassembler to analyze what are the different steps taken to run it.
|1. Temporarily disable (aka. workaround) some code to make *all* the services start with the LocalSystem account (but with correct environment block). Needed because lsasrv.dll/samsrv.dll do not support special checks when LogonType == Service, and with DomainName == "NT AUTHORITY".|
2. I see that it stops/starts the OSPPSVC service (and changes its config), but nothing that weird (there's also a call to "SlInitialize" in some OSPP helper dll).
|14/11/2016||22:30:00||01:45:00||3:15:00||7:23:00||Investigate why the installation also fails *before* starting!||Taking traces with FileMon. I note that strangely, the osppsvc service doesn't seem to be really started on ReactOS and stuff actually fail before; the trace shows that "setup.exe" seems to copy twice the osppsvc.exe file (why??)|
==> Need to investigate further.
|15/11/2016||14:50:00||22:00:00||7:10:00||7:10:00||Investigating the SCM (part 1): service startup; command line|
|16/11/2016||15:40:00||22:00:00||6:20:00||6:20:00||Investigating the SCM (part 2):|
1. Fixing command line arguments passing (see also https://jira.reactos.org/browse/CORE-9838)
2. Investigating service stopping
|18/11/2016||15:30:00||19:45:00||4:15:00||4:15:00||Investigating service stopping (2)||Creating https://jira.reactos.org/browse/CORE-12412 for the services stuff.|
|23/11/2016||21:00:00||23:00:00||2:00:00||2:00:00||Investigating service stopping (3)|
|24/11/2016||19:00:00||21:30:00||2:30:00||2:30:00||Testing Office 2010 install with my local service stop fixes.|
|25/11/2016||16:00:00||19:00:00||3:00:00||3:00:00||Stepping through MSI action "CAInitSPPTokenStore.x86" to discover where the installation step fails now (part 1)||The installation now fails inside SLInitialize, which is a function exported from OSPPCEXT.DLL and used inside the installer. This function is partly encrypted, and is decrypted at runtime before being executed, so further investigations why something fails inside will be further complicated.|
|25/11/2016||21:00:00||22:00:00||1:00:00||4:00:00||Stepping through MSI action "CAInitSPPTokenStore.x86" to discover where the installation step fails now (part 2)|
|27/11/2016||19:35:00||22:00:00||2:25:00||2:25:00||Find a strategy for tracing SLInitialize, or at least monitor its API calls, in Win2k3 and in ReactOS||I've first checked what I can get using Rohitab's API Monitor; I'll need to find a reliable way to do the same in ReactOS. It is quite hard to capture the traces when SLInitialize is called, without taking all the useless rest (stuff before the call, etc...) that makes everything slow down to crazy. Aka. I try to find a way to only get what I want without waiting 12 hours tracing junk stuff, making my VM crawl and going out of memory...|
Alas I also don't have much time this week (at least from 28 nov to 2 dec) to really work on ReactOS due to personal matters...