Area: Quik_Bas Msg: #534 Date: 06-16-92 06:26 (Public) From: Steve Gartrell To: All Subject: Ctrl-Alt-Del snatcher
'NOWARM.BAS follows: DECLARE SUB SetVect () DECLARE SUB RestVect () ' 'BIG FAT NOTE: Observe the sequence of calls. SetVect first, 'THEN ON UEVENT. When done, UEVENT OFF _first_, then RestVect. 'Even in the event handler. If you wish to tinker with this '('cuz you don't believe me) don't complain when your INT 09h 'vector points to where a PDS handler used to be. This works 'for stand alone executables in both QB and PDS. Can be made 'into a QLB and compiled/linked in either QB or PDS. Works 'inside the PDS environment. Will LOCK YOUR SYSTEM up if 'you attempt to run it in inside the QB environment. Tested 'on a Tandy 1000TX (Phoenix BIOS) and a USAFlex 80386 (AMI BIOS). 'Released to the public domain this 15th day of June, 1992 'by Stephen K. Gartrell. SetVect ON UEVENT GOSUB RebootHandler UEVENT ON CLS 'Text print loop here so you can try the reboot handler!!! DO PRINT "I would like to remind you that even "; PRINT "cereal puts up with a few flakes...|-}" LOOP WHILE INKEY$ <> "q" UEVENT OFF RestVect END RebootHandler: VIEW PRINT 4 TO 7 CLS 2 LOCATE 5, 10 PRINT "WARNING!! Rebooting now will result in loss of all data prior"; LOCATE 6, 10 PRINT " to saving to disk!!! Continue with rebooting process? (y) ? "; DO: ans$ = UCASE$(INKEY$): LOOP UNTIL LEN(ans$) IF ans$ = "Y" THEN RESET UEVENT OFF RestVect CLS 2 LOCATE 5, 17 PRINT "Please press the CTRL-ALT-DEL key sequence again."; DO: LOOP UNTIL LEN(INKEY$) END IF VIEW PRINT RETURN ;;CALTDEL.ASM released to public domain this 15th ;;day of June, 1992 by Stephen K. Gartrell. Uses ;;a bunch of registers, but protects all of them. ;;USAGE: SetVect installs CTRL-ALT-DEL bypass with ;;OPTIONAL call to QB/PDS UEVENT flag setter ;;SETUEVENT. RestVect restores routing to whatever ;;key handler PDS/QB was using at the time of the ;;SetVect call. That is an important detail; think ;;about it. More than one keyhandler _may_ be used ;;by PDS/QB, particularly when doing lots of event ;;handling routines. If SetUevent and the UEVENT ;;routines are not used, then some complexity is ;;eliminated at the risk of annoying a user. .MODEL MEDIUM, basic .CODE PUBLIC BASIC restvect, setvect NoSoftBoot PROC FAR EXTRN SetUevent:PROC ;; REMOVE if no UEVENT processing jmp SHORT @F Old09Int dd 90909090h ;; Storage for ;; offset and seg ;; of old 09h int @@: push bp push ax push es push bx pushf in al, 60h ;; Check keyboard for delete key cmp al, 53h jne SHORT skip ;; Ain't-back to key handler mov bx, 0 mov es, bx mov bx, 417h mov al, es:[bx] and al, 0Ch cmp al, 0Ch ;; Check for CTRL and ALT pressed je SHORT noboot ;; Uh-oh.... skip: popf pop bx pop es pop ax pop bp jmp cs:Old09Int noboot: in al, 61h ;; Get control word mov ah, al ;; Save it or al, 80h ;; Set keyboard bit out 61h, al ;; Ack delete key xchg ah, al ;; Original control word back out 61h, al ;; restore control word mov al, 20h ;; Tell interrupt controller out 20h, al ;; false alarm, go back to sleep! push es ;; REMOVE if no UEVENT processing push dx ;; REMOVE if no UEVENT processing push cx ;; REMOVE if no UEVENT processing call SetUevent ;;Set user event flag, so you ;; REMOVE if no UEVENT processing pop cx ;; REMOVE if no UEVENT processing pop dx ;; REMOVE if no UEVENT processing pop es ;; REMOVE if no UEVENT processing popf sti pop bx pop es pop ax pop bp iret NoSoftBoot ENDP setvect PROC FAR push bp push ax push bx push dx push ds push es pushf @@: mov ax, 0100h ;; Flush the keyboard int 16h ;; buffer before jz @F ;; changing the 09h xor ax, ax ;; interrupt vector int 16h jmp @B @@: mov ax, 3509h ;; Load Get vector int 21h ;; DOS interrupt mov WORD PTR cs:Old09Int, bx ;; Save the offset mov WORD PTR cs:Old09Int +2, es ;; Save the segment push cs ;; Code seg to DS pop ds lea dx, NoSoftBoot ;; Get handler offset mov ax, 2509h ;; Load set handler int 21h ;; DOS interrupt popf pop es pop ds pop dx pop bx pop ax pop bp ret setvect ENDP restvect PROC FAR push bp push ax push bx push ds lds dx, cs:Old09Int ;; Restore original ;; key handler by mov ax, 2509h ;; calling DOS set int 21h ;; vector function pop ds pop bx pop ax pop bp ret restvect ENDP END --- DB B1073/071082 * Origin: RadioLink! Columbus, OH (614)766-2162 HST/DS (1:226/140)
Books at Amazon:
Back to BASIC: The History, Corruption, and Future of the Language
Hackers: Heroes of the Computer Revolution (including Tiny BASIC)
Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution
The Advent of the Algorithm: The Idea that Rules the World
Moths in the Machine: The Power and Perils of Programming
Mastering Visual Basic .NET