xpmgr has been updated to remove the "Activate Windows" shortcuts if --SetConfirmationID is successful.
xpmgr has been updated to give experimental support for Office 2003. Most of the groundwork is laid out (mostly being copy pasted from how XP is interfaced since Microsoft did the same thing), but from my testing it just crashes when you try to do anything with Office. My guess is that the client ID (0xC475) doesn't work on Office, like it did on Windows.
xpmgr has been updated to use the TDM-GCC compiler instead of MSVC, to cut ties with Microsoft-provided tools (since they're gonna get rid of XP compilation support at some point).
xpmgr has been updated to fix a bug where error codes weren't being displayed. Turns out that CLion has a better pre-compile warning system than VS, because VS didn't bother to tell me that adding an HRESULT to a string does nothing to it.
I was able to figure out the initial error that was created when trying to access anything related to Office 2003, because the CLSID that pointed to MSO.DLL was incorrect. However, I'm struggling to figure out the next error code it gave, being 80004005, a generic error code. Specifically, it happens at this line: "HRESULT status = CoCreateInstance(O2003_CLSID, nullptr, CLSCTX_INPROC_SERVER, O2003_IID, reinterpret_cast<void **>(&O2003_LicenseAgent));" And the variables used here are: "static CLSID O2003_CLSID = { 0x812034D2, 0x760F, 0x11CF, { 0x93, 0x70, 0x00, 0xAA, 0x00, 0xB8, 0xBF, 0x00 } }; static IID O2003_IID = { 0x00194002, 0xD9C3, 0x11D3, { 0x8D, 0x59, 0x00, 0x50, 0x04, 0x83, 0x84, 0xE3 } };" The CLSID is correct, and the IID matches with what is shown in the typelibs via oleview.exe, part of the Windows SDK. However, it gives the same error as if I put in an incorrect IID.
The correct CLSID according to the exported DllGetClassObject is 2DF8D054-5BFA-101B-BDE5-00AA0044DE52 (notice how similar to TypeLib ID) however, since it's not exposed directly or registered, you need a workaround to make it work (add fake registry ProgID, use CoRegisterClassObject, or LoadLibrary/GetProcAddress/DllGetClassObject/IClassFactory::CreateInstance approach) *based on google search, i'm not an expert* and IID probably need to be IUnknown, before running QueryInterface and hand it to O2003_IID