Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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. |