Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
aviso C28170: A função foi declarada como estando em um segmento paginado, mas nem PAGED_CODE nem PAGED_CODE_LOCKED foi encontrada
A ferramenta Análise de Código relata esse erro quando #pragma alloc_text ou #pragma code_seg é usado para mover uma função que não contém uma macro PAGED_CODE ou PAGED_CODE_LOCKED para uma seção de código paginável. Este erro é reportado no número da linha que corresponde à primeira chave ({) na função.
A ferramenta Análise de Código infere que uma seção pode ser paginada quando o nome da seção começa com PAGE. As funções em código paginável devem conter uma macro PAGED_CODE ou PAGED_CODE_LOCKED no início da função entre a primeira chave ({ ) e a primeira instrução condicional.
Essas macros permitem que a ferramenta Análise de Código e um verificador de tempo de execução determinem se o código paginável pode ser executado em um IRQL elevado. Se ocorrer uma falha de página enquanto o sistema estiver sendo executado em um nível elevado, o sistema falhará.
Se as funções em um segmento paginado forem subsequentemente bloqueadas na memória, use PAGED_CODE_LOCKED em vez de PAGED_CODE. A macro PAGE_CODE_LOCKED permite que o driver faça chamadas que aumentam o IRQL sem encontrar um aviso PREfast for Drivers.
Essa condição geralmente é muito difícil de encontrar durante o teste (a menos que a macro PAGED_CODE seja usada para fazer com que o Verificador de Driver verifique o erro), porque o código deve realmente ser paginado para que a falha de página ocorra.
Exemplo
O exemplo de código a seguir provoca esse aviso.
void func();
#pragma alloc_text("PAGED_CODE", func);
void func1()
{
// paged, no PAGED_CODE: error
}
O exemplo de código a seguir evita esse aviso.
void func();
#pragma alloc_text("PAGED_CODE", func);
void func2()
{
PAGED_CODE(); // includes PAGED_CODE macro
}