[Version]
Signature="$Windows NT$"
Class=MEDIA
Provider=%ProviderName%
ClassGUID={4d36e96c-e325-11ce-bfc1-08002be10318}
DriverVer = 05/26/2022,2.0.1.0
CatalogFile=Nahimic_Mirroring.cat
PnpLockdown=1

[SourceDisksNames]
222="Nahimic mirroring device Disk","",222

[SourceDisksFiles]
Nahimic_Mirroring.sys=222

[SignatureAttributes]
Nahimic_Mirroring.sys=SignatureAttributes.DRM

[SignatureAttributes.DRM]
DRMLevel=1300

[SignatureAttributes.PETrust]
PETrust=true

[Manufacturer]
%MfgName%=Nahimic_Mirroring,NTamd64

[Nahimic_Mirroring.NTamd64]
%Nahimic_Mirroring_SA.DeviceDesc%=Nahimic_Mirroring_SA, Root\Nahimic_Mirroring

[DestinationDirs]
Nahimic_Mirroring_SA.CopyList=12 ; windows\system32\drivers

;======================================================
; Nahimic_Mirroring_SA
;======================================================
[Nahimic_Mirroring_SA.CopyList]
Nahimic_Mirroring.sys

[Nahimic_Mirroring_SA.AddReg]
HKR,,AssociatedFilters,,"wdmaud,redbook"
HKR,,Driver,,Nahimic_Mirroring.sys
;
;Uncomment the line below to enable single component - multi Fx states.
;
;HKR,PowerSettings,SingleComponentMultiFxStates,3,1,0,0,0  ; Turn on multi Fx support.

HKR,Drivers,SubClasses,,"wave,mixer"

HKR,Drivers\wave\wdmaud.drv,Driver,,wdmaud.drv
HKR,Drivers\mixer\wdmaud.drv,Driver,,wdmaud.drv

HKR,Drivers\wave\wdmaud.drv,Description,,%Nahimic_Mirroring_SA.DeviceDesc%
HKR,Drivers\mixer\wdmaud.drv,Description,,%Nahimic_Mirroring_SA.DeviceDesc%

;======================================================
; render interfaces: speaker (internal)
;======================================================
[Nahimic_Mirroring.I.WaveSpeaker]
AddReg=Nahimic_Mirroring.I.WaveSpeaker.AddReg

[Nahimic_Mirroring.I.WaveSpeaker.AddReg]
HKR,,CLSID,,%Proxy.CLSID%
HKR,,FriendlyName,,%Nahimic_Mirroring.WaveSpeaker.szPname%

[Nahimic_Mirroring.I.TopologySpeaker]
AddReg=Nahimic_Mirroring.I.TopologySpeaker.AddReg

[Nahimic_Mirroring.I.TopologySpeaker.AddReg]
HKR,,CLSID,,%Proxy.CLSID%
HKR,,FriendlyName,,%Nahimic_Mirroring.TopologySpeaker.szPname%

HKR,EP\0,%PKEY_AudioEndpoint_Association%,,%KSNODETYPE_ANY%
HKR,EP\0,%PKEY_AudioDevice_EnableEndpointByDefault%,0x00010001,0x00000100
HKR,FX\0,%PKEY_FX_Association%,,%KSNODETYPE_ANY%

; The following lines opt-in to pull mode.
HKR,EP\0,%PKEY_AudioEndpoint_Supports_EventDriven_Mode%,0x00010001,0x1

;======================================================
; Nahimic_Mirroring_SA
;======================================================
[Nahimic_Mirroring_SA.NT]
Include=ks.inf,wdmaudio.inf
Needs=KS.Registration, WDMAUDIO.Registration
CopyFiles=Nahimic_Mirroring_SA.CopyList
AddReg=Nahimic_Mirroring_SA.AddReg

[Nahimic_Mirroring_SA.NT.Interfaces]
;
; Interfaces for speaker (internal) render endpoint.
;
AddInterface=%KSCATEGORY_AUDIO%, %KSNAME_WaveSpeaker%, Nahimic_Mirroring.I.WaveSpeaker
AddInterface=%KSCATEGORY_RENDER%, %KSNAME_WaveSpeaker%, Nahimic_Mirroring.I.WaveSpeaker
AddInterface=%KSCATEGORY_AUDIO%, %KSNAME_TopologySpeaker%, Nahimic_Mirroring.I.TopologySpeaker
AddInterface=%KSCATEGORY_TOPOLOGY%, %KSNAME_TopologySpeaker%, Nahimic_Mirroring.I.TopologySpeaker

[Nahimic_Mirroring_SA.NT.Services]
AddService=Nahimic_Mirroring,0x00000002,Nahimic_Mirroring_Service_Inst

[Nahimic_Mirroring_Service_Inst]
DisplayName=%Nahimic_Mirroring.SvcDesc%
ServiceType=1
StartType=3
ErrorControl=1
ServiceBinary=%12%\Nahimic_Mirroring.sys

[Nahimic_Mirroring_SA.NT.HW]
AddReg = AUDIOHW.AddReg

