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