Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
upozornění C28170: Funkce byla deklarována jako stránkovaná, ale nebyla nalezena PAGED_CODE ani PAGED_CODE_LOCKED
Nástroj analýza kódu hlásí tuto chybu, když #pragma alloc_text nebo #pragma code_seg slouží k přesunutí funkce, která neobsahuje PAGED_CODE nebo PAGED_CODE_LOCKED makro do oddílu kódu s možností stránky. Tato chyba je hlášena na čísle řádku, které odpovídá první složené závorce ({) ve funkci.
Nástroj Analýza kódu odvodí, že oddíl je stránkovatelný, když název oddílu začíná stránkou PAGE. Funkce v stránkovatelném kódu musí obsahovat PAGED_CODE nebo PAGED_CODE_LOCKED makro na začátku funkce mezi první složenou závorkou ({ ) a prvním podmíněným příkazem.
Tato makra umožňují nástroji Pro analýzu kódu a nástroj pro kontrolu za běhu určit, jestli se stránkovatelný kód může spouštět v prostředí IRQL se zvýšenými oprávněními. Pokud dojde k chybě stránky, když systém běží na vyšší úrovni, systém se chybově ukončí.
Pokud jsou funkce v stránkovaném segmentu následně uzamčeny do paměti, použijte místo PAGED_CODE PAGED_CODE_LOCKED. Makro PAGE_CODE_LOCKED umožňuje ovladači provádět volání, která vyvolá irQL, aniž by se zobrazila upozornění PREfast pro ovladače.
Tato podmínka je při testování často velmi obtížná (pokud se makro PAGED_CODE nepoužívá k tomu, aby ovladač ověřil chybu), protože kód musí být skutečně stránkován, aby došlo k chybě stránky.
Příklad
Následující příklad kódu vyvolá toto upozornění.
void func();
#pragma alloc_text("PAGED_CODE", func);
void func1()
{
// paged, no PAGED_CODE: error
}
Následující příklad kódu zabrání tomuto upozornění.
void func();
#pragma alloc_text("PAGED_CODE", func);
void func2()
{
PAGED_CODE(); // includes PAGED_CODE macro
}