Freigeben über


Gleitkommaanmerkungen für Treiber

Gleitkommaanmerkungen können dem Codeanalysetool helfen, die Verwendung von Gleitkomma im Kernelmoduscode zu erkennen und Fehler zu melden, wenn der Gleitkommazustand nicht ordnungsgemäß geschützt ist. Gleitkommaregeln werden nur für Kernelmoduscode überprüft.

Für einige Prozessorfamilien, insbesondere x86-Prozessoren, darf die Verwendung von Gleitkommavorgängen aus Kernelmoduscode nur innerhalb des Bereichs der Funktionen erfolgen, die den Gleitkommazustand speichern und wiederherstellen. Verstöße gegen diese Regel können besonders schwer zu finden sein, da sie zur Laufzeit nur sporadisch Probleme verursachen (aber diese Probleme können sehr schwerwiegend sein). Mit der richtigen Verwendung von Anmerkungen können die Codeanalysetools effektiv die Verwendung von Gleitkomma im Kernelmoduscode erkennen und einen Fehler melden, wenn der Gleitkommazustand nicht ordnungsgemäß geschützt ist. Gleitkommaregeln werden nur für Kernelmoduscode überprüft.

Fügen Sie die folgenden Anmerkungen zu Funktionsparametern hinzu, um anzugeben, was sie mit dem Gleitkommazustand tun.

Gleitkommaanmerkung BESCHREIBUNG
_Kernel_float_saved_ Die mit Anmerkungen versehene Funktion speichert den Gleitkommazustand der Hardware, wenn die Funktion erfolgreich zurückgegeben wird.
_Kernel_float_restored_ Die mit Anmerkungen versehene Funktion stellt den Gleitkommazustand der Hardware wieder her, wenn die Funktion erfolgreich zurückgegeben wird.
_Kernel_float_used_ Wenn die Funktion von einer aufrufenden Funktion sicher aufgerufen wird, können Sie die _Kernel_float_used_ Anmerkung verwenden, um die Meldung von Fehlern zu unterdrücken. Wenn die aufrufende Funktion jedoch nicht auch mit _Kernel_float_used_ versehen ist oder der Funktionsaufruf nicht zwischen Funktionen auftritt, die mit _Kernel_float_saved_ bzw. _Kernel_float_restored_ versehen sind, melden die Codeanalysetools einen Fehler.

Diese Anmerkungen wurden bereits auf den KeSaveFloatingPoint-Zustand und die KeRestoreFloatingPointState-Systemfunktionen angewendet, zusätzlich zu Anmerkungen zum Abrufen und Freigeben von Ressourcen, um Lecks zu verhindern. Auch die ähnlichen EngXxx-Funktionen werden auf diese Weise kommentiert. Funktionen, die diese Funktionen umschließen, sollten diese Anmerkungen jedoch auch verwenden.

Wenn die Funktion als Ganzes von einer aufrufenden Funktion sicher aufgerufen wird, kann die Funktion mit _Kernel_float_used_ Anmerkung versehen werden. Dies unterdrückt die Warnung und bewirkt auch, dass die Codeanalysetools bestätigen, dass der Aufrufer die Funktion sicher verwendet. Nach Bedarf können zusätzliche Ebenen von _Kernel_float_used_ hinzugefügt werden. Die _Kernel_float_used_ Anmerkung wird automatisch von den Codeanalysetools bereitgestellt, wenn entweder das Funktionsergebnis oder einer der Parameter der Funktion ein Gleitkommatyp ist, aber es schadet nicht, die Anmerkung explizit bereitzustellen.

Die _Kernel_float_saved_ Anmerkung gibt beispielsweise an, dass der Gleitkommazustand im FloatingState-Parameter der KeSaveFloatingPointState-Systemfunktion gespeichert wird.

_Must_inspect_result_  
_IRQL_requires_max_(DISPATCH_LEVEL)  
__drv_valueIs(<0;==0)  
_When_(return==0, _Kernel_float_saved_)  
_At_(*FloatingState, _Kernel_requires_resource_not_held_(FloatState) _When_(return==0, _Kernel_acquires_resource_(FloatState)))  
__forceinline  
NTSTATUS  
KeSaveFloatingPointState (  
    _Out_ PVOID FloatingState  
    )  

Im folgenden Beispiel unterdrückt die _Kernel_float_used_-Anmerkung Warnungen zur Verwendung des Gleitkommazustands. Die Anmerkung bewirkt auch, dass die Codeanalysetools bestätigen, dass alle Aufrufe von MyDoesFloatingPoint in einem sicheren Gleitkommakontext erfolgen.

_Kernel_float_used_
void
    MyDoesFloatingPoint(arguments);

SAL 2.0-Anmerkungen für Windows-Treiber