[Back to TSR SWAG index] [Back to Main SWAG index] [Original]

    {
    Hmm ... My initial attempt was to disable the Int 19h handler, which is
    called when you hit ctrl-alt-del; but it didn't work.  So here's a TSR
    that "cheats": if you hit "ctrl" and "alt" and then "del", it flags
    "ctrl" and "alt" as "not down" and so your system never sees the reboot
    condition. }

    {$M $0400, $0000, $0000}
    {$F+}

    program noreboot;
    uses dos;

    const ctrlbyte = $04;  { Memory location $0040:$0017 governs the statuses of }
          altbyte  = $08;  { the Ctrl key, Alt, Shifts, etc.  the "$04" bit }
                           { handles "Ctrl"; "$08" handles "Alt". }

    var old09h: procedure;                          { original keyboard handler }
        ctrldown, altdown, deldown: boolean;
        keyboardstat: byte absolute $0040:$0017;    { the aforementioned location }

    {-----------------------------------------------------------------------------}

    procedure new09h; interrupt;  { new keyboard handler: it checks if you've
                                    pressed "Ctrl", "Alt" and "Delete"; if you
                                    have, it changes "Ctrl" and "Alt" to
                                    "undepressed".  Then it calls the
                                    "old" keyboard handler. }
    begin
      if port[$60] and $1d = $1d then ctrldown := (port[$60] < 128);
      if port[$60] and $38 = $38 then altdown  := (port[$60] < 128);
      if port[$60] and $53 = $53 then deldown  := (port[$60] < 128);
      if ctrldown and altdown and deldown then begin
         keyboardstat := keyboardstat and not ctrlbyte;  { By killing the "Ctrl" }
         keyboardstat := keyboardstat and not altbyte;   { and "Alt" bits, the   }
         end;                                            { "reboot" never runs   }
      asm
        pushf
        end;
      old09h;
      end;

    {-----------------------------------------------------------------------------}

    begin
      getintvec($09, @old09h);
      setintvec($09, @new09h);  { set up new keyboard handler }
      ctrldown := false;
      altdown := false;         { Set "Ctrl", "Alt", "Delete" to "False" }
      deldown := false;
      keep(0);
      end.

[Back to TSR SWAG index] [Back to Main SWAG index] [Original]