Ostrzeżenie C28103

Wyciek zasobu

Określony obiekt zawiera zasób, który nie został zwolniony. Wywoływana funkcja została oznaczona adnotacją __drv_acquiresResource lub __drv_acquiresResourceGlobal i to ostrzeżenie wskazuje, że zasób o nazwie w adnotacji nie został uwolniony.

Przykład

Poniższy przykład kodu generuje to ostrzeżenie:

res = KeSaveFloatingPointState(buffer);

Poniższy przykład kodu pozwala uniknąć tego ostrzeżenia:

res = KeSaveFloatingPointState(buffer);
if (NT_SUCCESS(res))
{
    res = KeRestoreFloatingPointState(buffer);
}

Jeśli to ostrzeżenie jest zgłaszane jako fałszywie dodatnie, najbardziej prawdopodobną przyczyną jest to, że funkcja, która zwalnia zasób, nie jest oznaczona adnotacją lub __drv_releasesResource__drv_releasesResourceGlobal. Jeśli używasz funkcji otoki dla funkcji systemowych, funkcje otoki powinny używać tych samych adnotacji, które wykonują funkcje systemowe. Obecnie wiele funkcji systemowych jest oznaczonych adnotacjami w pliku modelu, więc adnotacje nie są widoczne w plikach nagłówków.