I just installed SuSE 9.1 on two machines next to XP, and I had to resize the XP partitions to get some space for my Linux partiotions, in both cases.
I did it as follows:
1. I downloaded this iso of a bootable RescueCD (about 100M), which has a great partition resizing tool, "qtparted" on it: http://www.sysresccd.org/download.en.php
2. I burned the iso onto a CD.
3. I run "chkdsk /R" under WindowsXP to ensure the ntfs filesystem consistency. Chkdsk repaired some errors of which I never know about as XP never complained of them. (Qtparted will only resize the XP partition if the ntfs filesystem is consistent.)
4. I defragmented the XP partition.
5. I booted up from the RescueCD and run qtparted: "run_qtparted"
6. In qtparted I selected the XP partition and moved the partition size slider to a position corresponding to the new, smaller partition size; then committed the changes.
7. I booted up Windows XP, which this time did a file-system consistency checking (as it noticed that its partition had been resized). It found no errors, and things went as normal in WinXP after the next bootup.
8. I inserted the SuSE installation CD and installed SuSE 9.1 onto the free space. (SuSE installed its own bootloader: grub; so I can dual boot.)