Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
varning C28170: Funktionen har deklarerats vara i ett sidsegment, men varken PAGED_CODE eller PAGED_CODE_LOCKED hittades
Verktyget Kodanalys rapporterar det här felet när #pragma alloc_text eller #pragma code_seg används för att flytta en funktion som inte innehåller ett PAGED_CODE eller PAGED_CODE_LOCKED makro till ett sidbart kodavsnitt. Det här felet rapporteras vid det radnummer som motsvarar den första klammerparentesen ({) i funktionen.
Kodanalysverktyget drar slutsatsen att ett avsnitt kan visas när avsnittsnamnet börjar med PAGE. Funktionerna i växlingsbar kod måste innehålla ett PAGED_CODE- eller PAGED_CODE_LOCKED makro i början av funktionen mellan den första klammerparentesen ({ ) och den första villkorssatsen.
Med de här makrona kan verktyget Kodanalys och en körningskontroll avgöra om växlingsbar kod kan köras vid en upphöjd IRQL. Om ett sidfel inträffar när systemet körs på en förhöjd nivå kraschar systemet.
Om funktionerna i ett sidsegment därefter låses in i minnet använder du PAGED_CODE_LOCKED i stället för PAGED_CODE. Det PAGE_CODE_LOCKED makrot tillåter drivrutinen att göra anrop som höjer IRQL utan att stöta på en PREfast för drivrutiner varning.
Det här villkoret är ofta mycket svårt att hitta vid testning (såvida inte det PAGED_CODE makrot används för att orsaka att drivrutinsverifieraren söker efter felet), eftersom koden faktiskt måste vara utsidesad för att sidfelet ska inträffa.
exempel
Följande kodexempel löser den här varningen.
void func();
#pragma alloc_text("PAGED_CODE", func);
void func1()
{
// paged, no PAGED_CODE: error
}
Följande kodexempel undviker den här varningen.
void func();
#pragma alloc_text("PAGED_CODE", func);
void func2()
{
PAGED_CODE(); // includes PAGED_CODE macro
}