jaclaz Posted August 12, 2022 Posted August 12, 2022 (edited) 53 minutes ago, dearleader said: The steps you described work, and I can get into Windows. Is there a way I can do this without relying on a boot disk? I am still clueless about why this happens. The disk swap that Winsetupfromusb performs (via shifthd.bat) and that you re-performed manually (because of the booting from the USB stick shifts the hard disk to hd1) should be (in theory) exactly the same as when you boot without the USB stick, i.e. the internal hard disk (shifted to hd1 by the USB stick booting) is mapped as hd0 (and everything works) while if you boot from the internal hard disk, the internal hard disk is (as you tested) already hd0. Is it possible that *somehow* the re-mapping by grub4dos fixes *something* (but what?). Try the following: 1) boot "normally" (without the USB stick), get to the grub4dos prompt, and issue: geometry (hd0) map (hd0) (hd1) map --hook geometry (hd1) <- this should have the same output of the geometry (hd0) command above 2) now issue: map (hd1) (hd0) map --hook geometry (hd0) <- this should still have the same output 3) try again booting with: chainloader (hd0)+1 rootnoverify (hd0) boot If it works it seems is like (for *whatever* reasons) the BIOS fails to detect properly the internal disk and by issuing a few commands in grub4dos it somehow manages to get it right. Try adding to the BOOT.INI two lines: multi(0)disk(0)rdisk(1)partition(1)\WINDOWS="Microsoft Windows XP Professional 2nd disk" /noexecute=optin /fastdetect multi(0)disk(0)rdisk(2)partition(1)\WINDOWS="Microsoft Windows XP Professional 3rd disk" /noexecute=optin /fastdetect And try them "directly" (without going through grub4dos), the second one (3rd disk) won't ever boot, but if there is (why?) some mismatch between the BIOS and arcpath, the first one (2nd disk) may work. jaclaz Edited August 12, 2022 by jaclaz
dearleader Posted August 12, 2022 Author Posted August 12, 2022 The re-mapping you just described works, even without the flash drive. Booting the entry for Windows XP directly still causes the ntoskrnl.exe issue. Both of the options you told me to add to my boot.ini fail with the following error: Windows could not start because of a computer disk hardware configuration problem. Could not read from the selected boot disk. Check boot path and disk hardware. Please check the Windows documentation about hardware disk configuration and your hardware reference manuals for additional information.
jaclaz Posted August 12, 2022 Posted August 12, 2022 So, somehow the internal disk is actually 1st disk (as the arcpaths for the following, non-existant disks both fail, with the "right" error). Could it be *something* in the Registry? But what in the grub4dos re-mapping would fix it? I need to check (cannot remember right now) if it is possible to clear the DosDevices key from the booted system. I'll try and check and let you know. Or could it be *something* in the bootsector? It could be that somewhere the drive is marked as 129 (or 0x81) instead of 128 (0x80), and that grub4dos re-mapping fixes it. As well. I'll see if I can put together a procedure to check for that. Try once again: 1) get to grub4dos, as usual geometry (hd0) map (hd0) (hd1) map --hook 2) root (hd1,0) chainloader /ntldr 3) choose the entry for 2nd disk jaclaz
dearleader Posted August 12, 2022 Author Posted August 12, 2022 These steps work. Could this mean that somewhere my drive is 0x81?
jaclaz Posted August 12, 2022 Posted August 12, 2022 (edited) 58 minutes ago, dearleader said: These steps work. Could this mean that somewhere my drive is 0x81? Yep, this is what I am suspecting. But it shouldn't be the Registry (there the Dosdevices key uses Disk Signature+offset to partition to assign drive letters) In the MBR there is nothing about the disk number. So it can only be the bootsector. There is a field in it for disk number, but in theory it should not be used and should always be 0x80, though it seems that it is actually used when booting, see here: https://thestarman.pcministry.com/asm/mbr/NTFSBR.htm Get to grub4dos and run cat --hex --skip=32 --length=4 (hd0,0)0+1 Post output, should be 80 00 80 00 Try also this: 1) get to grub4dos and try "directly": root (hd0,0) chainloader /ntldr boot 2) choose the 1st disk entry (by chainloading the NTLDR you should be bypassing both the MBR and the PBR, but it has to be seen if NTLDR reads the disk info *somewhere else* nonetheless) Check also, once you have booted to XP with one of the workarounds tested, how is the disk seen in Disk Manager and/or diskpart, you only have one disk connected and it should be Disk 0. jaclaz Edited August 12, 2022 by jaclaz
jaclaz Posted August 12, 2022 Posted August 12, 2022 Additional: Try also: 1) get to grub4dos, issue root (hd0,0) chainloader --edx=0x0080 /ntldr boot 2) choose the 1st disk entry jaclaz
dearleader Posted August 12, 2022 Author Posted August 12, 2022 The output of the cat command is 00 00 00 00 . Chainloading NTLDR as you described loads Windows fine, both with and without specifying --edx=0x0080 . Disk Management shows the disk as Disk 0.
jaclaz Posted August 12, 2022 Posted August 12, 2022 (edited) Re-reading my previous post I made a typo, my bad , the right offset is 0x24 (36 decimal): cat --hex --skip=36 --length=4 (hd0,0)0+1 the 00000000 at offset 32 decimal is normal, check again with offset 36. Or with cat --hex --length=40 (hd0,0)0+1 (the last four bytes should be 80 00 80 00) In any case, you can boot to the XP and use a GUI hex/disk editor, such as Tiny Hexer, either the Portable version: https://www.portablefreeware.com/index.php?id=2504 or installing the "full" version: https://www.softpedia.com/get/Others/Miscellaneous/tiny-hexer.shtml to confirm the result (and if needed change those bytes[1]) jaclaz [1] they can be changed also via grub4dos, but there is the risk (as just happened) of an error/typo in the offset Edited August 12, 2022 by jaclaz
jaclaz Posted August 13, 2022 Posted August 13, 2022 11 hours ago, dearleader said: Yes, those bytes are 80 00 80 00. So, we are back to square one . I am short of ideas on what could be the cause of the issue, maybe some "queer" BIOS setting? :dubbio: Let's start talking of possible workarounds: #1: install grub4dos to the MBR (so grldr will boot first, and from its menu.lst you will chainload the NTLDR+BOOT.INI) #2: change the loader name in the PBR to grldr (same as above, but has to be seen if "passing through the PBR" still works) and/or change the grldr name to NTLDR and rename NTLDR to NTLDRXP: https://msfn.org/board/topic/95537-multiboot-vista-xp-and-other-oses-with-grub4dos-menu/ #3 make a "parallel" NTLDR+BOOT.INI (with a copy of NTLDR renamed to - say - NTLDZ and hex edited to look for - still say - BOOZ.INI) #4 use (via grub4dos) a "NT boot floppy" (a "virtual" floppy, an image containing a NTLDR+BOOT.INI+DETECT.COM) There are also other ways, but they are way more complex. Of the 4 proposed ones, if I were you I would try first #3 or #4 as they are "safe" in the sense that you do not risk making a non-bootable system. jaclaz
RainyShadow Posted August 13, 2022 Posted August 13, 2022 @dearleader Do you happen to have the USB drive before the HDD in the BIOS boot settings? If so, move the HDD to the top, then check if you can still boot Windows through the USB by selecting it from the boot menu (F12 key) about #4 , what i think jaclaz meant was to make a floppy disk image file, then mount and boot that through grub4dos. 1
DrunkenTanker Posted August 13, 2022 Posted August 13, 2022 Show your HDD SMART. Try to install an original ISO from MS using CD. Also, read manual from Microsoft how to install Windows XP from USB.
jaclaz Posted August 13, 2022 Posted August 13, 2022 (edited) Basically you get IMDISK , create a 1.44 MB floppy image (2880 blocks or 1474560 bytes in size), let's say the file is called NTBOOT:IMA, format it under an XP and copy to it: NTLDR NTDETECT:COM BOOT.INI (and - since you still have some space available, also grldr, just in case) *like* http://fekete.x10host.com/xxtb3000.htm#xxtb_33 The BOOT.INI in C: you modify it to have as default the c:\grldr entry and the rdisk(0) as option, with a lowish timeout, like 1 or 2 seconds. Then in C: you add a menu.lst with something *like* (to be checked manually before writing to the menu.lst): timeout 10 title Boot XP from C: find --set-root /ntboot.ima map /ntboot.ima (fd0) map --hook root (fd0) chainloader /ntldr In the BOOT.INI inside the floppy image you make default the multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional 1st disk" /noexecute=optin /fastdetect and a lowish timeout. again like 1 or 2 seconds. The idea is that when booting you go: BIOS->hard disk MBR->PBR of active partition->NTLDR->BOOT.INI->(default) grub4dos->menu.lst->NTLDR on the floppy image-> BOOT:INI on the floppy->(default) XP on C: and (normally) you don't have to press any key/make any choice when booting. While testing (and also after) you still have the possibility to drop to the grub4dos prompt, and MBR and PBR on hard disk remain untouched/unmodified. The whole stuff, when finalized should slow down booting by 2-3 seconds at most. Still, if we can find the reason why your PC behaves strangely (do check BIOS settings, like RainyShadow suggested) it would be better. jaclaz Edited August 13, 2022 by jaclaz
jaclaz Posted August 13, 2022 Posted August 13, 2022 4 minutes ago, DrunkenTanker said: Also, read manual from Microsoft how to install Windows XP from USB. Care to post a link to this manual from Microsoft? jaclaz
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now