Technically, WinXP is not detecting hardware changes at this point. We're so early in the boot process that there's really no OS running at this point in time.
Here's what happens:
You press the power button, the computer comes to life.
The BIOS runs the power on self test (POST).
The BIOS attempts to find a device from which to boot. We'll assume that the hard drive is in the boot order and that there's a hard drive attached to the system.
The BIOS loads sector 0 from the first hard drive it finds into memory, and transfers control to that location.
The code that came from the Master Boot Record is an amazingly small piece of code. It examines the partition table (also part of this sector) and searches for an active partition. If it finds an active partition, it loads the first few sectors of that partition into memory and transfers control of the computer to the code at that location.
The code in the partition boot sector is OS-specific. In the case of WinXP, the partition bootsector's only job is to find and load ntldr.
The error message you're getting is from the code in the partition bootsector.
Now, a couple of things can cause problems here.
The first is a damaged filesystem. The partition bootsector code knows *just* enough about the filesystem to find ntldr. It's very, very stupid code. If there's filesystem damage, it might not be able to find ntldr.
The second possibility is that ntldr really isn't there.
The third possibility is that the computer's BIOS isn't set up for LBA drives. At this point in the boot process, there's no disk device driver loaded. The partition bootsector has to use the INT13 interface of the BIOS to address cylinder, head, sector on the disk. If LBA is not enabled, we can't use the INT13 extensions, and can't address cylinders past cylinder 1024. If ntldr is past cylinder 1024, the bootsector can't address that cylinder, and therefore can't load ntldr.
For a fascinating and in depth look at the boot process, see Mark Russinovich's articles
"Inside the Boot Process"