다음을 통해 공유


정적 열거형

정적 열거형 은 시스템 초기화 중에 디바이스의 존재를 감지하고 보고하는 드라이버의 기능이며, 시스템 구성에 대한 후속 변경 내용을 보고하는 기능이 제한됩니다.

버스 드라이버는 디바이스 또는 기능 하위 단위의 수와 유형이 미리 결정되고 영구적이며 드라이버가 실행 중인 시스템의 구성에 종속되지 않는 경우 정적 열거형을 사용할 수 있습니다.

예를 들어 사운드 카드 드라이버는 버스 드라이버 역할을 하고 MIDI, 오디오 및 조이스틱과 같은 각 카드 기능에 대해 별도의 PDO(물리적 디바이스 개체)를 만들 수 있습니다.

정적 자식 목록

프레임워크를 사용하면 드라이버가 정적 자식 목록을 제공하여 정적 열거형을 지원할 수 있습니다. 각 정적 자식 목록은 부모 디바이스에 연결된 자식 디바이스의 목록을 나타냅니다. 부모 디바이스의 버스 드라이버는 부모의 자식 디바이스를 식별하고, 부모 디바이스의 정적 자식 목록에 추가하고, 각 자식 디바이스에 대한 PDO를 만들어야 합니다.

정적 자식 목록 만들기

드라이버가 디바이스에 대한 FDO(기능 디바이스 개체)를 나타내는 프레임워크 디바이스 개체를 만들 때마다 프레임워크는 디바이스에 대한 빈 정적 자식 목록을 만듭니다.

프레임워크가 버스 드라이버의 EvtDriverDeviceAdd 콜백 함수를 호출하는 경우 콜백 함수는 WdfDeviceCreate 를 호출하여 부모 디바이스에 대한 FDO를 만들어야 합니다. FDO를 만드는 방법에 대한 자세한 내용은 함수 드라이버에서 디바이스 개체 만들기를 참조하세요.

그런 다음 드라이버는 부모 디바이스의 자식을 열거하고 자식에 대한 PDO를 만들고 자식 목록에 자식을 추가해야 합니다.

필요에 따라 드라이버는 WdfDeviceSetBusInformationForChildren 를 호출하여 버스에 대한 정보를 프레임워크에 제공할 수 있습니다. 이렇게 하면 자식 디바이스 및 앱이 버스를 더 쉽게 식별할 수 있기 때문에 권장됩니다.

검색된 자식 디바이스에 대한 PDO를 만들려면 버스 드라이버는 다음을 수행해야 합니다.

  1. WdfPdoInitAllocate를 호출하여 WDFDEVICE_INIT 구조를 가져옵니다.

  2. WDFDEVICE_INIT 구조를 초기화합니다.

  3. WdfDeviceCreate를 호출하여 PDO를 나타내는 프레임워크 디바이스 개체를 만듭니다.

PDO를 만드는 방법에 대한 자세한 내용은 버스 드라이버에서 디바이스 개체 만들기를 참조하세요.

WdfDeviceCreate를 호출한 후 드라이버는 WdfFdoAddStaticChild를 호출하여 자식 디바이스를 자식 목록에 추가해야 합니다.

정적 자식 목록 수정

드라이버는 미리 결정되고 영구적인 디바이스 구성에만 정적 자식 목록을 사용해야 하므로 드라이버가 정적 자식 목록을 만든 후에 수정할 필요가 거의 없습니다. 드라이버가 자식 디바이스에 액세스할 수 없게 된 경우 드라이버는 WdfPdoMarkMissing을 호출할 수 있습니다. (자식 디바이스에 계속 액세스할 수 있지만 응답하지 않고 사용할 수 없게 되면 드라이버는 WDF_DEVICE_STATE 구조의 Failed 멤버를 WdfTrue로 설정한 다음 WdfDeviceSetDeviceState를 호출해야 합니다.)

정적 자식 목록 트래버스

정적 자식 목록의 내용을 검색해야 하는 경우 드라이버는 다음을 수행하여 목록을 트래버스할 수 있습니다.

  1. WdfFdoLockStaticChildListForIteration을 호출합니다.

  2. WdfFdoRetrieveNextStaticChild를 필요한 횟수만큼 호출합니다.

  3. WdfFdoUnlockStaticChildListFromIteration을 호출합니다.