ID de connexion pour les périphériques SPB-Connected
Avant qu’un pilote puisse envoyer des demandes d’E/S à un périphérique sur un bus de périphérique simple (SPB), il doit ouvrir une connexion logique à l’appareil. Grâce à cette connexion, le pilote peut envoyer des demandes de lecture et d’écriture pour transférer des données vers et depuis l’appareil. En outre, le pilote peut envoyer des demandes de contrôle d’E/S (IOCTL) à l’appareil pour effectuer des opérations spécifiques À SPB.
Au démarrage du système, le gestionnaire Plug-and-Play (PnP) énumère à la fois les appareils PnP et les appareils non PnP. Pour un périphérique non PnP qui dispose d’une connexion fixe à un SPB, le gestionnaire PnP interroge le microprogramme ACPI de la plateforme matérielle pour obtenir un ensemble de paramètres de connexion qui décrivent comment accéder à l’appareil. Ces paramètres de connexion identifient le contrôleur SPB pour le bus auquel l’appareil est connecté et incluent d’autres informations, telles que l’adresse du bus et la fréquence d’horloge du bus, dont le contrôleur a besoin pour communiquer avec l’appareil.
Le gestionnaire PnP attribue un identificateur, appelé ID de connexion, aux paramètres de connexion du périphérique connecté À SPB. Le gestionnaire PnP stocke cet ID et les paramètres de connexion ensemble dans un magasin de données système appelé hub de ressources. (Le hub de ressources est un magasin de données interne dans lequel le gestionnaire PnP stocke des informations de configuration sur un périphérique connecté À SPB.) L’ID de connexion encapsule ces paramètres afin que le pilote n’ait pas besoin de les fournir explicitement.
Le pilote d’un périphérique connecté à SPB reçoit l’ID de connexion de l’appareil dans le cadre des ressources matérielles affectées au pilote. Lorsque le pilote du périphérique appelle une fonction système pour ouvrir une connexion à l’appareil, le pilote fournit l’ID de connexion, que la fonction utilise pour récupérer les paramètres de connexion de l’appareil à partir du hub de ressources.
Le développeur de pilotes peut utiliser UMDF ( User-Mode Driver Framework ) ou KMDF ( Kernel-Mode Driver Framework ) pour générer le pilote pour le périphérique connecté À SPB. Un pilote UMDF reçoit ses ressources (qui incluent l’ID de connexion) lorsque l’infrastructure appelle la méthode IPnpCallbackHardware2::OnPrepareHardware du pilote. Un pilote KMDF reçoit ses ressources matérielles lors d’un rappel EvtDevicePrepareHardware .
Pour permettre à un pilote de périphérique UMDF de recevoir des ID de connexion dans sa liste de ressources, le fichier INF qui installe le pilote doit inclure la directive suivante dans sa section DDInstall spécifique à WDF :
UmdfDirectHardwareAccess = AllowDirectHardwareAccess Pour plus d’informations sur cette directive, consultez Spécification de directives WDF dans les fichiers INF. Pour obtenir un exemple de fichier INX (utilisé pour générer le fichier INF correspondant) qui utilise cette directive, consultez l’exemple de pilote SpbAccelerometer .
L’ID de connexion que le pilote reçoit en tant que ressource est un entier 64 bits, mais le pilote doit incorporer cet ID dans un nom de chemin d’accès de périphérique qui peut être utilisé pour récupérer les paramètres de connexion à partir du hub de ressources. Pour créer le nom du chemin d’accès de l’appareil, le pilote appelle la fonction RESOURCE_HUB_CREATE_PATH_FROM_ID , qui est déclarée dans le fichier d’en-tête Reshub.h.
Pour ouvrir une connexion logique au périphérique connecté à SPB, un pilote UMDF appelle la méthode IWDFRemoteTarget::OpenFileByName et un pilote KMDF appelle la méthode WdfIoTargetOpen . L’une ou l’autre méthode nécessite le nom du chemin d’accès de l’appareil comme paramètre d’entrée.
Pour obtenir des exemples de code UMDF et KMDF qui utilisent des ID de connexion pour ouvrir des connexions logiques aux périphériques connectés À SPB, consultez les rubriques suivantes :
Ressources matérielles pour User-Mode pilotes de périphériques SPBRessources matérielles pour Kernel-Mode pilotes de périphérique SPB Les applications en mode utilisateur ne peuvent pas ouvrir de connexions logiques aux périphériques connectés à SPB et ne peuvent pas envoyer de demandes d’E/S directement à ces appareils.
Un seul pilote peut maintenir une connexion logique ouverte à un périphérique connecté par SPB à la fois. Une tentative d’un autre pilote d’ouvrir une deuxième connexion au même appareil échoue.