From: Bart O. <bar...@us...> - 2007-05-21 01:57:22
|
Update of /cvsroot/freedos/kernel/kernel In directory sc8-pr-cvs17:/tmp/cvs-serv11163 Modified Files: initdisk.c Log Message: Read partition tables using CHS methods unless instructed to do otherwise. Fixes problems with some older boot sector managers like PROT. Index: initdisk.c =================================================================== RCS file: /cvsroot/freedos/kernel/kernel/initdisk.c,v retrieving revision 1.35 retrieving revision 1.36 diff -u -d -r1.35 -r1.36 --- initdisk.c 6 Mar 2005 16:12:34 -0000 1.35 +++ initdisk.c 21 May 2007 01:57:21 -0000 1.36 @@ -995,7 +995,15 @@ for (num_retries = 0; num_retries < N_RETRY; num_retries++) { regs.d.b.l = drive | 0x80; - if (driveParam->descflags & DF_LBA) + LBA_to_CHS(&chs, LBA_address, driveParam); + /* Some old "security" software (PROT) traps int13 and assumes non + LBA accesses. This statement causes partition tables to be read + using CHS methods even if LBA is available unless CHS can't reach + them. This can be overridden using kernel config parameters and + the extended LBA partition type indicator. + */ + if ((driveParam->descflags & DF_LBA) && + (InitKernelConfig.ForceLBA || ExtLBAForce || chs.Cylinder > 1023)) { dap.number_of_blocks = 1; dap.buffer_address = buffer; @@ -1009,7 +1017,6 @@ } else { /* transfer data, using old bios functions */ - LBA_to_CHS(&chs, LBA_address, driveParam); /* avoid overflow at end of track */ if (chs.Cylinder > 1023) |