Harry Potter, also known as Glenn, did it again ! Just tested the new wwwman on one machine only (2:31 am local time now) and it does not block anymore on \\
Gongrats Glenn :*)) Regards, Bastiaan On Mon, 23 Dec 2002 19:42:29 -0500, Glenn McCorkle wrote: > On Mon, 23 Dec 2002 09:21:53 +0100, Michal H. Tyc wrote: >> Hi Glenn, Hi all, >> On Thu, 19 Dec 2002 13:07:58 -0400, Glenn McCorkle wrote: >>> Have a look at the part of the SRC code for wwwman.exe >>> which then reads the info from there. >>> ---- drvtypes.cpp attached --- > TcKz-�` >> The problem is with INT 25h called when checking for Stacker; >> Win95 set SI to 0, so the stack pointer gets corrupted (MOV SP, SI). >> Then anything may happen, because CPU just jumps to a random address. >> From Ralf Brown's Interrupt List: >> --------D-25----CXFFFF----------------------- >> INT 25 - DOS 3.31+ - ABSOLUTE DISK READ (32M-2047M hard-disk partition) >> CX = FFFFh >> AL = drive number (0=A, 1=B, etc) >> DS:BX -> disk read packet (see #02548) >> Return: CF clear if successful >> CF set on error >> AH = status (see #02547) >> AL = error code (same as passed to INT 24 in DI) >> AX = 0207h for FAT32 drive -- use INT 21/AX=7305h >> may destroy all other registers except segment registers; Win9X always >> sets SI to 0000h due to an apparent coding bug >> Notes: partition is potentially >32M (and requires this form of the call) if >> bit 1 of the device attribute word in the device driver is set >> original flags are left on stack, and must be removed by caller >> this call bypasses the DOS filesystem >> for FAT32 drives (which may be up to 2TB in size), use INT 21/AX=7305h >> SeeAlso: INT 13/AH=02h,INT 25,INT 26/CX=FFFFh,INT 21/AX=7305h >> Format of disk read packet: >> Offset Size Description (Table 02548) >> 00h DWORD sector number >> 04h WORD number of sectors to read >> 06h DWORD transfer address >> SeeAlso: #02552 >> --------------------------------------------- >> The simplest workaround is to remove the Stacker check at all. >> Or to add some code to preserve registers while calling INT 25h. >> And don't use SI to remember SP, just pop the flags after INT 25h. >> Merry Christmas to all list members! > Michal, > THANK YOU !!!! > The 'quick-n-dirty' fix is ready for testing. > I simply commented-out the sections of drvtypes.cpp which checked for > stacker drives and then recompiled. > Anyone who would like to test it may grab a copy of w3manw9x.zip from > http://www.angelfire.com/id/glenndoom/wwwman.htm > Now..... how do we re-write ths section of drvtypes.cpp so that > we CAN look for stacker drives WITHOUT locking-up the machine ???? > //!!glennmcc: Begin Dec 23, 2002 > // removed at the advice of Michal H. Tyc > //Thank you Michal :)) > // this is what was causing the 'lock-ups' when used with some versions > //of Dos supplied with W9x > /* > int chkStk4(char drive) > { CtrlBlk25 cb; > char boot[512]; > register int r; > cb.startsect=0;cb.cnt=1;cb.bufoffs=FP_OFF(boot);cb.bufseg=FP_SEG(boot); > drive--; > r=0; > asm{push ds;mov al,drive;or chkABforSTK,0;jnz j1; > cmp al,1;ja j1;sub al,al;jmp q;} > j1:; > asm{push ss;pop ds; > lea bx,cb; > sub ax,ax;mov al,drive; > sub cx,cx;dec cx; > mov si,sp; > int 0x25; > cli;mov sp,si;sti; > pushf; > lea si,boot;add si,0x1f0;sub al,al; > popf;jc q; > cmp word ptr ds:[si] ,0x13cd;jnz q; > cmp word ptr ds:[si][2],0x14cd;jnz q; > cmp word ptr ds:[si][4],0x01cd;jnz q; > cmp word ptr ds:[si][6],0x03cd;jnz q; > mov al,1; > } > q:; > asm{pop ds;xor ah,ah;mov r,ax;} > return r; > } > */ > //!glennmcc: end > -- > Glenn > http://arachne.cz/ > http://www.delorie.com/listserv/mime/ > http://www.angelfire.com/id/glenndoom/download.htm > http://www.thispagecannotbedisplayed.com/
