XIV Docs

Updater (ffxivupdater.exe)

Note

This documentation is incomplete.

This is the program that actually processes the patch files and applies them to the game or boot data.

Arguments #

Note

Just like the other executables, it requires you to pass these using the SqexArg format.

Processes #

During update execution, the launcher copies the updater executable into your UserPath/downloads directory, where it is then ran. I’m assuming this is to work around a Windows limitation where you can’t update the executable on disk, so it has to be ran from a location where it could “update” itself.

ShowMode 2 #

This is the regular retail patching mode, and it runs ffxivupdater64.exe in a hidden window that’s just there for message processing. I’m not sure yet if ffxivupdater.exe is the one actually downloading the patch files yet. The launcher just reflects ffxivupdater’s progress, and passes it along to the web form in the form of a json callback. You can set a breakpoint at 0x183278 (tested on the launcher ver 3/20/2022) and see that it first hits that area when updating. There is three seperate printf strings, which I’m guessing is the three “modes” of patch progress:

Offset String Data
1400e6df0 {version:"%s",remaintime:"%s",progress:%6.2f} u"{version:"%s",remaintime:"%s",progress:%6.2f}"
1400e75a0 {version:"%s",downloadsize:"%s",remaintime:"%s",speed:"%s",progress:%6.2f}
1400e76c0 {version:"%s",remaintime:"%s",speed:"%S",progress:%6.2lf}

(The offsets are tested on 3/20/2022) The first one appears very minimal but might be the one used when it’s not downloading/installing any patches yet, and just gathering information. The second one appears to be the regular “downloading” patch mode, considering it says “downloadsize” right there. The last one would appear to be when it’s actually applying the patches, as it has “remaintime” as well as “speed”.

IPC #

It looks like this communicates exclusively through Win32 IPC (SendMessage). I haven’t deciphered all of the messages yet, but here is a few interesting ones I’ve seen used:

Alternative Implementations #