Nota
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare ad accedere o a cambiare directory.
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare a cambiare directory.
avviso C28170: la funzione è stata dichiarata in un segmento di paging, ma non è stato trovato né PAGED_CODE né PAGED_CODE_LOCKED
Lo strumento analisi del codice segnala questo errore quando si usa #pragma alloc_text o #pragma code_seg per spostare una funzione che non contiene una macro PAGED_CODE o PAGED_CODE_LOCKED in una sezione codici pageable. Questo errore viene segnalato al numero di riga corrispondente alla prima parentesi graffa ({) nella funzione .
Lo strumento Analisi codice deduce che una sezione è paginabile quando il nome della sezione inizia con PAGE. Le funzioni nel codice pageable devono contenere una macro PAGED_CODE o PAGED_CODE_LOCKED all'inizio della funzione tra la prima parentesi graffa ({ ) e la prima istruzione condizionale.
Queste macro consentono allo strumento di analisi del codice e a un controllo di runtime di determinare se il codice di paging può essere eseguito in un IRQL con privilegi elevati. Se si verifica un errore di pagina mentre il sistema è in esecuzione a un livello elevato, il sistema si arresterà in modo anomalo.
Se le funzioni in un segmento di paging vengono successivamente bloccate in memoria, usare PAGED_CODE_LOCKED anziché PAGED_CODE. La macro PAGE_CODE_LOCKED consente al driver di effettuare chiamate che generano irQL senza riscontrare un avviso PREfast per i driver.
Questa condizione è spesso molto difficile da trovare durante il test (a meno che non venga usata la macro PAGED_CODE per fare in modo che il driver Verifier verifichi la presenza dell'errore), perché il codice deve effettivamente essere impaginato perché si verifichi l'errore della pagina.
Esempio di
Nell'esempio di codice seguente viene generato questo avviso.
void func();
#pragma alloc_text("PAGED_CODE", func);
void func1()
{
// paged, no PAGED_CODE: error
}
Nell'esempio di codice seguente viene evitato questo avviso.
void func();
#pragma alloc_text("PAGED_CODE", func);
void func2()
{
PAGED_CODE(); // includes PAGED_CODE macro
}