14 const GUID KSNODETYPE_DESKTOP_MICROPHONE = {0xDFF21BE2, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
15 const GUID KSNODETYPE_LEGACY_AUDIO_CONNECTOR = {0xDFF21FE4, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
16 const GUID KSNODETYPE_TELEPHONE = {0xDFF21EE2, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
17 const GUID KSNODETYPE_PHONE_LINE = {0xDFF21EE1, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
18 const GUID KSNODETYPE_DOWN_LINE_PHONE = {0xDFF21EE3, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
19 const GUID KSNODETYPE_DESKTOP_SPEAKER = {0xDFF21CE4, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
20 const GUID KSNODETYPE_ROOM_SPEAKER = {0xDFF21CE5, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
21 const GUID KSNODETYPE_COMMUNICATION_SPEAKER = {0xDFF21CE6, 0xF70F, 0x11D0, {0xB9,0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
22 const GUID KSNODETYPE_HEADPHONES = {0xDFF21CE2, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
23 const GUID KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO = {0xDFF21CE3, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
24 const GUID KSNODETYPE_MICROPHONE = {0xDFF21BE1, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9,0x22, 0x31, 0x96}};
25 const GUID KSCATEGORY_AUDIO = {0x6994AD04
L, 0x93EF, 0x11D0, {0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
26 const GUID KSNODETYPE_SPDIF_INTERFACE = {0xDFF21FE5, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
27 const GUID KSNODETYPE_ANALOG_CONNECTOR = {0xDFF21FE1, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
28 const GUID KSNODETYPE_SPEAKER = {0xDFF21CE1, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
29 const GUID KSNODETYPE_CD_PLAYER = {0xDFF220E3, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
30 const GUID KSNODETYPE_SYNTHESIZER = {0xDFF220F3, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
31 const GUID KSNODETYPE_LINE_CONNECTOR = {0xDFF21FE3, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0,0xC9, 0x22, 0x31, 0x96}};
32 const GUID PINNAME_VIDEO_CAPTURE = {0xfb6c4281, 0x353, 0x11d1, {0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba}};
62 MixerControl->
NodeID = NodeIndex;
77 Node.NodeId = NodeIndex;
113 MixerInfo->ControlId++;
175 Property.NodeProperty.NodeId = NodeIndex;
192 DPRINT(
"NodeIndex %u Range Min %d Max %d Steps %x UMin %x UMax %x\n", NodeIndex,
Range->Bounds.SignedMinimum,
Range->Bounds.SignedMaximum,
Range->SteppingDelta,
Range->Bounds.UnsignedMinimum,
Range->Bounds.UnsignedMaximum);
194 MaxRange =
Range->Bounds.UnsignedMaximum -
Range->Bounds.UnsignedMinimum;
203 Steps = MaxRange /
Range->SteppingDelta + 1;
279 DestinationLine->
Line.
Target.wMid = MixerInfo->MixCaps.wMid;
280 DestinationLine->
Line.
Target.wPid = MixerInfo->MixCaps.wPid;
281 DestinationLine->
Line.
Target.vDriverVersion = MixerInfo->MixCaps.vDriverVersion;
293 MixerInfo->MixCaps.cDestinations++;
393 if (MixerData->Topology)
396 *OutTopology = MixerData->Topology;
437 MixerData->Topology = *OutTopology;
456 ULONG NodesCount, NodeIndex,
Count, bTerminator;
481 DPRINT1(
"MMixerCountMixerControls PinId %lu is not connected by any node\n", PinId);
490 NodeIndex = Nodes[0];
504 OutNodes[
Count] = NodeIndex;
511 OutNodes[
Count] = NodeIndex;
521 DPRINT(
"PinId %lu bInputMixer %lu bUpStream %lu NodeIndex %lu is not connected", PinId, bInputMixer, bUpStream, NodeIndex);
528 NodeIndex = Nodes[0];
536 *OutNodesCount =
Count;
539 *OutLineTerminator = NodeIndex;
596 *MaxChannels =
Header->MembersCount;
650 *MaxChannels = Channel.
Channel;
714 DPRINT(
"NodeId %lu MaxChannels %lu Line %S Id %lu\n", Nodes[
Index], MaxChannels, DstLine->Line.szName, DstLine->Line.dwLineID);
716 DstLine->Line.cChannels =
min(DstLine->Line.cChannels, MaxChannels);
735 DstLine->Line.cControls =
Count;
863 DPRINT1(
"Unknown Category for PinId %lu BridgePin %lu\n", PinId, BridgePin);
932 DPRINT1(
"Unknown Category for PinId %lu BridgePin %lu\n", PinId, BridgePin);
955 ULONG ComponentType, TargetType;
980 SrcLine->
PinId = PinId;
994 SrcLine->
Line.
Target.wMid = MixerInfo->MixCaps.wMid;
995 SrcLine->
Line.
Target.wPid = MixerInfo->MixCaps.wPid;
996 SrcLine->
Line.
Target.vDriverVersion = MixerInfo->MixCaps.vDriverVersion;
1028 *OutSrcLine = SrcLine;
1042 PULONG AllNodes, AllPins, AllPinNodes;
1043 ULONG AllNodesCount, AllPinsCount, AllPinNodesCount;
1084 DPRINT(
"LineTerminator %lu\n", LineTerminator);
1085 DPRINT(
"PinCount %lu\n", AllPinsCount);
1086 DPRINT(
"AllNodesCount %lu\n", AllNodesCount);
1089 Index = AllPinsCount;
1094 PinId = AllPins[
Index - 1];
1097 AllPinNodesCount = 0;
1100 for(SubIndex = 0; SubIndex < AllNodesCount; SubIndex++)
1103 CurNode = AllNodes[SubIndex];
1105 if (CurNode !=
MAXULONG && CurNode != LineTerminator)
1116 AllPinNodes[AllPinNodesCount] = CurNode;
1128 if (AllPinNodesCount)
1148 DPRINT1(
"Adding PinId %lu AllPinNodesCount %lu to DestinationLine %lu\n", PinId, AllPinNodesCount, DestinationLineID);
1149 for(TempIndex = 0; TempIndex < AllPinNodesCount; TempIndex++)
1150 DPRINT1(
"NodeIndex %lu\n", AllPinNodes[TempIndex]);
1157 DPRINT1(
"Discarding DestinationLineID %lu PinId %lu NO NODES!\n", DestinationLineID, PinId);
1179 ULONG NodesCount, LineTerminator;
1223 *OutLineTerminator = LineTerminator;
1281 ULONG PinsCount, LineTerminator, DestinationLineID;
1286 Topology = MixerData->Topology;
1325 DPRINT1(
"MMixerHandlePhysicalConnection Expected 1 pin but got %lu\n", PinsCount);
1332 DestinationLineID = (
DESTINATION_LINE + MixerInfo->MixCaps.cDestinations - 1);
1361 DestinationLineID = (
DESTINATION_LINE + MixerInfo->MixCaps.cDestinations - 1);
1385 ULONG PinsCount, LineTerminator, DestinationLineID;
1390 OutConnection->SymbolicLinkName[1] =
L'\\';
1400 DPRINT(
"Name %S, Pin %lu bInput %lu\n", OutConnection->SymbolicLinkName, OutConnection->Pin, bInput);
1403 ASSERT(MixerData->MixerInfo ==
NULL || MixerData->MixerInfo == MixerInfo);
1406 MixerData->MixerInfo = MixerInfo;
1408 if (MixerData->Topology ==
NULL)
1419 MixerData->Topology = Topology;
1424 Topology = MixerData->Topology;
1467 DPRINT1(
"MMixerHandlePhysicalConnection Expected 1 pin but got %lu\n", PinsCount);
1474 DestinationLineID = (
DESTINATION_LINE + MixerInfo->MixCaps.cDestinations-1);
1503 DestinationLineID = (
DESTINATION_LINE + MixerInfo->MixCaps.cDestinations-1);
1536 if (MixerInfo ==
NULL)
1547 NewMixerInfo =
TRUE;
1552 MixerInfo->MixCaps.vDriverVersion = 1;
1553 MixerInfo->MixCaps.fdwSupport = 0;
1554 MixerInfo->MixCaps.cDestinations = 0;
1564 MixerInfo->MixCaps.szPname[0] =
L'\0';
1573 MixerData->MixerInfo = MixerInfo;
1577 *OutMixerInfo = MixerInfo;
1644 DPRINT(
"BridgePin %lu bInputMixer %lu\n", Pins[0], bInputMixer);
1674 MixerList->MixerListCount++;
1690 ULONG DestinationLineID, LineTerminator;
1693 DPRINT(
"DeviceName %S\n", MixerData->DeviceName);
1709 DPRINT(
"MixerName %S Available PinID %lu\n", MixerData->DeviceName,
Index);
1714 if (!MixerData->MixerInfo)
1716 DPRINT1(
"Expected mixer info\n");
1729 DestinationLineID = (
DESTINATION_LINE + MixerData->MixerInfo->MixCaps.cDestinations-1);
1767 if (MixerData->Topology ==
NULL)
1779 MixerData->Topology = Topology;
1784 Topology = MixerData->Topology;
1847 if (!EventNotification)
1892 EventList = MixerInfo->EventList.
Flink;
1893 while(EventList != &MixerInfo->EventList)
1896 EventList = EventList->
Flink;
#define MIXERCONTROL_CONTROLTYPE_MUX
ULONG MMixerGetNodeIndexFromGuid(IN PTOPOLOGY Topology, IN const GUID *NodeType)
#define MIXERLINE_COMPONENTTYPE_SRC_LINE
#define KSEVENT_TYPE_TOPOLOGY
#define MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE
#define IOCTL_KS_PROPERTY
WCHAR szName[MIXER_LONG_NAME_CHARS]
const GUID KSNODETYPE_CD_PLAYER
MIXER_STATUS MMixerGetChannelCountEnhanced(IN PMIXER_CONTEXT MixerContext, IN LPMIXER_INFO MixerInfo, IN HANDLE hMixer, IN ULONG NodeId, OUT PULONG MaxChannels)
MIXER_STATUS MMixerCreateDestinationLine(IN PMIXER_CONTEXT MixerContext, IN LPMIXER_INFO MixerInfo, IN ULONG bInputMixer, IN LPWSTR LineName)
_In_ ULONG _In_ ULONG _In_ ULONG Length
WCHAR szShortName[MIXER_SHORT_NAME_CHARS]
const GUID PINNAME_VIDEO_CAPTURE
_In_ UCHAR _In_ ULONG _Out_ PUCHAR _Outptr_result_bytebuffer_ OutBufferLength PVOID * OutBuffer
MIXER_STATUS MMixerGetPinDataFlowAndCommunication(IN PMIXER_CONTEXT MixerContext, IN HANDLE hDevice, IN ULONG PinId, OUT PKSPIN_DATAFLOW DataFlow, OUT PKSPIN_COMMUNICATION Communication)
IN BOOLEAN OUT PSTR Buffer
MIXER_STATUS MMixerInitializeFilter(IN PMIXER_CONTEXT MixerContext, IN PMIXER_LIST MixerList, IN LPMIXER_DATA MixerData, IN LPMIXER_INFO MixerInfo, IN PTOPOLOGY Topology, IN ULONG NodeIndex, IN ULONG bInputMixer, IN OUT LPMIXER_INFO *OutMixerInfo)
const GUID KSEVENTSETID_AudioControlChange
FORCEINLINE VOID InsertHeadList(_Inout_ PLIST_ENTRY ListHead, _Inout_ __drv_aliasesMem PLIST_ENTRY Entry)
#define MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER
#define MIXERLINE_COMPONENTTYPE_SRC_ANALOG
const GUID KSNODETYPE_COMMUNICATION_SPEAKER
VOID MMixerHandleAlternativeMixers(IN PMIXER_CONTEXT MixerContext, IN PMIXER_LIST MixerList, IN LPMIXER_DATA MixerData, IN PTOPOLOGY Topology)
MIXER_STATUS MMixerIsNodeConnectedToPin(IN PMIXER_CONTEXT MixerContext, IN PTOPOLOGY Topology, IN ULONG NodeIndex, IN ULONG PinId, IN ULONG bUpStream, OUT PULONG bConnected)
union tagMIXERCONTROLW::@3002 Bounds
MIXER_STATUS MMixerInitializeWaveInfo(IN PMIXER_CONTEXT MixerContext, IN PMIXER_LIST MixerList, IN LPMIXER_DATA MixerData, IN LPWSTR DeviceName, IN ULONG bWaveIn, IN ULONG PinCount, IN PULONG Pins)
VOID(CALLBACK * PMIXER_EVENT)(IN PVOID MixerEventContext, IN HANDLE hMixer, IN ULONG NotificationType, IN ULONG Value)
MIXER_STATUS MMixerAddMixerControlsToDestinationLine(IN PMIXER_CONTEXT MixerContext, IN OUT LPMIXER_INFO MixerInfo, IN HANDLE hMixer, IN PTOPOLOGY Topology, IN ULONG PinId, IN ULONG bInput, IN ULONG DestinationLineId, OUT PULONG OutLineTerminator)
MIXER_STATUS MMixerGetFilterTopologyProperty(IN PMIXER_CONTEXT MixerContext, IN HANDLE hMixer, IN ULONG PropertyId, OUT PKSMULTIPLE_ITEM *OutMultipleItem)
const GUID KSNODETYPE_VOLUME
VOID MMixerGetMaxChannelsForNode(IN PMIXER_CONTEXT MixerContext, IN LPMIXER_INFO MixerInfo, IN HANDLE hMixer, IN ULONG NodeId, OUT PULONG MaxChannels)
const GUID KSNODETYPE_TELEPHONE
MIXER_STATUS MMixerGetAllUpOrDownstreamPinsFromPinIndex(IN PMIXER_CONTEXT MixerContext, IN PTOPOLOGY Topology, IN ULONG PinIndex, IN ULONG bUpStream, OUT PULONG OutPinsCount, OUT PULONG OutPins)
static const WCHAR Description[]
#define MIXERLINE_LINEF_SOURCE
#define InsertTailList(ListHead, Entry)
MIXER_STATUS MMixerHandleTopologyFilter(IN PMIXER_CONTEXT MixerContext, IN PMIXER_LIST MixerList, IN LPMIXER_DATA MixerData, IN OUT LPMIXER_INFO MixerInfo, IN ULONG bInput, IN ULONG Pin)
VOID MMixerIsNodeTerminator(IN PTOPOLOGY Topology, IN ULONG NodeIndex, OUT ULONG *bTerminator)
struct tagMIXERCONTROLW MIXERCONTROLW
_In_ const GUID _In_ ULONG PinCount
#define KSPROPERTY_TYPE_GET
const GUID KSNODETYPE_PHONE_LINE
const GUID KSNODETYPE_LEGACY_AUDIO_CONNECTOR
const GUID KSNODETYPE_SPEAKER
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_ ULONG _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesReturned
#define IsEqualGUIDAligned(guid1, guid2)
#define MIXERCONTROL_CONTROLF_UNIFORM
MIXER_STATUS MMixerAddMixerSourceLines(IN PMIXER_CONTEXT MixerContext, IN OUT LPMIXER_INFO MixerInfo, IN HANDLE hMixer, IN PTOPOLOGY Topology, IN ULONG DestinationLineID, IN ULONG LineTerminator)
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
MIXER_STATUS MMixerSetupFilter(IN PMIXER_CONTEXT MixerContext, IN PMIXER_LIST MixerList, IN LPMIXER_DATA MixerData, IN PULONG DeviceCount)
WCHAR szShortName[MIXER_SHORT_NAME_CHARS]
KSNODEPROPERTY NodeProperty
MIXER_STATUS MMixerCountMixerControls(IN PMIXER_CONTEXT MixerContext, IN PTOPOLOGY Topology, IN ULONG PinId, IN ULONG bInputMixer, IN ULONG bUpStream, OUT PULONG OutNodesCount, OUT PULONG OutNodes, OUT PULONG OutLineTerminator)
_In_ ULONG _In_opt_ PVOID _In_ PDRIVER_OBJECT _In_ PDRIVER_NOTIFICATION_CALLBACK_ROUTINE _Inout_opt_ __drv_aliasesMem PVOID _Outptr_result_nullonfailure_ _At_ * NotificationEntry(return==0, __drv_allocatesMem(Mem))) PVOID *NotificationEntry
struct KSPROPERTY_MEMBERSHEADER * PKSPROPERTY_MEMBERSHEADER
const GUID KSCATEGORY_AUDIO
MIXER_CONTEXT MixerContext
PMIXER_DEVICE_CONTROL Control
struct tagMIXERLINEW MIXERLINEW
MIXER_STATUS MMixerRemoveEvent(IN PMIXER_CONTEXT MixerContext, IN OUT LPMIXER_INFO MixerInfo, IN PVOID MixerEventContext, IN PMIXER_EVENT MixerEventRoutine)
const GUID KSNODETYPE_DOWN_LINE_PHONE
#define MIXERLINE_LINEF_ACTIVE
VOID MMixerGetTopologyPinCount(IN PTOPOLOGY Topology, OUT PULONG PinCount)
LPMIXERLINE_EXT MMixerGetSourceMixerLineByLineId(LPMIXER_INFO MixerInfo, DWORD dwLineID)
VOID MMixerSetTopologyPinReserved(IN PTOPOLOGY Topology, IN ULONG PinId)
_Reserved_ PVOID Reserved
#define MIXERLINE_COMPONENTTYPE_DST_UNDEFINED
#define KSEVENT_TYPE_ENABLE
VOID MMixerGetAllUpOrDownstreamPinsFromNodeIndex(IN PMIXER_CONTEXT MixerContext, IN PTOPOLOGY Topology, IN ULONG NodeIndex, IN ULONG bUpStream, OUT PULONG OutPinsCount, OUT PULONG OutPins)
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
PMIXER_FREE_EVENT_DATA FreeEventData
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
ULONG MMixerGetFilterPinCount(IN PMIXER_CONTEXT MixerContext, IN HANDLE hMixer)
#define KSPROPSETID_Topology
#define KSPROPERTY_TYPE_BASICSUPPORT
struct _LIST_ENTRY * Flink
struct KSPROPERTY_STEPPING_LONG * PKSPROPERTY_STEPPING_LONG
VOID MMixerGetNextNodesFromNodeIndex(IN PMIXER_CONTEXT MixerContext, IN PTOPOLOGY Topology, IN ULONG NodeIndex, IN ULONG bUpStream, OUT PULONG OutNodesCount, OUT PULONG OutNodes)
#define MIXERLINE_TARGETTYPE_UNDEFINED
MIXER_STATUS MMixerAllocateTopologyPinArray(IN PMIXER_CONTEXT MixerContext, IN PTOPOLOGY Topology, OUT PULONG *OutPins)
MIXER_STATUS MMixerGetComponentAndTargetType(IN PMIXER_CONTEXT MixerContext, IN OUT LPMIXER_INFO MixerInfo, IN HANDLE hMixer, IN ULONG PinId, OUT PULONG ComponentType, OUT PULONG TargetType)
IN PDCB IN VBO IN ULONG IN BOOLEAN Pin
_Must_inspect_result_ _In_ WDFOBJECT _In_ CONST GUID * Guid
_In_ WDFCOLLECTION _In_ ULONG Index
struct EVENT_NOTIFICATION_ENTRY * PEVENT_NOTIFICATION_ENTRY
LPGUID MMixerGetNodeTypeFromTopology(IN PTOPOLOGY Topology, IN ULONG NodeIndex)
const GUID KSNODETYPE_DAC
#define MIXERLINE_COMPONENTTYPE_SRC_DIGITAL
#define MIXERLINE_TARGETTYPE_MIDIOUT
const GUID KSNODETYPE_SPDIF_INTERFACE
MIXER_STATUS MMixerGetAllUpOrDownstreamNodesFromNodeIndex(IN PMIXER_CONTEXT MixerContext, IN PTOPOLOGY Topology, IN ULONG NodeIndex, IN ULONG bUpStream, OUT PULONG OutNodesCount, OUT PULONG OutNodes)
VOID MMixerIsTopologyPinReserved(IN PTOPOLOGY Topology, IN ULONG PinId, OUT PULONG bReserved)
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#define MIXERLINE_TARGETTYPE_WAVEOUT
#define MIXER_SHORT_NAME_CHARS
#define IOCTL_KS_ENABLE_EVENT
#define MIXERLINE_COMPONENTTYPE_DST_HEADPHONES
const GUID KSNODETYPE_DESKTOP_SPEAKER
VOID MMixerPrintTopology()
VOID MMixerGetChannelCountLegacy(IN PMIXER_CONTEXT MixerContext, IN LPMIXER_INFO MixerInfo, IN HANDLE hMixer, IN ULONG NodeId, OUT PULONG MaxChannels)
struct MIXERVOLUME_DATA * LPMIXERVOLUME_DATA
ULONG MMixerGetControlTypeFromTopologyNode(IN LPGUID NodeType)
#define MIXERCONTROL_CONTROLF_MULTIPLE
#define MIXER_LONG_NAME_CHARS
LPMIXER_DATA MMixerGetDataByDeviceName(IN PMIXER_LIST MixerList, IN LPWSTR DeviceName)
VOID MMixerIsTopologyNodeReserved(IN PTOPOLOGY Topology, IN ULONG NodeIndex, OUT PULONG bReserved)
#define MIXERCONTROL_CONTROLTYPE_VOLUME
const GUID KSNODETYPE_DESKTOP_MICROPHONE
const GUID KSNODETYPE_ADC
#define MIXERCONTROL_CONTROLTYPE_MUTE
#define MIXERLINE_COMPONENTTYPE_DST_TELEPHONE
#define MIXERLINE_COMPONENTTYPE_DST_SPEAKERS
#define MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED
VOID MMixerSetTopologyNodeReserved(IN PTOPOLOGY Topology, IN ULONG NodeIndex)
#define InitializeListHead(ListHead)
WCHAR szName[MIXER_LONG_NAME_CHARS]
union tagMIXERCONTROLW::@3003 Metrics
const GUID KSNODETYPE_ROOM_SPEAKER
MIXER_STATUS MMixerGetPhysicalConnection(IN PMIXER_CONTEXT MixerContext, IN HANDLE hMixer, IN ULONG PinId, OUT PKSPIN_PHYSICALCONNECTION *OutConnection)
#define MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT
MIXER_STATUS MMixerBuildMixerSourceLine(IN PMIXER_CONTEXT MixerContext, IN OUT LPMIXER_INFO MixerInfo, IN HANDLE hMixer, IN PTOPOLOGY Topology, IN ULONG PinId, IN ULONG NodesCount, IN PULONG Nodes, IN ULONG DestinationLineID, OUT LPMIXERLINE_EXT *OutSrcLine)
#define MIXERLINE_COMPONENTTYPE_DST_WAVEIN
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
MIXER_STATUS MMixerAddEvent(IN PMIXER_CONTEXT MixerContext, IN OUT LPMIXER_INFO MixerInfo, IN PVOID MixerEventContext, IN PMIXER_EVENT MixerEventRoutine)
#define MIXERCONTROL_CONTROLTYPE_ONOFF
struct tagMIXERLINEW::@2997 Target
struct MIXER_INFO * LPMIXER_INFO
const GUID KSNODETYPE_ANALOG_CONNECTOR
MIXER_STATUS MMixerAddMixerControlsToMixerLineByNodeIndexArray(IN PMIXER_CONTEXT MixerContext, IN LPMIXER_INFO MixerInfo, IN HANDLE hMixer, IN PTOPOLOGY Topology, IN OUT LPMIXERLINE_EXT DstLine, IN ULONG NodesCount, IN PULONG Nodes)
#define RtlZeroMemory(Destination, Length)
#define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_MULTICHANNEL
MIXER_STATUS MMixerAddMixerControl(IN PMIXER_CONTEXT MixerContext, IN LPMIXER_INFO MixerInfo, IN HANDLE hMixer, IN PTOPOLOGY Topology, IN ULONG NodeIndex, IN LPMIXERLINE_EXT MixerLine, IN ULONG MaxChannels)
const GUID KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO
#define KSPROPERTY_TYPE_TOPOLOGY
#define MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE
MIXER_STATUS MMixerHandlePhysicalConnection(IN PMIXER_CONTEXT MixerContext, IN PMIXER_LIST MixerList, IN LPMIXER_DATA MixerData, IN OUT LPMIXER_INFO MixerInfo, IN ULONG bInput, IN PKSPIN_PHYSICALCONNECTION OutConnection)
const GUID KSNODETYPE_MICROPHONE
#define MIXERLINE_TARGETTYPE_WAVEIN
Property(long _type, long _tag, INREAL _value)
MIXER_STATUS MMixerGetDeviceName(IN PMIXER_CONTEXT MixerContext, OUT LPWSTR DeviceName, IN HANDLE hKey)
const GUID KSNODETYPE_HEADPHONES
VOID MMixerApplyOutputFilterHack(IN PMIXER_CONTEXT MixerContext, IN LPMIXER_DATA MixerData, IN HANDLE hMixer, IN OUT PULONG PinsCount, IN OUT PULONG Pins)
VOID MMixerGetNextNodesFromPinIndex(IN PMIXER_CONTEXT MixerContext, IN PTOPOLOGY Topology, IN ULONG PinIndex, IN ULONG bUpStream, OUT PULONG OutNodesCount, OUT PULONG OutNodes)
base of all file and directory entries
MIXER_STATUS MMixerBuildTopology(IN PMIXER_CONTEXT MixerContext, IN LPMIXER_DATA MixerData, OUT PTOPOLOGY *OutTopology)
struct KSPROPERTY_DESCRIPTION * PKSPROPERTY_DESCRIPTION
MIXER_STATUS MMixerAllocateTopologyNodeArray(IN PMIXER_CONTEXT MixerContext, IN PTOPOLOGY Topology, OUT PULONG *OutPins)
#define MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC
PMIXER_EVENT MixerEventRoutine
struct MIXERLINE_EXT * LPMIXERLINE_EXT
const GUID KSNODETYPE_SYNTHESIZER
MIXER_STATUS MMixerCreateTopology(IN PMIXER_CONTEXT MixerContext, IN ULONG PinCount, IN PKSMULTIPLE_ITEM NodeConnections, IN PKSMULTIPLE_ITEM NodeTypes, OUT PTOPOLOGY *OutTopology)
MIXER_STATUS MMixerGetPinName(IN PMIXER_CONTEXT MixerContext, IN LPMIXER_INFO MixerInfo, IN HANDLE hMixer, IN ULONG PinId, IN OUT LPWSTR *OutBuffer)
const GUID KSNODETYPE_LINE_CONNECTOR
MIXER_STATUS MMixerBuildMixerDestinationLine(IN PMIXER_CONTEXT MixerContext, IN OUT LPMIXER_INFO MixerInfo, IN HANDLE hMixer, IN ULONG PinId, IN ULONG bInput)
MIXER_STATUS MMixerGetDeviceNameWithComponentId(IN PMIXER_CONTEXT MixerContext, IN HANDLE hMixer, OUT LPWSTR DeviceName)