WdfCmResourceListRemoveByDescriptor 函数 (wdfresource.h)
[仅适用于 KMDF]
WdfCmResourceListRemoveByDescriptor 方法从指定的资源列表中删除指定的资源描述符。
语法
void WdfCmResourceListRemoveByDescriptor(
[in] WDFCMRESLIST List,
[in] PCM_PARTIAL_RESOURCE_DESCRIPTOR Descriptor
);
参数
[in] List
框架资源列表对象的句柄,该对象表示设备的硬件资源列表列表。
[in] Descriptor
指向描述硬件资源的 CM_PARTIAL_RESOURCE_DESCRIPTOR 结构的指针。
返回值
无
备注
如果驱动程序提供无效的对象句柄,则会发生 bug 检查。
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) |
Library | Wdf01000.sys (请参阅框架库版本控制.) |
IRQL | <=DISPATCH_LEVEL |
DDI 符合性规则 | DriverCreate (kmdf) 、 KmdfIrql (kmdf) 、 KmdfIrql2 (kmdf) 、 KmdfIrqlExplicit (kmdf) |