. Причина этого - не все процессы выгружаются правильно, и система ждёт, когда их можно будет убить. Регулируется это ключом WaitToKillServiceTimeout, расположенным по адресу
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
Значение этого ключа определяет время в милисекундах, которое система и выжидает. По умолчанию это 20000, что означает 20 секунд, которые прибавляются к времени, затрачиваемому системой на выключение компьютера, если какая-то служба или программа не выгружается. Измените его на 5000, и всё пойдёт гораздо быстрее. Но не ставьте слишком мало, потому что в этом случае вы можете столкнуться с ситуацией, когда ХР будет убивать программы раньше, чем они будут успевать сохранить свои данные. Что тоже плохо.