다음을 통해 공유


버스 드라이버에서 디바이스 개체 만들기

버스 드라이버 자식 디바이스가 부모 디바이스에 연결되어 있음을 발견할 때 프레임워크 디바이스 개체를 만들어야 합니다. 부모 디바이스는 일반적으로 버스이지만, 각 함수에 별도의 드라이버 집합(예: 디지털 오디오 및 MIDI를 지원하는 사운드 카드)이 필요한 다기능 디바이스일 수도 있습니다. 버스 드라이버가 만드는 디바이스 개체를 PDO(물리적 디바이스 개체)라고 합니다. 각 개체는 하드웨어(자식)와 다른(부모)의 실제 연결을 나타내기 때문입니다.

버스에 연결된 디바이스를 식별하고 보고하는 프로세스를 버스 열거형이라고 합니다.

버스 열거에 대한 자세한 내용은 버스에서 장치 열거을 참조하세요.

버스 드라이버는 WDFDEVICE_INIT 구조에 정보를 저장하는 프레임워크 디바이스 개체 초기화 메서드집합을 호출할 수 있습니다. 또한 버스 드라이버는 프레임워크 PDO 초기화 메서드를호출할 수 있습니다.

열거된 자식 디바이스에 대한 프레임워크 디바이스 개체를 만드는 데는 일반적으로 다음 단계가 포함됩니다.

  • 버스 드라이버별 콜백 함수 등록

    대부분의 버스 드라이버는 디바이스에 필요한 시스템 하드웨어 리소스를 지정해야 하므로WdfPdoInitSetEventCallbacks를 호출합니다. 하드웨어 리소스를 지정하는 방법에 대한 자세한 내용은 Framework-Based 드라이버 하드웨어 리소스를 참조하세요. 디바이스와 드라이버가 배출을 지원하는 경우 추가 콜백 함수를 등록할 수 있습니다.

  • 디바이스 식별 문자열을(를) 보고합니다.

    버스 드라이버는 디바이스가 지원하는 각 종류의 문자열에 대해 WdfPdoInitAssignDeviceID, WdfPdoInitAssignInstanceID, WdfPdoInitAddCompatibleID, 그리고 WdfPdoInitAddHardwareID를 호출하여 식별 문자열을 보고해야 합니다. 또한 프레임워크 버전 1.9 이상을 사용하는 버스 드라이버는 WdfPdoInitAssignContainerID호출할 수 있습니다.

  • 버스 드라이버가 원시 모드에서 디바이스를 지원할 수 있는지 여부를 보고합니다.

    버스 드라이버가 디바이스에 대한 원시 모드를 지원하는 경우 WdfPdoInitAssignRawDevice호출해야 합니다.

  • 디바이스를 설명하는 표시 가능한 텍스트 제공

    버스 드라이버는 WdfPdoInitAddDeviceText 호출하고 WdfPdoInitSetDefaultLocale여러 언어로 사용자에게 디바이스를 설명하는 텍스트를 제공합니다.

  • 디바이스 개체 만들기

    디바이스 개체를 만드는 마지막 단계는 WdfDeviceCreate호출하는 것입니다.

드라이버가 WdfPdoInitAllocate에서 얻은 WDFDEVICE_INIT 구조를 초기화하는 동안 오류가 발생하는 경우, 드라이버는 WdfDeviceCreate대신 WdfDeviceInitFree를 호출해야 합니다.

버스 드라이버가 디바이스 개체를 만든 후 일반적으로 WdfDeviceSetPnpCapabilities 호출하고 WdfDeviceSetPowerCapabilities디바이스의 플러그 앤 플레이 및 전원 기능을 보고합니다.

각 버스 드라이버는 버스 어댑터의 함수 드라이버이기도 합니다. 따라서 드라이버는 EvtDriverDeviceAdd 콜백 함수도 제공해야 합니다. 이 콜백 함수는 시스템의 각 버스 어댑터에 대한 FDO(기능 디바이스 개체)를 만듭니다. FDO를 만드는 방법에 대한 자세한 내용은 함수 드라이버 디바이스 개체 만들기참조하세요.