Fonction PcAddAdapterDevice (portcls.h)

La fonction PcAddAdapterDevice ajoute un périphérique adaptateur à la pile de périphériques WDM.

Syntaxe

PORTCLASSAPI NTSTATUS PcAddAdapterDevice(
  [in] PDRIVER_OBJECT   DriverObject,
  [in] PDEVICE_OBJECT   PhysicalDeviceObject,
  [in] PCPFNSTARTDEVICE StartDevice,
  [in] ULONG            MaxObjects,
  [in] ULONG            DeviceExtensionSize
);

Paramètres

[in] DriverObject

Pointeur vers l’objet pilote. Ce pointeur est passé en tant que paramètre au gestionnaire AddDevice de l’adaptateur. L’objet driver est une structure système de type DRIVER_OBJECT.

[in] PhysicalDeviceObject

Pointeur vers l’objet d’appareil physique (PDO) de l’appareil. PortCls transmet ce pointeur en tant que paramètre d’appel au gestionnaire AddDevice de l’adaptateur. L’AOP est une structure système de type DEVICE_OBJECT.

[in] StartDevice

Pointeur vers la fonction que le système d’exploitation appelle pour démarrer l’appareil. Pour plus d’informations, consultez la section Notes suivante.

[in] MaxObjects

Spécifie le nombre maximal de sous-appareils à inscrire par les appels à PcRegisterSubdevice. Ce nombre définit la limite supérieure au nombre total d’objets miniport que le pilote de l’adaptateur peut instancier.

[in] DeviceExtensionSize

Spécifie la taille de l’extension d’appareil. Utilisez zéro pour la taille par défaut. Consultez la section Remarques suivante pour connaître les tailles d’extension fournies par l’utilisateur.

Valeur retournée

PcAddAdapterDevice retourne STATUS_SUCCESS si l’appel a réussi. Sinon, elle retourne un code d’erreur approprié.

Remarques

Cette fonction effectue la plupart du travail que le gestionnaire AddDevice du pilote de l’adaptateur audio doit effectuer. PcAddAdapterDevice crée l’objet d’appareil, initialise le contexte de l’appareil et l’attache à la pile d’appareils.

Un pilote d’adaptateur appelle PcAddAdapterDevice lorsqu’il reçoit un appel à son gestionnaire AddDevice . Le pilote de l’adaptateur installe généralement le gestionnaire AddDevice en appelant PcInitializeAdapterDriver, bien que le pilote puisse également installer le gestionnaire par d’autres moyens. PcAddAdapterDevice crée l’objet d’appareil fonctionnel (FDO) pour le PDO qui a été passé au gestionnaire AddDevice .

DeviceExtensionSize est généralement égal à zéro. Certains pilotes d’adaptateur peuvent avoir besoin de réserver de l’espace supplémentaire dans l’extension de périphérique, auquel cas ils doivent spécifier une valeur DeviceExtensionSize supérieure à PORT_CLASS_DEVICE_EXTENSION_SIZE, qui est la taille par défaut. Toute valeur supérieure à zéro et inférieure à PORT_CLASS_DEVICE_EXTENSION_SIZE est illégale. Les pilotes d’adaptateur sont libres d’utiliser n’importe quelle partie de l’extension de périphérique après le décalage PORT_CLASS_DEVICE_EXTENSION_SIZE. Ils sont également libres d’utiliser des octets dans la plage de décalage de 16 à 31 inclus dans un système avec un adressage 32 bits et des octets dans la plage de décalage de 32 à 63 dans un système avec adressage 64 bits. Si l’extension est considérée comme un tableau de ULONG_PTR, les éléments de tableau quatre à sept peuvent être utilisés par le pilote de l’adaptateur.

Le paramètre StartDevice pointe vers une fonction de type PCPFNSTARTDEVICE, que le fichier d’en-tête portcls.h définit comme suit :

  NTSTATUS
    (*PCPFNSTARTDEVICE)(
      IN PDEVICE_OBJECT  DeviceObject,
      IN PIRP  Irp,
      IN PRESOURCELIST  ResourceList
      );

Pour plus d’informations sur PcAddAdapterDevice et les routines de démarrage de périphérique et d’AddDevice du pilote de l’adaptateur, consultez Séquence de démarrage.

L’exemple de code suivant montre comment un pilote d’adaptateur peut utiliser le paramètre DeviceExtensionSize pour ajouter 64 octets de données d’extension spécifiques au périphérique à la fin du bloc de stockage que PortCls alloue pour le contexte de périphérique :

  #define MY_EXTENSION_SIZE  64
  NTSTATUS  ntstatus = PcAddAdapterDevice(DriverObject, PhysicalDeviceObject,
                                          MyStartDevice, MAX_MINIPORTS,
                                          MY_EXTENSION_SIZE + PORT_CLASS_DEVICE_EXTENSION_SIZE);

L’appel PcAddAdapterDevice ci-dessus est similaire à l’exemple de la séquence de démarrage, sauf que le dernier paramètre passé à PcAddAdapterDevice est différent de zéro.

Le pilote de l’adaptateur peut ensuite accéder aux données d’extension spécifiques au périphérique, comme indiqué dans le fragment de code suivant :

  PVOID  pMyExtensionData = (PVOID)((PCHAR)FunctionalDeviceObject->DeviceExtension +
                                              PORT_CLASS_DEVICE_EXTENSION_SIZE);

La variable FunctionalDeviceObject est un pointeur vers le FDO de la carte audio, et pMyExtensionData est un pointeur temporaire vers les données d’extension. Évitez de confondre le FDO avec le PDO, qui appartient au pilote de bus PCI. Le pilote d’adaptateur ne doit pas modifier les données dans le PDO, car cela endommage la mémoire détenue par le pilote de bus PCI et peut provoquer un blocage du système.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible à partir de Windows 2000.
Plateforme cible Universal
En-tête portcls.h (include Portcls.h)
Bibliothèque Portcls.lib
IRQL PASSIVE_LEVEL

Voir aussi

AddDevice

DEVICE_OBJECT

DRIVER_OBJECT

PcRegisterSubdevice