디바이스 개체 만들기

모놀리식 드라이버는 I/O 요청을 처리하는 각 물리적, 논리적 또는 가상 디바이스에 대한 디바이스 개체를 만들어야 합니다. 디바이스에 대한 디바이스 개체를 만들지 않는 드라이버는 디바이스에 대한 IRP를 받지 않습니다.

일부 기술 영역에서는 클래스 드라이버 또는 포트 드라이버와 연결된 미니 드라이버가 자체 디바이스 개체를 만들 필요가 없습니다. 대신 클래스 또는 포트 드라이버는 디바이스 개체를 만들고 디바이스에 대한 모든 IRP를 받습니다. 그런 다음 클래스 또는 포트 드라이버는 드라이버별 메서드를 사용하여 I/O 요청을 미니드라이버에 전달합니다. Microsoft가 드라이버를 대신하여 디바이스 개체를 만드는 클래스 또는 포트 드라이버를 제공하는지 확인하려면 특정 기술 영역에 대한 설명서를 참조하세요.

드라이버는 IoCreateDevice 또는 IoCreateDeviceSecure 를 호출하여 디바이스 개체를 만듭니다. 사용할 루틴에 대한 자세한 내용은 다음 섹션을 참조하세요.

WDM 함수 및 필터 드라이버용 디바이스 개체 만들기

WDM Bus 드라이버용 디바이스 개체 만들기

비 WDM 드라이버용 디바이스 개체 만들기

드라이버가 디바이스 개체를 만들 때 IoCreateDevice 또는 IoCreateDeviceSecure다음 정보를 제공합니다.

  • 디바이스 확장의 크기입니다. 디바이스 확장은 드라이버가 디바이스별 스토리지에 사용할 수 있는 시스템 할당 스토리지 영역입니다. 자세한 내용은 디바이스 확장을 참조하세요.

  • 디바이스 개체가 나타내는 DeviceType 을 나타내는 시스템 정의 상수입니다. 자세한 내용은 디바이스 유형 지정을 참조하세요.

  • 디바이스의 디바이스 특성을 나타내는 하나 이상의 ORed 시스템 정의 상수입니다. 자세한 내용은 디바이스 특성 지정을 참조하세요.

  • 디바이스 개체의 Flags에서 비트가 비디오, 직렬, 병렬 또는 사운드 디바이스와 같은 배타적 디바이스를 서비스함을 나타내는 DO_EXCLUSIVE 사용하여 설정할지 여부를 지정하는 Exclusive라는 부울 값입니다. WDM 드라이버는 배타적FALSE로 설정해야 합니다. 자세한 내용은 디바이스 개체에 대한 단독 액세스 지정을 참조하세요.

  • 드라이버의 드라이버 개체에 대한 포인터입니다. WDM 함수 또는 필터 드라이버는 해당 드라이버 개체에 대한 포인터를 AddDevice 루틴에 대한 매개 변수로 받습니다. 모든 드라이버는 DriverEntry 루틴에서 드라이버 개체에 대한 포인터를 받습니다. 시스템은 이 포인터를 사용하여 드라이버를 디바이스 개체와 연결합니다.

  • 디바이스 이름을 지정하는 null로 끝나는 유니코드 문자열(DeviceName)에 대한 선택적 포인터입니다. 버스 드라이버 이외의 WDM 드라이버는 디바이스 이름을 제공하지 않습니다. 이렇게 하면 PnP 관리자의 보안 기능이 무시됩니다. 자세한 내용은 명명된 디바이스 개체를 참조하세요.

IoCreateDevice 또는 IoCreateDeviceSecure에 대한 호출이 성공하면 I/O 관리자는 디바이스 개체 자체 및 디바이스 확장을 포함하여 디바이스 개체와 연결된 다른 모든 데이터 구조에 대한 스토리지를 제공합니다. 이 스토리지는 0으로 초기화됩니다.

WDM 함수 및 필터 드라이버용 디바이스 개체 만들기

버스 드라이버 이외의 WDM 드라이버는 IoCreateDevice 를 호출하여 디바이스 개체를 만듭니다. 대부분의 WDM 드라이버는 AddDevice 루틴 내에서 디바이스 개체를 만듭니다. 드라이브 레이아웃 IOCTL에 응답해야 하는 디스크 드라이버와 같은 일부 드라이버는 디스패치 루틴에서 IoCreateDevice 를 호출합니다.

WDK(Windows 드라이버 키트) 설명서의 디바이스 유형별 섹션이 그렇지 않으면 드라이버가 AddDevice 루틴에서 해당 디바이스 개체를 만들어야 합니다. 자세한 내용은 AddDevice 루틴 작성을 참조하세요.

WDM Bus 드라이버용 디바이스 개체 만들기

WDM 버스 드라이버는 관계 유형이 BusRelations인 경우 IRP_MN_QUERY_DEVICE_RELATIONS 요청에 대한 응답으로 새 디바이스를 열거할 때 PDO를 만듭니다.

다음 규칙은 버스 드라이버가 IoCreateDevice 또는 IoCreateDeviceSecure를 호출하여 디바이스 개체를 만드는지 여부를 결정합니다.

  • 원시 모드에서 디바이스를 사용할 수 있는 경우 IoCreateDeviceSecure를 호출해야 합니다.

  • 디바이스가 원시 모드를 사용할 수 없는 경우 버스 드라이버는 IoCreateDevice 또는 IoCreateDeviceSecure를 사용할 수 있습니다. 버스의 디바이스에 대한 기본 시스템 보안이 적절한 경우 IoCreateDevice를 사용할 수 있습니다. IoCreateDeviceSecure를 사용하여 보다 엄격한 보안 설명자를 지정할 수 있습니다. 자세한 내용은 디바이스 액세스 제어를 참조하세요.

비 WDM 드라이버용 디바이스 개체 만들기

비 WDM 드라이버는 IoCreateDevice 를 사용하여 명명되지 않은 디바이스 개체를 만들고 , IoCreateDeviceSecure 를 사용하여 명명된 디바이스 개체를 만듭니다. WDM이 아닌 드라이버의 명명되지 않은 디바이스 개체는 사용자 모드에서 액세스할 수 없으므로 일반적으로 드라이버는 하나 이상의 명명된 개체를 만들어야 합니다.