From 5686788c8bc830a80eb177b09372c187fcaf7baf Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Thu, 7 Oct 2010 19:16:09 +0000 Subject: [PATCH] [FREELDR] Fix CDs checksum computation [NTOSKRNL] Fix ARC names accordingly svn path=/trunk/; revision=49040 --- reactos/boot/freeldr/freeldr/arch/i386/hardware.c | 1 + reactos/ntoskrnl/io/iomgr/arcname.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/reactos/boot/freeldr/freeldr/arch/i386/hardware.c b/reactos/boot/freeldr/freeldr/arch/i386/hardware.c index f99e26780d6..641bd8d4c94 100644 --- a/reactos/boot/freeldr/freeldr/arch/i386/hardware.c +++ b/reactos/boot/freeldr/freeldr/arch/i386/hardware.c @@ -1004,6 +1004,7 @@ DetectBiosDisks(PCONFIGURATION_COMPONENT_DATA BusKey) /* Calculate the MBR checksum */ for (i = 0; i < 2048 / sizeof(ULONG); i++) Checksum += Buffer[i]; + Checksum = ~Checksum + 1; DPRINTM(DPRINT_HWDETECT, "Checksum: %x\n", Checksum); /* Fill out the ARC disk block */ diff --git a/reactos/ntoskrnl/io/iomgr/arcname.c b/reactos/ntoskrnl/io/iomgr/arcname.c index 003c9bfc8ca..0ff87d5c894 100644 --- a/reactos/ntoskrnl/io/iomgr/arcname.c +++ b/reactos/ntoskrnl/io/iomgr/arcname.c @@ -368,7 +368,7 @@ IopAssignArcNamesToCdrom(IN PLOADER_PARAMETER_BLOCK LoaderBlock, ARC_DISK_SIGNATURE, ListEntry); /* And check if checksums and arc names match */ - if (CheckSum == ArcDiskEntry->CheckSum && + if (CheckSum + ArcDiskEntry->CheckSum == 0 && strcmp(KeLoaderBlock->ArcBootDeviceName, ArcDiskEntry->ArcName) == 0) { IsBootCdRom = TRUE;