속성 및 레지스트리 값 설정

속성 및 레지스트리 값 설정 항목에서는 포트 클래스 오디오 드라이버가 PnP 디바이스 인터페이스에 대한 속성 및 레지스트리 값을 설정하는 방법을 설명합니다.

포트 클래스 오디오 드라이버인 Portcls는 디바이스 인터페이스를 제대로 등록하고 필요한 값을 설정하려면 다음 단계를 수행해야 합니다.

1. 디바이스 인터페이스 등록

하위 디바이스에 대해 PcRegisterSubdevice를 호출하기 전에 드라이버는 IoRegisterDeviceInterface를 직접 호출하여 KSCATEGORY_AUDIO 인터페이스를 등록할 수 있습니다. 이렇게 하면 PcRegisterSubdevice가 인터페이스를 등록하고 사용하도록 설정하기 전에 드라이버가 디바이스 인터페이스에서 인터페이스 속성 및 레지스트리 값을 설정할 수 있습니다.

오디오 드라이버는 다음과 같이 IoRegisterDeviceInterface에 대한 매개 변수를 설정합니다.

  • PhysicalDeviceObject 매개 변수는 오디오 드라이버가 PcGetPhysicalDeviceObject 함수에서 검색할 수 있는 PDEVICE_OBJECT.

  • InterfaceClassGuid는 인터페이스의 클래스 GUID로 설정됩니다.

  • ReferenceString은 오디오 드라이버가 PcRegisterSubdevice에 전달하는 Name 매개 변수와 동일합니다.

이전 작업이 성공적으로 완료되면 IoRegisterDeviceInterface는 등록된 인터페이스에 대한 SymbolicLinkName을 반환합니다.

2. 레지스트리 값 설정

오디오 드라이버는 IoOpenDeviceInterfaceRegistryKey를 호출하여 디바이스 인터페이스 레지스트리 키에 대한 핸들을 가져옵니다. 오디오 드라이버는 다음과 같이 매개 변수를 IoOpenDeviceInterfaceRegistryKey로 설정합니다.

SymbolicLinkName은 이전 단계의 IoRegisterDeviceInterface에서 반환된 문자열입니다.

DesiredAccess는 KEY_WRITE(또는 드라이버에서 필요한 경우 다른 값)로 설정됩니다.

이전 단계가 성공적으로 완료되면 DeviceInterfaceKey는 열린 레지스트리 키 핸들을 반환합니다. 오디오 드라이버:

  • ZwSetValueKey를 호출하여 레지스트리 값 설정

  • ZwClose를 호출하여 레지스트리 키 핸들을 닫습니다.

참고 드라이버가 레지스트리 하위 키에 값을 설정해야 하는 경우 드라이버는 ZwCreateKey를 호출하여 하위 키를 만듭니다. ZwCreateKey 호출을 준비할 때 드라이버는 다음을 수행합니다.

  • InitializeObjectAttributes를 호출하고 ObjectName을 하위 키 경로로 설정합니다.

  • 특성을 OBJ_CASE_INSENSITIVE | 설정합니다. OBJ_KERNEL_HANDLE

  • RootDirectory를 IoOpenDeviceInterfaceRegistryKey에서 반환된 핸들로 설정합니다.

  • ZwClose를 호출하여 ZwCreateKey를 호출하여 만든 핸들을 닫습니다.

3. 속성 설정

오디오 드라이버는 IoSetDeviceInterfacePropertyData를 호출하여 속성을 설정합니다. 오디오 드라이버는 다음과 같이 매개 변수를 IoSetDeviceInterfacePropertyData로 설정합니다.

  • SymbolicLinkName은 IoRegisterDeviceInterface에서 반환된 문자열입니다.
  • 나머지 매개 변수는 설정되는 특정 속성에 따라 달라집니다.

관련 디자인 지침