Read partition tables using CHS methods unless instructed to do otherwise.

Fixes problems with some older boot sector managers like PROT.


git-svn-id: https://svn.code.sf.net/p/freedos/svn/kernel/trunk@1319 6ac86273-5f31-0410-b378-82cca8765d1b
This commit is contained in:
Bart Oldeman 2007-05-21 01:57:21 +00:00
parent c20a106569
commit 7d18a16081

View File

@ -995,7 +995,15 @@ int Read1LBASector(struct DriveParamS *driveParam, unsigned drive,
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 @@ int Read1LBASector(struct DriveParamS *driveParam, unsigned drive,
}
else
{ /* transfer data, using old bios functions */
LBA_to_CHS(&chs, LBA_address, driveParam);
/* avoid overflow at end of track */
if (chs.Cylinder > 1023)