Partager via


fonction de rappel DRIVER_INITIALIZE (wdm.h)

DRIVER_INITIALIZE est la définition de type du point d’entrée d’initialisation du pilote, qui est traditionnellement nommé DriverEntry. Il s’agit de la première routine appelée après le chargement d’un pilote.

Syntaxe

DRIVER_INITIALIZE DriverInitialize;

NTSTATUS DriverInitialize(
  [in] _DRIVER_OBJECT *DriverObject,
  [in] PUNICODE_STRING RegistryPath
)
{...}

Paramètres

[in] DriverObject

Pointeur vers la structure DRIVER_OBJECT du pilote.

[in] RegistryPath

Pointeur vers une chaîne Unicode comptée spécifiant le chemin d’accès à la clé de Registre du pilote.

Valeur de retour

Si la routine réussit, elle doit retourner STATUS_SUCCESS. Sinon, il doit retourner l’une des valeurs d’état d’erreur définies dans Ntstatus.h.

Remarques

Le paramètre DriverObject fournit la routine DriverEntry avec un pointeur vers l’objet pilote du pilote, qui est alloué par le gestionnaire d’E/S. La routine DriverEntry doit renseigner l’objet pilote avec des points d’entrée pour les routines standard du pilote.

Le pointeur DriverObject donne au pilote l’accès à DriverObject->HardwareDatabase, qui pointe vers une chaîne Unicode comptée qui spécifie un chemin d’accès à l’arborescence \Registry\Machine\Hardware du Registre.

La chaîne de chemin d’accès du Registre pointée par RegistryPath est de la forme \Registry\Machine\System\CurrentControlSet\Services\DriverName. Un pilote peut utiliser ce chemin d’accès pour stocker des informations spécifiques au pilote ; consultez clés de Registre pour les pilotes. La routine DriverEntry doit enregistrer une copie de la chaîne Unicode, et non le pointeur, car le gestionnaire d’E/S libère la mémoire tampon RegistryPath après DriverEntry.

Pour plus d’informations sur l’implémentation d’une routine DriverEntry, consultez Écriture d’une routine DriverEntry.

Bien qu’il soit possible de nommer cette routine autre que DriverEntry, cela n’est pas recommandé. Les outils de génération fournis par le DDK informent automatiquement l’éditeur de liens que le point d’entrée du pilote est appelé DriverEntry. Par conséquent, en donnant à la routine un autre nom, vous devez modifier les outils de génération. Pour plus d’informations sur les outils de génération, consultez Génération d’un pilote.

Exemples

Pour définir une routine de rappel DriverEntry, vous devez d’abord fournir une déclaration de fonction qui identifie le type de routine de rappel que vous définissez. Windows fournit un ensemble de types de fonctions de rappel pour les pilotes. La déclaration d’une fonction à l’aide des types de fonctions de rappel permet d'Analyse du code pour les pilotes, le vérificateur de pilotes statiques (SDV) et d’autres outils de vérification recherchent des erreurs.

Pour définir une routine de rappel DriverEntry, utilisez le type DRIVER_INITIALIZE comme indiqué dans cet exemple de code :

DRIVER_INITIALIZE DriverEntry;

Ensuite, implémentez votre routine de rappel comme suit :

_Use_decl_annotations_
NTSTATUS 
  DriverEntry( 
    struct _DRIVER_OBJECT  *DriverObject,
    PUNICODE_STRING  RegistryPath 
    )
  {
      // Function body
  }

Le type de fonction DRIVER_INITIALIZE est défini dans le fichier d’en-tête Wdm.h. Pour identifier plus précisément les erreurs lorsque vous exécutez les outils d’analyse du code, veillez à ajouter l’annotation _Use_decl_annotations_ à votre définition de fonction. L’annotation _Use_decl_annotations_ garantit que les annotations appliquées au type de fonction DRIVER_INITIALIZE dans le fichier d’en-tête sont utilisées. Pour plus d’informations sur les exigences relatives aux déclarations de fonction, consultez déclaration de fonctions à l’aide de types de rôles de fonction pour les pilotes WDM. Pour plus d’informations sur _Use_decl_annotations_, consultez annoter le comportement de la fonction.

Exigences

Exigence Valeur
plateforme cible Bureau
d’en-tête wdm.h (include Mcd.h, Ntddk.h, Ntifs.h, Wudfwdm.h)
IRQL Appelé à PASSIVE_LEVEL.

Voir aussi

DRIVER_OBJECT