다음을 통해 공유


Windows Media 장치 관리자 아키텍처

Windows Media 장치 관리자 애플리케이션 또는 플러그 인이 디바이스와 통신할 수 있도록 합니다. 애플리케이션은 디바이스 메타데이터를 요청하고, 연결된 디바이스를 열거 및 탐색하고, 개체(폴더, 파일, 재생 목록 등)를 보내거나 받을 수 있습니다. Windows Media 장치 관리자 호출되는 디바이스 유형(MTP 또는 Mass Storage 클래스, 버전 10에서 빌드된 서비스 공급자 또는 이전 버전의 Windows Media 장치 관리자 기반 서비스 공급자)에 관계없이 호출 애플리케이션에 단일 API를 제공합니다.

Windows Media 장치 관리자 시스템의 세 가지 주요 구성 요소인 애플리케이션(정보, 데이터 읽기 또는 쓰기 등)을 수행하는 애플리케이션, DRM으로 보호되는 파일과의 통신을 처리하는 구성 요소인 보안 콘텐츠 공급자, 애플리케이션에서 요청을 수신하고 이러한 요청을 수행하기 위해 디바이스와 통신하는 서비스 공급자의 역할을 합니다. 애플리케이션과 서비스 공급자는 모두 Windows Media 장치 관리자 SDK를 기반으로 합니다.

다음 다이어그램은 데스크톱 애플리케이션이 Windows Media 장치 관리자 11을 사용하여 디바이스와 통신하는 방법을 보여 줍니다.

네 가지 유형의 디바이스와 통신하는 애플리케이션을 보여 주는 다이어그램

앞의 다이어그램은 각각 자체 서비스 공급자가 있는 네 가지 유형의 디바이스와 통신하는 애플리케이션을 보여줍니다. 모든 서비스 공급자는 특정 유형의 디바이스와 통신하도록 설계되었습니다. 이 다이어그램은 Microsoft에서 제공하는 세 가지 서비스 공급자(Mass Storage 클래스 디바이스, RAPI 디바이스 및 MTP 디바이스의 일반 클래스 드라이버)와 타사에서 빌드한 독점 디바이스에 대한 사용자 지정 서비스 공급자를 보여 줍니다. 디바이스가 연결되면 Windows Media 장치 관리자 해당 디바이스에 등록된 서비스 공급자의 instance 인스턴스화합니다. 서비스 공급자는 구현하는 Windows Media 장치 관리자 인터페이스를 통해 애플리케이션에서 요청을 받고, 적절한 드라이버를 사용하여 디바이스와 통신하고, 적절한 결과를 반환합니다. 서비스 공급자와 디바이스 간의 통신은 Windows Media 장치 관리자 도메인 외부에 있습니다.

서비스 공급자는 애플리케이션에 표시되지 않습니다. Windows Media 장치 관리자 모든 디바이스에 대한 표준 메서드 및 인터페이스 집합을 노출하므로 애플리케이션에는 "디바이스" 목록만 표시됩니다. 제조업체가 사용자 지정 서비스 공급자를 만드는 경우 애플리케이션이 디바이스를 사용할 수 있는 경우 모든 표준 Windows Media 장치 관리자 메서드를 처리해야 합니다.

이 다이어그램은 SCP(보안 콘텐츠 공급자) 모듈도 보여 줍니다. 이 모듈은 DRM(디지털 권한 관리) 보호 콘텐츠를 처리합니다. Microsoft는 DRM으로 보호되는 WMA 및 WMV 파일을 처리할 수 있는 SCP 모듈을 제공합니다. 애플리케이션 또는 디바이스가 다른 보호된 형식을 처리하려는 경우 자체 SCP 모듈을 제공해야 합니다. 애플리케이션이나 서비스 공급자는 SCP를 직접 처리하지 않습니다.

애플리케이션과 서비스 공급자는 모두 디바이스에 대한 애플리케이션과 적절한 서비스 공급자 간의 호출을 라우팅하는 Windows Media 장치 관리자 기반으로 빌드됩니다. 서비스 공급자는 디바이스와 직접 통신할 책임이 있습니다. Windows Media 장치 관리자 연결된 디바이스 열거, 통화 라우팅 및 구성 요소 확인 처리와 같은 일부 작업 자체를 수행합니다. 그러나 대부분의 작업은 애플리케이션에서 요청을 받고 디바이스와 통신하는 서비스 공급자에 의해 수행됩니다.

Windows Media 장치 관리자 빌드된 애플리케이션은 이전 버전의 Windows Media 장치 관리자 빌드된 디바이스 및 서비스 공급자와 통신할 수 있지만 이러한 이전 디바이스는 9 시리즈 구성 요소(표시되지 않음)를 통해 실행되며 최신 기능, 특히 고급 디지털 권한 관리 기술을 지원하지 않습니다.

