音訊端點裝置的易記名稱
在 Windows Vista、Windows Server 2008 和更新版本的 Windows 中,音訊子系統支援音訊端點裝置的概念,例如喇叭、耳機、麥克風和 CD 播放機。 音訊端點的這個概念可協助建立使用者易記的音訊應用程式,這些應用程式具有使用者介面,可參考使用者直接操作的端點裝置。 這些端點具有易記的名稱,例如「喇叭」、「耳機」、「麥克風」和「CD 播放機」,應用程式可以在其使用者介面中顯示。 如需端點裝置的詳細資訊,請參閱 音訊端點裝置。
音訊子系統會將音訊配接器上的 隨插即用 (PnP) 裝置模型化為 KS 篩選器。 資料流程會透過 KS 針腳進入並結束篩選。 橋接器針腳是一個 KS 針腳,音訊端點裝置會透過此釘選連接到 KS 篩選器。 如需橋接器接腳的詳細資訊,請參閱 音訊篩選圖形。
音訊子系統會檢查端點裝置所連線橋接器釘的屬性,以取得音訊端點裝置的相關資訊。 其中一個屬性是 釘選類別屬性 (KSPROPERTY_PIN_CATEGORY) 。
針對每個 KS 篩選準則,配接器驅動程式會提供 PCPIN_DESCRIPTOR 結構的資料表,以描述篩選上 KS 針腳的屬性。 針腳類別 GUID 會儲存在PCPIN_DESCRIPTOR結構的 KsPinDescriptor.Category 成員中。 針對橋接器接腳,針腳類別 GUID 的值會指出連接到橋接器接點的端點類型。 例如,針腳類別 GUID KSNODETYPE_MICROPHONE表示橋接器針會連線到麥克風、GUID KSNODETYPE_SPEAKER指出橋接器針腳連接到喇叭等等。 KSNODETYPE_XXX GUID 定義于 Ksmedia.h 標頭檔中。
此外 ,PCPIN_DESCRIPTOR 還包含 GUID,可用來以唯一名稱識別針腳。 這個針腳名稱 GUID 會儲存在 PCPIN_DESCRIPTOR結構的 KsPinDescriptor.Name 成員中。 此名稱 GUID 是由 (KSPROPERTY_PIN_NAME) 屬性使用,以將登錄中找到的易記名稱與釘選產生關聯。
音訊子系統會叫用 KSPROPERTY_PIN_NAME 屬性,以將易記名稱與音訊端點產生關聯。 KS 會先在登錄中搜尋描述 KsPinDescriptor.Name GUID 的 unicode 字串,以處理此要求。 如果 KS 找不到專案,它會搜尋登錄中描述 KsPinDescriptor.Category GUID 的 Unicode 字串。
從 Windows 10 2018 年 10 月更新 1809 版開始,在搜尋登錄時,KS 會先尋找裝置軟體機碼中的專案。 這是由 INF 透過設備磁碟機 INF 之 [Models] 區段所參考的 AddReg 區段所建立。 AddReg 區段會使用 HKR\MediaCategories 索引鍵來建構這些專案。 這可讓驅動程式開發人員針對名稱和類別 GUID 建立裝置特定的易記名稱,不論 GUID 是否對裝置而言是唯一的。
如果裝置的軟體金鑰中尚未安裝專案,或驅動程式在 Windows 10 1809 版之前已在作業系統上執行,KS 會檢查 MediaCategories 登錄機碼。 此第二個索引鍵會被視為全域名稱空間。 從 Windows 10 1809 版開始,此空間會保留給全域定義,且不應由新驅動程式修改。 未來作業系統版本不支援修改此金鑰下的專案。
公開具有標準類別 GUID 之釘選的音訊裝置應該包含/需要收件匣 KS。INF 或 KSCAPTUR。裝置 INF 中的 INF 名稱註冊。 這些收件匣 INFs 包含您驅動程式可能想要填入之預先定義類別 GUID 的預設易記名稱定義。 這些是在 PCPIN_DESCRIPTOR 結構的 KsPinDescriptor.Category 成員中找到的相同 GUID。 例如,類別 GUID KSNODETYPE_MICROPHONE專案具有相關聯的易記名稱 「麥克風」,而類別 GUID KSNODETYPE_SPEAKER專案具有相關聯的易記名稱 「speakers」 等等。
類別目錄和名稱 GUID 的 GUID 和易記名稱都會儲存在登錄中。 針對登錄中的每個 GUID 名稱組,GUID 字串會當做 MediaCategories 機碼下的子機碼使用。 在 GUID 索引鍵下,易記名稱為 「Name」 變數下的 Unicode 字串值。
如果音訊子系統所定義的易記名稱和釘選類別都未充分描述您的裝置,您可以定義自己的釘選類別和名稱 GUID,並將易記名稱與 INF 中的易記名稱產生關聯。 若要確保您的釘選類別 GUID 是唯一的,請使用Uuidgen.exe之類的公用程式來產生 GUID。 接下來,修改安裝音訊配接器的 INF 檔案,以將釘選類別 GUID 和易記名稱寫入登錄。 下列程式碼範例顯示 INF 檔案的片段,該檔案會將兩個針腳類別 GUID 及其相關聯的易記名稱新增至登錄:
[Manufacturer]
MyOEMName=Unicorn,NTamd64
[Unicorn.NTamd64]
MyDeviceName=MyDevice,Root\MyDevice
[MyDevice.NT]
Include=ks.inf, kscaptur.inf
Needs=KS.Registration, KSCAPTUR.Registration.NT
CopyFiles=MyDevice.CopyFiles
AddReg=PinNameRegistration
...
[PinNameRegistration]
HKR,%MediaCategories%\%GUID.MyNewEndpointCategory%,Name,,%Name.MyNewEndpointCategory%
HKR,%MediaCategories%\%GUID.MyNewEndpointName%,Name,,%Name.MyNewEndpointName%
...
[Strings]
MyOEMName="Unicorns Inc."
MyDeviceName="Sparkly Unicorn"
MediaCategories="MediaCategories"
GUID.MyNewEndpointCategory="{B72FBD1A-4634-4240-B207-0E6B52F3701C}"
GUID.MyNewEndpoint_2="{71DD3A5D-E303-49A0-ACEE-908634AA9520}"
Name.MyNewEndpointCategory="Unicorn"
Name.MyNewEndpointName="Fred the Unicorn"
這兩個 GUID 字串都是由 Uuidgen.exe 產生。
應用程式可以使用裝置的 IPropertyStore 介面來存取音訊端點裝置的屬性。 介面會使用 Functiondiscoverykeys_devpkey.h 和 Mmdeviceapi.h 標頭檔中定義的屬性索引鍵來識別屬性。 應用程式可以使用 PKEY_Device_FriendlyName 屬性金鑰來擷取端點裝置的易記名稱。 對於空間限制的使用者介面,可以使用 PKEY_Device_DeviceDesc 屬性索引鍵來擷取較短版本的易記名稱。 如需這些屬性索引鍵的詳細資訊,請參閱 IMMDevice::OpenPropertyStore。
IPropertyStore介面實例會維護音訊端點裝置的持續性屬性存放區。 屬性存放區會從登錄中與 KS 釘選類別 GUID 相關聯的易記名稱字串,複製 其PKEY_Device_DeviceDesc 屬性機碼的初始值。 應用程式可以從屬性存放區讀取 PKEY_Device_DeviceDesc 屬性值 (名稱字串) ,但無法變更值。 不過,使用者可以使用 Windows 多媒體控制台修改名稱,Mmsys.cpl。 例如,在 Windows Vista 中,您可以使用下列步驟來修改轉譯端點裝置的名稱:
若要執行Mmsys.cpl,請開啟命令提示字元視窗,然後輸入下列命令:
mmsys.cpl
(或者,您也可以在位於工作列右側的喇叭圖示上按一下滑鼠右鍵,然後按一下 [ 播放裝置].) 來執行Mmsys.cpl
按一下轉譯裝置的名稱,然後按一下 [ 屬性]。
在屬性視窗中,按一下 [一般] 索引標籤。易記名稱應該會出現在屬性工作表頂端的文字方塊中。 您可以編輯易記名稱,然後按一下 [ 確定] 以儲存變更。
上述步驟會變更儲存在音訊端點裝置之屬性存放區中的易記名稱。 這些步驟不會影響與屬於相同 KS 針腳類別的其他音訊端點裝置相關聯的易記名稱。 它們也不會影響任何可能直接查詢 KS 名稱的元件。