⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ctrladel.asm

📁 Many C samples. It is a good sample for students to learn C language.
💻 ASM
字号:
Date: 4 December 89, 09:53:09 EDTFrom: Antonio@garcon.cso.uiuc.edu, Quezada-Duarte@garcon.cso.uiuc.edu,Subject: Disabling CTRL-ALT-DEL   Marcelo H. Ang Jr in his letter dated Nov 11th 1989 asks for a program  to disable CTRl+ALT+DEL, well.., here it is, i've used it on my  TANDY 1000A with no problems and in PS/2's 25 and 50 and had no  problems at all either.  To use it just type, from the dos prompt:  MASM NOCAD; (of course you need MASM)  LINK NOCAD; (and of course you need a linker)  NOCAD    If you type NOCAD once it has been loaded, it will tell you so.    I've used it with DOS 3.30, but it works just as well under DOS    2.00 and above.    If you have any comment of any kind please let me know.    And have a nice new decade everybody.cut here: ************************************************************page 255,132                           ;just to get a nice list filecomment   :         Program to prevent CTRL+ALT+DEL from restarting the system         WARNING: Once loaded, you only have three choices:             1) Turn power off             2) Use a reset button (not all the machines have one)             3) Generate INT 19h         WARNING: If you have a program that uses INT 0CDh, change                  this value in the equates line below to the number                  of a not used INT. This method is used because                  there are too many programs that hook INT 9 Vector and                  we can't be sure it always points to the end of our                  notice (and start of our ISR).         NOTE: For memory references i use parentheses instead of               square brackets because of ASCII-EBCDIC translations.               It works the same under Microsoft's MASM 4.0         NOTE: NOCAD won't work if you press CTRL+ALT+DEL from               a program that hooked to INT 9 before NOCAD               (example: SideKick). Solution: Load NOCAD before               everything else.  Author     Antonio Quezada-Duarte             Monterrey, Nuevo Leon, MEXICO             Monterrey's Technologic Institute             ID No 296641             Bitnet Address   AL296641@TECMTYVM                              BL296641@TECMTYVM             Feel free to share this with anyone while             leaving the copyright notice intact.             If you have any comment please let me know,thanks.   :ctrl equ  0100b                        ;bit map for ctrl keyalt  equ  1000b                        ;bit map for alt keyfree_vector equ 0CDh                   ;vector used to prevent double loading                                       ;change it if your system uses INT 0CDh   nocad segment byte 'CODE'    assume cs:nocad, ds:msgs, es:nothing, ss:stack      Copyright db 'Antonio Quezada-Duarte ITESM ISC 296641 Monterrey '                db 'Nuevo Leon MEXICO'      Cright_Len equ $-Offset Copyright    new_int_9h proc near      push ax      push ds                          ;save registers      xor ax,ax      mov ds,ax                        ;point DS to BIOS data area                                       ;well, actually BIOS data area                                       ;starts at 0040:0000, but                                       ; XOR AX,AX is faster than MOV AX,40h      mov al,ds:(417h)                 ;get keyboard flags      and al,ctrl+alt                  ;clear non relevant bits      cmp al,ctrl+alt                  ;compare to our map      jne go_ahead                     ;NO CTRL+ALT keys pressed      and byte ptr ds:(417h),not alt   ;CTRL+ALT pressed                                       ;clear ALT key bit to simulate                                       ;ALT key is not pressedgo_ahead:      pushf                            ;old ISR returns with IRET      COMMENT :         The Following code stands for             CALL OLD_INT_9                Where OLD_INT_9 is a FAR PROC                this is faster than having the address of OLD_INT_9                stored in memory and doing a                CALL CS:(OLD_INT_9)                                               :      DB 9Ah         OLD_INT_9_OFS DW 0         OLD_INT_9_SEG DW 0            ;call old INT 9 ISR      pop ds      pop ax                           ;restore registers      iret                             ;return to caller    new_int_9h endp       begin proc near          push es                      ;save psp base address          mov dx,seg msgs          mov ds,dx          mov dx,offset msg_0          mov ah,9          int 21h          mov ax,3500h + free_vector          int 21h          mov di,bx                    ;ES:DI ===> start of INT 0CDh ISR          mov si,offset copyright          mov ax,cs          mov ds,ax                    ;DS:SI ===> THIS code copyright notice          mov cx,cright_len          cld          repe cmpsb                   ;compare          je loaded                    ;if equal then already loaded          mov ax,2500h + free_vector          mov dx,cs          mov ds,dx          mov dx,offset copyright          int 21h                      ;point free_vector INT vector to                                       ;our copyright notice          mov ax,3509h          int 21h                      ;get pointer to INT 9 ISR          mov cs:old_int_9_ofs,bx          mov cs:old_int_9_seg,es      ;put it IN the new INT 9 ISR          mov ax,2509h          mov dx,offset new_int_9h          push cs          pop ds          int 21h                      ;point INT 9 vector to our ISR          mov dx,seg msgs          mov ds,dx          mov dx,offset msg_1          mov ah,9          int 21h                      ;print loaded msg          pop ds                       ;get saved psp base address          mov es,ds:(2Ch)          mov ah,49h          int 21h                      ;free environment's memory                                       ;assume no error          mov dx,offset begin          ;everything up to BEGIN          add dx,10Fh                  ;and all the bytes needed to          mov cl,4                     ;make a full paragraph ...          shr dx,cl          mov ax,3100h                 ;... stay resident          int 21h                      ;and return exit code = 0loaded:   pop ax                       ;get psp address out of stack                                       ;any register will do          mov dx,seg msgs          mov ds,dx                    ;point DS to our data area          mov dx,offset msg_2          mov ah,9          int 21h                      ;print already loaded msg          mov ax,4C01h          int 21h                      ;terminate with exit code = 1       begin endp       nocad ends       msgs segment word 'DATA'          msg_0 db 10,13,'NOCAD: Prevent CTRL+ALT+DEL from restarting the '                db 'system',10,13,'Author: Antonio Quezada-Duarte',10,13,'$'          msg_1 db 10,13,'NOCAD Loaded OK.',10,13,'$'          msg_2 db 10,13,'NOCAD Already Loaded.',10,13,'$'       msgs ends       stack segment para stack 'STACK'          dw 1024 dup (?)       stack ends       end  begin------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -