GParted should do what you need. It's an open source non-destructive repartitioning tool that's included in virtually every linux LiveCD, and it understands and deals with windows partitions just fine. It has a partition size limit of 2TB, according to this. This may have changed to be larger since that discussion, but it should handle partitions of at least up to 2TB.
You can find a decent tutorial here:
http://blogcritics.org/scitech/article/non-destructive-partitioning-with-gparted/
You can see in it's feature matrix that it'll grow, shrink, and move FAT16, FAT32, and NTFS, which should meet your needs perfectly.
Note that Windows Vista doesn't like repartiioning operations - you'll need your installation disk and to follow a few simple steps in this tutorial to repair it after the resize:
http://www.howtogeek.com/howto/windows-vista/using-gparted-to-resize-your-windows-vista-partition/
-Adam