C28170
avertissement C28170 : la fonction a été déclarée dans un segment paginé, mais ni PAGED_CODE ni PAGED_CODE_LOCKED n’a été trouvée
L’outil Analyse du code signale cette erreur quand #pragma alloc_text ou #pragma code_seg est utilisé pour déplacer une fonction qui ne contient pas de macro PAGED_CODE ou PAGED_CODE_LOCKED dans une section de code paginable. Cette erreur est signalée au numéro de ligne qui correspond à la première accolade ({) de la fonction.
L’outil Analyse du code déduit qu’une section est paginable lorsque le nom de la section commence par PAGE. Les fonctions du code paginable doivent contenir une macro PAGED_CODE ou PAGED_CODE_LOCKED au début de la fonction entre la première accolade ({ ) et la première instruction conditionnelle.
Ces macros permettent à l’outil Analyse du code et à un vérificateur d’exécution de déterminer si du code paginable peut être exécuté avec un IRQL avec élévation de privilèges. Si une erreur de page se produit alors que le système s’exécute à un niveau élevé, le système se bloque.
Si les fonctions d’un segment paginé sont ensuite verrouillées dans la mémoire, utilisez PAGED_CODE_LOCKED au lieu de PAGED_CODE. La macro PAGE_CODE_LOCKED permet au pilote d’effectuer des appels qui déclenchent l’IRQL sans rencontrer d’avertissement PREfast pour pilotes.
Cette condition est souvent très difficile à trouver lors du test (sauf si la macro PAGED_CODE est utilisée pour provoquer le vérificateur de pilotes à case activée pour l’erreur), car le code doit être mis en page pour que l’erreur de page se produise.
Exemple
L’exemple de code suivant déclenche cet avertissement.
void func();
#pragma alloc_text("PAGED_CODE", func);
void func1()
{
// paged, no PAGED_CODE: error
}
L’exemple de code suivant évite cet avertissement.
void func();
#pragma alloc_text("PAGED_CODE", func);
void func2()
{
PAGED_CODE(); // includes PAGED_CODE macro
}
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour