i know for linux, but not windows. maybe this will work in cygwin. (if there is a linux live cd that will do NTFS writing properly, just use it, not sure that exists though)
find /current/drive/mnt/point -xdev -print0 | cpio -pa0V /new/drive/mount/point
do that for each partition, throw in the new harddrive, and you'll be good to go. You'll need to create new partitions first, and they'll need to be big enough to cover (obviously).
edit: hmm, i'm not sure this will work with windows as you'd need to install a bootloader and i doubt this process will cover that. you might be able to dd if=/dev/hda of=/dev/hdc (hda=old drive hdc=new drive) not sure though.