WdfDeviceMiniportCreate, fonction (wdfminiport.h)

[S’applique à KMDF uniquement]

La méthode WdfDeviceMiniportCreate crée un objet de périphérique d’infrastructure qu’un pilote miniport peut utiliser.

Syntaxe

NTSTATUS WdfDeviceMiniportCreate(
  [in]           WDFDRIVER              Driver,
  [in, optional] PWDF_OBJECT_ATTRIBUTES Attributes,
  [in]           PDEVICE_OBJECT         DeviceObject,
  [in, optional] PDEVICE_OBJECT         AttachedDeviceObject,
  [in, optional] PDEVICE_OBJECT         Pdo,
  [out]          WDFDEVICE              *Device
);

Paramètres

[in] Driver

Handle de l’objet pilote d’infrastructure du pilote, obtenu par un appel précédent à WdfDriverCreate.

[in, optional] Attributes

Pointeur vers une structure de WDF_OBJECT_ATTRIBUTES allouée par l’appelant qui contient des attributs pour le nouvel objet. Ce paramètre est facultatif et peut être WDF_NO_OBJECT_ATTRIBUTES.

[in] DeviceObject

Pointeur vers une structure de DEVICE_OBJECT WDM qui représente l’objet de périphérique fonctionnel (FDO) pour le pilote miniport.

[in, optional] AttachedDeviceObject

Pointeur vers une structure de DEVICE_OBJECT WDM qui représente l’objet d’appareil inférieur suivant dans la pile d’appareils.

[in, optional] Pdo

Pointeur vers une structure de DEVICE_OBJECT WDM qui représente l’objet de périphérique physique (PDO) de l’appareil.

[out] Device

Pointeur vers un emplacement qui reçoit un handle vers le nouvel objet d’appareil d’infrastructure.

Valeur retournée

Si la méthode WdfDeviceMiniportCreate ne rencontre aucune erreur, elle retourne STATUS_SUCCESS. Les valeurs de retour supplémentaires sont les suivantes :

Code de retour Description
STATUS_INSUFFICIENT_RESOURCES
Impossible d’allouer un objet d’appareil.
 

Pour obtenir la liste des autres valeurs de retour que WdfDeviceMiniportCreate peut retourner, consultez Erreurs de création d’objet framework.

La méthode peut retourner d’autres valeurs NTSTATUS.

Un bogue case activée se produit si le pilote fournit un handle d’objet non valide.

Remarques

Si votre pilote miniport utilise l’infrastructure, le pilote miniport doit appeler WdfDeviceMiniportCreate lorsque son pilote de port l’informe qu’un appareil est disponible. Les pilotes miniport n’appellent pas WdfDeviceCreate.

Votre pilote miniport peut recevoir ses pointeurs DeviceObject, AttachedDeviceObject et PDO de son pilote de port. Par exemple, un pilote miniport NDIS peut obtenir ces pointeurs en appelant NdisMGetDeviceProperty.

Les restrictions suivantes s’appliquent aux objets d’appareil d’infrastructure qu’un pilote miniport obtient en appelant WdfDeviceMiniportCreate :

  • L’appareil que l’objet d’appareil représente doit prendre en charge Plug-and-Play.
  • L’objet d’appareil ne prend pas en charge les fonctions de rappel d’événement de l’objet d’appareil. Par conséquent, le pilote de port doit gérer toutes les opérations de Plug-and-Play (PnP) et de gestion de l’alimentation.
  • Le handle d’objet de périphérique ne peut pas être transmis à WdfWmiProviderCreate. Le pilote de port doit donc fournir toute prise en charge requise pour Windows Management Instrumentation (WMI).
  • Le handle d’objet d’appareil ne peut pas être transmis à WdfIoQueueCreate, de sorte que l’infrastructure ne prend pas en charge les files d’attente d’E/S pour les pilotes miniport.
  • Le handle d’objet de périphérique ne peut pas être passé à WdfInterruptCreate, de sorte que l’infrastructure ne prend pas en charge les objets d’interruption pour les pilotes miniport.
  • Le handle d’objet d’appareil ne peut pas être transmis à des méthodes d’objet d’appareil d’infrastructure générale, à l’exception de WdfDeviceGetIoTarget, WdfDeviceWdmGetDeviceObject, WdfDeviceWdmGetAttachedDevice et WdfDeviceWdmGetPhysicalDevice.
  • Le handle d’objet d’appareil ne peut pas être passé à aucune méthode FDO d’infrastructure à l’exception de WdfFdoQueryForInterface.
  • Le handle d’objet de périphérique ne peut pas être transmis à des méthodes PDO d’infrastructure ou à WdfChildListCreate, de sorte que le pilote miniport ne peut pas être un pilote de bus.
  • Le pilote doit finalement appeler WdfObjectDelete pour supprimer l’objet d’appareil créé par WdfDeviceMiniportCreate .
Les objets d’appareil framework créés par WdfDeviceMiniportCreate peuvent être utilisés comme objet parent pour tout objet framework créé ultérieurement.

Pour envoyer des demandes d’E/S aux cibles d’E/S, le pilote miniport peut transmettre le handle d’objet de périphérique à WdfDeviceGetIoTarget, WdfIoTargetCreate ou WdfUsbTargetDeviceCreateWithParameters.

Le pilote miniport peut passer le handle d’objet de périphérique à WdfDmaEnablerCreate si l’appareil prend en charge les opérations DMA.

Pour plus d’informations sur les pilotes miniport, consultez Utilisation de Kernel-Mode framework de pilotes avec des pilotes Miniport.

Exemples

L’exemple de code suivant appelle NdisMGetDeviceProperty pour obtenir des pointeurs DeviceObject, AttachedDeviceObject et PDO ; initialise l’espace de contexte de l’objet d’appareil et crée un objet d’appareil miniport.

WDF_OBJECT_ATTRIBUTES  ObjectAttributes;

NdisMGetDeviceProperty(
                       MiniportAdapterHandle,
                       &Adapter->Pdo,
                       &Adapter->Fdo,
                       &Adapter->NextDeviceObject,
                       NULL,
                       NULL
                       );
WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(
                                        &ObjectAttributes,
                                        WDF_DEVICE_INFO
                                        );
ntStatus = WdfDeviceMiniportCreate(
                                   WdfGetDriver(),
                                   &ObjectAttributes,
                                   Adapter->Fdo,
                                   Adapter->NextDeviceObject,
                                   Adapter->Pdo,
                                   &Adapter->WdfDevice
                                   );
if (!NT_SUCCESS (ntStatus)) {
    Status = NDIS_STATUS_FAILURE;
    break;
}

Configuration requise

Condition requise Valeur
Plateforme cible Universal
Version KMDF minimale 1.0
En-tête wdfminiport.h (include Wdfminiport.h)
Bibliothèque Wdf01000.sys (consultez Gestion des versions de la bibliothèque d’infrastructure).)
IRQL PASSIVE_LEVEL
Règles de conformité DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Voir aussi

WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE

WdfDeviceCreate

WdfDriverMiniportUnload