Freigeben über


WdfCmResourceListRemoveByDescriptor-Funktion (wdfresource.h)

[Gilt nur für KMDF]

Die WdfCmResourceListRemoveByDescriptor-Methode entfernt einen angegebenen Ressourcendeskriptor aus einer angegebenen Ressourcenliste.

Syntax

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

Parameter

[in] List

Ein Handle für ein Framework-Ressourcenlistenobjekt, das eine Liste der Hardwareressourcen für ein Gerät darstellt.

[in] Descriptor

Ein Zeiger auf eine CM_PARTIAL_RESOURCE_DESCRIPTOR Struktur, die eine Hardwareressource beschreibt.

Rückgabewert

Keine

Bemerkungen

Eine Fehlerüberprüfung tritt auf, wenn der Treiber ein ungültiges Objekthandle bereitstellt.

Die WdfCmResourceListRemoveByDescriptor-Methode entfernt den Ressourcendeskriptor, der dem Descriptor-Parameter entspricht. Um eine Übereinstimmung zu finden, vergleicht die Methode den angegebenen Ressourcendeskriptor mit den Ressourcendeskriptoren in der logischen Konfiguration, Byte für Byte.

Wenn WdfCmResourceListRemoveByDescriptor den Ressourcendeskriptor entfernt, der über den Indexwert n verfügt, ändert sich der Indexwert des nächsten Ressourcendeskriptors von n+1 in n.

Weitere Informationen zu Ressourcenlisten finden Sie unter Hardwareressourcen für Framework-Based Treiber.

Beispiele

Im folgenden Codebeispiel wird nach Portressourcendeskriptoren in den Ressourcenlisten eines Geräts gesucht. Für jede Portressource, die im Beispiel gefunden wird, wird überprüft, ob sich die Portadresse innerhalb eines bestimmten Bereichs befindet. Wenn sich die Portadresse außerhalb des Bereichs befindet, entfernt das Beispiel den Deskriptor sowohl aus den Rohdatenlisten als auch aus der übersetzten Ressourcenliste.

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;
        }
    }
}

Anforderungen

Anforderung Wert
Zielplattform Universell
KMDF-Mindestversion 1.0
Kopfzeile wdfresource.h (einschließen von Wdf.h)
Bibliothek Wdf01000.sys (siehe Versionierung der Frameworkbibliothek.)
IRQL <=DISPATCH_LEVEL
DDI-Complianceregeln DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Weitere Informationen

CM_PARTIAL_RESOURCE_DESCRIPTOR

WdfCmResourceListRemove