Есть необходимость активно использовать вещественные числа в драйвере. Здесь msdn.microsoft.com/en-us/library/windows/hardware/ff565388(v=vs.85).aspx пишут такой способ: Код (Text): KFLOATING_SAVE saveData; NTSTATUS status; double floatValue; status = KeSaveFloatingPointState(&saveData); if (NT_SUCCESS(status)) { floatValue = 1.0; KeRestoreFloatingPointState(&saveData); } но я хотел бы поместить в DEVICE_EXTENSION переменные типа double, а потом уже в коде, при использовании этих переменных воспользоваться предложенным способом. 1. Есть предложения, как это можно осуществить? 2. Есть ли другие способы работы с double'ом в ядре P.S. Windows XP, WDM P.P.S я курсе, что вопрос, скорее всего, туп до невозможного... но все же решил задать его.
Да, там плохо объяснено почему именно нельзя использовать такие инструкции в ядре. В общем, смысл такой. В целях производительности при переключении контекста с пользовательского на ядерный сохраняются только общие регистры, а FPU, MMX и прочие не сохраняются. Отсюда вывод, что надо их самостоятельно сохранять.
Спасибо. Судя по всему, проще будет все вычисления с вещественными числами делать в user-mode'e, а в драйвер передавать уже приведенные значения (например, к USHORT'y). Не хотелось эти вычисления выводить в пользовательский режим, но видимо придется.
Если много вычислений, можно создать поток ядра тогда не надо делать KeSaveFloatingPointState\KeRestoreFloatingPointState. Вообще задача не описана до конца, поэтому решения нормального быть не может.