디바이스의 아키텍처

다음 다이어그램은 Windows Media 장치 관리자 사용하는 애플리케이션에서 볼 수 있는 디바이스 및 스토리지의 간소화된 계층 구조를 보여 줍니다.

디바이스의 스토리지를 보여 주는 다이어그램

앞의 다이어그램은 Windows Media 장치 관리자 애플리케이션에서 볼 수 있듯이 연결된 플래시 드라이브의 간소화된 버전을 보여줍니다. 플래시 드라이브에는 일련 번호 및 지원되는 형식 구성과 같은 특성과 속성이 있습니다. 플래시 디바이스의 직속 자식은 이미지와 노래가 포함된 폴더를 포함하는 루트 스토리지 개체입니다.

애플리케이션은 루트 IWMDeviceManager 인터페이스에 의해 노출되는 열거형 메서드를 호출하여 연결된 디바이스 목록을 열거합니다. 디바이스는 IWMDMDevice (또는 파생된) 인터페이스로 표시됩니다. 이 인터페이스는 디바이스 이름, 형식 기능, 일련 번호 등을 검색하는 메서드와 디바이스의 스토리지를 열거하는 메서드 를 노출합니다 . Windows Media 장치 관리자 스토리지는 실제 데이터 Blob인지 여부에 관계없이 디바이스의 모든 종류의 개체입니다. 예를 들어 오디오 파일, 텍스트 파일, 폴더, 파일로 저장된 재생 목록 및 메타데이터로 저장된 재생 목록은 모두 스토리지로 간주됩니다. 폴더 및 메타데이터 항목이 실제 파일을 나타내지 않을 수 있습니다. GetAttributes(또는 GetMetadata, 스토리지 형식 요청)를 호출하여 스토리지의 형식(또는 형식)을 검색할 수 있습니다.

디바이스의 스토리지는 계층적으로 저장되며 모든 디바이스에는 루트 스토리지가 있습니다. 각 스토리지는 해당 스토리지의 IWMDMStorage::EnumStorage 메서드를 호출하여 열거된 0개 이상의 자식 개체를 보유할 수 있습니다.

다이어그램의 각 스토리지에는 특성 및 메타데이터가 연결되어 있습니다(모든 값이 표시되지는 않음). 특성은 간단하며 관리 또는 탐색 정보(예: "폴더 있음" 또는 "삭제 가능")를 설명하는 부울 정보인 반면 메타데이터는 문자열 값, 숫자 또는 복잡한 정보(예: 렌더링 기능)일 수 있습니다. 특성은 SDK에서 정의하고 IWMDMStorage::GetAttributes 또는 IWMDMStorage2::GetAttributes2를 호출하여 검색되는 상당히 제한된 플래그 집합에 의해 설명됩니다. 메타데이터 값은 고유한 이름으로 검색됩니다. SDK는 디바이스에서 지원해야 하는 여러 메타데이터 값을 정의하지만 디바이스는 자체 메타데이터 상수를 정의할 수 있습니다. 그러나 디바이스 또는 서비스 공급자가 새 메타데이터 상수를 정의하는 경우 애플리케이션 개발자가 이 새 상수를 인식하지 않는 한 애플리케이션에서 이 값을 요청하거나 설정할 수 없습니다. 서비스 공급자는 메타데이터 검색 또는 설정을 지원하려면 IWMDMStorage3 이상을 지원해야 합니다. 자세한 내용은 메타데이터 및 특성 가져오기 및 설정을 참조하세요.

서비스 공급자

서비스 공급자는 애플리케이션과 디바이스 간의 미들맨 역할을 합니다. 서비스 공급자는 애플리케이션 개발자에게 표시되지 않으므로 애플리케이션 개발자는 서비스 공급자 개발에 대해 아무것도 알 필요가 없습니다. 그러나 디바이스와 통신하는 작업을 수행하는 것은 서비스 공급자입니다.

서비스 공급자는 애플리케이션에서 요청을 수신하고 디바이스와 통신하여 수행하는 Windows Media 장치 관리자 빌드된 COM DLL입니다. 데스크톱 애플리케이션과의 통신은 Windows Media 장치 관리자 중재됩니다. 디바이스와의 통신은 서비스 공급자의 제어를 받습니다.

서비스 공급자는 애플리케이션에서 디바이스 콘텐츠를 열거하는 요청, 디바이스 기능에 대한 요청, 데이터 읽기 또는 쓰기 요청 등을 받습니다. 적절한 형식 및 프로토콜로 명령을 보낼 수 있을 만큼 디바이스의 디자인을 잘 알고 있어야 합니다. 또한 애플리케이션이 디바이스를 사용하기 위해 이러한 요구 사항을 알 필요가 없도록 재생 목록에 필요한 파일 확장명 같은 디바이스별 요구 사항을 숨길 수 있어야 합니다.

