1 // Licensed under the Apache License, Version 2.0
2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4 // All files in the project carrying such notice may not be copied, modified, or distributed
5 // except according to those terms.
6 //! DSound procedure declarations, constant definitions and macros
7 use shared::guiddef::{GUID, LPCGUID, LPGUID};
8 use shared::minwindef::{DWORD, LPDWORD, LPLONG, LPVOID};
9 use shared::windef::HWND;
10 use shared::winerror::{E_FAIL, S_OK};
11 use um::mmsystem::{LPCWAVEFORMATEX, LPWAVEFORMATEX};
12 use um::unknwnbase::{IUnknown, IUnknownVtbl, LPUNKNOWN};
13 use um::winnt::{HRESULT, LONG};
14 DEFINE_GUID!{CLSID_DirectSound,
15     0x47d4d946, 0x62e8, 0x11cf, 0x93, 0xbc, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00}
16 DEFINE_GUID!{CLSID_DirectSound8,
17     0x3901cc3f, 0x84b5, 0x4fa4, 0xba, 0x35, 0xaa, 0x81, 0x72, 0xb8, 0xa0, 0x9b}
18 DEFINE_GUID!{CLSID_DirectSoundCapture,
19     0xb0210780, 0x89cd, 0x11d0, 0xaf, 0x08, 0x00, 0xa0, 0xc9, 0x25, 0xcd, 0x16}
20 DEFINE_GUID!{CLSID_DirectSoundCapture8,
21     0xe4bcac13, 0x7f99, 0x4908, 0x9a, 0x8e, 0x74, 0xe3, 0xbf, 0x24, 0xb6, 0xe1}
22 DEFINE_GUID!{CLSID_DirectSoundFullDuplex,
23     0xfea4300c, 0x7959, 0x4147, 0xb2, 0x6a, 0x23, 0x77, 0xb9, 0xe7, 0xa9, 0x1d}
24 DEFINE_GUID!{DSDEVID_DefaultPlayback,
25     0xdef00000, 0x9c6d, 0x47ed, 0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03}
26 DEFINE_GUID!{DSDEVID_DefaultCapture,
27     0xdef00001, 0x9c6d, 0x47ed, 0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03}
28 DEFINE_GUID!{DSDEVID_DefaultVoicePlayback,
29     0xdef00002, 0x9c6d, 0x47ed, 0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03}
30 DEFINE_GUID!{DSDEVID_DefaultVoiceCapture,
31     0xdef00003, 0x9c6d, 0x47ed, 0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03}
32 STRUCT!{struct DSCAPS {
33     dwSize: DWORD,
34     dwFlags: DWORD,
35     dwMinSecondarySampleRate: DWORD,
36     dwMaxSecondarySampleRate: DWORD,
37     dwPrimaryBuffers: DWORD,
38     dwMaxHwMixingAllBuffers: DWORD,
39     dwMaxHwMixingStaticBuffers: DWORD,
40     dwMaxHwMixingStreamingBuffers: DWORD,
41     dwFreeHwMixingAllBuffers: DWORD,
42     dwFreeHwMixingStaticBuffers: DWORD,
43     dwFreeHwMixingStreamingBuffers: DWORD,
44     dwMaxHw3DAllBuffers: DWORD,
45     dwMaxHw3DStaticBuffers: DWORD,
46     dwMaxHw3DStreamingBuffers: DWORD,
47     dwFreeHw3DAllBuffers: DWORD,
48     dwFreeHw3DStaticBuffers: DWORD,
49     dwFreeHw3DStreamingBuffers: DWORD,
50     dwTotalHwMemBytes: DWORD,
51     dwFreeHwMemBytes: DWORD,
52     dwMaxContigFreeHwMemBytes: DWORD,
53     dwUnlockTransferRateHwBuffers: DWORD,
54     dwPlayCpuOverheadSwBuffers: DWORD,
55     dwReserved1: DWORD,
56     dwReserved2: DWORD,
57 }}
58 pub type LPDSCAPS = *mut DSCAPS;
59 STRUCT!{struct DSBCAPS {
60     dwSize: DWORD,
61     dwFlags: DWORD,
62     dwBufferBytes: DWORD,
63     dwUnlockTransferRate: DWORD,
64     dwPlayCpuOverhead: DWORD,
65 }}
66 pub type LPDSBCAPS = *mut DSBCAPS;
67 STRUCT!{struct DSBUFFERDESC {
68     dwSize: DWORD,
69     dwFlags: DWORD,
70     dwBufferBytes: DWORD,
71     dwReserved: DWORD,
72     lpwfxFormat: LPWAVEFORMATEX,
73     guid3DAlgorithm: GUID,
74 }}
75 pub type LPCDSBUFFERDESC = *const DSBUFFERDESC;
76 RIDL!{#[uuid(0x279afa85, 0x4981, 0x11ce, 0xa5, 0x21, 0x00, 0x20, 0xaf, 0x0b, 0xe5, 0x60)]
77 interface IDirectSoundBuffer(IDirectSoundBufferVtbl): IUnknown(IUnknownVtbl) {
78     fn GetCaps(
79         pDSBufferCaps: LPDSBCAPS,
80     ) -> HRESULT,
81     fn GetCurrentPosition(
82         pdwCurrentPlayCursor: LPDWORD,
83         pdwCurrentWriteCursor: LPDWORD,
84     ) -> HRESULT,
85     fn GetFormat(
86         pwfxFormat: LPWAVEFORMATEX,
87         dwSizeAllocated: DWORD,
88         pdwSizeWritten: LPDWORD,
89     ) -> HRESULT,
90     fn GetVolume(
91         plVolume: LPLONG,
92     ) -> HRESULT,
93     fn GetPan(
94         plPan: LPLONG,
95     ) -> HRESULT,
96     fn GetFrequency(
97         pdwFrequency: LPDWORD,
98     ) -> HRESULT,
99     fn GetStatus(
100         pdwStatus: LPDWORD,
101     ) -> HRESULT,
102     fn Initialize(
103         pDirectSound: LPDIRECTSOUND,
104         pcDSBufferDesc: LPCDSBUFFERDESC,
105     ) -> HRESULT,
106     fn Lock(
107         dwOffset: DWORD,
108         dwBytes: DWORD,
109         ppvAudioPtr1: *mut LPVOID,
110         pdwAudioBytes1: LPDWORD,
111         ppvAudioPtr2: *mut LPVOID,
112         pdwAudioBytes2: LPDWORD,
113         dwFlags: DWORD,
114     ) -> HRESULT,
115     fn Play(
116         dwReserved1: DWORD,
117         dwPriority: DWORD,
118         dwFlags: DWORD,
119     ) -> HRESULT,
120     fn SetCurrentPosition(
121         dwNewPosition: DWORD,
122     ) -> HRESULT,
123     fn SetFormat(
124         pcfxFormat: LPCWAVEFORMATEX,
125     ) -> HRESULT,
126     fn SetVolume(
127         lVolume: LONG,
128     ) -> HRESULT,
129     fn SetPan(
130         lPan: LONG,
131     ) -> HRESULT,
132     fn SetFrequency(
133         dwFrequency: DWORD,
134     ) -> HRESULT,
135     fn Stop() -> HRESULT,
136     fn Unlock(
137         pvAudioPtr1: LPVOID,
138         dwAudioBytes1: DWORD,
139         pvAudioPtr2: LPVOID,
140         dwAudioBytes2: DWORD,
141     ) -> HRESULT,
142     fn Restore() -> HRESULT,
143 }}
144 pub type LPDIRECTSOUNDBUFFER = *mut IDirectSoundBuffer;
145 DEFINE_GUID!{IID_IReferenceClock,
146     0x56a86897, 0x0ad4, 0x11ce, 0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70}
147 DEFINE_GUID!{IID_IDirectSound,
148     0x279afa83, 0x4981, 0x11ce, 0xa5, 0x21, 0x00, 0x20, 0xaf, 0x0b, 0xe5, 0x60}
149 RIDL!{#[uuid(0x279afa83, 0x4981, 0x11ce, 0xa5, 0x21, 0x00, 0x20, 0xaf, 0x0b, 0xe5, 0x60)]
150 interface IDirectSound(IDirectSoundVtbl): IUnknown(IUnknownVtbl) {
151     fn CreateSoundBuffer(
152         pcDSBufferDesc: LPCDSBUFFERDESC,
153         ppDSBuffer: *mut LPDIRECTSOUNDBUFFER,
154         pUnkOuter: LPUNKNOWN,
155     ) -> HRESULT,
156     fn GetCaps(
157         pDSCaps: LPDSCAPS,
158     ) -> HRESULT,
159     fn DuplicateSoundBuffer(
160         pDSBufferOriginal: LPDIRECTSOUNDBUFFER,
161         ppDSBufferDuplicate: *mut LPDIRECTSOUNDBUFFER,
162     ) -> HRESULT,
163     fn SetCooperativeLevel(
164         hWnd: HWND,
165         dwLevel: DWORD,
166     ) -> HRESULT,
167     fn Compact() -> HRESULT,
168     fn GetSpeakerConfig(
169         pdwSpeakerConfig: LPDWORD,
170     ) -> HRESULT,
171     fn SetSpeakerConfig(
172         dwSpeakerConfig: DWORD,
173     ) -> HRESULT,
174     fn Initialize(
175         pcGuidDevice: LPCGUID,
176     ) -> HRESULT,
177 }}
178 pub type LPDIRECTSOUND = *mut IDirectSound;
179 DEFINE_GUID!{IID_IDirectSound8,
180     0xc50a7e93, 0xf395, 0x4834, 0x9e, 0xf6, 0x7f, 0xa9, 0x9d, 0xe5, 0x09, 0x66}
181 DEFINE_GUID!{IID_IDirectSoundBuffer,
182     0x279afa85, 0x4981, 0x11ce, 0xa5, 0x21, 0x00, 0x20, 0xaf, 0x0b, 0xe5, 0x60}
183 DEFINE_GUID!{IID_IDirectSoundBuffer8,
184     0x6825a449, 0x7524, 0x4d82, 0x92, 0x0f, 0x50, 0xe3, 0x6a, 0xb3, 0xab, 0x1e}
185 DEFINE_GUID!{GUID_All_Objects,
186     0xaa114de5, 0xc262, 0x4169, 0xa1, 0xc8, 0x23, 0xd6, 0x98, 0xcc, 0x73, 0xb5}
187 DEFINE_GUID!{IID_IDirectSound3DListener,
188     0x279afa84, 0x4981, 0x11ce, 0xa5, 0x21, 0x00, 0x20, 0xaf, 0x0b, 0xe5, 0x60}
189 DEFINE_GUID!{IID_IDirectSound3DBuffer,
190     0x279afa86, 0x4981, 0x11ce, 0xa5, 0x21, 0x00, 0x20, 0xaf, 0x0b, 0xe5, 0x60}
191 DEFINE_GUID!{IID_IDirectSoundCapture,
192     0xb0210781, 0x89cd, 0x11d0, 0xaf, 0x08, 0x00, 0xa0, 0xc9, 0x25, 0xcd, 0x16}
193 DEFINE_GUID!{IID_IDirectSoundCaptureBuffer,
194     0xb0210782, 0x89cd, 0x11d0, 0xaf, 0x08, 0x00, 0xa0, 0xc9, 0x25, 0xcd, 0x16}
195 DEFINE_GUID!{IID_IDirectSoundCaptureBuffer8,
196     0x00990df4, 0x0dbb, 0x4872, 0x83, 0x3e, 0x6d, 0x30, 0x3e, 0x80, 0xae, 0xb6}
197 DEFINE_GUID!{IID_IDirectSoundNotify,
198     0xb0210783, 0x89cd, 0x11d0, 0xaf, 0x08, 0x00, 0xa0, 0xc9, 0x25, 0xcd, 0x16}
199 DEFINE_GUID!{IID_IKsPropertySet,
200     0x31efac30, 0x515c, 0x11d0, 0xa9, 0xaa, 0x00, 0xaa, 0x00, 0x61, 0xbe, 0x93}
201 DEFINE_GUID!{IID_IDirectSoundFXGargle,
202     0xd616f352, 0xd622, 0x11ce, 0xaa, 0xc5, 0x00, 0x20, 0xaf, 0x0b, 0x99, 0xa3}
203 DEFINE_GUID!{IID_IDirectSoundFXChorus,
204     0x880842e3, 0x145f, 0x43e6, 0xa9, 0x34, 0xa7, 0x18, 0x06, 0xe5, 0x05, 0x47}
205 DEFINE_GUID!{IID_IDirectSoundFXFlanger,
206     0x903e9878, 0x2c92, 0x4072, 0x9b, 0x2c, 0xea, 0x68, 0xf5, 0x39, 0x67, 0x83}
207 DEFINE_GUID!{IID_IDirectSoundFXEcho,
208     0x8bd28edf, 0x50db, 0x4e92, 0xa2, 0xbd, 0x44, 0x54, 0x88, 0xd1, 0xed, 0x42}
209 DEFINE_GUID!{IID_IDirectSoundFXDistortion,
210     0x8ecf4326, 0x455f, 0x4d8b, 0xbd, 0xa9, 0x8d, 0x5d, 0x3e, 0x9e, 0x3e, 0x0b}
211 DEFINE_GUID!{IID_IDirectSoundFXCompressor,
212     0x4bbd1154, 0x62f6, 0x4e2c, 0xa1, 0x5c, 0xd3, 0xb6, 0xc4, 0x17, 0xf7, 0xa0}
213 DEFINE_GUID!{IID_IDirectSoundFXParamEq,
214     0xc03ca9fe, 0xfe90, 0x4204, 0x80, 0x78, 0x82, 0x33, 0x4c, 0xd1, 0x77, 0xda}
215 DEFINE_GUID!{IID_IDirectSoundFXI3DL2Reverb,
216     0x4b166a6a, 0x0d66, 0x43f3, 0x80, 0xe3, 0xee, 0x62, 0x80, 0xde, 0xe1, 0xa4}
217 DEFINE_GUID!{IID_IDirectSoundFXWavesReverb,
218     0x46858c3a, 0x0dc6, 0x45e3, 0xb7, 0x60, 0xd4, 0xee, 0xf1, 0x6c, 0xb3, 0x25}
219 DEFINE_GUID!{IID_IDirectSoundCaptureFXAec,
220     0xad74143d, 0x903d, 0x4ab7, 0x80, 0x66, 0x28, 0xd3, 0x63, 0x03, 0x6d, 0x65}
221 DEFINE_GUID!{IID_IDirectSoundCaptureFXNoiseSuppress,
222     0xed311e41, 0xfbae, 0x4175, 0x96, 0x25, 0xcd, 0x08, 0x54, 0xf6, 0x93, 0xca}
223 DEFINE_GUID!{IID_IDirectSoundFullDuplex,
224     0xedcb4c7a, 0xdaab, 0x4216, 0xa4, 0x2e, 0x6c, 0x50, 0x59, 0x6d, 0xdc, 0x1d}
225 pub const DS_OK: HRESULT = S_OK;
226 pub const DSERR_GENERIC: HRESULT = E_FAIL;
227 pub const DSSCL_NORMAL: DWORD = 0x00000001;
228 pub const DSSCL_PRIORITY: DWORD = 0x00000002;
229 pub const DSSCL_EXCLUSIVE: DWORD = 0x00000003;
230 pub const DSSCL_WRITEPRIMARY: DWORD = 0x00000004;
231 pub const DSBCAPS_PRIMARYBUFFER: DWORD = 0x00000001;
232 pub const DSBCAPS_STATIC: DWORD = 0x00000002;
233 pub const DSBCAPS_LOCHARDWARE: DWORD = 0x00000004;
234 pub const DSBCAPS_LOCSOFTWARE: DWORD = 0x00000008;
235 pub const DSBCAPS_CTRL3D: DWORD = 0x00000010;
236 pub const DSBCAPS_CTRLFREQUENCY: DWORD = 0x00000020;
237 pub const DSBCAPS_CTRLPAN: DWORD = 0x00000040;
238 pub const DSBCAPS_CTRLVOLUME: DWORD = 0x00000080;
239 pub const DSBCAPS_CTRLPOSITIONNOTIFY: DWORD = 0x00000100;
240 pub const DSBCAPS_CTRLFX: DWORD = 0x00000200;
241 pub const DSBCAPS_STICKYFOCUS: DWORD = 0x00004000;
242 pub const DSBCAPS_GLOBALFOCUS: DWORD = 0x00008000;
243 pub const DSBCAPS_GETCURRENTPOSITION2: DWORD = 0x00010000;
244 pub const DSBCAPS_MUTE3DATMAXDISTANCE: DWORD = 0x00020000;
245 pub const DSBCAPS_LOCDEFER: DWORD = 0x00040000;
246 pub const DSBCAPS_TRUEPLAYPOSITION: DWORD = 0x00080000;
247 pub const DSBPLAY_LOOPING: DWORD = 0x00000001;
248 pub const DSBPLAY_LOCHARDWARE: DWORD = 0x00000002;
249 pub const DSBPLAY_LOCSOFTWARE: DWORD = 0x00000004;
250 pub const DSBPLAY_TERMINATEBY_TIME: DWORD = 0x00000008;
251 pub const DSBPLAY_TERMINATEBY_DISTANCE: DWORD = 0x000000010;
252 pub const DSBPLAY_TERMINATEBY_PRIORITY: DWORD = 0x000000020;
253 extern "system" {
DirectSoundCreate( pcGuidDevice: LPCGUID, ppDS: *mut LPDIRECTSOUND, pUnkOuter: LPUNKNOWN, ) -> HRESULT254     pub fn DirectSoundCreate(
255         pcGuidDevice: LPCGUID,
256         ppDS: *mut LPDIRECTSOUND,
257         pUnkOuter: LPUNKNOWN,
258     ) -> HRESULT;
259     // pub fn DirectSoundEnumerateA(
260     //     pDSEnumCallback: LPDSENUMCALLBACKA,
261     //     pContext: LPVOID,
262     // ) -> HRESULT;
263     // pub fn DirectSoundEnumerateW(
264     //     pDSEnumCallback: LPDSENUMCALLBACKW,
265     //     pContext: LPVOID,
266     // ) -> HRESULT;
267     // pub fn DirectSoundCaptureCreate(
268     //     pcGuidDevice: LPCGUID,
269     //     ppDSC: *mut LPDIRECTSOUNDCAPTURE,
270     //     pUnkOuter: LPUNKNOWN,
271     // ) -> HRESULT;
272     // pub fn DirectSoundCaptureEnumerateA(
273     //     pDSEnumCallback: LPDSENUMCALLBACKA,
274     //     pContext: LPVOID,
275     // ) -> HRESULT;
276     // pub fn DirectSoundCaptureEnumerateW(
277     //     pDSEnumCallback: LPDSENUMCALLBACKW,
278     //     pContext: LPVOID,
279     // ) -> HRESULT;
280     // pub fn DirectSoundCreate8(
281     //     pcGuidDevice: LPCGUID,
282     //     ppDS8: *mut LPDIRECTSOUND8,
283     //     pUnkOuter: LPUNKNOWN,
284     // ) -> HRESULT;
285     // pub fn DirectSoundCaptureCreate8(
286     //     pcGuidDevice: LPCGUID,
287     //     ppDSC8: *mut LPDIRECTSOUNDCAPTURE8,
288     //     pUnkOuter: LPUNKNOWN,
289     // ) -> HRESULT;
290     // pub fn DirectSoundFullDuplexCreate(
291     //     pcGuidCaptureDevice: LPCGUID,
292     //     pcGuidRenderDevice: LPCGUID,
293     //     pcDSCBufferDesc: LPCDSCBUFFERDESC,
294     //     pcDSBufferDesc: LPCDSBUFFERDESC,
295     //     hWnd: HWND,
296     //     dwLevel: DWORD,
297     //     ppDSFD: *mut LPDIRECTSOUNDFULLDUPLEX,
298     //     ppDSCBuffer8: *mut LPDIRECTSOUNDCAPTUREBUFFER8,
299     //     ppDSBuffer8: *mut LPDIRECTSOUNDBUFFER8,
300     //     pUnkOuter: LPUNKNOWN,
301     // ) -> HRESULT;
GetDeviceID( pGuidSrc: LPCGUID, pGuidDest: LPGUID, ) -> HRESULT302     pub fn GetDeviceID(
303         pGuidSrc: LPCGUID,
304         pGuidDest: LPGUID,
305     ) -> HRESULT;
306 }
307 DEFINE_GUID!{DS3DALG_NO_VIRTUALIZATION,
308     0xc241333f, 0x1c1b, 0x11d2, 0x94, 0xf5, 0x00, 0xc0, 0x4f, 0xc2, 0x8a, 0xca}
309 DEFINE_GUID!{DS3DALG_HRTF_FULL,
310     0xc2413340, 0x1c1b, 0x11d2, 0x94, 0xf5, 0x00, 0xc0, 0x4f, 0xc2, 0x8a, 0xca}
311 DEFINE_GUID!{DS3DALG_HRTF_LIGHT,
312     0xc2413342, 0x1c1b, 0x11d2, 0x94, 0xf5, 0x00, 0xc0, 0x4f, 0xc2, 0x8a, 0xca}
313 DEFINE_GUID!{GUID_DSFX_STANDARD_GARGLE,
314     0xdafd8210, 0x5711, 0x4b91, 0x9f, 0xe3, 0xf7, 0x5b, 0x7a, 0xe2, 0x79, 0xbf}
315 DEFINE_GUID!{GUID_DSFX_STANDARD_CHORUS,
316     0xefe6629c, 0x81f7, 0x4281, 0xbd, 0x91, 0xc9, 0xd6, 0x04, 0xa9, 0x5a, 0xf6}
317 DEFINE_GUID!{GUID_DSFX_STANDARD_FLANGER,
318     0xefca3d92, 0xdfd8, 0x4672, 0xa6, 0x03, 0x74, 0x20, 0x89, 0x4b, 0xad, 0x98}
319 DEFINE_GUID!{GUID_DSFX_STANDARD_ECHO,
320     0xef3e932c, 0xd40b, 0x4f51, 0x8c, 0xcf, 0x3f, 0x98, 0xf1, 0xb2, 0x9d, 0x5d}
321 DEFINE_GUID!{GUID_DSFX_STANDARD_DISTORTION,
322     0xef114c90, 0xcd1d, 0x484e, 0x96, 0xe5, 0x09, 0xcf, 0xaf, 0x91, 0x2a, 0x21}
323 DEFINE_GUID!{GUID_DSFX_STANDARD_COMPRESSOR,
324     0xef011f79, 0x4000, 0x406d, 0x87, 0xaf, 0xbf, 0xfb, 0x3f, 0xc3, 0x9d, 0x57}
325 DEFINE_GUID!{GUID_DSFX_STANDARD_PARAMEQ,
326     0x120ced89, 0x3bf4, 0x4173, 0xa1, 0x32, 0x3c, 0xb4, 0x06, 0xcf, 0x32, 0x31}
327 DEFINE_GUID!{GUID_DSFX_STANDARD_I3DL2REVERB,
328     0xef985e71, 0xd5c7, 0x42d4, 0xba, 0x4d, 0x2d, 0x07, 0x3e, 0x2e, 0x96, 0xf4}
329 DEFINE_GUID!{GUID_DSFX_WAVES_REVERB,
330     0x87fc0268, 0x9a55, 0x4360, 0x95, 0xaa, 0x00, 0x4a, 0x1d, 0x9d, 0xe2, 0x6c}
331 DEFINE_GUID!{GUID_DSCFX_CLASS_AEC,
332     0xbf963d80, 0xc559, 0x11d0, 0x8a, 0x2b, 0x00, 0xa0, 0xc9, 0x25, 0x5a, 0xc1}
333 DEFINE_GUID!{GUID_DSCFX_MS_AEC,
334     0xcdebb919, 0x379a, 0x488a, 0x87, 0x65, 0xf5, 0x3c, 0xfd, 0x36, 0xde, 0x40}
335 DEFINE_GUID!{GUID_DSCFX_SYSTEM_AEC,
336     0x1c22c56d, 0x9879, 0x4f5b, 0xa3, 0x89, 0x27, 0x99, 0x6d, 0xdc, 0x28, 0x10}
337 DEFINE_GUID!{GUID_DSCFX_CLASS_NS,
338     0xe07f903f, 0x62fd, 0x4e60, 0x8c, 0xdd, 0xde, 0xa7, 0x23, 0x66, 0x65, 0xb5}
339 DEFINE_GUID!{GUID_DSCFX_MS_NS,
340     0x11c5c73b, 0x66e9, 0x4ba1, 0xa0, 0xba, 0xe8, 0x14, 0xc6, 0xee, 0xd9, 0x2d}
341 DEFINE_GUID!{GUID_DSCFX_SYSTEM_NS,
342     0x5ab0882e, 0x7274, 0x4516, 0x87, 0x7d, 0x4e, 0xee, 0x99, 0xba, 0x4f, 0xd0}
343