1 #pragma once 2 3 typedef enum 4 { 5 MM_STATUS_SUCCESS = 0, 6 MM_STATUS_NOTINITIALIZED, 7 MM_STATUS_NOT_IMPLEMENTED, 8 MM_STATUS_NO_MORE_DEVICES, 9 MM_STATUS_MORE_ENTRIES, 10 MM_STATUS_INVALID_PARAMETER, 11 MM_STATUS_UNSUCCESSFUL, 12 MM_STATUS_NO_MEMORY 13 14 15 }MIXER_STATUS; 16 17 18 typedef PVOID (*PMIXER_ALLOC)( 19 IN ULONG NumberOfBytes); 20 21 typedef VOID (*PMIXER_FREE)( 22 IN PVOID Block); 23 24 typedef MIXER_STATUS (*PMIXER_ENUM)( 25 IN PVOID EnumContext, 26 IN ULONG DeviceIndex, 27 OUT LPWSTR * DeviceName, 28 OUT PHANDLE OutHandle, 29 OUT PHANDLE OutDevInterfaceKey); 30 31 typedef MIXER_STATUS(*PMIXER_DEVICE_CONTROL)( 32 IN HANDLE hMixer, 33 IN ULONG dwIoControlCode, 34 IN PVOID lpInBuffer, 35 IN ULONG nInBufferSize, 36 OUT PVOID lpOutBuffer, 37 ULONG nOutBufferSize, 38 PULONG lpBytesReturned); 39 40 typedef MIXER_STATUS(*PMIXER_OPEN)( 41 IN LPWSTR DevicePath, 42 OUT PHANDLE hDevice); 43 44 typedef MIXER_STATUS(*PMIXER_CLOSE)( 45 IN HANDLE hDevice); 46 47 typedef MIXER_STATUS(*PMIXER_CLOSEKEY)( 48 IN HANDLE hKey); 49 50 typedef VOID (CALLBACK *PMIXER_EVENT)( 51 IN PVOID MixerEventContext, 52 IN HANDLE hMixer, 53 IN ULONG NotificationType, 54 IN ULONG Value); 55 56 typedef VOID (*PMIXER_COPY)( 57 IN PVOID Dst, 58 IN PVOID Src, 59 IN ULONG Length); 60 61 typedef MIXER_STATUS(*PMIXER_QUERY_KEY_VALUE)( 62 IN HANDLE hKey, 63 IN LPWSTR KeyName, 64 OUT PVOID * ResultBuffer, 65 OUT PULONG ResultLength, 66 OUT PULONG KeyType); 67 68 typedef MIXER_STATUS(*PMIXER_OPEN_KEY)( 69 IN HANDLE hKey, 70 IN LPWSTR SubKey, 71 IN ULONG DesiredAccess, 72 OUT PHANDLE OutKey); 73 74 typedef PVOID (*PMIXER_ALLOC_EVENT_DATA)( 75 IN ULONG ExtraBytes); 76 77 typedef VOID (*PMIXER_FREE_EVENT_DATA)( 78 IN PVOID EventData); 79 80 typedef MIXER_STATUS (*PIN_CREATE_CALLBACK)( 81 IN PVOID Context, 82 IN ULONG DeviceId, 83 IN ULONG PinId, 84 IN HANDLE hFilter, 85 IN PKSPIN_CONNECT PinConnect, 86 IN ACCESS_MASK DesiredAccess, 87 OUT PHANDLE PinHandle); 88 89 typedef struct 90 { 91 ULONG SizeOfStruct; 92 PVOID MixerContext; 93 94 PMIXER_ALLOC Alloc; 95 PMIXER_DEVICE_CONTROL Control; 96 PMIXER_FREE Free; 97 PMIXER_OPEN Open; 98 PMIXER_CLOSE Close; 99 PMIXER_COPY Copy; 100 PMIXER_OPEN_KEY OpenKey; 101 PMIXER_QUERY_KEY_VALUE QueryKeyValue; 102 PMIXER_CLOSEKEY CloseKey; 103 PMIXER_ALLOC_EVENT_DATA AllocEventData; 104 PMIXER_FREE_EVENT_DATA FreeEventData; 105 }MIXER_CONTEXT, *PMIXER_CONTEXT; 106 107 MIXER_STATUS 108 MMixerInitialize( 109 IN PMIXER_CONTEXT MixerContext, 110 IN PMIXER_ENUM EnumFunction, 111 IN PVOID EnumContext); 112 113 ULONG 114 MMixerGetCount( 115 IN PMIXER_CONTEXT MixerContext); 116 117 ULONG 118 MMixerGetWaveInCount( 119 IN PMIXER_CONTEXT MixerContext); 120 121 ULONG 122 MMixerGetWaveOutCount( 123 IN PMIXER_CONTEXT MixerContext); 124 125 ULONG 126 MMixerGetMidiInCount( 127 IN PMIXER_CONTEXT MixerContext); 128 129 ULONG 130 MMixerGetMidiOutCount( 131 IN PMIXER_CONTEXT MixerContext); 132 133 134 135 MIXER_STATUS 136 MMixerGetCapabilities( 137 IN PMIXER_CONTEXT MixerContext, 138 IN ULONG MixerIndex, 139 OUT LPMIXERCAPSW MixerCaps); 140 141 MIXER_STATUS 142 MMixerOpen( 143 IN PMIXER_CONTEXT MixerContext, 144 IN ULONG MixerId, 145 IN PVOID MixerEventContext, 146 IN PMIXER_EVENT MixerEventRoutine, 147 OUT PHANDLE MixerHandle); 148 149 MIXER_STATUS 150 MMixerClose( 151 IN PMIXER_CONTEXT MixerContext, 152 IN ULONG MixerId, 153 IN PVOID MixerEventContext, 154 IN PMIXER_EVENT MixerEventRoutine); 155 156 MIXER_STATUS 157 MMixerGetLineInfo( 158 IN PMIXER_CONTEXT MixerContext, 159 IN HANDLE MixerHandle, 160 IN ULONG MixerId, 161 IN ULONG Flags, 162 OUT LPMIXERLINEW MixerLine); 163 164 MIXER_STATUS 165 MMixerGetLineControls( 166 IN PMIXER_CONTEXT MixerContext, 167 IN HANDLE MixerHandle, 168 IN ULONG MixerId, 169 IN ULONG Flags, 170 OUT LPMIXERLINECONTROLSW MixerLineControls); 171 172 MIXER_STATUS 173 MMixerSetControlDetails( 174 IN PMIXER_CONTEXT MixerContext, 175 IN HANDLE MixerHandle, 176 IN ULONG MixerId, 177 IN ULONG Flags, 178 OUT LPMIXERCONTROLDETAILS MixerControlDetails); 179 180 MIXER_STATUS 181 MMixerGetControlDetails( 182 IN PMIXER_CONTEXT MixerContext, 183 IN HANDLE MixerHandle, 184 IN ULONG MixerId, 185 IN ULONG Flags, 186 OUT LPMIXERCONTROLDETAILS MixerControlDetails); 187 188 MIXER_STATUS 189 MMixerWaveOutCapabilities( 190 IN PMIXER_CONTEXT MixerContext, 191 IN ULONG DeviceIndex, 192 OUT LPWAVEOUTCAPSW Caps); 193 194 MIXER_STATUS 195 MMixerWaveInCapabilities( 196 IN PMIXER_CONTEXT MixerContext, 197 IN ULONG DeviceIndex, 198 OUT LPWAVEINCAPSW Caps); 199 200 MIXER_STATUS 201 MMixerOpenWave( 202 IN PMIXER_CONTEXT MixerContext, 203 IN ULONG DeviceIndex, 204 IN ULONG bWaveIn, 205 IN LPWAVEFORMATEX WaveFormat, 206 IN PIN_CREATE_CALLBACK CreateCallback, 207 IN PVOID Context, 208 OUT PHANDLE PinHandle); 209 210 MIXER_STATUS 211 MMixerGetWavePosition( 212 _In_ PMIXER_CONTEXT MixerContext, 213 _In_ HANDLE PinHandle, 214 _Out_ PDWORD Position); 215 216 MIXER_STATUS 217 MMixerSetWaveStatus( 218 IN PMIXER_CONTEXT MixerContext, 219 IN HANDLE PinHandle, 220 IN KSSTATE State); 221 222 MIXER_STATUS 223 MMixerSetWaveResetState( 224 IN PMIXER_CONTEXT MixerContext, 225 IN HANDLE PinHandle, 226 IN ULONG bBegin); 227 228 MIXER_STATUS 229 MMixerGetWaveDevicePath( 230 IN PMIXER_CONTEXT MixerContext, 231 IN ULONG bWaveIn, 232 IN ULONG DeviceId, 233 OUT LPWSTR * DevicePath); 234 235 MIXER_STATUS 236 MMixerMidiOutCapabilities( 237 IN PMIXER_CONTEXT MixerContext, 238 IN ULONG DeviceIndex, 239 OUT LPMIDIOUTCAPSW Caps); 240 241 MIXER_STATUS 242 MMixerMidiInCapabilities( 243 IN PMIXER_CONTEXT MixerContext, 244 IN ULONG DeviceIndex, 245 OUT LPMIDIINCAPSW Caps); 246 247 MIXER_STATUS 248 MMixerGetMidiDevicePath( 249 IN PMIXER_CONTEXT MixerContext, 250 IN ULONG bMidiIn, 251 IN ULONG DeviceId, 252 OUT LPWSTR * DevicePath); 253 254 MIXER_STATUS 255 MMixerSetMidiStatus( 256 IN PMIXER_CONTEXT MixerContext, 257 IN HANDLE PinHandle, 258 IN KSSTATE State); 259 260 MIXER_STATUS 261 MMixerOpenMidi( 262 IN PMIXER_CONTEXT MixerContext, 263 IN ULONG DeviceIndex, 264 IN ULONG bMidiIn, 265 IN PIN_CREATE_CALLBACK CreateCallback, 266 IN PVOID Context, 267 OUT PHANDLE PinHandle); 268