Das API wird natürlich auch vom System selber benutzt.
Hierzu wird im System eine Pointer-Liste auf Programmobjekte bei Systeminstallationen und PTF-Updates verwaltet, die sog. QINSEPT.
Wenn man mit C/C++ programmiert, kann man auf diese Liste zugreifen und sich somit die Zeiten zur Initialisierung des Systempointers sparen.
Über die QINSEPT wird auch z.B. von den HLL-Runtimes (RPG/LE, COBOL, usw.) auf die DB-Routinen zugegriffen.
Man kann sich also darauf verlassen, wenn man einen CALL QInsept(IndexOfQCMDEXC) durchführt, dass dieser auch klappt.

Die obige Meldung "Es wurde versucht, auf ein nicht mehr vorhandenes Objekt oder Teile des Objekts Bezug zu nehmen." deutet eben auf den fehlenden/korrupten Pointer des QSYGETPH hin womit dann eben die Berechtigung aus DDM nicht mehr geprüft werden kann und somit nicht von Erfolg gekrönt wird.

Eine Reparatur mit Bordmitteln ist mir nicht bekannt.
Man kann auch kein MI/C-Programm zur Korrektur der QINSEPT mehr schreiben, da das Objekt über die System-Domäne geschützt ist.

Der Link deutet ja genau auf das Problem des "AiUpcallProgram" hin.