다음을 통해 공유


WDM 디바이스 개체는 언제 생성되나요?

이 섹션에서는 각 종류의 디바이스 개체에 대해 설명하고 각 개체를 만들 때 언급합니다.

다음 그림에서는 디바이스에 대한 I/O 요청을 처리하는 드라이버를 나타내는 디바이스 스택에 연결할 수 있는 가능한 종류의 디바이스 개체를 보여 줍니다.

디바이스에 대한 가능한 디바이스 개체 계층을 보여 주는 다이어그램

이 그림의 맨 아래에서 시작합니다.

  • 버스 드라이버는 버스에서 열거하는 각 디바이스에 대해 PDO를 만듭니다.

    버스 드라이버는 디바이스를 열거할 때 자식 디바이스에 대한 PDO를 만듭니다. 버스 드라이버는 PnP 관리자의 BusRelations에 대한 IRP_MN_QUERY_DEVICE_RELATIONS 요청에 대한 응답으로 디바이스를 열거합니다. 버스 드라이버가 BusRelations 에 대한 쿼리 관계 요청에 마지막으로 응답한 이후(또는 컴퓨터가 부팅된 이후 첫 번째 쿼리 관계 요청인 경우) 디바이스가 버스에 추가된 경우 버스 드라이버는 자식 디바이스에 대한 PDO를 만듭니다.

    PDO는 전원 관리자, PnP 관리자 및 I/O 관리자와 같은 다른 커널 모드 시스템 구성 요소뿐만 아니라 버스 드라이버에 대한 디바이스를 나타냅니다.

    디바이스에 대한 다른 드라이버는 PDO 위에 디바이스 개체를 연결하지만 PDO는 항상 디바이스 스택의 맨 아래에 있습니다.

  • 선택적 버스 필터 드라이버는 필터링하는 각 디바이스에 대한 필터 DO를 만듭니다.

    PnP 관리자가 BusRelations 목록에서 새 디바이스를 검색하면 디바이스에 대한 버스 필터 드라이버가 있는지 여부를 결정합니다. 그렇다면 PnP 관리자는 이러한 각 드라이버에 대해 로드(필요한 경우 DriverEntry 호출)를 보장하고 드라이버의 AddDevice 루틴을 호출합니다. 버스 필터 드라이버가 이 디바이스에 대한 작업을 필터링하는 경우 필터 드라이버는 디바이스 개체를 만들고 AddDevice 루틴의 디바이스 스택에 연결합니다. 버스 필터 드라이버가 둘 이상 존재하고 이 디바이스와 관련된 경우 이러한 각 필터 드라이버는 자체 디바이스 개체를 만들고 연결합니다.

  • 선택적 하위 수준 필터 드라이버는 필터링하는 각 디바이스에 대한 필터 DO를 만듭니다.

    이 디바이스에 대해 선택적 하위 수준 필터 드라이버가 있는 경우 PnP 관리자는 버스 드라이버 및 버스 필터 드라이버 다음에 이러한 드라이버가 로드되도록 합니다. PnP 관리자는 필터 드라이버의 AddDevice 루틴을 호출합니다. AddDevice 루틴에서 하위 수준 필터 드라이버는 디바이스에 대한 필터 DO를 만들고 디바이스 스택에 연결합니다. 하위 수준 필터 드라이버가 두 개 이상 있는 경우 이러한 각 드라이버는 자체 필터 DO를 만들고 연결합니다.

  • 함수 드라이버는 디바이스에 대한 FDO를 만듭니다.

    PnP 관리자는 디바이스의 함수 드라이버가 로드되도록 하고 함수 드라이버의 AddDevice 루틴을 호출합니다. 함수 드라이버는 FDO를 만들고 디바이스 스택에 연결합니다.

  • 선택적 상위 수준 필터 드라이버는 필터링하는 각 디바이스에 대해 DO 필터를 만듭니다.

    디바이스에 대한 선택적 상위 수준 필터 드라이버가 있는 경우 PnP 관리자는 함수 드라이버 다음에 로드되도록 하고 AddDevice 루틴을 호출합니다. 이러한 각 필터 드라이버는 디바이스 개체를 디바이스 스택에 연결합니다.

요약하자면, 디바이스 스택에는 특정 디바이스에 대한 I/O 처리와 관련된 각 드라이버에 대한 디바이스 개체가 포함되어 있습니다. 부모 버스 드라이버에는 PDO가 있고, 함수 드라이버에 FDO가 있으며, 각 선택적 필터 드라이버에는 필터 DO가 있습니다.

모든 디바이스, 버스 어댑터/컨트롤러 디바이스 및 비버스 디바이스에는 PDO 및 FDO가 디바이스 스택에 있습니다. 버스 어댑터/컨트롤러에 대한 PDO는 부모 버스에 대한 버스 드라이버에 의해 생성됩니다. 예를 들어 SCSI 어댑터가 PCI 버스에 연결하는 경우 PCI 버스 드라이버는 SCSI 어댑터에 대한 PDO를 만듭니다.

디바이스가 원시 모드에서 사용되는 경우 함수 또는 필터 드라이버(FDO 또는 필터 DO 없음)가 없습니다. 부모 버스 드라이버에 대한 PDO와 0개 이상의 버스 필터 DO만 있습니다.

디바이스 개체 만들기 및 연결을 담당하는 드라이버 루틴에 대한 자세한 내용은 디바이스 개체 만들기를 참조하세요.

디바이스 스택과 몇 가지 추가 정보는 디바이스에 대한 devnode 를 구성합니다. PnP 관리자는 디바이스가 시작되었는지 여부 및 디바이스의 변경 알림에 등록한 드라이버(있는 경우)와 같은 디바이스의 devnode에 정보를 유지 관리합니다. 커널 디버거 명령 !devnode는 devnode 에 대한 정보를 표시합니다.