Double в kernel-mode (WinXp)?
Налицо недопонимание :-), попробую прояснить ситуацию
В общем, каждый поток имеет свой «контекст» (хранится в _KTHREAD::StateSaveArea), который включает в себя в том числе и состояние FPU (а также MMX, SSE и прочих) регистров. От этого никуда не денешься и при переключении контекста все это состояние сохраняется и перезагружается новыми значениями.

Но учитывая то, что
1. Все эти векторные расширения/плавающие точки имеют довольно много довольно больших регистров
2. Для подавляющего большинства «ядерного» кода они все равно не нужны
3. Переключение из юзермода в ядро и обратно должно быть как можно более быстрым

то было принято решение, что ядерщики не облезут закатывать солнце вручную. Другими словами, при переключении в режим ядра и обратно перезагружаются только целочисленные регистры общего назначения (ну и флаги, сегментные регистры и пр.). Чтоб не нагадить в результаты вычислений пользовательской части потока, которая имела неосторожность вызвать (прямо или косвенно) Ваш код, нужно перед модификацией FP контекста сохранить его, а перед возвратом в юзермод — восстановить. Хранить результаты можно где угодно (в том числе и в девайс экстеншне).
В силу специфики темы, я бы рекомендовал с таким вопросом обратиться на wasm.ru.