디바이스 개체 소개
운영 체제는 디바이스 개체별로 디바이스를 나타냅니다. 하나 이상의 디바이스 개체가 각 디바이스와 연결됩니다. 디바이스 개체는 디바이스에서 모든 작업의 대상 역할을 합니다.
커널 모드 드라이버는 다음 예외를 제외하고 각 디바이스에 대해 하나 이상의 디바이스 개체를 만들어야 합니다.
연결된 클래스 또는 포트 드라이버가 있는 미니 드라이버는 자체 디바이스 개체를 만들 필요가 없습니다. 클래스 또는 포트 드라이버는 디바이스 개체를 만들고 미니드라이버에 작업을 디스패치합니다.
NDIS 미니포트 드라이버와 같은 디바이스 유형별 하위 시스템의 일부인 드라이버에는 하위 시스템에 의해 생성된 디바이스 개체가 있습니다.
드라이버가 자체 디바이스 개체를 만드는지 확인하려면 특정 디바이스 유형에 대한 설명서를 참조하세요.
일부 디바이스 개체는 물리적 디바이스를 나타내지 않습니다. I/O 요청을 처리하지만 해당 요청을 하드웨어에 전달하지 않는 소프트웨어 전용 드라이버는 여전히 작업 대상을 나타내는 디바이스 개체를 만들어야 합니다.
드라이버에서 디바이스 개체를 만드는 방법에 대한 자세한 내용은 디바이스 개체 만들기를 참조하세요.
디바이스는 일반적으로 디바이스에 대한 I/O 요청을 처리하는 드라이버 스택의 각 드라이버에 대해 하나씩 여러 디바이스 개체로 표시됩니다. 디바이스의 디바이스 개체는 디바이스 스택으로 구성됩니다. 디바이스에서 작업을 수행할 때마다 시스템은 IRP 데이터 구조를 디바이스 스택의 상위 디바이스 개체에 대한 드라이버에 전달합니다. 각 드라이버는 IRP를 처리하거나 디바이스 스택의 다음 하위 디바이스 개체와 연결된 드라이버에 전달합니다. 디바이스 스택에 대한 자세한 내용은 WDM 디바이스 스택 예제를 참조하세요. IRP에 대한 자세한 내용은 IRP 처리를 참조하세요.
디바이스 개체는 개체 관리자가 관리하는 DEVICE_OBJECT 구조체로 표시됩니다. 개체 관리자는 다른 시스템 개체에 대해 수행하는 것과 동일한 디바이스 개체 기능을 제공합니다. 특히 디바이스 개체의 이름을 지정할 수 있으며 명명된 디바이스 개체에 핸들을 열 수 있습니다. 명명된 디바이스 개체에 대한 자세한 내용은 명명된 디바이스 개체를 참조하세요.
시스템은 드라이버가 디바이스별 스토리지에 사용할 수 있는 디바이스 확장이라고 하는 각 디바이스 개체에 대한 전용 스토리지를 제공합니다. 디바이스 확장은 디바이스 개체와 함께 시스템에서 만들어지고 해제됩니다. 자세한 내용은 디바이스 확장을 참조하세요.
다음 그림에서는 디바이스 개체와 I/O 관리자 간의 관계를 보여 줍니다.
그림에서는 드라이버 작성기에 관심이 있는 DEVICE_OBJECT 구조체의 멤버를 보여 줍니다. 이러한 멤버에 대한 자세한 내용은 디바이스 개체 만들기, 디바이스 개체초기화 및 디바이스 개체의 속성을 참조하세요.