다음을 통해 공유


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 형식의 상태 값을 반환합니다. 그렇지 않으면 이 메서드는 다음 값 중 하나를 반환할 수 있습니다.

반환 코드 설명
STATUS_INVALID_PARAMETER
입력 매개 변수가 잘못되었습니다.
STATUS_INVALID_DEVICE_REQUEST
식별 설명 또는 주소 설명의 크기가 잘못되었습니다.
STATUS_OBJECT_NAME_EXISTS
제공된 식별 설명이 있는 자식이 이미 있습니다. 이 경우 프레임워크는 제공된 주소 설명을 기존 자식에 복사합니다.
STATUS_INSUFFICIENT_RESOURCES
자식 설명을 할당할 수 있습니다.
 

이 메서드는 다른 NTSTATUS 값을 반환할 수도 있습니다.

드라이버가 잘못된 개체 핸들을 제공하는 경우 시스템 버그 검사 발생합니다.

설명

WdfChildListAddOrUpdateChildDescriptionAsPresent 메서드는 지정된 자식 목록에서 제공된 식별 설명과 일치하는 자식을 검색합니다. 일치하는 항목이 발견되면 프레임워크는 제공된 경우 자식의 주소 설명을 업데이트하고 STATUS_OBJECT_NAME_EXISTS 반환합니다. 일치하는 항목이 없으면 프레임워크는 제공된 ID 및 주소 설명을 사용하여 새 자식 을 만듭니다.

드라이버는 WdfChildListAddOrUpdateChildDescriptionAsPresent 를 호출하여 단일 자식 설명을 추가하거나 업데이트할 수 있습니다. 프레임워크는 자식 목록을 즉시 업데이트하고 플러그 앤 플레이(PnP) 관리자에게 변경 내용을 알릴 수 있습니다.

또는 드라이버는 다음을 수행할 수 있습니다.

  1. WdfChildListBeginScan을 호출하여 업데이트할 자식 목록을 준비합니다.
  2. WdfChildListAddOrUpdateChildDescriptionAsPresent를 여러 번 호출하여 부모 디바이스의 모든 자식에 대한 자식 설명을 추가하거나 업데이트합니다.
  3. WdfChildListEndScan을 호출하여 자식 목록의 변경 내용을 처리합니다.
드라이버가 이 대체 절차를 사용하는 경우 프레임워크는 자식 목록을 업데이트하고 PnP 관리자에게 변경 내용이 적용되었음을 알리기 전에 드라이버가 WdfChildListEndScan 을 호출할 때까지 기다립니다. 드라이버가 WdfChildListBeginScan을 호출하면 프레임워크는 이전에 보고된 모든 디바이스가 더 이상 존재하지 않는 것으로 표시합니다. 따라서 드라이버는 새로 검색된 자식뿐만 아니라 모든 자식에 대해 WdfChildListAddOrUpdateChildDescriptionAsPresent 를 호출해야 합니다.

드라이버가 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)

추가 정보

EvtChildListCreateDevice

WDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER

WDF_CHILD_IDENTIFICATION_DESCRIPTION_HEADER_INIT

WdfChildListBeginScan

WdfChildListEndScan

WdfDeviceCreate

WdfFdoGetDefaultChildList