Partager via


DRIVER_INITIALIZE fonction de rappel (wdm.h)

DriverEntry est la première routine appelée après le chargement d’un pilote et est responsable de l’initialisation du pilote.

Syntaxe

DRIVER_INITIALIZE DriverInitialize;

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

Paramètres

[in] DriverObject

Pointeur vers une structure DRIVER_OBJECT . Il s’agit de l’objet pilote 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 retournée

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

Remarques

Le paramètre DriverObject fournit à la routine DriverEntry un pointeur vers l’objet pilote du pilote, qui est alloué par le gestionnaire d’E/S. La routine DriverEntry doit remplir l’objet driver 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 du pointeur, car le gestionnaire d’E/S libère la mémoire tampon RegistryPath après le retour de 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 chose que DriverEntry, il n’est pas recommandé de le faire. Les outils de génération fournis par DDK informent automatiquement l’éditeur de liens que le point d’entrée du pilote est appelé DriverEntry. Par conséquent, pour donner un autre nom à la routine, 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 fonction de rappel aide l’analyse du code pour les pilotes, le vérificateur de pilotes statique (SDV) et d’autres outils de vérification à la recherche d’erreurs. Il s’agit d’une exigence pour l’écriture de pilotes pour le système d’exploitation Windows.

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 la configuration requise pour les 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 Annotating Function Behavior.

Configuration requise

Condition requise Valeur
Plateforme cible Desktop (Expérience utilisateur)
En-tête wdm.h (inclure Mcd.h, Ntddk.h, Ntifs.h, Wudfwdm.h)
IRQL Appelé à PASSIVE_LEVEL.

Voir aussi

DRIVER_OBJECT