버스 드라이버에서 디바이스 개체 만들기
각 버스 드라이버는 자식 디바이스가 부모 디바이스에 연결되어 있음을 발견할 때 프레임워크 디바이스 개체를 만들어야 합니다. 부모 디바이스는 일반적으로 버스이지만 각 함수에 별도의 드라이버 집합(예: 디지털 오디오 및 MIDI를 지원하는 사운드 카드)이 필요한 다기능 디바이스일 수도 있습니다. 버스 드라이버에서 만드는 디바이스 개체를 PDO(물리적 디바이스 개체)라고 합니다. 각 개체는 하드웨어(자식)와 다른 (부모)의 실제 연결을 나타내기 때문입니다.
버스에 연결된 디바이스를 식별하고 보고하는 프로세스를 버스 열거형이라고 합니다.
버스 드라이버가 동적 버스 열거를 수행하는 경우 EvtChildListCreateDevice 콜백 함수는 WDFDEVICE_INIT 구조체에 대한 핸들을 받습니다.
버스 드라이버가 정적 버스 열거를 수행하는 경우 WdfPdoInitAllocate 를 호출하여 WDFDEVICE_INIT 구조체에 대한 핸들을 가져와야 합니다.
버스 열거에 대한 자세한 내용은 버스에서 디바이스 열거를 참조하세요.
버스 드라이버는 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를 만드는 방법에 대한 자세한 내용은 함수 드라이버에서 디바이스 개체 만들기를 참조하세요.