Поделиться через


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

[Применимо только к KMDF]

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

Синтаксис

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

Параметры

[in] List

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

[in] Descriptor

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

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

Никакой

Замечания

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

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

Если 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