TSR-Programme arbeiten oft nach der Logik: Beim ersten Aufruf installieren, beim nächsten wieder aus dem Speicher entfernen. Wurde nach dem Aufruf von TsrIsInst am Anfang des Programms daher festgestellt, daß sich bereits eine Kopie des Programms resident im Speicher befindet, wird man diese Kopie in der Regel wieder deaktivieren wollen.
Dazu muß zunächst einmal die Funktion TsrCanUnist aufgerufen werden. Sie stellt fest, ob das Programm überhaupt reinstalliert werden kann, denn nicht immer ist dies möglich. Das gilt vor allem, wenn nach der Installation des Programms noch ein anderes TSR-Programm installiert wurde, das die Interrupt-Vektoren des Timers, der Tastatur etc. ebenfalls umleitet. Denn auch dieses Programm wird bei seiner Installation die Adressen der bisherigen Handler ermittelt haben und diese innerhalb seiner eigenen Interrupt-Handler anspringen. Bei den bisherigen Handlern handelt es sich aber um die Handler des zu deinstallierenden TSR-Programms, die damit aus dem Speicher entfernt würden. Da es jedoch leider keine Möglichkeit gibt, das andere TSR-Programm von der Entfernung dieser Handler in Kenntnis zu setzen, werden sie weiterhin aufgerufen, was nur eines zur Folge haben kann: den Absturz des Systems.
TsrCanUninst überprüft deshalb, ob noch alle umgeleiteten Interrupts direkt auf die Interrup-Handler der bereits installierten Kopie des TSR-Programms verweisen und liefert dementsprchend TRUE oder FALSE zurück. Nur bei TRUE darf das Programm anschließend TsrUninst aufrufen, um die installierte Kopie wieder aus dem Speicher zu entfernen.
Dabei werden zunächst wieder die alten Interrupt-Handler für die Interrupts 08h, 09h, 13h, 28h und 2Fh installiert. Anschließend wird der Speicher des Programms wieder freigegeben, damit er von DOS wieder an andere Programme verteilt wreden kann, Das Programm hinterläßt dadurch keinerlei Spuren im Speicher.
|