From 21392ef30ddb383445783b1786541015cb937b37 Mon Sep 17 00:00:00 2001 From: Mounir IDRASSI Date: Mon, 4 Nov 2019 23:21:42 +0100 Subject: Windows MBR Bootloader: workaround for SSD disks that don't allow write operations in BIOS mode with buffers less than 4096 bytes --- src/Boot/Windows/BootEncryptedIo.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'src/Boot/Windows/BootEncryptedIo.cpp') diff --git a/src/Boot/Windows/BootEncryptedIo.cpp b/src/Boot/Windows/BootEncryptedIo.cpp index 25fe1dc4..380d3419 100644 --- a/src/Boot/Windows/BootEncryptedIo.cpp +++ b/src/Boot/Windows/BootEncryptedIo.cpp @@ -108,7 +108,16 @@ BiosResult WriteEncryptedSectors (uint16 sourceSegment, uint16 sourceOffset, byt EncryptDataUnits (SectorBuffer, &dataUnitNo, 1, BootCryptoInfo); } - result = WriteSectors (SectorBuffer, drive, sector + writeOffset, 1); + result = ReadWriteSectors (true, SectorBuffer, drive, sector + writeOffset, 1, false); + if (BiosResultTimeout == result) + { + result = ReadWriteSectors (false, TC_BOOT_LOADER_BUFFER_SEGMENT, 0, drive, sector + writeOffset, 8, false); + if (BiosResultSuccess == result) + { + CopyMemory (SectorBuffer, TC_BOOT_LOADER_BUFFER_SEGMENT,0, TC_LB_SIZE); + result = ReadWriteSectors (true, TC_BOOT_LOADER_BUFFER_SEGMENT, 0, drive, sector + writeOffset, 8, false); + } + } if (result != BiosResultSuccess) break; -- cgit v1.2.3