14const GUID KSNODETYPE_DESKTOP_MICROPHONE = {0xDFF21BE2, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
15const GUID KSNODETYPE_LEGACY_AUDIO_CONNECTOR = {0xDFF21FE4, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
16const GUID KSNODETYPE_TELEPHONE = {0xDFF21EE2, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
17const GUID KSNODETYPE_PHONE_LINE = {0xDFF21EE1, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
18const GUID KSNODETYPE_DOWN_LINE_PHONE = {0xDFF21EE3, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
19const GUID KSNODETYPE_DESKTOP_SPEAKER = {0xDFF21CE4, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
20const GUID KSNODETYPE_ROOM_SPEAKER = {0xDFF21CE5, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
21const GUID KSNODETYPE_COMMUNICATION_SPEAKER = {0xDFF21CE6, 0xF70F, 0x11D0, {0xB9,0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
22const GUID KSNODETYPE_HEADPHONES = {0xDFF21CE2, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
23const GUID KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO = {0xDFF21CE3, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
24const GUID KSNODETYPE_MICROPHONE = {0xDFF21BE1, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9,0x22, 0x31, 0x96}};
25const GUID KSCATEGORY_AUDIO = {0x6994AD04L, 0x93EF, 0x11D0, {0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
26const GUID KSNODETYPE_SPDIF_INTERFACE = {0xDFF21FE5, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
27const GUID KSNODETYPE_ANALOG_CONNECTOR = {0xDFF21FE1, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
28const GUID KSNODETYPE_SPEAKER = {0xDFF21CE1, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
29const GUID KSNODETYPE_CD_PLAYER = {0xDFF220E3, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
30const GUID KSNODETYPE_SYNTHESIZER = {0xDFF220F3, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
31const GUID KSNODETYPE_LINE_CONNECTOR = {0xDFF21FE3, 0xF70F, 0x11D0, {0xB9, 0x17, 0x00, 0xA0,0xC9, 0x22, 0x31, 0x96}};
32const GUID PINNAME_VIDEO_CAPTURE = {0xfb6c4281, 0x353, 0x11d1, {0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba}};
61 MixerControl->
NodeID = NodeIndex;
76 Node.NodeId = NodeIndex;
112 MixerInfo->ControlId++;
174 Property.NodeProperty.NodeId = NodeIndex;
191 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);
193 MaxRange =
Range->Bounds.UnsignedMaximum -
Range->Bounds.UnsignedMinimum;
202 Steps = MaxRange /
Range->SteppingDelta + 1;
277 DestinationLine->
Line.
Target.wMid = MixerInfo->MixCaps.wMid;
278 DestinationLine->
Line.
Target.wPid = MixerInfo->MixCaps.wPid;
279 DestinationLine->
Line.
Target.vDriverVersion = MixerInfo->MixCaps.vDriverVersion;
291 MixerInfo->MixCaps.cDestinations++;
391 if (MixerData->Topology)
394 *OutTopology = MixerData->Topology;
435 MixerData->Topology = *OutTopology;
454 ULONG NodesCount, NodeIndex,
Count, bTerminator;
479 DPRINT1(
"MMixerCountMixerControls PinId %lu is not connected by any node\n", PinId);
488 NodeIndex = Nodes[0];
502 OutNodes[
Count] = NodeIndex;
509 OutNodes[
Count] = NodeIndex;
519 DPRINT(
"PinId %lu bInputMixer %lu bUpStream %lu NodeIndex %lu is not connected", PinId, bInputMixer, bUpStream, NodeIndex);
526 NodeIndex = Nodes[0];
534 *OutNodesCount =
Count;
537 *OutLineTerminator = NodeIndex;
593 *MaxChannels =
Header->MembersCount;
647 *MaxChannels = Channel.
Channel;
711 DPRINT(
"NodeId %lu MaxChannels %lu Line %S Id %lu\n", Nodes[
Index], MaxChannels, DstLine->Line.szName, DstLine->Line.dwLineID);
713 DstLine->Line.cChannels =
min(DstLine->Line.cChannels, MaxChannels);
732 DstLine->Line.cControls =
Count;
859 DPRINT1(
"Unknown Category for PinId %lu BridgePin %lu\n", PinId, BridgePin);
928 DPRINT1(
"Unknown Category for PinId %lu BridgePin %lu\n", PinId, BridgePin);
951 ULONG ComponentType, TargetType;
976 SrcLine->
PinId = PinId;
990 SrcLine->
Line.
Target.wMid = MixerInfo->MixCaps.wMid;
991 SrcLine->
Line.
Target.wPid = MixerInfo->MixCaps.wPid;
992 SrcLine->
Line.
Target.vDriverVersion = MixerInfo->MixCaps.vDriverVersion;
1024 *OutSrcLine = SrcLine;
1038 PULONG AllNodes, AllPins, AllPinNodes;
1039 ULONG AllNodesCount, AllPinsCount, AllPinNodesCount;
1080 DPRINT(
"LineTerminator %lu\n", LineTerminator);
1081 DPRINT(
"PinCount %lu\n", AllPinsCount);
1082 DPRINT(
"AllNodesCount %lu\n", AllNodesCount);
1085 Index = AllPinsCount;
1090 PinId = AllPins[
Index - 1];
1093 AllPinNodesCount = 0;
1096 for(SubIndex = 0; SubIndex < AllNodesCount; SubIndex++)
1099 CurNode = AllNodes[SubIndex];
1101 if (CurNode !=
MAXULONG && CurNode != LineTerminator)
1112 AllPinNodes[AllPinNodesCount] = CurNode;
1124 if (AllPinNodesCount)
1144 DPRINT1(
"Adding PinId %lu AllPinNodesCount %lu to DestinationLine %lu\n", PinId, AllPinNodesCount, DestinationLineID);
1145 for(TempIndex = 0; TempIndex < AllPinNodesCount; TempIndex++)
1146 DPRINT1(
"NodeIndex %lu\n", AllPinNodes[TempIndex]);
1153 DPRINT1(
"Discarding DestinationLineID %lu PinId %lu NO NODES!\n", DestinationLineID, PinId);
1174 ULONG NodesCount, LineTerminator;
1218 *OutLineTerminator = LineTerminator;
1276 ULONG PinsCount, LineTerminator, DestinationLineID;
1281 Topology = MixerData->Topology;
1320 DPRINT1(
"MMixerHandlePhysicalConnection Expected 1 pin but got %lu\n", PinsCount);
1327 DestinationLineID = (
DESTINATION_LINE + MixerInfo->MixCaps.cDestinations - 1);
1356 DestinationLineID = (
DESTINATION_LINE + MixerInfo->MixCaps.cDestinations - 1);
1380 ULONG PinsCount, LineTerminator, DestinationLineID;
1385 OutConnection->SymbolicLinkName[1] =
L'\\';
1395 DPRINT(
"Name %S, Pin %lu bInput %lu\n", OutConnection->SymbolicLinkName, OutConnection->Pin, bInput);
1398 ASSERT(MixerData->MixerInfo ==
NULL || MixerData->MixerInfo == MixerInfo);
1401 MixerData->MixerInfo = MixerInfo;
1403 if (MixerData->Topology ==
NULL)
1414 MixerData->Topology = Topology;
1419 Topology = MixerData->Topology;
1462 DPRINT1(
"MMixerHandlePhysicalConnection Expected 1 pin but got %lu\n", PinsCount);
1469 DestinationLineID = (
DESTINATION_LINE + MixerInfo->MixCaps.cDestinations-1);
1498 DestinationLineID = (
DESTINATION_LINE + MixerInfo->MixCaps.cDestinations-1);
1531 if (MixerInfo ==
NULL)
1542 NewMixerInfo =
TRUE;
1547 MixerInfo->MixCaps.vDriverVersion = 1;
1548 MixerInfo->MixCaps.fdwSupport = 0;
1549 MixerInfo->MixCaps.cDestinations = 0;
1559 MixerInfo->MixCaps.szPname[0] =
L'\0';
1568 MixerData->MixerInfo = MixerInfo;
1572 *OutMixerInfo = MixerInfo;
1638 DPRINT(
"BridgePin %lu bInputMixer %lu\n", Pins[0], bInputMixer);
1668 MixerList->MixerListCount++;
1684 ULONG DestinationLineID, LineTerminator;
1687 DPRINT(
"DeviceName %S\n", MixerData->DeviceName);
1703 DPRINT(
"MixerName %S Available PinID %lu\n", MixerData->DeviceName,
Index);
1708 if (!MixerData->MixerInfo)
1710 DPRINT1(
"Expected mixer info\n");
1723 DestinationLineID = (
DESTINATION_LINE + MixerData->MixerInfo->MixCaps.cDestinations-1);
1761 if (MixerData->Topology ==
NULL)
1773 MixerData->Topology = Topology;
1778 Topology = MixerData->Topology;
1840 if (!EventNotification)
1885 EventList = MixerInfo->EventList.
Flink;
1886 while(EventList != &MixerInfo->EventList)
1889 EventList = EventList->
Flink;
const GUID KSNODETYPE_PHONE_LINE
const GUID PINNAME_VIDEO_CAPTURE
MIXER_STATUS MMixerAddEvent(IN PMIXER_CONTEXT MixerContext, IN OUT LPMIXER_INFO MixerInfo, IN PVOID MixerEventContext, IN PMIXER_EVENT MixerEventRoutine)
const GUID KSNODETYPE_ROOM_SPEAKER
const GUID KSNODETYPE_SPEAKER
MIXER_STATUS MMixerGetComponentAndTargetType(IN PMIXER_CONTEXT MixerContext, IN OUT LPMIXER_INFO MixerInfo, IN HANDLE hMixer, IN ULONG PinId, OUT PULONG ComponentType, OUT PULONG TargetType)
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)
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)
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)
const GUID KSNODETYPE_HEADPHONES
VOID MMixerHandleAlternativeMixers(IN PMIXER_CONTEXT MixerContext, IN PMIXER_LIST MixerList, IN LPMIXER_DATA MixerData, IN PTOPOLOGY Topology)
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)
MIXER_STATUS MMixerGetPinName(IN PMIXER_CONTEXT MixerContext, IN LPMIXER_INFO MixerInfo, IN HANDLE hMixer, IN ULONG PinId, IN OUT LPWSTR *OutBuffer)
const GUID KSNODETYPE_COMMUNICATION_SPEAKER
MIXER_STATUS MMixerGetChannelCountEnhanced(IN PMIXER_CONTEXT MixerContext, IN LPMIXER_INFO MixerInfo, IN HANDLE hMixer, IN ULONG NodeId, OUT PULONG MaxChannels)
MIXER_STATUS MMixerAddMixerSourceLines(IN PMIXER_CONTEXT MixerContext, IN OUT LPMIXER_INFO MixerInfo, IN HANDLE hMixer, IN PTOPOLOGY Topology, IN ULONG DestinationLineID, IN ULONG LineTerminator)
const GUID KSNODETYPE_DESKTOP_SPEAKER
MIXER_STATUS MMixerSetupFilter(IN PMIXER_CONTEXT MixerContext, IN PMIXER_LIST MixerList, IN LPMIXER_DATA MixerData, IN PULONG DeviceCount)
const GUID KSNODETYPE_LEGACY_AUDIO_CONNECTOR
MIXER_STATUS MMixerRemoveEvent(IN PMIXER_CONTEXT MixerContext, IN OUT LPMIXER_INFO MixerInfo, IN PVOID MixerEventContext, IN PMIXER_EVENT MixerEventRoutine)
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)
MIXER_STATUS MMixerCreateDestinationLine(IN PMIXER_CONTEXT MixerContext, IN LPMIXER_INFO MixerInfo, IN ULONG bInputMixer, IN LPWSTR LineName)
MIXER_STATUS MMixerBuildTopology(IN PMIXER_CONTEXT MixerContext, IN LPMIXER_DATA MixerData, OUT PTOPOLOGY *OutTopology)
VOID MMixerGetMaxChannelsForNode(IN PMIXER_CONTEXT MixerContext, IN LPMIXER_INFO MixerInfo, IN HANDLE hMixer, IN ULONG NodeId, OUT PULONG MaxChannels)
const GUID KSNODETYPE_DOWN_LINE_PHONE
const GUID KSNODETYPE_TELEPHONE
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)
VOID MMixerApplyOutputFilterHack(IN PMIXER_CONTEXT MixerContext, IN LPMIXER_DATA MixerData, IN HANDLE hMixer, IN OUT PULONG PinsCount, IN OUT PULONG Pins)
const GUID KSNODETYPE_LINE_CONNECTOR
const GUID KSNODETYPE_MICROPHONE
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)
VOID MMixerGetChannelCountLegacy(IN PMIXER_CONTEXT MixerContext, IN LPMIXER_INFO MixerInfo, IN HANDLE hMixer, IN ULONG NodeId, OUT PULONG MaxChannels)
const GUID KSNODETYPE_ANALOG_CONNECTOR
const GUID KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO
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_SYNTHESIZER
const GUID KSCATEGORY_AUDIO
const GUID KSNODETYPE_DESKTOP_MICROPHONE
const GUID KSNODETYPE_CD_PLAYER
const GUID KSNODETYPE_SPDIF_INTERFACE
MIXER_STATUS MMixerBuildMixerDestinationLine(IN PMIXER_CONTEXT MixerContext, IN OUT LPMIXER_INFO MixerInfo, IN HANDLE hMixer, IN ULONG PinId, IN ULONG bInput)
static const WCHAR Description[]
MIXER_CONTEXT MixerContext
#define KSPROPERTY_TYPE_TOPOLOGY
#define KSPROPERTY_TYPE_BASICSUPPORT
#define KSPROPERTY_TYPE_GET
#define RemoveEntryList(Entry)
#define InsertTailList(ListHead, Entry)
#define InsertHeadList(ListHead, Entry)
#define InitializeListHead(ListHead)
IN PDCB IN VBO IN ULONG IN BOOLEAN Pin
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_MULTICHANNEL
#define IOCTL_KS_PROPERTY
@ KSPROPERTY_TOPOLOGY_NAME
@ KSPROPERTY_TOPOLOGY_NODES
@ KSPROPERTY_TOPOLOGY_CONNECTIONS
@ KSPROPERTY_PIN_CATEGORY
#define KSEVENT_TYPE_TOPOLOGY
#define KSEVENT_TYPE_ENABLE
struct KSPROPERTY_STEPPING_LONG * PKSPROPERTY_STEPPING_LONG
#define IOCTL_KS_ENABLE_EVENT
#define KSPROPSETID_Topology
struct KSPROPERTY_DESCRIPTION * PKSPROPERTY_DESCRIPTION
struct KSPROPERTY_MEMBERSHEADER * PKSPROPERTY_MEMBERSHEADER
VOID(CALLBACK * PMIXER_EVENT)(IN PVOID MixerEventContext, IN HANDLE hMixer, IN ULONG NotificationType, IN ULONG Value)
#define MIXERLINE_COMPONENTTYPE_DST_TELEPHONE
#define MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED
#define MIXERLINE_COMPONENTTYPE_DST_SPEAKERS
#define MIXERLINE_COMPONENTTYPE_SRC_DIGITAL
#define MIXERLINE_TARGETTYPE_WAVEOUT
#define MIXERCONTROL_CONTROLF_UNIFORM
#define MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE
#define MIXERCONTROL_CONTROLTYPE_ONOFF
#define MIXERLINE_TARGETTYPE_MIDIOUT
#define MIXERLINE_COMPONENTTYPE_DST_HEADPHONES
#define MIXERLINE_COMPONENTTYPE_DST_UNDEFINED
#define MIXERLINE_COMPONENTTYPE_SRC_ANALOG
#define MIXERCONTROL_CONTROLTYPE_MUX
#define MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER
#define MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT
#define MIXERLINE_TARGETTYPE_WAVEIN
struct tagMIXERCONTROLW MIXERCONTROLW
#define MIXERCONTROL_CONTROLF_MULTIPLE
#define MIXERLINE_COMPONENTTYPE_SRC_LINE
#define MIXERCONTROL_CONTROLTYPE_VOLUME
#define MIXER_LONG_NAME_CHARS
#define MIXERLINE_COMPONENTTYPE_DST_WAVEIN
#define MIXERLINE_LINEF_ACTIVE
#define MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE
#define MIXER_SHORT_NAME_CHARS
#define MIXERLINE_TARGETTYPE_UNDEFINED
struct tagMIXERLINEW MIXERLINEW
#define MIXERCONTROL_CONTROLTYPE_MUTE
#define MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC
#define MIXERLINE_LINEF_SOURCE
_In_ ULONG _In_ ULONG _In_ ULONG Length
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
_In_ UCHAR _In_ ULONG _Out_ PUCHAR _Outptr_result_bytebuffer_ OutBufferLength PVOID * OutBuffer
ULONG MMixerGetFilterPinCount(IN PMIXER_CONTEXT MixerContext, IN HANDLE hMixer)
MIXER_STATUS MMixerGetPhysicalConnection(IN PMIXER_CONTEXT MixerContext, IN HANDLE hMixer, IN ULONG PinId, OUT PKSPIN_PHYSICALCONNECTION *OutConnection)
ULONG MMixerGetControlTypeFromTopologyNode(IN LPGUID NodeType)
MIXER_STATUS MMixerGetFilterTopologyProperty(IN PMIXER_CONTEXT MixerContext, IN HANDLE hMixer, IN ULONG PropertyId, OUT PKSMULTIPLE_ITEM *OutMultipleItem)
MIXER_STATUS MMixerGetPinDataFlowAndCommunication(IN PMIXER_CONTEXT MixerContext, IN HANDLE hDevice, IN ULONG PinId, OUT PKSPIN_DATAFLOW DataFlow, OUT PKSPIN_COMMUNICATION Communication)
struct MIXERLINE_EXT * LPMIXERLINE_EXT
VOID MMixerGetNextNodesFromPinIndex(IN PMIXER_CONTEXT MixerContext, IN PTOPOLOGY Topology, IN ULONG PinIndex, IN ULONG bUpStream, OUT PULONG OutNodesCount, OUT PULONG OutNodes)
VOID MMixerGetTopologyPinCount(IN PTOPOLOGY Topology, OUT PULONG PinCount)
struct EVENT_NOTIFICATION_ENTRY * PEVENT_NOTIFICATION_ENTRY
LPMIXER_DATA MMixerGetDataByDeviceName(IN PMIXER_LIST MixerList, IN LPWSTR DeviceName)
struct MIXERVOLUME_DATA * LPMIXERVOLUME_DATA
VOID MMixerIsTopologyPinReserved(IN PTOPOLOGY Topology, IN ULONG PinId, OUT PULONG bReserved)
ULONG MMixerGetNodeIndexFromGuid(IN PTOPOLOGY Topology, IN const GUID *NodeType)
VOID MMixerIsTopologyNodeReserved(IN PTOPOLOGY Topology, IN ULONG NodeIndex, OUT PULONG bReserved)
MIXER_STATUS MMixerGetDeviceName(IN PMIXER_CONTEXT MixerContext, OUT LPWSTR DeviceName, IN HANDLE hKey)
VOID MMixerIsNodeTerminator(IN PTOPOLOGY Topology, IN ULONG NodeIndex, OUT ULONG *bTerminator)
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 MMixerSetTopologyPinReserved(IN PTOPOLOGY Topology, IN ULONG PinId)
MIXER_STATUS MMixerGetAllUpOrDownstreamNodesFromNodeIndex(IN PMIXER_CONTEXT MixerContext, IN PTOPOLOGY Topology, IN ULONG NodeIndex, IN ULONG bUpStream, OUT PULONG OutNodesCount, OUT PULONG OutNodes)
VOID MMixerGetAllUpOrDownstreamPinsFromNodeIndex(IN PMIXER_CONTEXT MixerContext, IN PTOPOLOGY Topology, IN ULONG NodeIndex, IN ULONG bUpStream, OUT PULONG OutPinsCount, OUT PULONG OutPins)
LPGUID MMixerGetNodeTypeFromTopology(IN PTOPOLOGY Topology, IN ULONG NodeIndex)
MIXER_STATUS MMixerCreateTopology(IN PMIXER_CONTEXT MixerContext, IN ULONG PinCount, IN PKSMULTIPLE_ITEM NodeConnections, IN PKSMULTIPLE_ITEM NodeTypes, OUT PTOPOLOGY *OutTopology)
LPMIXERLINE_EXT MMixerGetSourceMixerLineByLineId(LPMIXER_INFO MixerInfo, DWORD dwLineID)
MIXER_STATUS MMixerAllocateTopologyNodeArray(IN PMIXER_CONTEXT MixerContext, IN PTOPOLOGY Topology, OUT PULONG *OutPins)
VOID MMixerGetNextNodesFromNodeIndex(IN PMIXER_CONTEXT MixerContext, IN PTOPOLOGY Topology, IN ULONG NodeIndex, IN ULONG bUpStream, OUT PULONG OutNodesCount, OUT PULONG OutNodes)
struct MIXER_INFO * LPMIXER_INFO
VOID MMixerPrintTopology()
MIXER_STATUS MMixerIsNodeConnectedToPin(IN PMIXER_CONTEXT MixerContext, IN PTOPOLOGY Topology, IN ULONG NodeIndex, IN ULONG PinId, IN ULONG bUpStream, OUT PULONG bConnected)
MIXER_STATUS MMixerGetDeviceNameWithComponentId(IN PMIXER_CONTEXT MixerContext, IN HANDLE hMixer, OUT LPWSTR DeviceName)
MIXER_STATUS MMixerAllocateTopologyPinArray(IN PMIXER_CONTEXT MixerContext, IN PTOPOLOGY Topology, OUT PULONG *OutPins)
MIXER_STATUS MMixerGetAllUpOrDownstreamPinsFromPinIndex(IN PMIXER_CONTEXT MixerContext, IN PTOPOLOGY Topology, IN ULONG PinIndex, IN ULONG bUpStream, OUT PULONG OutPinsCount, OUT PULONG OutPins)
VOID MMixerSetTopologyNodeReserved(IN PTOPOLOGY Topology, IN ULONG NodeIndex)
_In_ const GUID _In_ ULONG PinCount
PMIXER_EVENT MixerEventRoutine
base of all file and directory entries
KSNODEPROPERTY NodeProperty
PMIXER_DEVICE_CONTROL Control
PMIXER_FREE_EVENT_DATA FreeEventData
Property(long _type, long _tag, INREAL _value)
struct _LIST_ENTRY * Flink
WCHAR szName[MIXER_LONG_NAME_CHARS]
WCHAR szShortName[MIXER_SHORT_NAME_CHARS]
union tagMIXERCONTROLW::@3045 Bounds
union tagMIXERCONTROLW::@3046 Metrics
WCHAR szName[MIXER_LONG_NAME_CHARS]
struct tagMIXERLINEW::@3040 Target
WCHAR szShortName[MIXER_SHORT_NAME_CHARS]
#define RtlZeroMemory(Destination, Length)
#define CONTAINING_RECORD(address, type, field)
_In_ WDFCOLLECTION _In_ ULONG Index
_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
_Must_inspect_result_ _In_ WDFOBJECT _In_ CONST GUID * Guid
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
#define IsEqualGUIDAligned(guid1, guid2)
_Reserved_ PVOID Reserved
_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