Partager via


WdfCmResourceListRemoveByDescriptor, fonction (wdfresource.h)

[S’applique uniquement à KMDF]

La méthode WdfCmResourceListRemoveByDescriptor supprime un descripteur de ressources spécifié d’une liste de ressources spécifiée.

Syntaxe

void WdfCmResourceListRemoveByDescriptor(
  [in] WDFCMRESLIST                    List,
  [in] PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor
);

Paramètres

[in] List

Handle d’un objet de liste de ressources d’infrastructure qui représente une liste de ressources matérielles pour un appareil.

[in] Descriptor

Pointeur vers une structure CM_PARTIAL_RESOURCE_DESCRIPTOR qui décrit une ressource matérielle.

Valeur de retour

None

Remarques

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

La méthode WdfCmResourceListRemoveByDescriptor supprime le descripteur de ressources qui correspond au paramètre Descriptor . Pour trouver une correspondance, la méthode compare le descripteur de ressource spécifié avec les descripteurs de ressource dans la configuration logique, octet pour octet.

Lorsque WdfCmResourceListRemoveByDescriptor supprime le descripteur de ressource qui a la valeur d’index n, la valeur d’index du descripteur de ressource suivant passe de n+1 à n.

Pour plus d’informations sur les listes de ressources, consultez Ressources matérielles pour les pilotes Framework-Based.

Exemples

L’exemple de code suivant recherche des descripteurs de ressources de port dans les listes de ressources d’un appareil. Pour chaque ressource de port que l’exemple trouve, il vérifie si l’adresse du port se trouve dans une certaine plage. Si l’adresse de port est en dehors de la plage, l’exemple supprime le descripteur des listes de ressources brutes et traduites.

NTSTATUS
MyEvtDeviceRemoveAddedResources(
    WDFDEVICE Device,
    WDFCMRESLIST ResourcesRaw,
    WDFCMRESLIST ResourcesTranslated
    )
{    
    ULONG i, count;

    pDevExt = DeviceGetExtension(Device);
    count = WdfCmResourceListGetCount(ResourcesRaw);

    for (i = 0; i < count; i++) {
        PCM_PARTIAL_RESOURCE_DESCRIPTOR descriptor;

        descriptor = WdfCmResourceListGetDescriptor(
                                                    ResourcesRaw,
                                                    i
                                                    );

        if (descriptor->Type != CmResourceTypePort) {
            continue;
        }

        if (descriptor->u.Port.Start.QuadPart < pDevExt->Ranges[0].MinAddress ||
             descriptor->u.Port.Start.QuadPart > pDevExt->Ranges[0].MaxAddress)
        {
            WdfCmResourceListRemoveByDescriptor(
                                                ResourcesRaw,
                                                descriptor
                                                );

            // The descriptor may not be the same in the raw and translated resource lists, so use an index for the second removal

            WdfCmResourceListRemove(
                                                ResourcesTranslated,
                                                i
                                                );
            break;
        }
    }
}

Configuration requise

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

Voir aussi

CM_PARTIAL_RESOURCE_DESCRIPTOR

WdfCmResourceListRemove