Microsoft는 일반 MTP 디바이스, Mass Storage 클래스 디바이스 및 RAPI 디바이스를 포함하여 표준 디바이스 유형에 대한 다양한 서비스 공급자를 제공합니다. 디바이스 디자이너가 사용자 지정 서비스 공급자를 만들어야 하는 유일한 이유는 디바이스에 표준 서비스 공급자가 처리하지 않는 특정 또는 비정상적인 데이터 스토리지 요구 사항이 있는 경우입니다. instance 경우 파일이 특정 위치에 저장되어야 하고 디바이스 운영 체제가 이를 자동으로 처리하지 않는 경우입니다.

디바이스가 컴퓨터에 연결되면 운영 체제는 각 Windows Media 장치 관리자 애플리케이션에 적합한 서비스 공급자의 instance 만듭니다. 두 번째 Windows Media 장치 관리자 애플리케이션이 시작되면 서비스 공급자의 두 번째 instance 로드됩니다. 그러나 각 서비스 공급자는 여러 디바이스를 처리할 수 있습니다. 다음 다이어그램에서는 이를 보여 줍니다.

두 개의 애플리케이션과 통신하는 두 개의 mtp 디바이스를 보여 주는 다이어그램

앞의 다이어그램은 두 개의 MTP 디바이스와 통신하는 두 개의 서로 다른 애플리케이션을 보여 줍니다. 디바이스는 동일한 서비스 공급자 클래스를 사용하지만 각 애플리케이션에는 동일한 서비스 공급자의 자체 instance 있습니다. instance 각 서비스 공급자는 디바이스와 통신합니다. 서비스 공급자의 서로 다른 인스턴스는 서로를 인식하지 않습니다.

많은 애플리케이션 메서드에는 해당하는 명명된 서비스 공급자 메서드가 있습니다. 애플리케이션이 메서드를 호출할 때 Windows Media 장치 관리자 서비스 공급자의 해당 메서드로 호출을 라우팅합니다(일부 추가 내부 작업을 먼저 수행할 수 있지만). 예를 들어 애플리케이션이 IWMDMDevice3::GetProperty를 호출하면 Windows Media 장치 관리자 이 호출을 서비스 공급자의 IMDSPDevice3::GetProperty 구현으로 라우팅합니다. 대부분의 애플리케이션 인터페이스는 IWMDM으로 시작하고 해당 서비스 공급자 인터페이스는 IMDSP로 시작합니다. 서비스 공급자는 이 메서드 호출을 처리하고 적절한 결과를 반환해야 합니다.

애플리케이션은 IWMDMDevice3::D eviceIoControl 또는 IWMDMStorage::SendOpaqueCommand를 호출하지 않는 한 디바이스를 직접 탐색하거나 통신하지 않습니다. 애플리케이션은 가능한 가장 논리적이고 간단한 방식으로 디바이스를 나타내야 하는 서비스 공급자와 통신합니다. 애플리케이션이 디바이스에 대한 정보를 요청하거나 디바이스의 개체를 열거하는 경우 서비스 공급자는 적절한 방식으로 디바이스를 쿼리하고 적절한 정보를 획득하고 반환합니다. 적절한 경우 디바이스에 물리적으로 저장되는 방식과 다르게 디바이스에 파일 organization 노출될 수 있습니다. 그러나 디바이스를 노출하므로 애플리케이션이 필요한 항목을 찾고 보내는 명령을 처리할 수 있도록 일관되고 논리적이어야 합니다. 좋은 서비스 공급자는 디바이스별 특수성을 숨깁니다. 예를 들어 디바이스가 사용자 지정 파일 확장자를 가진 파일로 재생 목록을 물리적으로 저장하는 경우 애플리케이션이 디바이스에 재생 목록을 만들 때 서비스 공급자가 해당 확장을 자동으로 추가해야 합니다. 재생 목록 개체를 만들 때 애플리케이션이 적절한 확장을 알 것으로 예상해서는 안 됩니다.

서비스 공급자는 호출 애플리케이션의 프로세스 내에서 실행됩니다. 유일한 예외는 자체 프로세스에서 실행되는 MTP 서비스 공급자입니다. 이로 인해 차단된 서비스 공급자로 인해 호출 애플리케이션이 차단될 위험이 있습니다. 따라서 서비스 공급자는 견고하고 차단을 방지하도록 설계되어야 하며, 특정 메서드 호출이 신속하게 반환되지 않는 경우 애플리케이션이 중단되지 않도록 설계해야 합니다.

시작