[AUDIOHW.AddReg]
; FILE_DEVICE_SOUND
HKR,,DeviceType,0x10001,0x0000001D
; SDDL_DEVOBJ_SYS_ALL_ADM_RWX_WORLD_RWX_RES_RWX
HKR,,Security,,"D:P(A;;GA;;;SY)(A;;GRGWGX;;;BA)(A;;GRGWGX;;;WD)(A;;GRGWGX;;;RC)"

; [DeviceInstall32]
; AddDevice = ROOT\Nahimic_Mirroring\0000,,Nahimic_Mirroring_RootDevice_Inst

[Nahimic_Mirroring_RootDevice_Inst]
HardwareIds = ROOT\Nahimic_Mirroring

;======================================================
; WDF
;======================================================
[Nahimic_Mirroring_SA.NT.Wdf]
KmdfService = Nahimic_Mirroring, Nahimic_Mirroring_SA_WdfSect
[Nahimic_Mirroring_SA_WdfSect]
KmdfLibraryVersion = 1.15

;======================================================
; COMMON
;======================================================
[Strings]

;Non-localizable

KSNAME_WaveSpeaker="WaveSpeaker"
KSNAME_TopologySpeaker="TopologySpeaker"

Proxy.CLSID="{17CCA71B-ECD7-11D0-B908-00A0C9223196}"
KSCATEGORY_AUDIO="{6994AD04-93EF-11D0-A3CC-00A0C9223196}"
KSCATEGORY_RENDER="{65E8773E-8F56-11D0-A3B9-00A0C9223196}"
KSCATEGORY_CAPTURE="{65E8773D-8F56-11D0-A3B9-00A0C9223196}"
KSCATEGORY_REALTIME ="{EB115FFC-10C8-4964-831D-6DCB02E6F23F}"
KSCATEGORY_TOPOLOGY = "{DDA54A40-1E4C-11D1-A050-405705C10000}"

MediaCategories="SYSTEM\CurrentControlSet\Control\MediaCategories"
KSNODETYPE_ANY   = "{00000000-0000-0000-0000-000000000000}"

PKEY_AudioEndpoint_ControlPanelPageProvider  = "{1DA5D803-D492-4EDD-8C23-E0C0FFEE7F0E},1"
PKEY_AudioEndpoint_Association               = "{1DA5D803-D492-4EDD-8C23-E0C0FFEE7F0E},2"
PKEY_AudioEndpoint_Supports_EventDriven_Mode = "{1DA5D803-D492-4EDD-8C23-E0C0FFEE7F0E},7"

PKEY_FX_Association         = "{D04E05A6-594B-4FB6-A80D-01AF5EED7D1D},0"
PKEY_FX_PreMixEffectClsid   = "{D04E05A6-594B-4fb6-A80D-01AF5EED7D1D},1"
PKEY_FX_PostMixEffectClsid  = "{D04E05A6-594B-4fb6-A80D-01AF5EED7D1D},2"
PKEY_FX_UserInterfaceClsid  = "{D04E05A6-594B-4fb6-A80D-01AF5EED7D1D},3"
PKEY_FX_StreamEffectClsid   = "{D04E05A6-594B-4fb6-A80D-01AF5EED7D1D},5"
PKEY_FX_ModeEffectClsid     = "{D04E05A6-594B-4fb6-A80D-01AF5EED7D1D},6"
PKEY_FX_EndpointEffectClsid = "{D04E05A6-594B-4fb6-A80D-01AF5EED7D1D},7"

PKEY_SFX_ProcessingModes_Supported_For_Streaming = "{D3993A3F-99C2-4402-B5EC-A92A0367664B},5"
PKEY_MFX_ProcessingModes_Supported_For_Streaming = "{D3993A3F-99C2-4402-B5EC-A92A0367664B},6"

REG_MULTI_SZ = 0x00010000           ; FLG_ADDREG_TYPE_MULTI_SZ
AUDIO_SIGNALPROCESSINGMODE_DEFAULT = "{C18E2F7E-933D-4965-B7D1-1EEF228D2AF3}"

; Driver developers would replace this CLSID with that of their own Sound CPL property page provider
AUDIOENDPOINT_EXT_UI_CLSID = "{13EA847C-37B6-4BCF-BD21-ABFF48995F72}"

MEDIA_CATEGORIES = "SYSTEM\CurrentControlSet\Control\MediaCategories"

;Localizable
ProviderName = "Nahimic"
MfgName      = "Nahimic"

Nahimic_Mirroring_SA.DeviceDesc="Nahimic mirroring device"
Nahimic_Mirroring.SvcDesc="Nahimic mirroring device - Driver"

;; friendly names
Nahimic_Mirroring.WaveSpeaker.szPname="Nahimic mirroring Wave Speaker"
Nahimic_Mirroring.TopologySpeaker.szPname="Nahimic mirroring device Topology Speaker"

PKEY_CompositeFX_StreamEffectClsid   = "{D04E05A6-594B-4fb6-A80D-01AF5EED7D1D},13"  
PKEY_CompositeFX_ModeEffectClsid     = "{D04E05A6-594B-4fb6-A80D-01AF5EED7D1D},14"
PKEY_CompositeFX_EndpointEffectClsid = "{D04E05A6-594B-4fb6-A80D-01AF5EED7D1D},15"
PKEY_AudioDevice_EnableEndpointByDefault="{F3E80BEF-1723-4FF2-BCC4-7F83DC5E46D4},4"
