On a single PC, with only a single OS installation available, it's difficult & indeed the most common answer will be norton ghost or similar.
If you have a second PC available .... then you can whip the HD's out, copy the entire HD contents to the target partition of the new HD, & activate the approproate partition on the new partition, along with the following hidden files in your active partition of the old hd:
IO.sys, msdos.sys, ntdetect.com & NTLDR
If the partition structure & active partition of the new HD is different to the original HD, you will need to mess with "partition(x)" in boot.ini to get the right partition (usually 1 or 2).
Windows protects alot of system files & will prevent you from copying them, if windows is loaded, doing this on a single OS system is very difficult.
Quick & Nasty Boot process explanation...
Bios->Check target IDE boot device->Check HD (bootcode) for active partition->
Active partition has a boot loader, which in windows case is NTLDR, which then checks boot.ini to see where windows is installed.
Boot.ini tells it the partition (drive) & folder that it will find windows:
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /usepmtimer