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.
Étant donné que le pilote de l’adaptateur est installé en tant que service de pilote en mode noyau, le système d’exploitation charge le pilote de l’adaptateur au moment du démarrage du système et appelle la routine DriverEntry du pilote. La routine DriverEntry reçoit deux paramètres : un objet pilote et un nom de chemin d’accès au Registre. DriverEntry doit appeler la fonction PortCls PcInitializeAdapterDriver avec les paramètres de nom de l’objet de pilote et du chemin d’accès au registre, ainsi qu’un troisième paramètre, qui est un pointeur vers la fonction AddDevice du pilote de l’adaptateur.
Dans l’exemple suivant, la fonction DriverEntry du pilote transmet le pointeur MyAddDevicede fonction, qui pointe vers la fonction AddDevice du pilote, en tant que troisième paramètre de la routine PcInitializeAdapterDriver .
NTSTATUS
DriverEntry(
PDRIVER_OBJECT DriverObject,
PUNICODE_STRING RegistryPath
)
{
return PcInitializeAdapterDriver(DriverObject, RegistryPath, MyAddDevice);
}
La routine PcInitializeAdapterDriver installe la routine AddDevice fournie dans l’extension de pilote de l’objet pilote et installe les gestionnaires IRP du pilote PortCls dans l’objet pilote lui-même.
Voici un exemple de code pour l’implémentation de la fonction du pilote MyAddDevice.
#define MAX_MINIPORTS 6 // maximum number of miniports
NTSTATUS
MyAddDevice(
PDRIVER_OBJECT DriverObject,
PDEVICE_OBJECT PhysicalDeviceObject
)
{
return PcAddAdapterDevice(DriverObject, PhysicalDeviceObject, MyStartDevice,
MAX_MINIPORTS, 0);
}
Cette fonction appelle la fonction PortCls PcAddAdapterDevice, qui crée le périphérique d’adaptateur spécifié, associe un pilote à l’appareil et stocke un pointeur vers la fonction du MyStartDevice pilote d’adaptateur, qui est appelée lorsque le système d’exploitation démarre l’appareil (voir Démarrage d’un appareil). La routine PcAddAdapterDevice crée un objet d’appareil fonctionnel (FDO) et l’associe à l’objet d’appareil physique (PDO) fourni par le système. Le nouveau FDO est créé avec une extension utilisée par PortCls pour stocker des informations contextuelles sur l’appareil. Ce contexte inclut le MyStartDevice pointeur de fonction fourni par MyAddDevice.
Une fois que le système d’exploitation détermine les ressources (interruptions, canaux DMA, adresses de port d’E/S, etc.) à affecter à l’appareil, elle envoie à l’appareil une demande de démarrage (IRP_MN_START_DEVICE). En réponse à cette demande, le gestionnaire de requêtes dans le pilote PortCls appelle la fonction du MyStartDevice pilote d’adaptateur, qui est illustrée dans l’exemple de code suivant :
NTSTATUS
MyStartDevice(
PDEVICE_OBJECT DeviceObject,
PIRP Irp,
PRESOURCELIST ResourceList
)
{
...
}
Le gestionnaire de requêtes fournit MyStartDevice des pointeurs vers l'objet de périphérique, la requête IRP_MN_START_DEVICE, et la liste des ressources (voir IResourceList). La fonction MyStartDevice partitionne la liste de ressources en celles qui sont requises pour chaque pilote miniport devant être démarré. La fonction démarre ensuite chaque pilote miniport et retourne le contrôle à PortCls, qui termine l’IRP et retourne le contrôle au système d’exploitation.
Pour plus d’exemples de code de démarrage du pilote, consultez les exemples de pilotes de carte audio dans le Kit de pilotes Microsoft Windows (WDK).