WdfChildListAddOrUpdateChildDescriptionAsPresent 함수(wdfchildlist.h)
[KMDF에만 적용]
WdfChildListAddOrUpdateChildDescriptionAsPresent 메서드는 자식 목록에 새 자식 설명을 추가하거나 기존 자식 설명을 업데이트합니다.
구문
NTSTATUS WdfChildListAddOrUpdateChildDescriptionAsPresent(
[in] WDFCHILDLIST ChildList,
[in] PWDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER IdentificationDescription,
[in, optional] PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER AddressDescription
);
매개 변수
[in] ChildList
프레임워크 자식 목록 개체에 대한 핸들입니다.
[in] IdentificationDescription
자식 식별 설명을 식별하는 WDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER 구조체에 대한 포인터입니다.
[in, optional] AddressDescription
자식 주소 설명을 식별하는 WDF_CHILD_ADDRESS_DESCRIPTION_HEADER 구조체에 대한 포인터입니다. 주소 설명이 필요하지 않은 경우 이 매개 변수는 NULL일 수 있습니다.
반환 값
WdfChildListAddOrUpdateChildDescriptionAsPresent는 작업이 성공하면 STATUS_SUCCESS 또는 NT_SUCCESS(상태)가 TRUE인 다른 NTSTATUS 형식의 상태 값을 반환합니다. 그렇지 않으면 이 메서드는 다음 값 중 하나를 반환할 수 있습니다.
반환 코드 | 설명 |
---|---|
|
입력 매개 변수가 잘못되었습니다. |
|
식별 설명 또는 주소 설명의 크기가 잘못되었습니다. |
|
제공된 식별 설명이 있는 자식이 이미 있습니다. 이 경우 프레임워크는 제공된 주소 설명을 기존 자식에 복사합니다. |
|
자식 설명을 할당할 수 있습니다. |
이 메서드는 다른 NTSTATUS 값을 반환할 수도 있습니다.
드라이버가 잘못된 개체 핸들을 제공하는 경우 시스템 버그 검사 발생합니다.
설명
WdfChildListAddOrUpdateChildDescriptionAsPresent 메서드는 지정된 자식 목록에서 제공된 식별 설명과 일치하는 자식을 검색합니다. 일치하는 항목이 발견되면 프레임워크는 제공된 경우 자식의 주소 설명을 업데이트하고 STATUS_OBJECT_NAME_EXISTS 반환합니다. 일치하는 항목이 없으면 프레임워크는 제공된 ID 및 주소 설명을 사용하여 새 자식 을 만듭니다.
드라이버는 WdfChildListAddOrUpdateChildDescriptionAsPresent 를 호출하여 단일 자식 설명을 추가하거나 업데이트할 수 있습니다. 프레임워크는 자식 목록을 즉시 업데이트하고 플러그 앤 플레이(PnP) 관리자에게 변경 내용을 알릴 수 있습니다.
또는 드라이버는 다음을 수행할 수 있습니다.
- WdfChildListBeginScan을 호출하여 업데이트할 자식 목록을 준비합니다.
- WdfChildListAddOrUpdateChildDescriptionAsPresent를 여러 번 호출하여 부모 디바이스의 모든 자식에 대한 자식 설명을 추가하거나 업데이트합니다.
- WdfChildListEndScan을 호출하여 자식 목록의 변경 내용을 처리합니다.
드라이버가 WdfChildListAddOrUpdateChildDescriptionAsPresent를 호출한 후 프레임워크는 드라이버가 WdfDeviceCreate를 호출하여 디바이스 개체를 만들 수 있도록 드라이버의 EvtChildListCreateDevice 콜백 함수를 호출합니다.
자식 목록에 대한 자세한 내용은 동적 열거형을 참조하세요.
예제
다음 코드 예제는 kmdf_fx2 샘플에 포함된 코드를 기반으로 합니다. 이 예제에서는 디바이스의 기본 자식 목록에 자식 설명을 추가합니다. 드라이버가 이전에 디바이스 개체의 컨텍스트 공간에 저장한 스위치 설정을 검색한 다음 설정된 각 스위치에 대해 WdfChildListAddOrUpdateChildDescriptionAsPresent 를 호출합니다.
PDEVICE_CONTEXT pDeviceContext;
WDFCHILDLIST list;
UCHAR i;
NTSTATUS status;
pDeviceContext = GetDeviceContext(Device);
list = WdfFdoGetDefaultChildList(Device);
WdfChildListBeginScan(list);
for (i = 0; i < RTL_BITS_OF(UCHAR); i++) {
if (pDeviceContext->CurrentSwitchState & (1<<i)) {
PDO_IDENTIFICATION_DESCRIPTION description;
WDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER_INIT(
&description.Header,
sizeof(description)
);
description.SwitchNumber = i;
status = WdfChildListAddOrUpdateChildDescriptionAsPresent(
list,
&description.Header,
NULL
);
if (!NT_SUCCESS(status) && (status != STATUS_OBJECT_NAME_EXISTS)) {
break;
}
}
}
WdfChildListEndScan(list);
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | 유니버설 |
최소 KMDF 버전 | 1.0 |
머리글 | wdfchildlist.h(Wdf.h 포함) |
라이브러리 | Wdf01000.sys(프레임워크 라이브러리 버전 관리 참조) |
IRQL | <= DISPATCH_LEVEL |
DDI 규정 준수 규칙 | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |
추가 정보
WDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER