Eigentlich sind (bis auf TeraSpace 8Byte/64-Bit) doch alle Pointer 128-Bit (also 16-Byte) groß.

Intern wird der Typ und die Berechtigung noch woanders gespeichert, da kommt man tatsächlich nicht mehr dran.
Wenn man einen Pointer nicht mit den Pointer-Befehlen modifiziert, zerstört man die Eigenschaft als Pointer.
Daher kann man niemals aus einem SpacePointer einen Prozedur-/Systempointer oder umgekehrt machen.

Die Funktion GetSpacePointerFromSystemPointer liefert nur die Adresse eines UsrSpc, der am Objekt hängt und nicht das Objekt selber. Hat das Objekt keinen UsrSpc gibts auch keine Adresse.
(nur so am Rande bemerkt).