I found out what was going on, and I was able to move the drive over successfully, but it is complex and time consuming. Essentially, this is all about the drivers specified in the registery. When you clone the disk, it carries with it all of the hardware references of the old hardware. It loads them on start up, and crashes the machine even if you load in safe mode. If you try to perform a repair as was suggested here, it will complete the repair but when you reboot, you'll be crashing again.
There are ways to remove the drivers and load Windows with generic entries in the registery, but getting the values into the registery is a major pain. Microsoft simply recommends that you buy new hardware that is the same as the old hardware when performing this function. Let me repeat this. They recommend you buy the SAME hardware that you have! So doing it their way (which I tried) requires you to clone your disk and put it on another machine so that you can edit the registery. On this other machine after windows boots, run REGEDT32 and select the Add Hive option. Browse to the cloned hard disk and specify that system (registery) file. It opens under the key you placed it in, and you can now perform changes. It's hairy to do, easy to screw up, and doesn't work all the time. Thanks Microsoft. Anyhow, if you're a masochist, here is a link to the page for future reference.
But since their page didn't include SATA drives, it didn't solve my problem. But it made me realize that it was hardware references in the registery, which is essentially a more complex Access database (big understatement, but it works for the analogy). So I wondered if I could export some of this database but not the hardware references. You sure can, you just need to create registery files (export) for each of the sections in the Registery. I copied:
-- All of it
-- All of it
-- All of it
I double checked that there are only hardware references in the sections I didn't copy. So here's what I did in case some people are foolish enough to try it. Add every responsibility disclaimer here.
- Create a registery file for each of the sections I listed above.
- Back up the drive you want to copy, to another drive. I'll refer to this as Cloned Drive. I cloned my working source disk to another scratch disk using Ghost.
- Perform a fresh install of Windows on your new drive using the machine you wish the drive to reside in when your done. I'll refer to this as New Windows Drive.
- Put New Windows Drive into another machine, and copy the registery file SYSTEM somewhere safe. It's in c:\windows\system32\dllcache on XP.
- Get both Cloned Drive and New Windows Drive on the same machine and copy (good old fashioned) the entire contents of Cloned Drive on top of New Windows Drive, but either don't overwrite the SYSTEM file or when you're done, copy the SYSTEM file back onto New Windows Drive.
- Copy the registery files you created earlier onto New Windows Drive in a easy to find folder.
- Put New Windows Drive into your new computer. It will boot. You'll see your icons for your desktop when you log in, but no programs will work because they aren't listed in the Registery.
- Double click on each of the registery files you created earlier. You will receive some errors that you are trying to overwrite registery items that are currently in use. That's not a problem.
When the new machine comes back up, you'll have all your old settings intact and all your programs will work. This would conceivably work regardless of the before-hardware and after-hardware, because you've set up the new drive to recognize the hardware. Mission accomplished.
Why hasn't Microsoft come up with a program that will detect BEFORE trying to boot that the hardware has changed, and allow you to specify the new hardware? Why does the repair function not do this? Repair appears to address files only, although it claims to be resetting the hardware settings in the registery. It's not, I can assure you.
There must be some extra dollars in it for Microsoft for them not to have done this.