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 메서드는 Descriptor 매개 변수와 일치하는 리소스 설명자를 제거합니다. 일치 항목을 찾기 위해 메서드는 지정된 리소스 설명자를 논리 구성의 리소스 설명자와 바이트 바이트 단위로 비교합니다.
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) |