Функция WdfCmResourceListRemoveByDescriptor (wdfresource.h)

[Относится только к KMDF]

Метод WdfCmResourceListRemoveByDescriptor удаляет указанный дескриптор ресурса из указанного списка ресурсов.

Синтаксис

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

Параметры

[in] List

Дескриптор объекта списка ресурсов платформы, который представляет список аппаратных ресурсов для устройства.

[in] Descriptor

Указатель на структуру CM_PARTIAL_RESOURCE_DESCRIPTOR , описывающую аппаратный ресурс.

Возвращаемое значение

None

Remarks

Ошибка проверка возникает, если драйвер предоставляет недопустимый дескриптор объекта.

Метод WdfCmResourceListRemoveByDescriptor удаляет дескриптор ресурса, соответствующий параметру Descriptor . Чтобы найти совпадение, метод сравнивает указанный дескриптор ресурса с дескрипторами ресурсов в логической конфигурации( byte — byte).

Когда WdfCmResourceListRemoveByDescriptor удаляет дескриптор ресурса со значением индекса n, значение индекса следующего дескриптора ресурса изменяется с n+1 на n.

Дополнительные сведения о списках ресурсов см. в разделе Аппаратные ресурсы для драйверов Framework-Based.

Примеры

В следующем примере кода выполняется поиск дескрипторов ресурсов порта в списках ресурсов устройства. Для каждого ресурса порта, найденного в примере, проверяется, находится ли адрес порта в определенном диапазоне. Если адрес порта находится за пределами диапазона, в примере удаляется дескриптор из необработанных и преобразованных списков ресурсов.

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

Требования

Требование Значение
Целевая платформа Универсальное
Минимальная версия KMDF 1,0
Верхняя часть wdfresource.h (включая Wdf.h)
Библиотека Wdf01000.sys (см. раздел Управление версиями библиотеки Платформы).
IRQL <=DISPATCH_LEVEL
Правила соответствия DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

См. также раздел

CM_PARTIAL_RESOURCE_DESCRIPTOR

WdfCmResourceListRemove