Partager via


PLOAD_IMAGE_NOTIFY_ROUTINE fonction de rappel (ntddk.h)

Appelé par le système d’exploitation pour avertir le pilote lorsqu’une image de pilote ou une image utilisateur (par exemple, une DLL ou EXE) est mappée à la mémoire virtuelle. Le système d’exploitation appelle cette routine après qu’une image a été mappée à la mémoire, mais avant que son point d’entrée soit appelé.

Avertissement

Les actions que vous pouvez effectuer dans cette routine sont limitées pour les appels sécurisés. Consultez Bonnes pratiques.

Syntaxe

PLOAD_IMAGE_NOTIFY_ROUTINE PloadImageNotifyRoutine;

void PloadImageNotifyRoutine(
  [in, optional] PUNICODE_STRING FullImageName,
  [in]           HANDLE ProcessId,
  [in]           PIMAGE_INFO ImageInfo
)
{...}

Paramètres

[in, optional] FullImageName

Pointeur vers une chaîne Unicode mise en mémoire tampon qui identifie le fichier image exécutable. (Le paramètre FullImageName peut être NULL dans les cas où le système d’exploitation ne peut pas obtenir le nom complet de l’image au moment de la création du processus.)

[in] ProcessId

ID de processus du processus dans lequel l’image a été mappée, mais ce handle est égal à zéro si l’image nouvellement chargée est un pilote.

[in] ImageInfo

Pointeur vers une structure de IMAGE_INFO qui contient des informations d’image. Consultez la section Notes.

Valeur de retour

None

Remarques

Les pilotes de profilage système de niveau supérieur peuvent appeler PsSetLoadImageNotifyRoutine pour configurer leur routine de notification d’image de charge.

Le système d’exploitation n’appelle pas de routines de notification d’image de charge lorsque les sections créées avec l’attribut SEC_IMAGE_NO_EXECUTE sont mappées à la mémoire virtuelle.

Dans Windows 7, Windows Server 2008 R2 et les versions antérieures de Windows, le système d’exploitation conserve un verrou système interne pendant les appels à l’image de chargement des routines de notification pour les images chargées dans l’espace d’adressage du processus utilisateur (espace utilisateur). Pour éviter les interblocages, les routines de notification d’image de charge ne doivent pas appeler des routines système qui mappent, allouent, interrogent, libèrent ou effectuent d’autres opérations sur la mémoire virtuelle de l’espace utilisateur.

Un pilote doit supprimer tous les rappels qu’il enregistre avant son déchargement. Vous pouvez supprimer le rappel en appelant la routine PsRemoveLoadImageNotifyRoutine .

Lorsque l’image exécutable main pour un processus nouvellement créé est chargée, la routine de notification de l’image de chargement s’exécute dans le contexte du nouveau processus. Le système d’exploitation appelle la routine de notification d’image de charge du pilote à PASSIVE_LEVEL à l’intérieur d’une région critique avec des API de noyau normales toujours désactivées et parfois avec le noyau et les API spéciales désactivées.

Lorsque la routine de notification d’image de chargement est appelée, l’entrée FullImageName pointe vers une chaîne Unicode mise en mémoire tampon qui identifie le fichier image exécutable. (Le paramètre FullImageName peut être NULL dans les cas où le système d’exploitation ne peut pas obtenir le nom complet de l’image au moment de la création du processus.) Le handle ProcessId identifie le processus dans lequel l’image a été mappée, mais ce handle est égal à zéro si l’image nouvellement chargée est un pilote. Pour voir le format des données mises en mémoire tampon dans ImageInfo, consultez IMAGE_INFO. Si l’indicateur ExtendedInfoPresent est défini dans la structure IMAGE_INFO , les informations font partie d’une version étendue et plus grande de la structure d’informations d’image , IMAGE_INFO_EX.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible à partir de Windows 2000.
Plateforme cible Universal
En-tête ntddk.h (incluez Ntddk.h)
IRQL PASSIVE_LEVEL

Voir aussi

IMAGE_INFO

IMAGE_INFO_EX

PsSetLoadImageNotifyRoutine