Author: hpoussin Date: Thu Sep 24 23:29:31 2009 New Revision: 43140
URL: http://svn.reactos.org/svn/reactos?rev=43140&view=rev Log: [freeldr] Put cdrom information in block list information
Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/hardware.c
Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/hardware.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/i... ============================================================================== --- trunk/reactos/boot/freeldr/freeldr/arch/i386/hardware.c [iso-8859-1] (original) +++ trunk/reactos/boot/freeldr/freeldr/arch/i386/hardware.c [iso-8859-1] Thu Sep 24 23:29:31 2009 @@ -981,6 +981,29 @@ DiskIsDriveRemovable(BootDrive)) { /* TODO: Check if it's really a cdrom drive */ + ULONG* Buffer; + ULONG Checksum = 0; + + /* Read the MBR */ + if (!MachDiskReadLogicalSectors(BootDrive, 16ULL, 1, (PVOID)DISKREADBUFFER)) + { + DPRINTM(DPRINT_HWDETECT, "Reading MBR failed\n"); + return; + } + + Buffer = (ULONG*)DISKREADBUFFER; + + /* Calculate the MBR checksum */ + for (i = 0; i < 2048 / sizeof(ULONG); i++) Checksum += Buffer[i]; + DPRINTM(DPRINT_HWDETECT, "Checksum: %x\n", Checksum); + + /* Fill out the ARC disk block */ + reactos_arc_disk_info[reactos_disk_count].CheckSum = Checksum; + strcpy(reactos_arc_strings[reactos_disk_count], BootPath); + reactos_arc_disk_info[reactos_disk_count].ArcName = + reactos_arc_strings[reactos_disk_count]; + reactos_disk_count++; + FsRegisterDevice(BootPath, &DiskVtbl); } }