; Catch network redirection. ;AMENDMENTS: ;v1.0 Early Feb. '92 ; Quickly knocked up to see whether it works or not. ;v1.1 20/2/92 ; Pointer to data buffer included behind INT 21h vector so that REDIRSHW ; can read it, rather than having to use SYMDEB. Message added. ;v1.2 11/3/92 ; General cleanup, i.e. exit via INT 21h function 31h, improved buffer ; control, etc. cseg segment para public 'code' assume cs:cseg, ds:cseg, es:cseg, ss:nothing mov ax,3521h int 21h ; get int 21 vector push cs pop ds mov dx,offset Message mov ah,9 ; print message int 21h mov word ptr oldvectseg,es mov word ptr oldvect,bx ; store at JMPF instruction mov dx,offset newhandler mov ax,2521h ; set int 21 vector cli int 21h sti mov dx,offset LASTBYTE shr dx,1 ;convert to paragraphs shr dx,1 shr dx,1 shr dx,1 add dx,1 ;don't lose fraction mov ax,3100h int 21h ; tsr Message: db 'REDIR.EXE v1.2 (C) 1992 David Woodhouse',13,10 db 'Catches network redirections.',13,10 db 'Now installed. Use REDIRSHW to list redirections.',13,10,'$' dw buffer ; data for REDIRSHW bufptr: dw buffer idmsg: db '(C)DW',0 newhandler: pushf cmp ax,5f03h jnz goback ; not a redirect command push ax push cx push si push ds push di push es push cs pop es mov di,word ptr cs:bufptr ; point to buffer cmp di,offset buffer+0f80h ja bufferfull loop1: lodsb ; store localname stosb or al,al jnz loop1 pop ds pop si push si push ds loop2: lodsb stosb or al,al jnz loop2 loop3: lodsb stosb or al,al jnz loop3 ; store netname+password mov word ptr cs:bufptr,di bufferfull: pop es pop di pop ds pop si pop cx pop ax goback: popf db 0eah ; JMPF oldvect: dw 0 oldvectseg: dw 0 buffer: db 1000h dup (0) ;shouldn't actually do this - LASTBYTE db 0 ;LASTBYTE equ $+1000h would be ;better, but I can't be ;bothered to check whether it ;would actually work. ; DW v1.2 cseg ends end