Функция 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) |