운영 체제 업그레이드
오디오 장치의 드라이버 설정은 운영 체제 업그레이드에서 자주 유지될 수 있습니다. 업그레이드 후 목표는 오디오 엔드포인트가 OS 및 드라이버 기능을 정확하게 반영하도록 하면서 사용자 설정을 앞으로 이동하는 것입니다.
오디오 엔드포인트 마이그레이션 프로세스
OS 업그레이드 중에 오디오 엔드포인트 마이그레이션 프로세스가 실행 될 수 있습니다. 이 프로세스는 안전한 정보를 앞으로 이동하려고 시도합니다. 오디오 드라이버를 개발할 때 이러한 마이그레이션 동작에 유의하세요.
이 엔드포인트 마이그레이션 프로세스는 다음과 같은 상황에서 실행할 수 있습니다.
- OS 업데이트.
- 오디오 드라이버 업데이트. 여기에는 오디오 확장 드라이버 또는 AudioProcessingObject 설치가 포함됩니다. 자세한 내용은 구성 요소화된 오디오 드라이버 설치 만들기를 참조하세요.
- 기존 오디오 드라이버가 제자리에 다시 설치됩니다. 이 다시 설치는 오디오 문제 해결사를 실행할 때 발생할 수 있습니다. "업데이트 드라이버"를 수행하고 이미 설치된 드라이버를 선택하여 디바이스 관리자를 통해 발생할 수도 있습니다.
- AudioEndpointBuilder가 서비스됩니다. 이는 릴리스된 버전의 Windows에서 업데이트되는 AudioEndpointBuilder 서비스에 버그 수정이 있을 때마다 발생합니다.
- USB 오디오 드라이버의 펌웨어 수정 버전이 변경되었습니다.
- 오디오 드라이버는 KSPROPERTY_JACK_DESCRIPTION3 통해 엔드포인트 구성을 변경합니다.
오디오 엔드포인트 마이그레이션 프로세스
오디오 엔드포인트 마이그레이션 프로세스는 다음을 수행합니다.
- 사용자가 제어하는 엔드포인트 속성을 복사합니다.
- 앞으로 CAPX 속성을 복사합니다.
오디오 엔드포인트 마이그레이션 프로세스는 다음 중 어떤 작업도 수행하지 않습니다.
- WINDOWS 11 CAPX 가용성 이전에 FXProperties를 복사하지 않습니다.
- OS에 알려진 사용자 설정 목록에 없는 속성을 복사하지 않습니다.
Windows 11 시작하여 새 "CAPX" 설정 프레임워크를 사용하여 설정을 저장합니다. 설정 프레임워크를 사용하면 API가 오디오 엔드포인트에서 오디오 효과("FX 속성 저장소")에 대한 속성 저장소를 쿼리하고 수정하는 메서드를 노출할 수 있습니다. 자세한 내용은 오디오 처리 개체에 대한 Windows 11 API를 참조하세요.
업그레이드 전 엔드포인트를 업그레이드 후 엔드포인트와 일치
마이그레이션 프로세스는 이러한 두 요소를 사용하여 업그레이드 전 엔드포인트와 일치하여 업그레이드 엔드포인트를 게시합니다.
- 하드웨어 ID - 하드웨어 ID에 대한 자세한 내용은 시스템 전체 고유 디바이스 ID를 참조하세요.
- 참조 문자열 - 참조 문자열 의 사용은 아래에 설명되어 있습니다.
새 엔드포인트가 만들어지므로 엔드포인트 마이그레이션 프로세스 중에는 mmdevice ID의 캐싱이 작동하지 않습니다.
등록된 하위 서비스
포트 클래스 드라이버의 PcRegisterSubdevice 함수 는 시스템의 나머지 부분에 의해 디바이스로 인식되는 하위 서비스를 등록합니다. 함수는 오디오 어댑터의 하위 서비스를 나타내는 필터 개체에 대한 디바이스 인터페이스 instance 등록합니다. I/O 관리자는 Name 매개 변수로 지정된 문자열을 instance 식별하는 데 사용하는 참조 문자열에 추가합니다. 수정된 참조 문자열은 오디오 어댑터의 하위 서비스를 구분하는 데 유용합니다. 참조 문자열에 대한 자세한 내용은 IoRegisterDeviceInterface를 참조하세요.
참조 문자열 사용
오디오 엔드포인트는 외부 커넥터의 핀 ID와 함께 KS 인터페이스를 만들 때 PnP에 전달된 참조 문자열 로 식별됩니다. 이러한 값을 변경하면 새 오디오 엔드포인트가 만들어집니다. 이 새 오디오 엔드포인트에는 이전 참조 문자열 및 커넥터 핀 ID에 연결된 사용자 설정이 포함되지 않습니다.
설치된 두 개 이상의 오디오 디바이스와 참조 문자열 간에 하드웨어 ID가 동일하고 참조 문자열이 동일한 경우 마이그레이션 후 엔드포인트를 마이그레이션하기 전의 엔드포인트와 일치하지 않아 마이그레이션 시스템이 설정을 제대로 마이그레이션할 수 없습니다.
동일한 하드웨어 ID 및 참조 문자열을 모두 사용하는 모든 버전의 Windows에 동일한 루트 열거 소프트웨어 오디오 디바이스의 여러 복사본을 설치해도 올바르게 마이그레이션되지 않습니다.
Windows 11 이전
Windows 11 이전 시스템의 루트 열거형 소프트웨어 오디오 디바이스의 경우 참조 문자열 값이 동일한 오디오 엔드포인트가 올바르게 마이그레이션되지 않습니다.
Windows 11 이전 Windows 버전을 대상으로 하는 루트 열거형 소프트웨어 오디오 디바이스를 만들 때 성공적인 마이그레이션을 위해 각 오디오 엔드포인트에 고유한 참조 문자열 값을 사용해야 합니다.
Windows 11 이상
하드웨어 ID가 없으면 Windows 11 후 시스템의 루트 열거형 소프트웨어 오디오 디바이스가 동일한 참조 문자열 값을 가진 오디오 엔드포인트가 올바르게 마이그레이션되지 않습니다.
Windows 11 후 Windows 버전을 대상으로 하는 루트 열거형 소프트웨어 오디오 디바이스를 만들 때는 드라이버 inf에 고유한 하드웨어 ID를 지정해야 하며, 각 루트 열거형 소프트웨어 오디오 디바이스는 해당 하드웨어 ID를 사용하여 한 번만 설치할 수 있습니다. 동일한 드라이버의 여러 복사본을 설치하려면 성공적인 마이그레이션을 위해 각 설치에서 서로 다른 참조 문자열을 사용해야 합니다.
참조 문자열 규칙
오디오 샘플 드라이버에 사용되는 기본 "웨이브" 및 "토포" 참조 문자열을 사용하지 않는 것이 좋습니다. 대신 더 설명적인 참조 문자열을 사용해야 합니다. 기본 참조 문자열을 사용하는 드라이버는 하드웨어 ID를 사용할 수 없거나 이러한 참조 문자열을 사용하여 다른 드라이버와 일치하는 경우 마이그레이션 데이터가 손실되거나 잘못된 디바이스에 적용될 위험이 있습니다. 적절한 전략은 "ContosoSoftwareRender-output2"와 같습니다. 고유한 공급업체 이름을 포함하면 참조 문자열을 구분하는 데 도움이 됩니다.
참조 문자열은 오디오 드라이버 설치, 업데이트, OS 업데이트, 다시 부팅 등에 대해 정적 상태를 유지해야 합니다. 참조 문자열이 변경되면 새 오디오 엔드포인트가 만들어지고 사용자 설정이 이전 엔드포인트에서 새 엔드포인트로 복사되지 않습니다.
하드웨어 ID 디바이스 인스턴스 이름
오디오 드라이버 하드웨어 ID는 INF 파일의 모델 섹션에 정의되어 있습니다. 하드웨어 ID는 하나 이상의 디바이스를 식별하고 해당 디바이스에 대한 INF 파일의 DDInstall 섹션을 참조합니다. 또한 해당 디바이스에 대한 고유-모델-섹션 하드웨어 식별자(ID)를 지정합니다. 자세한 내용은 INF 모델 섹션 및 INF DDInstall 섹션을 참조하세요.
이 INF 파일은 Sysvad 오디오 샘플의 DDInstall 섹션에 있는 디바이스 설명을 보여 줍니다.
[SYSVAD.NT$ARCH$]
%SYSVAD_SA.DeviceDesc%=SYSVAD_SA, Root\sysvad_ComponentizedAudioSample
SYSVAD_SA.DeviceDesc="Virtual Audio Device (WDM) - Tablet Sample"
이 INF 파일은 OEM에서 디바이스 설명을 사용자 지정하는 방법을 보여줍니다.
[CONTOSO.NT$ARCH$]
%CONTOSO_SA.DeviceDesc%=CONTOSO_SA, Root\contoso_ContosoSoftwareRender
CONTOSO_SA.DeviceDesc="Description of the Contoso Software Render Driver"
AudioEndpointBuilder가 일치시킬 하드웨어 ID는 다음과 입니다. Root\contoso_ContosoSoftwareRender
레지스트리 저장 설정
오디오 어댑터 드라이버는 시스템 레지스트리에서 현재 디바이스 설정(주로 볼륨 수준 및 음소거 설정)을 추적할 수 있습니다. 드라이버는 일반적으로 이러한 설정을 시스템 제공 드라이버 키(INF 키워드(keyword) HKR로 표시)의 하위 키 "설정"에 저장합니다. 사용자가 제어판 또는 다른 오디오 애플리케이션을 통해 이러한 설정을 변경하면 드라이버는 적절한 레지스트리 항목을 업데이트합니다. 시스템이 부팅할 때마다 드라이버는 레지스트리에서 디바이스 설정을 복원합니다.
사용자는 운영 체제를 업그레이드할 때마다 설정을 수동으로 복원하도록 강요하는 대신 시간이 지남에 따라 시스템에 대한 조정을 유지하므로 이 동작을 주로 선호합니다.
그러나 일부 드라이버는 설치할 때마다 기본값으로 이러한 설정을 맹목적으로 덮어씁니다. 더 나은 방법은 드라이버가 설치 시 특정 드라이버 관련 항목이 이미 있는지 여부를 확인하는 것입니다. 이러한 항목이 있는 경우 드라이버는 이러한 항목을 덮어쓰는 대신 이러한 항목에 포함된 설정을 유지해야 합니다.
드라이버 INF 파일의 추가 레지스트리 섹션에 있는 지시문은 기존 레지스트리 항목을 덮어쓸지 여부를 지정합니다. 자세한 내용은 INF AddReg 지시문의 FLG_ADDREG_NOCLOBBER 플래그에 대한 설명을 참조하세요.