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/

Reply via email to