C28104
Ostrzeżenie C28104: Zasób, który powinien zostać pozyskany przed zakończeniem funkcji, nie został pozyskany
Funkcję, która jest przeznaczona do nabywania zasobu przed wyjściem została zakończona bez uzyskania zasobu.To ostrzeżenie wskazuje, że funkcja została oznaczona adnotacją __drv_acquiresResource, lecz nie kończy się faktycznie pozyskawszy zasób.Jeśli ta funkcja jest funkcją otoki, ścieżka przez funkcję nie osiągnęła otoczonej funkcji.Jeśli nieudane dotarcie do otoczonej funkcji jest spowodowane zwróceniem błędu przez funkcję i nie udało się pozyskać zasobu, może być konieczne użycie dodatkowej adnotacji warunkowej (__drv_when).
Jeśli ta funkcja jest faktycznie implementuje pozyskanie zasobu, może okazać się, że PFD nie był w stanie wykryć czy zasób został pozyskany.W takim przypadku użyj ostrzeżenia #pragma, aby pominąć błąd.Najprawdopodobniej można umieścić #pragma w linii poprzedzającej { rozpoczynającej ciało funkcji.Wywołujące funkcje nadal potrzebują adnotacji, ale narzędzie do analizy kodu nie będzie w stanie wykryć, że zasób został pozyskany.
Przykład
__drv_acquireResourceGlobal(HWLock, lockid)
void GetHardwareLock(lockid)
#pragma warning (suppress: 28104)
{
// code to implement a hardware lock (which the Code Analysis tool can't recognize)
}