packages feed

bindings-portaudio 0.0.2 → 0.1

raw patch · 56 files changed

+35534/−8 lines, 56 filessetup-changed

Files

+ README.md view
@@ -0,0 +1,18 @@+bindings-portaudio
+==================
+
+Installation on Windows
+------------------------
+1. Download and unpack the latest [portaudio](http://www.portaudio.com/download.html) at a clear directory (e.g. `C:\portaudio`).
+2. Run `bash configure`, then `make`.
+3. Edit `portaudio-2.0` as follows:
+```
+--- prefix=/usr/local
++++ prefix=C:/portaudio
+
+--- libdir=${exec_prefix}/lib
++++ libdir=${exec_prefix}/lib/.libs
+```
+4. If you don't have pkgconfig, download `pkg-config` from [GTK+ Download: Windows (32-bit)](http://www.gtk.org/download/win32.php) and make sure `pkg-config.exe` is in your `PATH`.
+5. `set PKG_CONFIG_PATH=C:/portaudio`
+6. Run `cabal update && cabal install bindings-portaudio`.
Setup.hs view
@@ -1,2 +1,2 @@-import Distribution.Simple-main = defaultMain+import Distribution.Simple
+main = defaultMain
bindings-portaudio.cabal view
@@ -1,5 +1,5 @@ name:         bindings-portaudio
-version:      0.0.2
+version:      0.1
 category:     Sound
 
 author:       Fumiaki Kinoshita <fumiexcel@gmail.com>
@@ -13,6 +13,23 @@ cabal-version: >= 1.10
 build-type:    Simple
 
+extra-source-files:
+  portaudio/include/*.h
+  portaudio/src/common/*.c
+  portaudio/src/common/*.h
+  portaudio/src/hostapi/wmme/*.c
+  portaudio/src/hostapi/wdmks/*.c
+  portaudio/src/hostapi/wasapi/*.c
+  portaudio/src/hostapi/wasapi/mingw-include/*.h
+  portaudio/src/os/win/*.c
+  portaudio/src/os/win/*.h
+  extra.c
+  LICENSE
+  README.md
+  example/*.hs
+  example/example-portaudio.cabal
+  example/LICENSE
+
 --------------------------------------------------------------------------------
 
 flag WASAPI
@@ -27,8 +44,9 @@ flag WDMKS
   default: False
 
-flag MinGW-External
+flag Bundle
   default: False
+  description: Use bundled C sources. It is unstable due to the GHC bug.
 
 library
   default-language: Haskell2010
@@ -46,12 +64,12 @@   build-depends:
     base          < 5, bindings-DSL == 1.0.*
 
-  cc-options: -g -O2
+  cc-options: -g
 
-  if os(linux) || os(freebsd) || os(darwin)
+  if os(linux) || os(freebsd) || os(darwin) || !flag(Bundle)
     pkgconfig-depends: portaudio-2.0
 
-  if os(mingw32) && !flag(MinGW-External)
+  if os(mingw32) && flag(Bundle)
     include-dirs:
       portaudio/src/os/win
       portaudio/include
@@ -119,4 +137,4 @@ 
 source-repository head
   type:     git
-  location: https://github.com/fumieval/portaudio-builtin.git
+  location: https://github.com/fumieval/bindings-portaudio.git
+ example/LICENSE view
@@ -0,0 +1,30 @@+Copyright (c) 2014, Fumiaki Kinoshita <fumiexcel@gmail.com>
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+
+    * Neither the name of cosmo0920 nor the names of other
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ example/Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple
+main = defaultMain
+ example/example-portaudio.cabal view
@@ -0,0 +1,27 @@+-- Initial example-portaudio.cabal generated by cabal init.  For further
+-- documentation, see http://haskell.org/cabal/users-guide/
+
+name:                example-portaudio
+version:             0.0
+-- synopsis:
+-- description:
+license:             BSD3
+license-file:        LICENSE
+author:              Fumiaki Kinoshita <fumiexcel@gmail.com>
+maintainer:          Fumiaki Kinoshita <fumiexcel@gmail.com>
+-- copyright:
+category:            Sound
+build-type:          Simple
+-- extra-source-files:
+cabal-version:       >=1.10
+
+executable example-portaudio
+  main-is:             sine.hs
+  -- other-modules:
+  -- other-extensions:
+  build-depends:       base >=4.6 && < 5
+                     , bindings-portaudio
+                     , vector >= 0.10 && < 0.11
+  -- hs-source-dirs:
+  ghc-options: -threaded
+  default-language:    Haskell2010
+ example/sine.hs view
@@ -0,0 +1,58 @@+{-# LANGUAGE ViewPatterns, LambdaCase #-}
+import Bindings.PortAudio
+import Control.Applicative
+import Control.Concurrent.MVar
+import Control.Monad
+import Foreign.C.String
+import Foreign.C.Types
+import Foreign
+import qualified Data.Vector as V
+import System.Environment
+
+period :: Int
+period = 128
+
+table :: V.Vector CFloat
+table = V.fromList [sin t | i <- [0..period - 1], let t = fromIntegral i / fromIntegral period * 2 * pi]
+
+callback phase _ (castPtr -> o) (fromIntegral -> n) info _ _ = do
+  i0 <- takeMVar phase
+  go i0 0
+  putMVar phase $ i0 + n
+  return c'paContinue
+  where
+    go i0 i
+      | i == n = return ()
+      | otherwise = do
+        let v = table V.! ((i0 + i) `mod` period)
+        pokeElemOff o (2 * i) v
+        pokeElemOff o (2 * i + 1) v
+        go i0 (i + 1)
+
+dbg s m = do
+  e <- m
+  putStrLn $ s ++ ": " ++ show e
+  unless (e == 0) $ fail "Failed."
+
+main = getArgs >>= \case
+  ((read -> rate) : (read -> buf) : _) -> do
+    dbg "Initialization" c'Pa_Initialize
+    n <- c'Pa_GetHostApiCount
+    putStrLn "Available APIs: "
+    forM_ [0..n - 1] $ \i -> do
+      info <- c'Pa_GetHostApiInfo i >>= peek
+      name <- peekCAString $ c'PaHostApiInfo'name info
+      print (i, name)
+
+    ref <- newMVar 0
+    cb <- mk'PaStreamCallback $ callback ref
+    
+    ps <- malloc
+    dbg "Opening the default stream" $ c'Pa_OpenDefaultStream ps 0 2 1 rate buf cb nullPtr
+    s <- peek ps
+
+    dbg "Starting the stream" $ c'Pa_StartStream s
+    c'Pa_Sleep 1000
+    dbg "Stopping the stream" $ c'Pa_StopStream s
+    dbg "Closing the stream" $ c'Pa_CloseStream s
+    c'Pa_Terminate
+ portaudio/include/pa_asio.h view
@@ -0,0 +1,150 @@+#ifndef PA_ASIO_H+#define PA_ASIO_H+/*+ * $Id: pa_asio.h 1667 2011-05-02 15:49:20Z rossb $+ * PortAudio Portable Real-Time Audio Library+ * ASIO specific extensions+ *+ * Copyright (c) 1999-2000 Ross Bencina and Phil Burk+ *+ * Permission is hereby granted, free of charge, to any person obtaining+ * a copy of this software and associated documentation files+ * (the "Software"), to deal in the Software without restriction,+ * including without limitation the rights to use, copy, modify, merge,+ * publish, distribute, sublicense, and/or sell copies of the Software,+ * and to permit persons to whom the Software is furnished to do so,+ * subject to the following conditions:+ *+ * The above copyright notice and this permission notice shall be+ * included in all copies or substantial portions of the Software.+ *+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.+ */++/*+ * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests:+ *+ * Any person wishing to distribute modifications to the Software is+ * requested to send the modifications to the original developer so that+ * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above.+ */+++/** @file+ @ingroup public_header+ @brief ASIO-specific PortAudio API extension header file.+*/++#include "portaudio.h"++#ifdef __cplusplus+extern "C"+{+#endif /* __cplusplus */+++/** Retrieve legal native buffer sizes for the specificed device, in sample frames.++ @param device The global index of the device about which the query is being made.+ @param minBufferSizeFrames A pointer to the location which will receive the minimum buffer size value.+ @param maxBufferSizeFrames A pointer to the location which will receive the maximum buffer size value.+ @param preferredBufferSizeFrames A pointer to the location which will receive the preferred buffer size value.+ @param granularity A pointer to the location which will receive the "granularity". This value determines+ the step size used to compute the legal values between minBufferSizeFrames and maxBufferSizeFrames.+ If granularity is -1 then available buffer size values are powers of two.++ @see ASIOGetBufferSize in the ASIO SDK.++ @note: this function used to be called PaAsio_GetAvailableLatencyValues. There is a+ #define that maps PaAsio_GetAvailableLatencyValues to this function for backwards compatibility.+*/+PaError PaAsio_GetAvailableBufferSizes( PaDeviceIndex device,+		long *minBufferSizeFrames, long *maxBufferSizeFrames, long *preferredBufferSizeFrames, long *granularity );+++/** Backwards compatibility alias for PaAsio_GetAvailableBufferSizes++ @see PaAsio_GetAvailableBufferSizes+*/+#define PaAsio_GetAvailableLatencyValues PaAsio_GetAvailableBufferSizes+++/** Display the ASIO control panel for the specified device.++  @param device The global index of the device whose control panel is to be displayed.+  @param systemSpecific On Windows, the calling application's main window handle,+  on Macintosh this value should be zero.+*/+PaError PaAsio_ShowControlPanel( PaDeviceIndex device, void* systemSpecific );+++++/** Retrieve a pointer to a string containing the name of the specified+ input channel. The string is valid until Pa_Terminate is called.++ The string will be no longer than 32 characters including the null terminator.+*/+PaError PaAsio_GetInputChannelName( PaDeviceIndex device, int channelIndex,+        const char** channelName );++        +/** Retrieve a pointer to a string containing the name of the specified+ input channel. The string is valid until Pa_Terminate is called.++ The string will be no longer than 32 characters including the null terminator.+*/+PaError PaAsio_GetOutputChannelName( PaDeviceIndex device, int channelIndex,+        const char** channelName );+++/** Set the sample rate of an open paASIO stream.+ + @param stream The stream to operate on.+ @param sampleRate The new sample rate. ++ Note that this function may fail if the stream is alredy running and the + ASIO driver does not support switching the sample rate of a running stream.++ Returns paIncompatibleStreamHostApi if stream is not a paASIO stream.+*/+PaError PaAsio_SetStreamSampleRate( PaStream* stream, double sampleRate );+++#define paAsioUseChannelSelectors      (0x01)++typedef struct PaAsioStreamInfo{+    unsigned long size;             /**< sizeof(PaAsioStreamInfo) */+    PaHostApiTypeId hostApiType;    /**< paASIO */+    unsigned long version;          /**< 1 */++    unsigned long flags;++    /* Support for opening only specific channels of an ASIO device.+        If the paAsioUseChannelSelectors flag is set, channelSelectors is a+        pointer to an array of integers specifying the device channels to use.+        When used, the length of the channelSelectors array must match the+        corresponding channelCount parameter to Pa_OpenStream() otherwise a+        crash may result.+        The values in the selectors array must specify channels within the+        range of supported channels for the device or paInvalidChannelCount will+        result.+    */+    int *channelSelectors;+}PaAsioStreamInfo;+++#ifdef __cplusplus+}+#endif /* __cplusplus */++#endif /* PA_ASIO_H */
+ portaudio/include/pa_jack.h view
@@ -0,0 +1,77 @@+#ifndef PA_JACK_H+#define PA_JACK_H++/*+ * $Id:+ * PortAudio Portable Real-Time Audio Library+ * JACK-specific extensions+ *+ * Copyright (c) 1999-2000 Ross Bencina and Phil Burk+ *+ * Permission is hereby granted, free of charge, to any person obtaining+ * a copy of this software and associated documentation files+ * (the "Software"), to deal in the Software without restriction,+ * including without limitation the rights to use, copy, modify, merge,+ * publish, distribute, sublicense, and/or sell copies of the Software,+ * and to permit persons to whom the Software is furnished to do so,+ * subject to the following conditions:+ *+ * The above copyright notice and this permission notice shall be+ * included in all copies or substantial portions of the Software.+ *+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.+ */++/*+ * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests:+ *+ * Any person wishing to distribute modifications to the Software is+ * requested to send the modifications to the original developer so that+ * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above.+ */++/** @file+ *  @ingroup public_header+ *  @brief JACK-specific PortAudio API extension header file.+ */++#include "portaudio.h"++#ifdef __cplusplus+extern "C" {+#endif++/** Set the JACK client name.+ *+ * During Pa_Initialize, When PA JACK connects as a client of the JACK server, it requests a certain+ * name, which is for instance prepended to port names. By default this name is "PortAudio". The+ * JACK server may append a suffix to the client name, in order to avoid clashes among clients that+ * try to connect with the same name (e.g., different PA JACK clients).+ *+ * This function must be called before Pa_Initialize, otherwise it won't have any effect. Note that+ * the string is not copied, but instead referenced directly, so it must not be freed for as long as+ * PA might need it.+ * @sa PaJack_GetClientName+ */+PaError PaJack_SetClientName( const char* name );++/** Get the JACK client name used by PA JACK.+ *+ * The caller is responsible for freeing the returned pointer.+ */+PaError PaJack_GetClientName(const char** clientName);++#ifdef __cplusplus+}+#endif++#endif
+ portaudio/include/pa_linux_alsa.h view
@@ -0,0 +1,107 @@+#ifndef PA_LINUX_ALSA_H+#define PA_LINUX_ALSA_H++/*+ * $Id: pa_linux_alsa.h 1597 2011-02-11 00:15:51Z dmitrykos $+ * PortAudio Portable Real-Time Audio Library+ * ALSA-specific extensions+ *+ * Copyright (c) 1999-2000 Ross Bencina and Phil Burk+ *+ * Permission is hereby granted, free of charge, to any person obtaining+ * a copy of this software and associated documentation files+ * (the "Software"), to deal in the Software without restriction,+ * including without limitation the rights to use, copy, modify, merge,+ * publish, distribute, sublicense, and/or sell copies of the Software,+ * and to permit persons to whom the Software is furnished to do so,+ * subject to the following conditions:+ *+ * The above copyright notice and this permission notice shall be+ * included in all copies or substantial portions of the Software.+ *+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.+ */++/*+ * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests:+ *+ * Any person wishing to distribute modifications to the Software is+ * requested to send the modifications to the original developer so that+ * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above.+ */++/** @file+ *  @ingroup public_header+ *  @brief ALSA-specific PortAudio API extension header file.+ */++#include "portaudio.h"++#ifdef __cplusplus+extern "C" {+#endif++typedef struct PaAlsaStreamInfo+{+    unsigned long size;+    PaHostApiTypeId hostApiType;+    unsigned long version;++    const char *deviceString;+}+PaAlsaStreamInfo;++/** Initialize host API specific structure, call this before setting relevant attributes. */+void PaAlsa_InitializeStreamInfo( PaAlsaStreamInfo *info );++/** Instruct whether to enable real-time priority when starting the audio thread.+ *+ * If this is turned on by the stream is started, the audio callback thread will be created+ * with the FIFO scheduling policy, which is suitable for realtime operation.+ **/+void PaAlsa_EnableRealtimeScheduling( PaStream *s, int enable );++#if 0+void PaAlsa_EnableWatchdog( PaStream *s, int enable );+#endif++/** Get the ALSA-lib card index of this stream's input device. */+PaError PaAlsa_GetStreamInputCard( PaStream *s, int *card );++/** Get the ALSA-lib card index of this stream's output device. */+PaError PaAlsa_GetStreamOutputCard( PaStream *s, int *card );++/** Set the number of periods (buffer fragments) to configure devices with.+ *+ * By default the number of periods is 4, this is the lowest number of periods that works well on+ * the author's soundcard.+ * @param numPeriods The number of periods.+ */+PaError PaAlsa_SetNumPeriods( int numPeriods );++/** Set the maximum number of times to retry opening busy device (sleeping for a+ * short interval inbetween).+ */+PaError PaAlsa_SetRetriesBusy( int retries );++/** Set the path and name of ALSA library file if PortAudio is configured to load it dynamically (see+ *  PA_ALSA_DYNAMIC). This setting will overwrite the default name set by PA_ALSA_PATHNAME define.+ * @param pathName Full path with filename. Only filename can be used, but dlopen() will lookup default+ *                 searchable directories (/usr/lib;/usr/local/lib) then.+ */+void PaAlsa_SetLibraryPathName( const char *pathName );++#ifdef __cplusplus+}+#endif++#endif
+ portaudio/include/pa_mac_core.h view
@@ -0,0 +1,191 @@+#ifndef PA_MAC_CORE_H+#define PA_MAC_CORE_H+/*+ * PortAudio Portable Real-Time Audio Library+ * Macintosh Core Audio specific extensions+ * portaudio.h should be included before this file.+ *+ * Copyright (c) 2005-2006 Bjorn Roche+ *+ * Permission is hereby granted, free of charge, to any person obtaining+ * a copy of this software and associated documentation files+ * (the "Software"), to deal in the Software without restriction,+ * including without limitation the rights to use, copy, modify, merge,+ * publish, distribute, sublicense, and/or sell copies of the Software,+ * and to permit persons to whom the Software is furnished to do so,+ * subject to the following conditions:+ *+ * The above copyright notice and this permission notice shall be+ * included in all copies or substantial portions of the Software.+ *+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.+ */++/*+ * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests:+ *+ * Any person wishing to distribute modifications to the Software is+ * requested to send the modifications to the original developer so that+ * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above.+ */++/** @file+ *  @ingroup public_header+ *  @brief CoreAudio-specific PortAudio API extension header file.+ */++#include "portaudio.h"++#include <AudioUnit/AudioUnit.h>+#include <AudioToolbox/AudioToolbox.h>++#ifdef __cplusplus+extern "C" {+#endif+++/**+ * A pointer to a paMacCoreStreamInfo may be passed as+ * the hostApiSpecificStreamInfo in the PaStreamParameters struct+ * when opening a stream or querying the format. Use NULL, for the+ * defaults. Note that for duplex streams, flags for input and output+ * should be the same or behaviour is undefined.+ */+typedef struct+{+    unsigned long size;           /**size of whole structure including this header */+    PaHostApiTypeId hostApiType;  /**host API for which this data is intended */+    unsigned long version;        /**structure version */+    unsigned long flags;          /** flags to modify behaviour */+    SInt32 const * channelMap;    /** Channel map for HAL channel mapping , if not needed, use NULL;*/ +    unsigned long channelMapSize; /** Channel map size for HAL channel mapping , if not needed, use 0;*/ +} PaMacCoreStreamInfo;++/**+ * Functions+ */+++/** Use this function to initialize a paMacCoreStreamInfo struct+ * using the requested flags. Note that channel mapping is turned+ * off after a call to this function.+ * @param data The datastructure to initialize+ * @param flags The flags to initialize the datastructure with.+*/+void PaMacCore_SetupStreamInfo( PaMacCoreStreamInfo *data, unsigned long flags );++/** call this after pa_SetupMacCoreStreamInfo to use channel mapping as described in notes.txt.+ * @param data The stream info structure to assign a channel mapping to+ * @param channelMap The channel map array, as described in notes.txt. This array pointer will be used directly (ie the underlying data will not be copied), so the caller should not free the array until after the stream has been opened.+ * @param channelMapSize The size of the channel map array.+ */+void PaMacCore_SetupChannelMap( PaMacCoreStreamInfo *data, const SInt32 * const channelMap, unsigned long channelMapSize );++/**+ * Retrieve the AudioDeviceID of the input device assigned to an open stream+ *+ * @param s The stream to query.+ *+ * @return A valid AudioDeviceID, or NULL if an error occurred.+ */+AudioDeviceID PaMacCore_GetStreamInputDevice( PaStream* s );+ +/**+ * Retrieve the AudioDeviceID of the output device assigned to an open stream+ *+ * @param s The stream to query.+ *+ * @return A valid AudioDeviceID, or NULL if an error occurred.+ */+AudioDeviceID PaMacCore_GetStreamOutputDevice( PaStream* s );++/**+ * Returns a statically allocated string with the device's name+ * for the given channel. NULL will be returned on failure.+ *+ * This function's implemenation is not complete!+ *+ * @param device The PortAudio device index.+ * @param channel The channel number who's name is requested.+ * @return a statically allocated string with the name of the device.+ *         Because this string is statically allocated, it must be+ *         coppied if it is to be saved and used by the user after+ *         another call to this function.+ *+ */+const char *PaMacCore_GetChannelName( int device, int channelIndex, bool input );++    +/** Retrieve the range of legal native buffer sizes for the specificed device, in sample frames.+ + @param device The global index of the PortAudio device about which the query is being made.+ @param minBufferSizeFrames A pointer to the location which will receive the minimum buffer size value.+ @param maxBufferSizeFrames A pointer to the location which will receive the maximum buffer size value.+ + @see kAudioDevicePropertyBufferFrameSizeRange in the CoreAudio SDK.+ */+PaError PaMacCore_GetBufferSizeRange( PaDeviceIndex device,+                                       long *minBufferSizeFrames, long *maxBufferSizeFrames );+++/**+ * Flags+ */++/**+ * The following flags alter the behaviour of PA on the mac platform.+ * they can be ORed together. These should work both for opening and+ * checking a device.+ */++/** Allows PortAudio to change things like the device's frame size,+ * which allows for much lower latency, but might disrupt the device+ * if other programs are using it, even when you are just Querying+ * the device. */+#define paMacCoreChangeDeviceParameters (0x01)++/** In combination with the above flag,+ * causes the stream opening to fail, unless the exact sample rates+ * are supported by the device. */+#define paMacCoreFailIfConversionRequired (0x02)++/** These flags set the SR conversion quality, if required. The wierd ordering+ * allows Maximum Quality to be the default.*/+#define paMacCoreConversionQualityMin    (0x0100)+#define paMacCoreConversionQualityMedium (0x0200)+#define paMacCoreConversionQualityLow    (0x0300)+#define paMacCoreConversionQualityHigh   (0x0400)+#define paMacCoreConversionQualityMax    (0x0000)++/**+ * Here are some "preset" combinations of flags (above) to get to some+ * common configurations. THIS IS OVERKILL, but if more flags are added+ * it won't be.+ */++/**This is the default setting: do as much sample rate conversion as possible+ * and as little mucking with the device as possible. */+#define paMacCorePlayNice                    (0x00)+/**This setting is tuned for pro audio apps. It allows SR conversion on input+  and output, but it tries to set the appropriate SR on the device.*/+#define paMacCorePro                         (0x01)+/**This is a setting to minimize CPU usage and still play nice.*/+#define paMacCoreMinimizeCPUButPlayNice      (0x0100)+/**This is a setting to minimize CPU usage, even if that means interrupting the device. */+#define paMacCoreMinimizeCPU                 (0x0101)+++#ifdef __cplusplus+}+#endif /** __cplusplus */++#endif /** PA_MAC_CORE_H */
+ portaudio/include/pa_win_ds.h view
@@ -0,0 +1,95 @@+#ifndef PA_WIN_DS_H
+#define PA_WIN_DS_H
+/*
+ * $Id:  $
+ * PortAudio Portable Real-Time Audio Library
+ * DirectSound specific extensions
+ *
+ * Copyright (c) 1999-2007 Ross Bencina and Phil Burk
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * The text above constitutes the entire PortAudio license; however, 
+ * the PortAudio community also makes the following non-binding requests:
+ *
+ * Any person wishing to distribute modifications to the Software is
+ * requested to send the modifications to the original developer so that
+ * they can be incorporated into the canonical version. It is also 
+ * requested that these non-binding requests be included along with the 
+ * license above.
+ */
+
+/** @file
+ @ingroup public_header
+ @brief DirectSound-specific PortAudio API extension header file.
+*/
+
+#include "portaudio.h"
+#include "pa_win_waveformat.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+
+#define paWinDirectSoundUseLowLevelLatencyParameters            (0x01)
+#define paWinDirectSoundUseChannelMask                          (0x04)
+
+
+typedef struct PaWinDirectSoundStreamInfo{
+    unsigned long size;             /**< sizeof(PaWinDirectSoundStreamInfo) */
+    PaHostApiTypeId hostApiType;    /**< paDirectSound */
+    unsigned long version;          /**< 2 */
+
+    unsigned long flags;            /**< enable other features of this struct */
+
+    /** 
+       low-level latency setting support
+       Sets the size of the DirectSound host buffer.
+       When flags contains the paWinDirectSoundUseLowLevelLatencyParameters
+       this size will be used instead of interpreting the generic latency 
+       parameters to Pa_OpenStream(). If the flag is not set this value is ignored.
+
+       If the stream is a full duplex stream the implementation requires that
+       the values of framesPerBuffer for input and output match (if both are specified).
+    */
+    unsigned long framesPerBuffer;
+
+    /**
+        support for WAVEFORMATEXTENSIBLE channel masks. If flags contains
+        paWinDirectSoundUseChannelMask this allows you to specify which speakers 
+        to address in a multichannel stream. Constants for channelMask
+        are specified in pa_win_waveformat.h
+
+    */
+    PaWinWaveFormatChannelMask channelMask;
+
+}PaWinDirectSoundStreamInfo;
+
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* PA_WIN_DS_H */                                  
+ portaudio/include/pa_win_wasapi.h view
@@ -0,0 +1,391 @@+#ifndef PA_WIN_WASAPI_H
+#define PA_WIN_WASAPI_H
+/*
+ * $Id:  $
+ * PortAudio Portable Real-Time Audio Library
+ * DirectSound specific extensions
+ *
+ * Copyright (c) 1999-2007 Ross Bencina and Phil Burk
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * The text above constitutes the entire PortAudio license; however, 
+ * the PortAudio community also makes the following non-binding requests:
+ *
+ * Any person wishing to distribute modifications to the Software is
+ * requested to send the modifications to the original developer so that
+ * they can be incorporated into the canonical version. It is also 
+ * requested that these non-binding requests be included along with the 
+ * license above.
+ */
+
+/** @file
+ @ingroup public_header
+ @brief WASAPI-specific PortAudio API extension header file.
+*/
+
+#include "portaudio.h"
+#include "pa_win_waveformat.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+
+/* Setup flags */
+typedef enum PaWasapiFlags
+{
+    /* puts WASAPI into exclusive mode */
+    paWinWasapiExclusive                = (1 << 0),
+
+    /* allows to skip internal PA processing completely */
+    paWinWasapiRedirectHostProcessor    = (1 << 1),
+
+    /* assigns custom channel mask */
+    paWinWasapiUseChannelMask           = (1 << 2),
+
+    /* selects non-Event driven method of data read/write
+       Note: WASAPI Event driven core is capable of 2ms latency!!!, but Polling
+             method can only provide 15-20ms latency. */
+    paWinWasapiPolling                  = (1 << 3),
+
+    /* forces custom thread priority setting. must be used if PaWasapiStreamInfo::threadPriority 
+       is set to custom value. */
+    paWinWasapiThreadPriority           = (1 << 4)
+}
+PaWasapiFlags;
+#define paWinWasapiExclusive             (paWinWasapiExclusive)
+#define paWinWasapiRedirectHostProcessor (paWinWasapiRedirectHostProcessor)
+#define paWinWasapiUseChannelMask        (paWinWasapiUseChannelMask)
+#define paWinWasapiPolling               (paWinWasapiPolling)
+#define paWinWasapiThreadPriority        (paWinWasapiThreadPriority)
+
+
+/* Host processor. Allows to skip internal PA processing completely. 
+   You must set paWinWasapiRedirectHostProcessor flag to PaWasapiStreamInfo::flags member
+   in order to have host processor redirected to your callback.
+   Use with caution! inputFrames and outputFrames depend solely on final device setup.
+   To query maximal values of inputFrames/outputFrames use PaWasapi_GetFramesPerHostBuffer.
+*/
+typedef void (*PaWasapiHostProcessorCallback) (void *inputBuffer,  long inputFrames,
+                                               void *outputBuffer, long outputFrames,
+                                               void *userData);
+
+/* Device role */
+typedef enum PaWasapiDeviceRole
+{
+    eRoleRemoteNetworkDevice = 0,
+    eRoleSpeakers,
+    eRoleLineLevel,
+    eRoleHeadphones,
+    eRoleMicrophone,
+    eRoleHeadset,
+    eRoleHandset,
+    eRoleUnknownDigitalPassthrough,
+    eRoleSPDIF,
+    eRoleHDMI,
+    eRoleUnknownFormFactor
+}
+PaWasapiDeviceRole;
+
+
+/* Jack connection type */
+typedef enum PaWasapiJackConnectionType
+{
+    eJackConnTypeUnknown,
+    eJackConnType3Point5mm,
+    eJackConnTypeQuarter,
+    eJackConnTypeAtapiInternal,
+    eJackConnTypeRCA,
+    eJackConnTypeOptical,
+    eJackConnTypeOtherDigital,
+    eJackConnTypeOtherAnalog,
+    eJackConnTypeMultichannelAnalogDIN,
+    eJackConnTypeXlrProfessional,
+    eJackConnTypeRJ11Modem,
+    eJackConnTypeCombination
+} 
+PaWasapiJackConnectionType;
+
+
+/* Jack geometric location */
+typedef enum PaWasapiJackGeoLocation
+{
+	eJackGeoLocUnk = 0,
+    eJackGeoLocRear = 0x1, /* matches EPcxGeoLocation::eGeoLocRear */
+    eJackGeoLocFront,
+    eJackGeoLocLeft,
+    eJackGeoLocRight,
+    eJackGeoLocTop,
+    eJackGeoLocBottom,
+    eJackGeoLocRearPanel,
+    eJackGeoLocRiser,
+    eJackGeoLocInsideMobileLid,
+    eJackGeoLocDrivebay,
+    eJackGeoLocHDMI,
+    eJackGeoLocOutsideMobileLid,
+    eJackGeoLocATAPI,
+    eJackGeoLocReserved5,
+    eJackGeoLocReserved6,
+} 
+PaWasapiJackGeoLocation;
+
+
+/* Jack general location */
+typedef enum PaWasapiJackGenLocation
+{
+    eJackGenLocPrimaryBox = 0,
+    eJackGenLocInternal,
+    eJackGenLocSeparate,
+    eJackGenLocOther
+} 
+PaWasapiJackGenLocation;
+
+
+/* Jack's type of port */
+typedef enum PaWasapiJackPortConnection
+{
+    eJackPortConnJack = 0,
+    eJackPortConnIntegratedDevice,
+    eJackPortConnBothIntegratedAndJack,
+    eJackPortConnUnknown
+} 
+PaWasapiJackPortConnection;
+
+
+/* Thread priority */
+typedef enum PaWasapiThreadPriority
+{
+    eThreadPriorityNone = 0,
+    eThreadPriorityAudio,            //!< Default for Shared mode.
+    eThreadPriorityCapture,
+    eThreadPriorityDistribution,
+    eThreadPriorityGames,
+    eThreadPriorityPlayback,
+    eThreadPriorityProAudio,        //!< Default for Exclusive mode.
+    eThreadPriorityWindowManager
+}
+PaWasapiThreadPriority;
+
+
+/* Stream descriptor. */
+typedef struct PaWasapiJackDescription 
+{
+    unsigned long              channelMapping;
+    unsigned long              color; /* derived from macro: #define RGB(r,g,b) ((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16))) */
+    PaWasapiJackConnectionType connectionType;
+    PaWasapiJackGeoLocation    geoLocation;
+    PaWasapiJackGenLocation    genLocation;
+    PaWasapiJackPortConnection portConnection;
+    unsigned int               isConnected;
+}
+PaWasapiJackDescription;
+
+
+/* Stream descriptor. */
+typedef struct PaWasapiStreamInfo 
+{
+    unsigned long size;             /**< sizeof(PaWasapiStreamInfo) */
+    PaHostApiTypeId hostApiType;    /**< paWASAPI */
+    unsigned long version;          /**< 1 */
+
+    unsigned long flags;            /**< collection of PaWasapiFlags */
+
+    /* Support for WAVEFORMATEXTENSIBLE channel masks. If flags contains
+       paWinWasapiUseChannelMask this allows you to specify which speakers 
+       to address in a multichannel stream. Constants for channelMask
+       are specified in pa_win_waveformat.h. Will be used only if 
+       paWinWasapiUseChannelMask flag is specified.
+    */
+    PaWinWaveFormatChannelMask channelMask;
+
+    /* Delivers raw data to callback obtained from GetBuffer() methods skipping 
+       internal PortAudio processing inventory completely. userData parameter will 
+       be the same that was passed to Pa_OpenStream method. Will be used only if 
+       paWinWasapiRedirectHostProcessor flag is specified.
+    */
+    PaWasapiHostProcessorCallback hostProcessorOutput;
+    PaWasapiHostProcessorCallback hostProcessorInput;
+
+    /* Specifies thread priority explicitly. Will be used only if paWinWasapiThreadPriority flag
+       is specified.
+
+       Please note, if Input/Output streams are opened simultaniously (Full-Duplex mode)
+       you shall specify same value for threadPriority or othervise one of the values will be used
+       to setup thread priority.
+    */
+    PaWasapiThreadPriority threadPriority;
+} 
+PaWasapiStreamInfo;
+
+
+/** Returns default sound format for device. Format is represented by PaWinWaveFormat or 
+    WAVEFORMATEXTENSIBLE structure.
+
+ @param pFormat Pointer to PaWinWaveFormat or WAVEFORMATEXTENSIBLE structure.
+ @param nFormatSize Size of PaWinWaveFormat or WAVEFORMATEXTENSIBLE structure in bytes.
+ @param nDevice Device index.
+
+ @return Non-negative value indicating the number of bytes copied into format decriptor
+         or, a PaErrorCode (which are always negative) if PortAudio is not initialized
+         or an error is encountered.
+*/
+int PaWasapi_GetDeviceDefaultFormat( void *pFormat, unsigned int nFormatSize, PaDeviceIndex nDevice );
+
+
+/** Returns device role (PaWasapiDeviceRole enum).
+
+ @param nDevice device index.
+
+ @return Non-negative value indicating device role or, a PaErrorCode (which are always negative)
+         if PortAudio is not initialized or an error is encountered.
+*/
+int/*PaWasapiDeviceRole*/ PaWasapi_GetDeviceRole( PaDeviceIndex nDevice );
+
+
+/** Boost thread priority of calling thread (MMCSS). Use it for Blocking Interface only for thread
+    which makes calls to Pa_WriteStream/Pa_ReadStream.
+
+ @param hTask Handle to pointer to priority task. Must be used with PaWasapi_RevertThreadPriority
+              method to revert thread priority to initial state.
+
+ @param nPriorityClass Id of thread priority of PaWasapiThreadPriority type. Specifying 
+                       eThreadPriorityNone does nothing.
+
+ @return Error code indicating success or failure.
+ @see    PaWasapi_RevertThreadPriority
+*/
+PaError PaWasapi_ThreadPriorityBoost( void **hTask, PaWasapiThreadPriority nPriorityClass );
+
+
+/** Boost thread priority of calling thread (MMCSS). Use it for Blocking Interface only for thread
+    which makes calls to Pa_WriteStream/Pa_ReadStream.
+
+ @param  hTask Task handle obtained by PaWasapi_BoostThreadPriority method.
+ @return Error code indicating success or failure.
+ @see    PaWasapi_BoostThreadPriority
+*/
+PaError PaWasapi_ThreadPriorityRevert( void *hTask );
+
+
+/** Get number of frames per host buffer. This is maximal value of frames of WASAPI buffer which 
+    can be locked for operations. Use this method as helper to findout maximal values of 
+    inputFrames/outputFrames of PaWasapiHostProcessorCallback.
+
+ @param  pStream Pointer to PaStream to query.
+ @param  nInput  Pointer to variable to receive number of input frames. Can be NULL.
+ @param  nOutput Pointer to variable to receive number of output frames. Can be NULL.
+ @return Error code indicating success or failure.
+ @see    PaWasapiHostProcessorCallback
+*/
+PaError PaWasapi_GetFramesPerHostBuffer( PaStream *pStream, unsigned int *nInput, unsigned int *nOutput );
+
+
+/** Get number of jacks associated with a WASAPI device.  Use this method to determine if
+    there are any jacks associated with the provided WASAPI device.  Not all audio devices
+	will support this capability.  This is valid for both input and output devices.
+ @param  nDevice  device index.
+ @param  jcount   Number of jacks is returned in this variable
+ @return Error code indicating success or failure
+ @see PaWasapi_GetJackDescription
+ */
+PaError PaWasapi_GetJackCount(PaDeviceIndex nDevice, int *jcount);
+
+
+/** Get the jack description associated with a WASAPI device and jack number
+    Before this function is called, use PaWasapi_GetJackCount to determine the
+	number of jacks associated with device.  If jcount is greater than zero, then
+	each jack from 0 to jcount can be queried with this function to get the jack
+	description.
+ @param  nDevice  device index.
+ @param  jindex   Which jack to return information
+ @param  KSJACK_DESCRIPTION This structure filled in on success.
+ @return Error code indicating success or failure
+ @see PaWasapi_GetJackCount
+ */
+PaError PaWasapi_GetJackDescription(PaDeviceIndex nDevice, int jindex, PaWasapiJackDescription *pJackDescription);
+
+
+/*
+    IMPORTANT:
+
+    WASAPI is implemented for Callback and Blocking interfaces. It supports Shared and Exclusive
+    share modes. 
+    
+    Exclusive Mode:
+
+        Exclusive mode allows to deliver audio data directly to hardware bypassing
+        software mixing.
+        Exclusive mode is specified by 'paWinWasapiExclusive' flag.
+
+    Callback Interface:
+
+        Provides best audio quality with low latency. Callback interface is implemented in 
+        two versions:
+
+        1) Event-Driven:
+        This is the most powerful WASAPI implementation which provides glitch-free
+        audio at around 3ms latency in Exclusive mode. Lowest possible latency for this mode is 
+        3 ms for HD Audio class audio chips. For the Shared mode latency can not be 
+		lower than 20 ms.
+
+        2) Poll-Driven:
+        Polling is another 2-nd method to operate with WASAPI. It is less efficient than Event-Driven
+        and provides latency at around 10-13ms. Polling must be used to overcome a system bug
+        under Windows Vista x64 when application is WOW64(32-bit) and Event-Driven method simply 
+        times out (event handle is never signalled on buffer completion). Please note, such WOW64 bug 
+        does not exist in Vista x86 or Windows 7.
+        Polling can be setup by speciying 'paWinWasapiPolling' flag. Our WASAPI implementation detects
+        WOW64 bug and sets 'paWinWasapiPolling' automatically.
+
+    Thread priority:
+
+        Normally thread priority is set automatically and does not require modification. Although
+        if user wants some tweaking thread priority can be modified by setting 'paWinWasapiThreadPriority'
+        flag and specifying 'PaWasapiStreamInfo::threadPriority' with value from PaWasapiThreadPriority 
+        enum.
+
+    Blocking Interface:
+
+        Blocking interface is implemented but due to above described Poll-Driven method can not
+        deliver lowest possible latency. Specifying too low latency in Shared mode will result in 
+        distorted audio although Exclusive mode adds stability.
+
+    Pa_IsFormatSupported:
+
+        To check format with correct Share Mode (Exclusive/Shared) you must supply
+        PaWasapiStreamInfo with flags paWinWasapiExclusive set through member of 
+        PaStreamParameters::hostApiSpecificStreamInfo structure.
+
+    Pa_OpenStream:
+
+        To set desired Share Mode (Exclusive/Shared) you must supply
+        PaWasapiStreamInfo with flags paWinWasapiExclusive set through member of 
+        PaStreamParameters::hostApiSpecificStreamInfo structure.
+*/
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* PA_WIN_WASAPI_H */                                  
+ portaudio/include/pa_win_waveformat.h view
@@ -0,0 +1,199 @@+#ifndef PA_WIN_WAVEFORMAT_H
+#define PA_WIN_WAVEFORMAT_H
+
+/*
+ * PortAudio Portable Real-Time Audio Library
+ * Windows WAVEFORMAT* data structure utilities
+ * portaudio.h should be included before this file.
+ *
+ * Copyright (c) 2007 Ross Bencina
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * The text above constitutes the entire PortAudio license; however, 
+ * the PortAudio community also makes the following non-binding requests:
+ *
+ * Any person wishing to distribute modifications to the Software is
+ * requested to send the modifications to the original developer so that
+ * they can be incorporated into the canonical version. It is also 
+ * requested that these non-binding requests be included along with the 
+ * license above.
+ */
+
+/** @file
+ @ingroup public_header
+ @brief Windows specific PortAudio API extension and utilities header file.
+*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+	The following #defines for speaker channel masks are the same
+	as those in ksmedia.h, except with PAWIN_ prepended, KSAUDIO_ removed
+	in some cases, and casts to PaWinWaveFormatChannelMask added.
+*/
+
+typedef unsigned long PaWinWaveFormatChannelMask;
+
+/* Speaker Positions: */
+#define PAWIN_SPEAKER_FRONT_LEFT				((PaWinWaveFormatChannelMask)0x1)
+#define PAWIN_SPEAKER_FRONT_RIGHT				((PaWinWaveFormatChannelMask)0x2)
+#define PAWIN_SPEAKER_FRONT_CENTER				((PaWinWaveFormatChannelMask)0x4)
+#define PAWIN_SPEAKER_LOW_FREQUENCY				((PaWinWaveFormatChannelMask)0x8)
+#define PAWIN_SPEAKER_BACK_LEFT					((PaWinWaveFormatChannelMask)0x10)
+#define PAWIN_SPEAKER_BACK_RIGHT				((PaWinWaveFormatChannelMask)0x20)
+#define PAWIN_SPEAKER_FRONT_LEFT_OF_CENTER		((PaWinWaveFormatChannelMask)0x40)
+#define PAWIN_SPEAKER_FRONT_RIGHT_OF_CENTER		((PaWinWaveFormatChannelMask)0x80)
+#define PAWIN_SPEAKER_BACK_CENTER				((PaWinWaveFormatChannelMask)0x100)
+#define PAWIN_SPEAKER_SIDE_LEFT					((PaWinWaveFormatChannelMask)0x200)
+#define PAWIN_SPEAKER_SIDE_RIGHT				((PaWinWaveFormatChannelMask)0x400)
+#define PAWIN_SPEAKER_TOP_CENTER				((PaWinWaveFormatChannelMask)0x800)
+#define PAWIN_SPEAKER_TOP_FRONT_LEFT			((PaWinWaveFormatChannelMask)0x1000)
+#define PAWIN_SPEAKER_TOP_FRONT_CENTER			((PaWinWaveFormatChannelMask)0x2000)
+#define PAWIN_SPEAKER_TOP_FRONT_RIGHT			((PaWinWaveFormatChannelMask)0x4000)
+#define PAWIN_SPEAKER_TOP_BACK_LEFT				((PaWinWaveFormatChannelMask)0x8000)
+#define PAWIN_SPEAKER_TOP_BACK_CENTER			((PaWinWaveFormatChannelMask)0x10000)
+#define PAWIN_SPEAKER_TOP_BACK_RIGHT			((PaWinWaveFormatChannelMask)0x20000)
+
+/* Bit mask locations reserved for future use */
+#define PAWIN_SPEAKER_RESERVED					((PaWinWaveFormatChannelMask)0x7FFC0000)
+
+/* Used to specify that any possible permutation of speaker configurations */
+#define PAWIN_SPEAKER_ALL						((PaWinWaveFormatChannelMask)0x80000000)
+
+/* DirectSound Speaker Config */
+#define PAWIN_SPEAKER_DIRECTOUT					0
+#define PAWIN_SPEAKER_MONO						(PAWIN_SPEAKER_FRONT_CENTER)
+#define PAWIN_SPEAKER_STEREO					(PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT)
+#define PAWIN_SPEAKER_QUAD						(PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT | \
+												PAWIN_SPEAKER_BACK_LEFT  | PAWIN_SPEAKER_BACK_RIGHT)
+#define PAWIN_SPEAKER_SURROUND					(PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT | \
+												PAWIN_SPEAKER_FRONT_CENTER | PAWIN_SPEAKER_BACK_CENTER)
+#define PAWIN_SPEAKER_5POINT1					(PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT | \
+												PAWIN_SPEAKER_FRONT_CENTER | PAWIN_SPEAKER_LOW_FREQUENCY | \
+												PAWIN_SPEAKER_BACK_LEFT  | PAWIN_SPEAKER_BACK_RIGHT)
+#define PAWIN_SPEAKER_7POINT1					(PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT | \
+												PAWIN_SPEAKER_FRONT_CENTER | PAWIN_SPEAKER_LOW_FREQUENCY | \
+												PAWIN_SPEAKER_BACK_LEFT | PAWIN_SPEAKER_BACK_RIGHT | \
+												PAWIN_SPEAKER_FRONT_LEFT_OF_CENTER | PAWIN_SPEAKER_FRONT_RIGHT_OF_CENTER)
+#define PAWIN_SPEAKER_5POINT1_SURROUND			(PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT | \
+												PAWIN_SPEAKER_FRONT_CENTER | PAWIN_SPEAKER_LOW_FREQUENCY | \
+												PAWIN_SPEAKER_SIDE_LEFT  | PAWIN_SPEAKER_SIDE_RIGHT)
+#define PAWIN_SPEAKER_7POINT1_SURROUND			(PAWIN_SPEAKER_FRONT_LEFT | PAWIN_SPEAKER_FRONT_RIGHT | \
+												PAWIN_SPEAKER_FRONT_CENTER | PAWIN_SPEAKER_LOW_FREQUENCY | \
+												PAWIN_SPEAKER_BACK_LEFT | PAWIN_SPEAKER_BACK_RIGHT | \
+												PAWIN_SPEAKER_SIDE_LEFT | PAWIN_SPEAKER_SIDE_RIGHT)
+/*
+ According to the Microsoft documentation:
+ The following are obsolete 5.1 and 7.1 settings (they lack side speakers).  Note this means
+ that the default 5.1 and 7.1 settings (KSAUDIO_SPEAKER_5POINT1 and KSAUDIO_SPEAKER_7POINT1 are
+ similarly obsolete but are unchanged for compatibility reasons).
+*/
+#define PAWIN_SPEAKER_5POINT1_BACK				PAWIN_SPEAKER_5POINT1
+#define PAWIN_SPEAKER_7POINT1_WIDE				PAWIN_SPEAKER_7POINT1
+
+/* DVD Speaker Positions */
+#define PAWIN_SPEAKER_GROUND_FRONT_LEFT			PAWIN_SPEAKER_FRONT_LEFT
+#define PAWIN_SPEAKER_GROUND_FRONT_CENTER		PAWIN_SPEAKER_FRONT_CENTER
+#define PAWIN_SPEAKER_GROUND_FRONT_RIGHT		PAWIN_SPEAKER_FRONT_RIGHT
+#define PAWIN_SPEAKER_GROUND_REAR_LEFT			PAWIN_SPEAKER_BACK_LEFT
+#define PAWIN_SPEAKER_GROUND_REAR_RIGHT			PAWIN_SPEAKER_BACK_RIGHT
+#define PAWIN_SPEAKER_TOP_MIDDLE				PAWIN_SPEAKER_TOP_CENTER
+#define PAWIN_SPEAKER_SUPER_WOOFER				PAWIN_SPEAKER_LOW_FREQUENCY
+
+
+/*
+	PaWinWaveFormat is defined here to provide compatibility with
+	compilation environments which don't have headers defining 
+	WAVEFORMATEXTENSIBLE (e.g. older versions of MSVC, Borland C++ etc.
+
+	The fields for WAVEFORMATEX and WAVEFORMATEXTENSIBLE are declared as an
+    unsigned char array here to avoid clients who include this file having 
+    a dependency on windows.h and mmsystem.h, and also to to avoid having
+    to write separate packing pragmas for each compiler.
+*/
+#define PAWIN_SIZEOF_WAVEFORMATEX   18
+#define PAWIN_SIZEOF_WAVEFORMATEXTENSIBLE (PAWIN_SIZEOF_WAVEFORMATEX + 22)
+
+typedef struct{
+    unsigned char fields[ PAWIN_SIZEOF_WAVEFORMATEXTENSIBLE ];
+    unsigned long extraLongForAlignment; /* ensure that compiler aligns struct to DWORD */ 
+} PaWinWaveFormat;
+
+/*
+    WAVEFORMATEXTENSIBLE fields:
+    
+    union  {
+	    WORD  wValidBitsPerSample;    
+	    WORD  wSamplesPerBlock;    
+	    WORD  wReserved;  
+    } Samples;
+    DWORD  dwChannelMask;  
+    GUID  SubFormat;
+*/
+
+#define PAWIN_INDEXOF_WVALIDBITSPERSAMPLE	(PAWIN_SIZEOF_WAVEFORMATEX+0)
+#define PAWIN_INDEXOF_DWCHANNELMASK			(PAWIN_SIZEOF_WAVEFORMATEX+2)
+#define PAWIN_INDEXOF_SUBFORMAT				(PAWIN_SIZEOF_WAVEFORMATEX+6)
+
+
+/*
+    Valid values to pass for the waveFormatTag PaWin_InitializeWaveFormatEx and
+    PaWin_InitializeWaveFormatExtensible functions below. These must match
+    the standard Windows WAVE_FORMAT_* values.
+*/
+#define PAWIN_WAVE_FORMAT_PCM               (1)
+#define PAWIN_WAVE_FORMAT_IEEE_FLOAT        (3)
+#define PAWIN_WAVE_FORMAT_DOLBY_AC3_SPDIF   (0x0092)
+#define PAWIN_WAVE_FORMAT_WMA_SPDIF         (0x0164)
+
+
+/*
+    returns PAWIN_WAVE_FORMAT_PCM or PAWIN_WAVE_FORMAT_IEEE_FLOAT
+    depending on the sampleFormat parameter.
+*/
+int PaWin_SampleFormatToLinearWaveFormatTag( PaSampleFormat sampleFormat );
+
+/*
+	Use the following two functions to initialize the waveformat structure.
+*/
+
+void PaWin_InitializeWaveFormatEx( PaWinWaveFormat *waveFormat, 
+		int numChannels, PaSampleFormat sampleFormat, int waveFormatTag, double sampleRate );
+
+
+void PaWin_InitializeWaveFormatExtensible( PaWinWaveFormat *waveFormat, 
+		int numChannels, PaSampleFormat sampleFormat, int waveFormatTag, double sampleRate,
+	    PaWinWaveFormatChannelMask channelMask );
+
+
+/* Map a channel count to a speaker channel mask */
+PaWinWaveFormatChannelMask PaWin_DefaultChannelMask( int numChannels );
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* PA_WIN_WAVEFORMAT_H */
+ portaudio/include/pa_win_wdmks.h view
@@ -0,0 +1,106 @@+#ifndef PA_WIN_WDMKS_H+#define PA_WIN_WDMKS_H+/*+ * $Id: pa_win_wdmks.h 1812 2012-02-14 09:32:57Z robiwan $+ * PortAudio Portable Real-Time Audio Library+ * WDM/KS specific extensions+ *+ * Copyright (c) 1999-2007 Ross Bencina and Phil Burk+ *+ * Permission is hereby granted, free of charge, to any person obtaining+ * a copy of this software and associated documentation files+ * (the "Software"), to deal in the Software without restriction,+ * including without limitation the rights to use, copy, modify, merge,+ * publish, distribute, sublicense, and/or sell copies of the Software,+ * and to permit persons to whom the Software is furnished to do so,+ * subject to the following conditions:+ *+ * The above copyright notice and this permission notice shall be+ * included in all copies or substantial portions of the Software.+ *+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.+ */++/*+ * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests:+ *+ * Any person wishing to distribute modifications to the Software is+ * requested to send the modifications to the original developer so that+ * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above.+ */++/** @file+ @ingroup public_header+ @brief WDM Kernel Streaming-specific PortAudio API extension header file.+*/+++#include "portaudio.h"++#include <windows.h>++#ifdef __cplusplus+extern "C"+{+#endif /* __cplusplus */+    typedef struct PaWinWDMKSInfo{+        unsigned long size;             /**< sizeof(PaWinWDMKSInfo) */+        PaHostApiTypeId hostApiType;    /**< paWDMKS */+        unsigned long version;          /**< 1 */++        /* The number of packets to use for WaveCyclic devices, range is [2, 8]. Set to zero for default value of 2. */+        unsigned noOfPackets;+    } PaWinWDMKSInfo;++    typedef enum PaWDMKSType+    {+        Type_kNotUsed,+        Type_kWaveCyclic,+        Type_kWaveRT,+        Type_kCnt,+    } PaWDMKSType;++    typedef enum PaWDMKSSubType+    {+        SubType_kUnknown,+        SubType_kNotification,+        SubType_kPolled,+        SubType_kCnt,+    } PaWDMKSSubType;++    typedef struct PaWinWDMKSDeviceInfo {+        wchar_t filterPath[MAX_PATH];     /**< KS filter path in Unicode! */+        wchar_t topologyPath[MAX_PATH];   /**< Topology filter path in Unicode! */+        PaWDMKSType streamingType;+        GUID deviceProductGuid;           /**< The product GUID of the device (if supported) */+    } PaWinWDMKSDeviceInfo;++    typedef struct PaWDMKSDirectionSpecificStreamInfo+    {+        PaDeviceIndex device;+        unsigned channels;                  /**< No of channels the device is opened with */+        unsigned framesPerHostBuffer;       /**< No of frames of the device buffer */+        int endpointPinId;                  /**< Endpoint pin ID (on topology filter if topologyName is not empty) */+        int muxNodeId;                      /**< Only valid for input */+        PaWDMKSSubType streamingSubType;       /**< Not known until device is opened for streaming */+    } PaWDMKSDirectionSpecificStreamInfo;++    typedef struct PaWDMKSSpecificStreamInfo {+        PaWDMKSDirectionSpecificStreamInfo input;+        PaWDMKSDirectionSpecificStreamInfo output;+    } PaWDMKSSpecificStreamInfo;++#ifdef __cplusplus+}+#endif /* __cplusplus */++#endif /* PA_WIN_DS_H */                                  
+ portaudio/include/pa_win_wmme.h view
@@ -0,0 +1,185 @@+#ifndef PA_WIN_WMME_H+#define PA_WIN_WMME_H+/*+ * $Id: pa_win_wmme.h 1592 2011-02-04 10:41:58Z rossb $+ * PortAudio Portable Real-Time Audio Library+ * MME specific extensions+ *+ * Copyright (c) 1999-2000 Ross Bencina and Phil Burk+ *+ * Permission is hereby granted, free of charge, to any person obtaining+ * a copy of this software and associated documentation files+ * (the "Software"), to deal in the Software without restriction,+ * including without limitation the rights to use, copy, modify, merge,+ * publish, distribute, sublicense, and/or sell copies of the Software,+ * and to permit persons to whom the Software is furnished to do so,+ * subject to the following conditions:+ *+ * The above copyright notice and this permission notice shall be+ * included in all copies or substantial portions of the Software.+ *+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.+ */++/*+ * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests:+ *+ * Any person wishing to distribute modifications to the Software is+ * requested to send the modifications to the original developer so that+ * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above.+ */++/** @file+ @ingroup public_header+ @brief WMME-specific PortAudio API extension header file.+*/++#include "portaudio.h"+#include "pa_win_waveformat.h"++#ifdef __cplusplus+extern "C"+{+#endif /* __cplusplus */+++/* The following are flags which can be set in +  PaWinMmeStreamInfo's flags field.+*/++#define paWinMmeUseLowLevelLatencyParameters            (0x01)+#define paWinMmeUseMultipleDevices                      (0x02)  /* use mme specific multiple device feature */+#define paWinMmeUseChannelMask                          (0x04)++/* By default, the mme implementation drops the processing thread's priority+    to THREAD_PRIORITY_NORMAL and sleeps the thread if the CPU load exceeds 100%+    This flag disables any priority throttling. The processing thread will always+    run at THREAD_PRIORITY_TIME_CRITICAL.+*/+#define paWinMmeDontThrottleOverloadedProcessingThread  (0x08)++/*  Flags for non-PCM spdif passthrough.+*/+#define paWinMmeWaveFormatDolbyAc3Spdif                 (0x10)+#define paWinMmeWaveFormatWmaSpdif                      (0x20)+++typedef struct PaWinMmeDeviceAndChannelCount{+    PaDeviceIndex device;+    int channelCount;+}PaWinMmeDeviceAndChannelCount;+++typedef struct PaWinMmeStreamInfo{+    unsigned long size;             /**< sizeof(PaWinMmeStreamInfo) */+    PaHostApiTypeId hostApiType;    /**< paMME */+    unsigned long version;          /**< 1 */++    unsigned long flags;++    /* low-level latency setting support+        These settings control the number and size of host buffers in order+        to set latency. They will be used instead of the generic parameters+        to Pa_OpenStream() if flags contains the PaWinMmeUseLowLevelLatencyParameters+        flag.++        If PaWinMmeStreamInfo structures with PaWinMmeUseLowLevelLatencyParameters+        are supplied for both input and output in a full duplex stream, then the+        input and output framesPerBuffer must be the same, or the larger of the+        two must be a multiple of the smaller, otherwise a+        paIncompatibleHostApiSpecificStreamInfo error will be returned from+        Pa_OpenStream().+    */+    unsigned long framesPerBuffer;+    unsigned long bufferCount;  /* formerly numBuffers */ ++    /* multiple devices per direction support+        If flags contains the PaWinMmeUseMultipleDevices flag,+        this functionality will be used, otherwise the device parameter to+        Pa_OpenStream() will be used instead.+        If devices are specified here, the corresponding device parameter+        to Pa_OpenStream() should be set to paUseHostApiSpecificDeviceSpecification,+        otherwise an paInvalidDevice error will result.+        The total number of channels accross all specified devices+        must agree with the corresponding channelCount parameter to+        Pa_OpenStream() otherwise a paInvalidChannelCount error will result.+    */+    PaWinMmeDeviceAndChannelCount *devices;+    unsigned long deviceCount;++    /*+        support for WAVEFORMATEXTENSIBLE channel masks. If flags contains+        paWinMmeUseChannelMask this allows you to specify which speakers +        to address in a multichannel stream. Constants for channelMask+        are specified in pa_win_waveformat.h++    */+    PaWinWaveFormatChannelMask channelMask;++}PaWinMmeStreamInfo;+++/** Retrieve the number of wave in handles used by a PortAudio WinMME stream.+ Returns zero if the stream is output only.++ @return A non-negative value indicating the number of wave in handles+ or, a PaErrorCode (which are always negative) if PortAudio is not initialized+ or an error is encountered.++ @see PaWinMME_GetStreamInputHandle+*/+int PaWinMME_GetStreamInputHandleCount( PaStream* stream );+++/** Retrieve a wave in handle used by a PortAudio WinMME stream.++ @param stream The stream to query.+ @param handleIndex The zero based index of the wave in handle to retrieve. This+    should be in the range [0, PaWinMME_GetStreamInputHandleCount(stream)-1].++ @return A valid wave in handle, or NULL if an error occurred.++ @see PaWinMME_GetStreamInputHandle+*/+HWAVEIN PaWinMME_GetStreamInputHandle( PaStream* stream, int handleIndex );+++/** Retrieve the number of wave out handles used by a PortAudio WinMME stream.+ Returns zero if the stream is input only.+ + @return A non-negative value indicating the number of wave out handles+ or, a PaErrorCode (which are always negative) if PortAudio is not initialized+ or an error is encountered.++ @see PaWinMME_GetStreamOutputHandle+*/+int PaWinMME_GetStreamOutputHandleCount( PaStream* stream );+++/** Retrieve a wave out handle used by a PortAudio WinMME stream.++ @param stream The stream to query.+ @param handleIndex The zero based index of the wave out handle to retrieve.+    This should be in the range [0, PaWinMME_GetStreamOutputHandleCount(stream)-1].++ @return A valid wave out handle, or NULL if an error occurred.++ @see PaWinMME_GetStreamOutputHandleCount+*/+HWAVEOUT PaWinMME_GetStreamOutputHandle( PaStream* stream, int handleIndex );+++#ifdef __cplusplus+}+#endif /* __cplusplus */++#endif /* PA_WIN_WMME_H */                                  
+ portaudio/include/portaudio.h view
@@ -0,0 +1,1174 @@+#ifndef PORTAUDIO_H+#define PORTAUDIO_H+/*+ * $Id: portaudio.h 1859 2012-09-01 00:10:13Z philburk $+ * PortAudio Portable Real-Time Audio Library+ * PortAudio API Header File+ * Latest version available at: http://www.portaudio.com/+ *+ * Copyright (c) 1999-2002 Ross Bencina and Phil Burk+ *+ * Permission is hereby granted, free of charge, to any person obtaining+ * a copy of this software and associated documentation files+ * (the "Software"), to deal in the Software without restriction,+ * including without limitation the rights to use, copy, modify, merge,+ * publish, distribute, sublicense, and/or sell copies of the Software,+ * and to permit persons to whom the Software is furnished to do so,+ * subject to the following conditions:+ *+ * The above copyright notice and this permission notice shall be+ * included in all copies or substantial portions of the Software.+ *+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.+ */++/*+ * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests:+ *+ * Any person wishing to distribute modifications to the Software is+ * requested to send the modifications to the original developer so that+ * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above.+ */++/** @file+ @ingroup public_header+ @brief The portable PortAudio API.+*/+++#ifdef __cplusplus+extern "C"+{+#endif /* __cplusplus */++ +/** Retrieve the release number of the currently running PortAudio build,+ eg 1900.+*/+int Pa_GetVersion( void );+++/** Retrieve a textual description of the current PortAudio build,+ eg "PortAudio V19-devel 13 October 2002".+*/+const char* Pa_GetVersionText( void );+++/** Error codes returned by PortAudio functions.+ Note that with the exception of paNoError, all PaErrorCodes are negative.+*/++typedef int PaError;+typedef enum PaErrorCode+{+    paNoError = 0,++    paNotInitialized = -10000,+    paUnanticipatedHostError,+    paInvalidChannelCount,+    paInvalidSampleRate,+    paInvalidDevice,+    paInvalidFlag,+    paSampleFormatNotSupported,+    paBadIODeviceCombination,+    paInsufficientMemory,+    paBufferTooBig,+    paBufferTooSmall,+    paNullCallback,+    paBadStreamPtr,+    paTimedOut,+    paInternalError,+    paDeviceUnavailable,+    paIncompatibleHostApiSpecificStreamInfo,+    paStreamIsStopped,+    paStreamIsNotStopped,+    paInputOverflowed,+    paOutputUnderflowed,+    paHostApiNotFound,+    paInvalidHostApi,+    paCanNotReadFromACallbackStream,+    paCanNotWriteToACallbackStream,+    paCanNotReadFromAnOutputOnlyStream,+    paCanNotWriteToAnInputOnlyStream,+    paIncompatibleStreamHostApi,+    paBadBufferPtr+} PaErrorCode;+++/** Translate the supplied PortAudio error code into a human readable+ message.+*/+const char *Pa_GetErrorText( PaError errorCode );+++/** Library initialization function - call this before using PortAudio.+ This function initializes internal data structures and prepares underlying+ host APIs for use.  With the exception of Pa_GetVersion(), Pa_GetVersionText(),+ and Pa_GetErrorText(), this function MUST be called before using any other+ PortAudio API functions.++ If Pa_Initialize() is called multiple times, each successful + call must be matched with a corresponding call to Pa_Terminate(). + Pairs of calls to Pa_Initialize()/Pa_Terminate() may overlap, and are not + required to be fully nested.++ Note that if Pa_Initialize() returns an error code, Pa_Terminate() should+ NOT be called.++ @return paNoError if successful, otherwise an error code indicating the cause+ of failure.++ @see Pa_Terminate+*/+PaError Pa_Initialize( void );+++/** Library termination function - call this when finished using PortAudio.+ This function deallocates all resources allocated by PortAudio since it was+ initialized by a call to Pa_Initialize(). In cases where Pa_Initialise() has+ been called multiple times, each call must be matched with a corresponding call+ to Pa_Terminate(). The final matching call to Pa_Terminate() will automatically+ close any PortAudio streams that are still open.++ Pa_Terminate() MUST be called before exiting a program which uses PortAudio.+ Failure to do so may result in serious resource leaks, such as audio devices+ not being available until the next reboot.++ @return paNoError if successful, otherwise an error code indicating the cause+ of failure.+ + @see Pa_Initialize+*/+PaError Pa_Terminate( void );++++/** The type used to refer to audio devices. Values of this type usually+ range from 0 to (Pa_GetDeviceCount()-1), and may also take on the PaNoDevice+ and paUseHostApiSpecificDeviceSpecification values.++ @see Pa_GetDeviceCount, paNoDevice, paUseHostApiSpecificDeviceSpecification+*/+typedef int PaDeviceIndex;+++/** A special PaDeviceIndex value indicating that no device is available,+ or should be used.++ @see PaDeviceIndex+*/+#define paNoDevice ((PaDeviceIndex)-1)+++/** A special PaDeviceIndex value indicating that the device(s) to be used+ are specified in the host api specific stream info structure.++ @see PaDeviceIndex+*/+#define paUseHostApiSpecificDeviceSpecification ((PaDeviceIndex)-2)+++/* Host API enumeration mechanism */++/** The type used to enumerate to host APIs at runtime. Values of this type+ range from 0 to (Pa_GetHostApiCount()-1).++ @see Pa_GetHostApiCount+*/+typedef int PaHostApiIndex;+++/** Retrieve the number of available host APIs. Even if a host API is+ available it may have no devices available.++ @return A non-negative value indicating the number of available host APIs+ or, a PaErrorCode (which are always negative) if PortAudio is not initialized+ or an error is encountered.++ @see PaHostApiIndex+*/+PaHostApiIndex Pa_GetHostApiCount( void );+++/** Retrieve the index of the default host API. The default host API will be+ the lowest common denominator host API on the current platform and is+ unlikely to provide the best performance.++ @return A non-negative value ranging from 0 to (Pa_GetHostApiCount()-1)+ indicating the default host API index or, a PaErrorCode (which are always+ negative) if PortAudio is not initialized or an error is encountered.+*/+PaHostApiIndex Pa_GetDefaultHostApi( void );+++/** Unchanging unique identifiers for each supported host API. This type+ is used in the PaHostApiInfo structure. The values are guaranteed to be+ unique and to never change, thus allowing code to be written that+ conditionally uses host API specific extensions.++ New type ids will be allocated when support for a host API reaches+ "public alpha" status, prior to that developers should use the+ paInDevelopment type id.++ @see PaHostApiInfo+*/+typedef enum PaHostApiTypeId+{+    paInDevelopment=0, /* use while developing support for a new host API */+    paDirectSound=1,+    paMME=2,+    paASIO=3,+    paSoundManager=4,+    paCoreAudio=5,+    paOSS=7,+    paALSA=8,+    paAL=9,+    paBeOS=10,+    paWDMKS=11,+    paJACK=12,+    paWASAPI=13,+    paAudioScienceHPI=14+} PaHostApiTypeId;+++/** A structure containing information about a particular host API. */++typedef struct PaHostApiInfo+{+    /** this is struct version 1 */+    int structVersion;+    /** The well known unique identifier of this host API @see PaHostApiTypeId */+    PaHostApiTypeId type;+    /** A textual description of the host API for display on user interfaces. */+    const char *name;++    /**  The number of devices belonging to this host API. This field may be+     used in conjunction with Pa_HostApiDeviceIndexToDeviceIndex() to enumerate+     all devices for this host API.+     @see Pa_HostApiDeviceIndexToDeviceIndex+    */+    int deviceCount;++    /** The default input device for this host API. The value will be a+     device index ranging from 0 to (Pa_GetDeviceCount()-1), or paNoDevice+     if no default input device is available.+    */+    PaDeviceIndex defaultInputDevice;++    /** The default output device for this host API. The value will be a+     device index ranging from 0 to (Pa_GetDeviceCount()-1), or paNoDevice+     if no default output device is available.+    */+    PaDeviceIndex defaultOutputDevice;+    +} PaHostApiInfo;+++/** Retrieve a pointer to a structure containing information about a specific+ host Api.++ @param hostApi A valid host API index ranging from 0 to (Pa_GetHostApiCount()-1)++ @return A pointer to an immutable PaHostApiInfo structure describing+ a specific host API. If the hostApi parameter is out of range or an error+ is encountered, the function returns NULL.++ The returned structure is owned by the PortAudio implementation and must not+ be manipulated or freed. The pointer is only guaranteed to be valid between+ calls to Pa_Initialize() and Pa_Terminate().+*/+const PaHostApiInfo * Pa_GetHostApiInfo( PaHostApiIndex hostApi );+++/** Convert a static host API unique identifier, into a runtime+ host API index.++ @param type A unique host API identifier belonging to the PaHostApiTypeId+ enumeration.++ @return A valid PaHostApiIndex ranging from 0 to (Pa_GetHostApiCount()-1) or,+ a PaErrorCode (which are always negative) if PortAudio is not initialized+ or an error is encountered.+ + The paHostApiNotFound error code indicates that the host API specified by the+ type parameter is not available.++ @see PaHostApiTypeId+*/+PaHostApiIndex Pa_HostApiTypeIdToHostApiIndex( PaHostApiTypeId type );+++/** Convert a host-API-specific device index to standard PortAudio device index.+ This function may be used in conjunction with the deviceCount field of+ PaHostApiInfo to enumerate all devices for the specified host API.++ @param hostApi A valid host API index ranging from 0 to (Pa_GetHostApiCount()-1)++ @param hostApiDeviceIndex A valid per-host device index in the range+ 0 to (Pa_GetHostApiInfo(hostApi)->deviceCount-1)++ @return A non-negative PaDeviceIndex ranging from 0 to (Pa_GetDeviceCount()-1)+ or, a PaErrorCode (which are always negative) if PortAudio is not initialized+ or an error is encountered.++ A paInvalidHostApi error code indicates that the host API index specified by+ the hostApi parameter is out of range.++ A paInvalidDevice error code indicates that the hostApiDeviceIndex parameter+ is out of range.+ + @see PaHostApiInfo+*/+PaDeviceIndex Pa_HostApiDeviceIndexToDeviceIndex( PaHostApiIndex hostApi,+        int hostApiDeviceIndex );++++/** Structure used to return information about a host error condition.+*/+typedef struct PaHostErrorInfo{+    PaHostApiTypeId hostApiType;    /**< the host API which returned the error code */+    long errorCode;                 /**< the error code returned */+    const char *errorText;          /**< a textual description of the error if available, otherwise a zero-length string */+}PaHostErrorInfo;+++/** Return information about the last host error encountered. The error+ information returned by Pa_GetLastHostErrorInfo() will never be modified+ asynchronously by errors occurring in other PortAudio owned threads+ (such as the thread that manages the stream callback.)++ This function is provided as a last resort, primarily to enhance debugging+ by providing clients with access to all available error information.++ @return A pointer to an immutable structure constraining information about+ the host error. The values in this structure will only be valid if a+ PortAudio function has previously returned the paUnanticipatedHostError+ error code.+*/+const PaHostErrorInfo* Pa_GetLastHostErrorInfo( void );++++/* Device enumeration and capabilities */++/** Retrieve the number of available devices. The number of available devices+ may be zero.++ @return A non-negative value indicating the number of available devices or,+ a PaErrorCode (which are always negative) if PortAudio is not initialized+ or an error is encountered.+*/+PaDeviceIndex Pa_GetDeviceCount( void );+++/** Retrieve the index of the default input device. The result can be+ used in the inputDevice parameter to Pa_OpenStream().++ @return The default input device index for the default host API, or paNoDevice+ if no default input device is available or an error was encountered.+*/+PaDeviceIndex Pa_GetDefaultInputDevice( void );+++/** Retrieve the index of the default output device. The result can be+ used in the outputDevice parameter to Pa_OpenStream().++ @return The default output device index for the default host API, or paNoDevice+ if no default output device is available or an error was encountered.++ @note+ On the PC, the user can specify a default device by+ setting an environment variable. For example, to use device #1.+<pre>+ set PA_RECOMMENDED_OUTPUT_DEVICE=1+</pre>+ The user should first determine the available device ids by using+ the supplied application "pa_devs".+*/+PaDeviceIndex Pa_GetDefaultOutputDevice( void );+++/** The type used to represent monotonic time in seconds. PaTime is + used for the fields of the PaStreamCallbackTimeInfo argument to the + PaStreamCallback and as the result of Pa_GetStreamTime().++ PaTime values have unspecified origin.+     + @see PaStreamCallback, PaStreamCallbackTimeInfo, Pa_GetStreamTime+*/+typedef double PaTime;+++/** A type used to specify one or more sample formats. Each value indicates+ a possible format for sound data passed to and from the stream callback,+ Pa_ReadStream and Pa_WriteStream.++ The standard formats paFloat32, paInt16, paInt32, paInt24, paInt8+ and aUInt8 are usually implemented by all implementations.++ The floating point representation (paFloat32) uses +1.0 and -1.0 as the+ maximum and minimum respectively.++ paUInt8 is an unsigned 8 bit format where 128 is considered "ground"++ The paNonInterleaved flag indicates that audio data is passed as an array + of pointers to separate buffers, one buffer for each channel. Usually,+ when this flag is not used, audio data is passed as a single buffer with+ all channels interleaved.++ @see Pa_OpenStream, Pa_OpenDefaultStream, PaDeviceInfo+ @see paFloat32, paInt16, paInt32, paInt24, paInt8+ @see paUInt8, paCustomFormat, paNonInterleaved+*/+typedef unsigned long PaSampleFormat;+++#define paFloat32        ((PaSampleFormat) 0x00000001) /**< @see PaSampleFormat */+#define paInt32          ((PaSampleFormat) 0x00000002) /**< @see PaSampleFormat */+#define paInt24          ((PaSampleFormat) 0x00000004) /**< Packed 24 bit format. @see PaSampleFormat */+#define paInt16          ((PaSampleFormat) 0x00000008) /**< @see PaSampleFormat */+#define paInt8           ((PaSampleFormat) 0x00000010) /**< @see PaSampleFormat */+#define paUInt8          ((PaSampleFormat) 0x00000020) /**< @see PaSampleFormat */+#define paCustomFormat   ((PaSampleFormat) 0x00010000) /**< @see PaSampleFormat */++#define paNonInterleaved ((PaSampleFormat) 0x80000000) /**< @see PaSampleFormat */++/** A structure providing information and capabilities of PortAudio devices.+ Devices may support input, output or both input and output.+*/+typedef struct PaDeviceInfo+{+    int structVersion;  /* this is struct version 2 */+    const char *name;+    PaHostApiIndex hostApi; /**< note this is a host API index, not a type id*/+    +    int maxInputChannels;+    int maxOutputChannels;++    /** Default latency values for interactive performance. */+    PaTime defaultLowInputLatency;+    PaTime defaultLowOutputLatency;+    /** Default latency values for robust non-interactive applications (eg. playing sound files). */+    PaTime defaultHighInputLatency;+    PaTime defaultHighOutputLatency;++    double defaultSampleRate;+} PaDeviceInfo;+++/** Retrieve a pointer to a PaDeviceInfo structure containing information+ about the specified device.+ @return A pointer to an immutable PaDeviceInfo structure. If the device+ parameter is out of range the function returns NULL.++ @param device A valid device index in the range 0 to (Pa_GetDeviceCount()-1)++ @note PortAudio manages the memory referenced by the returned pointer,+ the client must not manipulate or free the memory. The pointer is only+ guaranteed to be valid between calls to Pa_Initialize() and Pa_Terminate().++ @see PaDeviceInfo, PaDeviceIndex+*/+const PaDeviceInfo* Pa_GetDeviceInfo( PaDeviceIndex device );+++/** Parameters for one direction (input or output) of a stream.+*/+typedef struct PaStreamParameters+{+    /** A valid device index in the range 0 to (Pa_GetDeviceCount()-1)+     specifying the device to be used or the special constant+     paUseHostApiSpecificDeviceSpecification which indicates that the actual+     device(s) to use are specified in hostApiSpecificStreamInfo.+     This field must not be set to paNoDevice.+    */+    PaDeviceIndex device;+    +    /** The number of channels of sound to be delivered to the+     stream callback or accessed by Pa_ReadStream() or Pa_WriteStream().+     It can range from 1 to the value of maxInputChannels in the+     PaDeviceInfo record for the device specified by the device parameter.+    */+    int channelCount;++    /** The sample format of the buffer provided to the stream callback,+     a_ReadStream() or Pa_WriteStream(). It may be any of the formats described+     by the PaSampleFormat enumeration.+    */+    PaSampleFormat sampleFormat;++    /** The desired latency in seconds. Where practical, implementations should+     configure their latency based on these parameters, otherwise they may+     choose the closest viable latency instead. Unless the suggested latency+     is greater than the absolute upper limit for the device implementations+     should round the suggestedLatency up to the next practical value - ie to+     provide an equal or higher latency than suggestedLatency wherever possible.+     Actual latency values for an open stream may be retrieved using the+     inputLatency and outputLatency fields of the PaStreamInfo structure+     returned by Pa_GetStreamInfo().+     @see default*Latency in PaDeviceInfo, *Latency in PaStreamInfo+    */+    PaTime suggestedLatency;++    /** An optional pointer to a host api specific data structure+     containing additional information for device setup and/or stream processing.+     hostApiSpecificStreamInfo is never required for correct operation,+     if not used it should be set to NULL.+    */+    void *hostApiSpecificStreamInfo;++} PaStreamParameters;+++/** Return code for Pa_IsFormatSupported indicating success. */+#define paFormatIsSupported (0)++/** Determine whether it would be possible to open a stream with the specified+ parameters.++ @param inputParameters A structure that describes the input parameters used to+ open a stream. The suggestedLatency field is ignored. See PaStreamParameters+ for a description of these parameters. inputParameters must be NULL for+ output-only streams.++ @param outputParameters A structure that describes the output parameters used+ to open a stream. The suggestedLatency field is ignored. See PaStreamParameters+ for a description of these parameters. outputParameters must be NULL for+ input-only streams.++ @param sampleRate The required sampleRate. For full-duplex streams it is the+ sample rate for both input and output++ @return Returns 0 if the format is supported, and an error code indicating why+ the format is not supported otherwise. The constant paFormatIsSupported is+ provided to compare with the return value for success.++ @see paFormatIsSupported, PaStreamParameters+*/+PaError Pa_IsFormatSupported( const PaStreamParameters *inputParameters,+                              const PaStreamParameters *outputParameters,+                              double sampleRate );++++/* Streaming types and functions */+++/**+ A single PaStream can provide multiple channels of real-time+ streaming audio input and output to a client application. A stream+ provides access to audio hardware represented by one or more+ PaDevices. Depending on the underlying Host API, it may be possible + to open multiple streams using the same device, however this behavior + is implementation defined. Portable applications should assume that + a PaDevice may be simultaneously used by at most one PaStream.++ Pointers to PaStream objects are passed between PortAudio functions that+ operate on streams.++ @see Pa_OpenStream, Pa_OpenDefaultStream, Pa_OpenDefaultStream, Pa_CloseStream,+ Pa_StartStream, Pa_StopStream, Pa_AbortStream, Pa_IsStreamActive,+ Pa_GetStreamTime, Pa_GetStreamCpuLoad++*/+typedef void PaStream;+++/** Can be passed as the framesPerBuffer parameter to Pa_OpenStream()+ or Pa_OpenDefaultStream() to indicate that the stream callback will+ accept buffers of any size.+*/+#define paFramesPerBufferUnspecified  (0)+++/** Flags used to control the behavior of a stream. They are passed as+ parameters to Pa_OpenStream or Pa_OpenDefaultStream. Multiple flags may be+ ORed together.++ @see Pa_OpenStream, Pa_OpenDefaultStream+ @see paNoFlag, paClipOff, paDitherOff, paNeverDropInput,+  paPrimeOutputBuffersUsingStreamCallback, paPlatformSpecificFlags+*/+typedef unsigned long PaStreamFlags;++/** @see PaStreamFlags */+#define   paNoFlag          ((PaStreamFlags) 0)++/** Disable default clipping of out of range samples.+ @see PaStreamFlags+*/+#define   paClipOff         ((PaStreamFlags) 0x00000001)++/** Disable default dithering.+ @see PaStreamFlags+*/+#define   paDitherOff       ((PaStreamFlags) 0x00000002)++/** Flag requests that where possible a full duplex stream will not discard+ overflowed input samples without calling the stream callback. This flag is+ only valid for full duplex callback streams and only when used in combination+ with the paFramesPerBufferUnspecified (0) framesPerBuffer parameter. Using+ this flag incorrectly results in a paInvalidFlag error being returned from+ Pa_OpenStream and Pa_OpenDefaultStream.++ @see PaStreamFlags, paFramesPerBufferUnspecified+*/+#define   paNeverDropInput  ((PaStreamFlags) 0x00000004)++/** Call the stream callback to fill initial output buffers, rather than the+ default behavior of priming the buffers with zeros (silence). This flag has+ no effect for input-only and blocking read/write streams.+ + @see PaStreamFlags+*/+#define   paPrimeOutputBuffersUsingStreamCallback ((PaStreamFlags) 0x00000008)++/** A mask specifying the platform specific bits.+ @see PaStreamFlags+*/+#define   paPlatformSpecificFlags ((PaStreamFlags)0xFFFF0000)++/**+ Timing information for the buffers passed to the stream callback.++ Time values are expressed in seconds and are synchronised with the time base used by Pa_GetStreamTime() for the associated stream.+ + @see PaStreamCallback, Pa_GetStreamTime+*/+typedef struct PaStreamCallbackTimeInfo{+    PaTime inputBufferAdcTime;  /**< The time when the first sample of the input buffer was captured at the ADC input */+    PaTime currentTime;         /**< The time when the stream callback was invoked */+    PaTime outputBufferDacTime; /**< The time when the first sample of the output buffer will output the DAC */+} PaStreamCallbackTimeInfo;+++/**+ Flag bit constants for the statusFlags to PaStreamCallback.++ @see paInputUnderflow, paInputOverflow, paOutputUnderflow, paOutputOverflow,+ paPrimingOutput+*/+typedef unsigned long PaStreamCallbackFlags;++/** In a stream opened with paFramesPerBufferUnspecified, indicates that+ input data is all silence (zeros) because no real data is available. In a+ stream opened without paFramesPerBufferUnspecified, it indicates that one or+ more zero samples have been inserted into the input buffer to compensate+ for an input underflow.+ @see PaStreamCallbackFlags+*/+#define paInputUnderflow   ((PaStreamCallbackFlags) 0x00000001)++/** In a stream opened with paFramesPerBufferUnspecified, indicates that data+ prior to the first sample of the input buffer was discarded due to an+ overflow, possibly because the stream callback is using too much CPU time.+ Otherwise indicates that data prior to one or more samples in the+ input buffer was discarded.+ @see PaStreamCallbackFlags+*/+#define paInputOverflow    ((PaStreamCallbackFlags) 0x00000002)++/** Indicates that output data (or a gap) was inserted, possibly because the+ stream callback is using too much CPU time.+ @see PaStreamCallbackFlags+*/+#define paOutputUnderflow  ((PaStreamCallbackFlags) 0x00000004)++/** Indicates that output data will be discarded because no room is available.+ @see PaStreamCallbackFlags+*/+#define paOutputOverflow   ((PaStreamCallbackFlags) 0x00000008)++/** Some of all of the output data will be used to prime the stream, input+ data may be zero.+ @see PaStreamCallbackFlags+*/+#define paPrimingOutput    ((PaStreamCallbackFlags) 0x00000010)++/**+ Allowable return values for the PaStreamCallback.+ @see PaStreamCallback+*/+typedef enum PaStreamCallbackResult+{+    paContinue=0,   /**< Signal that the stream should continue invoking the callback and processing audio. */+    paComplete=1,   /**< Signal that the stream should stop invoking the callback and finish once all output samples have played. */+    paAbort=2       /**< Signal that the stream should stop invoking the callback and finish as soon as possible. */+} PaStreamCallbackResult;+++/**+ Functions of type PaStreamCallback are implemented by PortAudio clients.+ They consume, process or generate audio in response to requests from an+ active PortAudio stream.++ When a stream is running, PortAudio calls the stream callback periodically.+ The callback function is responsible for processing buffers of audio samples + passed via the input and output parameters.++ The PortAudio stream callback runs at very high or real-time priority.+ It is required to consistently meet its time deadlines. Do not allocate + memory, access the file system, call library functions or call other functions + from the stream callback that may block or take an unpredictable amount of+ time to complete.++ In order for a stream to maintain glitch-free operation the callback+ must consume and return audio data faster than it is recorded and/or+ played. PortAudio anticipates that each callback invocation may execute for + a duration approaching the duration of frameCount audio frames at the stream + sample rate. It is reasonable to expect to be able to utilise 70% or more of+ the available CPU time in the PortAudio callback. However, due to buffer size + adaption and other factors, not all host APIs are able to guarantee audio + stability under heavy CPU load with arbitrary fixed callback buffer sizes. + When high callback CPU utilisation is required the most robust behavior + can be achieved by using paFramesPerBufferUnspecified as the + Pa_OpenStream() framesPerBuffer parameter.+     + @param input and @param output are either arrays of interleaved samples or;+ if non-interleaved samples were requested using the paNonInterleaved sample + format flag, an array of buffer pointers, one non-interleaved buffer for + each channel.++ The format, packing and number of channels used by the buffers are+ determined by parameters to Pa_OpenStream().+     + @param frameCount The number of sample frames to be processed by+ the stream callback.++ @param timeInfo Timestamps indicating the ADC capture time of the first sample+ in the input buffer, the DAC output time of the first sample in the output buffer+ and the time the callback was invoked. + See PaStreamCallbackTimeInfo and Pa_GetStreamTime()++ @param statusFlags Flags indicating whether input and/or output buffers+ have been inserted or will be dropped to overcome underflow or overflow+ conditions.++ @param userData The value of a user supplied pointer passed to+ Pa_OpenStream() intended for storing synthesis data etc.++ @return+ The stream callback should return one of the values in the+ ::PaStreamCallbackResult enumeration. To ensure that the callback continues+ to be called, it should return paContinue (0). Either paComplete or paAbort+ can be returned to finish stream processing, after either of these values is+ returned the callback will not be called again. If paAbort is returned the+ stream will finish as soon as possible. If paComplete is returned, the stream+ will continue until all buffers generated by the callback have been played.+ This may be useful in applications such as soundfile players where a specific+ duration of output is required. However, it is not necessary to utilize this+ mechanism as Pa_StopStream(), Pa_AbortStream() or Pa_CloseStream() can also+ be used to stop the stream. The callback must always fill the entire output+ buffer irrespective of its return value.++ @see Pa_OpenStream, Pa_OpenDefaultStream++ @note With the exception of Pa_GetStreamCpuLoad() it is not permissible to call+ PortAudio API functions from within the stream callback.+*/+typedef int PaStreamCallback(+    const void *input, void *output,+    unsigned long frameCount,+    const PaStreamCallbackTimeInfo* timeInfo,+    PaStreamCallbackFlags statusFlags,+    void *userData );+++/** Opens a stream for either input, output or both.+     + @param stream The address of a PaStream pointer which will receive+ a pointer to the newly opened stream.+     + @param inputParameters A structure that describes the input parameters used by+ the opened stream. See PaStreamParameters for a description of these parameters.+ inputParameters must be NULL for output-only streams.++ @param outputParameters A structure that describes the output parameters used by+ the opened stream. See PaStreamParameters for a description of these parameters.+ outputParameters must be NULL for input-only streams.+ + @param sampleRate The desired sampleRate. For full-duplex streams it is the+ sample rate for both input and output+     + @param framesPerBuffer The number of frames passed to the stream callback+ function, or the preferred block granularity for a blocking read/write stream.+ The special value paFramesPerBufferUnspecified (0) may be used to request that+ the stream callback will receive an optimal (and possibly varying) number of+ frames based on host requirements and the requested latency settings.+ Note: With some host APIs, the use of non-zero framesPerBuffer for a callback+ stream may introduce an additional layer of buffering which could introduce+ additional latency. PortAudio guarantees that the additional latency+ will be kept to the theoretical minimum however, it is strongly recommended+ that a non-zero framesPerBuffer value only be used when your algorithm+ requires a fixed number of frames per stream callback.+ + @param streamFlags Flags which modify the behavior of the streaming process.+ This parameter may contain a combination of flags ORed together. Some flags may+ only be relevant to certain buffer formats.+     + @param streamCallback A pointer to a client supplied function that is responsible+ for processing and filling input and output buffers. If this parameter is NULL+ the stream will be opened in 'blocking read/write' mode. In blocking mode,+ the client can receive sample data using Pa_ReadStream and write sample data+ using Pa_WriteStream, the number of samples that may be read or written+ without blocking is returned by Pa_GetStreamReadAvailable and+ Pa_GetStreamWriteAvailable respectively.++ @param userData A client supplied pointer which is passed to the stream callback+ function. It could for example, contain a pointer to instance data necessary+ for processing the audio buffers. This parameter is ignored if streamCallback+ is NULL.+     + @return+ Upon success Pa_OpenStream() returns paNoError and places a pointer to a+ valid PaStream in the stream argument. The stream is inactive (stopped).+ If a call to Pa_OpenStream() fails, a non-zero error code is returned (see+ PaError for possible error codes) and the value of stream is invalid.++ @see PaStreamParameters, PaStreamCallback, Pa_ReadStream, Pa_WriteStream,+ Pa_GetStreamReadAvailable, Pa_GetStreamWriteAvailable+*/+PaError Pa_OpenStream( PaStream** stream,+                       const PaStreamParameters *inputParameters,+                       const PaStreamParameters *outputParameters,+                       double sampleRate,+                       unsigned long framesPerBuffer,+                       PaStreamFlags streamFlags,+                       PaStreamCallback *streamCallback,+                       void *userData );+++/** A simplified version of Pa_OpenStream() that opens the default input+ and/or output devices.++ @param stream The address of a PaStream pointer which will receive+ a pointer to the newly opened stream.+ + @param numInputChannels  The number of channels of sound that will be supplied+ to the stream callback or returned by Pa_ReadStream. It can range from 1 to+ the value of maxInputChannels in the PaDeviceInfo record for the default input+ device. If 0 the stream is opened as an output-only stream.++ @param numOutputChannels The number of channels of sound to be delivered to the+ stream callback or passed to Pa_WriteStream. It can range from 1 to the value+ of maxOutputChannels in the PaDeviceInfo record for the default output device.+ If 0 the stream is opened as an output-only stream.++ @param sampleFormat The sample format of both the input and output buffers+ provided to the callback or passed to and from Pa_ReadStream and Pa_WriteStream.+ sampleFormat may be any of the formats described by the PaSampleFormat+ enumeration.+ + @param sampleRate Same as Pa_OpenStream parameter of the same name.+ @param framesPerBuffer Same as Pa_OpenStream parameter of the same name.+ @param streamCallback Same as Pa_OpenStream parameter of the same name.+ @param userData Same as Pa_OpenStream parameter of the same name.++ @return As for Pa_OpenStream++ @see Pa_OpenStream, PaStreamCallback+*/+PaError Pa_OpenDefaultStream( PaStream** stream,+                              int numInputChannels,+                              int numOutputChannels,+                              PaSampleFormat sampleFormat,+                              double sampleRate,+                              unsigned long framesPerBuffer,+                              PaStreamCallback *streamCallback,+                              void *userData );+++/** Closes an audio stream. If the audio stream is active it+ discards any pending buffers as if Pa_AbortStream() had been called.+*/+PaError Pa_CloseStream( PaStream *stream );+++/** Functions of type PaStreamFinishedCallback are implemented by PortAudio + clients. They can be registered with a stream using the Pa_SetStreamFinishedCallback+ function. Once registered they are called when the stream becomes inactive+ (ie once a call to Pa_StopStream() will not block).+ A stream will become inactive after the stream callback returns non-zero,+ or when Pa_StopStream or Pa_AbortStream is called. For a stream providing audio+ output, if the stream callback returns paComplete, or Pa_StopStream is called,+ the stream finished callback will not be called until all generated sample data+ has been played.+ + @param userData The userData parameter supplied to Pa_OpenStream()++ @see Pa_SetStreamFinishedCallback+*/+typedef void PaStreamFinishedCallback( void *userData );+++/** Register a stream finished callback function which will be called when the + stream becomes inactive. See the description of PaStreamFinishedCallback for + further details about when the callback will be called.++ @param stream a pointer to a PaStream that is in the stopped state - if the+ stream is not stopped, the stream's finished callback will remain unchanged + and an error code will be returned.++ @param streamFinishedCallback a pointer to a function with the same signature+ as PaStreamFinishedCallback, that will be called when the stream becomes+ inactive. Passing NULL for this parameter will un-register a previously+ registered stream finished callback function.++ @return on success returns paNoError, otherwise an error code indicating the cause+ of the error.++ @see PaStreamFinishedCallback+*/+PaError Pa_SetStreamFinishedCallback( PaStream *stream, PaStreamFinishedCallback* streamFinishedCallback ); +++/** Commences audio processing.+*/+PaError Pa_StartStream( PaStream *stream );+++/** Terminates audio processing. It waits until all pending+ audio buffers have been played before it returns.+*/+PaError Pa_StopStream( PaStream *stream );+++/** Terminates audio processing immediately without waiting for pending+ buffers to complete.+*/+PaError Pa_AbortStream( PaStream *stream );+++/** Determine whether the stream is stopped.+ A stream is considered to be stopped prior to a successful call to+ Pa_StartStream and after a successful call to Pa_StopStream or Pa_AbortStream.+ If a stream callback returns a value other than paContinue the stream is NOT+ considered to be stopped.++ @return Returns one (1) when the stream is stopped, zero (0) when+ the stream is running or, a PaErrorCode (which are always negative) if+ PortAudio is not initialized or an error is encountered.++ @see Pa_StopStream, Pa_AbortStream, Pa_IsStreamActive+*/+PaError Pa_IsStreamStopped( PaStream *stream );+++/** Determine whether the stream is active.+ A stream is active after a successful call to Pa_StartStream(), until it+ becomes inactive either as a result of a call to Pa_StopStream() or+ Pa_AbortStream(), or as a result of a return value other than paContinue from+ the stream callback. In the latter case, the stream is considered inactive+ after the last buffer has finished playing.++ @return Returns one (1) when the stream is active (ie playing or recording+ audio), zero (0) when not playing or, a PaErrorCode (which are always negative)+ if PortAudio is not initialized or an error is encountered.++ @see Pa_StopStream, Pa_AbortStream, Pa_IsStreamStopped+*/+PaError Pa_IsStreamActive( PaStream *stream );++++/** A structure containing unchanging information about an open stream.+ @see Pa_GetStreamInfo+*/++typedef struct PaStreamInfo+{+    /** this is struct version 1 */+    int structVersion;++    /** The input latency of the stream in seconds. This value provides the most+     accurate estimate of input latency available to the implementation. It may+     differ significantly from the suggestedLatency value passed to Pa_OpenStream().+     The value of this field will be zero (0.) for output-only streams.+     @see PaTime+    */+    PaTime inputLatency;++    /** The output latency of the stream in seconds. This value provides the most+     accurate estimate of output latency available to the implementation. It may+     differ significantly from the suggestedLatency value passed to Pa_OpenStream().+     The value of this field will be zero (0.) for input-only streams.+     @see PaTime+    */+    PaTime outputLatency;++    /** The sample rate of the stream in Hertz (samples per second). In cases+     where the hardware sample rate is inaccurate and PortAudio is aware of it,+     the value of this field may be different from the sampleRate parameter+     passed to Pa_OpenStream(). If information about the actual hardware sample+     rate is not available, this field will have the same value as the sampleRate+     parameter passed to Pa_OpenStream().+    */+    double sampleRate;+    +} PaStreamInfo;+++/** Retrieve a pointer to a PaStreamInfo structure containing information+ about the specified stream.+ @return A pointer to an immutable PaStreamInfo structure. If the stream+ parameter is invalid, or an error is encountered, the function returns NULL.++ @param stream A pointer to an open stream previously created with Pa_OpenStream.++ @note PortAudio manages the memory referenced by the returned pointer,+ the client must not manipulate or free the memory. The pointer is only+ guaranteed to be valid until the specified stream is closed.++ @see PaStreamInfo+*/+const PaStreamInfo* Pa_GetStreamInfo( PaStream *stream );+++/** Returns the current time in seconds for a stream according to the same clock used+ to generate callback PaStreamCallbackTimeInfo timestamps. The time values are+ monotonically increasing and have unspecified origin. + + Pa_GetStreamTime returns valid time values for the entire life of the stream,+ from when the stream is opened until it is closed. Starting and stopping the stream+ does not affect the passage of time returned by Pa_GetStreamTime.++ This time may be used for synchronizing other events to the audio stream, for + example synchronizing audio to MIDI.+                                        + @return The stream's current time in seconds, or 0 if an error occurred.++ @see PaTime, PaStreamCallback, PaStreamCallbackTimeInfo+*/+PaTime Pa_GetStreamTime( PaStream *stream );+++/** Retrieve CPU usage information for the specified stream.+ The "CPU Load" is a fraction of total CPU time consumed by a callback stream's+ audio processing routines including, but not limited to the client supplied+ stream callback. This function does not work with blocking read/write streams.++ This function may be called from the stream callback function or the+ application.+     + @return+ A floating point value, typically between 0.0 and 1.0, where 1.0 indicates+ that the stream callback is consuming the maximum number of CPU cycles possible+ to maintain real-time operation. A value of 0.5 would imply that PortAudio and+ the stream callback was consuming roughly 50% of the available CPU time. The+ return value may exceed 1.0. A value of 0.0 will always be returned for a+ blocking read/write stream, or if an error occurs.+*/+double Pa_GetStreamCpuLoad( PaStream* stream );+++/** Read samples from an input stream. The function doesn't return until+ the entire buffer has been filled - this may involve waiting for the operating+ system to supply the data.++ @param stream A pointer to an open stream previously created with Pa_OpenStream.+ + @param buffer A pointer to a buffer of sample frames. The buffer contains+ samples in the format specified by the inputParameters->sampleFormat field+ used to open the stream, and the number of channels specified by+ inputParameters->numChannels. If non-interleaved samples were requested using+ the paNonInterleaved sample format flag, buffer is a pointer to the first element + of an array of buffer pointers, one non-interleaved buffer for each channel.++ @param frames The number of frames to be read into buffer. This parameter+ is not constrained to a specific range, however high performance applications+ will want to match this parameter to the framesPerBuffer parameter used+ when opening the stream.++ @return On success PaNoError will be returned, or PaInputOverflowed if input+ data was discarded by PortAudio after the previous call and before this call.+*/+PaError Pa_ReadStream( PaStream* stream,+                       void *buffer,+                       unsigned long frames );+++/** Write samples to an output stream. This function doesn't return until the+ entire buffer has been consumed - this may involve waiting for the operating+ system to consume the data.++ @param stream A pointer to an open stream previously created with Pa_OpenStream.++ @param buffer A pointer to a buffer of sample frames. The buffer contains+ samples in the format specified by the outputParameters->sampleFormat field+ used to open the stream, and the number of channels specified by+ outputParameters->numChannels. If non-interleaved samples were requested using+ the paNonInterleaved sample format flag, buffer is a pointer to the first element + of an array of buffer pointers, one non-interleaved buffer for each channel.++ @param frames The number of frames to be written from buffer. This parameter+ is not constrained to a specific range, however high performance applications+ will want to match this parameter to the framesPerBuffer parameter used+ when opening the stream.++ @return On success PaNoError will be returned, or paOutputUnderflowed if+ additional output data was inserted after the previous call and before this+ call.+*/+PaError Pa_WriteStream( PaStream* stream,+                        const void *buffer,+                        unsigned long frames );+++/** Retrieve the number of frames that can be read from the stream without+ waiting.++ @return Returns a non-negative value representing the maximum number of frames+ that can be read from the stream without blocking or busy waiting or, a+ PaErrorCode (which are always negative) if PortAudio is not initialized or an+ error is encountered.+*/+signed long Pa_GetStreamReadAvailable( PaStream* stream );+++/** Retrieve the number of frames that can be written to the stream without+ waiting.++ @return Returns a non-negative value representing the maximum number of frames+ that can be written to the stream without blocking or busy waiting or, a+ PaErrorCode (which are always negative) if PortAudio is not initialized or an+ error is encountered.+*/+signed long Pa_GetStreamWriteAvailable( PaStream* stream );+++/* Miscellaneous utilities */+++/** Retrieve the size of a given sample format in bytes.++ @return The size in bytes of a single sample in the specified format,+ or paSampleFormatNotSupported if the format is not supported.+*/+PaError Pa_GetSampleSize( PaSampleFormat format );+++/** Put the caller to sleep for at least 'msec' milliseconds. This function is+ provided only as a convenience for authors of portable code (such as the tests+ and examples in the PortAudio distribution.)++ The function may sleep longer than requested so don't rely on this for accurate+ musical timing.+*/+void Pa_Sleep( long msec );++++#ifdef __cplusplus+}+#endif /* __cplusplus */+#endif /* PORTAUDIO_H */
+ portaudio/src/common/pa_allocation.h view
@@ -0,0 +1,104 @@+#ifndef PA_ALLOCATION_H+#define PA_ALLOCATION_H+/*+ * $Id: pa_allocation.h 1339 2008-02-15 07:50:33Z rossb $+ * Portable Audio I/O Library allocation context header+ * memory allocation context for tracking allocation groups+ *+ * Based on the Open Source API proposed by Ross Bencina+ * Copyright (c) 1999-2008 Ross Bencina, Phil Burk+ *+ * Permission is hereby granted, free of charge, to any person obtaining+ * a copy of this software and associated documentation files+ * (the "Software"), to deal in the Software without restriction,+ * including without limitation the rights to use, copy, modify, merge,+ * publish, distribute, sublicense, and/or sell copies of the Software,+ * and to permit persons to whom the Software is furnished to do so,+ * subject to the following conditions:+ *+ * The above copyright notice and this permission notice shall be+ * included in all copies or substantial portions of the Software.+ *+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.+ */++/*+ * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests:+ *+ * Any person wishing to distribute modifications to the Software is+ * requested to send the modifications to the original developer so that+ * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above.+ */++/** @file+ @ingroup common_src++ @brief Allocation Group prototypes. An Allocation Group makes it easy to+ allocate multiple blocks of memory and free them all at once.+ + An allocation group is useful for keeping track of multiple blocks+ of memory which are allocated at the same time (such as during initialization)+ and need to be deallocated at the same time. The allocation group maintains+ a list of allocated blocks, and can free all allocations at once. This+ can be usefull for cleaning up after a partially initialized object fails.++ The allocation group implementation is built on top of the lower+ level allocation functions defined in pa_util.h+*/+++#ifdef __cplusplus+extern "C"+{+#endif /* __cplusplus */+++typedef struct+{+    long linkCount;+    struct PaUtilAllocationGroupLink *linkBlocks;+    struct PaUtilAllocationGroupLink *spareLinks;+    struct PaUtilAllocationGroupLink *allocations;+}PaUtilAllocationGroup;++++/** Create an allocation group.+*/+PaUtilAllocationGroup* PaUtil_CreateAllocationGroup( void );++/** Destroy an allocation group, but not the memory allocated through the group.+*/+void PaUtil_DestroyAllocationGroup( PaUtilAllocationGroup* group );++/** Allocate a block of memory though an allocation group.+*/+void* PaUtil_GroupAllocateMemory( PaUtilAllocationGroup* group, long size );++/** Free a block of memory that was previously allocated though an allocation+ group. Calling this function is a relatively time consuming operation.+ Under normal circumstances clients should call PaUtil_FreeAllAllocations to+ free all allocated blocks simultaneously.+ @see PaUtil_FreeAllAllocations+*/+void PaUtil_GroupFreeMemory( PaUtilAllocationGroup* group, void *buffer );++/** Free all blocks of memory which have been allocated through the allocation+ group. This function doesn't destroy the group itself.+*/+void PaUtil_FreeAllAllocations( PaUtilAllocationGroup* group );+++#ifdef __cplusplus+}+#endif /* __cplusplus */+#endif /* PA_ALLOCATION_H */
+ portaudio/src/common/pa_converters.h view
@@ -0,0 +1,263 @@+#ifndef PA_CONVERTERS_H+#define PA_CONVERTERS_H+/*+ * $Id: pa_converters.h 1097 2006-08-26 08:27:53Z rossb $+ * Portable Audio I/O Library sample conversion mechanism+ *+ * Based on the Open Source API proposed by Ross Bencina+ * Copyright (c) 1999-2002 Phil Burk, Ross Bencina+ *+ * Permission is hereby granted, free of charge, to any person obtaining+ * a copy of this software and associated documentation files+ * (the "Software"), to deal in the Software without restriction,+ * including without limitation the rights to use, copy, modify, merge,+ * publish, distribute, sublicense, and/or sell copies of the Software,+ * and to permit persons to whom the Software is furnished to do so,+ * subject to the following conditions:+ *+ * The above copyright notice and this permission notice shall be+ * included in all copies or substantial portions of the Software.+ *+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.+ */++/*+ * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests:+ *+ * Any person wishing to distribute modifications to the Software is+ * requested to send the modifications to the original developer so that+ * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above.+ */++/** @file+ @ingroup common_src++ @brief Conversion functions used to convert buffers of samples from one+ format to another.+*/+++#include "portaudio.h"  /* for PaSampleFormat */++#ifdef __cplusplus+extern "C"+{+#endif /* __cplusplus */+++struct PaUtilTriangularDitherGenerator;+++/** Choose an available sample format which is most appropriate for+ representing the requested format. If the requested format is not available+ higher quality formats are considered before lower quality formates.+ @param availableFormats A variable containing the logical OR of all available+ formats.+ @param format The desired format.+ @return The most appropriate available format for representing the requested+ format.+*/+PaSampleFormat PaUtil_SelectClosestAvailableFormat(+        PaSampleFormat availableFormats, PaSampleFormat format );+++/* high level conversions functions for use by implementations */+++/** The generic sample converter prototype. Sample converters convert count+    samples from sourceBuffer to destinationBuffer. The actual type of the data+    pointed to by these parameters varys for different converter functions.+    @param destinationBuffer A pointer to the first sample of the destination.+    @param destinationStride An offset between successive destination samples+    expressed in samples (not bytes.) It may be negative.+    @param sourceBuffer A pointer to the first sample of the source.+    @param sourceStride An offset between successive source samples+    expressed in samples (not bytes.) It may be negative.+    @param count The number of samples to convert.+    @param ditherState State information used to calculate dither. Converters+    that do not perform dithering will ignore this parameter, in which case+    NULL or invalid dither state may be passed.+*/+typedef void PaUtilConverter(+    void *destinationBuffer, signed int destinationStride,+    void *sourceBuffer, signed int sourceStride,+    unsigned int count, struct PaUtilTriangularDitherGenerator *ditherGenerator );+++/** Find a sample converter function for the given source and destinations+    formats and flags (clip and dither.)+    @return+    A pointer to a PaUtilConverter which will perform the requested+    conversion, or NULL if the given format conversion is not supported.+    For conversions where clipping or dithering is not necessary, the+    clip and dither flags are ignored and a non-clipping or dithering+    version is returned.+    If the source and destination formats are the same, a function which+    copies data of the appropriate size will be returned.+*/+PaUtilConverter* PaUtil_SelectConverter( PaSampleFormat sourceFormat,+        PaSampleFormat destinationFormat, PaStreamFlags flags );+++/** The generic buffer zeroer prototype. Buffer zeroers copy count zeros to+    destinationBuffer. The actual type of the data pointed to varys for+    different zeroer functions.+    @param destinationBuffer A pointer to the first sample of the destination.+    @param destinationStride An offset between successive destination samples+    expressed in samples (not bytes.) It may be negative.+    @param count The number of samples to zero.+*/+typedef void PaUtilZeroer(+    void *destinationBuffer, signed int destinationStride, unsigned int count );++    +/** Find a buffer zeroer function for the given destination format.+    @return+    A pointer to a PaUtilZeroer which will perform the requested+    zeroing.+*/+PaUtilZeroer* PaUtil_SelectZeroer( PaSampleFormat destinationFormat );++/*----------------------------------------------------------------------------*/+/* low level functions and data structures which may be used for+    substituting conversion functions */+++/** The type used to store all sample conversion functions.+    @see paConverters;+*/+typedef struct{+    PaUtilConverter *Float32_To_Int32;+    PaUtilConverter *Float32_To_Int32_Dither;+    PaUtilConverter *Float32_To_Int32_Clip;+    PaUtilConverter *Float32_To_Int32_DitherClip;++    PaUtilConverter *Float32_To_Int24;+    PaUtilConverter *Float32_To_Int24_Dither;+    PaUtilConverter *Float32_To_Int24_Clip;+    PaUtilConverter *Float32_To_Int24_DitherClip;+    +    PaUtilConverter *Float32_To_Int16;+    PaUtilConverter *Float32_To_Int16_Dither;+    PaUtilConverter *Float32_To_Int16_Clip;+    PaUtilConverter *Float32_To_Int16_DitherClip;++    PaUtilConverter *Float32_To_Int8;+    PaUtilConverter *Float32_To_Int8_Dither;+    PaUtilConverter *Float32_To_Int8_Clip;+    PaUtilConverter *Float32_To_Int8_DitherClip;++    PaUtilConverter *Float32_To_UInt8;+    PaUtilConverter *Float32_To_UInt8_Dither;+    PaUtilConverter *Float32_To_UInt8_Clip;+    PaUtilConverter *Float32_To_UInt8_DitherClip;++    PaUtilConverter *Int32_To_Float32;+    PaUtilConverter *Int32_To_Int24;+    PaUtilConverter *Int32_To_Int24_Dither;+    PaUtilConverter *Int32_To_Int16;+    PaUtilConverter *Int32_To_Int16_Dither;+    PaUtilConverter *Int32_To_Int8;+    PaUtilConverter *Int32_To_Int8_Dither;+    PaUtilConverter *Int32_To_UInt8;+    PaUtilConverter *Int32_To_UInt8_Dither;++    PaUtilConverter *Int24_To_Float32;+    PaUtilConverter *Int24_To_Int32;+    PaUtilConverter *Int24_To_Int16;+    PaUtilConverter *Int24_To_Int16_Dither;+    PaUtilConverter *Int24_To_Int8;+    PaUtilConverter *Int24_To_Int8_Dither;+    PaUtilConverter *Int24_To_UInt8;+    PaUtilConverter *Int24_To_UInt8_Dither;++    PaUtilConverter *Int16_To_Float32;+    PaUtilConverter *Int16_To_Int32;+    PaUtilConverter *Int16_To_Int24;+    PaUtilConverter *Int16_To_Int8;+    PaUtilConverter *Int16_To_Int8_Dither;+    PaUtilConverter *Int16_To_UInt8;+    PaUtilConverter *Int16_To_UInt8_Dither;++    PaUtilConverter *Int8_To_Float32;+    PaUtilConverter *Int8_To_Int32;+    PaUtilConverter *Int8_To_Int24;+    PaUtilConverter *Int8_To_Int16;+    PaUtilConverter *Int8_To_UInt8;+    +    PaUtilConverter *UInt8_To_Float32;+    PaUtilConverter *UInt8_To_Int32;+    PaUtilConverter *UInt8_To_Int24;+    PaUtilConverter *UInt8_To_Int16;+    PaUtilConverter *UInt8_To_Int8;++    PaUtilConverter *Copy_8_To_8;       /* copy without any conversion */+    PaUtilConverter *Copy_16_To_16;     /* copy without any conversion */+    PaUtilConverter *Copy_24_To_24;     /* copy without any conversion */+    PaUtilConverter *Copy_32_To_32;     /* copy without any conversion */+} PaUtilConverterTable;+++/** A table of pointers to all required converter functions.+    PaUtil_SelectConverter() uses this table to lookup the appropriate+    conversion functions. The fields of this structure are initialized+    with default conversion functions. Fields may be NULL, indicating that+    no conversion function is available. User code may substitue optimised+    conversion functions by assigning different function pointers to+    these fields.++    @note+    If the PA_NO_STANDARD_CONVERTERS preprocessor variable is defined,+    PortAudio's standard converters will not be compiled, and all fields+    of this structure will be initialized to NULL. In such cases, users+    should supply their own conversion functions if the require PortAudio+    to open a stream that requires sample conversion.++    @see PaUtilConverterTable, PaUtilConverter, PaUtil_SelectConverter+*/+extern PaUtilConverterTable paConverters;+++/** The type used to store all buffer zeroing functions.+    @see paZeroers;+*/+typedef struct{+    PaUtilZeroer *ZeroU8; /* unsigned 8 bit, zero == 128 */+    PaUtilZeroer *Zero8;+    PaUtilZeroer *Zero16;+    PaUtilZeroer *Zero24;+    PaUtilZeroer *Zero32;+} PaUtilZeroerTable;+++/** A table of pointers to all required zeroer functions.+    PaUtil_SelectZeroer() uses this table to lookup the appropriate+    conversion functions. The fields of this structure are initialized+    with default conversion functions. User code may substitue optimised+    conversion functions by assigning different function pointers to+    these fields.++    @note+    If the PA_NO_STANDARD_ZEROERS preprocessor variable is defined,+    PortAudio's standard zeroers will not be compiled, and all fields+    of this structure will be initialized to NULL. In such cases, users+    should supply their own zeroing functions for the sample sizes which+    they intend to use.++    @see PaUtilZeroerTable, PaUtilZeroer, PaUtil_SelectZeroer+*/+extern PaUtilZeroerTable paZeroers;++#ifdef __cplusplus+}+#endif /* __cplusplus */+#endif /* PA_CONVERTERS_H */
+ portaudio/src/common/pa_cpuload.h view
@@ -0,0 +1,72 @@+#ifndef PA_CPULOAD_H+#define PA_CPULOAD_H+/*+ * $Id: pa_cpuload.h 1097 2006-08-26 08:27:53Z rossb $+ * Portable Audio I/O Library CPU Load measurement functions+ * Portable CPU load measurement facility.+ *+ * Based on the Open Source API proposed by Ross Bencina+ * Copyright (c) 2002 Ross Bencina+ *+ * Permission is hereby granted, free of charge, to any person obtaining+ * a copy of this software and associated documentation files+ * (the "Software"), to deal in the Software without restriction,+ * including without limitation the rights to use, copy, modify, merge,+ * publish, distribute, sublicense, and/or sell copies of the Software,+ * and to permit persons to whom the Software is furnished to do so,+ * subject to the following conditions:+ *+ * The above copyright notice and this permission notice shall be+ * included in all copies or substantial portions of the Software.+ *+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.+ */++/*+ * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests:+ *+ * Any person wishing to distribute modifications to the Software is+ * requested to send the modifications to the original developer so that+ * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above.+ */++/** @file+ @ingroup common_src++ @brief Functions to assist in measuring the CPU utilization of a callback+ stream. Used to implement the Pa_GetStreamCpuLoad() function.+*/+++#ifdef __cplusplus+extern "C"+{+#endif /* __cplusplus */+++typedef struct {+    double samplingPeriod;+    double measurementStartTime;+    double averageLoad;+} PaUtilCpuLoadMeasurer; /**< @todo need better name than measurer */++void PaUtil_InitializeCpuLoadMeasurer( PaUtilCpuLoadMeasurer* measurer, double sampleRate );+void PaUtil_BeginCpuLoadMeasurement( PaUtilCpuLoadMeasurer* measurer );+void PaUtil_EndCpuLoadMeasurement( PaUtilCpuLoadMeasurer* measurer, unsigned long framesProcessed );+void PaUtil_ResetCpuLoadMeasurer( PaUtilCpuLoadMeasurer* measurer );+double PaUtil_GetCpuLoad( PaUtilCpuLoadMeasurer* measurer );+++#ifdef __cplusplus+}+#endif /* __cplusplus */     +#endif /* PA_CPULOAD_H */
+ portaudio/src/common/pa_debugprint.h view
@@ -0,0 +1,149 @@+#ifndef PA_LOG_H
+#define PA_LOG_H
+/*
+ * Log file redirector function
+ * Copyright (c) 1999-2006 Ross Bencina, Phil Burk
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * The text above constitutes the entire PortAudio license; however,
+ * the PortAudio community also makes the following non-binding requests:
+ *
+ * Any person wishing to distribute modifications to the Software is
+ * requested to send the modifications to the original developer so that
+ * they can be incorporated into the canonical version. It is also
+ * requested that these non-binding requests be included along with the
+ * license above.
+ */
+
+/** @file
+ @ingroup common_src
+*/
+
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+
+
+void PaUtil_DebugPrint( const char *format, ... );
+
+
+/*
+    The basic format for log messages is described below. If you need to
+    add any log messages, please follow this format.
+
+    Function entry (void function):
+
+        "FunctionName called.\n"
+
+    Function entry (non void function):
+
+        "FunctionName called:\n"
+        "\tParam1Type param1: param1Value\n"
+        "\tParam2Type param2: param2Value\n"      (etc...)
+
+
+    Function exit (no return value):
+
+        "FunctionName returned.\n"
+
+    Function exit (simple return value):
+
+        "FunctionName returned:\n"
+        "\tReturnType: returnValue\n"
+
+    If the return type is an error code, the error text is displayed in ()
+
+    If the return type is not an error code, but has taken a special value
+    because an error occurred, then the reason for the error is shown in []
+
+    If the return type is a struct ptr, the struct is dumped.
+
+    See the code below for examples
+*/
+
+/** PA_DEBUG() provides a simple debug message printing facility. The macro
+ passes it's argument to a printf-like function called PaUtil_DebugPrint()
+ which prints to stderr and always flushes the stream after printing.
+ Because preprocessor macros cannot directly accept variable length argument
+ lists, calls to the macro must include an additional set of parenthesis, eg:
+ PA_DEBUG(("errorno: %d", 1001 ));
+*/
+
+
+#ifdef PA_ENABLE_DEBUG_OUTPUT
+#define PA_DEBUG(x) PaUtil_DebugPrint x ;
+#else
+#define PA_DEBUG(x)
+#endif
+
+
+#ifdef PA_LOG_API_CALLS
+#define PA_LOGAPI(x) PaUtil_DebugPrint x 
+
+#define PA_LOGAPI_ENTER(functionName) PaUtil_DebugPrint( functionName " called.\n" )
+
+#define PA_LOGAPI_ENTER_PARAMS(functionName) PaUtil_DebugPrint( functionName " called:\n" )
+
+#define PA_LOGAPI_EXIT(functionName) PaUtil_DebugPrint( functionName " returned.\n" )
+
+#define PA_LOGAPI_EXIT_PAERROR( functionName, result ) \
+	PaUtil_DebugPrint( functionName " returned:\n" ); \
+	PaUtil_DebugPrint("\tPaError: %d ( %s )\n", result, Pa_GetErrorText( result ) )
+
+#define PA_LOGAPI_EXIT_T( functionName, resultFormatString, result ) \
+	PaUtil_DebugPrint( functionName " returned:\n" ); \
+	PaUtil_DebugPrint("\t" resultFormatString "\n", result )
+
+#define PA_LOGAPI_EXIT_PAERROR_OR_T_RESULT( functionName, positiveResultFormatString, result ) \
+	PaUtil_DebugPrint( functionName " returned:\n" ); \
+	if( result > 0 ) \
+        PaUtil_DebugPrint("\t" positiveResultFormatString "\n", result ); \
+    else \
+        PaUtil_DebugPrint("\tPaError: %d ( %s )\n", result, Pa_GetErrorText( result ) )
+#else
+#define PA_LOGAPI(x)
+#define PA_LOGAPI_ENTER(functionName)
+#define PA_LOGAPI_ENTER_PARAMS(functionName)
+#define PA_LOGAPI_EXIT(functionName)
+#define PA_LOGAPI_EXIT_PAERROR( functionName, result )
+#define PA_LOGAPI_EXIT_T( functionName, resultFormatString, result )
+#define PA_LOGAPI_EXIT_PAERROR_OR_T_RESULT( functionName, positiveResultFormatString, result )
+#endif
+
+    
+typedef void (*PaUtilLogCallback ) (const char *log);
+
+/**
+    Install user provided log function
+*/
+void PaUtil_SetDebugPrintFunction(PaUtilLogCallback  cb);
+
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+#endif /* PA_LOG_H */
+ portaudio/src/common/pa_dither.h view
@@ -0,0 +1,106 @@+#ifndef PA_DITHER_H+#define PA_DITHER_H+/*+ * $Id: pa_dither.h 1418 2009-10-12 21:00:53Z philburk $+ * Portable Audio I/O Library triangular dither generator+ *+ * Based on the Open Source API proposed by Ross Bencina+ * Copyright (c) 1999-2002 Phil Burk, Ross Bencina+ *+ * Permission is hereby granted, free of charge, to any person obtaining+ * a copy of this software and associated documentation files+ * (the "Software"), to deal in the Software without restriction,+ * including without limitation the rights to use, copy, modify, merge,+ * publish, distribute, sublicense, and/or sell copies of the Software,+ * and to permit persons to whom the Software is furnished to do so,+ * subject to the following conditions:+ *+ * The above copyright notice and this permission notice shall be+ * included in all copies or substantial portions of the Software.+ *+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.+ */++/*+ * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests:+ *+ * Any person wishing to distribute modifications to the Software is+ * requested to send the modifications to the original developer so that+ * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above.+ */++/** @file+ @ingroup common_src++ @brief Functions for generating dither noise+*/++#include "pa_types.h"+++#ifdef __cplusplus+extern "C"+{+#endif /* __cplusplus */++/* Note that the linear congruential algorithm requires 32 bit integers+ * because it uses arithmetic overflow. So use PaUint32 instead of+ * unsigned long so it will work on 64 bit systems.+ */++/** @brief State needed to generate a dither signal */+typedef struct PaUtilTriangularDitherGenerator{+    PaUint32 previous;+    PaUint32 randSeed1;+    PaUint32 randSeed2;+} PaUtilTriangularDitherGenerator;+++/** @brief Initialize dither state */+void PaUtil_InitializeTriangularDitherState( PaUtilTriangularDitherGenerator *ditherState );+++/**+ @brief Calculate 2 LSB dither signal with a triangular distribution.+ Ranged for adding to a 1 bit right-shifted 32 bit integer+ prior to >>15. eg:+<pre>+    signed long in = *+    signed long dither = PaUtil_Generate16BitTriangularDither( ditherState );+    signed short out = (signed short)(((in>>1) + dither) >> 15);+</pre>+ @return+ A signed 32-bit integer with a range of +32767 to -32768+*/+PaInt32 PaUtil_Generate16BitTriangularDither( PaUtilTriangularDitherGenerator *ditherState );+++/**+ @brief Calculate 2 LSB dither signal with a triangular distribution.+ Ranged for adding to a pre-scaled float.+<pre>+    float in = *+    float dither = PaUtil_GenerateFloatTriangularDither( ditherState );+    // use smaller scaler to prevent overflow when we add the dither+    signed short out = (signed short)(in*(32766.0f) + dither );+</pre>+ @return+ A float with a range of -2.0 to +1.99999.+*/+float PaUtil_GenerateFloatTriangularDither( PaUtilTriangularDitherGenerator *ditherState );++++#ifdef __cplusplus+}+#endif /* __cplusplus */+#endif /* PA_DITHER_H */
+ portaudio/src/common/pa_endianness.h view
@@ -0,0 +1,145 @@+#ifndef PA_ENDIANNESS_H+#define PA_ENDIANNESS_H+/*+ * $Id: pa_endianness.h 1324 2008-01-27 02:03:30Z bjornroche $+ * Portable Audio I/O Library current platform endianness macros+ *+ * Based on the Open Source API proposed by Ross Bencina+ * Copyright (c) 1999-2002 Phil Burk, Ross Bencina+ *+ * Permission is hereby granted, free of charge, to any person obtaining+ * a copy of this software and associated documentation files+ * (the "Software"), to deal in the Software without restriction,+ * including without limitation the rights to use, copy, modify, merge,+ * publish, distribute, sublicense, and/or sell copies of the Software,+ * and to permit persons to whom the Software is furnished to do so,+ * subject to the following conditions:+ *+ * The above copyright notice and this permission notice shall be+ * included in all copies or substantial portions of the Software.+ *+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.+ */++/*+ * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests:+ *+ * Any person wishing to distribute modifications to the Software is+ * requested to send the modifications to the original developer so that+ * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above.+ */++/** @file+ @ingroup common_src++ @brief Configure endianness symbols for the target processor.++ Arrange for either the PA_LITTLE_ENDIAN or PA_BIG_ENDIAN preprocessor symbols+ to be defined. The one that is defined reflects the endianness of the target+ platform and may be used to implement conditional compilation of byte-order+ dependent code.++ If either PA_LITTLE_ENDIAN or PA_BIG_ENDIAN is defined already, then no attempt+ is made to override that setting. This may be useful if you have a better way+ of determining the platform's endianness. The autoconf mechanism uses this for+ example.++ A PA_VALIDATE_ENDIANNESS macro is provided to compare the compile time+ and runtime endiannes and raise an assertion if they don't match.+*/+++#ifdef __cplusplus+extern "C"+{+#endif /* __cplusplus */++/* If this is an apple, we need to do detect endianness this way */+#if defined(__APPLE__)+    /* we need to do some endian detection that is sensitive to harware arch */+    #if defined(__LITTLE_ENDIAN__)+       #if !defined( PA_LITTLE_ENDIAN )+          #define PA_LITTLE_ENDIAN+       #endif+       #if defined( PA_BIG_ENDIAN )+          #undef PA_BIG_ENDIAN+       #endif+    #else+       #if !defined( PA_BIG_ENDIAN )+          #define PA_BIG_ENDIAN+       #endif+       #if defined( PA_LITTLE_ENDIAN )+          #undef PA_LITTLE_ENDIAN+       #endif+    #endif+#else+    /* this is not an apple, so first check the existing defines, and, failing that,+       detect well-known architechtures. */++    #if defined(PA_LITTLE_ENDIAN) || defined(PA_BIG_ENDIAN)+        /* endianness define has been set externally, such as by autoconf */++        #if defined(PA_LITTLE_ENDIAN) && defined(PA_BIG_ENDIAN)+        #error both PA_LITTLE_ENDIAN and PA_BIG_ENDIAN have been defined externally to pa_endianness.h - only one endianness at a time please+        #endif++    #else+        /* endianness define has not been set externally */++        /* set PA_LITTLE_ENDIAN or PA_BIG_ENDIAN by testing well known platform specific defines */++        #if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__) || defined(LITTLE_ENDIAN) || defined(__i386) || defined(_M_IX86) || defined(__x86_64__)+            #define PA_LITTLE_ENDIAN /* win32, assume intel byte order */+        #else+            #define PA_BIG_ENDIAN+        #endif+    #endif++    #if !defined(PA_LITTLE_ENDIAN) && !defined(PA_BIG_ENDIAN)+        /*+         If the following error is raised, you either need to modify the code above+         to automatically determine the endianness from other symbols defined on your+         platform, or define either PA_LITTLE_ENDIAN or PA_BIG_ENDIAN externally.+        */+        #error pa_endianness.h was unable to automatically determine the endianness of the target platform+    #endif++#endif+++/* PA_VALIDATE_ENDIANNESS compares the compile time and runtime endianness,+ and raises an assertion if they don't match. <assert.h> must be included in+ the context in which this macro is used.+*/+#if defined(NDEBUG)+    #define PA_VALIDATE_ENDIANNESS+#else+    #if defined(PA_LITTLE_ENDIAN)+        #define PA_VALIDATE_ENDIANNESS \+        { \+            const long nativeOne = 1; \+            assert( "PortAudio: compile time and runtime endianness don't match" && (((char *)&nativeOne)[0]) == 1 ); \+        }+    #elif defined(PA_BIG_ENDIAN)+        #define PA_VALIDATE_ENDIANNESS \+        { \+            const long nativeOne = 1; \+            assert( "PortAudio: compile time and runtime endianness don't match" && (((char *)&nativeOne)[0]) == 0 ); \+        }+    #endif+#endif+++#ifdef __cplusplus+}+#endif /* __cplusplus */+#endif /* PA_ENDIANNESS_H */
+ portaudio/src/common/pa_hostapi.h view
@@ -0,0 +1,362 @@+#ifndef PA_HOSTAPI_H+#define PA_HOSTAPI_H+/*+ * $Id: pa_hostapi.h 1880 2012-12-04 18:39:48Z rbencina $+ * Portable Audio I/O Library+ * host api representation+ *+ * Based on the Open Source API proposed by Ross Bencina+ * Copyright (c) 1999-2008 Ross Bencina, Phil Burk+ *+ * Permission is hereby granted, free of charge, to any person obtaining+ * a copy of this software and associated documentation files+ * (the "Software"), to deal in the Software without restriction,+ * including without limitation the rights to use, copy, modify, merge,+ * publish, distribute, sublicense, and/or sell copies of the Software,+ * and to permit persons to whom the Software is furnished to do so,+ * subject to the following conditions:+ *+ * The above copyright notice and this permission notice shall be+ * included in all copies or substantial portions of the Software.+ *+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.+ */++/*+ * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests:+ *+ * Any person wishing to distribute modifications to the Software is+ * requested to send the modifications to the original developer so that+ * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above.+ */++/** @file+ @ingroup common_src++ @brief Interfaces and representation structures used by pa_front.c + to manage and communicate with host API implementations.+*/++#include "portaudio.h"++/**+The PA_NO_* host API macros are now deprecated in favor of PA_USE_* macros.+PA_USE_* indicates whether a particular host API will be initialized by PortAudio.+An undefined or 0 value indicates that the host API will not be used. A value of 1 +indicates that the host API will be used. PA_USE_* macros should be left undefined +or defined to either 0 or 1.++The code below ensures that PA_USE_* macros are always defined and have value+0 or 1. Undefined symbols are defaulted to 0. Symbols that are neither 0 nor 1 +are defaulted to 1.+*/++#ifndef PA_USE_SKELETON+#define PA_USE_SKELETON 0+#elif (PA_USE_SKELETON != 0) && (PA_USE_SKELETON != 1)+#undef PA_USE_SKELETON+#define PA_USE_SKELETON 1+#endif ++#if defined(PA_NO_ASIO) || defined(PA_NO_DS) || defined(PA_NO_WMME) || defined(PA_NO_WASAPI) || defined(PA_NO_WDMKS)+#error "Portaudio: PA_NO_<APINAME> is no longer supported, please remove definition and use PA_USE_<APINAME> instead"+#endif++#ifndef PA_USE_ASIO+#define PA_USE_ASIO 0+#elif (PA_USE_ASIO != 0) && (PA_USE_ASIO != 1)+#undef PA_USE_ASIO+#define PA_USE_ASIO 1+#endif ++#ifndef PA_USE_DS+#define PA_USE_DS 0+#elif (PA_USE_DS != 0) && (PA_USE_DS != 1)+#undef PA_USE_DS+#define PA_USE_DS 1+#endif ++#ifndef PA_USE_WMME+#define PA_USE_WMME 0+#elif (PA_USE_WMME != 0) && (PA_USE_WMME != 1)+#undef PA_USE_WMME+#define PA_USE_WMME 1+#endif ++#ifndef PA_USE_WASAPI+#define PA_USE_WASAPI 0+#elif (PA_USE_WASAPI != 0) && (PA_USE_WASAPI != 1)+#undef PA_USE_WASAPI+#define PA_USE_WASAPI 1+#endif ++#ifndef PA_USE_WDMKS+#define PA_USE_WDMKS 0+#elif (PA_USE_WDMKS != 0) && (PA_USE_WDMKS != 1)+#undef PA_USE_WDMKS+#define PA_USE_WDMKS 1+#endif ++/* Set default values for Unix based APIs. */+#if defined(PA_NO_OSS) || defined(PA_NO_ALSA) || defined(PA_NO_JACK) || defined(PA_NO_COREAUDIO) || defined(PA_NO_SGI) || defined(PA_NO_ASIHPI)+#error "Portaudio: PA_NO_<APINAME> is no longer supported, please remove definition and use PA_USE_<APINAME> instead"+#endif++#ifndef PA_USE_OSS+#define PA_USE_OSS 0+#elif (PA_USE_OSS != 0) && (PA_USE_OSS != 1)+#undef PA_USE_OSS+#define PA_USE_OSS 1+#endif ++#ifndef PA_USE_ALSA+#define PA_USE_ALSA 0+#elif (PA_USE_ALSA != 0) && (PA_USE_ALSA != 1)+#undef PA_USE_ALSA+#define PA_USE_ALSA 1+#endif ++#ifndef PA_USE_JACK+#define PA_USE_JACK 0+#elif (PA_USE_JACK != 0) && (PA_USE_JACK != 1)+#undef PA_USE_JACK+#define PA_USE_JACK 1+#endif ++#ifndef PA_USE_SGI+#define PA_USE_SGI 0+#elif (PA_USE_SGI != 0) && (PA_USE_SGI != 1)+#undef PA_USE_SGI+#define PA_USE_SGI 1+#endif ++#ifndef PA_USE_COREAUDIO+#define PA_USE_COREAUDIO 0+#elif (PA_USE_COREAUDIO != 0) && (PA_USE_COREAUDIO != 1)+#undef PA_USE_COREAUDIO+#define PA_USE_COREAUDIO 1+#endif ++#ifndef PA_USE_ASIHPI+#define PA_USE_ASIHPI 0+#elif (PA_USE_ASIHPI != 0) && (PA_USE_ASIHPI != 1)+#undef PA_USE_ASIHPI+#define PA_USE_ASIHPI 1+#endif ++#ifdef __cplusplus+extern "C"+{+#endif /* __cplusplus */+++/** **FOR THE USE OF pa_front.c ONLY**+    Do NOT use fields in this structure, they my change at any time.+    Use functions defined in pa_util.h if you think you need functionality+    which can be derived from here.+*/+typedef struct PaUtilPrivatePaFrontHostApiInfo {+++    unsigned long baseDeviceIndex;+}PaUtilPrivatePaFrontHostApiInfo;+++/** The common header for all data structures whose pointers are passed through+ the hostApiSpecificStreamInfo field of the PaStreamParameters structure.+ Note that in order to keep the public PortAudio interface clean, this structure+ is not used explicitly when declaring hostApiSpecificStreamInfo data structures.+ However, some code in pa_front depends on the first 3 members being equivalent+ with this structure.+ @see PaStreamParameters+*/+typedef struct PaUtilHostApiSpecificStreamInfoHeader+{+    unsigned long size;             /**< size of whole structure including this header */+    PaHostApiTypeId hostApiType;    /**< host API for which this data is intended */+    unsigned long version;          /**< structure version */+} PaUtilHostApiSpecificStreamInfoHeader;++++/** A structure representing the interface to a host API. Contains both+ concrete data and pointers to functions which implement the interface.+*/+typedef struct PaUtilHostApiRepresentation {+    PaUtilPrivatePaFrontHostApiInfo privatePaFrontInfo;++    /** The host api implementation should populate the info field. In the+        case of info.defaultInputDevice and info.defaultOutputDevice the+        values stored should be 0 based indices within the host api's own+        device index range (0 to deviceCount). These values will be converted+        to global device indices by pa_front after PaUtilHostApiInitializer()+        returns.+    */+    PaHostApiInfo info;++    PaDeviceInfo** deviceInfos;++    /**+        (*Terminate)() is guaranteed to be called with a valid <hostApi>+        parameter, which was previously returned from the same implementation's+        initializer.+    */+    void (*Terminate)( struct PaUtilHostApiRepresentation *hostApi );++    /**+        The inputParameters and outputParameters pointers should not be saved+        as they will not remain valid after OpenStream is called.++        +        The following guarantees are made about parameters to (*OpenStream)():++            [NOTE: the following list up to *END PA FRONT VALIDATIONS* should be+                kept in sync with the one for ValidateOpenStreamParameters and+                Pa_OpenStream in pa_front.c]+                +            PaHostApiRepresentation *hostApi+                - is valid for this implementation++            PaStream** stream+                - is non-null++            - at least one of inputParameters & outputParmeters is valid (not NULL)++            - if inputParameters & outputParmeters are both valid, that+                inputParameters->device & outputParmeters->device  both use the same host api+ +            PaDeviceIndex inputParameters->device+                - is within range (0 to Pa_CountDevices-1) Or:+                - is paUseHostApiSpecificDeviceSpecification and+                    inputParameters->hostApiSpecificStreamInfo is non-NULL and refers+                    to a valid host api++            int inputParameters->numChannels+                - if inputParameters->device is not paUseHostApiSpecificDeviceSpecification, numInputChannels is > 0+                - upper bound is NOT validated against device capabilities+ +            PaSampleFormat inputParameters->sampleFormat+                - is one of the sample formats defined in portaudio.h++            void *inputParameters->hostApiSpecificStreamInfo+                - if supplied its hostApi field matches the input device's host Api+ +            PaDeviceIndex outputParmeters->device+                - is within range (0 to Pa_CountDevices-1)+ +            int outputParmeters->numChannels+                - if inputDevice is valid, numInputChannels is > 0+                - upper bound is NOT validated against device capabilities+ +            PaSampleFormat outputParmeters->sampleFormat+                - is one of the sample formats defined in portaudio.h+        +            void *outputParmeters->hostApiSpecificStreamInfo+                - if supplied its hostApi field matches the output device's host Api+ +            double sampleRate+                - is not an 'absurd' rate (less than 1000. or greater than 384000.)+                - sampleRate is NOT validated against device capabilities+ +            PaStreamFlags streamFlags+                - unused platform neutral flags are zero+                - paNeverDropInput is only used for full-duplex callback streams+                    with variable buffer size (paFramesPerBufferUnspecified)++            [*END PA FRONT VALIDATIONS*]+++        The following validations MUST be performed by (*OpenStream)():++            - check that input device can support numInputChannels+            +            - check that input device can support inputSampleFormat, or that+                we have the capability to convert from outputSampleFormat to+                a native format++            - if inputStreamInfo is supplied, validate its contents,+                or return an error if no inputStreamInfo is expected++            - check that output device can support numOutputChannels+            +            - check that output device can support outputSampleFormat, or that+                we have the capability to convert from outputSampleFormat to+                a native format++            - if outputStreamInfo is supplied, validate its contents,+                or return an error if no outputStreamInfo is expected++            - if a full duplex stream is requested, check that the combination+                of input and output parameters is supported++            - check that the device supports sampleRate++            - alter sampleRate to a close allowable rate if necessary++            - validate inputLatency and outputLatency++            - validate any platform specific flags, if flags are supplied they+                must be valid.+    */+    PaError (*OpenStream)( struct PaUtilHostApiRepresentation *hostApi,+                           PaStream** stream,+                           const PaStreamParameters *inputParameters,+                           const PaStreamParameters *outputParameters,+                           double sampleRate,+                           unsigned long framesPerCallback,+                           PaStreamFlags streamFlags,+                           PaStreamCallback *streamCallback,+                           void *userData );+++    PaError (*IsFormatSupported)( struct PaUtilHostApiRepresentation *hostApi,+                                  const PaStreamParameters *inputParameters,+                                  const PaStreamParameters *outputParameters,+                                  double sampleRate );+} PaUtilHostApiRepresentation;+++/** Prototype for the initialization function which must be implemented by every+ host API.+ + This function should only return an error other than paNoError if it encounters + an unexpected and fatal error (memory allocation error for example). In general, + there may be conditions under which it returns a NULL interface pointer and also + returns paNoError. For example, if the ASIO implementation detects that ASIO is + not installed, it should return a NULL interface, and paNoError.++ @see paHostApiInitializers+*/+typedef PaError PaUtilHostApiInitializer( PaUtilHostApiRepresentation**, PaHostApiIndex );+++/** paHostApiInitializers is a NULL-terminated array of host API initialization+ functions. These functions are called by pa_front.c to initialize the host APIs+ when the client calls Pa_Initialize(). + + The initialization functions are invoked in order.++ The first successfully initialized host API that has a default input *or* output + device is used as the default PortAudio host API. This is based on the logic that+ there is only one default host API, and it must contain the default input and output+ devices (if defined).++ There is a platform specific file that defines paHostApiInitializers for that+ platform, pa_win/pa_win_hostapis.c contains the Win32 definitions for example.+*/+extern PaUtilHostApiInitializer *paHostApiInitializers[];+++#ifdef __cplusplus+}+#endif /* __cplusplus */+#endif /* PA_HOSTAPI_H */
+ portaudio/src/common/pa_memorybarrier.h view
@@ -0,0 +1,128 @@+/*+ * $Id: pa_memorybarrier.h 1240 2007-07-17 13:05:07Z bjornroche $+ * Portable Audio I/O Library+ * Memory barrier utilities+ *+ * Author: Bjorn Roche, XO Audio, LLC+ *+ * This program uses the PortAudio Portable Audio Library.+ * For more information see: http://www.portaudio.com+ * Copyright (c) 1999-2000 Ross Bencina and Phil Burk+ *+ * Permission is hereby granted, free of charge, to any person obtaining+ * a copy of this software and associated documentation files+ * (the "Software"), to deal in the Software without restriction,+ * including without limitation the rights to use, copy, modify, merge,+ * publish, distribute, sublicense, and/or sell copies of the Software,+ * and to permit persons to whom the Software is furnished to do so,+ * subject to the following conditions:+ *+ * The above copyright notice and this permission notice shall be+ * included in all copies or substantial portions of the Software.+ *+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.+ */++/*+ * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests:+ *+ * Any person wishing to distribute modifications to the Software is+ * requested to send the modifications to the original developer so that+ * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above.+ */++/**+ @file pa_memorybarrier.h+ @ingroup common_src+*/++/****************+ * Some memory barrier primitives based on the system.+ * right now only OS X, FreeBSD, and Linux are supported. In addition to providing+ * memory barriers, these functions should ensure that data cached in registers+ * is written out to cache where it can be snooped by other CPUs. (ie, the volatile+ * keyword should not be required)+ *+ * the primitives that must be defined are:+ *+ * PaUtil_FullMemoryBarrier()+ * PaUtil_ReadMemoryBarrier()+ * PaUtil_WriteMemoryBarrier()+ *+ ****************/++#if defined(__APPLE__)+#   include <libkern/OSAtomic.h>+    /* Here are the memory barrier functions. Mac OS X only provides+       full memory barriers, so the three types of barriers are the same,+       however, these barriers are superior to compiler-based ones. */+#   define PaUtil_FullMemoryBarrier()  OSMemoryBarrier()+#   define PaUtil_ReadMemoryBarrier()  OSMemoryBarrier()+#   define PaUtil_WriteMemoryBarrier() OSMemoryBarrier()+#elif defined(__GNUC__)+    /* GCC >= 4.1 has built-in intrinsics. We'll use those */+#   if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)+#      define PaUtil_FullMemoryBarrier()  __sync_synchronize()+#      define PaUtil_ReadMemoryBarrier()  __sync_synchronize()+#      define PaUtil_WriteMemoryBarrier() __sync_synchronize()+    /* as a fallback, GCC understands volatile asm and "memory" to mean it+     * should not reorder memory read/writes */+    /* Note that it is not clear that any compiler actually defines __PPC__,+     * it can probably removed safely. */+#   elif defined( __ppc__ ) || defined( __powerpc__) || defined( __PPC__ )+#      define PaUtil_FullMemoryBarrier()  asm volatile("sync":::"memory")+#      define PaUtil_ReadMemoryBarrier()  asm volatile("sync":::"memory")+#      define PaUtil_WriteMemoryBarrier() asm volatile("sync":::"memory")+#   elif defined( __i386__ ) || defined( __i486__ ) || defined( __i586__ ) || \+         defined( __i686__ ) || defined( __x86_64__ )+#      define PaUtil_FullMemoryBarrier()  asm volatile("mfence":::"memory")+#      define PaUtil_ReadMemoryBarrier()  asm volatile("lfence":::"memory")+#      define PaUtil_WriteMemoryBarrier() asm volatile("sfence":::"memory")+#   else+#      ifdef ALLOW_SMP_DANGERS+#         warning Memory barriers not defined on this system or system unknown+#         warning For SMP safety, you should fix this.+#         define PaUtil_FullMemoryBarrier()+#         define PaUtil_ReadMemoryBarrier()+#         define PaUtil_WriteMemoryBarrier()+#      else+#         error Memory barriers are not defined on this system. You can still compile by defining ALLOW_SMP_DANGERS, but SMP safety will not be guaranteed.+#      endif+#   endif+#elif (_MSC_VER >= 1400) && !defined(_WIN32_WCE)+#   include <intrin.h>+#   pragma intrinsic(_ReadWriteBarrier)+#   pragma intrinsic(_ReadBarrier)+#   pragma intrinsic(_WriteBarrier)+/* note that MSVC intrinsics _ReadWriteBarrier(), _ReadBarrier(), _WriteBarrier() are just compiler barriers *not* memory barriers */+#   define PaUtil_FullMemoryBarrier()  _ReadWriteBarrier()+#   define PaUtil_ReadMemoryBarrier()  _ReadBarrier()+#   define PaUtil_WriteMemoryBarrier() _WriteBarrier()+#elif defined(_WIN32_WCE)+#   define PaUtil_FullMemoryBarrier()+#   define PaUtil_ReadMemoryBarrier()+#   define PaUtil_WriteMemoryBarrier()+#elif defined(_MSC_VER) || defined(__BORLANDC__)+#   define PaUtil_FullMemoryBarrier()  _asm { lock add    [esp], 0 }+#   define PaUtil_ReadMemoryBarrier()  _asm { lock add    [esp], 0 }+#   define PaUtil_WriteMemoryBarrier() _asm { lock add    [esp], 0 }+#else+#   ifdef ALLOW_SMP_DANGERS+#      warning Memory barriers not defined on this system or system unknown+#      warning For SMP safety, you should fix this.+#      define PaUtil_FullMemoryBarrier()+#      define PaUtil_ReadMemoryBarrier()+#      define PaUtil_WriteMemoryBarrier()+#   else+#      error Memory barriers are not defined on this system. You can still compile by defining ALLOW_SMP_DANGERS, but SMP safety will not be guaranteed.+#   endif+#endif
+ portaudio/src/common/pa_process.h view
@@ -0,0 +1,754 @@+#ifndef PA_PROCESS_H+#define PA_PROCESS_H+/*+ * $Id: pa_process.h 1668 2011-05-02 17:07:11Z rossb $+ * Portable Audio I/O Library callback buffer processing adapters+ *+ * Based on the Open Source API proposed by Ross Bencina+ * Copyright (c) 1999-2002 Phil Burk, Ross Bencina+ *+ * Permission is hereby granted, free of charge, to any person obtaining+ * a copy of this software and associated documentation files+ * (the "Software"), to deal in the Software without restriction,+ * including without limitation the rights to use, copy, modify, merge,+ * publish, distribute, sublicense, and/or sell copies of the Software,+ * and to permit persons to whom the Software is furnished to do so,+ * subject to the following conditions:+ *+ * The above copyright notice and this permission notice shall be+ * included in all copies or substantial portions of the Software.+ *+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.+ */++/*+ * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests:+ *+ * Any person wishing to distribute modifications to the Software is+ * requested to send the modifications to the original developer so that+ * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above.+ */+ +/** @file+ @ingroup common_src++ @brief Buffer Processor prototypes. A Buffer Processor performs buffer length+ adaption, coordinates sample format conversion, and interleaves/deinterleaves+ channels.++ <h3>Overview</h3>++ The "Buffer Processor" (PaUtilBufferProcessor) manages conversion of audio+ data from host buffers to user buffers and back again. Where required, the+ buffer processor takes care of converting between host and user sample formats,+ interleaving and deinterleaving multichannel buffers, and adapting between host+ and user buffers with different lengths. The buffer processor may be used with+ full and half duplex streams, for both callback streams and blocking read/write+ streams.++ One of the important capabilities provided by the buffer processor is+ the ability to adapt between user and host buffer sizes of different lengths+ with minimum latency. Although this task is relatively easy to perform when+ the host buffer size is an integer multiple of the user buffer size, the+ problem is more complicated when this is not the case - especially for+ full-duplex callback streams. Where necessary the adaption is implemented by+ internally buffering some input and/or output data. The buffer adation+ algorithm used by the buffer processor was originally implemented by+ Stephan Letz for the ASIO version of PortAudio, and is described in his+ Callback_adaption_.pdf which is included in the distribution.++ The buffer processor performs sample conversion using the functions provided+ by pa_converters.c.++ The following sections provide an overview of how to use the buffer processor.+ Interested readers are advised to consult the host API implementations for+ examples of buffer processor usage.+ ++ <h4>Initialization, resetting and termination</h4>++ When a stream is opened, the buffer processor should be initialized using+ PaUtil_InitializeBufferProcessor. This function initializes internal state+ and allocates temporary buffers as neccesary according to the supplied+ configuration parameters. Some of the parameters correspond to those requested+ by the user in their call to Pa_OpenStream(), others reflect the requirements+ of the host API implementation - they indicate host buffer sizes, formats,+ and the type of buffering which the Host API uses. The buffer processor should+ be initialized for callback streams and blocking read/write streams.++ Call PaUtil_ResetBufferProcessor to clear any sample data which is present+ in the buffer processor before starting to use it (for example when+ Pa_StartStream is called).++ When the buffer processor is no longer used call+ PaUtil_TerminateBufferProcessor.++ + <h4>Using the buffer processor for a callback stream</h4>++ The buffer processor's role in a callback stream is to take host input buffers+ process them with the stream callback, and fill host output buffers. For a+ full duplex stream, the buffer processor handles input and output simultaneously+ due to the requirements of the minimum-latency buffer adation algorithm.++ When a host buffer becomes available, the implementation should call+ the buffer processor to process the buffer. The buffer processor calls the+ stream callback to consume and/or produce audio data as necessary. The buffer+ processor will convert sample formats, interleave/deinterleave channels,+ and slice or chunk the data to the appropriate buffer lengths according to+ the requirements of the stream callback and the host API.++ To process a host buffer (or a pair of host buffers for a full-duplex stream)+ use the following calling sequence:++ -# Call PaUtil_BeginBufferProcessing+ -# For a stream which takes input:+    - Call PaUtil_SetInputFrameCount with the number of frames in the host input+        buffer.+    - Call one of the following functions one or more times to tell the+        buffer processor about the host input buffer(s): PaUtil_SetInputChannel,+        PaUtil_SetInterleavedInputChannels, PaUtil_SetNonInterleavedInputChannel.+        Which function you call will depend on whether the host buffer(s) are+        interleaved or not.+    - If the available host data is split accross two buffers (for example a+        data range at the end of a circular buffer and another range at the+        beginning of the circular buffer), also call+        PaUtil_Set2ndInputFrameCount, PaUtil_Set2ndInputChannel,+        PaUtil_Set2ndInterleavedInputChannels,+        PaUtil_Set2ndNonInterleavedInputChannel as necessary to tell the buffer+        processor about the second buffer.+ -# For a stream which generates output:+    - Call PaUtil_SetOutputFrameCount with the number of frames in the host+        output buffer.+    - Call one of the following functions one or more times to tell the+        buffer processor about the host output buffer(s): PaUtil_SetOutputChannel,+        PaUtil_SetInterleavedOutputChannels, PaUtil_SetNonInterleavedOutputChannel.+        Which function you call will depend on whether the host buffer(s) are+        interleaved or not.+    - If the available host output buffer space is split accross two buffers+        (for example a data range at the end of a circular buffer and another+        range at the beginning of the circular buffer), call+        PaUtil_Set2ndOutputFrameCount, PaUtil_Set2ndOutputChannel,+        PaUtil_Set2ndInterleavedOutputChannels,+        PaUtil_Set2ndNonInterleavedOutputChannel as necessary to tell the buffer+        processor about the second buffer.+ -# Call PaUtil_EndBufferProcessing, this function performs the actual data+    conversion and processing.+++ <h4>Using the buffer processor for a blocking read/write stream</h4>++ Blocking read/write streams use the buffer processor to convert and copy user+ output data to a host buffer, and to convert and copy host input data to+ the user's buffer. The buffer processor does not perform any buffer adaption.+ When using the buffer processor in a blocking read/write stream the input and+ output conversion are performed separately by the PaUtil_CopyInput and+ PaUtil_CopyOutput functions.++ To copy data from a host input buffer to the buffer(s) which the user supplies+ to Pa_ReadStream, use the following calling sequence.++ - Repeat the following three steps until the user buffer(s) have been filled+    with samples from the host input buffers:+     -# Call PaUtil_SetInputFrameCount with the number of frames in the host+        input buffer.+     -# Call one of the following functions one or more times to tell the+        buffer processor about the host input buffer(s): PaUtil_SetInputChannel,+        PaUtil_SetInterleavedInputChannels, PaUtil_SetNonInterleavedInputChannel.+        Which function you call will depend on whether the host buffer(s) are+        interleaved or not.+     -# Call PaUtil_CopyInput with the user buffer pointer (or a copy of the+        array of buffer pointers for a non-interleaved stream) passed to+        Pa_ReadStream, along with the number of frames in the user buffer(s).+        Be careful to pass a <i>copy</i> of the user buffer pointers to+        PaUtil_CopyInput because PaUtil_CopyInput advances the pointers to+        the start of the next region to copy.+ - PaUtil_CopyInput will not copy more data than is available in the+    host buffer(s), so the above steps need to be repeated until the user+    buffer(s) are full.++ + To copy data to the host output buffer from the user buffers(s) supplied+ to Pa_WriteStream use the following calling sequence.++ - Repeat the following three steps until all frames from the user buffer(s)+    have been copied to the host API:+     -# Call PaUtil_SetOutputFrameCount with the number of frames in the host+        output buffer.+     -# Call one of the following functions one or more times to tell the+        buffer processor about the host output buffer(s): PaUtil_SetOutputChannel,+        PaUtil_SetInterleavedOutputChannels, PaUtil_SetNonInterleavedOutputChannel.+        Which function you call will depend on whether the host buffer(s) are+        interleaved or not.+     -# Call PaUtil_CopyOutput with the user buffer pointer (or a copy of the+        array of buffer pointers for a non-interleaved stream) passed to+        Pa_WriteStream, along with the number of frames in the user buffer(s).+        Be careful to pass a <i>copy</i> of the user buffer pointers to +        PaUtil_CopyOutput because PaUtil_CopyOutput advances the pointers to+        the start of the next region to copy.+ - PaUtil_CopyOutput will not copy more data than fits in the host buffer(s),+    so the above steps need to be repeated until all user data is copied.+*/+++#include "portaudio.h"+#include "pa_converters.h"+#include "pa_dither.h"++#ifdef __cplusplus+extern "C"+{+#endif /* __cplusplus */+++/** @brief Mode flag passed to PaUtil_InitializeBufferProcessor indicating the type+ of buffering that the host API uses.++ The mode used depends on whether the host API or the implementation manages+ the buffers, and how these buffers are used (scatter gather, circular buffer).+*/+typedef enum {+/** The host buffer size is a fixed known size. */+    paUtilFixedHostBufferSize,++/** The host buffer size may vary, but has a known maximum size. */+    paUtilBoundedHostBufferSize,++/** Nothing is known about the host buffer size. */+    paUtilUnknownHostBufferSize,++/** The host buffer size varies, and the client does not require the buffer+ processor to consume all of the input and fill all of the output buffer. This+ is useful when the implementation has access to the host API's circular buffer+ and only needs to consume/fill some of it, not necessarily all of it, with each+ call to the buffer processor. This is the only mode where+ PaUtil_EndBufferProcessing() may not consume the whole buffer.+*/+    paUtilVariableHostBufferSizePartialUsageAllowed+}PaUtilHostBufferSizeMode;+++/** @brief An auxilliary data structure used internally by the buffer processor+ to represent host input and output buffers. */+typedef struct PaUtilChannelDescriptor{+    void *data;+    unsigned int stride;  /**< stride in samples, not bytes */+}PaUtilChannelDescriptor;+++/** @brief The main buffer processor data structure.++ Allocate one of these, initialize it with PaUtil_InitializeBufferProcessor+ and terminate it with PaUtil_TerminateBufferProcessor.+*/+typedef struct {+    unsigned long framesPerUserBuffer;+    unsigned long framesPerHostBuffer;++    PaUtilHostBufferSizeMode hostBufferSizeMode;+    int useNonAdaptingProcess;+    int userOutputSampleFormatIsEqualToHost;+    int userInputSampleFormatIsEqualToHost;+    unsigned long framesPerTempBuffer;++    unsigned int inputChannelCount;+    unsigned int bytesPerHostInputSample;+    unsigned int bytesPerUserInputSample;+    int userInputIsInterleaved;+    PaUtilConverter *inputConverter;+    PaUtilZeroer *inputZeroer;+    +    unsigned int outputChannelCount;+    unsigned int bytesPerHostOutputSample;+    unsigned int bytesPerUserOutputSample;+    int userOutputIsInterleaved;+    PaUtilConverter *outputConverter;+    PaUtilZeroer *outputZeroer;++    unsigned long initialFramesInTempInputBuffer;+    unsigned long initialFramesInTempOutputBuffer;++    void *tempInputBuffer;          /**< used for slips, block adaption, and conversion. */+    void **tempInputBufferPtrs;     /**< storage for non-interleaved buffer pointers, NULL for interleaved user input */+    unsigned long framesInTempInputBuffer; /**< frames remaining in input buffer from previous adaption iteration */++    void *tempOutputBuffer;         /**< used for slips, block adaption, and conversion. */+    void **tempOutputBufferPtrs;    /**< storage for non-interleaved buffer pointers, NULL for interleaved user output */+    unsigned long framesInTempOutputBuffer; /**< frames remaining in input buffer from previous adaption iteration */++    PaStreamCallbackTimeInfo *timeInfo;++    PaStreamCallbackFlags callbackStatusFlags;++    int hostInputIsInterleaved;+    unsigned long hostInputFrameCount[2];+    PaUtilChannelDescriptor *hostInputChannels[2]; /**< pointers to arrays of channel descriptors.+                                                        pointers are NULL for half-duplex output processing.+                                                        hostInputChannels[i].data is NULL when the caller+                                                        calls PaUtil_SetNoInput()+                                                        */+    int hostOutputIsInterleaved;+    unsigned long hostOutputFrameCount[2];+    PaUtilChannelDescriptor *hostOutputChannels[2]; /**< pointers to arrays of channel descriptors.+                                                         pointers are NULL for half-duplex input processing.+                                                         hostOutputChannels[i].data is NULL when the caller+                                                         calls PaUtil_SetNoOutput()+                                                         */++    PaUtilTriangularDitherGenerator ditherGenerator;++    double samplePeriod;++    PaStreamCallback *streamCallback;+    void *userData;+} PaUtilBufferProcessor;+++/** @name Initialization, termination, resetting and info */+/*@{*/++/** Initialize a buffer processor's representation stored in a+ PaUtilBufferProcessor structure. Be sure to call+ PaUtil_TerminateBufferProcessor after finishing with a buffer processor.++ @param bufferProcessor The buffer processor structure to initialize.++ @param inputChannelCount The number of input channels as passed to+ Pa_OpenStream or 0 for an output-only stream.++ @param userInputSampleFormat Format of user input samples, as passed to+ Pa_OpenStream. This parameter is ignored for ouput-only streams.+ + @param hostInputSampleFormat Format of host input samples. This parameter is+ ignored for output-only streams. See note about host buffer interleave below.++ @param outputChannelCount The number of output channels as passed to+ Pa_OpenStream or 0 for an input-only stream.++ @param userOutputSampleFormat Format of user output samples, as passed to+ Pa_OpenStream. This parameter is ignored for input-only streams.+ + @param hostOutputSampleFormat Format of host output samples. This parameter is+ ignored for input-only streams. See note about host buffer interleave below.++ @param sampleRate Sample rate of the stream. The more accurate this is the+ better - it is used for updating time stamps when adapting buffers.+ + @param streamFlags Stream flags as passed to Pa_OpenStream, this parameter is+ used for selecting special sample conversion options such as clipping and+ dithering.+ + @param framesPerUserBuffer Number of frames per user buffer, as requested+ by the framesPerBuffer parameter to Pa_OpenStream. This parameter may be+ zero to indicate that the user will accept any (and varying) buffer sizes.++ @param framesPerHostBuffer Specifies the number of frames per host buffer+ for the fixed buffer size mode, and the maximum number of frames+ per host buffer for the bounded host buffer size mode. It is ignored for+ the other modes.++ @param hostBufferSizeMode A mode flag indicating the size variability of+ host buffers that will be passed to the buffer processor. See+ PaUtilHostBufferSizeMode for further details.+ + @param streamCallback The user stream callback passed to Pa_OpenStream.++ @param userData The user data field passed to Pa_OpenStream.+    + @note The interleave flag is ignored for host buffer formats. Host+ interleave is determined by the use of different SetInput and SetOutput+ functions.++ @return An error code indicating whether the initialization was successful.+ If the error code is not PaNoError, the buffer processor was not initialized+ and should not be used.+ + @see Pa_OpenStream, PaUtilHostBufferSizeMode, PaUtil_TerminateBufferProcessor+*/+PaError PaUtil_InitializeBufferProcessor( PaUtilBufferProcessor* bufferProcessor,+            int inputChannelCount, PaSampleFormat userInputSampleFormat,+            PaSampleFormat hostInputSampleFormat,+            int outputChannelCount, PaSampleFormat userOutputSampleFormat,+            PaSampleFormat hostOutputSampleFormat,+            double sampleRate,+            PaStreamFlags streamFlags,+            unsigned long framesPerUserBuffer, /* 0 indicates don't care */+            unsigned long framesPerHostBuffer,+            PaUtilHostBufferSizeMode hostBufferSizeMode,+            PaStreamCallback *streamCallback, void *userData );+++/** Terminate a buffer processor's representation. Deallocates any temporary+ buffers allocated by PaUtil_InitializeBufferProcessor.+ + @param bufferProcessor The buffer processor structure to terminate.++ @see PaUtil_InitializeBufferProcessor.+*/+void PaUtil_TerminateBufferProcessor( PaUtilBufferProcessor* bufferProcessor );+++/** Clear any internally buffered data. If you call+ PaUtil_InitializeBufferProcessor in your OpenStream routine, make sure you+ call PaUtil_ResetBufferProcessor in your StartStream call.++ @param bufferProcessor The buffer processor to reset.+*/+void PaUtil_ResetBufferProcessor( PaUtilBufferProcessor* bufferProcessor );+++/** Retrieve the input latency of a buffer processor, in frames.++ @param bufferProcessor The buffer processor examine.++ @return The input latency introduced by the buffer processor, in frames.++ @see PaUtil_GetBufferProcessorOutputLatencyFrames+*/+unsigned long PaUtil_GetBufferProcessorInputLatencyFrames( PaUtilBufferProcessor* bufferProcessor );++/** Retrieve the output latency of a buffer processor, in frames.++ @param bufferProcessor The buffer processor examine.++ @return The output latency introduced by the buffer processor, in frames.++ @see PaUtil_GetBufferProcessorInputLatencyFrames+*/+unsigned long PaUtil_GetBufferProcessorOutputLatencyFrames( PaUtilBufferProcessor* bufferProcessor );++/*@}*/+++/** @name Host buffer pointer configuration++ Functions to set host input and output buffers, used by both callback streams+ and blocking read/write streams.+*/+/*@{*/ +++/** Set the number of frames in the input host buffer(s) specified by the+ PaUtil_Set*InputChannel functions.++ @param bufferProcessor The buffer processor.++ @param frameCount The number of host input frames. A 0 frameCount indicates to+ use the framesPerHostBuffer value passed to PaUtil_InitializeBufferProcessor.++ @see PaUtil_SetNoInput, PaUtil_SetInputChannel,+ PaUtil_SetInterleavedInputChannels, PaUtil_SetNonInterleavedInputChannel+*/+void PaUtil_SetInputFrameCount( PaUtilBufferProcessor* bufferProcessor,+        unsigned long frameCount );++        +/** Indicate that no input is avalable. This function should be used when+ priming the output of a full-duplex stream opened with the+ paPrimeOutputBuffersUsingStreamCallback flag. Note that it is not necessary+ to call this or any othe PaUtil_Set*Input* functions for ouput-only streams.++ @param bufferProcessor The buffer processor.+*/+void PaUtil_SetNoInput( PaUtilBufferProcessor* bufferProcessor );+++/** Provide the buffer processor with a pointer to a host input channel.++ @param bufferProcessor The buffer processor.+ @param channel The channel number.+ @param data The buffer.+ @param stride The stride from one sample to the next, in samples. For+ interleaved host buffers, the stride will usually be the same as the number of+ channels in the buffer.+*/+void PaUtil_SetInputChannel( PaUtilBufferProcessor* bufferProcessor,+        unsigned int channel, void *data, unsigned int stride );+++/** Provide the buffer processor with a pointer to an number of interleaved+ host input channels.++ @param bufferProcessor The buffer processor.+ @param firstChannel The first channel number.+ @param data The buffer.+ @param channelCount The number of interleaved channels in the buffer. If+ channelCount is zero, the number of channels specified to+ PaUtil_InitializeBufferProcessor will be used.+*/+void PaUtil_SetInterleavedInputChannels( PaUtilBufferProcessor* bufferProcessor,+        unsigned int firstChannel, void *data, unsigned int channelCount );+++/** Provide the buffer processor with a pointer to one non-interleaved host+ output channel.++ @param bufferProcessor The buffer processor.+ @param channel The channel number.+ @param data The buffer.+*/+void PaUtil_SetNonInterleavedInputChannel( PaUtilBufferProcessor* bufferProcessor,+        unsigned int channel, void *data );+++/** Use for the second buffer half when the input buffer is split in two halves.+ @see PaUtil_SetInputFrameCount+*/+void PaUtil_Set2ndInputFrameCount( PaUtilBufferProcessor* bufferProcessor,+        unsigned long frameCount );++/** Use for the second buffer half when the input buffer is split in two halves.+ @see PaUtil_SetInputChannel+*/+void PaUtil_Set2ndInputChannel( PaUtilBufferProcessor* bufferProcessor,+        unsigned int channel, void *data, unsigned int stride );++/** Use for the second buffer half when the input buffer is split in two halves.+ @see PaUtil_SetInterleavedInputChannels+*/+void PaUtil_Set2ndInterleavedInputChannels( PaUtilBufferProcessor* bufferProcessor,+        unsigned int firstChannel, void *data, unsigned int channelCount );++/** Use for the second buffer half when the input buffer is split in two halves.+ @see PaUtil_SetNonInterleavedInputChannel+*/+void PaUtil_Set2ndNonInterleavedInputChannel( PaUtilBufferProcessor* bufferProcessor,+        unsigned int channel, void *data );++        +/** Set the number of frames in the output host buffer(s) specified by the+ PaUtil_Set*OutputChannel functions.++ @param bufferProcessor The buffer processor.++ @param frameCount The number of host output frames. A 0 frameCount indicates to+ use the framesPerHostBuffer value passed to PaUtil_InitializeBufferProcessor.++ @see PaUtil_SetOutputChannel, PaUtil_SetInterleavedOutputChannels,+ PaUtil_SetNonInterleavedOutputChannel+*/+void PaUtil_SetOutputFrameCount( PaUtilBufferProcessor* bufferProcessor,+        unsigned long frameCount );+++/** Indicate that the output will be discarded. This function should be used+ when implementing the paNeverDropInput mode for full duplex streams.++ @param bufferProcessor The buffer processor.+*/+void PaUtil_SetNoOutput( PaUtilBufferProcessor* bufferProcessor );+++/** Provide the buffer processor with a pointer to a host output channel.++ @param bufferProcessor The buffer processor.+ @param channel The channel number.+ @param data The buffer.+ @param stride The stride from one sample to the next, in samples. For+ interleaved host buffers, the stride will usually be the same as the number of+ channels in the buffer.+*/+void PaUtil_SetOutputChannel( PaUtilBufferProcessor* bufferProcessor,+        unsigned int channel, void *data, unsigned int stride );+++/** Provide the buffer processor with a pointer to a number of interleaved+ host output channels.++ @param bufferProcessor The buffer processor.+ @param firstChannel The first channel number.+ @param data The buffer.+ @param channelCount The number of interleaved channels in the buffer. If+ channelCount is zero, the number of channels specified to+ PaUtil_InitializeBufferProcessor will be used.+*/+void PaUtil_SetInterleavedOutputChannels( PaUtilBufferProcessor* bufferProcessor,+        unsigned int firstChannel, void *data, unsigned int channelCount );++        +/** Provide the buffer processor with a pointer to one non-interleaved host+ output channel.++ @param bufferProcessor The buffer processor.+ @param channel The channel number.+ @param data The buffer.+*/+void PaUtil_SetNonInterleavedOutputChannel( PaUtilBufferProcessor* bufferProcessor,+        unsigned int channel, void *data );+++/** Use for the second buffer half when the output buffer is split in two halves.+ @see PaUtil_SetOutputFrameCount+*/+void PaUtil_Set2ndOutputFrameCount( PaUtilBufferProcessor* bufferProcessor,+        unsigned long frameCount );++/** Use for the second buffer half when the output buffer is split in two halves.+ @see PaUtil_SetOutputChannel+*/+void PaUtil_Set2ndOutputChannel( PaUtilBufferProcessor* bufferProcessor,+        unsigned int channel, void *data, unsigned int stride );++/** Use for the second buffer half when the output buffer is split in two halves.+ @see PaUtil_SetInterleavedOutputChannels+*/+void PaUtil_Set2ndInterleavedOutputChannels( PaUtilBufferProcessor* bufferProcessor,+        unsigned int firstChannel, void *data, unsigned int channelCount );++/** Use for the second buffer half when the output buffer is split in two halves.+ @see PaUtil_SetNonInterleavedOutputChannel+*/+void PaUtil_Set2ndNonInterleavedOutputChannel( PaUtilBufferProcessor* bufferProcessor,+        unsigned int channel, void *data );++/*@}*/+++/** @name Buffer processing functions for callback streams+*/+/*@{*/++/** Commence processing a host buffer (or a pair of host buffers in the+ full-duplex case) for a callback stream.++ @param bufferProcessor The buffer processor.++ @param timeInfo Timing information for the first sample of the host+ buffer(s). This information may be adjusted when buffer adaption is being+ performed.++ @param callbackStatusFlags Flags indicating whether underruns and overruns+ have occurred since the last time the buffer processor was called.+*/+void PaUtil_BeginBufferProcessing( PaUtilBufferProcessor* bufferProcessor,+        PaStreamCallbackTimeInfo* timeInfo, PaStreamCallbackFlags callbackStatusFlags );++        +/** Finish processing a host buffer (or a pair of host buffers in the+ full-duplex case) for a callback stream.++ @param bufferProcessor The buffer processor.+ + @param callbackResult On input, indicates a previous callback result, and on+ exit, the result of the user stream callback, if it is called.+ On entry callbackResult should contain one of { paContinue, paComplete, or+ paAbort}. If paComplete is passed, the stream callback will not be called+ but any audio that was generated by previous stream callbacks will be copied+ to the output buffer(s). You can check whether the buffer processor's internal+ buffer is empty by calling PaUtil_IsBufferProcessorOutputEmpty.++ If the stream callback is called its result is stored in *callbackResult. If+ the stream callback returns paComplete or paAbort, all output buffers will be+ full of valid data - some of which may be zeros to acount for data that+ wasn't generated by the terminating callback.++ @return The number of frames processed. This usually corresponds to the+ number of frames specified by the PaUtil_Set*FrameCount functions, exept in+ the paUtilVariableHostBufferSizePartialUsageAllowed buffer size mode when a+ smaller value may be returned.+*/+unsigned long PaUtil_EndBufferProcessing( PaUtilBufferProcessor* bufferProcessor,+        int *callbackResult );+++/** Determine whether any callback generated output remains in the bufffer+ processor's internal buffers. This method may be used to determine when to+ continue calling PaUtil_EndBufferProcessing() after the callback has returned+ a callbackResult of paComplete.++ @param bufferProcessor The buffer processor.+ + @return Returns non-zero when callback generated output remains in the internal+ buffer and zero (0) when there internal buffer contains no callback generated+ data.+*/+int PaUtil_IsBufferProcessorOutputEmpty( PaUtilBufferProcessor* bufferProcessor );++/*@}*/+++/** @name Buffer processing functions for blocking read/write streams+*/+/*@{*/++/** Copy samples from host input channels set up by the PaUtil_Set*InputChannels+ functions to a user supplied buffer. This function is intended for use with+ blocking read/write streams. Copies the minimum of the number of+ user frames (specified by the frameCount parameter) and the number of available+ host frames (specified in a previous call to SetInputFrameCount()).++ @param bufferProcessor The buffer processor.++ @param buffer A pointer to the user buffer pointer, or a pointer to a pointer+ to an array of user buffer pointers for a non-interleaved stream. It is+ important that this parameter points to a copy of the user buffer pointers,+ not to the actual user buffer pointers, because this function updates the+ pointers before returning.++ @param frameCount The number of frames of data in the buffer(s) pointed to by+ the buffer parameter.++ @return The number of frames copied. The buffer pointer(s) pointed to by the+ buffer parameter are advanced to point to the frame(s) following the last one+ filled.+*/+unsigned long PaUtil_CopyInput( PaUtilBufferProcessor* bufferProcessor,+        void **buffer, unsigned long frameCount );+++/* Copy samples from a user supplied buffer to host output channels set up by+ the PaUtil_Set*OutputChannels functions. This function is intended for use with+ blocking read/write streams. Copies the minimum of the number of+ user frames (specified by the frameCount parameter) and the number of+ host frames (specified in a previous call to SetOutputFrameCount()).++ @param bufferProcessor The buffer processor.++ @param buffer A pointer to the user buffer pointer, or a pointer to a pointer+ to an array of user buffer pointers for a non-interleaved stream. It is+ important that this parameter points to a copy of the user buffer pointers,+ not to the actual user buffer pointers, because this function updates the+ pointers before returning.++ @param frameCount The number of frames of data in the buffer(s) pointed to by+ the buffer parameter.++ @return The number of frames copied. The buffer pointer(s) pointed to by the+ buffer parameter are advanced to point to the frame(s) following the last one+ copied.+*/+unsigned long PaUtil_CopyOutput( PaUtilBufferProcessor* bufferProcessor,+        const void ** buffer, unsigned long frameCount );+++/* Zero samples in host output channels set up by the PaUtil_Set*OutputChannels+ functions. This function is useful for flushing streams.+ Zeros the minimum of frameCount and the number of host frames specified in a+ previous call to SetOutputFrameCount().++ @param bufferProcessor The buffer processor.++ @param frameCount The maximum number of frames to zero.+ + @return The number of frames zeroed.+*/+unsigned long PaUtil_ZeroOutput( PaUtilBufferProcessor* bufferProcessor,+        unsigned long frameCount );+++/*@}*/+++#ifdef __cplusplus+}+#endif /* __cplusplus */+#endif /* PA_PROCESS_H */
+ portaudio/src/common/pa_ringbuffer.h view
@@ -0,0 +1,236 @@+#ifndef PA_RINGBUFFER_H+#define PA_RINGBUFFER_H+/*+ * $Id: pa_ringbuffer.h 1873 2012-10-07 19:00:11Z philburk $+ * Portable Audio I/O Library+ * Ring Buffer utility.+ *+ * Author: Phil Burk, http://www.softsynth.com+ * modified for SMP safety on OS X by Bjorn Roche.+ * also allowed for const where possible.+ * modified for multiple-byte-sized data elements by Sven Fischer + *+ * Note that this is safe only for a single-thread reader+ * and a single-thread writer.+ *+ * This program is distributed with the PortAudio Portable Audio Library.+ * For more information see: http://www.portaudio.com+ * Copyright (c) 1999-2000 Ross Bencina and Phil Burk+ *+ * Permission is hereby granted, free of charge, to any person obtaining+ * a copy of this software and associated documentation files+ * (the "Software"), to deal in the Software without restriction,+ * including without limitation the rights to use, copy, modify, merge,+ * publish, distribute, sublicense, and/or sell copies of the Software,+ * and to permit persons to whom the Software is furnished to do so,+ * subject to the following conditions:+ *+ * The above copyright notice and this permission notice shall be+ * included in all copies or substantial portions of the Software.+ *+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.+ */++/*+ * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests:+ *+ * Any person wishing to distribute modifications to the Software is+ * requested to send the modifications to the original developer so that+ * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above.+ */++/** @file+ @ingroup common_src+ @brief Single-reader single-writer lock-free ring buffer++ PaUtilRingBuffer is a ring buffer used to transport samples between+ different execution contexts (threads, OS callbacks, interrupt handlers)+ without requiring the use of any locks. This only works when there is+ a single reader and a single writer (ie. one thread or callback writes+ to the ring buffer, another thread or callback reads from it).++ The PaUtilRingBuffer structure manages a ring buffer containing N + elements, where N must be a power of two. An element may be any size + (specified in bytes).++ The memory area used to store the buffer elements must be allocated by + the client prior to calling PaUtil_InitializeRingBuffer() and must outlive+ the use of the ring buffer.+ + @note The ring buffer functions are not normally exposed in the PortAudio libraries. + If you want to call them then you will need to add pa_ringbuffer.c to your application source code.+*/++#if defined(__APPLE__)+#include <sys/types.h>+typedef int32_t ring_buffer_size_t;+#elif defined( __GNUC__ )+typedef long ring_buffer_size_t;+#elif (_MSC_VER >= 1400)+typedef long ring_buffer_size_t;+#elif defined(_MSC_VER) || defined(__BORLANDC__)+typedef long ring_buffer_size_t;+#else+typedef long ring_buffer_size_t;+#endif++++#ifdef __cplusplus+extern "C"+{+#endif /* __cplusplus */++typedef struct PaUtilRingBuffer+{+    ring_buffer_size_t  bufferSize; /**< Number of elements in FIFO. Power of 2. Set by PaUtil_InitRingBuffer. */+    volatile ring_buffer_size_t  writeIndex; /**< Index of next writable element. Set by PaUtil_AdvanceRingBufferWriteIndex. */+    volatile ring_buffer_size_t  readIndex;  /**< Index of next readable element. Set by PaUtil_AdvanceRingBufferReadIndex. */+    ring_buffer_size_t  bigMask;    /**< Used for wrapping indices with extra bit to distinguish full/empty. */+    ring_buffer_size_t  smallMask;  /**< Used for fitting indices to buffer. */+    ring_buffer_size_t  elementSizeBytes; /**< Number of bytes per element. */+    char  *buffer;    /**< Pointer to the buffer containing the actual data. */+}PaUtilRingBuffer;++/** Initialize Ring Buffer to empty state ready to have elements written to it.++ @param rbuf The ring buffer.++ @param elementSizeBytes The size of a single data element in bytes.++ @param elementCount The number of elements in the buffer (must be a power of 2).++ @param dataPtr A pointer to a previously allocated area where the data+ will be maintained.  It must be elementCount*elementSizeBytes long.++ @return -1 if elementCount is not a power of 2, otherwise 0.+*/+ring_buffer_size_t PaUtil_InitializeRingBuffer( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementSizeBytes, ring_buffer_size_t elementCount, void *dataPtr );++/** Reset buffer to empty. Should only be called when buffer is NOT being read or written.++ @param rbuf The ring buffer.+*/+void PaUtil_FlushRingBuffer( PaUtilRingBuffer *rbuf );++/** Retrieve the number of elements available in the ring buffer for writing.++ @param rbuf The ring buffer.++ @return The number of elements available for writing.+*/+ring_buffer_size_t PaUtil_GetRingBufferWriteAvailable( const PaUtilRingBuffer *rbuf );++/** Retrieve the number of elements available in the ring buffer for reading.++ @param rbuf The ring buffer.++ @return The number of elements available for reading.+*/+ring_buffer_size_t PaUtil_GetRingBufferReadAvailable( const PaUtilRingBuffer *rbuf );++/** Write data to the ring buffer.++ @param rbuf The ring buffer.++ @param data The address of new data to write to the buffer.++ @param elementCount The number of elements to be written.++ @return The number of elements written.+*/+ring_buffer_size_t PaUtil_WriteRingBuffer( PaUtilRingBuffer *rbuf, const void *data, ring_buffer_size_t elementCount );++/** Read data from the ring buffer.++ @param rbuf The ring buffer.++ @param data The address where the data should be stored.++ @param elementCount The number of elements to be read.++ @return The number of elements read.+*/+ring_buffer_size_t PaUtil_ReadRingBuffer( PaUtilRingBuffer *rbuf, void *data, ring_buffer_size_t elementCount );++/** Get address of region(s) to which we can write data.++ @param rbuf The ring buffer.++ @param elementCount The number of elements desired.++ @param dataPtr1 The address where the first (or only) region pointer will be+ stored.++ @param sizePtr1 The address where the first (or only) region length will be+ stored.++ @param dataPtr2 The address where the second region pointer will be stored if+ the first region is too small to satisfy elementCount.++ @param sizePtr2 The address where the second region length will be stored if+ the first region is too small to satisfy elementCount.++ @return The room available to be written or elementCount, whichever is smaller.+*/+ring_buffer_size_t PaUtil_GetRingBufferWriteRegions( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementCount,+                                       void **dataPtr1, ring_buffer_size_t *sizePtr1,+                                       void **dataPtr2, ring_buffer_size_t *sizePtr2 );++/** Advance the write index to the next location to be written.++ @param rbuf The ring buffer.++ @param elementCount The number of elements to advance.++ @return The new position.+*/+ring_buffer_size_t PaUtil_AdvanceRingBufferWriteIndex( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementCount );++/** Get address of region(s) from which we can read data.++ @param rbuf The ring buffer.++ @param elementCount The number of elements desired.++ @param dataPtr1 The address where the first (or only) region pointer will be+ stored.++ @param sizePtr1 The address where the first (or only) region length will be+ stored.++ @param dataPtr2 The address where the second region pointer will be stored if+ the first region is too small to satisfy elementCount.++ @param sizePtr2 The address where the second region length will be stored if+ the first region is too small to satisfy elementCount.++ @return The number of elements available for reading.+*/+ring_buffer_size_t PaUtil_GetRingBufferReadRegions( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementCount,+                                      void **dataPtr1, ring_buffer_size_t *sizePtr1,+                                      void **dataPtr2, ring_buffer_size_t *sizePtr2 );++/** Advance the read index to the next location to be read.++ @param rbuf The ring buffer.++ @param elementCount The number of elements to advance.++ @return The new position.+*/+ring_buffer_size_t PaUtil_AdvanceRingBufferReadIndex( PaUtilRingBuffer *rbuf, ring_buffer_size_t elementCount );++#ifdef __cplusplus+}+#endif /* __cplusplus */+#endif /* PA_RINGBUFFER_H */
+ portaudio/src/common/pa_stream.h view
@@ -0,0 +1,205 @@+#ifndef PA_STREAM_H+#define PA_STREAM_H+/*+ * $Id: pa_stream.h 1339 2008-02-15 07:50:33Z rossb $+ * Portable Audio I/O Library+ * stream interface+ *+ * Based on the Open Source API proposed by Ross Bencina+ * Copyright (c) 1999-2008 Ross Bencina, Phil Burk+ *+ * Permission is hereby granted, free of charge, to any person obtaining+ * a copy of this software and associated documentation files+ * (the "Software"), to deal in the Software without restriction,+ * including without limitation the rights to use, copy, modify, merge,+ * publish, distribute, sublicense, and/or sell copies of the Software,+ * and to permit persons to whom the Software is furnished to do so,+ * subject to the following conditions:+ *+ * The above copyright notice and this permission notice shall be+ * included in all copies or substantial portions of the Software.+ *+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.+ */++/*+ * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests:+ *+ * Any person wishing to distribute modifications to the Software is+ * requested to send the modifications to the original developer so that+ * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above.+ */++/** @file+ @ingroup common_src++ @brief Stream interfaces, representation structures and helper functions+ used to interface between pa_front.c host API implementations.+*/+++#include "portaudio.h"++#ifdef __cplusplus+extern "C"+{+#endif /* __cplusplus */+++#define PA_STREAM_MAGIC (0x18273645)+++/** A structure representing an (abstract) interface to a host API. Contains+ pointers to functions which implement the interface.++ All PaStreamInterface functions are guaranteed to be called with a non-null,+ valid stream parameter.+*/+typedef struct {+    PaError (*Close)( PaStream* stream );+    PaError (*Start)( PaStream *stream );+    PaError (*Stop)( PaStream *stream );+    PaError (*Abort)( PaStream *stream );+    PaError (*IsStopped)( PaStream *stream );+    PaError (*IsActive)( PaStream *stream );+    PaTime (*GetTime)( PaStream *stream );+    double (*GetCpuLoad)( PaStream* stream );+    PaError (*Read)( PaStream* stream, void *buffer, unsigned long frames );+    PaError (*Write)( PaStream* stream, const void *buffer, unsigned long frames );+    signed long (*GetReadAvailable)( PaStream* stream );+    signed long (*GetWriteAvailable)( PaStream* stream );+} PaUtilStreamInterface;+++/** Initialize the fields of a PaUtilStreamInterface structure.+*/+void PaUtil_InitializeStreamInterface( PaUtilStreamInterface *streamInterface,+    PaError (*Close)( PaStream* ),+    PaError (*Start)( PaStream* ),+    PaError (*Stop)( PaStream* ),+    PaError (*Abort)( PaStream* ),+    PaError (*IsStopped)( PaStream* ),+    PaError (*IsActive)( PaStream* ),+    PaTime (*GetTime)( PaStream* ),+    double (*GetCpuLoad)( PaStream* ),+    PaError (*Read)( PaStream* stream, void *buffer, unsigned long frames ),+    PaError (*Write)( PaStream* stream, const void *buffer, unsigned long frames ),+    signed long (*GetReadAvailable)( PaStream* stream ),+    signed long (*GetWriteAvailable)( PaStream* stream ) );+++/** Dummy Read function for use in interfaces to a callback based streams.+ Pass to the Read parameter of PaUtil_InitializeStreamInterface.+ @return An error code indicating that the function has no effect+ because the stream is a callback stream.+*/+PaError PaUtil_DummyRead( PaStream* stream,+                       void *buffer,+                       unsigned long frames );+++/** Dummy Write function for use in an interfaces to callback based streams.+ Pass to the Write parameter of PaUtil_InitializeStreamInterface.+ @return An error code indicating that the function has no effect+ because the stream is a callback stream.+*/+PaError PaUtil_DummyWrite( PaStream* stream,+                       const void *buffer,+                       unsigned long frames );+++/** Dummy GetReadAvailable function for use in interfaces to callback based+ streams. Pass to the GetReadAvailable parameter of PaUtil_InitializeStreamInterface.+ @return An error code indicating that the function has no effect+ because the stream is a callback stream.+*/+signed long PaUtil_DummyGetReadAvailable( PaStream* stream );+++/** Dummy GetWriteAvailable function for use in interfaces to callback based+ streams. Pass to the GetWriteAvailable parameter of PaUtil_InitializeStreamInterface.+ @return An error code indicating that the function has no effect+ because the stream is a callback stream.+*/+signed long PaUtil_DummyGetWriteAvailable( PaStream* stream );++++/** Dummy GetCpuLoad function for use in an interface to a read/write stream.+ Pass to the GetCpuLoad parameter of PaUtil_InitializeStreamInterface.+ @return Returns 0.+*/+double PaUtil_DummyGetCpuLoad( PaStream* stream );+++/** Non host specific data for a stream. This data is used by pa_front to+ forward to the appropriate functions in the streamInterface structure.+*/+typedef struct PaUtilStreamRepresentation {+    unsigned long magic;    /**< set to PA_STREAM_MAGIC */+    struct PaUtilStreamRepresentation *nextOpenStream; /**< field used by multi-api code */+    PaUtilStreamInterface *streamInterface;+    PaStreamCallback *streamCallback;+    PaStreamFinishedCallback *streamFinishedCallback;+    void *userData;+    PaStreamInfo streamInfo;+} PaUtilStreamRepresentation;+++/** Initialize a PaUtilStreamRepresentation structure.++ @see PaUtil_InitializeStreamRepresentation+*/+void PaUtil_InitializeStreamRepresentation(+        PaUtilStreamRepresentation *streamRepresentation,+        PaUtilStreamInterface *streamInterface,+        PaStreamCallback *streamCallback,+        void *userData );+        ++/** Clean up a PaUtilStreamRepresentation structure previously initialized+ by a call to PaUtil_InitializeStreamRepresentation.++ @see PaUtil_InitializeStreamRepresentation+*/+void PaUtil_TerminateStreamRepresentation( PaUtilStreamRepresentation *streamRepresentation );+++/** Check that the stream pointer is valid.++ @return Returns paNoError if the stream pointer appears to be OK, otherwise+ returns an error indicating the cause of failure.+*/+PaError PaUtil_ValidateStreamPointer( PaStream *stream );+++/** Cast an opaque stream pointer into a pointer to a PaUtilStreamRepresentation.++ @see PaUtilStreamRepresentation+*/+#define PA_STREAM_REP( stream )\+    ((PaUtilStreamRepresentation*) (stream) )+++/** Cast an opaque stream pointer into a pointer to a PaUtilStreamInterface.++ @see PaUtilStreamRepresentation, PaUtilStreamInterface+*/+#define PA_STREAM_INTERFACE( stream )\+    PA_STREAM_REP( (stream) )->streamInterface+++    +#ifdef __cplusplus+}+#endif /* __cplusplus */+#endif /* PA_STREAM_H */
+ portaudio/src/common/pa_trace.h view
@@ -0,0 +1,117 @@+#ifndef PA_TRACE_H+#define PA_TRACE_H+/*+ * $Id: pa_trace.h 1812 2012-02-14 09:32:57Z robiwan $+ * Portable Audio I/O Library Trace Facility+ * Store trace information in real-time for later printing.+ *+ * Based on the Open Source API proposed by Ross Bencina+ * Copyright (c) 1999-2000 Phil Burk+ *+ * Permission is hereby granted, free of charge, to any person obtaining+ * a copy of this software and associated documentation files+ * (the "Software"), to deal in the Software without restriction,+ * including without limitation the rights to use, copy, modify, merge,+ * publish, distribute, sublicense, and/or sell copies of the Software,+ * and to permit persons to whom the Software is furnished to do so,+ * subject to the following conditions:+ *+ * The above copyright notice and this permission notice shall be+ * included in all copies or substantial portions of the Software.+ *+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.+ */++/*+ * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests:+ *+ * Any person wishing to distribute modifications to the Software is+ * requested to send the modifications to the original developer so that+ * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above.+ */++/** @file+ @ingroup common_src++ @brief Real-time safe event trace logging facility for debugging.++ Allows data to be logged to a fixed size trace buffer in a real-time+ execution context (such as at interrupt time). Each log entry consists + of a message comprising a string pointer and an int.  The trace buffer + may be dumped to stdout later.++ This facility is only active if PA_TRACE_REALTIME_EVENTS is set to 1,+ otherwise the trace functions expand to no-ops.++ @fn PaUtil_ResetTraceMessages+ @brief Clear the trace buffer.++ @fn PaUtil_AddTraceMessage+ @brief Add a message to the trace buffer. A message consists of string and an int.+ @param msg The string pointer must remain valid until PaUtil_DumpTraceMessages +    is called. As a result, usually only string literals should be passed as +    the msg parameter.++ @fn PaUtil_DumpTraceMessages+ @brief Print all messages in the trace buffer to stdout and clear the trace buffer.+*/++#ifndef PA_TRACE_REALTIME_EVENTS+#define PA_TRACE_REALTIME_EVENTS     (0)   /**< Set to 1 to enable logging using the trace functions defined below */+#endif++#ifndef PA_MAX_TRACE_RECORDS+#define PA_MAX_TRACE_RECORDS      (2048)   /**< Maximum number of records stored in trace buffer */   +#endif++#ifdef __cplusplus+extern "C"+{+#endif /* __cplusplus */+++#if PA_TRACE_REALTIME_EVENTS++void PaUtil_ResetTraceMessages();+void PaUtil_AddTraceMessage( const char *msg, int data );+void PaUtil_DumpTraceMessages();++/* Alternative interface */++typedef void* LogHandle;++int PaUtil_InitializeHighSpeedLog(LogHandle* phLog, unsigned maxSizeInBytes);+void PaUtil_ResetHighSpeedLogTimeRef(LogHandle hLog);+int PaUtil_AddHighSpeedLogMessage(LogHandle hLog, const char* fmt, ...);+void PaUtil_DumpHighSpeedLog(LogHandle hLog, const char* fileName);+void PaUtil_DiscardHighSpeedLog(LogHandle hLog);++#else++#define PaUtil_ResetTraceMessages() /* noop */+#define PaUtil_AddTraceMessage(msg,data) /* noop */+#define PaUtil_DumpTraceMessages() /* noop */++#define PaUtil_InitializeHighSpeedLog(phLog, maxSizeInBytes)  (0)+#define PaUtil_ResetHighSpeedLogTimeRef(hLog)+#define PaUtil_AddHighSpeedLogMessage(...)   (0)+#define PaUtil_DumpHighSpeedLog(hLog, fileName)+#define PaUtil_DiscardHighSpeedLog(hLog)++#endif+++#ifdef __cplusplus+}+#endif /* __cplusplus */++#endif /* PA_TRACE_H */
+ portaudio/src/common/pa_types.h view
@@ -0,0 +1,107 @@+#ifndef PA_TYPES_H+#define PA_TYPES_H++/* + * Portable Audio I/O Library+ * integer type definitions+ *+ * Based on the Open Source API proposed by Ross Bencina+ * Copyright (c) 1999-2006 Ross Bencina, Phil Burk+ *+ * Permission is hereby granted, free of charge, to any person obtaining+ * a copy of this software and associated documentation files+ * (the "Software"), to deal in the Software without restriction,+ * including without limitation the rights to use, copy, modify, merge,+ * publish, distribute, sublicense, and/or sell copies of the Software,+ * and to permit persons to whom the Software is furnished to do so,+ * subject to the following conditions:+ *+ * The above copyright notice and this permission notice shall be+ * included in all copies or substantial portions of the Software.+ *+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.+ */++/*+ * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests:+ *+ * Any person wishing to distribute modifications to the Software is+ * requested to send the modifications to the original developer so that+ * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above.+ */++/** @file+ @ingroup common_src++ @brief Definition of 16 and 32 bit integer types (PaInt16, PaInt32 etc)++ SIZEOF_SHORT, SIZEOF_INT and SIZEOF_LONG are set by the configure script+ when it is used. Otherwise we default to the common 32 bit values, if your+ platform doesn't use configure, and doesn't use the default values below+ you will need to explicitly define these symbols in your make file.++ A PA_VALIDATE_SIZES macro is provided to assert that the values set in this+ file are correct.+*/++#ifndef SIZEOF_SHORT+#define SIZEOF_SHORT 2+#endif++#ifndef SIZEOF_INT+#define SIZEOF_INT 4+#endif++#ifndef SIZEOF_LONG+#define SIZEOF_LONG 4+#endif+++#if SIZEOF_SHORT == 2+typedef signed short PaInt16;+typedef unsigned short PaUint16;+#elif SIZEOF_INT == 2+typedef signed int PaInt16;+typedef unsigned int PaUint16;+#else+#error pa_types.h was unable to determine which type to use for 16bit integers on the target platform+#endif++#if SIZEOF_SHORT == 4+typedef signed short PaInt32;+typedef unsigned short PaUint32;+#elif SIZEOF_INT == 4+typedef signed int PaInt32;+typedef unsigned int PaUint32;+#elif SIZEOF_LONG == 4+typedef signed long PaInt32;+typedef unsigned long PaUint32;+#else+#error pa_types.h was unable to determine which type to use for 32bit integers on the target platform+#endif+++/* PA_VALIDATE_TYPE_SIZES compares the size of the integer types at runtime to+ ensure that PortAudio was configured correctly, and raises an assertion if+ they don't match the expected values. <assert.h> must be included in the+ context in which this macro is used.+*/+#define PA_VALIDATE_TYPE_SIZES \+    { \+        assert( "PortAudio: type sizes are not correct in pa_types.h" && sizeof( PaUint16 ) == 2 ); \+        assert( "PortAudio: type sizes are not correct in pa_types.h" && sizeof( PaInt16 ) == 2 ); \+        assert( "PortAudio: type sizes are not correct in pa_types.h" && sizeof( PaUint32 ) == 4 ); \+        assert( "PortAudio: type sizes are not correct in pa_types.h" && sizeof( PaInt32 ) == 4 ); \+    }+++#endif /* PA_TYPES_H */
+ portaudio/src/common/pa_util.h view
@@ -0,0 +1,159 @@+#ifndef PA_UTIL_H+#define PA_UTIL_H+/*+ * $Id: pa_util.h 1584 2011-02-02 18:58:17Z rossb $+ * Portable Audio I/O Library implementation utilities header+ * common implementation utilities and interfaces+ *+ * Based on the Open Source API proposed by Ross Bencina+ * Copyright (c) 1999-2008 Ross Bencina, Phil Burk+ *+ * Permission is hereby granted, free of charge, to any person obtaining+ * a copy of this software and associated documentation files+ * (the "Software"), to deal in the Software without restriction,+ * including without limitation the rights to use, copy, modify, merge,+ * publish, distribute, sublicense, and/or sell copies of the Software,+ * and to permit persons to whom the Software is furnished to do so,+ * subject to the following conditions:+ *+ * The above copyright notice and this permission notice shall be+ * included in all copies or substantial portions of the Software.+ *+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.+ */++/*+ * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests:+ *+ * Any person wishing to distribute modifications to the Software is+ * requested to send the modifications to the original developer so that+ * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above.+ */++/** @file+ @ingroup common_src++    @brief Prototypes for utility functions used by PortAudio implementations.++    Some functions declared here are defined in pa_front.c while others+    are implemented separately for each platform.+*/+++#include "portaudio.h"++#ifdef __cplusplus+extern "C"+{+#endif /* __cplusplus */+++struct PaUtilHostApiRepresentation;+++/** Retrieve a specific host API representation. This function can be used+ by implementations to retrieve a pointer to their representation in+ host api specific extension functions which aren't passed a rep pointer+ by pa_front.c.++ @param hostApi A pointer to a host API represenation pointer. Apon success+ this will receive the requested representation pointer.++ @param type A valid host API type identifier.++ @returns An error code. If the result is PaNoError then a pointer to the+ requested host API representation will be stored in *hostApi. If the host API+ specified by type is not found, this function returns paHostApiNotFound.+*/+PaError PaUtil_GetHostApiRepresentation( struct PaUtilHostApiRepresentation **hostApi,+        PaHostApiTypeId type );+++/** Convert a PortAudio device index into a host API specific device index.+ @param hostApiDevice Pointer to a device index, on success this will recieve the+ converted device index value.+ @param device The PortAudio device index to convert.+ @param hostApi The host api which the index should be converted for.++ @returns On success returns PaNoError and places the converted index in the+ hostApiDevice parameter.+*/+PaError PaUtil_DeviceIndexToHostApiDeviceIndex(+        PaDeviceIndex *hostApiDevice, PaDeviceIndex device,+        struct PaUtilHostApiRepresentation *hostApi );+++/** Set the host error information returned by Pa_GetLastHostErrorInfo. This+ function and the paUnanticipatedHostError error code should be used as a+ last resort.  Implementors should use existing PA error codes where possible,+ or nominate new ones. Note that at it is always better to use+ PaUtil_SetLastHostErrorInfo() and paUnanticipatedHostError than to return an+ ambiguous or inaccurate PaError code.++ @param hostApiType  The host API which encountered the error (ie of the caller)++ @param errorCode The error code returned by the native API function.++ @param errorText A string describing the error. PaUtil_SetLastHostErrorInfo+ makes a copy of the string, so it is not necessary for the pointer to remain+ valid after the call to PaUtil_SetLastHostErrorInfo() returns.++*/+void PaUtil_SetLastHostErrorInfo( PaHostApiTypeId hostApiType, long errorCode,+        const char *errorText );+++        +/* the following functions are implemented in a platform platform specific+ .c file+*/++/** Allocate size bytes, guaranteed to be aligned to a FIXME byte boundary */+void *PaUtil_AllocateMemory( long size );+++/** Realease block if non-NULL. block may be NULL */+void PaUtil_FreeMemory( void *block );+++/** Return the number of currently allocated blocks. This function can be+ used for detecting memory leaks.++ @note Allocations will only be tracked if PA_TRACK_MEMORY is #defined. If+ it isn't, this function will always return 0.+*/+int PaUtil_CountCurrentlyAllocatedBlocks( void );+++/** Initialize the clock used by PaUtil_GetTime(). Call this before calling+ PaUtil_GetTime.++ @see PaUtil_GetTime+*/+void PaUtil_InitializeClock( void );+++/** Return the system time in seconds. Used to implement CPU load functions++ @see PaUtil_InitializeClock+*/+double PaUtil_GetTime( void );+++/* void Pa_Sleep( long msec );  must also be implemented in per-platform .c file */++++#ifdef __cplusplus+}+#endif /* __cplusplus */+#endif /* PA_UTIL_H */
+ portaudio/src/hostapi/wasapi/mingw-include/AudioSessionTypes.h view
@@ -0,0 +1,94 @@+//
+// AudioSessionTypes.h -- Copyright Microsoft Corporation, All Rights Reserved.
+//
+// Description: Type definitions used by the audio session manager RPC/COM interfaces
+//
+#pragma once
+
+#ifndef __AUDIOSESSIONTYPES__
+#define __AUDIOSESSIONTYPES__
+
+#if defined(__midl)
+#define MIDL_SIZE_IS(x) [size_is(x)]
+#define MIDL_STRING [string]
+#define MIDL_ANYSIZE_ARRAY
+#else   // !defined(__midl)
+#define MIDL_SIZE_IS(x)
+#define MIDL_STRING
+#define MIDL_ANYSIZE_ARRAY ANYSIZE_ARRAY
+#endif  // defined(__midl)
+
+//-------------------------------------------------------------------------
+// Description: AudioClient share mode
+//                                   
+//     AUDCLNT_SHAREMODE_SHARED -    The device will be opened in shared mode and use the 
+//                                   WAS format.
+//     AUDCLNT_SHAREMODE_EXCLUSIVE - The device will be opened in exclusive mode and use the 
+//                                   application specified format.
+//
+typedef enum _AUDCLNT_SHAREMODE
+{ 
+    AUDCLNT_SHAREMODE_SHARED, 
+    AUDCLNT_SHAREMODE_EXCLUSIVE 
+} AUDCLNT_SHAREMODE;
+
+//-------------------------------------------------------------------------
+// Description: AudioClient stream flags
+// 
+// Can be a combination of AUDCLNT_STREAMFLAGS and AUDCLNT_SYSFXFLAGS:
+// 
+// AUDCLNT_STREAMFLAGS (this group of flags uses the high word, w/exception of high-bit which is reserved, 0x7FFF0000):
+//                                  
+//     AUDCLNT_STREAMFLAGS_CROSSPROCESS - Audio policy control for this stream will be shared with 
+//                                        with other process sessions that use the same audio session 
+//                                        GUID.
+//     AUDCLNT_STREAMFLAGS_LOOPBACK -     Initializes a renderer endpoint for a loopback audio application. 
+//                                        In this mode, a capture stream will be opened on the specified 
+//                                        renderer endpoint. Shared mode and a renderer endpoint is required.
+//                                        Otherwise the IAudioClient::Initialize call will fail. If the 
+//                                        initialize is successful, a capture stream will be available 
+//                                        from the IAudioClient object.
+//
+//     AUDCLNT_STREAMFLAGS_EVENTCALLBACK - An exclusive mode client will supply an event handle that will be
+//                                         signaled when an IRP completes (or a waveRT buffer completes) telling
+//                                         it to fill the next buffer
+//
+//     AUDCLNT_STREAMFLAGS_NOPERSIST -    Session state will not be persisted
+//
+// AUDCLNT_SYSFXFLAGS (these flags use low word 0x0000FFFF):
+//
+//     none defined currently
+//
+#define AUDCLNT_STREAMFLAGS_CROSSPROCESS  0x00010000
+#define AUDCLNT_STREAMFLAGS_LOOPBACK      0x00020000
+#define AUDCLNT_STREAMFLAGS_EVENTCALLBACK 0x00040000
+#define AUDCLNT_STREAMFLAGS_NOPERSIST     0x00080000
+
+//-------------------------------------------------------------------------
+// Description: Device share mode - sharing mode for the audio device.
+//
+//      DeviceShared - The device can be shared with other processes.
+//      DeviceExclusive - The device will only be used by this process.
+//
+typedef enum _DeviceShareMode
+{ 
+    DeviceShared, 
+    DeviceExclusive 
+} DeviceShareMode;
+
+
+//-------------------------------------------------------------------------
+// Description: AudioSession State.
+//
+//      AudioSessionStateInactive - The session has no active audio streams.
+//      AudioSessionStateActive - The session has active audio streams.
+//      AudioSessionStateExpired - The session is dormant.
+typedef enum _AudioSessionState
+{
+    AudioSessionStateInactive = 0,
+    AudioSessionStateActive = 1,
+    AudioSessionStateExpired = 2
+} AudioSessionState;
+
+#endif
+
+ portaudio/src/hostapi/wasapi/mingw-include/FunctionDiscoveryKeys_devpkey.h view
@@ -0,0 +1,186 @@+
+/*++
+
+Copyright (c) Microsoft Corporation.  All rights reserved.
+
+Module Name:
+
+    devpkey.h
+
+Abstract:
+
+    Defines property keys for the Plug and Play Device Property API.
+
+Author:
+
+    Jim Cavalaris (jamesca) 10-14-2003
+
+Environment:
+
+    User-mode only.
+
+Revision History:
+
+    14-October-2003     jamesca
+
+        Creation and initial implementation.
+
+    20-June-2006        dougb
+
+        Copied Jim's version replaced "DEFINE_DEVPROPKEY(DEVPKEY_" with "DEFINE_PROPERTYKEY(PKEY_"
+    
+--*/
+
+//#include <devpropdef.h>
+
+//
+// _NAME
+//
+
+DEFINE_PROPERTYKEY(PKEY_NAME,                          0xb725f130, 0x47ef, 0x101a, 0xa5, 0xf1, 0x02, 0x60, 0x8c, 0x9e, 0xeb, 0xac, 10);    // DEVPROP_TYPE_STRING
+
+//
+// Device properties
+// These PKEYs correspond to the old setupapi SPDRP_XXX properties
+//
+DEFINE_PROPERTYKEY(PKEY_Device_DeviceDesc,             0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 2);     // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_HardwareIds,            0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 3);     // DEVPROP_TYPE_STRING_LIST
+DEFINE_PROPERTYKEY(PKEY_Device_CompatibleIds,          0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 4);     // DEVPROP_TYPE_STRING_LIST
+DEFINE_PROPERTYKEY(PKEY_Device_Service,                0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 6);     // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_Class,                  0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 9);     // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_ClassGuid,              0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 10);    // DEVPROP_TYPE_GUID
+DEFINE_PROPERTYKEY(PKEY_Device_Driver,                 0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 11);    // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_ConfigFlags,            0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 12);    // DEVPROP_TYPE_UINT32
+DEFINE_PROPERTYKEY(PKEY_Device_Manufacturer,           0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 13);    // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_FriendlyName,           0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 14);    // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_LocationInfo,           0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 15);    // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_PDOName,                0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 16);    // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_Capabilities,           0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 17);    // DEVPROP_TYPE_UNINT32
+DEFINE_PROPERTYKEY(PKEY_Device_UINumber,               0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 18);    // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_UpperFilters,           0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 19);    // DEVPROP_TYPE_STRING_LIST
+DEFINE_PROPERTYKEY(PKEY_Device_LowerFilters,           0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 20);    // DEVPROP_TYPE_STRING_LIST
+DEFINE_PROPERTYKEY(PKEY_Device_BusTypeGuid,            0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 21);    // DEVPROP_TYPE_GUID
+DEFINE_PROPERTYKEY(PKEY_Device_LegacyBusType,          0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 22);    // DEVPROP_TYPE_UINT32
+DEFINE_PROPERTYKEY(PKEY_Device_BusNumber,              0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 23);    // DEVPROP_TYPE_UINT32
+DEFINE_PROPERTYKEY(PKEY_Device_EnumeratorName,         0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 24);    // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_Security,               0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 25);    // DEVPROP_TYPE_SECURITY_DESCRIPTOR
+DEFINE_PROPERTYKEY(PKEY_Device_SecuritySDS,            0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 26);    // DEVPROP_TYPE_SECURITY_DESCRIPTOR_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_DevType,                0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 27);    // DEVPROP_TYPE_UINT32
+DEFINE_PROPERTYKEY(PKEY_Device_Exclusive,              0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 28);    // DEVPROP_TYPE_UINT32
+DEFINE_PROPERTYKEY(PKEY_Device_Characteristics,        0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 29);    // DEVPROP_TYPE_UINT32
+DEFINE_PROPERTYKEY(PKEY_Device_Address,                0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 30);    // DEVPROP_TYPE_UINT32
+DEFINE_PROPERTYKEY(PKEY_Device_UINumberDescFormat,     0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 31);    // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_PowerData,              0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 32);    // DEVPROP_TYPE_BINARY
+DEFINE_PROPERTYKEY(PKEY_Device_RemovalPolicy,          0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 33);    // DEVPROP_TYPE_UINT32
+DEFINE_PROPERTYKEY(PKEY_Device_RemovalPolicyDefault,   0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 34);    // DEVPROP_TYPE_UINT32
+DEFINE_PROPERTYKEY(PKEY_Device_RemovalPolicyOverride,  0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 35);    // DEVPROP_TYPE_UINT32
+DEFINE_PROPERTYKEY(PKEY_Device_InstallState,           0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 36);    // DEVPROP_TYPE_UINT32
+DEFINE_PROPERTYKEY(PKEY_Device_LocationPaths,          0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 37);    // DEVPROP_TYPE_STRING_LIST
+
+//
+// Device properties
+// These PKEYs correspond to a device's status and problem code
+//
+DEFINE_PROPERTYKEY(PKEY_Device_DevNodeStatus,          0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 2);     // DEVPROP_TYPE_UINT32
+DEFINE_PROPERTYKEY(PKEY_Device_ProblemCode,            0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 3);     // DEVPROP_TYPE_UINT32
+
+//
+// Device properties
+// These PKEYs correspond to device relations
+//
+DEFINE_PROPERTYKEY(PKEY_Device_EjectionRelations,      0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 4);     // DEVPROP_TYPE_STRING_LIST
+DEFINE_PROPERTYKEY(PKEY_Device_RemovalRelations,       0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 5);     // DEVPROP_TYPE_STRING_LIST
+DEFINE_PROPERTYKEY(PKEY_Device_PowerRelations,         0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 6);     // DEVPROP_TYPE_STRING_LIST
+DEFINE_PROPERTYKEY(PKEY_Device_BusRelations,           0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 7);     // DEVPROP_TYPE_STRING_LIST
+DEFINE_PROPERTYKEY(PKEY_Device_Parent,                 0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 8);     // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_Children,               0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 9);     // DEVPROP_TYPE_STRING_LIST
+DEFINE_PROPERTYKEY(PKEY_Device_Siblings,               0x4340a6c5, 0x93fa, 0x4706, 0x97, 0x2c, 0x7b, 0x64, 0x80, 0x08, 0xa5, 0xa7, 10);    // DEVPROP_TYPE_STRING_LIST
+
+//
+// Other Device properties
+//
+DEFINE_PROPERTYKEY(PKEY_Device_Reported,               0x80497100, 0x8c73, 0x48b9, 0xaa, 0xd9, 0xce, 0x38, 0x7e, 0x19, 0xc5, 0x6e, 2);     // DEVPROP_TYPE_BOOLEAN
+DEFINE_PROPERTYKEY(PKEY_Device_Legacy,                 0x80497100, 0x8c73, 0x48b9, 0xaa, 0xd9, 0xce, 0x38, 0x7e, 0x19, 0xc5, 0x6e, 3);     // DEVPROP_TYPE_BOOLEAN
+DEFINE_PROPERTYKEY(PKEY_Device_InstanceId,             0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57, 256);   // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Numa_Proximity_Domain,         0x540b947e, 0x8b40, 0x45bc, 0xa8, 0xa2, 0x6a, 0x0b, 0x89, 0x4c, 0xbd, 0xa2, 1);     // DEVPROP_TYPE_UINT32
+
+//
+// Device driver properties
+//
+DEFINE_PROPERTYKEY(PKEY_Device_DriverDate,             0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 2);      // DEVPROP_TYPE_FILETIME
+DEFINE_PROPERTYKEY(PKEY_Device_DriverVersion,          0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 3);      // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_DriverDesc,             0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 4);      // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_DriverInfPath,          0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 5);      // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_DriverInfSection,       0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 6);      // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_DriverInfSectionExt,    0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 7);      // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_MatchingDeviceId,       0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 8);      // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_DriverProvider,         0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 9);      // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_DriverPropPageProvider, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 10);     // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_DriverCoInstallers,     0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 11);     // DEVPROP_TYPE_STRING_LIST
+DEFINE_PROPERTYKEY(PKEY_Device_ResourcePickerTags,     0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 12);     // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_ResourcePickerExceptions, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 13); // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_Device_DriverRank,             0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 14);     // DEVPROP_TYPE_UINT32
+DEFINE_PROPERTYKEY(PKEY_Device_DriverLogoLevel,        0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 15);     // DEVPROP_TYPE_UINT32
+DEFINE_PROPERTYKEY(PKEY_Device_NoConnectSound,         0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 17);     // DEVPROP_TYPE_BOOLEAN
+DEFINE_PROPERTYKEY(PKEY_Device_GenericDriverInstalled, 0xa8b865dd, 0x2e3d, 0x4094, 0xad, 0x97, 0xe5, 0x93, 0xa7, 0xc, 0x75, 0xd6, 18);     // DEVPROP_TYPE_BOOLEAN
+
+
+//
+// Device properties that were set by the driver package that was installed
+// on the device.
+//
+DEFINE_PROPERTYKEY(PKEY_DrvPkg_Model,                  0xcf73bb51, 0x3abf, 0x44a2, 0x85, 0xe0, 0x9a, 0x3d, 0xc7, 0xa1, 0x21, 0x32, 2);     // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_DrvPkg_VendorWebSite,          0xcf73bb51, 0x3abf, 0x44a2, 0x85, 0xe0, 0x9a, 0x3d, 0xc7, 0xa1, 0x21, 0x32, 3);     // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_DrvPkg_DetailedDescription,    0xcf73bb51, 0x3abf, 0x44a2, 0x85, 0xe0, 0x9a, 0x3d, 0xc7, 0xa1, 0x21, 0x32, 4);     // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_DrvPkg_DocumentationLink,      0xcf73bb51, 0x3abf, 0x44a2, 0x85, 0xe0, 0x9a, 0x3d, 0xc7, 0xa1, 0x21, 0x32, 5);     // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_DrvPkg_Icon,                   0xcf73bb51, 0x3abf, 0x44a2, 0x85, 0xe0, 0x9a, 0x3d, 0xc7, 0xa1, 0x21, 0x32, 6);     // DEVPROP_TYPE_STRING_LIST
+DEFINE_PROPERTYKEY(PKEY_DrvPkg_BrandingIcon,           0xcf73bb51, 0x3abf, 0x44a2, 0x85, 0xe0, 0x9a, 0x3d, 0xc7, 0xa1, 0x21, 0x32, 7);     // DEVPROP_TYPE_STRING_LIST
+
+//
+// Device setup class properties
+// These PKEYs correspond to the old setupapi SPCRP_XXX properties
+//
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_UpperFilters,      0x4321918b, 0xf69e, 0x470d, 0xa5, 0xde, 0x4d, 0x88, 0xc7, 0x5a, 0xd2, 0x4b, 19);    // DEVPROP_TYPE_STRING_LIST
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_LowerFilters,      0x4321918b, 0xf69e, 0x470d, 0xa5, 0xde, 0x4d, 0x88, 0xc7, 0x5a, 0xd2, 0x4b, 20);    // DEVPROP_TYPE_STRING_LIST
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_Security,          0x4321918b, 0xf69e, 0x470d, 0xa5, 0xde, 0x4d, 0x88, 0xc7, 0x5a, 0xd2, 0x4b, 25);    // DEVPROP_TYPE_SECURITY_DESCRIPTOR
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_SecuritySDS,       0x4321918b, 0xf69e, 0x470d, 0xa5, 0xde, 0x4d, 0x88, 0xc7, 0x5a, 0xd2, 0x4b, 26);    // DEVPROP_TYPE_SECURITY_DESCRIPTOR_STRING
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_DevType,           0x4321918b, 0xf69e, 0x470d, 0xa5, 0xde, 0x4d, 0x88, 0xc7, 0x5a, 0xd2, 0x4b, 27);    // DEVPROP_TYPE_UINT32
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_Exclusive,         0x4321918b, 0xf69e, 0x470d, 0xa5, 0xde, 0x4d, 0x88, 0xc7, 0x5a, 0xd2, 0x4b, 28);    // DEVPROP_TYPE_UINT32
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_Characteristics,   0x4321918b, 0xf69e, 0x470d, 0xa5, 0xde, 0x4d, 0x88, 0xc7, 0x5a, 0xd2, 0x4b, 29);    // DEVPROP_TYPE_UINT32
+
+//
+// Device setup class properties
+// These PKEYs correspond to registry values under the device class GUID key
+//
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_Name,              0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 2);  // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_ClassName,         0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 3);  // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_Icon,              0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 4);  // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_ClassInstaller,    0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 5);  // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_PropPageProvider,  0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 6);  // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_NoInstallClass,    0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 7);  // DEVPROP_TYPE_BOOLEAN
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_NoDisplayClass,    0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 8);  // DEVPROP_TYPE_BOOLEAN
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_SilentInstall,     0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 9);  // DEVPROP_TYPE_BOOLEAN
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_NoUseClass,        0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 10); // DEVPROP_TYPE_BOOLEAN
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_DefaultService,    0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 11); // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_IconPath,          0x259abffc, 0x50a7, 0x47ce, 0xaf, 0x8, 0x68, 0xc9, 0xa7, 0xd7, 0x33, 0x66, 12); // DEVPROP_TYPE_STRING_LIST
+
+//
+// Other Device setup class properties
+//
+DEFINE_PROPERTYKEY(PKEY_DeviceClass_ClassCoInstallers, 0x713d1703, 0xa2e2, 0x49f5, 0x92, 0x14, 0x56, 0x47, 0x2e, 0xf3, 0xda, 0x5c, 2); // DEVPROP_TYPE_STRING_LIST
+
+//
+// Device interface properties
+//
+DEFINE_PROPERTYKEY(PKEY_DeviceInterface_FriendlyName,  0x026e516e, 0xb814, 0x414b, 0x83, 0xcd, 0x85, 0x6d, 0x6f, 0xef, 0x48, 0x22, 2); // DEVPROP_TYPE_STRING
+DEFINE_PROPERTYKEY(PKEY_DeviceInterface_Enabled,       0x026e516e, 0xb814, 0x414b, 0x83, 0xcd, 0x85, 0x6d, 0x6f, 0xef, 0x48, 0x22, 3); // DEVPROP_TYPE_BOOLEAN
+DEFINE_PROPERTYKEY(PKEY_DeviceInterface_ClassGuid,     0x026e516e, 0xb814, 0x414b, 0x83, 0xcd, 0x85, 0x6d, 0x6f, 0xef, 0x48, 0x22, 4); // DEVPROP_TYPE_GUID
+
+//
+// Device interface class properties
+//
+DEFINE_PROPERTYKEY(PKEY_DeviceInterfaceClass_DefaultInterface,  0x14c83a99, 0x0b3f, 0x44b7, 0xbe, 0x4c, 0xa1, 0x78, 0xd3, 0x99, 0x05, 0x64, 2); // DEVPROP_TYPE_STRING
+
+
+
+
+ portaudio/src/hostapi/wasapi/mingw-include/audioclient.h view
@@ -0,0 +1,1177 @@+
+
+/* this ALWAYS GENERATED file contains the definitions for the interfaces */
+
+
+ /* File created by MIDL compiler version 7.00.0499 */
+/* Compiler settings for audioclient.idl:
+    Oicf, W1, Zp8, env=Win32 (32b run)
+    protocol : dce , ms_ext, c_ext, robust
+    error checks: allocation ref bounds_check enum stub_data 
+    VC __declspec() decoration level: 
+         __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+         DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING(  )
+
+#pragma warning( disable: 4049 )  /* more than 64k source lines */
+
+
+/* verify that the <rpcndr.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 500
+#endif
+
+/* verify that the <rpcsal.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCSAL_H_VERSION__
+#define __REQUIRED_RPCSAL_H_VERSION__ 100
+#endif
+
+#include "rpc.h"
+#include "rpcndr.h"
+
+#ifndef __RPCNDR_H_VERSION__
+#error this stub requires an updated version of <rpcndr.h>
+#endif // __RPCNDR_H_VERSION__
+
+#ifndef COM_NO_WINDOWS_H
+#include "windows.h"
+#include "ole2.h"
+#endif /*COM_NO_WINDOWS_H*/
+
+#ifndef __audioclient_h__
+#define __audioclient_h__
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#pragma once
+#endif
+
+/* Forward Declarations */ 
+
+#ifndef __IAudioClient_FWD_DEFINED__
+#define __IAudioClient_FWD_DEFINED__
+typedef interface IAudioClient IAudioClient;
+#endif 	/* __IAudioClient_FWD_DEFINED__ */
+
+
+#ifndef __IAudioRenderClient_FWD_DEFINED__
+#define __IAudioRenderClient_FWD_DEFINED__
+typedef interface IAudioRenderClient IAudioRenderClient;
+#endif 	/* __IAudioRenderClient_FWD_DEFINED__ */
+
+
+#ifndef __IAudioCaptureClient_FWD_DEFINED__
+#define __IAudioCaptureClient_FWD_DEFINED__
+typedef interface IAudioCaptureClient IAudioCaptureClient;
+#endif 	/* __IAudioCaptureClient_FWD_DEFINED__ */
+
+
+#ifndef __IAudioClock_FWD_DEFINED__
+#define __IAudioClock_FWD_DEFINED__
+typedef interface IAudioClock IAudioClock;
+#endif 	/* __IAudioClock_FWD_DEFINED__ */
+
+
+#ifndef __ISimpleAudioVolume_FWD_DEFINED__
+#define __ISimpleAudioVolume_FWD_DEFINED__
+typedef interface ISimpleAudioVolume ISimpleAudioVolume;
+#endif 	/* __ISimpleAudioVolume_FWD_DEFINED__ */
+
+
+#ifndef __IAudioStreamVolume_FWD_DEFINED__
+#define __IAudioStreamVolume_FWD_DEFINED__
+typedef interface IAudioStreamVolume IAudioStreamVolume;
+#endif 	/* __IAudioStreamVolume_FWD_DEFINED__ */
+
+
+#ifndef __IChannelAudioVolume_FWD_DEFINED__
+#define __IChannelAudioVolume_FWD_DEFINED__
+typedef interface IChannelAudioVolume IChannelAudioVolume;
+#endif 	/* __IChannelAudioVolume_FWD_DEFINED__ */
+
+
+/* header files for imported files */
+#include "wtypes.h"
+#include "unknwn.h"
+#include "AudioSessionTypes.h"
+
+#ifdef __cplusplus
+extern "C"{
+#endif 
+
+
+/* interface __MIDL_itf_audioclient_0000_0000 */
+/* [local] */ 
+
+#if 0
+typedef /* [hidden][restricted] */ struct WAVEFORMATEX
+    {
+    WORD wFormatTag;
+    WORD nChannels;
+    DWORD nSamplesPerSec;
+    DWORD nAvgBytesPerSec;
+    WORD nBlockAlign;
+    WORD wBitsPerSample;
+    WORD cbSize;
+    } 	WAVEFORMATEX;
+
+#else
+#include <mmreg.h>
+#endif
+#if 0
+typedef /* [hidden][restricted] */ LONGLONG REFERENCE_TIME;
+
+#else
+#define _IKsControl_
+#include <ks.h>
+#include <ksmedia.h>
+#endif
+
+enum _AUDCLNT_BUFFERFLAGS
+    {	AUDCLNT_BUFFERFLAGS_DATA_DISCONTINUITY	= 0x1,
+	AUDCLNT_BUFFERFLAGS_SILENT	= 0x2,
+	AUDCLNT_BUFFERFLAGS_TIMESTAMP_ERROR	= 0x4
+    } ;
+
+
+extern RPC_IF_HANDLE __MIDL_itf_audioclient_0000_0000_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_audioclient_0000_0000_v0_0_s_ifspec;
+
+#ifndef __IAudioClient_INTERFACE_DEFINED__
+#define __IAudioClient_INTERFACE_DEFINED__
+
+/* interface IAudioClient */
+/* [local][unique][uuid][object] */ 
+
+
+EXTERN_C const IID IID_IAudioClient;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("1CB9AD4C-DBFA-4c32-B178-C2F568A703B2")
+    IAudioClient : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE Initialize( 
+            /* [in] */ 
+            __in  AUDCLNT_SHAREMODE ShareMode,
+            /* [in] */ 
+            __in  DWORD StreamFlags,
+            /* [in] */ 
+            __in  REFERENCE_TIME hnsBufferDuration,
+            /* [in] */ 
+            __in  REFERENCE_TIME hnsPeriodicity,
+            /* [in] */ 
+            __in  const WAVEFORMATEX *pFormat,
+            /* [in] */ 
+            __in_opt  LPCGUID AudioSessionGuid) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetBufferSize( 
+            /* [out] */ 
+            __out  UINT32 *pNumBufferFrames) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetStreamLatency( 
+            /* [out] */ 
+            __out  REFERENCE_TIME *phnsLatency) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetCurrentPadding( 
+            /* [out] */ 
+            __out  UINT32 *pNumPaddingFrames) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE IsFormatSupported( 
+            /* [in] */ 
+            __in  AUDCLNT_SHAREMODE ShareMode,
+            /* [in] */ 
+            __in  const WAVEFORMATEX *pFormat,
+            /* [unique][out] */ 
+            __out_opt  WAVEFORMATEX **ppClosestMatch) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetMixFormat( 
+            /* [out] */ 
+            __out  WAVEFORMATEX **ppDeviceFormat) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetDevicePeriod( 
+            /* [out] */ 
+            __out_opt  REFERENCE_TIME *phnsDefaultDevicePeriod,
+            /* [out] */ 
+            __out_opt  REFERENCE_TIME *phnsMinimumDevicePeriod) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE Start( void) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE Stop( void) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE Reset( void) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE SetEventHandle( 
+            /* [in] */ HANDLE eventHandle) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetService( 
+            /* [in] */ 
+            __in  REFIID riid,
+            /* [iid_is][out] */ 
+            __out  void **ppv) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioClientVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioClient * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioClient * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioClient * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *Initialize )( 
+            IAudioClient * This,
+            /* [in] */ 
+            __in  AUDCLNT_SHAREMODE ShareMode,
+            /* [in] */ 
+            __in  DWORD StreamFlags,
+            /* [in] */ 
+            __in  REFERENCE_TIME hnsBufferDuration,
+            /* [in] */ 
+            __in  REFERENCE_TIME hnsPeriodicity,
+            /* [in] */ 
+            __in  const WAVEFORMATEX *pFormat,
+            /* [in] */ 
+            __in_opt  LPCGUID AudioSessionGuid);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetBufferSize )( 
+            IAudioClient * This,
+            /* [out] */ 
+            __out  UINT32 *pNumBufferFrames);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetStreamLatency )( 
+            IAudioClient * This,
+            /* [out] */ 
+            __out  REFERENCE_TIME *phnsLatency);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetCurrentPadding )( 
+            IAudioClient * This,
+            /* [out] */ 
+            __out  UINT32 *pNumPaddingFrames);
+        
+        HRESULT ( STDMETHODCALLTYPE *IsFormatSupported )( 
+            IAudioClient * This,
+            /* [in] */ 
+            __in  AUDCLNT_SHAREMODE ShareMode,
+            /* [in] */ 
+            __in  const WAVEFORMATEX *pFormat,
+            /* [unique][out] */ 
+            __out_opt  WAVEFORMATEX **ppClosestMatch);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetMixFormat )( 
+            IAudioClient * This,
+            /* [out] */ 
+            __out  WAVEFORMATEX **ppDeviceFormat);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetDevicePeriod )( 
+            IAudioClient * This,
+            /* [out] */ 
+            __out_opt  REFERENCE_TIME *phnsDefaultDevicePeriod,
+            /* [out] */ 
+            __out_opt  REFERENCE_TIME *phnsMinimumDevicePeriod);
+        
+        HRESULT ( STDMETHODCALLTYPE *Start )( 
+            IAudioClient * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *Stop )( 
+            IAudioClient * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *Reset )( 
+            IAudioClient * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetEventHandle )( 
+            IAudioClient * This,
+            /* [in] */ HANDLE eventHandle);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetService )( 
+            IAudioClient * This,
+            /* [in] */ 
+            __in  REFIID riid,
+            /* [iid_is][out] */ 
+            __out  void **ppv);
+        
+        END_INTERFACE
+    } IAudioClientVtbl;
+
+    interface IAudioClient
+    {
+        CONST_VTBL struct IAudioClientVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioClient_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioClient_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioClient_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioClient_Initialize(This,ShareMode,StreamFlags,hnsBufferDuration,hnsPeriodicity,pFormat,AudioSessionGuid)	\
+    ( (This)->lpVtbl -> Initialize(This,ShareMode,StreamFlags,hnsBufferDuration,hnsPeriodicity,pFormat,AudioSessionGuid) ) 
+
+#define IAudioClient_GetBufferSize(This,pNumBufferFrames)	\
+    ( (This)->lpVtbl -> GetBufferSize(This,pNumBufferFrames) ) 
+
+#define IAudioClient_GetStreamLatency(This,phnsLatency)	\
+    ( (This)->lpVtbl -> GetStreamLatency(This,phnsLatency) ) 
+
+#define IAudioClient_GetCurrentPadding(This,pNumPaddingFrames)	\
+    ( (This)->lpVtbl -> GetCurrentPadding(This,pNumPaddingFrames) ) 
+
+#define IAudioClient_IsFormatSupported(This,ShareMode,pFormat,ppClosestMatch)	\
+    ( (This)->lpVtbl -> IsFormatSupported(This,ShareMode,pFormat,ppClosestMatch) ) 
+
+#define IAudioClient_GetMixFormat(This,ppDeviceFormat)	\
+    ( (This)->lpVtbl -> GetMixFormat(This,ppDeviceFormat) ) 
+
+#define IAudioClient_GetDevicePeriod(This,phnsDefaultDevicePeriod,phnsMinimumDevicePeriod)	\
+    ( (This)->lpVtbl -> GetDevicePeriod(This,phnsDefaultDevicePeriod,phnsMinimumDevicePeriod) ) 
+
+#define IAudioClient_Start(This)	\
+    ( (This)->lpVtbl -> Start(This) ) 
+
+#define IAudioClient_Stop(This)	\
+    ( (This)->lpVtbl -> Stop(This) ) 
+
+#define IAudioClient_Reset(This)	\
+    ( (This)->lpVtbl -> Reset(This) ) 
+
+#define IAudioClient_SetEventHandle(This,eventHandle)	\
+    ( (This)->lpVtbl -> SetEventHandle(This,eventHandle) ) 
+
+#define IAudioClient_GetService(This,riid,ppv)	\
+    ( (This)->lpVtbl -> GetService(This,riid,ppv) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioClient_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAudioRenderClient_INTERFACE_DEFINED__
+#define __IAudioRenderClient_INTERFACE_DEFINED__
+
+/* interface IAudioRenderClient */
+/* [local][unique][helpstring][uuid][object] */ 
+
+
+EXTERN_C const IID IID_IAudioRenderClient;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("F294ACFC-3146-4483-A7BF-ADDCA7C260E2")
+    IAudioRenderClient : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetBuffer( 
+            /* [in] */ 
+            __in  UINT32 NumFramesRequested,
+            /* [out] */ 
+            __out  BYTE **ppData) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE ReleaseBuffer( 
+            /* [in] */ 
+            __in  UINT32 NumFramesWritten,
+            /* [in] */ 
+            __in  DWORD dwFlags) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioRenderClientVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioRenderClient * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioRenderClient * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioRenderClient * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetBuffer )( 
+            IAudioRenderClient * This,
+            /* [in] */ 
+            __in  UINT32 NumFramesRequested,
+            /* [out] */ 
+            __out  BYTE **ppData);
+        
+        HRESULT ( STDMETHODCALLTYPE *ReleaseBuffer )( 
+            IAudioRenderClient * This,
+            /* [in] */ 
+            __in  UINT32 NumFramesWritten,
+            /* [in] */ 
+            __in  DWORD dwFlags);
+        
+        END_INTERFACE
+    } IAudioRenderClientVtbl;
+
+    interface IAudioRenderClient
+    {
+        CONST_VTBL struct IAudioRenderClientVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioRenderClient_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioRenderClient_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioRenderClient_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioRenderClient_GetBuffer(This,NumFramesRequested,ppData)	\
+    ( (This)->lpVtbl -> GetBuffer(This,NumFramesRequested,ppData) ) 
+
+#define IAudioRenderClient_ReleaseBuffer(This,NumFramesWritten,dwFlags)	\
+    ( (This)->lpVtbl -> ReleaseBuffer(This,NumFramesWritten,dwFlags) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioRenderClient_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAudioCaptureClient_INTERFACE_DEFINED__
+#define __IAudioCaptureClient_INTERFACE_DEFINED__
+
+/* interface IAudioCaptureClient */
+/* [local][unique][helpstring][uuid][object] */ 
+
+
+EXTERN_C const IID IID_IAudioCaptureClient;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("C8ADBD64-E71E-48a0-A4DE-185C395CD317")
+    IAudioCaptureClient : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetBuffer( 
+            /* [out] */ 
+            __out  BYTE **ppData,
+            /* [out] */ 
+            __out  UINT32 *pNumFramesToRead,
+            /* [out] */ 
+            __out  DWORD *pdwFlags,
+            /* [unique][out] */ 
+            __out_opt  UINT64 *pu64DevicePosition,
+            /* [unique][out] */ 
+            __out_opt  UINT64 *pu64QPCPosition) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE ReleaseBuffer( 
+            /* [in] */ 
+            __in  UINT32 NumFramesRead) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetNextPacketSize( 
+            /* [out] */ 
+            __out  UINT32 *pNumFramesInNextPacket) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioCaptureClientVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioCaptureClient * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioCaptureClient * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioCaptureClient * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetBuffer )( 
+            IAudioCaptureClient * This,
+            /* [out] */ 
+            __out  BYTE **ppData,
+            /* [out] */ 
+            __out  UINT32 *pNumFramesToRead,
+            /* [out] */ 
+            __out  DWORD *pdwFlags,
+            /* [unique][out] */ 
+            __out_opt  UINT64 *pu64DevicePosition,
+            /* [unique][out] */ 
+            __out_opt  UINT64 *pu64QPCPosition);
+        
+        HRESULT ( STDMETHODCALLTYPE *ReleaseBuffer )( 
+            IAudioCaptureClient * This,
+            /* [in] */ 
+            __in  UINT32 NumFramesRead);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetNextPacketSize )( 
+            IAudioCaptureClient * This,
+            /* [out] */ 
+            __out  UINT32 *pNumFramesInNextPacket);
+        
+        END_INTERFACE
+    } IAudioCaptureClientVtbl;
+
+    interface IAudioCaptureClient
+    {
+        CONST_VTBL struct IAudioCaptureClientVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioCaptureClient_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioCaptureClient_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioCaptureClient_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioCaptureClient_GetBuffer(This,ppData,pNumFramesToRead,pdwFlags,pu64DevicePosition,pu64QPCPosition)	\
+    ( (This)->lpVtbl -> GetBuffer(This,ppData,pNumFramesToRead,pdwFlags,pu64DevicePosition,pu64QPCPosition) ) 
+
+#define IAudioCaptureClient_ReleaseBuffer(This,NumFramesRead)	\
+    ( (This)->lpVtbl -> ReleaseBuffer(This,NumFramesRead) ) 
+
+#define IAudioCaptureClient_GetNextPacketSize(This,pNumFramesInNextPacket)	\
+    ( (This)->lpVtbl -> GetNextPacketSize(This,pNumFramesInNextPacket) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioCaptureClient_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_audioclient_0000_0003 */
+/* [local] */ 
+
+#define AUDIOCLOCK_CHARACTERISTIC_FIXED_FREQ  0x00000001
+
+
+extern RPC_IF_HANDLE __MIDL_itf_audioclient_0000_0003_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_audioclient_0000_0003_v0_0_s_ifspec;
+
+#ifndef __IAudioClock_INTERFACE_DEFINED__
+#define __IAudioClock_INTERFACE_DEFINED__
+
+/* interface IAudioClock */
+/* [local][unique][uuid][object] */ 
+
+
+EXTERN_C const IID IID_IAudioClock;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("CD63314F-3FBA-4a1b-812C-EF96358728E7")
+    IAudioClock : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetFrequency( 
+            /* [out] */ 
+            __out  UINT64 *pu64Frequency) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetPosition( 
+            /* [out] */ 
+            __out  UINT64 *pu64Position,
+            /* [unique][out] */ 
+            __out_opt  UINT64 *pu64QPCPosition) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetCharacteristics( 
+            /* [out] */ 
+            __out  DWORD *pdwCharacteristics) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioClockVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioClock * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioClock * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioClock * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetFrequency )( 
+            IAudioClock * This,
+            /* [out] */ 
+            __out  UINT64 *pu64Frequency);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPosition )( 
+            IAudioClock * This,
+            /* [out] */ 
+            __out  UINT64 *pu64Position,
+            /* [unique][out] */ 
+            __out_opt  UINT64 *pu64QPCPosition);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetCharacteristics )( 
+            IAudioClock * This,
+            /* [out] */ 
+            __out  DWORD *pdwCharacteristics);
+        
+        END_INTERFACE
+    } IAudioClockVtbl;
+
+    interface IAudioClock
+    {
+        CONST_VTBL struct IAudioClockVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioClock_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioClock_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioClock_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioClock_GetFrequency(This,pu64Frequency)	\
+    ( (This)->lpVtbl -> GetFrequency(This,pu64Frequency) ) 
+
+#define IAudioClock_GetPosition(This,pu64Position,pu64QPCPosition)	\
+    ( (This)->lpVtbl -> GetPosition(This,pu64Position,pu64QPCPosition) ) 
+
+#define IAudioClock_GetCharacteristics(This,pdwCharacteristics)	\
+    ( (This)->lpVtbl -> GetCharacteristics(This,pdwCharacteristics) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioClock_INTERFACE_DEFINED__ */
+
+
+#ifndef __ISimpleAudioVolume_INTERFACE_DEFINED__
+#define __ISimpleAudioVolume_INTERFACE_DEFINED__
+
+/* interface ISimpleAudioVolume */
+/* [local][unique][uuid][object] */ 
+
+
+EXTERN_C const IID IID_ISimpleAudioVolume;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("87CE5498-68D6-44E5-9215-6DA47EF883D8")
+    ISimpleAudioVolume : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE SetMasterVolume( 
+            /* [in] */ 
+            __in  float fLevel,
+            /* [unique][in] */ LPCGUID EventContext) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetMasterVolume( 
+            /* [out] */ 
+            __out  float *pfLevel) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE SetMute( 
+            /* [in] */ 
+            __in  const BOOL bMute,
+            /* [unique][in] */ LPCGUID EventContext) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetMute( 
+            /* [out] */ 
+            __out  BOOL *pbMute) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct ISimpleAudioVolumeVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            ISimpleAudioVolume * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            ISimpleAudioVolume * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            ISimpleAudioVolume * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetMasterVolume )( 
+            ISimpleAudioVolume * This,
+            /* [in] */ 
+            __in  float fLevel,
+            /* [unique][in] */ LPCGUID EventContext);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetMasterVolume )( 
+            ISimpleAudioVolume * This,
+            /* [out] */ 
+            __out  float *pfLevel);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetMute )( 
+            ISimpleAudioVolume * This,
+            /* [in] */ 
+            __in  const BOOL bMute,
+            /* [unique][in] */ LPCGUID EventContext);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetMute )( 
+            ISimpleAudioVolume * This,
+            /* [out] */ 
+            __out  BOOL *pbMute);
+        
+        END_INTERFACE
+    } ISimpleAudioVolumeVtbl;
+
+    interface ISimpleAudioVolume
+    {
+        CONST_VTBL struct ISimpleAudioVolumeVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define ISimpleAudioVolume_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define ISimpleAudioVolume_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define ISimpleAudioVolume_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define ISimpleAudioVolume_SetMasterVolume(This,fLevel,EventContext)	\
+    ( (This)->lpVtbl -> SetMasterVolume(This,fLevel,EventContext) ) 
+
+#define ISimpleAudioVolume_GetMasterVolume(This,pfLevel)	\
+    ( (This)->lpVtbl -> GetMasterVolume(This,pfLevel) ) 
+
+#define ISimpleAudioVolume_SetMute(This,bMute,EventContext)	\
+    ( (This)->lpVtbl -> SetMute(This,bMute,EventContext) ) 
+
+#define ISimpleAudioVolume_GetMute(This,pbMute)	\
+    ( (This)->lpVtbl -> GetMute(This,pbMute) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __ISimpleAudioVolume_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAudioStreamVolume_INTERFACE_DEFINED__
+#define __IAudioStreamVolume_INTERFACE_DEFINED__
+
+/* interface IAudioStreamVolume */
+/* [local][unique][uuid][object] */ 
+
+
+EXTERN_C const IID IID_IAudioStreamVolume;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("93014887-242D-4068-8A15-CF5E93B90FE3")
+    IAudioStreamVolume : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetChannelCount( 
+            /* [out] */ 
+            __out  UINT32 *pdwCount) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE SetChannelVolume( 
+            /* [in] */ 
+            __in  UINT32 dwIndex,
+            /* [in] */ 
+            __in  const float fLevel) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetChannelVolume( 
+            /* [in] */ 
+            __in  UINT32 dwIndex,
+            /* [out] */ 
+            __out  float *pfLevel) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE SetAllVolumes( 
+            /* [in] */ 
+            __in  UINT32 dwCount,
+            /* [size_is][in] */ 
+            __in_ecount(dwCount)  const float *pfVolumes) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetAllVolumes( 
+            /* [in] */ 
+            __in  UINT32 dwCount,
+            /* [size_is][out] */ 
+            __out_ecount(dwCount)  float *pfVolumes) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioStreamVolumeVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioStreamVolume * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioStreamVolume * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioStreamVolume * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetChannelCount )( 
+            IAudioStreamVolume * This,
+            /* [out] */ 
+            __out  UINT32 *pdwCount);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetChannelVolume )( 
+            IAudioStreamVolume * This,
+            /* [in] */ 
+            __in  UINT32 dwIndex,
+            /* [in] */ 
+            __in  const float fLevel);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetChannelVolume )( 
+            IAudioStreamVolume * This,
+            /* [in] */ 
+            __in  UINT32 dwIndex,
+            /* [out] */ 
+            __out  float *pfLevel);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetAllVolumes )( 
+            IAudioStreamVolume * This,
+            /* [in] */ 
+            __in  UINT32 dwCount,
+            /* [size_is][in] */ 
+            __in_ecount(dwCount)  const float *pfVolumes);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetAllVolumes )( 
+            IAudioStreamVolume * This,
+            /* [in] */ 
+            __in  UINT32 dwCount,
+            /* [size_is][out] */ 
+            __out_ecount(dwCount)  float *pfVolumes);
+        
+        END_INTERFACE
+    } IAudioStreamVolumeVtbl;
+
+    interface IAudioStreamVolume
+    {
+        CONST_VTBL struct IAudioStreamVolumeVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioStreamVolume_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioStreamVolume_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioStreamVolume_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioStreamVolume_GetChannelCount(This,pdwCount)	\
+    ( (This)->lpVtbl -> GetChannelCount(This,pdwCount) ) 
+
+#define IAudioStreamVolume_SetChannelVolume(This,dwIndex,fLevel)	\
+    ( (This)->lpVtbl -> SetChannelVolume(This,dwIndex,fLevel) ) 
+
+#define IAudioStreamVolume_GetChannelVolume(This,dwIndex,pfLevel)	\
+    ( (This)->lpVtbl -> GetChannelVolume(This,dwIndex,pfLevel) ) 
+
+#define IAudioStreamVolume_SetAllVolumes(This,dwCount,pfVolumes)	\
+    ( (This)->lpVtbl -> SetAllVolumes(This,dwCount,pfVolumes) ) 
+
+#define IAudioStreamVolume_GetAllVolumes(This,dwCount,pfVolumes)	\
+    ( (This)->lpVtbl -> GetAllVolumes(This,dwCount,pfVolumes) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioStreamVolume_INTERFACE_DEFINED__ */
+
+
+#ifndef __IChannelAudioVolume_INTERFACE_DEFINED__
+#define __IChannelAudioVolume_INTERFACE_DEFINED__
+
+/* interface IChannelAudioVolume */
+/* [local][unique][uuid][object] */ 
+
+
+EXTERN_C const IID IID_IChannelAudioVolume;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("1C158861-B533-4B30-B1CF-E853E51C59B8")
+    IChannelAudioVolume : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetChannelCount( 
+            /* [out] */ 
+            __out  UINT32 *pdwCount) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE SetChannelVolume( 
+            /* [in] */ 
+            __in  UINT32 dwIndex,
+            /* [in] */ 
+            __in  const float fLevel,
+            /* [unique][in] */ LPCGUID EventContext) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetChannelVolume( 
+            /* [in] */ 
+            __in  UINT32 dwIndex,
+            /* [out] */ 
+            __out  float *pfLevel) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE SetAllVolumes( 
+            /* [in] */ 
+            __in  UINT32 dwCount,
+            /* [size_is][in] */ 
+            __in_ecount(dwCount)  const float *pfVolumes,
+            /* [unique][in] */ LPCGUID EventContext) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetAllVolumes( 
+            /* [in] */ 
+            __in  UINT32 dwCount,
+            /* [size_is][out] */ 
+            __out_ecount(dwCount)  float *pfVolumes) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IChannelAudioVolumeVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IChannelAudioVolume * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IChannelAudioVolume * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IChannelAudioVolume * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetChannelCount )( 
+            IChannelAudioVolume * This,
+            /* [out] */ 
+            __out  UINT32 *pdwCount);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetChannelVolume )( 
+            IChannelAudioVolume * This,
+            /* [in] */ 
+            __in  UINT32 dwIndex,
+            /* [in] */ 
+            __in  const float fLevel,
+            /* [unique][in] */ LPCGUID EventContext);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetChannelVolume )( 
+            IChannelAudioVolume * This,
+            /* [in] */ 
+            __in  UINT32 dwIndex,
+            /* [out] */ 
+            __out  float *pfLevel);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetAllVolumes )( 
+            IChannelAudioVolume * This,
+            /* [in] */ 
+            __in  UINT32 dwCount,
+            /* [size_is][in] */ 
+            __in_ecount(dwCount)  const float *pfVolumes,
+            /* [unique][in] */ LPCGUID EventContext);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetAllVolumes )( 
+            IChannelAudioVolume * This,
+            /* [in] */ 
+            __in  UINT32 dwCount,
+            /* [size_is][out] */ 
+            __out_ecount(dwCount)  float *pfVolumes);
+        
+        END_INTERFACE
+    } IChannelAudioVolumeVtbl;
+
+    interface IChannelAudioVolume
+    {
+        CONST_VTBL struct IChannelAudioVolumeVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IChannelAudioVolume_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IChannelAudioVolume_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IChannelAudioVolume_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IChannelAudioVolume_GetChannelCount(This,pdwCount)	\
+    ( (This)->lpVtbl -> GetChannelCount(This,pdwCount) ) 
+
+#define IChannelAudioVolume_SetChannelVolume(This,dwIndex,fLevel,EventContext)	\
+    ( (This)->lpVtbl -> SetChannelVolume(This,dwIndex,fLevel,EventContext) ) 
+
+#define IChannelAudioVolume_GetChannelVolume(This,dwIndex,pfLevel)	\
+    ( (This)->lpVtbl -> GetChannelVolume(This,dwIndex,pfLevel) ) 
+
+#define IChannelAudioVolume_SetAllVolumes(This,dwCount,pfVolumes,EventContext)	\
+    ( (This)->lpVtbl -> SetAllVolumes(This,dwCount,pfVolumes,EventContext) ) 
+
+#define IChannelAudioVolume_GetAllVolumes(This,dwCount,pfVolumes)	\
+    ( (This)->lpVtbl -> GetAllVolumes(This,dwCount,pfVolumes) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IChannelAudioVolume_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_audioclient_0000_0007 */
+/* [local] */ 
+
+#define FACILITY_AUDCLNT 0x889
+#define AUDCLNT_ERR(n) MAKE_HRESULT(SEVERITY_ERROR, FACILITY_AUDCLNT, n)
+#define AUDCLNT_SUCCESS(n) MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_AUDCLNT, n)
+#define AUDCLNT_E_NOT_INITIALIZED            AUDCLNT_ERR(0x001)
+#define AUDCLNT_E_ALREADY_INITIALIZED        AUDCLNT_ERR(0x002)
+#define AUDCLNT_E_WRONG_ENDPOINT_TYPE        AUDCLNT_ERR(0x003)
+#define AUDCLNT_E_DEVICE_INVALIDATED         AUDCLNT_ERR(0x004)
+#define AUDCLNT_E_NOT_STOPPED                AUDCLNT_ERR(0x005)
+#define AUDCLNT_E_BUFFER_TOO_LARGE           AUDCLNT_ERR(0x006)
+#define AUDCLNT_E_OUT_OF_ORDER               AUDCLNT_ERR(0x007)
+#define AUDCLNT_E_UNSUPPORTED_FORMAT         AUDCLNT_ERR(0x008)
+#define AUDCLNT_E_INVALID_SIZE               AUDCLNT_ERR(0x009)
+#define AUDCLNT_E_DEVICE_IN_USE              AUDCLNT_ERR(0x00a)
+#define AUDCLNT_E_BUFFER_OPERATION_PENDING   AUDCLNT_ERR(0x00b)
+#define AUDCLNT_E_THREAD_NOT_REGISTERED      AUDCLNT_ERR(0x00c)
+#define AUDCLNT_E_EXCLUSIVE_MODE_NOT_ALLOWED AUDCLNT_ERR(0x00e)
+#define AUDCLNT_E_ENDPOINT_CREATE_FAILED     AUDCLNT_ERR(0x00f)
+#define AUDCLNT_E_SERVICE_NOT_RUNNING        AUDCLNT_ERR(0x010)
+#define AUDCLNT_E_EVENTHANDLE_NOT_EXPECTED     AUDCLNT_ERR(0x011)
+#define AUDCLNT_E_EXCLUSIVE_MODE_ONLY          AUDCLNT_ERR(0x012)
+#define AUDCLNT_E_BUFDURATION_PERIOD_NOT_EQUAL AUDCLNT_ERR(0x013)
+#define AUDCLNT_E_EVENTHANDLE_NOT_SET          AUDCLNT_ERR(0x014)
+#define AUDCLNT_E_INCORRECT_BUFFER_SIZE        AUDCLNT_ERR(0x015)
+#define AUDCLNT_E_BUFFER_SIZE_ERROR            AUDCLNT_ERR(0x016)
+#define AUDCLNT_E_CPUUSAGE_EXCEEDED            AUDCLNT_ERR(0x017)
+#define AUDCLNT_S_BUFFER_EMPTY              AUDCLNT_SUCCESS(0x001)
+#define AUDCLNT_S_THREAD_ALREADY_REGISTERED AUDCLNT_SUCCESS(0x002)
+#define AUDCLNT_S_POSITION_STALLED		   AUDCLNT_SUCCESS(0x003)
+
+
+extern RPC_IF_HANDLE __MIDL_itf_audioclient_0000_0007_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_audioclient_0000_0007_v0_0_s_ifspec;
+
+/* Additional Prototypes for ALL interfaces */
+
+/* end of Additional Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
+
+ portaudio/src/hostapi/wasapi/mingw-include/devicetopology.h view
@@ -0,0 +1,3275 @@+
+
+/* this ALWAYS GENERATED file contains the definitions for the interfaces */
+
+
+ /* File created by MIDL compiler version 7.00.0499 */
+/* Compiler settings for devicetopology.idl:
+    Oicf, W1, Zp8, env=Win32 (32b run)
+    protocol : dce , ms_ext, c_ext, robust
+    error checks: allocation ref bounds_check enum stub_data 
+    VC __declspec() decoration level: 
+         __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+         DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING(  )
+
+#pragma warning( disable: 4049 )  /* more than 64k source lines */
+
+
+/* verify that the <rpcndr.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 500
+#endif
+
+/* verify that the <rpcsal.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCSAL_H_VERSION__
+#define __REQUIRED_RPCSAL_H_VERSION__ 100
+#endif
+
+#include "rpc.h"
+#include "rpcndr.h"
+
+#ifndef __RPCNDR_H_VERSION__
+#error this stub requires an updated version of <rpcndr.h>
+#endif // __RPCNDR_H_VERSION__
+
+#ifndef COM_NO_WINDOWS_H
+#include "windows.h"
+#include "ole2.h"
+#endif /*COM_NO_WINDOWS_H*/
+
+#ifndef __devicetopology_h__
+#define __devicetopology_h__
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#pragma once
+#endif
+
+/* Forward Declarations */ 
+
+#ifndef __IKsControl_FWD_DEFINED__
+#define __IKsControl_FWD_DEFINED__
+typedef interface IKsControl IKsControl;
+#endif 	/* __IKsControl_FWD_DEFINED__ */
+
+
+#ifndef __IPerChannelDbLevel_FWD_DEFINED__
+#define __IPerChannelDbLevel_FWD_DEFINED__
+typedef interface IPerChannelDbLevel IPerChannelDbLevel;
+#endif 	/* __IPerChannelDbLevel_FWD_DEFINED__ */
+
+
+#ifndef __IAudioVolumeLevel_FWD_DEFINED__
+#define __IAudioVolumeLevel_FWD_DEFINED__
+typedef interface IAudioVolumeLevel IAudioVolumeLevel;
+#endif 	/* __IAudioVolumeLevel_FWD_DEFINED__ */
+
+
+#ifndef __IAudioChannelConfig_FWD_DEFINED__
+#define __IAudioChannelConfig_FWD_DEFINED__
+typedef interface IAudioChannelConfig IAudioChannelConfig;
+#endif 	/* __IAudioChannelConfig_FWD_DEFINED__ */
+
+
+#ifndef __IAudioLoudness_FWD_DEFINED__
+#define __IAudioLoudness_FWD_DEFINED__
+typedef interface IAudioLoudness IAudioLoudness;
+#endif 	/* __IAudioLoudness_FWD_DEFINED__ */
+
+
+#ifndef __IAudioInputSelector_FWD_DEFINED__
+#define __IAudioInputSelector_FWD_DEFINED__
+typedef interface IAudioInputSelector IAudioInputSelector;
+#endif 	/* __IAudioInputSelector_FWD_DEFINED__ */
+
+
+#ifndef __IAudioOutputSelector_FWD_DEFINED__
+#define __IAudioOutputSelector_FWD_DEFINED__
+typedef interface IAudioOutputSelector IAudioOutputSelector;
+#endif 	/* __IAudioOutputSelector_FWD_DEFINED__ */
+
+
+#ifndef __IAudioMute_FWD_DEFINED__
+#define __IAudioMute_FWD_DEFINED__
+typedef interface IAudioMute IAudioMute;
+#endif 	/* __IAudioMute_FWD_DEFINED__ */
+
+
+#ifndef __IAudioBass_FWD_DEFINED__
+#define __IAudioBass_FWD_DEFINED__
+typedef interface IAudioBass IAudioBass;
+#endif 	/* __IAudioBass_FWD_DEFINED__ */
+
+
+#ifndef __IAudioMidrange_FWD_DEFINED__
+#define __IAudioMidrange_FWD_DEFINED__
+typedef interface IAudioMidrange IAudioMidrange;
+#endif 	/* __IAudioMidrange_FWD_DEFINED__ */
+
+
+#ifndef __IAudioTreble_FWD_DEFINED__
+#define __IAudioTreble_FWD_DEFINED__
+typedef interface IAudioTreble IAudioTreble;
+#endif 	/* __IAudioTreble_FWD_DEFINED__ */
+
+
+#ifndef __IAudioAutoGainControl_FWD_DEFINED__
+#define __IAudioAutoGainControl_FWD_DEFINED__
+typedef interface IAudioAutoGainControl IAudioAutoGainControl;
+#endif 	/* __IAudioAutoGainControl_FWD_DEFINED__ */
+
+
+#ifndef __IAudioPeakMeter_FWD_DEFINED__
+#define __IAudioPeakMeter_FWD_DEFINED__
+typedef interface IAudioPeakMeter IAudioPeakMeter;
+#endif 	/* __IAudioPeakMeter_FWD_DEFINED__ */
+
+
+#ifndef __IDeviceSpecificProperty_FWD_DEFINED__
+#define __IDeviceSpecificProperty_FWD_DEFINED__
+typedef interface IDeviceSpecificProperty IDeviceSpecificProperty;
+#endif 	/* __IDeviceSpecificProperty_FWD_DEFINED__ */
+
+
+#ifndef __IKsFormatSupport_FWD_DEFINED__
+#define __IKsFormatSupport_FWD_DEFINED__
+typedef interface IKsFormatSupport IKsFormatSupport;
+#endif 	/* __IKsFormatSupport_FWD_DEFINED__ */
+
+
+#ifndef __IKsJackDescription_FWD_DEFINED__
+#define __IKsJackDescription_FWD_DEFINED__
+typedef interface IKsJackDescription IKsJackDescription;
+#endif 	/* __IKsJackDescription_FWD_DEFINED__ */
+
+
+#ifndef __IPartsList_FWD_DEFINED__
+#define __IPartsList_FWD_DEFINED__
+typedef interface IPartsList IPartsList;
+#endif 	/* __IPartsList_FWD_DEFINED__ */
+
+
+#ifndef __IPart_FWD_DEFINED__
+#define __IPart_FWD_DEFINED__
+typedef interface IPart IPart;
+#endif 	/* __IPart_FWD_DEFINED__ */
+
+
+#ifndef __IConnector_FWD_DEFINED__
+#define __IConnector_FWD_DEFINED__
+typedef interface IConnector IConnector;
+#endif 	/* __IConnector_FWD_DEFINED__ */
+
+
+#ifndef __ISubunit_FWD_DEFINED__
+#define __ISubunit_FWD_DEFINED__
+typedef interface ISubunit ISubunit;
+#endif 	/* __ISubunit_FWD_DEFINED__ */
+
+
+#ifndef __IControlInterface_FWD_DEFINED__
+#define __IControlInterface_FWD_DEFINED__
+typedef interface IControlInterface IControlInterface;
+#endif 	/* __IControlInterface_FWD_DEFINED__ */
+
+
+#ifndef __IControlChangeNotify_FWD_DEFINED__
+#define __IControlChangeNotify_FWD_DEFINED__
+typedef interface IControlChangeNotify IControlChangeNotify;
+#endif 	/* __IControlChangeNotify_FWD_DEFINED__ */
+
+
+#ifndef __IDeviceTopology_FWD_DEFINED__
+#define __IDeviceTopology_FWD_DEFINED__
+typedef interface IDeviceTopology IDeviceTopology;
+#endif 	/* __IDeviceTopology_FWD_DEFINED__ */
+
+
+#ifndef __DeviceTopology_FWD_DEFINED__
+#define __DeviceTopology_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class DeviceTopology DeviceTopology;
+#else
+typedef struct DeviceTopology DeviceTopology;
+#endif /* __cplusplus */
+
+#endif 	/* __DeviceTopology_FWD_DEFINED__ */
+
+
+#ifndef __IPartsList_FWD_DEFINED__
+#define __IPartsList_FWD_DEFINED__
+typedef interface IPartsList IPartsList;
+#endif 	/* __IPartsList_FWD_DEFINED__ */
+
+
+#ifndef __IPerChannelDbLevel_FWD_DEFINED__
+#define __IPerChannelDbLevel_FWD_DEFINED__
+typedef interface IPerChannelDbLevel IPerChannelDbLevel;
+#endif 	/* __IPerChannelDbLevel_FWD_DEFINED__ */
+
+
+#ifndef __IAudioVolumeLevel_FWD_DEFINED__
+#define __IAudioVolumeLevel_FWD_DEFINED__
+typedef interface IAudioVolumeLevel IAudioVolumeLevel;
+#endif 	/* __IAudioVolumeLevel_FWD_DEFINED__ */
+
+
+#ifndef __IAudioLoudness_FWD_DEFINED__
+#define __IAudioLoudness_FWD_DEFINED__
+typedef interface IAudioLoudness IAudioLoudness;
+#endif 	/* __IAudioLoudness_FWD_DEFINED__ */
+
+
+#ifndef __IAudioInputSelector_FWD_DEFINED__
+#define __IAudioInputSelector_FWD_DEFINED__
+typedef interface IAudioInputSelector IAudioInputSelector;
+#endif 	/* __IAudioInputSelector_FWD_DEFINED__ */
+
+
+#ifndef __IAudioMute_FWD_DEFINED__
+#define __IAudioMute_FWD_DEFINED__
+typedef interface IAudioMute IAudioMute;
+#endif 	/* __IAudioMute_FWD_DEFINED__ */
+
+
+#ifndef __IAudioBass_FWD_DEFINED__
+#define __IAudioBass_FWD_DEFINED__
+typedef interface IAudioBass IAudioBass;
+#endif 	/* __IAudioBass_FWD_DEFINED__ */
+
+
+#ifndef __IAudioMidrange_FWD_DEFINED__
+#define __IAudioMidrange_FWD_DEFINED__
+typedef interface IAudioMidrange IAudioMidrange;
+#endif 	/* __IAudioMidrange_FWD_DEFINED__ */
+
+
+#ifndef __IAudioTreble_FWD_DEFINED__
+#define __IAudioTreble_FWD_DEFINED__
+typedef interface IAudioTreble IAudioTreble;
+#endif 	/* __IAudioTreble_FWD_DEFINED__ */
+
+
+#ifndef __IAudioAutoGainControl_FWD_DEFINED__
+#define __IAudioAutoGainControl_FWD_DEFINED__
+typedef interface IAudioAutoGainControl IAudioAutoGainControl;
+#endif 	/* __IAudioAutoGainControl_FWD_DEFINED__ */
+
+
+#ifndef __IAudioOutputSelector_FWD_DEFINED__
+#define __IAudioOutputSelector_FWD_DEFINED__
+typedef interface IAudioOutputSelector IAudioOutputSelector;
+#endif 	/* __IAudioOutputSelector_FWD_DEFINED__ */
+
+
+#ifndef __IAudioPeakMeter_FWD_DEFINED__
+#define __IAudioPeakMeter_FWD_DEFINED__
+typedef interface IAudioPeakMeter IAudioPeakMeter;
+#endif 	/* __IAudioPeakMeter_FWD_DEFINED__ */
+
+
+#ifndef __IDeviceSpecificProperty_FWD_DEFINED__
+#define __IDeviceSpecificProperty_FWD_DEFINED__
+typedef interface IDeviceSpecificProperty IDeviceSpecificProperty;
+#endif 	/* __IDeviceSpecificProperty_FWD_DEFINED__ */
+
+
+#ifndef __IKsFormatSupport_FWD_DEFINED__
+#define __IKsFormatSupport_FWD_DEFINED__
+typedef interface IKsFormatSupport IKsFormatSupport;
+#endif 	/* __IKsFormatSupport_FWD_DEFINED__ */
+
+
+/* header files for imported files */
+#include "oaidl.h"
+#include "ocidl.h"
+#include "propidl.h"
+
+#ifdef __cplusplus
+extern "C"{
+#endif 
+
+
+/* interface __MIDL_itf_devicetopology_0000_0000 */
+/* [local] */ 
+
+#define E_NOTFOUND HRESULT_FROM_WIN32(ERROR_NOT_FOUND)
+//
+//   Flag for clients of IControlChangeNotify::OnNotify to allow those clients to identify hardware initiated notifications
+//
+#define DEVTOPO_HARDWARE_INITIATED_EVENTCONTEXT 'draH'
+/* E2C2E9DE-09B1-4B04-84E5-07931225EE04 */
+DEFINE_GUID(EVENTCONTEXT_VOLUMESLIDER, 0xE2C2E9DE,0x09B1,0x4B04,0x84, 0xE5, 0x07, 0x93, 0x12, 0x25, 0xEE, 0x04);
+#define _IKsControl_
+#include "ks.h"
+#include "ksmedia.h"
+#ifndef _KS_
+typedef /* [public] */ struct __MIDL___MIDL_itf_devicetopology_0000_0000_0001
+    {
+    ULONG FormatSize;
+    ULONG Flags;
+    ULONG SampleSize;
+    ULONG Reserved;
+    GUID MajorFormat;
+    GUID SubFormat;
+    GUID Specifier;
+    } 	KSDATAFORMAT;
+
+typedef struct __MIDL___MIDL_itf_devicetopology_0000_0000_0001 *PKSDATAFORMAT;
+
+typedef /* [public][public][public][public][public][public][public][public][public][public] */ struct __MIDL___MIDL_itf_devicetopology_0000_0000_0002
+    {
+    union 
+        {
+        struct 
+            {
+            GUID Set;
+            ULONG Id;
+            ULONG Flags;
+            } 	;
+        LONGLONG Alignment;
+        } 	;
+    } 	KSIDENTIFIER;
+
+typedef struct __MIDL___MIDL_itf_devicetopology_0000_0000_0002 *PKSIDENTIFIER;
+
+typedef /* [public][public][public][public] */ 
+enum __MIDL___MIDL_itf_devicetopology_0000_0000_0005
+    {	ePcxChanMap_FL_FR	= 0,
+	ePcxChanMap_FC_LFE	= ( ePcxChanMap_FL_FR + 1 ) ,
+	ePcxChanMap_BL_BR	= ( ePcxChanMap_FC_LFE + 1 ) ,
+	ePcxChanMap_FLC_FRC	= ( ePcxChanMap_BL_BR + 1 ) ,
+	ePcxChanMap_SL_SR	= ( ePcxChanMap_FLC_FRC + 1 ) ,
+	ePcxChanMap_Unknown	= ( ePcxChanMap_SL_SR + 1 ) 
+    } 	EChannelMapping;
+
+typedef /* [public][public][public][public] */ 
+enum __MIDL___MIDL_itf_devicetopology_0000_0000_0006
+    {	eConnTypeUnknown	= 0,
+	eConnTypeEighth	= ( eConnTypeUnknown + 1 ) ,
+	eConnTypeQuarter	= ( eConnTypeEighth + 1 ) ,
+	eConnTypeAtapiInternal	= ( eConnTypeQuarter + 1 ) ,
+	eConnTypeRCA	= ( eConnTypeAtapiInternal + 1 ) ,
+	eConnTypeOptical	= ( eConnTypeRCA + 1 ) ,
+	eConnTypeOtherDigital	= ( eConnTypeOptical + 1 ) ,
+	eConnTypeOtherAnalog	= ( eConnTypeOtherDigital + 1 ) ,
+	eConnTypeMultichannelAnalogDIN	= ( eConnTypeOtherAnalog + 1 ) ,
+	eConnTypeXlrProfessional	= ( eConnTypeMultichannelAnalogDIN + 1 ) ,
+	eConnTypeRJ11Modem	= ( eConnTypeXlrProfessional + 1 ) ,
+	eConnTypeCombination	= ( eConnTypeRJ11Modem + 1 ) 
+    } 	EPcxConnectionType;
+
+typedef /* [public][public][public][public] */ 
+enum __MIDL___MIDL_itf_devicetopology_0000_0000_0007
+    {	eGeoLocRear	= 0x1,
+	eGeoLocFront	= ( eGeoLocRear + 1 ) ,
+	eGeoLocLeft	= ( eGeoLocFront + 1 ) ,
+	eGeoLocRight	= ( eGeoLocLeft + 1 ) ,
+	eGeoLocTop	= ( eGeoLocRight + 1 ) ,
+	eGeoLocBottom	= ( eGeoLocTop + 1 ) ,
+	eGeoLocRearOPanel	= ( eGeoLocBottom + 1 ) ,
+	eGeoLocRiser	= ( eGeoLocRearOPanel + 1 ) ,
+	eGeoLocInsideMobileLid	= ( eGeoLocRiser + 1 ) ,
+	eGeoLocDrivebay	= ( eGeoLocInsideMobileLid + 1 ) ,
+	eGeoLocHDMI	= ( eGeoLocDrivebay + 1 ) ,
+	eGeoLocOutsideMobileLid	= ( eGeoLocHDMI + 1 ) ,
+	eGeoLocATAPI	= ( eGeoLocOutsideMobileLid + 1 ) ,
+	eGeoLocReserved5	= ( eGeoLocATAPI + 1 ) ,
+	eGeoLocReserved6	= ( eGeoLocReserved5 + 1 ) 
+    } 	EPcxGeoLocation;
+
+typedef /* [public][public][public][public] */ 
+enum __MIDL___MIDL_itf_devicetopology_0000_0000_0008
+    {	eGenLocPrimaryBox	= 0,
+	eGenLocInternal	= ( eGenLocPrimaryBox + 1 ) ,
+	eGenLocSeperate	= ( eGenLocInternal + 1 ) ,
+	eGenLocOther	= ( eGenLocSeperate + 1 ) 
+    } 	EPcxGenLocation;
+
+typedef /* [public][public][public][public] */ 
+enum __MIDL___MIDL_itf_devicetopology_0000_0000_0009
+    {	ePortConnJack	= 0,
+	ePortConnIntegratedDevice	= ( ePortConnJack + 1 ) ,
+	ePortConnBothIntegratedAndJack	= ( ePortConnIntegratedDevice + 1 ) ,
+	ePortConnUnknown	= ( ePortConnBothIntegratedAndJack + 1 ) 
+    } 	EPxcPortConnection;
+
+typedef /* [public][public] */ struct __MIDL___MIDL_itf_devicetopology_0000_0000_0010
+    {
+    EChannelMapping ChannelMapping;
+    COLORREF Color;
+    EPcxConnectionType ConnectionType;
+    EPcxGeoLocation GeoLocation;
+    EPcxGenLocation GenLocation;
+    EPxcPortConnection PortConnection;
+    BOOL IsConnected;
+    } 	KSJACK_DESCRIPTION;
+
+typedef struct __MIDL___MIDL_itf_devicetopology_0000_0000_0010 *PKSJACK_DESCRIPTION;
+
+typedef KSIDENTIFIER KSPROPERTY;
+
+typedef KSIDENTIFIER *PKSPROPERTY;
+
+typedef KSIDENTIFIER KSMETHOD;
+
+typedef KSIDENTIFIER *PKSMETHOD;
+
+typedef KSIDENTIFIER KSEVENT;
+
+typedef KSIDENTIFIER *PKSEVENT;
+
+#endif
+
+
+
+
+
+
+
+
+typedef /* [public][public] */ 
+enum __MIDL___MIDL_itf_devicetopology_0000_0000_0011
+    {	In	= 0,
+	Out	= ( In + 1 ) 
+    } 	DataFlow;
+
+typedef /* [public][public] */ 
+enum __MIDL___MIDL_itf_devicetopology_0000_0000_0012
+    {	Connector	= 0,
+	Subunit	= ( Connector + 1 ) 
+    } 	PartType;
+
+#define PARTTYPE_FLAG_CONNECTOR 0x00010000
+#define PARTTYPE_FLAG_SUBUNIT   0x00020000
+#define PARTTYPE_MASK           0x00030000
+#define PARTID_MASK             0x0000ffff
+typedef /* [public][public] */ 
+enum __MIDL___MIDL_itf_devicetopology_0000_0000_0013
+    {	Unknown_Connector	= 0,
+	Physical_Internal	= ( Unknown_Connector + 1 ) ,
+	Physical_External	= ( Physical_Internal + 1 ) ,
+	Software_IO	= ( Physical_External + 1 ) ,
+	Software_Fixed	= ( Software_IO + 1 ) ,
+	Network	= ( Software_Fixed + 1 ) 
+    } 	ConnectorType;
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_devicetopology_0000_0000_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_devicetopology_0000_0000_v0_0_s_ifspec;
+
+#ifndef __IKsControl_INTERFACE_DEFINED__
+#define __IKsControl_INTERFACE_DEFINED__
+
+/* interface IKsControl */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IKsControl;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("28F54685-06FD-11D2-B27A-00A0C9223196")
+    IKsControl : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE KsProperty( 
+            /* [in] */ PKSPROPERTY Property,
+            /* [in] */ ULONG PropertyLength,
+            /* [out][in] */ void *PropertyData,
+            /* [in] */ ULONG DataLength,
+            /* [out] */ ULONG *BytesReturned) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE KsMethod( 
+            /* [in] */ PKSMETHOD Method,
+            /* [in] */ ULONG MethodLength,
+            /* [out][in] */ void *MethodData,
+            /* [in] */ ULONG DataLength,
+            /* [out] */ ULONG *BytesReturned) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE KsEvent( 
+            /* [in] */ PKSEVENT Event,
+            /* [in] */ ULONG EventLength,
+            /* [out][in] */ void *EventData,
+            /* [in] */ ULONG DataLength,
+            /* [out] */ ULONG *BytesReturned) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IKsControlVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IKsControl * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IKsControl * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IKsControl * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *KsProperty )( 
+            IKsControl * This,
+            /* [in] */ PKSPROPERTY Property,
+            /* [in] */ ULONG PropertyLength,
+            /* [out][in] */ void *PropertyData,
+            /* [in] */ ULONG DataLength,
+            /* [out] */ ULONG *BytesReturned);
+        
+        HRESULT ( STDMETHODCALLTYPE *KsMethod )( 
+            IKsControl * This,
+            /* [in] */ PKSMETHOD Method,
+            /* [in] */ ULONG MethodLength,
+            /* [out][in] */ void *MethodData,
+            /* [in] */ ULONG DataLength,
+            /* [out] */ ULONG *BytesReturned);
+        
+        HRESULT ( STDMETHODCALLTYPE *KsEvent )( 
+            IKsControl * This,
+            /* [in] */ PKSEVENT Event,
+            /* [in] */ ULONG EventLength,
+            /* [out][in] */ void *EventData,
+            /* [in] */ ULONG DataLength,
+            /* [out] */ ULONG *BytesReturned);
+        
+        END_INTERFACE
+    } IKsControlVtbl;
+
+    interface IKsControl
+    {
+        CONST_VTBL struct IKsControlVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IKsControl_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IKsControl_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IKsControl_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IKsControl_KsProperty(This,Property,PropertyLength,PropertyData,DataLength,BytesReturned)	\
+    ( (This)->lpVtbl -> KsProperty(This,Property,PropertyLength,PropertyData,DataLength,BytesReturned) ) 
+
+#define IKsControl_KsMethod(This,Method,MethodLength,MethodData,DataLength,BytesReturned)	\
+    ( (This)->lpVtbl -> KsMethod(This,Method,MethodLength,MethodData,DataLength,BytesReturned) ) 
+
+#define IKsControl_KsEvent(This,Event,EventLength,EventData,DataLength,BytesReturned)	\
+    ( (This)->lpVtbl -> KsEvent(This,Event,EventLength,EventData,DataLength,BytesReturned) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IKsControl_INTERFACE_DEFINED__ */
+
+
+#ifndef __IPerChannelDbLevel_INTERFACE_DEFINED__
+#define __IPerChannelDbLevel_INTERFACE_DEFINED__
+
+/* interface IPerChannelDbLevel */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IPerChannelDbLevel;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("C2F8E001-F205-4BC9-99BC-C13B1E048CCB")
+    IPerChannelDbLevel : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetChannelCount( 
+            /* [out] */ 
+            __out  UINT *pcChannels) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetLevelRange( 
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfMinLevelDB,
+            /* [out] */ 
+            __out  float *pfMaxLevelDB,
+            /* [out] */ 
+            __out  float *pfStepping) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetLevel( 
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfLevelDB) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetLevel( 
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [in] */ 
+            __in  float fLevelDB,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetLevelUniform( 
+            /* [in] */ 
+            __in  float fLevelDB,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetLevelAllChannels( 
+            /* [size_is][in] */ 
+            __in_ecount(cChannels)  float aLevelsDB[  ],
+            /* [in] */ 
+            __in  ULONG cChannels,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPerChannelDbLevelVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPerChannelDbLevel * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPerChannelDbLevel * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPerChannelDbLevel * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetChannelCount )( 
+            IPerChannelDbLevel * This,
+            /* [out] */ 
+            __out  UINT *pcChannels);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevelRange )( 
+            IPerChannelDbLevel * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfMinLevelDB,
+            /* [out] */ 
+            __out  float *pfMaxLevelDB,
+            /* [out] */ 
+            __out  float *pfStepping);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevel )( 
+            IPerChannelDbLevel * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfLevelDB);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevel )( 
+            IPerChannelDbLevel * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [in] */ 
+            __in  float fLevelDB,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevelUniform )( 
+            IPerChannelDbLevel * This,
+            /* [in] */ 
+            __in  float fLevelDB,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevelAllChannels )( 
+            IPerChannelDbLevel * This,
+            /* [size_is][in] */ 
+            __in_ecount(cChannels)  float aLevelsDB[  ],
+            /* [in] */ 
+            __in  ULONG cChannels,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        END_INTERFACE
+    } IPerChannelDbLevelVtbl;
+
+    interface IPerChannelDbLevel
+    {
+        CONST_VTBL struct IPerChannelDbLevelVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPerChannelDbLevel_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPerChannelDbLevel_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPerChannelDbLevel_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPerChannelDbLevel_GetChannelCount(This,pcChannels)	\
+    ( (This)->lpVtbl -> GetChannelCount(This,pcChannels) ) 
+
+#define IPerChannelDbLevel_GetLevelRange(This,nChannel,pfMinLevelDB,pfMaxLevelDB,pfStepping)	\
+    ( (This)->lpVtbl -> GetLevelRange(This,nChannel,pfMinLevelDB,pfMaxLevelDB,pfStepping) ) 
+
+#define IPerChannelDbLevel_GetLevel(This,nChannel,pfLevelDB)	\
+    ( (This)->lpVtbl -> GetLevel(This,nChannel,pfLevelDB) ) 
+
+#define IPerChannelDbLevel_SetLevel(This,nChannel,fLevelDB,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetLevel(This,nChannel,fLevelDB,pguidEventContext) ) 
+
+#define IPerChannelDbLevel_SetLevelUniform(This,fLevelDB,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetLevelUniform(This,fLevelDB,pguidEventContext) ) 
+
+#define IPerChannelDbLevel_SetLevelAllChannels(This,aLevelsDB,cChannels,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetLevelAllChannels(This,aLevelsDB,cChannels,pguidEventContext) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPerChannelDbLevel_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAudioVolumeLevel_INTERFACE_DEFINED__
+#define __IAudioVolumeLevel_INTERFACE_DEFINED__
+
+/* interface IAudioVolumeLevel */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IAudioVolumeLevel;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("7FB7B48F-531D-44A2-BCB3-5AD5A134B3DC")
+    IAudioVolumeLevel : public IPerChannelDbLevel
+    {
+    public:
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioVolumeLevelVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioVolumeLevel * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioVolumeLevel * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioVolumeLevel * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetChannelCount )( 
+            IAudioVolumeLevel * This,
+            /* [out] */ 
+            __out  UINT *pcChannels);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevelRange )( 
+            IAudioVolumeLevel * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfMinLevelDB,
+            /* [out] */ 
+            __out  float *pfMaxLevelDB,
+            /* [out] */ 
+            __out  float *pfStepping);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevel )( 
+            IAudioVolumeLevel * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfLevelDB);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevel )( 
+            IAudioVolumeLevel * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [in] */ 
+            __in  float fLevelDB,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevelUniform )( 
+            IAudioVolumeLevel * This,
+            /* [in] */ 
+            __in  float fLevelDB,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevelAllChannels )( 
+            IAudioVolumeLevel * This,
+            /* [size_is][in] */ 
+            __in_ecount(cChannels)  float aLevelsDB[  ],
+            /* [in] */ 
+            __in  ULONG cChannels,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        END_INTERFACE
+    } IAudioVolumeLevelVtbl;
+
+    interface IAudioVolumeLevel
+    {
+        CONST_VTBL struct IAudioVolumeLevelVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioVolumeLevel_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioVolumeLevel_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioVolumeLevel_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioVolumeLevel_GetChannelCount(This,pcChannels)	\
+    ( (This)->lpVtbl -> GetChannelCount(This,pcChannels) ) 
+
+#define IAudioVolumeLevel_GetLevelRange(This,nChannel,pfMinLevelDB,pfMaxLevelDB,pfStepping)	\
+    ( (This)->lpVtbl -> GetLevelRange(This,nChannel,pfMinLevelDB,pfMaxLevelDB,pfStepping) ) 
+
+#define IAudioVolumeLevel_GetLevel(This,nChannel,pfLevelDB)	\
+    ( (This)->lpVtbl -> GetLevel(This,nChannel,pfLevelDB) ) 
+
+#define IAudioVolumeLevel_SetLevel(This,nChannel,fLevelDB,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetLevel(This,nChannel,fLevelDB,pguidEventContext) ) 
+
+#define IAudioVolumeLevel_SetLevelUniform(This,fLevelDB,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetLevelUniform(This,fLevelDB,pguidEventContext) ) 
+
+#define IAudioVolumeLevel_SetLevelAllChannels(This,aLevelsDB,cChannels,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetLevelAllChannels(This,aLevelsDB,cChannels,pguidEventContext) ) 
+
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioVolumeLevel_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAudioChannelConfig_INTERFACE_DEFINED__
+#define __IAudioChannelConfig_INTERFACE_DEFINED__
+
+/* interface IAudioChannelConfig */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IAudioChannelConfig;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("BB11C46F-EC28-493C-B88A-5DB88062CE98")
+    IAudioChannelConfig : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetChannelConfig( 
+            /* [in] */ DWORD dwConfig,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetChannelConfig( 
+            /* [retval][out] */ DWORD *pdwConfig) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioChannelConfigVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioChannelConfig * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioChannelConfig * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioChannelConfig * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetChannelConfig )( 
+            IAudioChannelConfig * This,
+            /* [in] */ DWORD dwConfig,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetChannelConfig )( 
+            IAudioChannelConfig * This,
+            /* [retval][out] */ DWORD *pdwConfig);
+        
+        END_INTERFACE
+    } IAudioChannelConfigVtbl;
+
+    interface IAudioChannelConfig
+    {
+        CONST_VTBL struct IAudioChannelConfigVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioChannelConfig_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioChannelConfig_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioChannelConfig_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioChannelConfig_SetChannelConfig(This,dwConfig,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetChannelConfig(This,dwConfig,pguidEventContext) ) 
+
+#define IAudioChannelConfig_GetChannelConfig(This,pdwConfig)	\
+    ( (This)->lpVtbl -> GetChannelConfig(This,pdwConfig) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioChannelConfig_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAudioLoudness_INTERFACE_DEFINED__
+#define __IAudioLoudness_INTERFACE_DEFINED__
+
+/* interface IAudioLoudness */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IAudioLoudness;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("7D8B1437-DD53-4350-9C1B-1EE2890BD938")
+    IAudioLoudness : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetEnabled( 
+            /* [out] */ 
+            __out  BOOL *pbEnabled) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetEnabled( 
+            /* [in] */ 
+            __in  BOOL bEnable,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioLoudnessVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioLoudness * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioLoudness * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioLoudness * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetEnabled )( 
+            IAudioLoudness * This,
+            /* [out] */ 
+            __out  BOOL *pbEnabled);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetEnabled )( 
+            IAudioLoudness * This,
+            /* [in] */ 
+            __in  BOOL bEnable,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        END_INTERFACE
+    } IAudioLoudnessVtbl;
+
+    interface IAudioLoudness
+    {
+        CONST_VTBL struct IAudioLoudnessVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioLoudness_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioLoudness_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioLoudness_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioLoudness_GetEnabled(This,pbEnabled)	\
+    ( (This)->lpVtbl -> GetEnabled(This,pbEnabled) ) 
+
+#define IAudioLoudness_SetEnabled(This,bEnable,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetEnabled(This,bEnable,pguidEventContext) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioLoudness_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAudioInputSelector_INTERFACE_DEFINED__
+#define __IAudioInputSelector_INTERFACE_DEFINED__
+
+/* interface IAudioInputSelector */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IAudioInputSelector;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("4F03DC02-5E6E-4653-8F72-A030C123D598")
+    IAudioInputSelector : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetSelection( 
+            /* [out] */ 
+            __out  UINT *pnIdSelected) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetSelection( 
+            /* [in] */ 
+            __in  UINT nIdSelect,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioInputSelectorVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioInputSelector * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioInputSelector * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioInputSelector * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetSelection )( 
+            IAudioInputSelector * This,
+            /* [out] */ 
+            __out  UINT *pnIdSelected);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetSelection )( 
+            IAudioInputSelector * This,
+            /* [in] */ 
+            __in  UINT nIdSelect,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        END_INTERFACE
+    } IAudioInputSelectorVtbl;
+
+    interface IAudioInputSelector
+    {
+        CONST_VTBL struct IAudioInputSelectorVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioInputSelector_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioInputSelector_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioInputSelector_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioInputSelector_GetSelection(This,pnIdSelected)	\
+    ( (This)->lpVtbl -> GetSelection(This,pnIdSelected) ) 
+
+#define IAudioInputSelector_SetSelection(This,nIdSelect,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetSelection(This,nIdSelect,pguidEventContext) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioInputSelector_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAudioOutputSelector_INTERFACE_DEFINED__
+#define __IAudioOutputSelector_INTERFACE_DEFINED__
+
+/* interface IAudioOutputSelector */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IAudioOutputSelector;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("BB515F69-94A7-429e-8B9C-271B3F11A3AB")
+    IAudioOutputSelector : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetSelection( 
+            /* [out] */ 
+            __out  UINT *pnIdSelected) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetSelection( 
+            /* [in] */ 
+            __in  UINT nIdSelect,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioOutputSelectorVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioOutputSelector * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioOutputSelector * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioOutputSelector * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetSelection )( 
+            IAudioOutputSelector * This,
+            /* [out] */ 
+            __out  UINT *pnIdSelected);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetSelection )( 
+            IAudioOutputSelector * This,
+            /* [in] */ 
+            __in  UINT nIdSelect,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        END_INTERFACE
+    } IAudioOutputSelectorVtbl;
+
+    interface IAudioOutputSelector
+    {
+        CONST_VTBL struct IAudioOutputSelectorVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioOutputSelector_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioOutputSelector_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioOutputSelector_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioOutputSelector_GetSelection(This,pnIdSelected)	\
+    ( (This)->lpVtbl -> GetSelection(This,pnIdSelected) ) 
+
+#define IAudioOutputSelector_SetSelection(This,nIdSelect,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetSelection(This,nIdSelect,pguidEventContext) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioOutputSelector_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAudioMute_INTERFACE_DEFINED__
+#define __IAudioMute_INTERFACE_DEFINED__
+
+/* interface IAudioMute */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IAudioMute;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("DF45AEEA-B74A-4B6B-AFAD-2366B6AA012E")
+    IAudioMute : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetMute( 
+            /* [in] */ 
+            __in  BOOL bMuted,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetMute( 
+            /* [out] */ 
+            __out  BOOL *pbMuted) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioMuteVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioMute * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioMute * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioMute * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetMute )( 
+            IAudioMute * This,
+            /* [in] */ 
+            __in  BOOL bMuted,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetMute )( 
+            IAudioMute * This,
+            /* [out] */ 
+            __out  BOOL *pbMuted);
+        
+        END_INTERFACE
+    } IAudioMuteVtbl;
+
+    interface IAudioMute
+    {
+        CONST_VTBL struct IAudioMuteVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioMute_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioMute_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioMute_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioMute_SetMute(This,bMuted,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetMute(This,bMuted,pguidEventContext) ) 
+
+#define IAudioMute_GetMute(This,pbMuted)	\
+    ( (This)->lpVtbl -> GetMute(This,pbMuted) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioMute_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAudioBass_INTERFACE_DEFINED__
+#define __IAudioBass_INTERFACE_DEFINED__
+
+/* interface IAudioBass */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IAudioBass;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("A2B1A1D9-4DB3-425D-A2B2-BD335CB3E2E5")
+    IAudioBass : public IPerChannelDbLevel
+    {
+    public:
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioBassVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioBass * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioBass * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioBass * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetChannelCount )( 
+            IAudioBass * This,
+            /* [out] */ 
+            __out  UINT *pcChannels);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevelRange )( 
+            IAudioBass * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfMinLevelDB,
+            /* [out] */ 
+            __out  float *pfMaxLevelDB,
+            /* [out] */ 
+            __out  float *pfStepping);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevel )( 
+            IAudioBass * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfLevelDB);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevel )( 
+            IAudioBass * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [in] */ 
+            __in  float fLevelDB,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevelUniform )( 
+            IAudioBass * This,
+            /* [in] */ 
+            __in  float fLevelDB,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevelAllChannels )( 
+            IAudioBass * This,
+            /* [size_is][in] */ 
+            __in_ecount(cChannels)  float aLevelsDB[  ],
+            /* [in] */ 
+            __in  ULONG cChannels,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        END_INTERFACE
+    } IAudioBassVtbl;
+
+    interface IAudioBass
+    {
+        CONST_VTBL struct IAudioBassVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioBass_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioBass_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioBass_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioBass_GetChannelCount(This,pcChannels)	\
+    ( (This)->lpVtbl -> GetChannelCount(This,pcChannels) ) 
+
+#define IAudioBass_GetLevelRange(This,nChannel,pfMinLevelDB,pfMaxLevelDB,pfStepping)	\
+    ( (This)->lpVtbl -> GetLevelRange(This,nChannel,pfMinLevelDB,pfMaxLevelDB,pfStepping) ) 
+
+#define IAudioBass_GetLevel(This,nChannel,pfLevelDB)	\
+    ( (This)->lpVtbl -> GetLevel(This,nChannel,pfLevelDB) ) 
+
+#define IAudioBass_SetLevel(This,nChannel,fLevelDB,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetLevel(This,nChannel,fLevelDB,pguidEventContext) ) 
+
+#define IAudioBass_SetLevelUniform(This,fLevelDB,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetLevelUniform(This,fLevelDB,pguidEventContext) ) 
+
+#define IAudioBass_SetLevelAllChannels(This,aLevelsDB,cChannels,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetLevelAllChannels(This,aLevelsDB,cChannels,pguidEventContext) ) 
+
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioBass_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAudioMidrange_INTERFACE_DEFINED__
+#define __IAudioMidrange_INTERFACE_DEFINED__
+
+/* interface IAudioMidrange */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IAudioMidrange;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("5E54B6D7-B44B-40D9-9A9E-E691D9CE6EDF")
+    IAudioMidrange : public IPerChannelDbLevel
+    {
+    public:
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioMidrangeVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioMidrange * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioMidrange * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioMidrange * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetChannelCount )( 
+            IAudioMidrange * This,
+            /* [out] */ 
+            __out  UINT *pcChannels);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevelRange )( 
+            IAudioMidrange * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfMinLevelDB,
+            /* [out] */ 
+            __out  float *pfMaxLevelDB,
+            /* [out] */ 
+            __out  float *pfStepping);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevel )( 
+            IAudioMidrange * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfLevelDB);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevel )( 
+            IAudioMidrange * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [in] */ 
+            __in  float fLevelDB,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevelUniform )( 
+            IAudioMidrange * This,
+            /* [in] */ 
+            __in  float fLevelDB,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevelAllChannels )( 
+            IAudioMidrange * This,
+            /* [size_is][in] */ 
+            __in_ecount(cChannels)  float aLevelsDB[  ],
+            /* [in] */ 
+            __in  ULONG cChannels,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        END_INTERFACE
+    } IAudioMidrangeVtbl;
+
+    interface IAudioMidrange
+    {
+        CONST_VTBL struct IAudioMidrangeVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioMidrange_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioMidrange_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioMidrange_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioMidrange_GetChannelCount(This,pcChannels)	\
+    ( (This)->lpVtbl -> GetChannelCount(This,pcChannels) ) 
+
+#define IAudioMidrange_GetLevelRange(This,nChannel,pfMinLevelDB,pfMaxLevelDB,pfStepping)	\
+    ( (This)->lpVtbl -> GetLevelRange(This,nChannel,pfMinLevelDB,pfMaxLevelDB,pfStepping) ) 
+
+#define IAudioMidrange_GetLevel(This,nChannel,pfLevelDB)	\
+    ( (This)->lpVtbl -> GetLevel(This,nChannel,pfLevelDB) ) 
+
+#define IAudioMidrange_SetLevel(This,nChannel,fLevelDB,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetLevel(This,nChannel,fLevelDB,pguidEventContext) ) 
+
+#define IAudioMidrange_SetLevelUniform(This,fLevelDB,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetLevelUniform(This,fLevelDB,pguidEventContext) ) 
+
+#define IAudioMidrange_SetLevelAllChannels(This,aLevelsDB,cChannels,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetLevelAllChannels(This,aLevelsDB,cChannels,pguidEventContext) ) 
+
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioMidrange_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAudioTreble_INTERFACE_DEFINED__
+#define __IAudioTreble_INTERFACE_DEFINED__
+
+/* interface IAudioTreble */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IAudioTreble;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("0A717812-694E-4907-B74B-BAFA5CFDCA7B")
+    IAudioTreble : public IPerChannelDbLevel
+    {
+    public:
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioTrebleVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioTreble * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioTreble * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioTreble * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetChannelCount )( 
+            IAudioTreble * This,
+            /* [out] */ 
+            __out  UINT *pcChannels);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevelRange )( 
+            IAudioTreble * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfMinLevelDB,
+            /* [out] */ 
+            __out  float *pfMaxLevelDB,
+            /* [out] */ 
+            __out  float *pfStepping);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevel )( 
+            IAudioTreble * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfLevelDB);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevel )( 
+            IAudioTreble * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [in] */ 
+            __in  float fLevelDB,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevelUniform )( 
+            IAudioTreble * This,
+            /* [in] */ 
+            __in  float fLevelDB,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetLevelAllChannels )( 
+            IAudioTreble * This,
+            /* [size_is][in] */ 
+            __in_ecount(cChannels)  float aLevelsDB[  ],
+            /* [in] */ 
+            __in  ULONG cChannels,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        END_INTERFACE
+    } IAudioTrebleVtbl;
+
+    interface IAudioTreble
+    {
+        CONST_VTBL struct IAudioTrebleVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioTreble_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioTreble_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioTreble_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioTreble_GetChannelCount(This,pcChannels)	\
+    ( (This)->lpVtbl -> GetChannelCount(This,pcChannels) ) 
+
+#define IAudioTreble_GetLevelRange(This,nChannel,pfMinLevelDB,pfMaxLevelDB,pfStepping)	\
+    ( (This)->lpVtbl -> GetLevelRange(This,nChannel,pfMinLevelDB,pfMaxLevelDB,pfStepping) ) 
+
+#define IAudioTreble_GetLevel(This,nChannel,pfLevelDB)	\
+    ( (This)->lpVtbl -> GetLevel(This,nChannel,pfLevelDB) ) 
+
+#define IAudioTreble_SetLevel(This,nChannel,fLevelDB,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetLevel(This,nChannel,fLevelDB,pguidEventContext) ) 
+
+#define IAudioTreble_SetLevelUniform(This,fLevelDB,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetLevelUniform(This,fLevelDB,pguidEventContext) ) 
+
+#define IAudioTreble_SetLevelAllChannels(This,aLevelsDB,cChannels,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetLevelAllChannels(This,aLevelsDB,cChannels,pguidEventContext) ) 
+
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioTreble_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAudioAutoGainControl_INTERFACE_DEFINED__
+#define __IAudioAutoGainControl_INTERFACE_DEFINED__
+
+/* interface IAudioAutoGainControl */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IAudioAutoGainControl;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("85401FD4-6DE4-4b9d-9869-2D6753A82F3C")
+    IAudioAutoGainControl : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetEnabled( 
+            /* [out] */ 
+            __out  BOOL *pbEnabled) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetEnabled( 
+            /* [in] */ 
+            __in  BOOL bEnable,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioAutoGainControlVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioAutoGainControl * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioAutoGainControl * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioAutoGainControl * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetEnabled )( 
+            IAudioAutoGainControl * This,
+            /* [out] */ 
+            __out  BOOL *pbEnabled);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetEnabled )( 
+            IAudioAutoGainControl * This,
+            /* [in] */ 
+            __in  BOOL bEnable,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        END_INTERFACE
+    } IAudioAutoGainControlVtbl;
+
+    interface IAudioAutoGainControl
+    {
+        CONST_VTBL struct IAudioAutoGainControlVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioAutoGainControl_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioAutoGainControl_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioAutoGainControl_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioAutoGainControl_GetEnabled(This,pbEnabled)	\
+    ( (This)->lpVtbl -> GetEnabled(This,pbEnabled) ) 
+
+#define IAudioAutoGainControl_SetEnabled(This,bEnable,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetEnabled(This,bEnable,pguidEventContext) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioAutoGainControl_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAudioPeakMeter_INTERFACE_DEFINED__
+#define __IAudioPeakMeter_INTERFACE_DEFINED__
+
+/* interface IAudioPeakMeter */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IAudioPeakMeter;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("DD79923C-0599-45e0-B8B6-C8DF7DB6E796")
+    IAudioPeakMeter : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetChannelCount( 
+            /* [out] */ 
+            __out  UINT *pcChannels) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetLevel( 
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfLevel) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioPeakMeterVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioPeakMeter * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioPeakMeter * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioPeakMeter * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetChannelCount )( 
+            IAudioPeakMeter * This,
+            /* [out] */ 
+            __out  UINT *pcChannels);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLevel )( 
+            IAudioPeakMeter * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfLevel);
+        
+        END_INTERFACE
+    } IAudioPeakMeterVtbl;
+
+    interface IAudioPeakMeter
+    {
+        CONST_VTBL struct IAudioPeakMeterVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioPeakMeter_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioPeakMeter_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioPeakMeter_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioPeakMeter_GetChannelCount(This,pcChannels)	\
+    ( (This)->lpVtbl -> GetChannelCount(This,pcChannels) ) 
+
+#define IAudioPeakMeter_GetLevel(This,nChannel,pfLevel)	\
+    ( (This)->lpVtbl -> GetLevel(This,nChannel,pfLevel) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioPeakMeter_INTERFACE_DEFINED__ */
+
+
+#ifndef __IDeviceSpecificProperty_INTERFACE_DEFINED__
+#define __IDeviceSpecificProperty_INTERFACE_DEFINED__
+
+/* interface IDeviceSpecificProperty */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IDeviceSpecificProperty;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("3B22BCBF-2586-4af0-8583-205D391B807C")
+    IDeviceSpecificProperty : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetType( 
+            /* [out] */ 
+            __deref_out  VARTYPE *pVType) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetValue( 
+            /* [out] */ 
+            __out  void *pvValue,
+            /* [out][in] */ 
+            __inout  DWORD *pcbValue) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SetValue( 
+            /* [in] */ 
+            __in  void *pvValue,
+            /* [in] */ DWORD cbValue,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Get4BRange( 
+            /* [out] */ 
+            __deref_out  LONG *plMin,
+            /* [out] */ 
+            __deref_out  LONG *plMax,
+            /* [out] */ 
+            __deref_out  LONG *plStepping) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IDeviceSpecificPropertyVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IDeviceSpecificProperty * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IDeviceSpecificProperty * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IDeviceSpecificProperty * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetType )( 
+            IDeviceSpecificProperty * This,
+            /* [out] */ 
+            __deref_out  VARTYPE *pVType);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetValue )( 
+            IDeviceSpecificProperty * This,
+            /* [out] */ 
+            __out  void *pvValue,
+            /* [out][in] */ 
+            __inout  DWORD *pcbValue);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SetValue )( 
+            IDeviceSpecificProperty * This,
+            /* [in] */ 
+            __in  void *pvValue,
+            /* [in] */ DWORD cbValue,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Get4BRange )( 
+            IDeviceSpecificProperty * This,
+            /* [out] */ 
+            __deref_out  LONG *plMin,
+            /* [out] */ 
+            __deref_out  LONG *plMax,
+            /* [out] */ 
+            __deref_out  LONG *plStepping);
+        
+        END_INTERFACE
+    } IDeviceSpecificPropertyVtbl;
+
+    interface IDeviceSpecificProperty
+    {
+        CONST_VTBL struct IDeviceSpecificPropertyVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IDeviceSpecificProperty_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IDeviceSpecificProperty_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IDeviceSpecificProperty_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IDeviceSpecificProperty_GetType(This,pVType)	\
+    ( (This)->lpVtbl -> GetType(This,pVType) ) 
+
+#define IDeviceSpecificProperty_GetValue(This,pvValue,pcbValue)	\
+    ( (This)->lpVtbl -> GetValue(This,pvValue,pcbValue) ) 
+
+#define IDeviceSpecificProperty_SetValue(This,pvValue,cbValue,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetValue(This,pvValue,cbValue,pguidEventContext) ) 
+
+#define IDeviceSpecificProperty_Get4BRange(This,plMin,plMax,plStepping)	\
+    ( (This)->lpVtbl -> Get4BRange(This,plMin,plMax,plStepping) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IDeviceSpecificProperty_INTERFACE_DEFINED__ */
+
+
+#ifndef __IKsFormatSupport_INTERFACE_DEFINED__
+#define __IKsFormatSupport_INTERFACE_DEFINED__
+
+/* interface IKsFormatSupport */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IKsFormatSupport;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("3CB4A69D-BB6F-4D2B-95B7-452D2C155DB5")
+    IKsFormatSupport : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IsFormatSupported( 
+            /* [size_is][in] */ PKSDATAFORMAT pKsFormat,
+            /* [in] */ 
+            __in  DWORD cbFormat,
+            /* [out] */ 
+            __out  BOOL *pbSupported) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetDevicePreferredFormat( 
+            /* [out] */ PKSDATAFORMAT *ppKsFormat) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IKsFormatSupportVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IKsFormatSupport * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IKsFormatSupport * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IKsFormatSupport * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *IsFormatSupported )( 
+            IKsFormatSupport * This,
+            /* [size_is][in] */ PKSDATAFORMAT pKsFormat,
+            /* [in] */ 
+            __in  DWORD cbFormat,
+            /* [out] */ 
+            __out  BOOL *pbSupported);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetDevicePreferredFormat )( 
+            IKsFormatSupport * This,
+            /* [out] */ PKSDATAFORMAT *ppKsFormat);
+        
+        END_INTERFACE
+    } IKsFormatSupportVtbl;
+
+    interface IKsFormatSupport
+    {
+        CONST_VTBL struct IKsFormatSupportVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IKsFormatSupport_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IKsFormatSupport_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IKsFormatSupport_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IKsFormatSupport_IsFormatSupported(This,pKsFormat,cbFormat,pbSupported)	\
+    ( (This)->lpVtbl -> IsFormatSupported(This,pKsFormat,cbFormat,pbSupported) ) 
+
+#define IKsFormatSupport_GetDevicePreferredFormat(This,ppKsFormat)	\
+    ( (This)->lpVtbl -> GetDevicePreferredFormat(This,ppKsFormat) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IKsFormatSupport_INTERFACE_DEFINED__ */
+
+
+#ifndef __IKsJackDescription_INTERFACE_DEFINED__
+#define __IKsJackDescription_INTERFACE_DEFINED__
+
+/* interface IKsJackDescription */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IKsJackDescription;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("4509F757-2D46-4637-8E62-CE7DB944F57B")
+    IKsJackDescription : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetJackCount( 
+            /* [out] */ 
+            __out  UINT *pcJacks) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetJackDescription( 
+            /* [in] */ UINT nJack,
+            /* [out] */ 
+            __out  KSJACK_DESCRIPTION *pDescription) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IKsJackDescriptionVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IKsJackDescription * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IKsJackDescription * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IKsJackDescription * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetJackCount )( 
+            IKsJackDescription * This,
+            /* [out] */ 
+            __out  UINT *pcJacks);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetJackDescription )( 
+            IKsJackDescription * This,
+            /* [in] */ UINT nJack,
+            /* [out] */ 
+            __out  KSJACK_DESCRIPTION *pDescription);
+        
+        END_INTERFACE
+    } IKsJackDescriptionVtbl;
+
+    interface IKsJackDescription
+    {
+        CONST_VTBL struct IKsJackDescriptionVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IKsJackDescription_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IKsJackDescription_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IKsJackDescription_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IKsJackDescription_GetJackCount(This,pcJacks)	\
+    ( (This)->lpVtbl -> GetJackCount(This,pcJacks) ) 
+
+#define IKsJackDescription_GetJackDescription(This,nJack,pDescription)	\
+    ( (This)->lpVtbl -> GetJackDescription(This,nJack,pDescription) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IKsJackDescription_INTERFACE_DEFINED__ */
+
+
+#ifndef __IPartsList_INTERFACE_DEFINED__
+#define __IPartsList_INTERFACE_DEFINED__
+
+/* interface IPartsList */
+/* [object][unique][helpstring][uuid][local] */ 
+
+
+EXTERN_C const IID IID_IPartsList;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("6DAA848C-5EB0-45CC-AEA5-998A2CDA1FFB")
+    IPartsList : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetCount( 
+            /* [out] */ 
+            __out  UINT *pCount) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetPart( 
+            /* [in] */ 
+            __in  UINT nIndex,
+            /* [out] */ 
+            __out  IPart **ppPart) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPartsListVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPartsList * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPartsList * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPartsList * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetCount )( 
+            IPartsList * This,
+            /* [out] */ 
+            __out  UINT *pCount);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetPart )( 
+            IPartsList * This,
+            /* [in] */ 
+            __in  UINT nIndex,
+            /* [out] */ 
+            __out  IPart **ppPart);
+        
+        END_INTERFACE
+    } IPartsListVtbl;
+
+    interface IPartsList
+    {
+        CONST_VTBL struct IPartsListVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPartsList_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPartsList_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPartsList_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPartsList_GetCount(This,pCount)	\
+    ( (This)->lpVtbl -> GetCount(This,pCount) ) 
+
+#define IPartsList_GetPart(This,nIndex,ppPart)	\
+    ( (This)->lpVtbl -> GetPart(This,nIndex,ppPart) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPartsList_INTERFACE_DEFINED__ */
+
+
+#ifndef __IPart_INTERFACE_DEFINED__
+#define __IPart_INTERFACE_DEFINED__
+
+/* interface IPart */
+/* [object][unique][helpstring][uuid][local] */ 
+
+
+EXTERN_C const IID IID_IPart;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("AE2DE0E4-5BCA-4F2D-AA46-5D13F8FDB3A9")
+    IPart : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetName( 
+            /* [out] */ 
+            __deref_out  LPWSTR *ppwstrName) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetLocalId( 
+            /* [out] */ 
+            __out  UINT *pnId) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetGlobalId( 
+            /* [out] */ 
+            __deref_out  LPWSTR *ppwstrGlobalId) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetPartType( 
+            /* [out] */ 
+            __out  PartType *pPartType) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetSubType( 
+            /* [out] */ GUID *pSubType) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetControlInterfaceCount( 
+            /* [out] */ 
+            __out  UINT *pCount) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetControlInterface( 
+            /* [in] */ 
+            __in  UINT nIndex,
+            /* [out] */ 
+            __out  IControlInterface **ppInterfaceDesc) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE EnumPartsIncoming( 
+            /* [out] */ 
+            __out  IPartsList **ppParts) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE EnumPartsOutgoing( 
+            /* [out] */ 
+            __out  IPartsList **ppParts) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetTopologyObject( 
+            /* [out] */ 
+            __out  IDeviceTopology **ppTopology) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Activate( 
+            /* [in] */ 
+            __in  DWORD dwClsContext,
+            /* [in] */ 
+            __in  REFIID refiid,
+            /* [iid_is][out] */ 
+            __out_opt  void **ppvObject) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE RegisterControlChangeCallback( 
+            /* [in] */ 
+            __in  REFGUID riid,
+            /* [in] */ 
+            __in  IControlChangeNotify *pNotify) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE UnregisterControlChangeCallback( 
+            /* [in] */ 
+            __in  IControlChangeNotify *pNotify) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPartVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPart * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPart * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPart * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetName )( 
+            IPart * This,
+            /* [out] */ 
+            __deref_out  LPWSTR *ppwstrName);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetLocalId )( 
+            IPart * This,
+            /* [out] */ 
+            __out  UINT *pnId);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetGlobalId )( 
+            IPart * This,
+            /* [out] */ 
+            __deref_out  LPWSTR *ppwstrGlobalId);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetPartType )( 
+            IPart * This,
+            /* [out] */ 
+            __out  PartType *pPartType);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetSubType )( 
+            IPart * This,
+            /* [out] */ GUID *pSubType);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetControlInterfaceCount )( 
+            IPart * This,
+            /* [out] */ 
+            __out  UINT *pCount);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetControlInterface )( 
+            IPart * This,
+            /* [in] */ 
+            __in  UINT nIndex,
+            /* [out] */ 
+            __out  IControlInterface **ppInterfaceDesc);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EnumPartsIncoming )( 
+            IPart * This,
+            /* [out] */ 
+            __out  IPartsList **ppParts);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EnumPartsOutgoing )( 
+            IPart * This,
+            /* [out] */ 
+            __out  IPartsList **ppParts);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetTopologyObject )( 
+            IPart * This,
+            /* [out] */ 
+            __out  IDeviceTopology **ppTopology);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Activate )( 
+            IPart * This,
+            /* [in] */ 
+            __in  DWORD dwClsContext,
+            /* [in] */ 
+            __in  REFIID refiid,
+            /* [iid_is][out] */ 
+            __out_opt  void **ppvObject);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RegisterControlChangeCallback )( 
+            IPart * This,
+            /* [in] */ 
+            __in  REFGUID riid,
+            /* [in] */ 
+            __in  IControlChangeNotify *pNotify);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *UnregisterControlChangeCallback )( 
+            IPart * This,
+            /* [in] */ 
+            __in  IControlChangeNotify *pNotify);
+        
+        END_INTERFACE
+    } IPartVtbl;
+
+    interface IPart
+    {
+        CONST_VTBL struct IPartVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPart_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPart_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPart_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPart_GetName(This,ppwstrName)	\
+    ( (This)->lpVtbl -> GetName(This,ppwstrName) ) 
+
+#define IPart_GetLocalId(This,pnId)	\
+    ( (This)->lpVtbl -> GetLocalId(This,pnId) ) 
+
+#define IPart_GetGlobalId(This,ppwstrGlobalId)	\
+    ( (This)->lpVtbl -> GetGlobalId(This,ppwstrGlobalId) ) 
+
+#define IPart_GetPartType(This,pPartType)	\
+    ( (This)->lpVtbl -> GetPartType(This,pPartType) ) 
+
+#define IPart_GetSubType(This,pSubType)	\
+    ( (This)->lpVtbl -> GetSubType(This,pSubType) ) 
+
+#define IPart_GetControlInterfaceCount(This,pCount)	\
+    ( (This)->lpVtbl -> GetControlInterfaceCount(This,pCount) ) 
+
+#define IPart_GetControlInterface(This,nIndex,ppInterfaceDesc)	\
+    ( (This)->lpVtbl -> GetControlInterface(This,nIndex,ppInterfaceDesc) ) 
+
+#define IPart_EnumPartsIncoming(This,ppParts)	\
+    ( (This)->lpVtbl -> EnumPartsIncoming(This,ppParts) ) 
+
+#define IPart_EnumPartsOutgoing(This,ppParts)	\
+    ( (This)->lpVtbl -> EnumPartsOutgoing(This,ppParts) ) 
+
+#define IPart_GetTopologyObject(This,ppTopology)	\
+    ( (This)->lpVtbl -> GetTopologyObject(This,ppTopology) ) 
+
+#define IPart_Activate(This,dwClsContext,refiid,ppvObject)	\
+    ( (This)->lpVtbl -> Activate(This,dwClsContext,refiid,ppvObject) ) 
+
+#define IPart_RegisterControlChangeCallback(This,riid,pNotify)	\
+    ( (This)->lpVtbl -> RegisterControlChangeCallback(This,riid,pNotify) ) 
+
+#define IPart_UnregisterControlChangeCallback(This,pNotify)	\
+    ( (This)->lpVtbl -> UnregisterControlChangeCallback(This,pNotify) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPart_INTERFACE_DEFINED__ */
+
+
+#ifndef __IConnector_INTERFACE_DEFINED__
+#define __IConnector_INTERFACE_DEFINED__
+
+/* interface IConnector */
+/* [object][unique][helpstring][uuid][local] */ 
+
+
+EXTERN_C const IID IID_IConnector;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("9c2c4058-23f5-41de-877a-df3af236a09e")
+    IConnector : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetType( 
+            /* [out] */ 
+            __out  ConnectorType *pType) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetDataFlow( 
+            /* [out] */ 
+            __out  DataFlow *pFlow) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE ConnectTo( 
+            /* [in] */ 
+            __in  IConnector *pConnectTo) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Disconnect( void) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IsConnected( 
+            /* [out] */ 
+            __out  BOOL *pbConnected) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetConnectedTo( 
+            /* [out] */ 
+            __out  IConnector **ppConTo) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetConnectorIdConnectedTo( 
+            /* [out] */ 
+            __deref_out  LPWSTR *ppwstrConnectorId) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetDeviceIdConnectedTo( 
+            /* [out] */ 
+            __deref_out  LPWSTR *ppwstrDeviceId) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IConnectorVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IConnector * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IConnector * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IConnector * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetType )( 
+            IConnector * This,
+            /* [out] */ 
+            __out  ConnectorType *pType);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetDataFlow )( 
+            IConnector * This,
+            /* [out] */ 
+            __out  DataFlow *pFlow);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *ConnectTo )( 
+            IConnector * This,
+            /* [in] */ 
+            __in  IConnector *pConnectTo);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Disconnect )( 
+            IConnector * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *IsConnected )( 
+            IConnector * This,
+            /* [out] */ 
+            __out  BOOL *pbConnected);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetConnectedTo )( 
+            IConnector * This,
+            /* [out] */ 
+            __out  IConnector **ppConTo);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetConnectorIdConnectedTo )( 
+            IConnector * This,
+            /* [out] */ 
+            __deref_out  LPWSTR *ppwstrConnectorId);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetDeviceIdConnectedTo )( 
+            IConnector * This,
+            /* [out] */ 
+            __deref_out  LPWSTR *ppwstrDeviceId);
+        
+        END_INTERFACE
+    } IConnectorVtbl;
+
+    interface IConnector
+    {
+        CONST_VTBL struct IConnectorVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IConnector_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IConnector_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IConnector_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IConnector_GetType(This,pType)	\
+    ( (This)->lpVtbl -> GetType(This,pType) ) 
+
+#define IConnector_GetDataFlow(This,pFlow)	\
+    ( (This)->lpVtbl -> GetDataFlow(This,pFlow) ) 
+
+#define IConnector_ConnectTo(This,pConnectTo)	\
+    ( (This)->lpVtbl -> ConnectTo(This,pConnectTo) ) 
+
+#define IConnector_Disconnect(This)	\
+    ( (This)->lpVtbl -> Disconnect(This) ) 
+
+#define IConnector_IsConnected(This,pbConnected)	\
+    ( (This)->lpVtbl -> IsConnected(This,pbConnected) ) 
+
+#define IConnector_GetConnectedTo(This,ppConTo)	\
+    ( (This)->lpVtbl -> GetConnectedTo(This,ppConTo) ) 
+
+#define IConnector_GetConnectorIdConnectedTo(This,ppwstrConnectorId)	\
+    ( (This)->lpVtbl -> GetConnectorIdConnectedTo(This,ppwstrConnectorId) ) 
+
+#define IConnector_GetDeviceIdConnectedTo(This,ppwstrDeviceId)	\
+    ( (This)->lpVtbl -> GetDeviceIdConnectedTo(This,ppwstrDeviceId) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IConnector_INTERFACE_DEFINED__ */
+
+
+#ifndef __ISubunit_INTERFACE_DEFINED__
+#define __ISubunit_INTERFACE_DEFINED__
+
+/* interface ISubunit */
+/* [object][unique][helpstring][uuid][local] */ 
+
+
+EXTERN_C const IID IID_ISubunit;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("82149A85-DBA6-4487-86BB-EA8F7FEFCC71")
+    ISubunit : public IUnknown
+    {
+    public:
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct ISubunitVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            ISubunit * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            ISubunit * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            ISubunit * This);
+        
+        END_INTERFACE
+    } ISubunitVtbl;
+
+    interface ISubunit
+    {
+        CONST_VTBL struct ISubunitVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define ISubunit_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define ISubunit_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define ISubunit_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __ISubunit_INTERFACE_DEFINED__ */
+
+
+#ifndef __IControlInterface_INTERFACE_DEFINED__
+#define __IControlInterface_INTERFACE_DEFINED__
+
+/* interface IControlInterface */
+/* [object][unique][helpstring][uuid][local] */ 
+
+
+EXTERN_C const IID IID_IControlInterface;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("45d37c3f-5140-444a-ae24-400789f3cbf3")
+    IControlInterface : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetName( 
+            /* [out] */ 
+            __deref_out  LPWSTR *ppwstrName) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetIID( 
+            /* [out] */ 
+            __out  GUID *pIID) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IControlInterfaceVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IControlInterface * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IControlInterface * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IControlInterface * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetName )( 
+            IControlInterface * This,
+            /* [out] */ 
+            __deref_out  LPWSTR *ppwstrName);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetIID )( 
+            IControlInterface * This,
+            /* [out] */ 
+            __out  GUID *pIID);
+        
+        END_INTERFACE
+    } IControlInterfaceVtbl;
+
+    interface IControlInterface
+    {
+        CONST_VTBL struct IControlInterfaceVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IControlInterface_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IControlInterface_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IControlInterface_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IControlInterface_GetName(This,ppwstrName)	\
+    ( (This)->lpVtbl -> GetName(This,ppwstrName) ) 
+
+#define IControlInterface_GetIID(This,pIID)	\
+    ( (This)->lpVtbl -> GetIID(This,pIID) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IControlInterface_INTERFACE_DEFINED__ */
+
+
+#ifndef __IControlChangeNotify_INTERFACE_DEFINED__
+#define __IControlChangeNotify_INTERFACE_DEFINED__
+
+/* interface IControlChangeNotify */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IControlChangeNotify;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("A09513ED-C709-4d21-BD7B-5F34C47F3947")
+    IControlChangeNotify : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE OnNotify( 
+            /* [in] */ 
+            __in  DWORD dwSenderProcessId,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IControlChangeNotifyVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IControlChangeNotify * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IControlChangeNotify * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IControlChangeNotify * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *OnNotify )( 
+            IControlChangeNotify * This,
+            /* [in] */ 
+            __in  DWORD dwSenderProcessId,
+            /* [unique][in] */ 
+            __in_opt  LPCGUID pguidEventContext);
+        
+        END_INTERFACE
+    } IControlChangeNotifyVtbl;
+
+    interface IControlChangeNotify
+    {
+        CONST_VTBL struct IControlChangeNotifyVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IControlChangeNotify_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IControlChangeNotify_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IControlChangeNotify_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IControlChangeNotify_OnNotify(This,dwSenderProcessId,pguidEventContext)	\
+    ( (This)->lpVtbl -> OnNotify(This,dwSenderProcessId,pguidEventContext) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IControlChangeNotify_INTERFACE_DEFINED__ */
+
+
+#ifndef __IDeviceTopology_INTERFACE_DEFINED__
+#define __IDeviceTopology_INTERFACE_DEFINED__
+
+/* interface IDeviceTopology */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IDeviceTopology;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("2A07407E-6497-4A18-9787-32F79BD0D98F")
+    IDeviceTopology : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetConnectorCount( 
+            /* [out] */ 
+            __out  UINT *pCount) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetConnector( 
+            /* [in] */ 
+            __in  UINT nIndex,
+            /* [out] */ 
+            __out  IConnector **ppConnector) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetSubunitCount( 
+            /* [out] */ 
+            __out  UINT *pCount) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetSubunit( 
+            /* [in] */ 
+            __in  UINT nIndex,
+            /* [out] */ 
+            __deref_out  ISubunit **ppSubunit) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetPartById( 
+            /* [in] */ 
+            __in  UINT nId,
+            /* [out] */ 
+            __deref_out  IPart **ppPart) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetDeviceId( 
+            /* [out] */ 
+            __deref_out  LPWSTR *ppwstrDeviceId) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetSignalPath( 
+            /* [in] */ 
+            __in  IPart *pIPartFrom,
+            /* [in] */ 
+            __in  IPart *pIPartTo,
+            /* [in] */ 
+            __in  BOOL bRejectMixedPaths,
+            /* [out] */ 
+            __deref_out  IPartsList **ppParts) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IDeviceTopologyVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IDeviceTopology * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IDeviceTopology * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IDeviceTopology * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetConnectorCount )( 
+            IDeviceTopology * This,
+            /* [out] */ 
+            __out  UINT *pCount);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetConnector )( 
+            IDeviceTopology * This,
+            /* [in] */ 
+            __in  UINT nIndex,
+            /* [out] */ 
+            __out  IConnector **ppConnector);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetSubunitCount )( 
+            IDeviceTopology * This,
+            /* [out] */ 
+            __out  UINT *pCount);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetSubunit )( 
+            IDeviceTopology * This,
+            /* [in] */ 
+            __in  UINT nIndex,
+            /* [out] */ 
+            __deref_out  ISubunit **ppSubunit);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetPartById )( 
+            IDeviceTopology * This,
+            /* [in] */ 
+            __in  UINT nId,
+            /* [out] */ 
+            __deref_out  IPart **ppPart);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetDeviceId )( 
+            IDeviceTopology * This,
+            /* [out] */ 
+            __deref_out  LPWSTR *ppwstrDeviceId);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetSignalPath )( 
+            IDeviceTopology * This,
+            /* [in] */ 
+            __in  IPart *pIPartFrom,
+            /* [in] */ 
+            __in  IPart *pIPartTo,
+            /* [in] */ 
+            __in  BOOL bRejectMixedPaths,
+            /* [out] */ 
+            __deref_out  IPartsList **ppParts);
+        
+        END_INTERFACE
+    } IDeviceTopologyVtbl;
+
+    interface IDeviceTopology
+    {
+        CONST_VTBL struct IDeviceTopologyVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IDeviceTopology_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IDeviceTopology_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IDeviceTopology_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IDeviceTopology_GetConnectorCount(This,pCount)	\
+    ( (This)->lpVtbl -> GetConnectorCount(This,pCount) ) 
+
+#define IDeviceTopology_GetConnector(This,nIndex,ppConnector)	\
+    ( (This)->lpVtbl -> GetConnector(This,nIndex,ppConnector) ) 
+
+#define IDeviceTopology_GetSubunitCount(This,pCount)	\
+    ( (This)->lpVtbl -> GetSubunitCount(This,pCount) ) 
+
+#define IDeviceTopology_GetSubunit(This,nIndex,ppSubunit)	\
+    ( (This)->lpVtbl -> GetSubunit(This,nIndex,ppSubunit) ) 
+
+#define IDeviceTopology_GetPartById(This,nId,ppPart)	\
+    ( (This)->lpVtbl -> GetPartById(This,nId,ppPart) ) 
+
+#define IDeviceTopology_GetDeviceId(This,ppwstrDeviceId)	\
+    ( (This)->lpVtbl -> GetDeviceId(This,ppwstrDeviceId) ) 
+
+#define IDeviceTopology_GetSignalPath(This,pIPartFrom,pIPartTo,bRejectMixedPaths,ppParts)	\
+    ( (This)->lpVtbl -> GetSignalPath(This,pIPartFrom,pIPartTo,bRejectMixedPaths,ppParts) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IDeviceTopology_INTERFACE_DEFINED__ */
+
+
+
+#ifndef __DevTopologyLib_LIBRARY_DEFINED__
+#define __DevTopologyLib_LIBRARY_DEFINED__
+
+/* library DevTopologyLib */
+/* [helpstring][version][uuid] */ 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+EXTERN_C const IID LIBID_DevTopologyLib;
+
+EXTERN_C const CLSID CLSID_DeviceTopology;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("1DF639D0-5EC1-47AA-9379-828DC1AA8C59")
+DeviceTopology;
+#endif
+#endif /* __DevTopologyLib_LIBRARY_DEFINED__ */
+
+/* Additional Prototypes for ALL interfaces */
+
+/* end of Additional Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
+
+ portaudio/src/hostapi/wasapi/mingw-include/endpointvolume.h view
@@ -0,0 +1,620 @@+
+
+/* this ALWAYS GENERATED file contains the definitions for the interfaces */
+
+
+ /* File created by MIDL compiler version 7.00.0499 */
+/* Compiler settings for endpointvolume.idl:
+    Oicf, W1, Zp8, env=Win32 (32b run)
+    protocol : dce , ms_ext, c_ext, robust
+    error checks: allocation ref bounds_check enum stub_data 
+    VC __declspec() decoration level: 
+         __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+         DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING(  )
+
+#pragma warning( disable: 4049 )  /* more than 64k source lines */
+
+
+/* verify that the <rpcndr.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 500
+#endif
+
+/* verify that the <rpcsal.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCSAL_H_VERSION__
+#define __REQUIRED_RPCSAL_H_VERSION__ 100
+#endif
+
+#include "rpc.h"
+#include "rpcndr.h"
+
+#ifndef __RPCNDR_H_VERSION__
+#error this stub requires an updated version of <rpcndr.h>
+#endif // __RPCNDR_H_VERSION__
+
+#ifndef COM_NO_WINDOWS_H
+#include "windows.h"
+#include "ole2.h"
+#endif /*COM_NO_WINDOWS_H*/
+
+#ifndef __endpointvolume_h__
+#define __endpointvolume_h__
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#pragma once
+#endif
+
+/* Forward Declarations */ 
+
+#ifndef __IAudioEndpointVolumeCallback_FWD_DEFINED__
+#define __IAudioEndpointVolumeCallback_FWD_DEFINED__
+typedef interface IAudioEndpointVolumeCallback IAudioEndpointVolumeCallback;
+#endif 	/* __IAudioEndpointVolumeCallback_FWD_DEFINED__ */
+
+
+#ifndef __IAudioEndpointVolume_FWD_DEFINED__
+#define __IAudioEndpointVolume_FWD_DEFINED__
+typedef interface IAudioEndpointVolume IAudioEndpointVolume;
+#endif 	/* __IAudioEndpointVolume_FWD_DEFINED__ */
+
+
+#ifndef __IAudioMeterInformation_FWD_DEFINED__
+#define __IAudioMeterInformation_FWD_DEFINED__
+typedef interface IAudioMeterInformation IAudioMeterInformation;
+#endif 	/* __IAudioMeterInformation_FWD_DEFINED__ */
+
+
+/* header files for imported files */
+#include "unknwn.h"
+#include "devicetopology.h"
+
+#ifdef __cplusplus
+extern "C"{
+#endif 
+
+
+/* interface __MIDL_itf_endpointvolume_0000_0000 */
+/* [local] */ 
+
+typedef struct AUDIO_VOLUME_NOTIFICATION_DATA
+    {
+    GUID guidEventContext;
+    BOOL bMuted;
+    float fMasterVolume;
+    UINT nChannels;
+    float afChannelVolumes[ 1 ];
+    } 	AUDIO_VOLUME_NOTIFICATION_DATA;
+
+typedef struct AUDIO_VOLUME_NOTIFICATION_DATA *PAUDIO_VOLUME_NOTIFICATION_DATA;
+
+#define   ENDPOINT_HARDWARE_SUPPORT_VOLUME    0x00000001
+#define   ENDPOINT_HARDWARE_SUPPORT_MUTE      0x00000002
+#define   ENDPOINT_HARDWARE_SUPPORT_METER     0x00000004
+
+
+extern RPC_IF_HANDLE __MIDL_itf_endpointvolume_0000_0000_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_endpointvolume_0000_0000_v0_0_s_ifspec;
+
+#ifndef __IAudioEndpointVolumeCallback_INTERFACE_DEFINED__
+#define __IAudioEndpointVolumeCallback_INTERFACE_DEFINED__
+
+/* interface IAudioEndpointVolumeCallback */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IAudioEndpointVolumeCallback;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("657804FA-D6AD-4496-8A60-352752AF4F89")
+    IAudioEndpointVolumeCallback : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE OnNotify( 
+            PAUDIO_VOLUME_NOTIFICATION_DATA pNotify) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioEndpointVolumeCallbackVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioEndpointVolumeCallback * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioEndpointVolumeCallback * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioEndpointVolumeCallback * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *OnNotify )( 
+            IAudioEndpointVolumeCallback * This,
+            PAUDIO_VOLUME_NOTIFICATION_DATA pNotify);
+        
+        END_INTERFACE
+    } IAudioEndpointVolumeCallbackVtbl;
+
+    interface IAudioEndpointVolumeCallback
+    {
+        CONST_VTBL struct IAudioEndpointVolumeCallbackVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioEndpointVolumeCallback_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioEndpointVolumeCallback_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioEndpointVolumeCallback_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioEndpointVolumeCallback_OnNotify(This,pNotify)	\
+    ( (This)->lpVtbl -> OnNotify(This,pNotify) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioEndpointVolumeCallback_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAudioEndpointVolume_INTERFACE_DEFINED__
+#define __IAudioEndpointVolume_INTERFACE_DEFINED__
+
+/* interface IAudioEndpointVolume */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IAudioEndpointVolume;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("5CDF2C82-841E-4546-9722-0CF74078229A")
+    IAudioEndpointVolume : public IUnknown
+    {
+    public:
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE RegisterControlChangeNotify( 
+            /* [in] */ 
+            __in  IAudioEndpointVolumeCallback *pNotify) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE UnregisterControlChangeNotify( 
+            /* [in] */ 
+            __in  IAudioEndpointVolumeCallback *pNotify) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetChannelCount( 
+            /* [out] */ 
+            __out  UINT *pnChannelCount) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE SetMasterVolumeLevel( 
+            /* [in] */ 
+            __in  float fLevelDB,
+            /* [unique][in] */ LPCGUID pguidEventContext) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE SetMasterVolumeLevelScalar( 
+            /* [in] */ 
+            __in  float fLevel,
+            /* [unique][in] */ LPCGUID pguidEventContext) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetMasterVolumeLevel( 
+            /* [out] */ 
+            __out  float *pfLevelDB) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetMasterVolumeLevelScalar( 
+            /* [out] */ 
+            __out  float *pfLevel) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE SetChannelVolumeLevel( 
+            /* [in] */ 
+            __in  UINT nChannel,
+            float fLevelDB,
+            /* [unique][in] */ LPCGUID pguidEventContext) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE SetChannelVolumeLevelScalar( 
+            /* [in] */ 
+            __in  UINT nChannel,
+            float fLevel,
+            /* [unique][in] */ LPCGUID pguidEventContext) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetChannelVolumeLevel( 
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfLevelDB) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetChannelVolumeLevelScalar( 
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfLevel) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE SetMute( 
+            /* [in] */ 
+            __in  BOOL bMute,
+            /* [unique][in] */ LPCGUID pguidEventContext) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetMute( 
+            /* [out] */ 
+            __out  BOOL *pbMute) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetVolumeStepInfo( 
+            /* [out] */ 
+            __out  UINT *pnStep,
+            /* [out] */ 
+            __out  UINT *pnStepCount) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE VolumeStepUp( 
+            /* [unique][in] */ LPCGUID pguidEventContext) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE VolumeStepDown( 
+            /* [unique][in] */ LPCGUID pguidEventContext) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE QueryHardwareSupport( 
+            /* [out] */ 
+            __out  DWORD *pdwHardwareSupportMask) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetVolumeRange( 
+            /* [out] */ 
+            __out  float *pflVolumeMindB,
+            /* [out] */ 
+            __out  float *pflVolumeMaxdB,
+            /* [out] */ 
+            __out  float *pflVolumeIncrementdB) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioEndpointVolumeVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioEndpointVolume * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioEndpointVolume * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioEndpointVolume * This);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *RegisterControlChangeNotify )( 
+            IAudioEndpointVolume * This,
+            /* [in] */ 
+            __in  IAudioEndpointVolumeCallback *pNotify);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *UnregisterControlChangeNotify )( 
+            IAudioEndpointVolume * This,
+            /* [in] */ 
+            __in  IAudioEndpointVolumeCallback *pNotify);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetChannelCount )( 
+            IAudioEndpointVolume * This,
+            /* [out] */ 
+            __out  UINT *pnChannelCount);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *SetMasterVolumeLevel )( 
+            IAudioEndpointVolume * This,
+            /* [in] */ 
+            __in  float fLevelDB,
+            /* [unique][in] */ LPCGUID pguidEventContext);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *SetMasterVolumeLevelScalar )( 
+            IAudioEndpointVolume * This,
+            /* [in] */ 
+            __in  float fLevel,
+            /* [unique][in] */ LPCGUID pguidEventContext);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetMasterVolumeLevel )( 
+            IAudioEndpointVolume * This,
+            /* [out] */ 
+            __out  float *pfLevelDB);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetMasterVolumeLevelScalar )( 
+            IAudioEndpointVolume * This,
+            /* [out] */ 
+            __out  float *pfLevel);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *SetChannelVolumeLevel )( 
+            IAudioEndpointVolume * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            float fLevelDB,
+            /* [unique][in] */ LPCGUID pguidEventContext);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *SetChannelVolumeLevelScalar )( 
+            IAudioEndpointVolume * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            float fLevel,
+            /* [unique][in] */ LPCGUID pguidEventContext);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetChannelVolumeLevel )( 
+            IAudioEndpointVolume * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfLevelDB);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetChannelVolumeLevelScalar )( 
+            IAudioEndpointVolume * This,
+            /* [in] */ 
+            __in  UINT nChannel,
+            /* [out] */ 
+            __out  float *pfLevel);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *SetMute )( 
+            IAudioEndpointVolume * This,
+            /* [in] */ 
+            __in  BOOL bMute,
+            /* [unique][in] */ LPCGUID pguidEventContext);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetMute )( 
+            IAudioEndpointVolume * This,
+            /* [out] */ 
+            __out  BOOL *pbMute);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetVolumeStepInfo )( 
+            IAudioEndpointVolume * This,
+            /* [out] */ 
+            __out  UINT *pnStep,
+            /* [out] */ 
+            __out  UINT *pnStepCount);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *VolumeStepUp )( 
+            IAudioEndpointVolume * This,
+            /* [unique][in] */ LPCGUID pguidEventContext);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *VolumeStepDown )( 
+            IAudioEndpointVolume * This,
+            /* [unique][in] */ LPCGUID pguidEventContext);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *QueryHardwareSupport )( 
+            IAudioEndpointVolume * This,
+            /* [out] */ 
+            __out  DWORD *pdwHardwareSupportMask);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetVolumeRange )( 
+            IAudioEndpointVolume * This,
+            /* [out] */ 
+            __out  float *pflVolumeMindB,
+            /* [out] */ 
+            __out  float *pflVolumeMaxdB,
+            /* [out] */ 
+            __out  float *pflVolumeIncrementdB);
+        
+        END_INTERFACE
+    } IAudioEndpointVolumeVtbl;
+
+    interface IAudioEndpointVolume
+    {
+        CONST_VTBL struct IAudioEndpointVolumeVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioEndpointVolume_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioEndpointVolume_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioEndpointVolume_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioEndpointVolume_RegisterControlChangeNotify(This,pNotify)	\
+    ( (This)->lpVtbl -> RegisterControlChangeNotify(This,pNotify) ) 
+
+#define IAudioEndpointVolume_UnregisterControlChangeNotify(This,pNotify)	\
+    ( (This)->lpVtbl -> UnregisterControlChangeNotify(This,pNotify) ) 
+
+#define IAudioEndpointVolume_GetChannelCount(This,pnChannelCount)	\
+    ( (This)->lpVtbl -> GetChannelCount(This,pnChannelCount) ) 
+
+#define IAudioEndpointVolume_SetMasterVolumeLevel(This,fLevelDB,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetMasterVolumeLevel(This,fLevelDB,pguidEventContext) ) 
+
+#define IAudioEndpointVolume_SetMasterVolumeLevelScalar(This,fLevel,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetMasterVolumeLevelScalar(This,fLevel,pguidEventContext) ) 
+
+#define IAudioEndpointVolume_GetMasterVolumeLevel(This,pfLevelDB)	\
+    ( (This)->lpVtbl -> GetMasterVolumeLevel(This,pfLevelDB) ) 
+
+#define IAudioEndpointVolume_GetMasterVolumeLevelScalar(This,pfLevel)	\
+    ( (This)->lpVtbl -> GetMasterVolumeLevelScalar(This,pfLevel) ) 
+
+#define IAudioEndpointVolume_SetChannelVolumeLevel(This,nChannel,fLevelDB,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetChannelVolumeLevel(This,nChannel,fLevelDB,pguidEventContext) ) 
+
+#define IAudioEndpointVolume_SetChannelVolumeLevelScalar(This,nChannel,fLevel,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetChannelVolumeLevelScalar(This,nChannel,fLevel,pguidEventContext) ) 
+
+#define IAudioEndpointVolume_GetChannelVolumeLevel(This,nChannel,pfLevelDB)	\
+    ( (This)->lpVtbl -> GetChannelVolumeLevel(This,nChannel,pfLevelDB) ) 
+
+#define IAudioEndpointVolume_GetChannelVolumeLevelScalar(This,nChannel,pfLevel)	\
+    ( (This)->lpVtbl -> GetChannelVolumeLevelScalar(This,nChannel,pfLevel) ) 
+
+#define IAudioEndpointVolume_SetMute(This,bMute,pguidEventContext)	\
+    ( (This)->lpVtbl -> SetMute(This,bMute,pguidEventContext) ) 
+
+#define IAudioEndpointVolume_GetMute(This,pbMute)	\
+    ( (This)->lpVtbl -> GetMute(This,pbMute) ) 
+
+#define IAudioEndpointVolume_GetVolumeStepInfo(This,pnStep,pnStepCount)	\
+    ( (This)->lpVtbl -> GetVolumeStepInfo(This,pnStep,pnStepCount) ) 
+
+#define IAudioEndpointVolume_VolumeStepUp(This,pguidEventContext)	\
+    ( (This)->lpVtbl -> VolumeStepUp(This,pguidEventContext) ) 
+
+#define IAudioEndpointVolume_VolumeStepDown(This,pguidEventContext)	\
+    ( (This)->lpVtbl -> VolumeStepDown(This,pguidEventContext) ) 
+
+#define IAudioEndpointVolume_QueryHardwareSupport(This,pdwHardwareSupportMask)	\
+    ( (This)->lpVtbl -> QueryHardwareSupport(This,pdwHardwareSupportMask) ) 
+
+#define IAudioEndpointVolume_GetVolumeRange(This,pflVolumeMindB,pflVolumeMaxdB,pflVolumeIncrementdB)	\
+    ( (This)->lpVtbl -> GetVolumeRange(This,pflVolumeMindB,pflVolumeMaxdB,pflVolumeIncrementdB) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioEndpointVolume_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAudioMeterInformation_INTERFACE_DEFINED__
+#define __IAudioMeterInformation_INTERFACE_DEFINED__
+
+/* interface IAudioMeterInformation */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IAudioMeterInformation;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("C02216F6-8C67-4B5B-9D00-D008E73E0064")
+    IAudioMeterInformation : public IUnknown
+    {
+    public:
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetPeakValue( 
+            /* [out] */ float *pfPeak) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetMeteringChannelCount( 
+            /* [out] */ 
+            __out  UINT *pnChannelCount) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetChannelsPeakValues( 
+            /* [in] */ UINT32 u32ChannelCount,
+            /* [size_is][out] */ float *afPeakValues) = 0;
+        
+        virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE QueryHardwareSupport( 
+            /* [out] */ 
+            __out  DWORD *pdwHardwareSupportMask) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IAudioMeterInformationVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IAudioMeterInformation * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IAudioMeterInformation * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IAudioMeterInformation * This);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetPeakValue )( 
+            IAudioMeterInformation * This,
+            /* [out] */ float *pfPeak);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetMeteringChannelCount )( 
+            IAudioMeterInformation * This,
+            /* [out] */ 
+            __out  UINT *pnChannelCount);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *GetChannelsPeakValues )( 
+            IAudioMeterInformation * This,
+            /* [in] */ UINT32 u32ChannelCount,
+            /* [size_is][out] */ float *afPeakValues);
+        
+        /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE *QueryHardwareSupport )( 
+            IAudioMeterInformation * This,
+            /* [out] */ 
+            __out  DWORD *pdwHardwareSupportMask);
+        
+        END_INTERFACE
+    } IAudioMeterInformationVtbl;
+
+    interface IAudioMeterInformation
+    {
+        CONST_VTBL struct IAudioMeterInformationVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IAudioMeterInformation_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IAudioMeterInformation_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IAudioMeterInformation_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IAudioMeterInformation_GetPeakValue(This,pfPeak)	\
+    ( (This)->lpVtbl -> GetPeakValue(This,pfPeak) ) 
+
+#define IAudioMeterInformation_GetMeteringChannelCount(This,pnChannelCount)	\
+    ( (This)->lpVtbl -> GetMeteringChannelCount(This,pnChannelCount) ) 
+
+#define IAudioMeterInformation_GetChannelsPeakValues(This,u32ChannelCount,afPeakValues)	\
+    ( (This)->lpVtbl -> GetChannelsPeakValues(This,u32ChannelCount,afPeakValues) ) 
+
+#define IAudioMeterInformation_QueryHardwareSupport(This,pdwHardwareSupportMask)	\
+    ( (This)->lpVtbl -> QueryHardwareSupport(This,pdwHardwareSupportMask) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IAudioMeterInformation_INTERFACE_DEFINED__ */
+
+
+/* Additional Prototypes for ALL interfaces */
+
+/* end of Additional Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
+
+ portaudio/src/hostapi/wasapi/mingw-include/functiondiscoverykeys.h view
@@ -0,0 +1,255 @@+#pragma once
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef DEFINE_API_PKEY
+#include <propkey.h>
+#endif
+
+#include <FunctionDiscoveryKeys_devpkey.h>
+
+// FMTID_FD = {904b03a2-471d-423c-a584-f3483238a146}
+DEFINE_GUID(FMTID_FD, 0x904b03a2, 0x471d, 0x423c, 0xa5, 0x84, 0xf3, 0x48, 0x32, 0x38, 0xa1, 0x46);
+DEFINE_API_PKEY(PKEY_FD_Visibility, VisibilityFlags, 0x904b03a2, 0x471d, 0x423c, 0xa5, 0x84, 0xf3, 0x48, 0x32, 0x38, 0xa1, 0x46, 0x00000001); //    VT_UINT
+#define FD_Visibility_Default   0
+#define FD_Visibility_Hidden    1
+
+// FMTID_Device = {78C34FC8-104A-4aca-9EA4-524D52996E57}
+DEFINE_GUID(FMTID_Device, 0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57);
+
+DEFINE_API_PKEY(PKEY_Device_NotPresent,     DeviceNotPresent   , 0x904b03a2, 0x471d, 0x423c, 0xa5, 0x84, 0xf3, 0x48, 0x32, 0x38, 0xa1, 0x46, 0x00000002); //    VT_UINT
+DEFINE_API_PKEY(PKEY_Device_QueueSize,      DeviceQueueSize    , 0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57, 0x00000024); //    VT_UI4
+DEFINE_API_PKEY(PKEY_Device_Status,         DeviceStatus       , 0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57, 0x00000025); //    VT_LPWSTR
+DEFINE_API_PKEY(PKEY_Device_Comment,        DeviceComment      , 0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57, 0x00000026); //    VT_LPWSTR
+DEFINE_API_PKEY(PKEY_Device_Model,          DeviceModel        , 0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57, 0x00000027); //    VT_LPWSTR
+
+//  Name:     System.Device.BIOSVersion -- PKEY_Device_BIOSVersion
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)  Legacy code may treat this as VT_BSTR.
+//  FormatID: EAEE7F1D-6A33-44D1-9441-5F46DEF23198, 9
+DEFINE_PROPERTYKEY(PKEY_Device_BIOSVersion, 0xEAEE7F1D, 0x6A33, 0x44D1, 0x94, 0x41, 0x5F, 0x46, 0xDE, 0xF2, 0x31, 0x98, 9);
+
+DEFINE_API_PKEY(PKEY_Write_Time,            WriteTime          , 0xf53b7e1c, 0x77e0, 0x4450, 0x8c, 0x5f, 0xa7, 0x6c, 0xc7, 0xfd, 0xe0, 0x58, 0x00000100); //    VT_FILETIME
+
+#ifdef FD_XP
+DEFINE_API_PKEY(PKEY_Device_InstanceId, DeviceInstanceId   , 0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57, 0x00000100); //    VT_LPWSTR
+#endif
+DEFINE_API_PKEY(PKEY_Device_Interface,  DeviceInterface    , 0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57, 0x00000101); //    VT_CLSID
+
+DEFINE_API_PKEY(PKEY_ExposedIIDs,           ExposedIIDs       , 0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57, 0x00003002); //  VT_VECTOR | VT_CLSID
+DEFINE_API_PKEY(PKEY_ExposedCLSIDs,         ExposedCLSIDs     , 0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57, 0x00003003); //  VT_VECTOR | VT_CLSID
+DEFINE_API_PKEY(PKEY_InstanceValidatorClsid,InstanceValidator , 0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57, 0x00003004); // VT_CLSID
+
+// FMTID_WSD = {92506491-FF95-4724-A05A-5B81885A7C92}
+DEFINE_GUID(FMTID_WSD, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92);
+
+DEFINE_API_PKEY(PKEY_WSD_AddressURI, WSD_AddressURI, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92, 0x00001000);   // VT_LPWSTR
+DEFINE_API_PKEY(PKEY_WSD_Types, WSD_Types, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92, 0x00001001); // VT_LPWSTR
+DEFINE_API_PKEY(PKEY_WSD_Scopes, WSD_Scopes, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92, 0x00001002);   // VT_LPWSTR
+DEFINE_API_PKEY(PKEY_WSD_MetadataVersion, WSD_MetadataVersion, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92, 0x00001003); //VT_UI8
+DEFINE_API_PKEY(PKEY_WSD_AppSeqInstanceID, WSD_AppSeqInstanceID, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92, 0x00001004);   // VT_UI8
+DEFINE_API_PKEY(PKEY_WSD_AppSeqSessionID, WSD_AppSeqSessionID, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92, 0x00001005); // VT_LPWSTR
+DEFINE_API_PKEY(PKEY_WSD_AppSeqMessageNumber, WSD_AppSeqMessageNumber, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92, 0x00001006); // VT_UI8
+DEFINE_API_PKEY(PKEY_WSD_XAddrs, WSD_XAddrs, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92, 0x00002000); // VT_LPWSTR or VT_VECTOR | VT_LPWSTR
+
+DEFINE_API_PKEY(PKEY_WSD_MetadataClean, WSD_MetadataClean, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92, 0x00000001);   // VT_BOOL
+DEFINE_API_PKEY(PKEY_WSD_ServiceInfo, WSD_ServiceInfo, 0x92506491, 0xFF95, 0x4724, 0xA0, 0x5A, 0x5B, 0x81, 0x88, 0x5A, 0x7C, 0x92, 0x00000002);   // VT_VECTOR|VT_VARIANT (variants are VT_UNKNOWN)
+
+DEFINE_API_PKEY(PKEY_PUBSVCS_TYPE, PUBSVCS_TYPE, 0xF1B88AD3, 0x109C, 0x4FD2, 0xBA, 0x3F, 0x53, 0x5A, 0x76, 0x5F, 0x82, 0xF4, 0x00005001); // VT_LPWSTR
+DEFINE_API_PKEY(PKEY_PUBSVCS_SCOPE, PUBSVCS_SCOPE, 0x2AE2B567, 0xEECB, 0x4A3E, 0xB7, 0x53, 0x54, 0xC7, 0x25, 0x49, 0x43, 0x66, 0x00005002);   // VT_LPWSTR | VT_VECTOR
+DEFINE_API_PKEY(PKEY_PUBSVCS_METADATA, PUBSVCS_METADATA, 0x63C6D5B8, 0xF73A, 0x4ACA, 0x96, 0x7E, 0x0C, 0xC7, 0x87, 0xE0, 0xB5, 0x59, 0x00005003); // VT_LPWSTR
+DEFINE_API_PKEY(PKEY_PUBSVCS_METADATA_VERSION, PUBSVCS_METADATA_VERSION, 0xC0C96C15, 0x1823, 0x4E5B, 0x93, 0x48, 0xE8, 0x25, 0x19, 0x92, 0x3F, 0x04, 0x00005004); // VT_UI8
+DEFINE_API_PKEY(PKEY_PUBSVCS_NETWORK_PROFILES_ALLOWED, PUBSVCS_NETWORK_PROFILES_ALLOWED, 0x63C6D5B8, 0xF73A, 0x4ACA, 0x96, 0x7E, 0x0C, 0xC7, 0x87, 0xE0, 0xB5, 0x59, 0x00005005); // VT_VECTOR | VT_LPWSTR
+DEFINE_API_PKEY(PKEY_PUBSVCS_NETWORK_PROFILES_DENIED, PUBSVCS_NETWORK_PROFILES_DENIED, 0x63C6D5B8, 0xF73A, 0x4ACA, 0x96, 0x7E, 0x0C, 0xC7, 0x87, 0xE0, 0xB5, 0x59, 0x00005006); // VT_VECTOR | VT_LPWSTR
+DEFINE_API_PKEY(PKEY_PUBSVCS_NETWORK_PROFILES_DEFAULT, PUBSVCS_NETWORK_PROFILES_DEFAULT, 0x63C6D5B8, 0xF73A, 0x4ACA, 0x96, 0x7E, 0x0C, 0xC7, 0x87, 0xE0, 0xB5, 0x59, 0x00005007); // VT_BOOL
+
+// FMTID_PNPX = {656A3BB3-ECC0-43FD-8477-4AE0404A96CD}
+DEFINE_GUID(FMTID_PNPX, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD);
+        // from Discovery messages
+DEFINE_PROPERTYKEY(PKEY_PNPX_GlobalIdentity, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00001000);   // VT_LPWSTR
+DEFINE_PROPERTYKEY(PKEY_PNPX_Types, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00001001);   // VT_LPWSTR | VT_VECTOR
+DEFINE_PROPERTYKEY(PKEY_PNPX_Scopes, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00001002);   // VT_LPWSTR | VT_VECTOR
+DEFINE_PROPERTYKEY(PKEY_PNPX_XAddrs, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00001003);   // VT_LPWSTR | VT_VECTOR
+DEFINE_PROPERTYKEY(PKEY_PNPX_MetadataVersion, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00001004);   // VT_UI8
+DEFINE_PROPERTYKEY(PKEY_PNPX_ID, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00001005);   // VT_LPWSTR
+DEFINE_PROPERTYKEY(PKEY_PNPX_RootProxy, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00001006);   // VT_BOOL
+
+        // for Directed Discovery
+DEFINE_PROPERTYKEY(PKEY_PNPX_RemoteAddress, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00001006);   // VT_LPWSTR
+
+        // from ThisModel metadata
+DEFINE_PROPERTYKEY(PKEY_PNPX_Manufacturer, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00002000);   // VT_LPWSTR (localizable)
+DEFINE_PROPERTYKEY(PKEY_PNPX_ManufacturerUrl, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00002001);   // VT_LPWSTR
+DEFINE_PROPERTYKEY(PKEY_PNPX_ModelName, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00002002);   // VT_LPWSTR (localizable)
+DEFINE_PROPERTYKEY(PKEY_PNPX_ModelNumber, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00002003);   // VT_LPWSTR
+DEFINE_PROPERTYKEY(PKEY_PNPX_ModelUrl, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00002004);   // VT_LPWSTR
+DEFINE_PROPERTYKEY(PKEY_PNPX_Upc, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00002005);   // VT_LPWSTR
+DEFINE_PROPERTYKEY(PKEY_PNPX_PresentationUrl, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00002006);   // VT_LPWSTR
+        // from ThisDevice metadata
+DEFINE_PROPERTYKEY(PKEY_PNPX_FriendlyName, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00003000);   // VT_LPWSTR (localizable)
+DEFINE_PROPERTYKEY(PKEY_PNPX_FirmwareVersion, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00003001);   // VT_LPWSTR
+DEFINE_PROPERTYKEY(PKEY_PNPX_SerialNumber, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00003002);   // VT_LPWSTR
+DEFINE_PROPERTYKEY(PKEY_PNPX_DeviceCategory, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00003004);   // VT_LPWSTR | VT_VECTOR
+        // DeviceCategory values
+#define PNPX_DEVICECATEGORY_COMPUTER                            L"Computers"
+#define PNPX_DEVICECATEGORY_INPUTDEVICE                         L"Input"
+#define PNPX_DEVICECATEGORY_PRINTER                             L"Printers"
+#define PNPX_DEVICECATEGORY_SCANNER                             L"Scanners"
+#define PNPX_DEVICECATEGORY_FAX                                 L"FAX"
+#define PNPX_DEVICECATEGORY_MFP                                 L"MFP"
+#define PNPX_DEVICECATEGORY_CAMERA                              L"Cameras"
+#define PNPX_DEVICECATEGORY_STORAGE                             L"Storage"
+#define PNPX_DEVICECATEGORY_NETWORK_INFRASTRUCTURE              L"NetworkInfrastructure"
+#define PNPX_DEVICECATEGORY_DISPLAYS                            L"Displays"
+#define PNPX_DEVICECATEGORY_MULTIMEDIA_DEVICE                   L"MediaDevices"
+#define PNPX_DEVICECATEGORY_GAMING_DEVICE                       L"Gaming"
+#define PNPX_DEVICECATEGORY_TELEPHONE                           L"Phones"
+#define PNPX_DEVICECATEGORY_HOME_AUTOMATION_SYSTEM              L"HomeAutomation"
+#define PNPX_DEVICECATEGORY_HOME_SECURITY_SYSTEM                L"HomeSecurity"
+#define PNPX_DEVICECATEGORY_OTHER                               L"Other"
+DEFINE_PROPERTYKEY(PKEY_PNPX_DeviceCategory_Desc, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00003005);   // VT_LPWSTR | VT_VECTOR
+
+DEFINE_PROPERTYKEY(PKEY_PNPX_PhysicalAddress, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00003006);   // VT_UI1 | VT_VECTOR
+DEFINE_PROPERTYKEY(PKEY_PNPX_NetworkInterfaceLuid, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00003007);   // VT_UI8
+DEFINE_PROPERTYKEY(PKEY_PNPX_NetworkInterfaceGuid, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00003008);   // VT_LPWSTR
+DEFINE_PROPERTYKEY(PKEY_PNPX_IpAddress, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00003009);   // VT_LPWSTR | VT_VECTOR
+        // from Relationship metadata
+DEFINE_PROPERTYKEY(PKEY_PNPX_ServiceAddress, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00004000);   // VT_LPWSTR | VT_VECTOR
+DEFINE_PROPERTYKEY(PKEY_PNPX_ServiceId, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00004001);   // VT_LPWSTR
+DEFINE_PROPERTYKEY(PKEY_PNPX_ServiceTypes, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00004002);   // VT_LPWSTR | VT_VECTOR
+        // Association DB PKEYs
+DEFINE_API_PKEY(PKEY_PNPX_Devnode, PnPXDevNode, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00000001); // VT_BOOL
+DEFINE_API_PKEY(PKEY_PNPX_AssociationState, AssociationState, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00000002); // VT_UINT
+DEFINE_API_PKEY(PKEY_PNPX_AssociatedInstanceId, AssociatedInstanceId, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00000003); // VT_LPWSTR
+        // for Computer Discovery
+DEFINE_PROPERTYKEY(PKEY_PNPX_DomainName, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00005000);   // VT_LPWSTR
+// Use PKEY_ComputerName (propkey.h) DEFINE_PROPERTYKEY(PKEY_PNPX_MachineName, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00005001);   // VT_LPWSTR
+DEFINE_PROPERTYKEY(PKEY_PNPX_ShareName, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00005002);   // VT_LPWSTR
+
+    // SSDP Provider custom properties
+DEFINE_PROPERTYKEY(PKEY_SSDP_AltLocationInfo, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00006000);   // VT_LPWSTR
+DEFINE_PROPERTYKEY(PKEY_SSDP_DevLifeTime, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00006001);   // VT_UI4
+DEFINE_PROPERTYKEY(PKEY_SSDP_NetworkInterface, 0x656A3BB3, 0xECC0, 0x43FD, 0x84, 0x77, 0x4A, 0xE0, 0x40, 0x4A, 0x96, 0xCD, 0x00006002);   // VT_BOOL
+
+// FMTID_PNPXDynamicProperty = {4FC5077E-B686-44BE-93E3-86CAFE368CCD}
+DEFINE_GUID(FMTID_PNPXDynamicProperty, 0x4FC5077E, 0xB686, 0x44BE, 0x93, 0xE3, 0x86, 0xCA, 0xFE, 0x36, 0x8C, 0xCD);
+
+DEFINE_PROPERTYKEY(PKEY_PNPX_Installable, 0x4FC5077E, 0xB686, 0x44BE, 0x93, 0xE3, 0x86, 0xCA, 0xFE, 0x36, 0x8C, 0xCD, 0x00000001); // VT_BOOL
+DEFINE_PROPERTYKEY(PKEY_PNPX_Associated, 0x4FC5077E, 0xB686, 0x44BE, 0x93, 0xE3, 0x86, 0xCA, 0xFE, 0x36, 0x8C, 0xCD, 0x00000002); // VT_BOOL
+// PKEY_PNPX_Installed to be deprecated in Longhorn Server timeframe
+// this PKEY really represents Associated state
+#define PKEY_PNPX_Installed PKEY_PNPX_Associated    // Deprecated! Please use PKEY_PNPX_Associated
+DEFINE_PROPERTYKEY(PKEY_PNPX_CompatibleTypes, 0x4FC5077E, 0xB686, 0x44BE, 0x93, 0xE3, 0x86, 0xCA, 0xFE, 0x36, 0x8C, 0xCD, 0x00000003); // VT_LPWSTR | VT_VECTOR
+
+    // WNET Provider properties
+DEFINE_PROPERTYKEY(PKEY_WNET_Scope, 0xdebda43a, 0x37b3, 0x4383, 0x91, 0xE7, 0x44, 0x98, 0xda, 0x29, 0x95, 0xab, 0x00000001); // VT_UINT
+DEFINE_PROPERTYKEY(PKEY_WNET_Type, 0xdebda43a, 0x37b3, 0x4383, 0x91, 0xE7, 0x44, 0x98, 0xda, 0x29, 0x95, 0xab, 0x00000002); // VT_UINT
+DEFINE_PROPERTYKEY(PKEY_WNET_DisplayType, 0xdebda43a, 0x37b3, 0x4383, 0x91, 0xE7, 0x44, 0x98, 0xda, 0x29, 0x95, 0xab, 0x00000003); // VT_UINT
+DEFINE_PROPERTYKEY(PKEY_WNET_Usage, 0xdebda43a, 0x37b3, 0x4383, 0x91, 0xE7, 0x44, 0x98, 0xda, 0x29, 0x95, 0xab, 0x00000004); // VT_UINT
+DEFINE_PROPERTYKEY(PKEY_WNET_LocalName, 0xdebda43a, 0x37b3, 0x4383, 0x91, 0xE7, 0x44, 0x98, 0xda, 0x29, 0x95, 0xab, 0x00000005); // VT_LPWSTR
+DEFINE_PROPERTYKEY(PKEY_WNET_RemoteName, 0xdebda43a, 0x37b3, 0x4383, 0x91, 0xE7, 0x44, 0x98, 0xda, 0x29, 0x95, 0xab, 0x00000006); // VT_LPWSTR
+DEFINE_PROPERTYKEY(PKEY_WNET_Comment, 0xdebda43a, 0x37b3, 0x4383, 0x91, 0xE7, 0x44, 0x98, 0xda, 0x29, 0x95, 0xab, 0x00000007); // VT_LPWSTR
+DEFINE_PROPERTYKEY(PKEY_WNET_Provider, 0xdebda43a, 0x37b3, 0x4383, 0x91, 0xE7, 0x44, 0x98, 0xda, 0x29, 0x95, 0xab, 0x00000008); // VT_LPWSTR
+
+
+    // WCN Provider properties
+
+DEFINE_PROPERTYKEY(PKEY_WCN_Version, 0x88190b80, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x00000001); // VT_UI1
+DEFINE_PROPERTYKEY(PKEY_WCN_RequestType, 0x88190b81, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x00000002); // VT_INT
+DEFINE_PROPERTYKEY(PKEY_WCN_AuthType, 0x88190b82, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x00000003); // VT_INT
+DEFINE_PROPERTYKEY(PKEY_WCN_EncryptType, 0x88190b83, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x00000004); // VT_INT
+DEFINE_PROPERTYKEY(PKEY_WCN_ConnType, 0x88190b84, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x00000005); // VT_INT
+DEFINE_PROPERTYKEY(PKEY_WCN_ConfigMethods, 0x88190b85, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x00000006); // VT_INT
+// map WCN DeviceType to PKEY_PNPX_DeviceCategory
+//DEFINE_PROPERTYKEY(PKEY_WCN_DeviceType, 0x88190b86, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x00000007); // VT_INT
+DEFINE_PROPERTYKEY(PKEY_WCN_RfBand, 0x88190b87, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x00000008); // VT_INT
+DEFINE_PROPERTYKEY(PKEY_WCN_AssocState, 0x88190b88, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x00000009); // VT_INT
+DEFINE_PROPERTYKEY(PKEY_WCN_ConfigError, 0x88190b89, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x0000000a); // VT_INT
+DEFINE_PROPERTYKEY(PKEY_WCN_ConfigState, 0x88190b89, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x0000000b); // VT_UI1
+DEFINE_PROPERTYKEY(PKEY_WCN_DevicePasswordId, 0x88190b89, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x0000000c); // VT_INT
+DEFINE_PROPERTYKEY(PKEY_WCN_OSVersion, 0x88190b89, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x0000000d); // VT_UINT
+DEFINE_PROPERTYKEY(PKEY_WCN_VendorExtension, 0x88190b8a, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x0000000e); // VT_UI1 | VT_VECTOR
+DEFINE_PROPERTYKEY(PKEY_WCN_RegistrarType, 0x88190b8b, 0x4684, 0x11da, 0xa2, 0x6a, 0x00, 0x02, 0xb3, 0x98, 0x8e, 0x81, 0x0000000f); // VT_INT
+
+//-----------------------------------------------------------------------------
+// DriverPackage properties
+
+#define PKEY_DriverPackage_Model                PKEY_DrvPkg_Model
+#define PKEY_DriverPackage_VendorWebSite        PKEY_DrvPkg_VendorWebSite
+#define PKEY_DriverPackage_DetailedDescription  PKEY_DrvPkg_DetailedDescription
+#define PKEY_DriverPackage_DocumentationLink    PKEY_DrvPkg_DocumentationLink
+#define PKEY_DriverPackage_Icon                 PKEY_DrvPkg_Icon
+#define PKEY_DriverPackage_BrandingIcon         PKEY_DrvPkg_BrandingIcon
+
+//-----------------------------------------------------------------------------
+// Hardware properties
+
+DEFINE_PROPERTYKEY(PKEY_Hardware_Devinst, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 4097);
+
+//  Name:     System.Hardware.DisplayAttribute -- PKEY_Hardware_DisplayAttribute
+//  Type:     Unspecified -- VT_NULL
+//  FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 5
+DEFINE_PROPERTYKEY(PKEY_Hardware_DisplayAttribute, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 5);
+
+//  Name:     System.Hardware.DriverDate -- PKEY_Hardware_DriverDate
+//  Type:     Unspecified -- VT_NULL
+//  FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 11
+DEFINE_PROPERTYKEY(PKEY_Hardware_DriverDate, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 11);
+
+//  Name:     System.Hardware.DriverProvider -- PKEY_Hardware_DriverProvider
+//  Type:     Unspecified -- VT_NULL
+//  FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 10
+DEFINE_PROPERTYKEY(PKEY_Hardware_DriverProvider, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 10);
+
+//  Name:     System.Hardware.DriverVersion -- PKEY_Hardware_DriverVersion
+//  Type:     Unspecified -- VT_NULL
+//  FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 9
+DEFINE_PROPERTYKEY(PKEY_Hardware_DriverVersion, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 9);
+
+//  Name:     System.Hardware.Function -- PKEY_Hardware_Function
+//  Type:     Unspecified -- VT_NULL
+//  FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 4099
+DEFINE_PROPERTYKEY(PKEY_Hardware_Function, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 4099);
+
+//  Name:     System.Hardware.Icon -- PKEY_Hardware_Icon
+//  Type:     Unspecified -- VT_NULL
+//  FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 3
+DEFINE_PROPERTYKEY(PKEY_Hardware_Icon, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 3);
+
+//  Name:     System.Hardware.Image -- PKEY_Hardware_Image
+//  Type:     Unspecified -- VT_NULL
+//  FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 4098
+DEFINE_PROPERTYKEY(PKEY_Hardware_Image, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 4098);
+
+//  Name:     System.Hardware.Manufacturer -- PKEY_Hardware_Manufacturer
+//  Type:     Unspecified -- VT_NULL
+//  FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 6
+DEFINE_PROPERTYKEY(PKEY_Hardware_Manufacturer, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 6);
+
+//  Name:     System.Hardware.Model -- PKEY_Hardware_Model
+//  Type:     Unspecified -- VT_NULL
+//  FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 7
+DEFINE_PROPERTYKEY(PKEY_Hardware_Model, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 7);
+
+//  Name:     System.Hardware.Name -- PKEY_Hardware_Name
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 2
+DEFINE_PROPERTYKEY(PKEY_Hardware_Name, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 2);
+
+//  Name:     System.Hardware.SerialNumber -- PKEY_Hardware_SerialNumber
+//  Type:     Unspecified -- VT_NULL
+//  FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 8
+DEFINE_PROPERTYKEY(PKEY_Hardware_SerialNumber, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 8);
+
+//  Name:     System.Hardware.ShellAttributes -- PKEY_Hardware_ShellAttributes
+//  Type:     Unspecified -- VT_NULL
+//  FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 4100
+DEFINE_PROPERTYKEY(PKEY_Hardware_ShellAttributes, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 4100);
+
+//  Name:     System.Hardware.Status -- PKEY_Hardware_Status
+//  Type:     Unspecified -- VT_NULL
+//  FormatID: 5EAF3EF2-E0CA-4598-BF06-71ED1D9DD953, 4096
+DEFINE_PROPERTYKEY(PKEY_Hardware_Status, 0x5EAF3EF2, 0xE0CA, 0x4598, 0xBF, 0x06, 0x71, 0xED, 0x1D, 0x9D, 0xD9, 0x53, 4096);
+
+
+ portaudio/src/hostapi/wasapi/mingw-include/ks.h view
@@ -0,0 +1,3666 @@+/**+ * This file has no copyright assigned and is placed in the Public Domain.+ * This file is part of the w64 mingw-runtime package.+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.+ */+#ifndef _KS_+#define _KS_++#if __GNUC__ >= 3+#pragma GCC system_header+#endif++#ifndef __MINGW_EXTENSION+#if defined(__GNUC__) || defined(__GNUG__)+#define __MINGW_EXTENSION __extension__+#else+#define __MINGW_EXTENSION+#endif+#endif ++#ifdef __TCS__+#define _KS_NO_ANONYMOUS_STRUCTURES_ 1+#endif++#ifdef  _KS_NO_ANONYMOUS_STRUCTURES_+#define _KS_ANON_STRUCT(X)			struct X+#else+#define _KS_ANON_STRUCT(X)	__MINGW_EXTENSION struct+#endif++#ifndef _NTRTL_+#ifndef DEFINE_GUIDEX+#define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name+#endif+#ifndef STATICGUIDOF+#define STATICGUIDOF(guid) STATIC_##guid+#endif+#endif /* _NTRTL_ */++#ifndef SIZEOF_ARRAY+#define SIZEOF_ARRAY(ar) (sizeof(ar)/sizeof((ar)[0]))+#endif++#define DEFINE_GUIDSTRUCT(g,n) DEFINE_GUIDEX(n)+#define DEFINE_GUIDNAMED(n) n++#define STATIC_GUID_NULL						\+	0x00000000L,0x0000,0x0000,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00++DEFINE_GUIDSTRUCT("00000000-0000-0000-0000-000000000000",GUID_NULL);+#define GUID_NULL DEFINE_GUIDNAMED(GUID_NULL)++#define IOCTL_KS_PROPERTY CTL_CODE(FILE_DEVICE_KS,0x000,METHOD_NEITHER,FILE_ANY_ACCESS)+#define IOCTL_KS_ENABLE_EVENT CTL_CODE(FILE_DEVICE_KS,0x001,METHOD_NEITHER,FILE_ANY_ACCESS)+#define IOCTL_KS_DISABLE_EVENT CTL_CODE(FILE_DEVICE_KS,0x002,METHOD_NEITHER,FILE_ANY_ACCESS)+#define IOCTL_KS_METHOD CTL_CODE(FILE_DEVICE_KS,0x003,METHOD_NEITHER,FILE_ANY_ACCESS)+#define IOCTL_KS_WRITE_STREAM CTL_CODE(FILE_DEVICE_KS,0x004,METHOD_NEITHER,FILE_WRITE_ACCESS)+#define IOCTL_KS_READ_STREAM CTL_CODE(FILE_DEVICE_KS,0x005,METHOD_NEITHER,FILE_READ_ACCESS)+#define IOCTL_KS_RESET_STATE CTL_CODE(FILE_DEVICE_KS,0x006,METHOD_NEITHER,FILE_ANY_ACCESS)++typedef enum {+  KSRESET_BEGIN,+  KSRESET_END+} KSRESET;++typedef enum {+  KSSTATE_STOP,+  KSSTATE_ACQUIRE,+  KSSTATE_PAUSE,+  KSSTATE_RUN+} KSSTATE,*PKSSTATE;++#define KSPRIORITY_LOW		0x00000001+#define KSPRIORITY_NORMAL	0x40000000+#define KSPRIORITY_HIGH		0x80000000+#define KSPRIORITY_EXCLUSIVE	0xFFFFFFFF++typedef struct {+  ULONG PriorityClass;+  ULONG PrioritySubClass;+} KSPRIORITY,*PKSPRIORITY;++typedef struct {+  __MINGW_EXTENSION union {+    _KS_ANON_STRUCT(_IDENTIFIER)+    {+      GUID Set;+      ULONG Id;+      ULONG Flags;+    };+    LONGLONG Alignment;+  };+} KSIDENTIFIER,*PKSIDENTIFIER;++typedef KSIDENTIFIER KSPROPERTY,*PKSPROPERTY,KSMETHOD,*PKSMETHOD,KSEVENT,*PKSEVENT;++#define KSMETHOD_TYPE_NONE		0x00000000+#define KSMETHOD_TYPE_READ		0x00000001+#define KSMETHOD_TYPE_WRITE		0x00000002+#define KSMETHOD_TYPE_MODIFY		0x00000003+#define KSMETHOD_TYPE_SOURCE		0x00000004++#define KSMETHOD_TYPE_SEND		0x00000001+#define KSMETHOD_TYPE_SETSUPPORT	0x00000100+#define KSMETHOD_TYPE_BASICSUPPORT	0x00000200++#define KSMETHOD_TYPE_TOPOLOGY		0x10000000++#define KSPROPERTY_TYPE_GET		0x00000001+#define KSPROPERTY_TYPE_SET		0x00000002+#define KSPROPERTY_TYPE_SETSUPPORT	0x00000100+#define KSPROPERTY_TYPE_BASICSUPPORT	0x00000200+#define KSPROPERTY_TYPE_RELATIONS	0x00000400+#define KSPROPERTY_TYPE_SERIALIZESET	0x00000800+#define KSPROPERTY_TYPE_UNSERIALIZESET	0x00001000+#define KSPROPERTY_TYPE_SERIALIZERAW	0x00002000+#define KSPROPERTY_TYPE_UNSERIALIZERAW	0x00004000+#define KSPROPERTY_TYPE_SERIALIZESIZE	0x00008000+#define KSPROPERTY_TYPE_DEFAULTVALUES	0x00010000++#define KSPROPERTY_TYPE_TOPOLOGY	0x10000000++typedef struct {+  KSPROPERTY Property;+  ULONG NodeId;+  ULONG Reserved;+} KSP_NODE,*PKSP_NODE;++typedef struct {+  KSMETHOD Method;+  ULONG NodeId;+  ULONG Reserved;+} KSM_NODE,*PKSM_NODE;++typedef struct {+  KSEVENT Event;+  ULONG NodeId;+  ULONG Reserved;+} KSE_NODE,*PKSE_NODE;++#define STATIC_KSPROPTYPESETID_General					\+	0x97E99BA0L,0xBDEA,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("97E99BA0-BDEA-11CF-A5D6-28DB04C10000",KSPROPTYPESETID_General);+#define KSPROPTYPESETID_General DEFINE_GUIDNAMED(KSPROPTYPESETID_General)++typedef struct {+  ULONG Size;+  ULONG Count;+} KSMULTIPLE_ITEM,*PKSMULTIPLE_ITEM;++typedef struct {+  ULONG AccessFlags;+  ULONG DescriptionSize;+  KSIDENTIFIER PropTypeSet;+  ULONG MembersListCount;+  ULONG Reserved;+} KSPROPERTY_DESCRIPTION,*PKSPROPERTY_DESCRIPTION;++#define KSPROPERTY_MEMBER_RANGES		0x00000001+#define KSPROPERTY_MEMBER_STEPPEDRANGES		0x00000002+#define KSPROPERTY_MEMBER_VALUES		0x00000003++#define KSPROPERTY_MEMBER_FLAG_DEFAULT		0x00000001+#define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_MULTICHANNEL 0x00000002+#define KSPROPERTY_MEMBER_FLAG_BASICSUPPORT_UNIFORM	0x00000004++typedef struct {+  ULONG MembersFlags;+  ULONG MembersSize;+  ULONG MembersCount;+  ULONG Flags;+} KSPROPERTY_MEMBERSHEADER,*PKSPROPERTY_MEMBERSHEADER;++typedef union {+  _KS_ANON_STRUCT(_SIGNED)+  {+    LONG SignedMinimum;+    LONG SignedMaximum;+  };+  _KS_ANON_STRUCT(_UNSIGNED)+  {+    ULONG UnsignedMinimum;+    ULONG UnsignedMaximum;+  };+} KSPROPERTY_BOUNDS_LONG,*PKSPROPERTY_BOUNDS_LONG;++typedef union {+  _KS_ANON_STRUCT(_SIGNED64)+  {+    LONGLONG SignedMinimum;+    LONGLONG SignedMaximum;+  };+  _KS_ANON_STRUCT(_UNSIGNED64)+  {+    DWORDLONG UnsignedMinimum;+    DWORDLONG UnsignedMaximum;+  };+} KSPROPERTY_BOUNDS_LONGLONG,*PKSPROPERTY_BOUNDS_LONGLONG;++typedef struct {+  ULONG SteppingDelta;+  ULONG Reserved;+  KSPROPERTY_BOUNDS_LONG Bounds;+} KSPROPERTY_STEPPING_LONG,*PKSPROPERTY_STEPPING_LONG;++typedef struct {+  DWORDLONG SteppingDelta;+  KSPROPERTY_BOUNDS_LONGLONG Bounds;+} KSPROPERTY_STEPPING_LONGLONG,*PKSPROPERTY_STEPPING_LONGLONG;++#if defined(_NTDDK_)+typedef struct _KSDEVICE_DESCRIPTOR KSDEVICE_DESCRIPTOR, *PKSDEVICE_DESCRIPTOR;+typedef struct _KSDEVICE_DISPATCH KSDEVICE_DISPATCH, *PKSDEVICE_DISPATCH;+typedef struct _KSDEVICE KSDEVICE, *PKSDEVICE;+typedef struct _KSFILTERFACTORY KSFILTERFACTORY, *PKSFILTERFACTORY;+typedef struct _KSFILTER_DESCRIPTOR KSFILTER_DESCRIPTOR, *PKSFILTER_DESCRIPTOR;+typedef struct _KSFILTER_DISPATCH KSFILTER_DISPATCH, *PKSFILTER_DISPATCH;+typedef struct _KSFILTER KSFILTER, *PKSFILTER;+typedef struct _KSPIN_DESCRIPTOR_EX KSPIN_DESCRIPTOR_EX, *PKSPIN_DESCRIPTOR_EX;+typedef struct _KSPIN_DISPATCH KSPIN_DISPATCH, *PKSPIN_DISPATCH;+typedef struct _KSCLOCK_DISPATCH KSCLOCK_DISPATCH, *PKSCLOCK_DISPATCH;+typedef struct _KSALLOCATOR_DISPATCH KSALLOCATOR_DISPATCH, *PKSALLOCATOR_DISPATCH;+typedef struct _KSPIN KSPIN, *PKSPIN;+typedef struct _KSNODE_DESCRIPTOR KSNODE_DESCRIPTOR, *PKSNODE_DESCRIPTOR;+typedef struct _KSSTREAM_POINTER_OFFSET KSSTREAM_POINTER_OFFSET, *PKSSTREAM_POINTER_OFFSET;+typedef struct _KSSTREAM_POINTER KSSTREAM_POINTER, *PKSSTREAM_POINTER;+typedef struct _KSMAPPING KSMAPPING, *PKSMAPPING;+typedef struct _KSPROCESSPIN KSPROCESSPIN, *PKSPROCESSPIN;+typedef struct _KSPROCESSPIN_INDEXENTRY KSPROCESSPIN_INDEXENTRY, *PKSPROCESSPIN_INDEXENTRY;+#endif /* _NTDDK_ */++typedef PVOID PKSWORKER;+++typedef struct {+  ULONG NotificationType;+  __MINGW_EXTENSION union {+    struct {+      HANDLE Event;+      ULONG_PTR Reserved[2];+    } EventHandle;+    struct {+      HANDLE Semaphore;+      ULONG Reserved;+      LONG Adjustment;+    } SemaphoreHandle;+#if defined(_NTDDK_)+    struct {+      PVOID Event;+      KPRIORITY Increment;+      ULONG_PTR Reserved;+    } EventObject;+    struct {+      PVOID Semaphore;+      KPRIORITY Increment;+      LONG Adjustment;+    } SemaphoreObject;+    struct {+      PKDPC Dpc;+      ULONG ReferenceCount;+      ULONG_PTR Reserved;+    } Dpc;+    struct {+      PWORK_QUEUE_ITEM WorkQueueItem;+      WORK_QUEUE_TYPE WorkQueueType;+      ULONG_PTR Reserved;+    } WorkItem;+    struct {+      PWORK_QUEUE_ITEM WorkQueueItem;+      PKSWORKER KsWorkerObject;+      ULONG_PTR Reserved;+    } KsWorkItem;+#endif /* _NTDDK_ */+    struct {+      PVOID Unused;+      LONG_PTR Alignment[2];+    } Alignment;+  };+} KSEVENTDATA,*PKSEVENTDATA;++#define KSEVENTF_EVENT_HANDLE		0x00000001+#define KSEVENTF_SEMAPHORE_HANDLE	0x00000002+#if defined(_NTDDK_)+#define KSEVENTF_EVENT_OBJECT		0x00000004+#define KSEVENTF_SEMAPHORE_OBJECT	0x00000008+#define KSEVENTF_DPC			0x00000010+#define KSEVENTF_WORKITEM		0x00000020+#define KSEVENTF_KSWORKITEM		0x00000080+#endif /* _NTDDK_ */++#define KSEVENT_TYPE_ENABLE		0x00000001+#define KSEVENT_TYPE_ONESHOT		0x00000002+#define KSEVENT_TYPE_ENABLEBUFFERED	0x00000004+#define KSEVENT_TYPE_SETSUPPORT		0x00000100+#define KSEVENT_TYPE_BASICSUPPORT	0x00000200+#define KSEVENT_TYPE_QUERYBUFFER	0x00000400++#define KSEVENT_TYPE_TOPOLOGY		0x10000000++typedef struct {+  KSEVENT Event;+  PKSEVENTDATA EventData;+  PVOID Reserved;+} KSQUERYBUFFER,*PKSQUERYBUFFER;++typedef struct {+  ULONG Size;+  ULONG Flags;+  __MINGW_EXTENSION union {+    HANDLE ObjectHandle;+    PVOID ObjectPointer;+  };+  PVOID Reserved;+  KSEVENT Event;+  KSEVENTDATA EventData;+} KSRELATIVEEVENT;++#define KSRELATIVEEVENT_FLAG_HANDLE	0x00000001+#define KSRELATIVEEVENT_FLAG_POINTER	0x00000002++typedef struct {+  KSEVENTDATA EventData;+  LONGLONG MarkTime;+} KSEVENT_TIME_MARK,*PKSEVENT_TIME_MARK;++typedef struct {+  KSEVENTDATA EventData;+  LONGLONG TimeBase;+  LONGLONG Interval;+} KSEVENT_TIME_INTERVAL,*PKSEVENT_TIME_INTERVAL;++typedef struct {+  LONGLONG TimeBase;+  LONGLONG Interval;+} KSINTERVAL,*PKSINTERVAL;++#define STATIC_KSPROPSETID_General					\+	0x1464EDA5L,0x6A8F,0x11D1,0x9A,0xA7,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("1464EDA5-6A8F-11D1-9AA7-00A0C9223196",KSPROPSETID_General);+#define KSPROPSETID_General DEFINE_GUIDNAMED(KSPROPSETID_General)++typedef enum {+  KSPROPERTY_GENERAL_COMPONENTID+} KSPROPERTY_GENERAL;++typedef struct {+  GUID Manufacturer;+  GUID Product;+  GUID Component;+  GUID Name;+  ULONG Version;+  ULONG Revision;+} KSCOMPONENTID,*PKSCOMPONENTID;++#define DEFINE_KSPROPERTY_ITEM_GENERAL_COMPONENTID(Handler)		\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_GENERAL_COMPONENTID,		\+				(Handler),				\+				sizeof(KSPROPERTY),			\+				sizeof(KSCOMPONENTID),			\+				NULL, NULL, 0, NULL, NULL, 0)++#define STATIC_KSMETHODSETID_StreamIo	\+	0x65D003CAL,0x1523,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("65D003CA-1523-11D2-B27A-00A0C9223196",KSMETHODSETID_StreamIo);+#define KSMETHODSETID_StreamIo DEFINE_GUIDNAMED(KSMETHODSETID_StreamIo)++typedef enum {+  KSMETHOD_STREAMIO_READ,+  KSMETHOD_STREAMIO_WRITE+} KSMETHOD_STREAMIO;++#define DEFINE_KSMETHOD_ITEM_STREAMIO_READ(Handler)			\+	DEFINE_KSMETHOD_ITEM(						\+				KSMETHOD_STREAMIO_READ,			\+				KSMETHOD_TYPE_WRITE,			\+				(Handler),				\+				sizeof(KSMETHOD),			\+				0,					\+				NULL)++#define DEFINE_KSMETHOD_ITEM_STREAMIO_WRITE(Handler)			\+	DEFINE_KSMETHOD_ITEM(						\+				KSMETHOD_STREAMIO_WRITE,		\+				KSMETHOD_TYPE_READ,			\+				(Handler),				\+				sizeof(KSMETHOD),			\+				0,					\+				NULL)++#define STATIC_KSPROPSETID_MediaSeeking					\+	0xEE904F0CL,0xD09B,0x11D0,0xAB,0xE9,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("EE904F0C-D09B-11D0-ABE9-00A0C9223196",KSPROPSETID_MediaSeeking);+#define KSPROPSETID_MediaSeeking DEFINE_GUIDNAMED(KSPROPSETID_MediaSeeking)++typedef enum {+  KSPROPERTY_MEDIASEEKING_CAPABILITIES,+  KSPROPERTY_MEDIASEEKING_FORMATS,+  KSPROPERTY_MEDIASEEKING_TIMEFORMAT,+  KSPROPERTY_MEDIASEEKING_POSITION,+  KSPROPERTY_MEDIASEEKING_STOPPOSITION,+  KSPROPERTY_MEDIASEEKING_POSITIONS,+  KSPROPERTY_MEDIASEEKING_DURATION,+  KSPROPERTY_MEDIASEEKING_AVAILABLE,+  KSPROPERTY_MEDIASEEKING_PREROLL,+  KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT+} KSPROPERTY_MEDIASEEKING;++typedef enum {+  KS_SEEKING_NoPositioning,+  KS_SEEKING_AbsolutePositioning,+  KS_SEEKING_RelativePositioning,+  KS_SEEKING_IncrementalPositioning,+  KS_SEEKING_PositioningBitsMask = 0x3,+  KS_SEEKING_SeekToKeyFrame,+  KS_SEEKING_ReturnTime = 0x8+} KS_SEEKING_FLAGS;++typedef enum {+  KS_SEEKING_CanSeekAbsolute = 0x1,+  KS_SEEKING_CanSeekForwards = 0x2,+  KS_SEEKING_CanSeekBackwards = 0x4,+  KS_SEEKING_CanGetCurrentPos = 0x8,+  KS_SEEKING_CanGetStopPos = 0x10,+  KS_SEEKING_CanGetDuration = 0x20,+  KS_SEEKING_CanPlayBackwards = 0x40+} KS_SEEKING_CAPABILITIES;++typedef struct {+  LONGLONG Current;+  LONGLONG Stop;+  KS_SEEKING_FLAGS CurrentFlags;+  KS_SEEKING_FLAGS StopFlags;+} KSPROPERTY_POSITIONS,*PKSPROPERTY_POSITIONS;++typedef struct {+  LONGLONG Earliest;+  LONGLONG Latest;+} KSPROPERTY_MEDIAAVAILABLE,*PKSPROPERTY_MEDIAAVAILABLE;++typedef struct {+  KSPROPERTY Property;+  GUID SourceFormat;+  GUID TargetFormat;+  LONGLONG Time;+} KSP_TIMEFORMAT,*PKSP_TIMEFORMAT;++#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CAPABILITIES(Handler)	\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_MEDIASEEKING_CAPABILITIES,	\+				(Handler),				\+				sizeof(KSPROPERTY),			\+				sizeof(KS_SEEKING_CAPABILITIES),	\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_FORMATS(Handler)		\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_MEDIASEEKING_FORMATS,	\+				(Handler),				\+				sizeof(KSPROPERTY),			\+				0,					\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_TIMEFORMAT(GetHandler,SetHandler) \+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_MEDIASEEKING_TIMEFORMAT,	\+				(GetHandler),				\+				sizeof(KSPROPERTY),			\+				sizeof(GUID),				\+				(SetHandler),				\+				NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITION(Handler)		\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_MEDIASEEKING_POSITION,	\+				(Handler),				\+				sizeof(KSPROPERTY),			\+				sizeof(LONGLONG),			\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_STOPPOSITION(Handler)	\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_MEDIASEEKING_STOPPOSITION,	\+				(Handler),				\+				sizeof(KSPROPERTY),			\+				sizeof(LONGLONG),			\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_POSITIONS(Handler)		\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_MEDIASEEKING_POSITIONS,	\+				NULL,					\+				sizeof(KSPROPERTY),			\+				sizeof(KSPROPERTY_POSITIONS),		\+				(Handler),				\+				NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_DURATION(Handler)		\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_MEDIASEEKING_DURATION,	\+				(Handler),				\+				sizeof(KSPROPERTY),			\+				sizeof(LONGLONG),			\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_AVAILABLE(Handler)		\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_MEDIASEEKING_AVAILABLE,	\+				(Handler),				\+				sizeof(KSPROPERTY),			\+				sizeof(KSPROPERTY_MEDIAAVAILABLE),	\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_PREROLL(Handler)		\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_MEDIASEEKING_PREROLL,	\+				(Handler),				\+				sizeof(KSPROPERTY),			\+				sizeof(LONGLONG),			\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_MEDIASEEKING_CONVERTTIMEFORMAT(Handler)	\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT, \+				(Handler),				\+				sizeof(KSP_TIMEFORMAT),			\+				sizeof(LONGLONG),			\+				NULL, NULL, 0, NULL, NULL, 0)++#define STATIC_KSPROPSETID_Topology					\+	0x720D4AC0L,0x7533,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("720D4AC0-7533-11D0-A5D6-28DB04C10000",KSPROPSETID_Topology);+#define KSPROPSETID_Topology DEFINE_GUIDNAMED(KSPROPSETID_Topology)++typedef enum {+  KSPROPERTY_TOPOLOGY_CATEGORIES,+  KSPROPERTY_TOPOLOGY_NODES,+  KSPROPERTY_TOPOLOGY_CONNECTIONS,+  KSPROPERTY_TOPOLOGY_NAME+} KSPROPERTY_TOPOLOGY;++#define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler)		\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_TOPOLOGY_CATEGORIES,		\+				(Handler),				\+				sizeof(KSPROPERTY),			\+				0,					\+				NULL, NULL, 0,NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler)			\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_TOPOLOGY_NODES,		\+				(Handler),				\+				sizeof(KSPROPERTY),			\+				0,					\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler)		\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_TOPOLOGY_CONNECTIONS,	\+				(Handler),				\+				sizeof(KSPROPERTY),			\+				0,					\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)			\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_TOPOLOGY_NAME,		\+				(Handler),				\+				sizeof(KSP_NODE),			\+				0,					\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_TOPOLOGYSET(TopologySet,Handler)		\+DEFINE_KSPROPERTY_TABLE(TopologySet) {					\+	DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CATEGORIES(Handler),		\+	DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NODES(Handler),			\+	DEFINE_KSPROPERTY_ITEM_TOPOLOGY_CONNECTIONS(Handler),		\+	DEFINE_KSPROPERTY_ITEM_TOPOLOGY_NAME(Handler)			\+}++#define STATIC_KSCATEGORY_BRIDGE					\+	0x085AFF00L,0x62CE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("085AFF00-62CE-11CF-A5D6-28DB04C10000",KSCATEGORY_BRIDGE);+#define KSCATEGORY_BRIDGE DEFINE_GUIDNAMED(KSCATEGORY_BRIDGE)++#define STATIC_KSCATEGORY_CAPTURE					\+	0x65E8773DL,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("65E8773D-8F56-11D0-A3B9-00A0C9223196",KSCATEGORY_CAPTURE);+#define KSCATEGORY_CAPTURE DEFINE_GUIDNAMED(KSCATEGORY_CAPTURE)++#define STATIC_KSCATEGORY_RENDER					\+	0x65E8773EL,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("65E8773E-8F56-11D0-A3B9-00A0C9223196",KSCATEGORY_RENDER);+#define KSCATEGORY_RENDER DEFINE_GUIDNAMED(KSCATEGORY_RENDER)++#define STATIC_KSCATEGORY_MIXER						\+	0xAD809C00L,0x7B88,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("AD809C00-7B88-11D0-A5D6-28DB04C10000",KSCATEGORY_MIXER);+#define KSCATEGORY_MIXER DEFINE_GUIDNAMED(KSCATEGORY_MIXER)++#define STATIC_KSCATEGORY_SPLITTER					\+	0x0A4252A0L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("0A4252A0-7E70-11D0-A5D6-28DB04C10000",KSCATEGORY_SPLITTER);+#define KSCATEGORY_SPLITTER DEFINE_GUIDNAMED(KSCATEGORY_SPLITTER)++#define STATIC_KSCATEGORY_DATACOMPRESSOR				\+	0x1E84C900L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("1E84C900-7E70-11D0-A5D6-28DB04C10000",KSCATEGORY_DATACOMPRESSOR);+#define KSCATEGORY_DATACOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATACOMPRESSOR)++#define STATIC_KSCATEGORY_DATADECOMPRESSOR				\+	0x2721AE20L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("2721AE20-7E70-11D0-A5D6-28DB04C10000",KSCATEGORY_DATADECOMPRESSOR);+#define KSCATEGORY_DATADECOMPRESSOR DEFINE_GUIDNAMED(KSCATEGORY_DATADECOMPRESSOR)++#define STATIC_KSCATEGORY_DATATRANSFORM					\+	0x2EB07EA0L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("2EB07EA0-7E70-11D0-A5D6-28DB04C10000",KSCATEGORY_DATATRANSFORM);+#define KSCATEGORY_DATATRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_DATATRANSFORM)++#define STATIC_KSCATEGORY_COMMUNICATIONSTRANSFORM			\+	0xCF1DDA2CL,0x9743,0x11D0,0xA3,0xEE,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("CF1DDA2C-9743-11D0-A3EE-00A0C9223196",KSCATEGORY_COMMUNICATIONSTRANSFORM);+#define KSCATEGORY_COMMUNICATIONSTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_COMMUNICATIONSTRANSFORM)++#define STATIC_KSCATEGORY_INTERFACETRANSFORM				\+	0xCF1DDA2DL,0x9743,0x11D0,0xA3,0xEE,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("CF1DDA2D-9743-11D0-A3EE-00A0C9223196",KSCATEGORY_INTERFACETRANSFORM);+#define KSCATEGORY_INTERFACETRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_INTERFACETRANSFORM)++#define STATIC_KSCATEGORY_MEDIUMTRANSFORM				\+	0xCF1DDA2EL,0x9743,0x11D0,0xA3,0xEE,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("CF1DDA2E-9743-11D0-A3EE-00A0C9223196",KSCATEGORY_MEDIUMTRANSFORM);+#define KSCATEGORY_MEDIUMTRANSFORM DEFINE_GUIDNAMED(KSCATEGORY_MEDIUMTRANSFORM)++#define STATIC_KSCATEGORY_FILESYSTEM					\+	0x760FED5EL,0x9357,0x11D0,0xA3,0xCC,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("760FED5E-9357-11D0-A3CC-00A0C9223196",KSCATEGORY_FILESYSTEM);+#define KSCATEGORY_FILESYSTEM DEFINE_GUIDNAMED(KSCATEGORY_FILESYSTEM)++#define STATIC_KSCATEGORY_CLOCK						\+	0x53172480L,0x4791,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000",KSCATEGORY_CLOCK);+#define KSCATEGORY_CLOCK DEFINE_GUIDNAMED(KSCATEGORY_CLOCK)++#define STATIC_KSCATEGORY_PROXY						\+	0x97EBAACAL,0x95BD,0x11D0,0xA3,0xEA,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("97EBAACA-95BD-11D0-A3EA-00A0C9223196",KSCATEGORY_PROXY);+#define KSCATEGORY_PROXY DEFINE_GUIDNAMED(KSCATEGORY_PROXY)++#define STATIC_KSCATEGORY_QUALITY					\+	0x97EBAACBL,0x95BD,0x11D0,0xA3,0xEA,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("97EBAACB-95BD-11D0-A3EA-00A0C9223196",KSCATEGORY_QUALITY);+#define KSCATEGORY_QUALITY DEFINE_GUIDNAMED(KSCATEGORY_QUALITY)++typedef struct {+  ULONG FromNode;+  ULONG FromNodePin;+  ULONG ToNode;+  ULONG ToNodePin;+} KSTOPOLOGY_CONNECTION,*PKSTOPOLOGY_CONNECTION;++typedef struct {+  ULONG CategoriesCount;+  const GUID *Categories;+  ULONG TopologyNodesCount;+  const GUID *TopologyNodes;+  ULONG TopologyConnectionsCount;+  const KSTOPOLOGY_CONNECTION *TopologyConnections;+  const GUID *TopologyNodesNames;+  ULONG Reserved;+} KSTOPOLOGY,*PKSTOPOLOGY;++#define KSFILTER_NODE	((ULONG)-1)+#define KSALL_NODES	((ULONG)-1)++typedef struct {+  ULONG CreateFlags;+  ULONG Node;+} KSNODE_CREATE,*PKSNODE_CREATE;++#define STATIC_KSTIME_FORMAT_NONE	STATIC_GUID_NULL+#define KSTIME_FORMAT_NONE		GUID_NULL++#define STATIC_KSTIME_FORMAT_FRAME					\+	0x7b785570L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6+DEFINE_GUIDSTRUCT("7b785570-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_FRAME);+#define KSTIME_FORMAT_FRAME DEFINE_GUIDNAMED(KSTIME_FORMAT_FRAME)++#define STATIC_KSTIME_FORMAT_BYTE					\+	0x7b785571L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6+DEFINE_GUIDSTRUCT("7b785571-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_BYTE);+#define KSTIME_FORMAT_BYTE DEFINE_GUIDNAMED(KSTIME_FORMAT_BYTE)++#define STATIC_KSTIME_FORMAT_SAMPLE					\+	0x7b785572L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6+DEFINE_GUIDSTRUCT("7b785572-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_SAMPLE);+#define KSTIME_FORMAT_SAMPLE DEFINE_GUIDNAMED(KSTIME_FORMAT_SAMPLE)++#define STATIC_KSTIME_FORMAT_FIELD					\+	0x7b785573L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6+DEFINE_GUIDSTRUCT("7b785573-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_FIELD);+#define KSTIME_FORMAT_FIELD DEFINE_GUIDNAMED(KSTIME_FORMAT_FIELD)++#define STATIC_KSTIME_FORMAT_MEDIA_TIME					\+	0x7b785574L,0x8c82,0x11cf,0xbc,0x0c,0x00,0xaa,0x00,0xac,0x74,0xf6+DEFINE_GUIDSTRUCT("7b785574-8c82-11cf-bc0c-00aa00ac74f6",KSTIME_FORMAT_MEDIA_TIME);+#define KSTIME_FORMAT_MEDIA_TIME DEFINE_GUIDNAMED(KSTIME_FORMAT_MEDIA_TIME)++typedef KSIDENTIFIER KSPIN_INTERFACE,*PKSPIN_INTERFACE;++#define STATIC_KSINTERFACESETID_Standard				\+	0x1A8766A0L,0x62CE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("1A8766A0-62CE-11CF-A5D6-28DB04C10000",KSINTERFACESETID_Standard);+#define KSINTERFACESETID_Standard DEFINE_GUIDNAMED(KSINTERFACESETID_Standard)++typedef enum {+  KSINTERFACE_STANDARD_STREAMING,+  KSINTERFACE_STANDARD_LOOPED_STREAMING,+  KSINTERFACE_STANDARD_CONTROL+} KSINTERFACE_STANDARD;++#define STATIC_KSINTERFACESETID_FileIo					\+	0x8C6F932CL,0xE771,0x11D0,0xB8,0xFF,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("8C6F932C-E771-11D0-B8FF-00A0C9223196",KSINTERFACESETID_FileIo);+#define KSINTERFACESETID_FileIo DEFINE_GUIDNAMED(KSINTERFACESETID_FileIo)++typedef enum {+  KSINTERFACE_FILEIO_STREAMING+} KSINTERFACE_FILEIO;++#define KSMEDIUM_TYPE_ANYINSTANCE		0++#define STATIC_KSMEDIUMSETID_Standard					\+	0x4747B320L,0x62CE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("4747B320-62CE-11CF-A5D6-28DB04C10000",KSMEDIUMSETID_Standard);+#define KSMEDIUMSETID_Standard DEFINE_GUIDNAMED(KSMEDIUMSETID_Standard)++#define KSMEDIUM_STANDARD_DEVIO KSMEDIUM_TYPE_ANYINSTANCE++#define STATIC_KSPROPSETID_Pin						\+	0x8C134960L,0x51AD,0x11CF,0x87,0x8A,0x94,0xF8,0x01,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("8C134960-51AD-11CF-878A-94F801C10000",KSPROPSETID_Pin);+#define KSPROPSETID_Pin DEFINE_GUIDNAMED(KSPROPSETID_Pin)++typedef enum {+  KSPROPERTY_PIN_CINSTANCES,+  KSPROPERTY_PIN_CTYPES,+  KSPROPERTY_PIN_DATAFLOW,+  KSPROPERTY_PIN_DATARANGES,+  KSPROPERTY_PIN_DATAINTERSECTION,+  KSPROPERTY_PIN_INTERFACES,+  KSPROPERTY_PIN_MEDIUMS,+  KSPROPERTY_PIN_COMMUNICATION,+  KSPROPERTY_PIN_GLOBALCINSTANCES,+  KSPROPERTY_PIN_NECESSARYINSTANCES,+  KSPROPERTY_PIN_PHYSICALCONNECTION,+  KSPROPERTY_PIN_CATEGORY,+  KSPROPERTY_PIN_NAME,+  KSPROPERTY_PIN_CONSTRAINEDDATARANGES,+  KSPROPERTY_PIN_PROPOSEDATAFORMAT+} KSPROPERTY_PIN;++typedef struct {+  KSPROPERTY Property;+  ULONG PinId;+  ULONG Reserved;+} KSP_PIN,*PKSP_PIN;++#define KSINSTANCE_INDETERMINATE	((ULONG)-1)++typedef struct {+  ULONG PossibleCount;+  ULONG CurrentCount;+} KSPIN_CINSTANCES,*PKSPIN_CINSTANCES;++typedef enum {+  KSPIN_DATAFLOW_IN = 1,+  KSPIN_DATAFLOW_OUT+} KSPIN_DATAFLOW,*PKSPIN_DATAFLOW;++#define KSDATAFORMAT_BIT_TEMPORAL_COMPRESSION	0+#define KSDATAFORMAT_TEMPORAL_COMPRESSION	(1 << KSDATAFORMAT_BIT_TEMPORAL_COMPRESSION)+#define KSDATAFORMAT_BIT_ATTRIBUTES		1+#define KSDATAFORMAT_ATTRIBUTES			(1 << KSDATAFORMAT_BIT_ATTRIBUTES)++#define KSDATARANGE_BIT_ATTRIBUTES		1+#define KSDATARANGE_ATTRIBUTES			(1 << KSDATARANGE_BIT_ATTRIBUTES)+#define KSDATARANGE_BIT_REQUIRED_ATTRIBUTES	2+#define KSDATARANGE_REQUIRED_ATTRIBUTES		(1 << KSDATARANGE_BIT_REQUIRED_ATTRIBUTES)++typedef union {+  __MINGW_EXTENSION struct {+    ULONG FormatSize;+    ULONG Flags;+    ULONG SampleSize;+    ULONG Reserved;+    GUID MajorFormat;+    GUID SubFormat;+    GUID Specifier;+  };+  LONGLONG Alignment;+} KSDATAFORMAT,*PKSDATAFORMAT,KSDATARANGE,*PKSDATARANGE;++#define KSATTRIBUTE_REQUIRED		0x00000001++typedef struct {+  ULONG Size;+  ULONG Flags;+  GUID Attribute;+} KSATTRIBUTE,*PKSATTRIBUTE;++#if defined(_NTDDK_)+typedef struct {+  ULONG Count;+  PKSATTRIBUTE *Attributes;+} KSATTRIBUTE_LIST,*PKSATTRIBUTE_LIST;+#endif /* _NTDDK_ */++typedef enum {+  KSPIN_COMMUNICATION_NONE,+  KSPIN_COMMUNICATION_SINK,+  KSPIN_COMMUNICATION_SOURCE,+  KSPIN_COMMUNICATION_BOTH,+  KSPIN_COMMUNICATION_BRIDGE+} KSPIN_COMMUNICATION,*PKSPIN_COMMUNICATION;++typedef KSIDENTIFIER KSPIN_MEDIUM,*PKSPIN_MEDIUM;++typedef struct {+  KSPIN_INTERFACE Interface;+  KSPIN_MEDIUM Medium;+  ULONG PinId;+  HANDLE PinToHandle;+  KSPRIORITY Priority;+} KSPIN_CONNECT,*PKSPIN_CONNECT;++typedef struct {+  ULONG Size;+  ULONG Pin;+  WCHAR SymbolicLinkName[1];+} KSPIN_PHYSICALCONNECTION,*PKSPIN_PHYSICALCONNECTION;++#if defined(_NTDDK_)+typedef NTSTATUS (*PFNKSINTERSECTHANDLER) ( PIRP Irp, PKSP_PIN Pin,+					    PKSDATARANGE DataRange,+					    PVOID Data);+typedef NTSTATUS (*PFNKSINTERSECTHANDLEREX)(PVOID Context, PIRP Irp,+					    PKSP_PIN Pin,+					    PKSDATARANGE DataRange,+					    PKSDATARANGE MatchingDataRange,+					    ULONG DataBufferSize,+					    PVOID Data,+					    PULONG DataSize);+#endif /* _NTDDK_ */++#define DEFINE_KSPIN_INTERFACE_TABLE(tablename)				\+	const KSPIN_INTERFACE tablename[] =++#define DEFINE_KSPIN_INTERFACE_ITEM(guid,_interFace)			\+	{								\+		STATICGUIDOF(guid),					\+		(_interFace),						\+		0							\+	}++#define DEFINE_KSPIN_MEDIUM_TABLE(tablename)				\+	const KSPIN_MEDIUM tablename[] =++#define DEFINE_KSPIN_MEDIUM_ITEM(guid,medium)				\+		DEFINE_KSPIN_INTERFACE_ITEM(guid,medium)++#define DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(Handler)			\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_PIN_CINSTANCES,		\+				(Handler),				\+				sizeof(KSP_PIN),			\+				sizeof(KSPIN_CINSTANCES),		\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(Handler)			\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_PIN_CTYPES,			\+				(Handler),				\+				sizeof(KSPROPERTY),			\+				sizeof(ULONG),				\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(Handler)			\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_PIN_DATAFLOW,		\+				(Handler),				\+				sizeof(KSP_PIN),			\+				sizeof(KSPIN_DATAFLOW),			\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(Handler)			\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_PIN_DATARANGES,		\+				(Handler),				\+				sizeof(KSP_PIN),			\+				0,					\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(Handler)		\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_PIN_DATAINTERSECTION,	\+				(Handler),				\+				sizeof(KSP_PIN) + sizeof(KSMULTIPLE_ITEM),\+				0,					\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(Handler)			\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_PIN_INTERFACES,		\+				(Handler),				\+				sizeof(KSP_PIN),			\+				0,					\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(Handler)			\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_PIN_MEDIUMS,			\+				(Handler),				\+				sizeof(KSP_PIN),			\+				0,					\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(Handler)		\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_PIN_COMMUNICATION,		\+				(Handler),				\+				sizeof(KSP_PIN),			\+				sizeof(KSPIN_COMMUNICATION),		\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_PIN_GLOBALCINSTANCES(Handler)		\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_PIN_GLOBALCINSTANCES,	\+				(Handler),				\+				sizeof(KSP_PIN),			\+				sizeof(KSPIN_CINSTANCES),		\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_PIN_NECESSARYINSTANCES(Handler)		\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_PIN_NECESSARYINSTANCES,	\+				(Handler),				\+				sizeof(KSP_PIN),			\+				sizeof(ULONG),				\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_PIN_PHYSICALCONNECTION(Handler)		\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_PIN_PHYSICALCONNECTION,	\+				(Handler),				\+				sizeof(KSP_PIN),			\+				0,					\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(Handler)			\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_PIN_CATEGORY,		\+				(Handler),				\+				sizeof(KSP_PIN),			\+				sizeof(GUID),				\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_PIN_NAME(Handler)			\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_PIN_NAME,			\+				(Handler),				\+				sizeof(KSP_PIN),			\+				0,					\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(Handler)	\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_PIN_CONSTRAINEDDATARANGES,	\+				(Handler),				\+				sizeof(KSP_PIN),			\+				0,					\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(Handler)		\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_PIN_PROPOSEDATAFORMAT,	\+				NULL,					\+				sizeof(KSP_PIN),			\+				sizeof(KSDATAFORMAT),			\+				(Handler), NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_PINSET(PinSet,PropGeneral,PropInstances,PropIntersection) \+DEFINE_KSPROPERTY_TABLE(PinSet) {					\+	DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),		\+	DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),			\+	DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),		\+	DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),		\+	DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),	\+	DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),		\+	DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),		\+	DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),		\+	DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),		\+	DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral)			\+}++#define DEFINE_KSPROPERTY_PINSETCONSTRAINED(PinSet,PropGeneral,PropInstances,PropIntersection) \+DEFINE_KSPROPERTY_TABLE(PinSet) {					\+	DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),		\+	DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),			\+	DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),		\+	DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),		\+	DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),	\+	DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),		\+	DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),		\+	DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),		\+	DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),		\+	DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral),			\+	DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral)	\+}++#define STATIC_KSNAME_Filter						\+	0x9b365890L,0x165f,0x11d0,0xa1,0x95,0x00,0x20,0xaf,0xd1,0x56,0xe4+DEFINE_GUIDSTRUCT("9b365890-165f-11d0-a195-0020afd156e4",KSNAME_Filter);+#define KSNAME_Filter DEFINE_GUIDNAMED(KSNAME_Filter)++#define KSSTRING_Filter		L"{9B365890-165F-11D0-A195-0020AFD156E4}"++#define STATIC_KSNAME_Pin						\+	0x146F1A80L,0x4791,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("146F1A80-4791-11D0-A5D6-28DB04C10000",KSNAME_Pin);+#define KSNAME_Pin DEFINE_GUIDNAMED(KSNAME_Pin)++#define KSSTRING_Pin		L"{146F1A80-4791-11D0-A5D6-28DB04C10000}"++#define STATIC_KSNAME_Clock						\+	0x53172480L,0x4791,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("53172480-4791-11D0-A5D6-28DB04C10000",KSNAME_Clock);+#define KSNAME_Clock DEFINE_GUIDNAMED(KSNAME_Clock)++#define KSSTRING_Clock		L"{53172480-4791-11D0-A5D6-28DB04C10000}"++#define STATIC_KSNAME_Allocator						\+	0x642F5D00L,0x4791,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("642F5D00-4791-11D0-A5D6-28DB04C10000",KSNAME_Allocator);+#define KSNAME_Allocator DEFINE_GUIDNAMED(KSNAME_Allocator)++#define KSSTRING_Allocator	L"{642F5D00-4791-11D0-A5D6-28DB04C10000}"++#define KSSTRING_AllocatorEx	L"{091BB63B-603F-11D1-B067-00A0C9062802}"++#define STATIC_KSNAME_TopologyNode					\+	0x0621061AL,0xEE75,0x11D0,0xB9,0x15,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("0621061A-EE75-11D0-B915-00A0C9223196",KSNAME_TopologyNode);+#define KSNAME_TopologyNode DEFINE_GUIDNAMED(KSNAME_TopologyNode)++#define KSSTRING_TopologyNode	L"{0621061A-EE75-11D0-B915-00A0C9223196}"++#if defined(_NTDDK_)+typedef struct {+  ULONG InterfacesCount;+  const KSPIN_INTERFACE *Interfaces;+  ULONG MediumsCount;+  const KSPIN_MEDIUM *Mediums;+  ULONG DataRangesCount;+  const PKSDATARANGE *DataRanges;+  KSPIN_DATAFLOW DataFlow;+  KSPIN_COMMUNICATION Communication;+  const GUID *Category;+  const GUID *Name;+  __MINGW_EXTENSION union {+    LONGLONG Reserved;+    __MINGW_EXTENSION struct {+      ULONG ConstrainedDataRangesCount;+      PKSDATARANGE *ConstrainedDataRanges;+    };+  };+} KSPIN_DESCRIPTOR, *PKSPIN_DESCRIPTOR;+typedef const KSPIN_DESCRIPTOR *PCKSPIN_DESCRIPTOR;++#define DEFINE_KSPIN_DESCRIPTOR_TABLE(tablename)			\+	const KSPIN_DESCRIPTOR tablename[] =++#define DEFINE_KSPIN_DESCRIPTOR_ITEM(InterfacesCount,Interfaces,MediumsCount, Mediums,DataRangesCount,DataRanges,DataFlow,Communication)\+{									\+		InterfacesCount, Interfaces, MediumsCount, Mediums,	\+		DataRangesCount, DataRanges, DataFlow, Communication,	\+		NULL, NULL, 0						\+}++#define DEFINE_KSPIN_DESCRIPTOR_ITEMEX(InterfacesCount,Interfaces,MediumsCount,Mediums,DataRangesCount,DataRanges,DataFlow,Communication,Category,Name)\+{									\+		InterfacesCount, Interfaces, MediumsCount, Mediums,	\+		DataRangesCount, DataRanges, DataFlow, Communication,	\+		Category, Name, 0					\+}+#endif /* _NTDDK_ */++#define STATIC_KSDATAFORMAT_TYPE_WILDCARD	STATIC_GUID_NULL+#define KSDATAFORMAT_TYPE_WILDCARD		GUID_NULL++#define STATIC_KSDATAFORMAT_SUBTYPE_WILDCARD	STATIC_GUID_NULL+#define KSDATAFORMAT_SUBTYPE_WILDCARD		GUID_NULL++#define STATIC_KSDATAFORMAT_TYPE_STREAM					\+	0xE436EB83L,0x524F,0x11CE,0x9F,0x53,0x00,0x20,0xAF,0x0B,0xA7,0x70+DEFINE_GUIDSTRUCT("E436EB83-524F-11CE-9F53-0020AF0BA770",KSDATAFORMAT_TYPE_STREAM);+#define KSDATAFORMAT_TYPE_STREAM DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_STREAM)++#define STATIC_KSDATAFORMAT_SUBTYPE_NONE				\+	0xE436EB8EL,0x524F,0x11CE,0x9F,0x53,0x00,0x20,0xAF,0x0B,0xA7,0x70+DEFINE_GUIDSTRUCT("E436EB8E-524F-11CE-9F53-0020AF0BA770",KSDATAFORMAT_SUBTYPE_NONE);+#define KSDATAFORMAT_SUBTYPE_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_NONE)++#define STATIC_KSDATAFORMAT_SPECIFIER_WILDCARD	STATIC_GUID_NULL+#define KSDATAFORMAT_SPECIFIER_WILDCARD		GUID_NULL++#define STATIC_KSDATAFORMAT_SPECIFIER_FILENAME				\+	0xAA797B40L,0xE974,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("AA797B40-E974-11CF-A5D6-28DB04C10000",KSDATAFORMAT_SPECIFIER_FILENAME);+#define KSDATAFORMAT_SPECIFIER_FILENAME DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_FILENAME)++#define STATIC_KSDATAFORMAT_SPECIFIER_FILEHANDLE			\+	0x65E8773CL,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("65E8773C-8F56-11D0-A3B9-00A0C9223196",KSDATAFORMAT_SPECIFIER_FILEHANDLE);+#define KSDATAFORMAT_SPECIFIER_FILEHANDLE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_FILEHANDLE)++#define STATIC_KSDATAFORMAT_SPECIFIER_NONE				\+	0x0F6417D6L,0xC318,0x11D0,0xA4,0x3F,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("0F6417D6-C318-11D0-A43F-00A0C9223196",KSDATAFORMAT_SPECIFIER_NONE);+#define KSDATAFORMAT_SPECIFIER_NONE DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_NONE)++#define STATIC_KSPROPSETID_Quality					\+	0xD16AD380L,0xAC1A,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("D16AD380-AC1A-11CF-A5D6-28DB04C10000",KSPROPSETID_Quality);+#define KSPROPSETID_Quality DEFINE_GUIDNAMED(KSPROPSETID_Quality)++typedef enum {+  KSPROPERTY_QUALITY_REPORT,+  KSPROPERTY_QUALITY_ERROR+} KSPROPERTY_QUALITY;++#define DEFINE_KSPROPERTY_ITEM_QUALITY_REPORT(GetHandler,SetHandler)	\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_QUALITY_REPORT,		\+				(GetHandler),				\+				sizeof(KSPROPERTY),			\+				sizeof(KSQUALITY),			\+				(SetHandler),				\+				NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_QUALITY_ERROR(GetHandler,SetHandler)	\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_QUALITY_ERROR,		\+				(GetHandler),				\+				sizeof(KSPROPERTY),			\+				sizeof(KSERROR),			\+				(SetHandler),				\+				NULL, 0, NULL, NULL, 0)++#define STATIC_KSPROPSETID_Connection					\+	0x1D58C920L,0xAC9B,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("1D58C920-AC9B-11CF-A5D6-28DB04C10000",KSPROPSETID_Connection);+#define KSPROPSETID_Connection DEFINE_GUIDNAMED(KSPROPSETID_Connection)++typedef enum {+  KSPROPERTY_CONNECTION_STATE,+  KSPROPERTY_CONNECTION_PRIORITY,+  KSPROPERTY_CONNECTION_DATAFORMAT,+  KSPROPERTY_CONNECTION_ALLOCATORFRAMING,+  KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT,+  KSPROPERTY_CONNECTION_ACQUIREORDERING,+  KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,+  KSPROPERTY_CONNECTION_STARTAT+} KSPROPERTY_CONNECTION;++#define DEFINE_KSPROPERTY_ITEM_CONNECTION_STATE(GetHandler,SetHandler)	\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_CONNECTION_STATE,		\+				(GetHandler),				\+				sizeof(KSPROPERTY),			\+				sizeof(KSSTATE),			\+				(SetHandler),				\+				NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_CONNECTION_PRIORITY(GetHandler,SetHandler) \+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_CONNECTION_PRIORITY,		\+				(GetHandler),				\+				sizeof(KSPROPERTY),			\+				sizeof(KSPRIORITY),			\+				(SetHandler),				\+				NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_CONNECTION_DATAFORMAT(GetHandler,SetHandler)\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_CONNECTION_DATAFORMAT,	\+				(GetHandler),				\+				sizeof(KSPROPERTY),			\+				0,					\+				(SetHandler),				\+				NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING(Handler)	\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_CONNECTION_ALLOCATORFRAMING,	\+				(Handler),				\+				sizeof(KSPROPERTY),			\+				sizeof(KSALLOCATOR_FRAMING),		\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_CONNECTION_ALLOCATORFRAMING_EX(Handler)	\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX,\+				(Handler),				\+				sizeof(KSPROPERTY),			\+				0,					\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_CONNECTION_PROPOSEDATAFORMAT(Handler)	\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_CONNECTION_PROPOSEDATAFORMAT,\+				NULL,					\+				sizeof(KSPROPERTY),			\+				sizeof(KSDATAFORMAT),			\+				(Handler),				\+				NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_CONNECTION_ACQUIREORDERING(Handler)	\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_CONNECTION_ACQUIREORDERING,	\+				(Handler),				\+				sizeof(KSPROPERTY),			\+				sizeof(int),				\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_CONNECTION_STARTAT(Handler)		\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_CONNECTION_STARTAT,		\+				NULL,					\+				sizeof(KSPROPERTY),			\+				sizeof(KSRELATIVEEVENT),		\+				(Handler),				\+				NULL, 0, NULL, NULL, 0)++#define KSALLOCATOR_REQUIREMENTF_INPLACE_MODIFIER	0x00000001+#define KSALLOCATOR_REQUIREMENTF_SYSTEM_MEMORY		0x00000002+#define KSALLOCATOR_REQUIREMENTF_FRAME_INTEGRITY	0x00000004+#define KSALLOCATOR_REQUIREMENTF_MUST_ALLOCATE		0x00000008+#define KSALLOCATOR_REQUIREMENTF_PREFERENCES_ONLY	0x80000000++#define KSALLOCATOR_OPTIONF_COMPATIBLE			0x00000001+#define KSALLOCATOR_OPTIONF_SYSTEM_MEMORY		0x00000002+#define KSALLOCATOR_OPTIONF_VALID			0x00000003++#define KSALLOCATOR_FLAG_PARTIAL_READ_SUPPORT		0x00000010+#define KSALLOCATOR_FLAG_DEVICE_SPECIFIC		0x00000020+#define KSALLOCATOR_FLAG_CAN_ALLOCATE			0x00000040+#define KSALLOCATOR_FLAG_INSIST_ON_FRAMESIZE_RATIO	0x00000080+#define KSALLOCATOR_FLAG_NO_FRAME_INTEGRITY		0x00000100+#define KSALLOCATOR_FLAG_MULTIPLE_OUTPUT		0x00000200+#define KSALLOCATOR_FLAG_CYCLE				0x00000400+#define KSALLOCATOR_FLAG_ALLOCATOR_EXISTS		0x00000800+#define KSALLOCATOR_FLAG_INDEPENDENT_RANGES		0x00001000+#define KSALLOCATOR_FLAG_ATTENTION_STEPPING		0x00002000++typedef struct {+  __MINGW_EXTENSION union {+    ULONG OptionsFlags;+    ULONG RequirementsFlags;+  };+#if defined(_NTDDK_)+  POOL_TYPE PoolType;+#else+  ULONG PoolType;+#endif /* _NTDDK_ */+  ULONG Frames;+  ULONG FrameSize;+  ULONG FileAlignment;+  ULONG Reserved;+} KSALLOCATOR_FRAMING,*PKSALLOCATOR_FRAMING;++#if defined(_NTDDK_)+typedef PVOID (*PFNKSDEFAULTALLOCATE)(PVOID Context);+typedef VOID (*PFNKSDEFAULTFREE)(PVOID Context, PVOID Buffer);+typedef NTSTATUS (*PFNKSINITIALIZEALLOCATOR)(PVOID InitialContext,+					PKSALLOCATOR_FRAMING AllocatorFraming,+					PVOID* Context);+typedef VOID (*PFNKSDELETEALLOCATOR) (PVOID Context);+#endif /* _NTDDK_ */++typedef struct {+  ULONG MinFrameSize;+  ULONG MaxFrameSize;+  ULONG Stepping;+} KS_FRAMING_RANGE,*PKS_FRAMING_RANGE;++typedef struct {+  KS_FRAMING_RANGE Range;+  ULONG InPlaceWeight;+  ULONG NotInPlaceWeight;+} KS_FRAMING_RANGE_WEIGHTED,*PKS_FRAMING_RANGE_WEIGHTED;++typedef struct {+  ULONG RatioNumerator;+  ULONG RatioDenominator;+  ULONG RatioConstantMargin;+} KS_COMPRESSION,*PKS_COMPRESSION;++typedef struct {+  GUID MemoryType;+  GUID BusType;+  ULONG MemoryFlags;+  ULONG BusFlags;+  ULONG Flags;+  ULONG Frames;+  ULONG FileAlignment;+  ULONG MemoryTypeWeight;+  KS_FRAMING_RANGE PhysicalRange;+  KS_FRAMING_RANGE_WEIGHTED FramingRange;+} KS_FRAMING_ITEM,*PKS_FRAMING_ITEM;++typedef struct {+  ULONG CountItems;+  ULONG PinFlags;+  KS_COMPRESSION OutputCompression;+  ULONG PinWeight;+  KS_FRAMING_ITEM FramingItem[1];+} KSALLOCATOR_FRAMING_EX,*PKSALLOCATOR_FRAMING_EX;++#define KSMEMORY_TYPE_WILDCARD		GUID_NULL+#define STATIC_KSMEMORY_TYPE_WILDCARD	STATIC_GUID_NULL++#define KSMEMORY_TYPE_DONT_CARE		GUID_NULL+#define STATIC_KSMEMORY_TYPE_DONT_CARE	STATIC_GUID_NULL++#define KS_TYPE_DONT_CARE		GUID_NULL+#define STATIC_KS_TYPE_DONT_CARE	STATIC_GUID_NULL++#define STATIC_KSMEMORY_TYPE_SYSTEM					\+	0x091bb638L,0x603f,0x11d1,0xb0,0x67,0x00,0xa0,0xc9,0x06,0x28,0x02+DEFINE_GUIDSTRUCT("091bb638-603f-11d1-b067-00a0c9062802",KSMEMORY_TYPE_SYSTEM);+#define KSMEMORY_TYPE_SYSTEM DEFINE_GUIDNAMED(KSMEMORY_TYPE_SYSTEM)++#define STATIC_KSMEMORY_TYPE_USER					\+	0x8cb0fc28L,0x7893,0x11d1,0xb0,0x69,0x00,0xa0,0xc9,0x06,0x28,0x02+DEFINE_GUIDSTRUCT("8cb0fc28-7893-11d1-b069-00a0c9062802",KSMEMORY_TYPE_USER);+#define KSMEMORY_TYPE_USER DEFINE_GUIDNAMED(KSMEMORY_TYPE_USER)++#define STATIC_KSMEMORY_TYPE_KERNEL_PAGED				\+	0xd833f8f8L,0x7894,0x11d1,0xb0,0x69,0x00,0xa0,0xc9,0x06,0x28,0x02+DEFINE_GUIDSTRUCT("d833f8f8-7894-11d1-b069-00a0c9062802",KSMEMORY_TYPE_KERNEL_PAGED);+#define KSMEMORY_TYPE_KERNEL_PAGED DEFINE_GUIDNAMED(KSMEMORY_TYPE_KERNEL_PAGED)++#define STATIC_KSMEMORY_TYPE_KERNEL_NONPAGED				\+	0x4a6d5fc4L,0x7895,0x11d1,0xb0,0x69,0x00,0xa0,0xc9,0x06,0x28,0x02+DEFINE_GUIDSTRUCT("4a6d5fc4-7895-11d1-b069-00a0c9062802",KSMEMORY_TYPE_KERNEL_NONPAGED);+#define KSMEMORY_TYPE_KERNEL_NONPAGED DEFINE_GUIDNAMED(KSMEMORY_TYPE_KERNEL_NONPAGED)++#define STATIC_KSMEMORY_TYPE_DEVICE_UNKNOWN				\+	0x091bb639L,0x603f,0x11d1,0xb0,0x67,0x00,0xa0,0xc9,0x06,0x28,0x02+DEFINE_GUIDSTRUCT("091bb639-603f-11d1-b067-00a0c9062802",KSMEMORY_TYPE_DEVICE_UNKNOWN);+#define KSMEMORY_TYPE_DEVICE_UNKNOWN DEFINE_GUIDNAMED(KSMEMORY_TYPE_DEVICE_UNKNOWN)++#define DECLARE_SIMPLE_FRAMING_EX(FramingExName,MemoryType,Flags,Frames,Alignment,MinFrameSize,MaxFrameSize) \+const KSALLOCATOR_FRAMING_EX FramingExName =				\+{									\+	1,								\+	0,								\+	{								\+		1,							\+		1,							\+		0							\+	},								\+	0,								\+	{								\+		{							\+			MemoryType,					\+			STATIC_KS_TYPE_DONT_CARE,			\+			0,						\+			0,						\+			Flags,						\+			Frames,						\+			Alignment,					\+			0,						\+			{						\+				0,					\+				(ULONG)-1,				\+				1					\+			},						\+			{						\+				{					\+					MinFrameSize,			\+					MaxFrameSize,			\+					1				\+				},					\+				0,					\+				0					\+			}						\+		}							\+	}								\+}++#define SetDefaultKsCompression(KsCompressionPointer)			\+{									\+	KsCompressionPointer->RatioNumerator = 1;			\+	KsCompressionPointer->RatioDenominator = 1;			\+	KsCompressionPointer->RatioConstantMargin = 0;			\+}++#define SetDontCareKsFramingRange(KsFramingRangePointer)		\+{									\+	KsFramingRangePointer->MinFrameSize = 0;			\+	KsFramingRangePointer->MaxFrameSize = (ULONG) -1;		\+	KsFramingRangePointer->Stepping = 1;				\+}++#define SetKsFramingRange(KsFramingRangePointer,P_MinFrameSize,P_MaxFrameSize) \+{									\+	KsFramingRangePointer->MinFrameSize = P_MinFrameSize;		\+	KsFramingRangePointer->MaxFrameSize = P_MaxFrameSize;		\+	KsFramingRangePointer->Stepping = 1;				\+}++#define SetKsFramingRangeWeighted(KsFramingRangeWeightedPointer,P_MinFrameSize,P_MaxFrameSize) \+{									\+	KS_FRAMING_RANGE *KsFramingRange =				\+				&KsFramingRangeWeightedPointer->Range;	\+	SetKsFramingRange(KsFramingRange,P_MinFrameSize,P_MaxFrameSize);\+	KsFramingRangeWeightedPointer->InPlaceWeight = 0;		\+	KsFramingRangeWeightedPointer->NotInPlaceWeight = 0;		\+}++#define INITIALIZE_SIMPLE_FRAMING_EX(FramingExPointer,P_MemoryType,P_Flags,P_Frames,P_Alignment,P_MinFrameSize,P_MaxFrameSize) \+{									\+	KS_COMPRESSION *KsCompression =					\+			&FramingExPointer->OutputCompression;		\+	KS_FRAMING_RANGE *KsFramingRange =				\+			&FramingExPointer->FramingItem[0].PhysicalRange;\+	KS_FRAMING_RANGE_WEIGHTED *KsFramingRangeWeighted =		\+			&FramingExPointer->FramingItem[0].FramingRange;	\+	FramingExPointer->CountItems = 1;				\+	FramingExPointer->PinFlags = 0;					\+	SetDefaultKsCompression(KsCompression);				\+	FramingExPointer->PinWeight = 0;				\+	FramingExPointer->FramingItem[0].MemoryType = P_MemoryType;	\+	FramingExPointer->FramingItem[0].BusType = KS_TYPE_DONT_CARE;	\+	FramingExPointer->FramingItem[0].MemoryFlags = 0;		\+	FramingExPointer->FramingItem[0].BusFlags = 0;			\+	FramingExPointer->FramingItem[0].Flags = P_Flags;		\+	FramingExPointer->FramingItem[0].Frames = P_Frames;		\+	FramingExPointer->FramingItem[0].FileAlignment = P_Alignment;	\+	FramingExPointer->FramingItem[0].MemoryTypeWeight = 0;		\+	SetDontCareKsFramingRange(KsFramingRange);			\+	SetKsFramingRangeWeighted(KsFramingRangeWeighted,		\+				  P_MinFrameSize,P_MaxFrameSize);	\+}++#define STATIC_KSEVENTSETID_StreamAllocator				\+	0x75d95571L,0x073c,0x11d0,0xa1,0x61,0x00,0x20,0xaf,0xd1,0x56,0xe4+DEFINE_GUIDSTRUCT("75d95571-073c-11d0-a161-0020afd156e4",KSEVENTSETID_StreamAllocator);+#define KSEVENTSETID_StreamAllocator DEFINE_GUIDNAMED(KSEVENTSETID_StreamAllocator)++typedef enum {+  KSEVENT_STREAMALLOCATOR_INTERNAL_FREEFRAME,+  KSEVENT_STREAMALLOCATOR_FREEFRAME+} KSEVENT_STREAMALLOCATOR;++#define STATIC_KSMETHODSETID_StreamAllocator				\+	0xcf6e4341L,0xec87,0x11cf,0xa1,0x30,0x00,0x20,0xaf,0xd1,0x56,0xe4+DEFINE_GUIDSTRUCT("cf6e4341-ec87-11cf-a130-0020afd156e4",KSMETHODSETID_StreamAllocator);+#define KSMETHODSETID_StreamAllocator DEFINE_GUIDNAMED(KSMETHODSETID_StreamAllocator)++typedef enum {+  KSMETHOD_STREAMALLOCATOR_ALLOC,+  KSMETHOD_STREAMALLOCATOR_FREE+} KSMETHOD_STREAMALLOCATOR;++#define DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_ALLOC(Handler)		\+	DEFINE_KSMETHOD_ITEM(						\+				KSMETHOD_STREAMALLOCATOR_ALLOC,		\+				KSMETHOD_TYPE_WRITE,			\+				(Handler),				\+				sizeof(KSMETHOD),			\+				sizeof(PVOID),				\+				NULL)++#define DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_FREE(Handler)		\+	DEFINE_KSMETHOD_ITEM(						\+				KSMETHOD_STREAMALLOCATOR_FREE,		\+				KSMETHOD_TYPE_READ,			\+				(Handler),				\+				sizeof(KSMETHOD),			\+				sizeof(PVOID),				\+				NULL)++#define DEFINE_KSMETHOD_ALLOCATORSET(AllocatorSet,MethodAlloc,MethodFree)\+DEFINE_KSMETHOD_TABLE(AllocatorSet) {					\+	DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_ALLOC(MethodAlloc),	\+	DEFINE_KSMETHOD_ITEM_STREAMALLOCATOR_FREE(MethodFree)		\+}++#define STATIC_KSPROPSETID_StreamAllocator				\+	0xcf6e4342L,0xec87,0x11cf,0xa1,0x30,0x00,0x20,0xaf,0xd1,0x56,0xe4+DEFINE_GUIDSTRUCT("cf6e4342-ec87-11cf-a130-0020afd156e4",KSPROPSETID_StreamAllocator);+#define KSPROPSETID_StreamAllocator DEFINE_GUIDNAMED(KSPROPSETID_StreamAllocator)++#if defined(_NTDDK_)+typedef enum {+  KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE,+  KSPROPERTY_STREAMALLOCATOR_STATUS+} KSPROPERTY_STREAMALLOCATOR;++#define DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_FUNCTIONTABLE(Handler)	\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_STREAMALLOCATOR_FUNCTIONTABLE,\+				(Handler),				\+				sizeof(KSPROPERTY),			\+				sizeof(KSSTREAMALLOCATOR_FUNCTIONTABLE),\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_STATUS(Handler)		\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_STREAMALLOCATOR_STATUS,	\+				(Handler),				\+				sizeof(KSPROPERTY),			\+				sizeof(KSSTREAMALLOCATOR_STATUS),	\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ALLOCATORSET(AllocatorSet,PropFunctionTable,PropStatus)\+DEFINE_KSPROPERTY_TABLE(AllocatorSet) {					\+	DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_STATUS(PropStatus),	\+	DEFINE_KSPROPERTY_ITEM_STREAMALLOCATOR_FUNCTIONTABLE(PropFunctionTable)\+}++typedef NTSTATUS (*PFNALLOCATOR_ALLOCATEFRAME) (PFILE_OBJECT FileObject,+						PVOID *Frame);+typedef VOID (*PFNALLOCATOR_FREEFRAME) (PFILE_OBJECT FileObject, PVOID Frame);++typedef struct {+  PFNALLOCATOR_ALLOCATEFRAME AllocateFrame;+  PFNALLOCATOR_FREEFRAME FreeFrame;+} KSSTREAMALLOCATOR_FUNCTIONTABLE, *PKSSTREAMALLOCATOR_FUNCTIONTABLE;+#endif /* _NTDDK_ */++typedef struct {+  KSALLOCATOR_FRAMING Framing;+  ULONG AllocatedFrames;+  ULONG Reserved;+} KSSTREAMALLOCATOR_STATUS,*PKSSTREAMALLOCATOR_STATUS;++typedef struct {+  KSALLOCATOR_FRAMING_EX Framing;+  ULONG AllocatedFrames;+  ULONG Reserved;+} KSSTREAMALLOCATOR_STATUS_EX,*PKSSTREAMALLOCATOR_STATUS_EX;++#define KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT		0x00000001+#define KSSTREAM_HEADER_OPTIONSF_PREROLL		0x00000002+#define KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY	0x00000004+#define KSSTREAM_HEADER_OPTIONSF_TYPECHANGED		0x00000008+#define KSSTREAM_HEADER_OPTIONSF_TIMEVALID		0x00000010+#define KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY	0x00000040+#define KSSTREAM_HEADER_OPTIONSF_FLUSHONPAUSE		0x00000080+#define KSSTREAM_HEADER_OPTIONSF_DURATIONVALID		0x00000100+#define KSSTREAM_HEADER_OPTIONSF_ENDOFSTREAM		0x00000200+#define KSSTREAM_HEADER_OPTIONSF_LOOPEDDATA		0x80000000++typedef struct {+  LONGLONG Time;+  ULONG Numerator;+  ULONG Denominator;+} KSTIME,*PKSTIME;++typedef struct {+  ULONG Size;+  ULONG TypeSpecificFlags;+  KSTIME PresentationTime;+  LONGLONG Duration;+  ULONG FrameExtent;+  ULONG DataUsed;+  PVOID Data;+  ULONG OptionsFlags;+#ifdef _WIN64+  ULONG Reserved;+#endif+} KSSTREAM_HEADER,*PKSSTREAM_HEADER;++#define STATIC_KSPROPSETID_StreamInterface				\+	0x1fdd8ee1L,0x9cd3,0x11d0,0x82,0xaa,0x00,0x00,0xf8,0x22,0xfe,0x8a+DEFINE_GUIDSTRUCT("1fdd8ee1-9cd3-11d0-82aa-0000f822fe8a",KSPROPSETID_StreamInterface);+#define KSPROPSETID_StreamInterface DEFINE_GUIDNAMED(KSPROPSETID_StreamInterface)++typedef enum {+  KSPROPERTY_STREAMINTERFACE_HEADERSIZE+} KSPROPERTY_STREAMINTERFACE;++#define DEFINE_KSPROPERTY_ITEM_STREAMINTERFACE_HEADERSIZE(GetHandler)	\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_STREAMINTERFACE_HEADERSIZE,	\+				(GetHandler),				\+				sizeof(KSPROPERTY),			\+				sizeof(ULONG),				\+				NULL,NULL,0,NULL,NULL,0)++#define DEFINE_KSPROPERTY_STREAMINTERFACESET(StreamInterfaceSet,HeaderSizeHandler) \+DEFINE_KSPROPERTY_TABLE(StreamInterfaceSet) {				\+	DEFINE_KSPROPERTY_ITEM_STREAMINTERFACE_HEADERSIZE(HeaderSizeHandler)\+}++#define STATIC_KSPROPSETID_Stream					\+	0x65aaba60L,0x98ae,0x11cf,0xa1,0x0d,0x00,0x20,0xaf,0xd1,0x56,0xe4+DEFINE_GUIDSTRUCT("65aaba60-98ae-11cf-a10d-0020afd156e4",KSPROPSETID_Stream);+#define KSPROPSETID_Stream DEFINE_GUIDNAMED(KSPROPSETID_Stream)++typedef enum {+  KSPROPERTY_STREAM_ALLOCATOR,+  KSPROPERTY_STREAM_QUALITY,+  KSPROPERTY_STREAM_DEGRADATION,+  KSPROPERTY_STREAM_MASTERCLOCK,+  KSPROPERTY_STREAM_TIMEFORMAT,+  KSPROPERTY_STREAM_PRESENTATIONTIME,+  KSPROPERTY_STREAM_PRESENTATIONEXTENT,+  KSPROPERTY_STREAM_FRAMETIME,+  KSPROPERTY_STREAM_RATECAPABILITY,+  KSPROPERTY_STREAM_RATE,+  KSPROPERTY_STREAM_PIPE_ID+} KSPROPERTY_STREAM;++#define DEFINE_KSPROPERTY_ITEM_STREAM_ALLOCATOR(GetHandler,SetHandler)	\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_STREAM_ALLOCATOR,		\+				(GetHandler),				\+				sizeof(KSPROPERTY),			\+				sizeof(HANDLE),				\+				(SetHandler),				\+				NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_STREAM_QUALITY(Handler)			\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_STREAM_QUALITY,		\+				(Handler),				\+				sizeof(KSPROPERTY),			\+				sizeof(KSQUALITY_MANAGER),		\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_STREAM_DEGRADATION(GetHandler,SetHandler)\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_STREAM_DEGRADATION,		\+				(GetHandler),				\+				sizeof(KSPROPERTY),			\+				0,					\+				(SetHandler),				\+				NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_STREAM_MASTERCLOCK(GetHandler,SetHandler)\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_STREAM_MASTERCLOCK,		\+				(GetHandler),				\+				sizeof(KSPROPERTY),			\+				sizeof(HANDLE),				\+				(SetHandler),				\+				NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_STREAM_TIMEFORMAT(Handler)		\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_STREAM_TIMEFORMAT,		\+				(Handler),				\+				sizeof(KSPROPERTY),			\+				sizeof(GUID),				\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONTIME(GetHandler,SetHandler)\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_STREAM_PRESENTATIONTIME,	\+				(GetHandler),				\+				sizeof(KSPROPERTY),			\+				sizeof(KSTIME),				\+				(SetHandler),				\+				NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_STREAM_PRESENTATIONEXTENT(Handler)	\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_STREAM_PRESENTATIONEXTENT,	\+				(Handler),				\+				sizeof(KSPROPERTY),			\+				sizeof(LONGLONG),			\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_STREAM_FRAMETIME(Handler)		\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_STREAM_FRAMETIME,		\+				(Handler),				\+				sizeof(KSPROPERTY),			\+				sizeof(KSFRAMETIME),			\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_STREAM_RATECAPABILITY(Handler)		\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_STREAM_RATECAPABILITY,	\+				(Handler),				\+				sizeof(KSRATE_CAPABILITY),		\+				sizeof(KSRATE),				\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_STREAM_RATE(GetHandler,SetHandler)	\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_STREAM_RATE,			\+				(GetHandler),				\+				sizeof(KSPROPERTY),			\+				sizeof(KSRATE),				\+				(SetHandler),				\+				NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_STREAM_PIPE_ID(GetHandler,SetHandler)	\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_STREAM_PIPE_ID,		\+				(GetHandler),				\+				sizeof(KSPROPERTY),			\+				sizeof(HANDLE),				\+				(SetHandler),				\+				NULL, 0, NULL, NULL, 0)++typedef struct {+  HANDLE QualityManager;+  PVOID Context;+} KSQUALITY_MANAGER,*PKSQUALITY_MANAGER;++typedef struct {+  LONGLONG Duration;+  ULONG FrameFlags;+  ULONG Reserved;+} KSFRAMETIME,*PKSFRAMETIME;++#define KSFRAMETIME_VARIABLESIZE	0x00000001++typedef struct {+  LONGLONG PresentationStart;+  LONGLONG Duration;+  KSPIN_INTERFACE Interface;+  LONG Rate;+  ULONG Flags;+} KSRATE,*PKSRATE;++#define KSRATE_NOPRESENTATIONSTART	0x00000001+#define KSRATE_NOPRESENTATIONDURATION	0x00000002++typedef struct {+  KSPROPERTY Property;+  KSRATE Rate;+} KSRATE_CAPABILITY,*PKSRATE_CAPABILITY;++#define STATIC_KSPROPSETID_Clock					\+	0xDF12A4C0L,0xAC17,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("DF12A4C0-AC17-11CF-A5D6-28DB04C10000",KSPROPSETID_Clock);+#define KSPROPSETID_Clock DEFINE_GUIDNAMED(KSPROPSETID_Clock)++#define NANOSECONDS 10000000+#define KSCONVERT_PERFORMANCE_TIME(Frequency,PerformanceTime)		\+	((((ULONGLONG)(ULONG)(PerformanceTime).HighPart *NANOSECONDS / (Frequency)) << 32) +	\+	 ((((((ULONGLONG)(ULONG)(PerformanceTime).HighPart *NANOSECONDS) % (Frequency)) << 32) +\+	 ((ULONGLONG)(PerformanceTime).LowPart *NANOSECONDS)) / (Frequency)))++typedef struct {+  ULONG CreateFlags;+} KSCLOCK_CREATE,*PKSCLOCK_CREATE;++typedef struct {+  LONGLONG Time;+  LONGLONG SystemTime;+} KSCORRELATED_TIME,*PKSCORRELATED_TIME;++typedef struct {+  LONGLONG Granularity;+  LONGLONG Error;+} KSRESOLUTION,*PKSRESOLUTION;++typedef enum {+  KSPROPERTY_CLOCK_TIME,+  KSPROPERTY_CLOCK_PHYSICALTIME,+  KSPROPERTY_CLOCK_CORRELATEDTIME,+  KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME,+  KSPROPERTY_CLOCK_RESOLUTION,+  KSPROPERTY_CLOCK_STATE,+#if defined(_NTDDK_)+  KSPROPERTY_CLOCK_FUNCTIONTABLE+#endif /* _NTDDK_ */+} KSPROPERTY_CLOCK;++#if defined(_NTDDK_)+typedef LONGLONG (FASTCALL *PFNKSCLOCK_GETTIME)(PFILE_OBJECT FileObject);+typedef LONGLONG (FASTCALL *PFNKSCLOCK_CORRELATEDTIME)(PFILE_OBJECT FileObject,+							PLONGLONG SystemTime);++typedef struct {+   PFNKSCLOCK_GETTIME GetTime;+   PFNKSCLOCK_GETTIME GetPhysicalTime;+   PFNKSCLOCK_CORRELATEDTIME GetCorrelatedTime;+   PFNKSCLOCK_CORRELATEDTIME GetCorrelatedPhysicalTime;+} KSCLOCK_FUNCTIONTABLE, *PKSCLOCK_FUNCTIONTABLE;++typedef BOOLEAN (*PFNKSSETTIMER)(PVOID Context, PKTIMER Timer,+				 LARGE_INTEGER DueTime, PKDPC Dpc);+typedef BOOLEAN (*PFNKSCANCELTIMER) (PVOID Context, PKTIMER Timer);+typedef LONGLONG (FASTCALL *PFNKSCORRELATEDTIME)(PVOID Context,+						 PLONGLONG SystemTime);++typedef PVOID			PKSDEFAULTCLOCK;++#define DEFINE_KSPROPERTY_ITEM_CLOCK_TIME(Handler)			\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_CLOCK_TIME,			\+				(Handler),				\+				sizeof(KSPROPERTY), sizeof(LONGLONG),	\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_CLOCK_PHYSICALTIME(Handler)		\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_CLOCK_PHYSICALTIME,		\+				(Handler),				\+				sizeof(KSPROPERTY), sizeof(LONGLONG),	\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDTIME(Handler)		\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_CLOCK_CORRELATEDTIME,	\+				(Handler),				\+				sizeof(KSPROPERTY),			\+				sizeof(KSCORRELATED_TIME),		\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDPHYSICALTIME(Handler)	\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME,\+				(Handler),				\+				sizeof(KSPROPERTY),			\+				sizeof(KSCORRELATED_TIME),		\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_CLOCK_RESOLUTION(Handler)		\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_CLOCK_RESOLUTION,		\+				(Handler),				\+				sizeof(KSPROPERTY),sizeof(KSRESOLUTION),\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_CLOCK_STATE(Handler)			\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_CLOCK_STATE,			\+				(Handler),				\+				sizeof(KSPROPERTY), sizeof(KSSTATE),	\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_CLOCK_FUNCTIONTABLE(Handler)		\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_CLOCK_FUNCTIONTABLE,		\+				(Handler),				\+				sizeof(KSPROPERTY),			\+				sizeof(KSCLOCK_FUNCTIONTABLE),		\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_CLOCKSET(ClockSet,PropTime,PropPhysicalTime,PropCorrelatedTime,PropCorrelatedPhysicalTime,PropResolution,PropState,PropFunctionTable)\+DEFINE_KSPROPERTY_TABLE(ClockSet) {					\+	DEFINE_KSPROPERTY_ITEM_CLOCK_TIME(PropTime),			\+	DEFINE_KSPROPERTY_ITEM_CLOCK_PHYSICALTIME(PropPhysicalTime),	\+	DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDTIME(PropCorrelatedTime),\+	DEFINE_KSPROPERTY_ITEM_CLOCK_CORRELATEDPHYSICALTIME(PropCorrelatedPhysicalTime),\+	DEFINE_KSPROPERTY_ITEM_CLOCK_RESOLUTION(PropResolution),	\+	DEFINE_KSPROPERTY_ITEM_CLOCK_STATE(PropState),			\+	DEFINE_KSPROPERTY_ITEM_CLOCK_FUNCTIONTABLE(PropFunctionTable),	\+}+#endif /* _NTDDK_ */++#define STATIC_KSEVENTSETID_Clock					\+	0x364D8E20L,0x62C7,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("364D8E20-62C7-11CF-A5D6-28DB04C10000",KSEVENTSETID_Clock);+#define KSEVENTSETID_Clock DEFINE_GUIDNAMED(KSEVENTSETID_Clock)++typedef enum {+  KSEVENT_CLOCK_INTERVAL_MARK,+  KSEVENT_CLOCK_POSITION_MARK+} KSEVENT_CLOCK_POSITION;++#define STATIC_KSEVENTSETID_Connection					\+	0x7f4bcbe0L,0x9ea5,0x11cf,0xa5,0xd6,0x28,0xdb,0x04,0xc1,0x00,0x00+DEFINE_GUIDSTRUCT("7f4bcbe0-9ea5-11cf-a5d6-28db04c10000",KSEVENTSETID_Connection);+#define KSEVENTSETID_Connection DEFINE_GUIDNAMED(KSEVENTSETID_Connection)++typedef enum {+  KSEVENT_CONNECTION_POSITIONUPDATE,+  KSEVENT_CONNECTION_DATADISCONTINUITY,+  KSEVENT_CONNECTION_TIMEDISCONTINUITY,+  KSEVENT_CONNECTION_PRIORITY,+  KSEVENT_CONNECTION_ENDOFSTREAM+} KSEVENT_CONNECTION;++typedef struct {+  PVOID Context;+  ULONG Proportion;+  LONGLONG DeltaTime;+} KSQUALITY,*PKSQUALITY;++typedef struct {+  PVOID Context;+  ULONG Status;+} KSERROR,*PKSERROR;++typedef KSIDENTIFIER KSDEGRADE,*PKSDEGRADE;++#define STATIC_KSDEGRADESETID_Standard					\+	0x9F564180L,0x704C,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("9F564180-704C-11D0-A5D6-28DB04C10000",KSDEGRADESETID_Standard);+#define KSDEGRADESETID_Standard DEFINE_GUIDNAMED(KSDEGRADESETID_Standard)++typedef enum {+  KSDEGRADE_STANDARD_SAMPLE,+  KSDEGRADE_STANDARD_QUALITY,+  KSDEGRADE_STANDARD_COMPUTATION,+  KSDEGRADE_STANDARD_SKIP+} KSDEGRADE_STANDARD;++#if defined(_NTDDK_)++#define KSPROBE_STREAMREAD		0x00000000+#define KSPROBE_STREAMWRITE		0x00000001+#define KSPROBE_ALLOCATEMDL		0x00000010+#define KSPROBE_PROBEANDLOCK		0x00000020+#define KSPROBE_SYSTEMADDRESS		0x00000040+#define KSPROBE_MODIFY			0x00000200+#define KSPROBE_STREAMWRITEMODIFY	(KSPROBE_MODIFY | KSPROBE_STREAMWRITE)+#define KSPROBE_ALLOWFORMATCHANGE	0x00000080+#define KSSTREAM_READ			KSPROBE_STREAMREAD+#define KSSTREAM_WRITE			KSPROBE_STREAMWRITE+#define KSSTREAM_PAGED_DATA		0x00000000+#define KSSTREAM_NONPAGED_DATA		0x00000100+#define KSSTREAM_SYNCHRONOUS		0x00001000+#define KSSTREAM_FAILUREEXCEPTION	0x00002000++typedef NTSTATUS (*PFNKSCONTEXT_DISPATCH)(PVOID Context, PIRP Irp);+typedef NTSTATUS (*PFNKSHANDLER)(PIRP Irp, PKSIDENTIFIER Request, PVOID Data);+typedef BOOLEAN (*PFNKSFASTHANDLER)(PFILE_OBJECT FileObject,+				    PKSIDENTIFIER Request,+				    ULONG RequestLength, PVOID Data,+				    ULONG DataLength,+				    PIO_STATUS_BLOCK IoStatus);+typedef NTSTATUS (*PFNKSALLOCATOR) (PIRP Irp, ULONG BufferSize,+				    BOOLEAN InputOperation);++typedef struct {+  KSPROPERTY_MEMBERSHEADER MembersHeader;+  const VOID *Members;+} KSPROPERTY_MEMBERSLIST, *PKSPROPERTY_MEMBERSLIST;++typedef struct {+  KSIDENTIFIER PropTypeSet;+  ULONG MembersListCount;+  const KSPROPERTY_MEMBERSLIST *MembersList;+} KSPROPERTY_VALUES, *PKSPROPERTY_VALUES;++#define DEFINE_KSPROPERTY_TABLE(tablename)				\+	const KSPROPERTY_ITEM tablename[] =++#define DEFINE_KSPROPERTY_ITEM(PropertyId,GetHandler,MinProperty,MinData,SetHandler,Values,RelationsCount,Relations,SupportHandler,SerializedSize)\+{									\+			PropertyId, (PFNKSHANDLER)GetHandler,		\+			MinProperty, MinData,				\+			(PFNKSHANDLER)SetHandler,			\+			(PKSPROPERTY_VALUES)Values, RelationsCount,	\+			(PKSPROPERTY)Relations,				\+			(PFNKSHANDLER)SupportHandler,			\+			(ULONG)SerializedSize				\+}++typedef struct {+  ULONG PropertyId;+  __MINGW_EXTENSION union {+    PFNKSHANDLER GetPropertyHandler;+    BOOLEAN GetSupported;+  };+  ULONG MinProperty;+  ULONG MinData;+  __MINGW_EXTENSION union {+    PFNKSHANDLER SetPropertyHandler;+    BOOLEAN SetSupported;+  };+  const KSPROPERTY_VALUES *Values;+  ULONG RelationsCount;+  const KSPROPERTY *Relations;+  PFNKSHANDLER SupportHandler;+  ULONG SerializedSize;+} KSPROPERTY_ITEM, *PKSPROPERTY_ITEM;++#define DEFINE_KSFASTPROPERTY_ITEM(PropertyId, GetHandler, SetHandler)	\+{									\+			PropertyId, (PFNKSFASTHANDLER)GetHandler,	\+			(PFNKSFASTHANDLER)SetHandler, 0			\+}++typedef struct {+  ULONG PropertyId;+  __MINGW_EXTENSION union {+    PFNKSFASTHANDLER GetPropertyHandler;+    BOOLEAN GetSupported;+  };+  __MINGW_EXTENSION union {+    PFNKSFASTHANDLER SetPropertyHandler;+    BOOLEAN SetSupported;+  };+  ULONG Reserved;+} KSFASTPROPERTY_ITEM, *PKSFASTPROPERTY_ITEM;++#define DEFINE_KSPROPERTY_SET(Set,PropertiesCount,PropertyItem,FastIoCount,FastIoTable)\+{									\+			Set,						\+			PropertiesCount, PropertyItem,			\+			FastIoCount, FastIoTable			\+}++#define DEFINE_KSPROPERTY_SET_TABLE(tablename)				\+	const KSPROPERTY_SET tablename[] =++typedef struct {+  const GUID *Set;+  ULONG PropertiesCount;+  const KSPROPERTY_ITEM *PropertyItem;+  ULONG FastIoCount;+  const KSFASTPROPERTY_ITEM *FastIoTable;+} KSPROPERTY_SET, *PKSPROPERTY_SET;++#define DEFINE_KSMETHOD_TABLE(tablename)				\+	const KSMETHOD_ITEM tablename[] =++#define DEFINE_KSMETHOD_ITEM(MethodId,Flags,MethodHandler,MinMethod,MinData,SupportHandler)\+{									\+			MethodId, (PFNKSHANDLER)MethodHandler,		\+			MinMethod, MinData,				\+			SupportHandler, Flags				\+}++typedef struct {+  ULONG MethodId;+  __MINGW_EXTENSION union {+    PFNKSHANDLER MethodHandler;+    BOOLEAN MethodSupported;+  };+  ULONG MinMethod;+  ULONG MinData;+  PFNKSHANDLER SupportHandler;+  ULONG Flags;+} KSMETHOD_ITEM, *PKSMETHOD_ITEM;++#define DEFINE_KSFASTMETHOD_ITEM(MethodId,MethodHandler)		\+{									\+			MethodId, (PFNKSFASTHANDLER)MethodHandler	\+}++typedef struct {+  ULONG MethodId;+  __MINGW_EXTENSION union {+    PFNKSFASTHANDLER MethodHandler;+    BOOLEAN MethodSupported;+  };+} KSFASTMETHOD_ITEM, *PKSFASTMETHOD_ITEM;++#define DEFINE_KSMETHOD_SET(Set,MethodsCount,MethodItem,FastIoCount,FastIoTable)\+{									\+			Set,						\+			MethodsCount, MethodItem,			\+			FastIoCount, FastIoTable			\+}++#define DEFINE_KSMETHOD_SET_TABLE(tablename)				\+	const KSMETHOD_SET tablename[] =++typedef struct {+  const GUID *Set;+  ULONG MethodsCount;+  const KSMETHOD_ITEM *MethodItem;+  ULONG FastIoCount;+  const KSFASTMETHOD_ITEM *FastIoTable;+} KSMETHOD_SET, *PKSMETHOD_SET;++typedef struct _KSEVENT_ENTRY	KSEVENT_ENTRY, *PKSEVENT_ENTRY;+typedef NTSTATUS (*PFNKSADDEVENT)(PIRP Irp, PKSEVENTDATA EventData,+				  struct _KSEVENT_ENTRY* EventEntry);+typedef VOID (*PFNKSREMOVEEVENT)(PFILE_OBJECT FileObject,+				 struct _KSEVENT_ENTRY* EventEntry);++#define DEFINE_KSEVENT_TABLE(tablename)					\+	const KSEVENT_ITEM tablename[] =++#define DEFINE_KSEVENT_ITEM(EventId,DataInput,ExtraEntryData,AddHandler,RemoveHandler,SupportHandler)\+{									\+			EventId, DataInput, ExtraEntryData,		\+			AddHandler, RemoveHandler, SupportHandler	\+}++typedef struct {+  ULONG EventId;+  ULONG DataInput;+  ULONG ExtraEntryData;+  PFNKSADDEVENT AddHandler;+  PFNKSREMOVEEVENT RemoveHandler;+  PFNKSHANDLER SupportHandler;+} KSEVENT_ITEM, *PKSEVENT_ITEM;++#define DEFINE_KSEVENT_SET(Set,EventsCount,EventItem)			\+{									\+			Set, EventsCount, EventItem			\+}++#define DEFINE_KSEVENT_SET_TABLE(tablename)				\+	const KSEVENT_SET tablename[] =++typedef struct {+  const GUID *Set;+  ULONG EventsCount;+  const KSEVENT_ITEM *EventItem;+} KSEVENT_SET, *PKSEVENT_SET;++typedef struct {+  KDPC Dpc;+  ULONG ReferenceCount;+  KSPIN_LOCK AccessLock;+} KSDPC_ITEM, *PKSDPC_ITEM;++typedef struct {+  KSDPC_ITEM DpcItem;+  LIST_ENTRY BufferList;+} KSBUFFER_ITEM, *PKSBUFFER_ITEM;+++#define KSEVENT_ENTRY_DELETED		1+#define KSEVENT_ENTRY_ONESHOT		2+#define KSEVENT_ENTRY_BUFFERED		4++struct _KSEVENT_ENTRY {+  LIST_ENTRY ListEntry;+  PVOID Object;+  __MINGW_EXTENSION union {+    PKSDPC_ITEM DpcItem;+    PKSBUFFER_ITEM BufferItem;+  };+  PKSEVENTDATA EventData;+  ULONG NotificationType;+  const KSEVENT_SET *EventSet;+  const KSEVENT_ITEM *EventItem;+  PFILE_OBJECT FileObject;+  ULONG SemaphoreAdjustment;+  ULONG Reserved;+  ULONG Flags;+};++typedef enum {+  KSEVENTS_NONE,+  KSEVENTS_SPINLOCK,+  KSEVENTS_MUTEX,+  KSEVENTS_FMUTEX,+  KSEVENTS_FMUTEXUNSAFE,+  KSEVENTS_INTERRUPT,+  KSEVENTS_ERESOURCE+} KSEVENTS_LOCKTYPE;++#define KSDISPATCH_FASTIO			0x80000000++typedef struct {+  PDRIVER_DISPATCH Create;+  PVOID Context;+  UNICODE_STRING ObjectClass;+  PSECURITY_DESCRIPTOR SecurityDescriptor;+  ULONG Flags;+} KSOBJECT_CREATE_ITEM, *PKSOBJECT_CREATE_ITEM;++typedef VOID (*PFNKSITEMFREECALLBACK)(PKSOBJECT_CREATE_ITEM CreateItem);++#define KSCREATE_ITEM_SECURITYCHANGED		0x00000001+#define KSCREATE_ITEM_WILDCARD			0x00000002+#define KSCREATE_ITEM_NOPARAMETERS		0x00000004+#define KSCREATE_ITEM_FREEONSTOP		0x00000008++#define DEFINE_KSCREATE_DISPATCH_TABLE( tablename )			\+	KSOBJECT_CREATE_ITEM tablename[] =++#define DEFINE_KSCREATE_ITEM(DispatchCreate,TypeName,Context)		\+{									\+			(DispatchCreate), (PVOID)(Context),		\+			{						\+				sizeof(TypeName) - sizeof(UNICODE_NULL),\+				sizeof(TypeName),			\+				(PWCHAR)(TypeName)			\+			},						\+			NULL, 0						\+}++#define DEFINE_KSCREATE_ITEMEX(DispatchCreate,TypeName,Context,Flags)	\+{									\+			(DispatchCreate),				\+			(PVOID)(Context),				\+			{						\+				sizeof(TypeName) - sizeof(UNICODE_NULL),\+				sizeof(TypeName),			\+				(PWCHAR)(TypeName)			\+			},						\+			NULL, (Flags)					\+}++#define DEFINE_KSCREATE_ITEMNULL(DispatchCreate,Context)		\+{									\+			DispatchCreate, Context,			\+			{						\+				0, 0, NULL,				\+			},						\+			NULL, 0						\+}++typedef struct {+  ULONG CreateItemsCount;+  PKSOBJECT_CREATE_ITEM CreateItemsList;+} KSOBJECT_CREATE, *PKSOBJECT_CREATE;++typedef struct {+  PDRIVER_DISPATCH DeviceIoControl;+  PDRIVER_DISPATCH Read;+  PDRIVER_DISPATCH Write;+  PDRIVER_DISPATCH Flush;+  PDRIVER_DISPATCH Close;+  PDRIVER_DISPATCH QuerySecurity;+  PDRIVER_DISPATCH SetSecurity;+  PFAST_IO_DEVICE_CONTROL FastDeviceIoControl;+  PFAST_IO_READ FastRead;+  PFAST_IO_WRITE FastWrite;+} KSDISPATCH_TABLE, *PKSDISPATCH_TABLE;++#define DEFINE_KSDISPATCH_TABLE(tablename,DeviceIoControl,Read,Write,Flush,Close,QuerySecurity,SetSecurity,FastDeviceIoControl,FastRead,FastWrite)\+	const KSDISPATCH_TABLE tablename =				\+	{								\+		DeviceIoControl,					\+		Read,							\+		Write,							\+		Flush,							\+		Close,							\+		QuerySecurity,						\+		SetSecurity,						\+		FastDeviceIoControl,					\+		FastRead,						\+		FastWrite,						\+	}++#define KSCREATE_ITEM_IRP_STORAGE(Irp)					\+	(*(PKSOBJECT_CREATE_ITEM *)&(Irp)->Tail.Overlay.DriverContext[0])+#define KSEVENT_SET_IRP_STORAGE(Irp)					\+	(*(const KSEVENT_SET **)&(Irp)->Tail.Overlay.DriverContext[0])+#define KSEVENT_ITEM_IRP_STORAGE(Irp)					\+	(*(const KSEVENT_ITEM **)&(Irp)->Tail.Overlay.DriverContext[3])+#define KSEVENT_ENTRY_IRP_STORAGE(Irp)					\+	(*(PKSEVENT_ENTRY *)&(Irp)->Tail.Overlay.DriverContext[0])+#define KSMETHOD_SET_IRP_STORAGE(Irp)					\+	(*(const KSMETHOD_SET **)&(Irp)->Tail.Overlay.DriverContext[0])+#define KSMETHOD_ITEM_IRP_STORAGE(Irp)					\+	(*(const KSMETHOD_ITEM **)&(Irp)->Tail.Overlay.DriverContext[3])+#define KSMETHOD_TYPE_IRP_STORAGE(Irp)					\+	(*(ULONG_PTR *)(&(Irp)->Tail.Overlay.DriverContext[2]))+#define KSQUEUE_SPINLOCK_IRP_STORAGE(Irp)				\+	(*(PKSPIN_LOCK *)&(Irp)->Tail.Overlay.DriverContext[1])+#define KSPROPERTY_SET_IRP_STORAGE(Irp)					\+	(*(const KSPROPERTY_SET **)&(Irp)->Tail.Overlay.DriverContext[0])+#define KSPROPERTY_ITEM_IRP_STORAGE(Irp)				\+	(*(const KSPROPERTY_ITEM **)&(Irp)->Tail.Overlay.DriverContext[3])+#define KSPROPERTY_ATTRIBUTES_IRP_STORAGE(Irp)				\+	(*(PKSATTRIBUTE_LIST *)&(Irp)->Tail.Overlay.DriverContext[2])++typedef PVOID		KSDEVICE_HEADER, KSOBJECT_HEADER;++typedef enum {+  KsInvokeOnSuccess = 1,+  KsInvokeOnError = 2,+  KsInvokeOnCancel = 4+} KSCOMPLETION_INVOCATION;++typedef enum {+  KsListEntryTail,+  KsListEntryHead+} KSLIST_ENTRY_LOCATION;++typedef enum {+  KsAcquireOnly,+  KsAcquireAndRemove,+  KsAcquireOnlySingleItem,+  KsAcquireAndRemoveOnlySingleItem+} KSIRP_REMOVAL_OPERATION;++typedef enum {+  KsStackCopyToNewLocation,+  KsStackReuseCurrentLocation,+  KsStackUseNewLocation+} KSSTACK_USE;++typedef enum {+  KSTARGET_STATE_DISABLED,+  KSTARGET_STATE_ENABLED+} KSTARGET_STATE;++typedef NTSTATUS (*PFNKSIRPLISTCALLBACK)(PIRP Irp, PVOID Context);+typedef VOID (*PFNREFERENCEDEVICEOBJECT)(PVOID Context);+typedef VOID (*PFNDEREFERENCEDEVICEOBJECT)(PVOID Context);+typedef NTSTATUS (*PFNQUERYREFERENCESTRING)(PVOID Context, PWCHAR *String);++#define BUS_INTERFACE_REFERENCE_VERSION			0x100++typedef struct {+  INTERFACE Interface;++  PFNREFERENCEDEVICEOBJECT ReferenceDeviceObject;+  PFNDEREFERENCEDEVICEOBJECT DereferenceDeviceObject;+  PFNQUERYREFERENCESTRING QueryReferenceString;+} BUS_INTERFACE_REFERENCE, *PBUS_INTERFACE_REFERENCE;++#define STATIC_REFERENCE_BUS_INTERFACE		STATIC_KSMEDIUMSETID_Standard+#define REFERENCE_BUS_INTERFACE			KSMEDIUMSETID_Standard++#endif /* _NTDDK_ */++#ifndef PACK_PRAGMAS_NOT_SUPPORTED+#include <pshpack1.h>+#endif++typedef struct {+  GUID PropertySet;+  ULONG Count;+} KSPROPERTY_SERIALHDR,*PKSPROPERTY_SERIALHDR;++#ifndef PACK_PRAGMAS_NOT_SUPPORTED+#include <poppack.h>+#endif++typedef struct {+  KSIDENTIFIER PropTypeSet;+  ULONG Id;+  ULONG PropertyLength;+} KSPROPERTY_SERIAL,*PKSPROPERTY_SERIAL;+++#if defined(_NTDDK_)++#define IOCTL_KS_HANDSHAKE						\+	CTL_CODE(FILE_DEVICE_KS, 0x007, METHOD_NEITHER, FILE_ANY_ACCESS)++typedef struct {+  GUID ProtocolId;+  PVOID Argument1;+  PVOID Argument2;+} KSHANDSHAKE, *PKSHANDSHAKE;++typedef struct _KSGATE		KSGATE, *PKSGATE;++struct _KSGATE {+  LONG Count;+  PKSGATE NextGate;+};++typedef PVOID KSOBJECT_BAG;+++typedef BOOLEAN (*PFNKSGENERATEEVENTCALLBACK)(PVOID Context,+					      PKSEVENT_ENTRY EventEntry);++typedef NTSTATUS (*PFNKSDEVICECREATE)(PKSDEVICE Device);++typedef NTSTATUS (*PFNKSDEVICEPNPSTART)(PKSDEVICE Device,PIRP Irp,+				PCM_RESOURCE_LIST TranslatedResourceList,+				PCM_RESOURCE_LIST UntranslatedResourceList);++typedef NTSTATUS (*PFNKSDEVICE)(PKSDEVICE Device);++typedef NTSTATUS (*PFNKSDEVICEIRP)(PKSDEVICE Device,PIRP Irp);++typedef void (*PFNKSDEVICEIRPVOID)(PKSDEVICE Device,PIRP Irp);++typedef NTSTATUS (*PFNKSDEVICEQUERYCAPABILITIES)(PKSDEVICE Device,PIRP Irp,+					 PDEVICE_CAPABILITIES Capabilities);++typedef NTSTATUS (*PFNKSDEVICEQUERYPOWER)(PKSDEVICE Device,PIRP Irp,+					  DEVICE_POWER_STATE DeviceTo,+					  DEVICE_POWER_STATE DeviceFrom,+					  SYSTEM_POWER_STATE SystemTo,+					  SYSTEM_POWER_STATE SystemFrom,+					  POWER_ACTION Action);++typedef void (*PFNKSDEVICESETPOWER)(PKSDEVICE Device,PIRP Irp,+				    DEVICE_POWER_STATE To,+				    DEVICE_POWER_STATE From);++typedef NTSTATUS (*PFNKSFILTERFACTORYVOID)(PKSFILTERFACTORY FilterFactory);++typedef void (*PFNKSFILTERFACTORYPOWER)(PKSFILTERFACTORY FilterFactory,+					DEVICE_POWER_STATE State);++typedef NTSTATUS (*PFNKSFILTERIRP)(PKSFILTER Filter,PIRP Irp);++typedef NTSTATUS (*PFNKSFILTERPROCESS)(PKSFILTER Filter,+					PKSPROCESSPIN_INDEXENTRY Index);++typedef NTSTATUS (*PFNKSFILTERVOID)(PKSFILTER Filter);++typedef void (*PFNKSFILTERPOWER)(PKSFILTER Filter,DEVICE_POWER_STATE State);++typedef NTSTATUS (*PFNKSPINIRP)(PKSPIN Pin,PIRP Irp);++typedef NTSTATUS (*PFNKSPINSETDEVICESTATE)(PKSPIN Pin,KSSTATE ToState,+					   KSSTATE FromState);++typedef NTSTATUS (*PFNKSPINSETDATAFORMAT)(PKSPIN Pin,PKSDATAFORMAT OldFormat,+					  PKSMULTIPLE_ITEM OldAttributeList,+					  const KSDATARANGE *DataRange,+					  const KSATTRIBUTE_LIST *AttributeRange);++typedef NTSTATUS (*PFNKSPINHANDSHAKE)(PKSPIN Pin,PKSHANDSHAKE In,+				      PKSHANDSHAKE Out);++typedef NTSTATUS (*PFNKSPIN)(PKSPIN Pin);++typedef void (*PFNKSPINVOID)(PKSPIN Pin);++typedef void (*PFNKSPINPOWER)(PKSPIN Pin,DEVICE_POWER_STATE State);++typedef BOOLEAN (*PFNKSPINSETTIMER)(PKSPIN Pin,PKTIMER Timer,+				    LARGE_INTEGER DueTime,PKDPC Dpc);++typedef BOOLEAN (*PFNKSPINCANCELTIMER)(PKSPIN Pin,PKTIMER Timer);++typedef LONGLONG (FASTCALL *PFNKSPINCORRELATEDTIME)(PKSPIN Pin,+						    PLONGLONG SystemTime);++typedef void (*PFNKSPINRESOLUTION)(PKSPIN Pin,PKSRESOLUTION Resolution);++typedef NTSTATUS (*PFNKSPININITIALIZEALLOCATOR)(PKSPIN Pin,+					PKSALLOCATOR_FRAMING AllocatorFraming,+					PVOID *Context);++typedef void (*PFNKSSTREAMPOINTER)(PKSSTREAM_POINTER StreamPointer);+++typedef struct KSAUTOMATION_TABLE_ KSAUTOMATION_TABLE,*PKSAUTOMATION_TABLE;++struct KSAUTOMATION_TABLE_ {+  ULONG PropertySetsCount;+  ULONG PropertyItemSize;+  const KSPROPERTY_SET *PropertySets;+  ULONG MethodSetsCount;+  ULONG MethodItemSize;+  const KSMETHOD_SET *MethodSets;+  ULONG EventSetsCount;+  ULONG EventItemSize;+  const KSEVENT_SET *EventSets;+#ifndef _WIN64+  PVOID Alignment;+#endif+};++#define DEFINE_KSAUTOMATION_TABLE(table)				\+		const KSAUTOMATION_TABLE table =++#define DEFINE_KSAUTOMATION_PROPERTIES(table)				\+		SIZEOF_ARRAY(table),					\+		sizeof(KSPROPERTY_ITEM),				\+		table++#define DEFINE_KSAUTOMATION_METHODS(table)				\+		SIZEOF_ARRAY(table),					\+		sizeof(KSMETHOD_ITEM),					\+		table++#define DEFINE_KSAUTOMATION_EVENTS(table)				\+		SIZEOF_ARRAY(table),					\+		sizeof(KSEVENT_ITEM),					\+		table++#define DEFINE_KSAUTOMATION_PROPERTIES_NULL				\+		0,							\+		sizeof(KSPROPERTY_ITEM),				\+		NULL++#define DEFINE_KSAUTOMATION_METHODS_NULL				\+		0,							\+		sizeof(KSMETHOD_ITEM),					\+		NULL++#define DEFINE_KSAUTOMATION_EVENTS_NULL					\+		0,							\+		sizeof(KSEVENT_ITEM),					\+		NULL++#define MIN_DEV_VER_FOR_QI		(0x100)++struct _KSDEVICE_DISPATCH {+  PFNKSDEVICECREATE Add;+  PFNKSDEVICEPNPSTART Start;+  PFNKSDEVICE PostStart;+  PFNKSDEVICEIRP QueryStop;+  PFNKSDEVICEIRPVOID CancelStop;+  PFNKSDEVICEIRPVOID Stop;+  PFNKSDEVICEIRP QueryRemove;+  PFNKSDEVICEIRPVOID CancelRemove;+  PFNKSDEVICEIRPVOID Remove;+  PFNKSDEVICEQUERYCAPABILITIES QueryCapabilities;+  PFNKSDEVICEIRPVOID SurpriseRemoval;+  PFNKSDEVICEQUERYPOWER QueryPower;+  PFNKSDEVICESETPOWER SetPower;+  PFNKSDEVICEIRP QueryInterface;+};++struct _KSFILTER_DISPATCH {+  PFNKSFILTERIRP Create;+  PFNKSFILTERIRP Close;+  PFNKSFILTERPROCESS Process;+  PFNKSFILTERVOID Reset;+};++struct _KSPIN_DISPATCH {+  PFNKSPINIRP Create;+  PFNKSPINIRP Close;+  PFNKSPIN Process;+  PFNKSPINVOID Reset;+  PFNKSPINSETDATAFORMAT SetDataFormat;+  PFNKSPINSETDEVICESTATE SetDeviceState;+  PFNKSPIN Connect;+  PFNKSPINVOID Disconnect;+  const KSCLOCK_DISPATCH *Clock;+  const KSALLOCATOR_DISPATCH *Allocator;+};++struct _KSCLOCK_DISPATCH {+  PFNKSPINSETTIMER SetTimer;+  PFNKSPINCANCELTIMER CancelTimer;+  PFNKSPINCORRELATEDTIME CorrelatedTime;+  PFNKSPINRESOLUTION Resolution;+};++struct _KSALLOCATOR_DISPATCH {+  PFNKSPININITIALIZEALLOCATOR InitializeAllocator;+  PFNKSDELETEALLOCATOR DeleteAllocator;+  PFNKSDEFAULTALLOCATE Allocate;+  PFNKSDEFAULTFREE Free;+};++#define KSDEVICE_DESCRIPTOR_VERSION	(0x100)++struct _KSDEVICE_DESCRIPTOR {+  const KSDEVICE_DISPATCH *Dispatch;+  ULONG FilterDescriptorsCount;+  const KSFILTER_DESCRIPTOR*const *FilterDescriptors;+  ULONG Version;+};++struct _KSFILTER_DESCRIPTOR {+  const KSFILTER_DISPATCH *Dispatch;+  const KSAUTOMATION_TABLE *AutomationTable;+  ULONG Version;+#define KSFILTER_DESCRIPTOR_VERSION	((ULONG)-1)+  ULONG Flags;+#define KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING		0x00000001+#define KSFILTER_FLAG_CRITICAL_PROCESSING		0x00000002+#define KSFILTER_FLAG_HYPERCRITICAL_PROCESSING		0x00000004+#define KSFILTER_FLAG_RECEIVE_ZERO_LENGTH_SAMPLES	0x00000008+#define KSFILTER_FLAG_DENY_USERMODE_ACCESS		0x80000000+  const GUID *ReferenceGuid;+  ULONG PinDescriptorsCount;+  ULONG PinDescriptorSize;+  const KSPIN_DESCRIPTOR_EX *PinDescriptors;+  ULONG CategoriesCount;+  const GUID *Categories;+  ULONG NodeDescriptorsCount;+  ULONG NodeDescriptorSize;+  const KSNODE_DESCRIPTOR *NodeDescriptors;+  ULONG ConnectionsCount;+  const KSTOPOLOGY_CONNECTION *Connections;+  const KSCOMPONENTID *ComponentId;+};++#define DEFINE_KSFILTER_DESCRIPTOR(descriptor)				\+	const KSFILTER_DESCRIPTOR descriptor =++#define DEFINE_KSFILTER_PIN_DESCRIPTORS(table)				\+	SIZEOF_ARRAY(table),						\+	sizeof(table[0]),						\+	table++#define DEFINE_KSFILTER_CATEGORIES(table)				\+	SIZEOF_ARRAY(table),						\+	table++#define DEFINE_KSFILTER_CATEGORY(category)				\+	1,								\+	&(category)++#define DEFINE_KSFILTER_CATEGORIES_NULL					\+	0,								\+	NULL++#define DEFINE_KSFILTER_NODE_DESCRIPTORS(table)				\+	SIZEOF_ARRAY(table),						\+	sizeof(table[0]),						\+	table++#define DEFINE_KSFILTER_NODE_DESCRIPTORS_NULL				\+	0,								\+	sizeof(KSNODE_DESCRIPTOR),					\+	NULL++#define DEFINE_KSFILTER_CONNECTIONS(table)				\+	SIZEOF_ARRAY(table),						\+	table++#define DEFINE_KSFILTER_DEFAULT_CONNECTIONS				\+	0,								\+	NULL++#define DEFINE_KSFILTER_DESCRIPTOR_TABLE(table)				\+	const KSFILTER_DESCRIPTOR*const table[] =++struct _KSPIN_DESCRIPTOR_EX {+  const KSPIN_DISPATCH *Dispatch;+  const KSAUTOMATION_TABLE *AutomationTable;+  KSPIN_DESCRIPTOR PinDescriptor;+  ULONG Flags;+#define KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING	KSFILTER_FLAG_DISPATCH_LEVEL_PROCESSING+#define KSPIN_FLAG_CRITICAL_PROCESSING		KSFILTER_FLAG_CRITICAL_PROCESSING+#define KSPIN_FLAG_HYPERCRITICAL_PROCESSING	KSFILTER_FLAG_HYPERCRITICAL_PROCESSING+#define KSPIN_FLAG_ASYNCHRONOUS_PROCESSING			0x00000008+#define KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING			0x00000010+#define KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL		0x00000020+#define KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING		0x00000040+#define KSPIN_FLAG_ENFORCE_FIFO					0x00000080+#define KSPIN_FLAG_GENERATE_MAPPINGS				0x00000100+#define KSPIN_FLAG_DISTINCT_TRAILING_EDGE			0x00000200+#define KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY			0x00010000+#define KSPIN_FLAG_SPLITTER					0x00020000+#define KSPIN_FLAG_USE_STANDARD_TRANSPORT			0x00040000+#define KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT		0x00080000+#define KSPIN_FLAG_FIXED_FORMAT					0x00100000+#define KSPIN_FLAG_GENERATE_EOS_EVENTS				0x00200000+#define KSPIN_FLAG_RENDERER			(KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY|KSPIN_FLAG_GENERATE_EOS_EVENTS)+#define KSPIN_FLAG_IMPLEMENT_CLOCK				0x00400000+#define KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING		0x00800000+#define KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE			0x01000000+#define KSPIN_FLAG_DENY_USERMODE_ACCESS				0x80000000+  ULONG InstancesPossible;+  ULONG InstancesNecessary;+  const KSALLOCATOR_FRAMING_EX *AllocatorFraming;+  PFNKSINTERSECTHANDLEREX IntersectHandler;+};++#define DEFINE_KSPIN_DEFAULT_INTERFACES					\+	0,								\+	NULL++#define DEFINE_KSPIN_DEFAULT_MEDIUMS					\+	0,								\+	NULL++struct _KSNODE_DESCRIPTOR {+  const KSAUTOMATION_TABLE *AutomationTable;+  const GUID *Type;+  const GUID *Name;+#ifndef _WIN64+  PVOID Alignment;+#endif+};++#ifndef _WIN64+#define DEFINE_NODE_DESCRIPTOR(automation,type,name)			\+	{ (automation), (type), (name), NULL }+#else+#define DEFINE_NODE_DESCRIPTOR(automation,type,name)			\+	{ (automation), (type), (name) }+#endif++struct _KSDEVICE {+  const KSDEVICE_DESCRIPTOR *Descriptor;+  KSOBJECT_BAG Bag;+  PVOID Context;+  PDEVICE_OBJECT FunctionalDeviceObject;+  PDEVICE_OBJECT PhysicalDeviceObject;+  PDEVICE_OBJECT NextDeviceObject;+  BOOLEAN Started;+  SYSTEM_POWER_STATE SystemPowerState;+  DEVICE_POWER_STATE DevicePowerState;+};++struct _KSFILTERFACTORY {+  const KSFILTER_DESCRIPTOR *FilterDescriptor;+  KSOBJECT_BAG Bag;+  PVOID Context;+};++struct _KSFILTER {+  const KSFILTER_DESCRIPTOR *Descriptor;+  KSOBJECT_BAG Bag;+  PVOID Context;+};++struct _KSPIN {+  const KSPIN_DESCRIPTOR_EX *Descriptor;+  KSOBJECT_BAG Bag;+  PVOID Context;+  ULONG Id;+  KSPIN_COMMUNICATION Communication;+  BOOLEAN ConnectionIsExternal;+  KSPIN_INTERFACE ConnectionInterface;+  KSPIN_MEDIUM ConnectionMedium;+  KSPRIORITY ConnectionPriority;+  PKSDATAFORMAT ConnectionFormat;+  PKSMULTIPLE_ITEM AttributeList;+  ULONG StreamHeaderSize;+  KSPIN_DATAFLOW DataFlow;+  KSSTATE DeviceState;+  KSRESET ResetState;+  KSSTATE ClientState;+};++struct _KSMAPPING {+  PHYSICAL_ADDRESS PhysicalAddress;+  ULONG ByteCount;+  ULONG Alignment;+};++struct _KSSTREAM_POINTER_OFFSET+{+#if defined(_NTDDK_)+  __MINGW_EXTENSION union {+    PUCHAR Data;+    PKSMAPPING Mappings;+  };+#else+  PUCHAR Data;+#endif /* _NTDDK_ */+#ifndef _WIN64+  PVOID Alignment;+#endif+  ULONG Count;+  ULONG Remaining;+};++struct _KSSTREAM_POINTER+{+  PVOID Context;+  PKSPIN Pin;+  PKSSTREAM_HEADER StreamHeader;+  PKSSTREAM_POINTER_OFFSET Offset;+  KSSTREAM_POINTER_OFFSET OffsetIn;+  KSSTREAM_POINTER_OFFSET OffsetOut;+};++struct _KSPROCESSPIN {+  PKSPIN Pin;+  PKSSTREAM_POINTER StreamPointer;+  PKSPROCESSPIN InPlaceCounterpart;+  PKSPROCESSPIN DelegateBranch;+  PKSPROCESSPIN CopySource;+  PVOID Data;+  ULONG BytesAvailable;+  ULONG BytesUsed;+  ULONG Flags;+  BOOLEAN Terminate;+};++struct _KSPROCESSPIN_INDEXENTRY {+  PKSPROCESSPIN *Pins;+  ULONG Count;+};++typedef enum {+  KsObjectTypeDevice,+  KsObjectTypeFilterFactory,+  KsObjectTypeFilter,+  KsObjectTypePin+} KSOBJECTTYPE;+++typedef void (*PFNKSFREE)(PVOID Data);++typedef void (*PFNKSPINFRAMERETURN)(PKSPIN Pin,PVOID Data,ULONG Size,PMDL Mdl,+				    PVOID Context,NTSTATUS Status);++typedef void (*PFNKSPINIRPCOMPLETION)(PKSPIN Pin,PIRP Irp);+++#if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)+#ifndef _IKsControl_+#define _IKsControl_++typedef struct IKsControl *PIKSCONTROL;++#ifndef DEFINE_ABSTRACT_UNKNOWN+#define DEFINE_ABSTRACT_UNKNOWN()					\+	STDMETHOD_(NTSTATUS,QueryInterface) (THIS_ 			\+						REFIID InterfaceId,	\+						PVOID *Interface	\+					    ) PURE;			\+	STDMETHOD_(ULONG,AddRef)(THIS) PURE;				\+	STDMETHOD_(ULONG,Release)(THIS) PURE;+#endif++#undef INTERFACE+#define INTERFACE IKsControl+DECLARE_INTERFACE_(IKsControl,IUnknown)+{+  DEFINE_ABSTRACT_UNKNOWN()+  STDMETHOD_(NTSTATUS,KsProperty)(THIS_+					PKSPROPERTY Property,+					ULONG PropertyLength,+					PVOID PropertyData,+					ULONG DataLength,+					ULONG *BytesReturned+				 ) PURE;+  STDMETHOD_(NTSTATUS,KsMethod)	(THIS_+					PKSMETHOD Method,+					ULONG MethodLength,+					PVOID MethodData,+					ULONG DataLength,+					ULONG *BytesReturned+				 ) PURE;+  STDMETHOD_(NTSTATUS,KsEvent)	(THIS_+					PKSEVENT Event,+					ULONG EventLength,+					PVOID EventData,+					ULONG DataLength,+					ULONG *BytesReturned+				) PURE;+};+typedef struct IKsReferenceClock *PIKSREFERENCECLOCK;++#undef INTERFACE+#define INTERFACE IKsReferenceClock+DECLARE_INTERFACE_(IKsReferenceClock,IUnknown)+{+  DEFINE_ABSTRACT_UNKNOWN()+  STDMETHOD_(LONGLONG,GetTime)		(THIS) PURE;+  STDMETHOD_(LONGLONG,GetPhysicalTime)	(THIS) PURE;+  STDMETHOD_(LONGLONG,GetCorrelatedTime)(THIS_+  						PLONGLONG SystemTime+  					) PURE;+  STDMETHOD_(LONGLONG,GetCorrelatedPhysicalTime)(THIS_+						PLONGLONG SystemTime+					) PURE;+  STDMETHOD_(NTSTATUS,GetResolution)	(THIS_+						PKSRESOLUTION Resolution+					) PURE;+  STDMETHOD_(NTSTATUS,GetState)		(THIS_+						PKSSTATE State+					) PURE;+};+#undef INTERFACE++#define INTERFACE IKsDeviceFunctions+DECLARE_INTERFACE_(IKsDeviceFunctions,IUnknown)+{+  DEFINE_ABSTRACT_UNKNOWN()+  STDMETHOD_(NTSTATUS,RegisterAdapterObjectEx)	(THIS_+						  PADAPTER_OBJECT AdapterObject,+						  PDEVICE_DESCRIPTION DeviceDescription,+						  ULONG NumberOfMapRegisters,+						  ULONG MaxMappingsByteCount,+						  ULONG MappingTableStride+						) PURE;+};++#undef INTERFACE+#define STATIC_IID_IKsControl						\+	0x28F54685L,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUID(IID_IKsControl,+	0x28F54685L,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96);+#define STATIC_IID_IKsFastClock						\+	0xc9902485,0xc180,0x11d2,0x84,0x73,0xd4,0x23,0x94,0x45,0x9e,0x5e+DEFINE_GUID(IID_IKsFastClock,+	0xc9902485,0xc180,0x11d2,0x84,0x73,0xd4,0x23,0x94,0x45,0x9e,0x5e);+#define STATIC_IID_IKsDeviceFunctions					\+	0xe234f2e2,0xbd69,0x4f8c,0xb3,0xf2,0x7c,0xd7,0x9e,0xd4,0x66,0xbd+DEFINE_GUID(IID_IKsDeviceFunctions,+	0xe234f2e2,0xbd69,0x4f8c,0xb3,0xf2,0x7c,0xd7,0x9e,0xd4,0x66,0xbd);+#endif /* _IKsControl_ */+#endif /* defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) */++#endif /* _NTDDK_ */+++#ifdef __cplusplus+extern "C" {+#endif++#ifdef _KSDDK_+#define KSDDKAPI+#else+#define KSDDKAPI DECLSPEC_IMPORT+#endif++#if defined(_NTDDK_)++KSDDKAPI NTSTATUS NTAPI KsEnableEvent+			(PIRP Irp, ULONG EventSetsCount, const KSEVENT_SET *EventSet,+			 PLIST_ENTRY EventsList, KSEVENTS_LOCKTYPE EventsFlags,+			 PVOID EventsLock);++KSDDKAPI NTSTATUS NTAPI KsEnableEventWithAllocator+			(PIRP Irp, ULONG EventSetsCount, const KSEVENT_SET *EventSet,+			 PLIST_ENTRY EventsList, KSEVENTS_LOCKTYPE EventsFlags,+			 PVOID EventsLock, PFNKSALLOCATOR Allocator, ULONG EventItemSize);++KSDDKAPI NTSTATUS NTAPI KsDisableEvent+			(PIRP Irp, PLIST_ENTRY EventsList, KSEVENTS_LOCKTYPE EventsFlags,+			 PVOID EventsLock);++KSDDKAPI VOID NTAPI KsDiscardEvent (PKSEVENT_ENTRY EventEntry);++KSDDKAPI VOID NTAPI KsFreeEventList+			(PFILE_OBJECT FileObject, PLIST_ENTRY EventsList,+			 KSEVENTS_LOCKTYPE EventsFlags, PVOID EventsLock);++KSDDKAPI NTSTATUS NTAPI KsGenerateEvent (PKSEVENT_ENTRY EventEntry);++KSDDKAPI NTSTATUS NTAPI KsGenerateDataEvent+			(PKSEVENT_ENTRY EventEntry, ULONG DataSize, PVOID Data);++KSDDKAPI VOID NTAPI KsGenerateEventList+			(GUID *Set, ULONG EventId, PLIST_ENTRY EventsList,+			 KSEVENTS_LOCKTYPE EventsFlags, PVOID EventsLock);++KSDDKAPI NTSTATUS NTAPI KsPropertyHandler+			(PIRP Irp, ULONG PropertySetsCount,+			 const KSPROPERTY_SET *PropertySet);++KSDDKAPI NTSTATUS NTAPI KsPropertyHandlerWithAllocator+			(PIRP Irp, ULONG PropertySetsCount,+			 const KSPROPERTY_SET *PropertySet, PFNKSALLOCATOR Allocator,+			 ULONG PropertyItemSize);++KSDDKAPI BOOLEAN NTAPI KsFastPropertyHandler+			(PFILE_OBJECT FileObject, PKSPROPERTY Property,+			 ULONG PropertyLength, PVOID Data, ULONG DataLength,+			 PIO_STATUS_BLOCK IoStatus, ULONG PropertySetsCount,+			 const KSPROPERTY_SET *PropertySet);++KSDDKAPI NTSTATUS NTAPI KsMethodHandler+			(PIRP Irp, ULONG MethodSetsCount,+			 const KSMETHOD_SET *MethodSet);++KSDDKAPI NTSTATUS NTAPI KsMethodHandlerWithAllocator+			(PIRP Irp, ULONG MethodSetsCount,+			 const KSMETHOD_SET *MethodSet, PFNKSALLOCATOR Allocator,+			 ULONG MethodItemSize);++KSDDKAPI BOOLEAN NTAPI KsFastMethodHandler+			(PFILE_OBJECT FileObject, PKSMETHOD Method, ULONG MethodLength,+			 PVOID Data, ULONG DataLength, PIO_STATUS_BLOCK IoStatus,+			 ULONG MethodSetsCount, const KSMETHOD_SET *MethodSet);++KSDDKAPI NTSTATUS NTAPI KsCreateDefaultAllocator (PIRP Irp);++KSDDKAPI NTSTATUS NTAPI KsCreateDefaultAllocatorEx+			(PIRP Irp, PVOID InitializeContext,+			 PFNKSDEFAULTALLOCATE DefaultAllocate,+			 PFNKSDEFAULTFREE DefaultFree,+			 PFNKSINITIALIZEALLOCATOR InitializeAllocator,+			 PFNKSDELETEALLOCATOR DeleteAllocator);++KSDDKAPI NTSTATUS NTAPI KsCreateAllocator+			(HANDLE ConnectionHandle, PKSALLOCATOR_FRAMING AllocatorFraming,+			 PHANDLE AllocatorHandle);++KSDDKAPI NTSTATUS NTAPI KsValidateAllocatorCreateRequest+			(PIRP Irp, PKSALLOCATOR_FRAMING *AllocatorFraming);++KSDDKAPI NTSTATUS NTAPI KsValidateAllocatorFramingEx+			(PKSALLOCATOR_FRAMING_EX Framing, ULONG BufferSize,+			 const KSALLOCATOR_FRAMING_EX *PinFraming);++KSDDKAPI NTSTATUS NTAPI KsAllocateDefaultClock (PKSDEFAULTCLOCK *DefaultClock);++KSDDKAPI NTSTATUS NTAPI KsAllocateDefaultClockEx+			(PKSDEFAULTCLOCK *DefaultClock, PVOID Context,+			 PFNKSSETTIMER SetTimer, PFNKSCANCELTIMER CancelTimer,+			 PFNKSCORRELATEDTIME CorrelatedTime,+			 const KSRESOLUTION *Resolution, ULONG Flags);++KSDDKAPI VOID NTAPI KsFreeDefaultClock (PKSDEFAULTCLOCK DefaultClock);+KSDDKAPI NTSTATUS NTAPI KsCreateDefaultClock (PIRP Irp, PKSDEFAULTCLOCK DefaultClock);++KSDDKAPI NTSTATUS NTAPI KsCreateClock+			(HANDLE ConnectionHandle, PKSCLOCK_CREATE ClockCreate,+			 PHANDLE ClockHandle);++KSDDKAPI NTSTATUS NTAPI KsValidateClockCreateRequest+			(PIRP Irp, PKSCLOCK_CREATE *ClockCreate);++KSDDKAPI KSSTATE NTAPI KsGetDefaultClockState (PKSDEFAULTCLOCK DefaultClock);+KSDDKAPI VOID NTAPI KsSetDefaultClockState(PKSDEFAULTCLOCK DefaultClock, KSSTATE State);+KSDDKAPI LONGLONG NTAPI KsGetDefaultClockTime (PKSDEFAULTCLOCK DefaultClock);+KSDDKAPI VOID NTAPI KsSetDefaultClockTime(PKSDEFAULTCLOCK DefaultClock, LONGLONG Time);++KSDDKAPI NTSTATUS NTAPI KsCreatePin+			(HANDLE FilterHandle, PKSPIN_CONNECT Connect,+			 ACCESS_MASK DesiredAccess, PHANDLE ConnectionHandle);++KSDDKAPI NTSTATUS NTAPI KsValidateConnectRequest+			(PIRP Irp, ULONG DescriptorsCount,+			 const KSPIN_DESCRIPTOR *Descriptor, PKSPIN_CONNECT *Connect);++KSDDKAPI NTSTATUS NTAPI KsPinPropertyHandler+			(PIRP Irp, PKSPROPERTY Property, PVOID Data,+			 ULONG DescriptorsCount, const KSPIN_DESCRIPTOR *Descriptor);++KSDDKAPI NTSTATUS NTAPI KsPinDataIntersection+			(PIRP Irp, PKSP_PIN Pin, PVOID Data, ULONG DescriptorsCount,+			 const KSPIN_DESCRIPTOR *Descriptor,+			 PFNKSINTERSECTHANDLER IntersectHandler);++KSDDKAPI NTSTATUS NTAPI KsPinDataIntersectionEx+			(PIRP Irp, PKSP_PIN Pin, PVOID Data, ULONG DescriptorsCount,+			 const KSPIN_DESCRIPTOR *Descriptor, ULONG DescriptorSize,+			 PFNKSINTERSECTHANDLEREX IntersectHandler, PVOID HandlerContext);++KSDDKAPI NTSTATUS NTAPI KsHandleSizedListQuery+			(PIRP Irp, ULONG DataItemsCount, ULONG DataItemSize,+			 const VOID *DataItems);++#ifndef MAKEINTRESOURCE+#define MAKEINTRESOURCE(r)		((ULONG_PTR) (USHORT) r)+#endif+#ifndef RT_STRING+#define RT_STRING			MAKEINTRESOURCE(6)+#define RT_RCDATA			MAKEINTRESOURCE(10)+#endif++KSDDKAPI NTSTATUS NTAPI KsLoadResource+			(PVOID ImageBase, POOL_TYPE PoolType, ULONG_PTR ResourceName,+			 ULONG ResourceType, PVOID *Resource, PULONG ResourceSize);++KSDDKAPI NTSTATUS NTAPI KsGetImageNameAndResourceId+			(HANDLE RegKey, PUNICODE_STRING ImageName, PULONG_PTR ResourceId,+			 PULONG ValueType);++KSDDKAPI NTSTATUS NTAPI KsMapModuleName+			(PDEVICE_OBJECT PhysicalDeviceObject, PUNICODE_STRING ModuleName,+			 PUNICODE_STRING ImageName, PULONG_PTR ResourceId,+			 PULONG ValueType);++KSDDKAPI NTSTATUS NTAPI KsReferenceBusObject (KSDEVICE_HEADER Header);+KSDDKAPI VOID NTAPI KsDereferenceBusObject (KSDEVICE_HEADER Header);+KSDDKAPI NTSTATUS NTAPI KsDispatchQuerySecurity (PDEVICE_OBJECT DeviceObject, PIRP Irp);+KSDDKAPI NTSTATUS NTAPI KsDispatchSetSecurity (PDEVICE_OBJECT DeviceObject, PIRP Irp);+KSDDKAPI NTSTATUS NTAPI KsDispatchSpecificProperty (PIRP Irp, PFNKSHANDLER Handler);+KSDDKAPI NTSTATUS NTAPI KsDispatchSpecificMethod (PIRP Irp, PFNKSHANDLER Handler);++KSDDKAPI NTSTATUS NTAPI KsReadFile+			(PFILE_OBJECT FileObject, PKEVENT Event, PVOID PortContext,+			 PIO_STATUS_BLOCK IoStatusBlock, PVOID Buffer, ULONG Length,+			 ULONG Key, KPROCESSOR_MODE RequestorMode);++KSDDKAPI NTSTATUS NTAPI KsWriteFile+			(PFILE_OBJECT FileObject, PKEVENT Event, PVOID PortContext,+			 PIO_STATUS_BLOCK IoStatusBlock, PVOID Buffer, ULONG Length,+			 ULONG Key, KPROCESSOR_MODE RequestorMode);++KSDDKAPI NTSTATUS NTAPI KsQueryInformationFile+			(PFILE_OBJECT FileObject, PVOID FileInformation, ULONG Length,+			 FILE_INFORMATION_CLASS FileInformationClass);++KSDDKAPI NTSTATUS NTAPI KsSetInformationFile+			(PFILE_OBJECT FileObject, PVOID FileInformation, ULONG Length,+			 FILE_INFORMATION_CLASS FileInformationClass);++KSDDKAPI NTSTATUS NTAPI KsStreamIo+			(PFILE_OBJECT FileObject, PKEVENT Event, PVOID PortContext,+			 PIO_COMPLETION_ROUTINE CompletionRoutine, PVOID CompletionContext,+			 KSCOMPLETION_INVOCATION CompletionInvocationFlags,+			 PIO_STATUS_BLOCK IoStatusBlock, PVOID StreamHeaders, ULONG Length,+			 ULONG Flags, KPROCESSOR_MODE RequestorMode);++KSDDKAPI NTSTATUS NTAPI KsProbeStreamIrp(PIRP Irp, ULONG ProbeFlags, ULONG HeaderSize);+KSDDKAPI NTSTATUS NTAPI KsAllocateExtraData(PIRP Irp, ULONG ExtraSize, PVOID *ExtraBuffer);+KSDDKAPI VOID NTAPI KsNullDriverUnload (PDRIVER_OBJECT DriverObject);++KSDDKAPI NTSTATUS NTAPI KsSetMajorFunctionHandler+			(PDRIVER_OBJECT DriverObject, ULONG MajorFunction);++KSDDKAPI NTSTATUS NTAPI KsDispatchInvalidDeviceRequest+			(PDEVICE_OBJECT DeviceObject, PIRP Irp);++KSDDKAPI NTSTATUS NTAPI KsDefaultDeviceIoCompletion+			(PDEVICE_OBJECT DeviceObject, PIRP Irp);++KSDDKAPI NTSTATUS NTAPI KsDispatchIrp(PDEVICE_OBJECT DeviceObject, PIRP Irp);++KSDDKAPI BOOLEAN NTAPI KsDispatchFastIoDeviceControlFailure+			(PFILE_OBJECT FileObject, BOOLEAN Wait, PVOID InputBuffer,+			 ULONG InputBufferLength, PVOID OutputBuffer,+			 ULONG OutputBufferLength, ULONG IoControlCode,+			 PIO_STATUS_BLOCK IoStatus, PDEVICE_OBJECT DeviceObject);++KSDDKAPI BOOLEAN NTAPI KsDispatchFastReadFailure+			(PFILE_OBJECT FileObject, PLARGE_INTEGER FileOffset,+			 ULONG Length, BOOLEAN Wait, ULONG LockKey, PVOID Buffer,+			 PIO_STATUS_BLOCK IoStatus, PDEVICE_OBJECT DeviceObject);++#define KsDispatchFastWriteFailure		KsDispatchFastReadFailure++KSDDKAPI VOID NTAPI KsCancelRoutine(PDEVICE_OBJECT DeviceObject, PIRP Irp);+KSDDKAPI VOID NTAPI KsCancelIo(PLIST_ENTRY QueueHead, PKSPIN_LOCK SpinLock);+KSDDKAPI VOID NTAPI KsReleaseIrpOnCancelableQueue(PIRP Irp, PDRIVER_CANCEL DriverCancel);++KSDDKAPI PIRP NTAPI KsRemoveIrpFromCancelableQueue+			(PLIST_ENTRY QueueHead, PKSPIN_LOCK SpinLock,+			 KSLIST_ENTRY_LOCATION ListLocation,+			 KSIRP_REMOVAL_OPERATION RemovalOperation);++KSDDKAPI NTSTATUS NTAPI KsMoveIrpsOnCancelableQueue+			(PLIST_ENTRY SourceList, PKSPIN_LOCK SourceLock,+			 PLIST_ENTRY DestinationList, PKSPIN_LOCK DestinationLock,+			 KSLIST_ENTRY_LOCATION ListLocation,+			 PFNKSIRPLISTCALLBACK ListCallback, PVOID Context);++KSDDKAPI VOID NTAPI KsRemoveSpecificIrpFromCancelableQueue (PIRP Irp);++KSDDKAPI VOID NTAPI KsAddIrpToCancelableQueue+			(PLIST_ENTRY QueueHead, PKSPIN_LOCK SpinLock, PIRP Irp,+			 KSLIST_ENTRY_LOCATION ListLocation, PDRIVER_CANCEL DriverCancel);++KSDDKAPI NTSTATUS NTAPI KsAcquireResetValue(PIRP Irp, KSRESET *ResetValue);++KSDDKAPI NTSTATUS NTAPI KsTopologyPropertyHandler+			(PIRP Irp, PKSPROPERTY Property, PVOID Data,+			 const KSTOPOLOGY *Topology);++KSDDKAPI VOID NTAPI KsAcquireDeviceSecurityLock(KSDEVICE_HEADER Header, BOOLEAN Exclusive);+KSDDKAPI VOID NTAPI KsReleaseDeviceSecurityLock (KSDEVICE_HEADER Header);+KSDDKAPI NTSTATUS NTAPI KsDefaultDispatchPnp(PDEVICE_OBJECT DeviceObject, PIRP Irp);+KSDDKAPI NTSTATUS NTAPI KsDefaultDispatchPower(PDEVICE_OBJECT DeviceObject, PIRP Irp);+KSDDKAPI NTSTATUS NTAPI KsDefaultForwardIrp(PDEVICE_OBJECT DeviceObject, PIRP Irp);++KSDDKAPI VOID NTAPI KsSetDevicePnpAndBaseObject+			(KSDEVICE_HEADER Header, PDEVICE_OBJECT PnpDeviceObject,+			 PDEVICE_OBJECT BaseObject);++KSDDKAPI PDEVICE_OBJECT NTAPI KsQueryDevicePnpObject (KSDEVICE_HEADER Header);+KSDDKAPI ACCESS_MASK NTAPI KsQueryObjectAccessMask (KSOBJECT_HEADER Header);++KSDDKAPI VOID NTAPI KsRecalculateStackDepth+			(KSDEVICE_HEADER Header, BOOLEAN ReuseStackLocation);++KSDDKAPI VOID NTAPI KsSetTargetState+			(KSOBJECT_HEADER Header, KSTARGET_STATE TargetState);++KSDDKAPI VOID NTAPI KsSetTargetDeviceObject+			(KSOBJECT_HEADER Header, PDEVICE_OBJECT TargetDevice);++KSDDKAPI VOID NTAPI KsSetPowerDispatch+			(KSOBJECT_HEADER Header, PFNKSCONTEXT_DISPATCH PowerDispatch,+			 PVOID PowerContext);++KSDDKAPI PKSOBJECT_CREATE_ITEM NTAPI KsQueryObjectCreateItem (KSOBJECT_HEADER Header);++KSDDKAPI NTSTATUS NTAPI KsAllocateDeviceHeader+			(KSDEVICE_HEADER *Header, ULONG ItemsCount,+			 PKSOBJECT_CREATE_ITEM ItemsList);++KSDDKAPI VOID NTAPI KsFreeDeviceHeader (KSDEVICE_HEADER Header);++KSDDKAPI NTSTATUS NTAPI KsAllocateObjectHeader+			(KSOBJECT_HEADER *Header, ULONG ItemsCount,+			 PKSOBJECT_CREATE_ITEM ItemsList, PIRP Irp,+			 const KSDISPATCH_TABLE *Table);++KSDDKAPI VOID NTAPI KsFreeObjectHeader (KSOBJECT_HEADER Header);++KSDDKAPI NTSTATUS NTAPI KsAddObjectCreateItemToDeviceHeader+			(KSDEVICE_HEADER Header, PDRIVER_DISPATCH Create, PVOID Context,+			 PWSTR ObjectClass, PSECURITY_DESCRIPTOR SecurityDescriptor);++KSDDKAPI NTSTATUS NTAPI KsAddObjectCreateItemToObjectHeader+			(KSOBJECT_HEADER Header, PDRIVER_DISPATCH Create, PVOID Context,+			 PWSTR ObjectClass, PSECURITY_DESCRIPTOR SecurityDescriptor);++KSDDKAPI NTSTATUS NTAPI KsAllocateObjectCreateItem+			(KSDEVICE_HEADER Header, PKSOBJECT_CREATE_ITEM CreateItem,+			 BOOLEAN AllocateEntry, PFNKSITEMFREECALLBACK ItemFreeCallback);++KSDDKAPI NTSTATUS NTAPI KsFreeObjectCreateItem+			(KSDEVICE_HEADER Header, PUNICODE_STRING CreateItem);++KSDDKAPI NTSTATUS NTAPI KsFreeObjectCreateItemsByContext+			(KSDEVICE_HEADER Header, PVOID Context);++KSDDKAPI NTSTATUS NTAPI KsCreateDefaultSecurity+			(PSECURITY_DESCRIPTOR ParentSecurity,+			 PSECURITY_DESCRIPTOR *DefaultSecurity);++KSDDKAPI NTSTATUS NTAPI KsForwardIrp+			(PIRP Irp, PFILE_OBJECT FileObject, BOOLEAN ReuseStackLocation);++KSDDKAPI NTSTATUS NTAPI KsForwardAndCatchIrp+			(PDEVICE_OBJECT DeviceObject, PIRP Irp, PFILE_OBJECT FileObject,+			 KSSTACK_USE StackUse);++KSDDKAPI NTSTATUS NTAPI KsSynchronousIoControlDevice+			(PFILE_OBJECT FileObject, KPROCESSOR_MODE RequestorMode,+			 ULONG IoControl, PVOID InBuffer, ULONG InSize, PVOID OutBuffer,+			 ULONG OutSize, PULONG BytesReturned);++KSDDKAPI NTSTATUS NTAPI KsUnserializeObjectPropertiesFromRegistry+			(PFILE_OBJECT FileObject, HANDLE ParentKey,+			 PUNICODE_STRING RegistryPath);++KSDDKAPI NTSTATUS NTAPI KsCacheMedium+			(PUNICODE_STRING SymbolicLink, PKSPIN_MEDIUM Medium,+			 ULONG PinDirection);++KSDDKAPI NTSTATUS NTAPI KsRegisterWorker+			(WORK_QUEUE_TYPE WorkQueueType, PKSWORKER *Worker);++KSDDKAPI NTSTATUS NTAPI KsRegisterCountedWorker+			(WORK_QUEUE_TYPE WorkQueueType, PWORK_QUEUE_ITEM CountedWorkItem,+			 PKSWORKER *Worker);++KSDDKAPI VOID NTAPI KsUnregisterWorker (PKSWORKER Worker);+KSDDKAPI NTSTATUS NTAPI KsQueueWorkItem(PKSWORKER Worker, PWORK_QUEUE_ITEM WorkItem);+KSDDKAPI ULONG NTAPI KsIncrementCountedWorker (PKSWORKER Worker);+KSDDKAPI ULONG NTAPI KsDecrementCountedWorker (PKSWORKER Worker);++KSDDKAPI NTSTATUS NTAPI KsCreateTopologyNode+			(HANDLE ParentHandle, PKSNODE_CREATE NodeCreate,+			 ACCESS_MASK DesiredAccess, PHANDLE NodeHandle);++KSDDKAPI NTSTATUS NTAPI KsValidateTopologyNodeCreateRequest+			(PIRP Irp, PKSTOPOLOGY Topology, PKSNODE_CREATE *NodeCreate);++KSDDKAPI NTSTATUS NTAPI KsMergeAutomationTables+			(PKSAUTOMATION_TABLE *AutomationTableAB,+			 PKSAUTOMATION_TABLE AutomationTableA,+			 PKSAUTOMATION_TABLE AutomationTableB,+			 KSOBJECT_BAG Bag);++KSDDKAPI NTSTATUS NTAPI KsInitializeDriver+			(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPathName,+			 const KSDEVICE_DESCRIPTOR *Descriptor);++KSDDKAPI NTSTATUS NTAPI KsAddDevice+			(PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT PhysicalDeviceObject);++KSDDKAPI NTSTATUS NTAPI KsCreateDevice+			(PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT PhysicalDeviceObject,+			 const KSDEVICE_DESCRIPTOR *Descriptor, ULONG ExtensionSize,+			 PKSDEVICE *Device);++KSDDKAPI NTSTATUS NTAPI KsInitializeDevice+			(PDEVICE_OBJECT FunctionalDeviceObject,+			 PDEVICE_OBJECT PhysicalDeviceObject,+			 PDEVICE_OBJECT NextDeviceObject,+			 const KSDEVICE_DESCRIPTOR *Descriptor);++KSDDKAPI void NTAPI KsTerminateDevice (PDEVICE_OBJECT DeviceObject);+KSDDKAPI PKSDEVICE NTAPI KsGetDeviceForDeviceObject (PDEVICE_OBJECT FunctionalDeviceObject);+KSDDKAPI void NTAPI KsAcquireDevice (PKSDEVICE Device);+KSDDKAPI void NTAPI KsReleaseDevice (PKSDEVICE Device);++KSDDKAPI void NTAPI KsDeviceRegisterAdapterObject+			(PKSDEVICE Device, PADAPTER_OBJECT AdapterObject,+			 ULONG MaxMappingsByteCount, ULONG MappingTableStride);++KSDDKAPI ULONG NTAPI KsDeviceGetBusData+			(PKSDEVICE Device, ULONG DataType, PVOID Buffer, ULONG Offset,+			 ULONG Length);++KSDDKAPI ULONG NTAPI KsDeviceSetBusData+			(PKSDEVICE Device, ULONG DataType, PVOID Buffer, ULONG Offset,+			 ULONG Length);++KSDDKAPI NTSTATUS NTAPI KsCreateFilterFactory+			(PDEVICE_OBJECT DeviceObject, const KSFILTER_DESCRIPTOR *Descriptor,+			 PWSTR RefString, PSECURITY_DESCRIPTOR SecurityDescriptor,+			 ULONG CreateItemFlags, PFNKSFILTERFACTORYPOWER SleepCallback,+			 PFNKSFILTERFACTORYPOWER WakeCallback,+			 PKSFILTERFACTORY *FilterFactory);++#define KsDeleteFilterFactory(FilterFactory)												\+	KsFreeObjectCreateItemsByContext( *(KSDEVICE_HEADER *)(										\+						KsFilterFactoryGetParentDevice(FilterFactory)->FunctionalDeviceObject->DeviceExtension),\+					   FilterFactory)++KSDDKAPI NTSTATUS NTAPI KsFilterFactoryUpdateCacheData+			(PKSFILTERFACTORY FilterFactory,+			 const KSFILTER_DESCRIPTOR *FilterDescriptor);++KSDDKAPI NTSTATUS NTAPI KsFilterFactoryAddCreateItem+			(PKSFILTERFACTORY FilterFactory, PWSTR RefString,+			 PSECURITY_DESCRIPTOR SecurityDescriptor, ULONG CreateItemFlags);++KSDDKAPI NTSTATUS NTAPI KsFilterFactorySetDeviceClassesState+			(PKSFILTERFACTORY FilterFactory, BOOLEAN NewState);++KSDDKAPI PUNICODE_STRING NTAPI KsFilterFactoryGetSymbolicLink+			(PKSFILTERFACTORY FilterFactory);++KSDDKAPI void NTAPI KsAddEvent(PVOID Object, PKSEVENT_ENTRY EventEntry);++void __forceinline KsFilterAddEvent (PKSFILTER Filter, PKSEVENT_ENTRY EventEntry)+{+	KsAddEvent(Filter, EventEntry);+}++void __forceinline KsPinAddEvent (PKSPIN Pin, PKSEVENT_ENTRY EventEntry)+{+	KsAddEvent(Pin, EventEntry);+}++KSDDKAPI NTSTATUS NTAPI KsDefaultAddEventHandler+			(PIRP Irp, PKSEVENTDATA EventData, PKSEVENT_ENTRY EventEntry);++KSDDKAPI void NTAPI KsGenerateEvents+			(PVOID Object, const GUID *EventSet, ULONG EventId,+			 ULONG DataSize, PVOID Data, PFNKSGENERATEEVENTCALLBACK CallBack,+			 PVOID CallBackContext);++void __forceinline KsFilterGenerateEvents+			(PKSFILTER Filter, const GUID *EventSet, ULONG EventId,+			 ULONG DataSize, PVOID Data, PFNKSGENERATEEVENTCALLBACK CallBack,+			 PVOID CallBackContext)+{+	KsGenerateEvents(Filter, EventSet, EventId, DataSize, Data, CallBack,+			 CallBackContext);+}++void __forceinline KsPinGenerateEvents+			(PKSPIN Pin, const GUID *EventSet, ULONG EventId,+			 ULONG DataSize, PVOID Data, PFNKSGENERATEEVENTCALLBACK CallBack,+			 PVOID CallBackContext)+{+	KsGenerateEvents(Pin, EventSet, EventId, DataSize, Data, CallBack,+			 CallBackContext);+}++typedef enum {+  KSSTREAM_POINTER_STATE_UNLOCKED = 0,+  KSSTREAM_POINTER_STATE_LOCKED+} KSSTREAM_POINTER_STATE;++KSDDKAPI NTSTATUS NTAPI KsPinGetAvailableByteCount+			(PKSPIN Pin, PLONG InputDataBytes, PLONG OutputBufferBytes);++KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetLeadingEdgeStreamPointer+			(PKSPIN Pin, KSSTREAM_POINTER_STATE State);++KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetTrailingEdgeStreamPointer+			(PKSPIN Pin, KSSTREAM_POINTER_STATE State);++KSDDKAPI NTSTATUS NTAPI KsStreamPointerSetStatusCode+			(PKSSTREAM_POINTER StreamPointer, NTSTATUS Status);++KSDDKAPI NTSTATUS NTAPI KsStreamPointerLock (PKSSTREAM_POINTER StreamPointer);+KSDDKAPI void NTAPI KsStreamPointerUnlock(PKSSTREAM_POINTER StreamPointer, BOOLEAN Eject);++KSDDKAPI void NTAPI KsStreamPointerAdvanceOffsetsAndUnlock+			(PKSSTREAM_POINTER StreamPointer, ULONG InUsed, ULONG OutUsed,+			 BOOLEAN Eject);++KSDDKAPI void NTAPI KsStreamPointerDelete (PKSSTREAM_POINTER StreamPointer);++KSDDKAPI NTSTATUS NTAPI KsStreamPointerClone+			(PKSSTREAM_POINTER StreamPointer, PFNKSSTREAMPOINTER CancelCallback,+			 ULONG ContextSize, PKSSTREAM_POINTER *CloneStreamPointer);++KSDDKAPI NTSTATUS NTAPI KsStreamPointerAdvanceOffsets+			(PKSSTREAM_POINTER StreamPointer, ULONG InUsed, ULONG OutUsed,+			 BOOLEAN Eject);++KSDDKAPI NTSTATUS NTAPI KsStreamPointerAdvance (PKSSTREAM_POINTER StreamPointer);+KSDDKAPI PMDL NTAPI KsStreamPointerGetMdl (PKSSTREAM_POINTER StreamPointer);++KSDDKAPI PIRP NTAPI KsStreamPointerGetIrp+			(PKSSTREAM_POINTER StreamPointer, PBOOLEAN FirstFrameInIrp,+			 PBOOLEAN LastFrameInIrp);++KSDDKAPI void NTAPI KsStreamPointerScheduleTimeout+			(PKSSTREAM_POINTER StreamPointer, PFNKSSTREAMPOINTER Callback,+			 ULONGLONG Interval);++KSDDKAPI void NTAPI KsStreamPointerCancelTimeout (PKSSTREAM_POINTER StreamPointer);+KSDDKAPI PKSSTREAM_POINTER NTAPI KsPinGetFirstCloneStreamPointer (PKSPIN Pin);++KSDDKAPI PKSSTREAM_POINTER NTAPI KsStreamPointerGetNextClone+			(PKSSTREAM_POINTER StreamPointer);++KSDDKAPI NTSTATUS NTAPI KsPinHandshake(PKSPIN Pin, PKSHANDSHAKE In, PKSHANDSHAKE Out);+KSDDKAPI void NTAPI KsCompletePendingRequest (PIRP Irp);+KSDDKAPI KSOBJECTTYPE NTAPI KsGetObjectTypeFromIrp (PIRP Irp);+KSDDKAPI PVOID NTAPI KsGetObjectFromFileObject (PFILE_OBJECT FileObject);+KSDDKAPI KSOBJECTTYPE NTAPI KsGetObjectTypeFromFileObject (PFILE_OBJECT FileObject);++PKSFILTER __forceinline KsGetFilterFromFileObject (PFILE_OBJECT FileObject)+{+	return (PKSFILTER) KsGetObjectFromFileObject(FileObject);+}++PKSPIN __forceinline KsGetPinFromFileObject (PFILE_OBJECT FileObject)+{+	return (PKSPIN) KsGetObjectFromFileObject(FileObject);+}++KSDDKAPI PKSGATE NTAPI KsFilterGetAndGate (PKSFILTER Filter);+KSDDKAPI void NTAPI KsFilterAcquireProcessingMutex (PKSFILTER Filter);+KSDDKAPI void NTAPI KsFilterReleaseProcessingMutex (PKSFILTER Filter);+KSDDKAPI void NTAPI KsFilterAttemptProcessing(PKSFILTER Filter, BOOLEAN Asynchronous);+KSDDKAPI PKSGATE NTAPI KsPinGetAndGate(PKSPIN Pin);+KSDDKAPI void NTAPI KsPinAttachAndGate(PKSPIN Pin, PKSGATE AndGate);+KSDDKAPI void NTAPI KsPinAttachOrGate (PKSPIN Pin, PKSGATE OrGate);+KSDDKAPI void NTAPI KsPinAcquireProcessingMutex (PKSPIN Pin);+KSDDKAPI void NTAPI KsPinReleaseProcessingMutex (PKSPIN Pin);+KSDDKAPI BOOLEAN NTAPI KsProcessPinUpdate (PKSPROCESSPIN ProcessPin);++KSDDKAPI void NTAPI KsPinGetCopyRelationships+			(PKSPIN Pin, PKSPIN *CopySource, PKSPIN *DelegateBranch);++KSDDKAPI void NTAPI KsPinAttemptProcessing(PKSPIN Pin, BOOLEAN Asynchronous);+KSDDKAPI PVOID NTAPI KsGetParent (PVOID Object);++PKSDEVICE __forceinline KsFilterFactoryGetParentDevice (PKSFILTERFACTORY FilterFactory)+{+	return (PKSDEVICE) KsGetParent((PVOID) FilterFactory);+}++PKSFILTERFACTORY __forceinline KsFilterGetParentFilterFactory (PKSFILTER Filter)+{+	return (PKSFILTERFACTORY) KsGetParent((PVOID) Filter);+}++KSDDKAPI PKSFILTER NTAPI KsPinGetParentFilter (PKSPIN Pin);+KSDDKAPI PVOID NTAPI KsGetFirstChild (PVOID Object);++PKSFILTERFACTORY __forceinline KsDeviceGetFirstChildFilterFactory (PKSDEVICE Device)+{+	return (PKSFILTERFACTORY) KsGetFirstChild((PVOID) Device);+}++PKSFILTER __forceinline KsFilterFactoryGetFirstChildFilter (PKSFILTERFACTORY FilterFactory)+{+	return (PKSFILTER) KsGetFirstChild((PVOID) FilterFactory);+}++KSDDKAPI ULONG NTAPI KsFilterGetChildPinCount(PKSFILTER Filter, ULONG PinId);+KSDDKAPI PKSPIN NTAPI KsFilterGetFirstChildPin(PKSFILTER Filter, ULONG PinId);+KSDDKAPI PVOID NTAPI KsGetNextSibling (PVOID Object);+KSDDKAPI PKSPIN NTAPI KsPinGetNextSiblingPin (PKSPIN Pin);++PKSFILTERFACTORY __forceinline KsFilterFactoryGetNextSiblingFilterFactory+			(PKSFILTERFACTORY FilterFactory)+{+	return (PKSFILTERFACTORY) KsGetNextSibling((PVOID) FilterFactory);+}++PKSFILTER __forceinline KsFilterGetNextSiblingFilter (PKSFILTER Filter)+{+	return (PKSFILTER) KsGetNextSibling((PVOID) Filter);+}++KSDDKAPI PKSDEVICE NTAPI KsGetDevice (PVOID Object);++PKSDEVICE __forceinline KsFilterFactoryGetDevice (PKSFILTERFACTORY FilterFactory)+{+	return KsGetDevice((PVOID) FilterFactory);+}++PKSDEVICE __forceinline KsFilterGetDevice (PKSFILTER Filter)+{+	return KsGetDevice((PVOID) Filter);+}++PKSDEVICE __forceinline KsPinGetDevice (PKSPIN Pin)+{+	return KsGetDevice((PVOID) Pin);+}++KSDDKAPI PKSFILTER NTAPI KsGetFilterFromIrp (PIRP Irp);+KSDDKAPI PKSPIN NTAPI KsGetPinFromIrp (PIRP Irp);+KSDDKAPI ULONG NTAPI KsGetNodeIdFromIrp (PIRP Irp);+KSDDKAPI void NTAPI KsAcquireControl (PVOID Object);+KSDDKAPI void NTAPI KsReleaseControl (PVOID Object);++void __forceinline KsFilterAcquireControl (PKSFILTER Filter)+{+	KsAcquireControl((PVOID) Filter);+}++void __forceinline KsFilterReleaseControl (PKSFILTER Filter)+{+	KsReleaseControl((PVOID) Filter);+}++void __forceinline KsPinAcquireControl (PKSPIN Pin)+{+	KsAcquireControl((PVOID) Pin);+}++void __forceinline KsPinReleaseControl (PKSPIN Pin)+{+	KsReleaseControl((PVOID) Pin);+}++KSDDKAPI NTSTATUS NTAPI KsAddItemToObjectBag+			(KSOBJECT_BAG ObjectBag, PVOID Item, PFNKSFREE Free);++KSDDKAPI ULONG NTAPI KsRemoveItemFromObjectBag+			(KSOBJECT_BAG ObjectBag, PVOID Item, BOOLEAN Free);++#define KsDiscard(Object,Pointer)					\+	KsRemoveItemFromObjectBag((Object)->Bag, (PVOID)(Pointer), TRUE)++KSDDKAPI NTSTATUS NTAPI KsAllocateObjectBag(PKSDEVICE Device, KSOBJECT_BAG *ObjectBag);+KSDDKAPI void NTAPI KsFreeObjectBag (KSOBJECT_BAG ObjectBag);++KSDDKAPI NTSTATUS NTAPI KsCopyObjectBagItems+			(KSOBJECT_BAG ObjectBagDestination, KSOBJECT_BAG ObjectBagSource);++KSDDKAPI NTSTATUS NTAPI _KsEdit+			(KSOBJECT_BAG ObjectBag, PVOID *PointerToPointerToItem,+			 ULONG NewSize, ULONG OldSize, ULONG Tag);++#define KsEdit(Object, PointerToPointer, Tag)						\+	_KsEdit((Object)->Bag, (PVOID*)(PointerToPointer),				\+		sizeof(**(PointerToPointer)), sizeof(**(PointerToPointer)), (Tag))++#define KsEditSized(Object, PointerToPointer, NewSize, OldSize, Tag)			\+	_KsEdit((Object)->Bag, (PVOID*)(PointerToPointer), (NewSize), (OldSize), (Tag))++KSDDKAPI NTSTATUS NTAPI KsRegisterFilterWithNoKSPins+			(PDEVICE_OBJECT DeviceObject, const GUID *InterfaceClassGUID,+			 ULONG PinCount, WINBOOL *PinDirection, KSPIN_MEDIUM *MediumList,+			 GUID *CategoryList);++KSDDKAPI NTSTATUS NTAPI KsFilterCreatePinFactory+			(PKSFILTER Filter, const KSPIN_DESCRIPTOR_EX *const PinDescriptor,+			 PULONG PinID);++KSDDKAPI NTSTATUS NTAPI KsFilterCreateNode+			(PKSFILTER Filter, const KSNODE_DESCRIPTOR *const NodeDescriptor,+			 PULONG NodeID);++KSDDKAPI NTSTATUS NTAPI KsFilterAddTopologyConnections+			(PKSFILTER Filter, ULONG NewConnectionsCount,+			 const KSTOPOLOGY_CONNECTION *const NewTopologyConnections);++KSDDKAPI NTSTATUS NTAPI KsPinGetConnectedPinInterface+			(PKSPIN Pin, const GUID *InterfaceId, PVOID *Interface);++KSDDKAPI PFILE_OBJECT NTAPI KsPinGetConnectedPinFileObject (PKSPIN Pin);+KSDDKAPI PDEVICE_OBJECT NTAPI KsPinGetConnectedPinDeviceObject (PKSPIN Pin);++KSDDKAPI NTSTATUS NTAPI KsPinGetConnectedFilterInterface+			(PKSPIN Pin, const GUID *InterfaceId, PVOID *Interface);++#if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)+KSDDKAPI NTSTATUS NTAPI KsPinGetReferenceClockInterface+			(PKSPIN Pin, PIKSREFERENCECLOCK *Interface);+#endif /* defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) */++KSDDKAPI VOID NTAPI KsPinSetPinClockTime(PKSPIN Pin, LONGLONG Time);++KSDDKAPI NTSTATUS NTAPI KsPinSubmitFrame+			(PKSPIN Pin, PVOID Data, ULONG Size,+			 PKSSTREAM_HEADER StreamHeader, PVOID Context);++KSDDKAPI NTSTATUS NTAPI KsPinSubmitFrameMdl+			(PKSPIN Pin, PMDL Mdl, PKSSTREAM_HEADER StreamHeader,+			 PVOID Context);++KSDDKAPI void NTAPI KsPinRegisterFrameReturnCallback+			(PKSPIN Pin, PFNKSPINFRAMERETURN FrameReturn);++KSDDKAPI void NTAPI KsPinRegisterIrpCompletionCallback+			(PKSPIN Pin, PFNKSPINIRPCOMPLETION IrpCompletion);++KSDDKAPI void NTAPI KsPinRegisterHandshakeCallback+			(PKSPIN Pin, PFNKSPINHANDSHAKE Handshake);++KSDDKAPI void NTAPI KsFilterRegisterPowerCallbacks+			(PKSFILTER Filter, PFNKSFILTERPOWER Sleep, PFNKSFILTERPOWER Wake);++KSDDKAPI void NTAPI KsPinRegisterPowerCallbacks+			(PKSPIN Pin, PFNKSPINPOWER Sleep, PFNKSPINPOWER Wake);++#if defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__)+KSDDKAPI PUNKNOWN NTAPI KsRegisterAggregatedClientUnknown+			(PVOID Object, PUNKNOWN ClientUnknown);++KSDDKAPI PUNKNOWN NTAPI KsGetOuterUnknown (PVOID Object);++PUNKNOWN __forceinline KsDeviceRegisterAggregatedClientUnknown+			(PKSDEVICE Device, PUNKNOWN ClientUnknown)+{+	return KsRegisterAggregatedClientUnknown((PVOID)Device, ClientUnknown);+}++PUNKNOWN __forceinline KsDeviceGetOuterUnknown (PKSDEVICE Device)+{+	return KsGetOuterUnknown((PVOID) Device);+}++PUNKNOWN __forceinline KsFilterFactoryRegisterAggregatedClientUnknown+			(PKSFILTERFACTORY FilterFactory, PUNKNOWN ClientUnknown)+{+	return KsRegisterAggregatedClientUnknown((PVOID)FilterFactory, ClientUnknown);+}++PUNKNOWN __forceinline KsFilterFactoryGetOuterUnknown (PKSFILTERFACTORY FilterFactory)+{+	return KsGetOuterUnknown((PVOID)FilterFactory);+}++PUNKNOWN __forceinline KsFilterRegisterAggregatedClientUnknown+			(PKSFILTER Filter, PUNKNOWN ClientUnknown)+{+	return KsRegisterAggregatedClientUnknown((PVOID)Filter, ClientUnknown);+}++PUNKNOWN __forceinline KsFilterGetOuterUnknown (PKSFILTER Filter)+{+	return KsGetOuterUnknown((PVOID)Filter);+}++PUNKNOWN __forceinline KsPinRegisterAggregatedClientUnknown+			(PKSPIN Pin, PUNKNOWN ClientUnknown)+{+	return KsRegisterAggregatedClientUnknown((PVOID)Pin, ClientUnknown);+}++PUNKNOWN __forceinline KsPinGetOuterUnknown (PKSPIN Pin)+{+	return KsGetOuterUnknown((PVOID)Pin);+}+#endif /* defined(_UNKNOWN_H_) || defined(__IUnknown_INTERFACE_DEFINED__) */++#else /* _NTDDK_ */++#ifndef KS_NO_CREATE_FUNCTIONS+KSDDKAPI DWORD WINAPI KsCreateAllocator(HANDLE ConnectionHandle,PKSALLOCATOR_FRAMING AllocatorFraming,PHANDLE AllocatorHandle);+KSDDKAPI DWORD NTAPI KsCreateClock(HANDLE ConnectionHandle,PKSCLOCK_CREATE ClockCreate,PHANDLE ClockHandle);+KSDDKAPI DWORD WINAPI KsCreatePin(HANDLE FilterHandle,PKSPIN_CONNECT Connect,ACCESS_MASK DesiredAccess,PHANDLE ConnectionHandle);+KSDDKAPI DWORD WINAPI KsCreateTopologyNode(HANDLE ParentHandle,PKSNODE_CREATE NodeCreate,ACCESS_MASK DesiredAccess,PHANDLE NodeHandle);+#endif++#endif /* _NTDDK_ */++#ifdef __cplusplus+}+#endif++#define DENY_USERMODE_ACCESS(pIrp,CompleteRequest)			\+	if(pIrp->RequestorMode!=KernelMode) {				\+		pIrp->IoStatus.Information = 0;				\+		pIrp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;	\+		if(CompleteRequest)					\+			IoCompleteRequest (pIrp,IO_NO_INCREMENT);	\+		return STATUS_INVALID_DEVICE_REQUEST;			\+	}++#endif /* _KS_ */+
+ portaudio/src/hostapi/wasapi/mingw-include/ksguid.h view
@@ -0,0 +1,28 @@+/**+ * This file has no copyright assigned and is placed in the Public Domain.+ * This file is part of the w64 mingw-runtime package.+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.+ */+#define INITGUID+#include <guiddef.h>++#ifndef DECLSPEC_SELECTANY+#define DECLSPEC_SELECTANY __declspec(selectany)+#endif++#ifdef DEFINE_GUIDEX+#undef DEFINE_GUIDEX+#endif++#ifdef __cplusplus+#define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID DECLSPEC_SELECTANY name = { STATICGUIDOF(name) }+#else+#define DEFINE_GUIDEX(name) const CDECL GUID DECLSPEC_SELECTANY name = { STATICGUIDOF(name) }+#endif+#ifndef STATICGUIDOF+#define STATICGUIDOF(guid) STATIC_##guid+#endif++#ifndef DEFINE_WAVEFORMATEX_GUID+#define DEFINE_WAVEFORMATEX_GUID(x) (USHORT)(x),0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71+#endif
+ portaudio/src/hostapi/wasapi/mingw-include/ksmedia.h view
@@ -0,0 +1,4610 @@+/**+ * This file has no copyright assigned and is placed in the Public Domain.+ * This file is part of the w64 mingw-runtime package.+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.+ */+#if !defined(_KS_)+#warning ks.h must be included before ksmedia.h+#include "ks.h"+#endif++#if __GNUC__ >= 3+#pragma GCC system_header+#endif++#if !defined(_KSMEDIA_)+#define _KSMEDIA_++typedef struct {+  KSPROPERTY Property;+  KSMULTIPLE_ITEM MultipleItem;+} KSMULTIPLE_DATA_PROP,*PKSMULTIPLE_DATA_PROP;++#define STATIC_KSMEDIUMSETID_MidiBus					\+	0x05908040L,0x3246,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("05908040-3246-11D0-A5D6-28DB04C10000",KSMEDIUMSETID_MidiBus);+#define KSMEDIUMSETID_MidiBus DEFINE_GUIDNAMED(KSMEDIUMSETID_MidiBus)++#define STATIC_KSMEDIUMSETID_VPBus					\+	0xA18C15ECL,0xCE43,0x11D0,0xAB,0xE7,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("A18C15EC-CE43-11D0-ABE7-00A0C9223196",KSMEDIUMSETID_VPBus);+#define KSMEDIUMSETID_VPBus DEFINE_GUIDNAMED(KSMEDIUMSETID_VPBus)++#define STATIC_KSINTERFACESETID_Media					\+	0x3A13EB40L,0x30A7,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("3A13EB40-30A7-11D0-A5D6-28DB04C10000",KSINTERFACESETID_Media);+#define KSINTERFACESETID_Media DEFINE_GUIDNAMED(KSINTERFACESETID_Media)++typedef enum {+  KSINTERFACE_MEDIA_MUSIC,+  KSINTERFACE_MEDIA_WAVE_BUFFERED,+  KSINTERFACE_MEDIA_WAVE_QUEUED+} KSINTERFACE_MEDIA;++#ifndef INIT_USBAUDIO_MID+#define INIT_USBAUDIO_MID(guid,id)					\+{									\+	(guid)->Data1 = 0x4e1cecd2 + (USHORT)(id);			\+	(guid)->Data2 = 0x1679;						\+	(guid)->Data3 = 0x463b;						\+	(guid)->Data4[0] = 0xa7;					\+	(guid)->Data4[1] = 0x2f;					\+	(guid)->Data4[2] = 0xa5;					\+	(guid)->Data4[3] = 0xbf;					\+	(guid)->Data4[4] = 0x64;					\+	(guid)->Data4[5] = 0xc8;					\+	(guid)->Data4[6] = 0x6e;					\+	(guid)->Data4[7] = 0xba;					\+}+#define EXTRACT_USBAUDIO_MID(guid)					\+	(USHORT)((guid)->Data1 - 0x4e1cecd2)+#define DEFINE_USBAUDIO_MID_GUID(id)					\+	0x4e1cecd2+(USHORT)(id),0x1679,0x463b,0xa7,0x2f,0xa5,0xbf,0x64,0xc8,0x6e,0xba+#define IS_COMPATIBLE_USBAUDIO_MID(guid)				\+	(((guid)->Data1 >= 0x4e1cecd2) &&				\+	 ((guid)->Data1 < 0x4e1cecd2 + 0xffff) &&			\+	 ((guid)->Data2 == 0x1679) &&					\+	 ((guid)->Data3 == 0x463b) &&					\+	 ((guid)->Data4[0] == 0xa7) &&					\+	 ((guid)->Data4[1] == 0x2f) &&					\+	 ((guid)->Data4[2] == 0xa5) &&					\+	 ((guid)->Data4[3] == 0xbf) &&					\+	 ((guid)->Data4[4] == 0x64) &&					\+	 ((guid)->Data4[5] == 0xc8) &&					\+	 ((guid)->Data4[6] == 0x6e) &&					\+	 ((guid)->Data4[7] == 0xba) )+#endif /* INIT_USBAUDIO_MID */++#ifndef INIT_USBAUDIO_PID+#define INIT_USBAUDIO_PID(guid,id)					\+{									\+	(guid)->Data1 = 0xabcc5a5e + (USHORT)(id);			\+	(guid)->Data2 = 0xc263;						\+	(guid)->Data3 = 0x463b;						\+	(guid)->Data4[0] = 0xa7;					\+	(guid)->Data4[1] = 0x2f;					\+	(guid)->Data4[2] = 0xa5;					\+	(guid)->Data4[3] = 0xbf;					\+	(guid)->Data4[4] = 0x64;					\+	(guid)->Data4[5] = 0xc8;					\+	(guid)->Data4[6] = 0x6e;					\+	(guid)->Data4[7] = 0xba;					\+}+#define EXTRACT_USBAUDIO_PID(guid)					\+	(USHORT)((guid)->Data1 - 0xabcc5a5e)+#define DEFINE_USBAUDIO_PID_GUID(id)					\+	0xabcc5a5e+(USHORT)(id),0xc263,0x463b,0xa7,0x2f,0xa5,0xbf,0x64,0xc8,0x6e,0xba+#define IS_COMPATIBLE_USBAUDIO_PID(guid)				\+	(((guid)->Data1 >= 0xabcc5a5e) &&				\+	 ((guid)->Data1 < 0xabcc5a5e + 0xffff) &&			\+	 ((guid)->Data2 == 0xc263) &&					\+	 ((guid)->Data3 == 0x463b) &&					\+	 ((guid)->Data4[0] == 0xa7) &&					\+	 ((guid)->Data4[1] == 0x2f) &&					\+	 ((guid)->Data4[2] == 0xa5) &&					\+	 ((guid)->Data4[3] == 0xbf) &&					\+	 ((guid)->Data4[4] == 0x64) &&					\+	 ((guid)->Data4[5] == 0xc8) &&					\+	 ((guid)->Data4[6] == 0x6e) &&					\+	 ((guid)->Data4[7] == 0xba) )+#endif /* INIT_USBAUDIO_PID */++#ifndef INIT_USBAUDIO_PRODUCT_NAME+#define INIT_USBAUDIO_PRODUCT_NAME(guid,vid,pid,strIndex)		\+{									\+	(guid)->Data1 = 0XFC575048 + (USHORT)(vid);			\+	(guid)->Data2 = 0x2E08 + (USHORT)(pid);				\+	(guid)->Data3 = 0x463B + (USHORT)(strIndex);			\+	(guid)->Data4[0] = 0xA7;					\+	(guid)->Data4[1] = 0x2F;					\+	(guid)->Data4[2] = 0xA5;					\+	(guid)->Data4[3] = 0xBF;					\+	(guid)->Data4[4] = 0x64;					\+	(guid)->Data4[5] = 0xC8;					\+	(guid)->Data4[6] = 0x6E;					\+	(guid)->Data4[7] = 0xBA;					\+}+#define DEFINE_USBAUDIO_PRODUCT_NAME(vid,pid,strIndex)			\+	0xFC575048+(USHORT)(vid),0x2E08+(USHORT)(pid),0x463B+(USHORT)(strIndex),0xA7,0x2F,0xA5,0xBF,0x64,0xC8,0x6E,0xBA+#endif /* INIT_USBAUDIO_PRODUCT_NAME */++#define STATIC_KSCOMPONENTID_USBAUDIO					\+	0x8F1275F0,0x26E9,0x4264,0xBA,0x4D,0x39,0xFF,0xF0,0x1D,0x94,0xAA+DEFINE_GUIDSTRUCT("8F1275F0-26E9-4264-BA4D-39FFF01D94AA",KSCOMPONENTID_USBAUDIO);+#define KSCOMPONENTID_USBAUDIO DEFINE_GUIDNAMED(KSCOMPONENTID_USBAUDIO)++#define INIT_USB_TERMINAL(guid,id)					\+{									\+	(guid)->Data1 = 0xDFF219E0 + (USHORT)(id);			\+	(guid)->Data2 = 0xF70F;						\+	(guid)->Data3 = 0x11D0;						\+	(guid)->Data4[0] = 0xb9;					\+	(guid)->Data4[1] = 0x17;					\+	(guid)->Data4[2] = 0x00;					\+	(guid)->Data4[3] = 0xa0;					\+	(guid)->Data4[4] = 0xc9;					\+	(guid)->Data4[5] = 0x22;					\+	(guid)->Data4[6] = 0x31;					\+	(guid)->Data4[7] = 0x96;					\+}+#define EXTRACT_USB_TERMINAL(guid)					\+	(USHORT)((guid)->Data1 - 0xDFF219E0)+#define DEFINE_USB_TERMINAL_GUID(id)					\+	0xDFF219E0+(USHORT)(id),0xF70F,0x11D0,0xB9,0x17,0x00,0xA0,0xC9,0x22,0x31,0x96++#define STATIC_KSNODETYPE_MICROPHONE					\+	DEFINE_USB_TERMINAL_GUID(0x0201)+DEFINE_GUIDSTRUCT("DFF21BE1-F70F-11D0-B917-00A0C9223196",KSNODETYPE_MICROPHONE);+#define KSNODETYPE_MICROPHONE DEFINE_GUIDNAMED(KSNODETYPE_MICROPHONE)++#define STATIC_KSNODETYPE_DESKTOP_MICROPHONE				\+	DEFINE_USB_TERMINAL_GUID(0x0202)+DEFINE_GUIDSTRUCT("DFF21BE2-F70F-11D0-B917-00A0C9223196",KSNODETYPE_DESKTOP_MICROPHONE);+#define KSNODETYPE_DESKTOP_MICROPHONE DEFINE_GUIDNAMED(KSNODETYPE_DESKTOP_MICROPHONE)++#define STATIC_KSNODETYPE_PERSONAL_MICROPHONE				\+	DEFINE_USB_TERMINAL_GUID(0x0203)+DEFINE_GUIDSTRUCT("DFF21BE3-F70F-11D0-B917-00A0C9223196",KSNODETYPE_PERSONAL_MICROPHONE);+#define KSNODETYPE_PERSONAL_MICROPHONE DEFINE_GUIDNAMED(KSNODETYPE_PERSONAL_MICROPHONE)++#define STATIC_KSNODETYPE_OMNI_DIRECTIONAL_MICROPHONE			\+	DEFINE_USB_TERMINAL_GUID(0x0204)+DEFINE_GUIDSTRUCT("DFF21BE4-F70F-11D0-B917-00A0C9223196",KSNODETYPE_OMNI_DIRECTIONAL_MICROPHONE);+#define KSNODETYPE_OMNI_DIRECTIONAL_MICROPHONE DEFINE_GUIDNAMED(KSNODETYPE_OMNI_DIRECTIONAL_MICROPHONE)++#define STATIC_KSNODETYPE_MICROPHONE_ARRAY				\+	DEFINE_USB_TERMINAL_GUID(0x0205)+DEFINE_GUIDSTRUCT("DFF21BE5-F70F-11D0-B917-00A0C9223196",KSNODETYPE_MICROPHONE_ARRAY);+#define KSNODETYPE_MICROPHONE_ARRAY DEFINE_GUIDNAMED(KSNODETYPE_MICROPHONE_ARRAY)++#define STATIC_KSNODETYPE_PROCESSING_MICROPHONE_ARRAY			\+	DEFINE_USB_TERMINAL_GUID(0x0206)+DEFINE_GUIDSTRUCT("DFF21BE6-F70F-11D0-B917-00A0C9223196",KSNODETYPE_PROCESSING_MICROPHONE_ARRAY);+#define KSNODETYPE_PROCESSING_MICROPHONE_ARRAY DEFINE_GUIDNAMED(KSNODETYPE_PROCESSING_MICROPHONE_ARRAY)++#define STATIC_KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR			\+	0x830a44f2,0xa32d,0x476b,0xbe,0x97,0x42,0x84,0x56,0x73,0xb3,0x5a+DEFINE_GUIDSTRUCT("830a44f2-a32d-476b-be97-42845673b35a",KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR);+#define KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR DEFINE_GUIDNAMED(KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR)++#define STATIC_KSNODETYPE_SPEAKER					\+	DEFINE_USB_TERMINAL_GUID(0x0301)+DEFINE_GUIDSTRUCT("DFF21CE1-F70F-11D0-B917-00A0C9223196",KSNODETYPE_SPEAKER);+#define KSNODETYPE_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_SPEAKER)++#define STATIC_KSNODETYPE_HEADPHONES					\+	DEFINE_USB_TERMINAL_GUID(0x0302)+DEFINE_GUIDSTRUCT("DFF21CE2-F70F-11D0-B917-00A0C9223196",KSNODETYPE_HEADPHONES);+#define KSNODETYPE_HEADPHONES DEFINE_GUIDNAMED(KSNODETYPE_HEADPHONES)++#define STATIC_KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO			\+	DEFINE_USB_TERMINAL_GUID(0x0303)+DEFINE_GUIDSTRUCT("DFF21CE3-F70F-11D0-B917-00A0C9223196",KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO);+#define KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO)++#define STATIC_KSNODETYPE_DESKTOP_SPEAKER				\+	DEFINE_USB_TERMINAL_GUID(0x0304)+DEFINE_GUIDSTRUCT("DFF21CE4-F70F-11D0-B917-00A0C9223196",KSNODETYPE_DESKTOP_SPEAKER);+#define KSNODETYPE_DESKTOP_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_DESKTOP_SPEAKER)++#define STATIC_KSNODETYPE_ROOM_SPEAKER					\+	DEFINE_USB_TERMINAL_GUID(0x0305)+DEFINE_GUIDSTRUCT("DFF21CE5-F70F-11D0-B917-00A0C9223196",KSNODETYPE_ROOM_SPEAKER);+#define KSNODETYPE_ROOM_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_ROOM_SPEAKER)++#define STATIC_KSNODETYPE_COMMUNICATION_SPEAKER				\+	DEFINE_USB_TERMINAL_GUID(0x0306)+DEFINE_GUIDSTRUCT("DFF21CE6-F70F-11D0-B917-00A0C9223196",KSNODETYPE_COMMUNICATION_SPEAKER);+#define KSNODETYPE_COMMUNICATION_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_COMMUNICATION_SPEAKER)++#define STATIC_KSNODETYPE_LOW_FREQUENCY_EFFECTS_SPEAKER			\+	DEFINE_USB_TERMINAL_GUID(0x0307)+DEFINE_GUIDSTRUCT("DFF21CE7-F70F-11D0-B917-00A0C9223196",KSNODETYPE_LOW_FREQUENCY_EFFECTS_SPEAKER);+#define KSNODETYPE_LOW_FREQUENCY_EFFECTS_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_LOW_FREQUENCY_EFFECTS_SPEAKER)++#define STATIC_KSNODETYPE_HANDSET					\+	DEFINE_USB_TERMINAL_GUID(0x0401)+DEFINE_GUIDSTRUCT("DFF21DE1-F70F-11D0-B917-00A0C9223196",KSNODETYPE_HANDSET);+#define KSNODETYPE_HANDSET DEFINE_GUIDNAMED(KSNODETYPE_HANDSET)++#define STATIC_KSNODETYPE_HEADSET					\+	DEFINE_USB_TERMINAL_GUID(0x0402)+DEFINE_GUIDSTRUCT("DFF21DE2-F70F-11D0-B917-00A0C9223196",KSNODETYPE_HEADSET);+#define KSNODETYPE_HEADSET DEFINE_GUIDNAMED(KSNODETYPE_HEADSET)++#define STATIC_KSNODETYPE_SPEAKERPHONE_NO_ECHO_REDUCTION		\+	DEFINE_USB_TERMINAL_GUID(0x0403)+DEFINE_GUIDSTRUCT("DFF21DE3-F70F-11D0-B917-00A0C9223196",KSNODETYPE_SPEAKERPHONE_NO_ECHO_REDUCTION);+#define KSNODETYPE_SPEAKERPHONE_NO_ECHO_REDUCTION DEFINE_GUIDNAMED(KSNODETYPE_SPEAKERPHONE_NO_ECHO_REDUCTION)++#define STATIC_KSNODETYPE_ECHO_SUPPRESSING_SPEAKERPHONE			\+	DEFINE_USB_TERMINAL_GUID(0x0404)+DEFINE_GUIDSTRUCT("DFF21DE4-F70F-11D0-B917-00A0C9223196",KSNODETYPE_ECHO_SUPPRESSING_SPEAKERPHONE);+#define KSNODETYPE_ECHO_SUPPRESSING_SPEAKERPHONE DEFINE_GUIDNAMED(KSNODETYPE_ECHO_SUPPRESSING_SPEAKERPHONE)++#define STATIC_KSNODETYPE_ECHO_CANCELING_SPEAKERPHONE			\+	DEFINE_USB_TERMINAL_GUID(0x0405)+DEFINE_GUIDSTRUCT("DFF21DE5-F70F-11D0-B917-00A0C9223196",KSNODETYPE_ECHO_CANCELING_SPEAKERPHONE);+#define KSNODETYPE_ECHO_CANCELING_SPEAKERPHONE DEFINE_GUIDNAMED(KSNODETYPE_ECHO_CANCELING_SPEAKERPHONE)++#define STATIC_KSNODETYPE_PHONE_LINE					\+	DEFINE_USB_TERMINAL_GUID(0x0501)+DEFINE_GUIDSTRUCT("DFF21EE1-F70F-11D0-B917-00A0C9223196",KSNODETYPE_PHONE_LINE);+#define KSNODETYPE_PHONE_LINE DEFINE_GUIDNAMED(KSNODETYPE_PHONE_LINE)++#define STATIC_KSNODETYPE_TELEPHONE					\+	DEFINE_USB_TERMINAL_GUID(0x0502)+DEFINE_GUIDSTRUCT("DFF21EE2-F70F-11D0-B917-00A0C9223196",KSNODETYPE_TELEPHONE);+#define KSNODETYPE_TELEPHONE DEFINE_GUIDNAMED(KSNODETYPE_TELEPHONE)++#define STATIC_KSNODETYPE_DOWN_LINE_PHONE				\+	DEFINE_USB_TERMINAL_GUID(0x0503)+DEFINE_GUIDSTRUCT("DFF21EE3-F70F-11D0-B917-00A0C9223196",KSNODETYPE_DOWN_LINE_PHONE);+#define KSNODETYPE_DOWN_LINE_PHONE DEFINE_GUIDNAMED(KSNODETYPE_DOWN_LINE_PHONE)++#define STATIC_KSNODETYPE_ANALOG_CONNECTOR				\+	DEFINE_USB_TERMINAL_GUID(0x601)+DEFINE_GUIDSTRUCT("DFF21FE1-F70F-11D0-B917-00A0C9223196",KSNODETYPE_ANALOG_CONNECTOR);+#define KSNODETYPE_ANALOG_CONNECTOR DEFINE_GUIDNAMED(KSNODETYPE_ANALOG_CONNECTOR)++#define STATIC_KSNODETYPE_DIGITAL_AUDIO_INTERFACE			\+	DEFINE_USB_TERMINAL_GUID(0x0602)+DEFINE_GUIDSTRUCT("DFF21FE2-F70F-11D0-B917-00A0C9223196",KSNODETYPE_DIGITAL_AUDIO_INTERFACE);+#define KSNODETYPE_DIGITAL_AUDIO_INTERFACE DEFINE_GUIDNAMED(KSNODETYPE_DIGITAL_AUDIO_INTERFACE)++#define STATIC_KSNODETYPE_LINE_CONNECTOR				\+	DEFINE_USB_TERMINAL_GUID(0x0603)+DEFINE_GUIDSTRUCT("DFF21FE3-F70F-11D0-B917-00A0C9223196",KSNODETYPE_LINE_CONNECTOR);+#define KSNODETYPE_LINE_CONNECTOR DEFINE_GUIDNAMED(KSNODETYPE_LINE_CONNECTOR)++#define STATIC_KSNODETYPE_LEGACY_AUDIO_CONNECTOR			\+	DEFINE_USB_TERMINAL_GUID(0x0604)+DEFINE_GUIDSTRUCT("DFF21FE4-F70F-11D0-B917-00A0C9223196",KSNODETYPE_LEGACY_AUDIO_CONNECTOR);+#define KSNODETYPE_LEGACY_AUDIO_CONNECTOR DEFINE_GUIDNAMED(KSNODETYPE_LEGACY_AUDIO_CONNECTOR)++#define STATIC_KSNODETYPE_SPDIF_INTERFACE				\+	DEFINE_USB_TERMINAL_GUID(0x0605)+DEFINE_GUIDSTRUCT("DFF21FE5-F70F-11D0-B917-00A0C9223196",KSNODETYPE_SPDIF_INTERFACE);+#define KSNODETYPE_SPDIF_INTERFACE DEFINE_GUIDNAMED(KSNODETYPE_SPDIF_INTERFACE)++#define STATIC_KSNODETYPE_1394_DA_STREAM				\+	DEFINE_USB_TERMINAL_GUID(0x0606)+DEFINE_GUIDSTRUCT("DFF21FE6-F70F-11D0-B917-00A0C9223196",KSNODETYPE_1394_DA_STREAM);+#define KSNODETYPE_1394_DA_STREAM DEFINE_GUIDNAMED(KSNODETYPE_1394_DA_STREAM)++#define STATIC_KSNODETYPE_1394_DV_STREAM_SOUNDTRACK			\+	DEFINE_USB_TERMINAL_GUID(0x0607)+DEFINE_GUIDSTRUCT("DFF21FE7-F70F-11D0-B917-00A0C9223196",KSNODETYPE_1394_DV_STREAM_SOUNDTRACK);+#define KSNODETYPE_1394_DV_STREAM_SOUNDTRACK DEFINE_GUIDNAMED(KSNODETYPE_1394_DV_STREAM_SOUNDTRACK)++#define STATIC_KSNODETYPE_LEVEL_CALIBRATION_NOISE_SOURCE		\+	DEFINE_USB_TERMINAL_GUID(0x0701)+DEFINE_GUIDSTRUCT("DFF220E1-F70F-11D0-B917-00A0C9223196",KSNODETYPE_LEVEL_CALIBRATION_NOISE_SOURCE);+#define KSNODETYPE_LEVEL_CALIBRATION_NOISE_SOURCE DEFINE_GUIDNAMED(KSNODETYPE_LEVEL_CALIBRATION_NOISE_SOURCE)++#define STATIC_KSNODETYPE_EQUALIZATION_NOISE				\+	DEFINE_USB_TERMINAL_GUID(0x0702)+DEFINE_GUIDSTRUCT("DFF220E2-F70F-11D0-B917-00A0C9223196",KSNODETYPE_EQUALIZATION_NOISE);+#define KSNODETYPE_EQUALIZATION_NOISE DEFINE_GUIDNAMED(KSNODETYPE_EQUALIZATION_NOISE)++#define STATIC_KSNODETYPE_CD_PLAYER					\+	DEFINE_USB_TERMINAL_GUID(0x0703)+DEFINE_GUIDSTRUCT("DFF220E3-F70F-11D0-B917-00A0C9223196",KSNODETYPE_CD_PLAYER);+#define KSNODETYPE_CD_PLAYER DEFINE_GUIDNAMED(KSNODETYPE_CD_PLAYER)++#define STATIC_KSNODETYPE_DAT_IO_DIGITAL_AUDIO_TAPE			\+	DEFINE_USB_TERMINAL_GUID(0x0704)+DEFINE_GUIDSTRUCT("DFF220E4-F70F-11D0-B917-00A0C9223196",KSNODETYPE_DAT_IO_DIGITAL_AUDIO_TAPE);+#define KSNODETYPE_DAT_IO_DIGITAL_AUDIO_TAPE DEFINE_GUIDNAMED(KSNODETYPE_DAT_IO_DIGITAL_AUDIO_TAPE)++#define STATIC_KSNODETYPE_DCC_IO_DIGITAL_COMPACT_CASSETTE		\+	DEFINE_USB_TERMINAL_GUID(0x0705)+DEFINE_GUIDSTRUCT("DFF220E5-F70F-11D0-B917-00A0C9223196",KSNODETYPE_DCC_IO_DIGITAL_COMPACT_CASSETTE);+#define KSNODETYPE_DCC_IO_DIGITAL_COMPACT_CASSETTE DEFINE_GUIDNAMED(KSNODETYPE_DCC_IO_DIGITAL_COMPACT_CASSETTE)++#define STATIC_KSNODETYPE_MINIDISK					\+	DEFINE_USB_TERMINAL_GUID(0x0706)+DEFINE_GUIDSTRUCT("DFF220E6-F70F-11D0-B917-00A0C9223196",KSNODETYPE_MINIDISK);+#define KSNODETYPE_MINIDISK DEFINE_GUIDNAMED(KSNODETYPE_MINIDISK)++#define STATIC_KSNODETYPE_ANALOG_TAPE					\+	DEFINE_USB_TERMINAL_GUID(0x0707)+DEFINE_GUIDSTRUCT("DFF220E7-F70F-11D0-B917-00A0C9223196",KSNODETYPE_ANALOG_TAPE);+#define KSNODETYPE_ANALOG_TAPE DEFINE_GUIDNAMED(KSNODETYPE_ANALOG_TAPE)++#define STATIC_KSNODETYPE_PHONOGRAPH					\+	DEFINE_USB_TERMINAL_GUID(0x0708)+DEFINE_GUIDSTRUCT("DFF220E8-F70F-11D0-B917-00A0C9223196",KSNODETYPE_PHONOGRAPH);+#define KSNODETYPE_PHONOGRAPH DEFINE_GUIDNAMED(KSNODETYPE_PHONOGRAPH)++#define STATIC_KSNODETYPE_VCR_AUDIO					\+	DEFINE_USB_TERMINAL_GUID(0x0708)+DEFINE_GUIDSTRUCT("DFF220E9-F70F-11D0-B917-00A0C9223196",KSNODETYPE_VCR_AUDIO);+#define KSNODETYPE_VCR_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_VCR_AUDIO)++#define STATIC_KSNODETYPE_VIDEO_DISC_AUDIO				\+	DEFINE_USB_TERMINAL_GUID(0x070A)+DEFINE_GUIDSTRUCT("DFF220EA-F70F-11D0-B917-00A0C9223196",KSNODETYPE_VIDEO_DISC_AUDIO);+#define KSNODETYPE_VIDEO_DISC_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_VIDEO_DISC_AUDIO)++#define STATIC_KSNODETYPE_DVD_AUDIO					\+	DEFINE_USB_TERMINAL_GUID(0x070B)+DEFINE_GUIDSTRUCT("DFF220EB-F70F-11D0-B917-00A0C9223196",KSNODETYPE_DVD_AUDIO);+#define KSNODETYPE_DVD_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_DVD_AUDIO)++#define STATIC_KSNODETYPE_TV_TUNER_AUDIO				\+	DEFINE_USB_TERMINAL_GUID(0x070C)+DEFINE_GUIDSTRUCT("DFF220EC-F70F-11D0-B917-00A0C9223196",KSNODETYPE_TV_TUNER_AUDIO);+#define KSNODETYPE_TV_TUNER_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_TV_TUNER_AUDIO)++#define STATIC_KSNODETYPE_SATELLITE_RECEIVER_AUDIO			\+	DEFINE_USB_TERMINAL_GUID(0x070D)+DEFINE_GUIDSTRUCT("DFF220ED-F70F-11D0-B917-00A0C9223196",KSNODETYPE_SATELLITE_RECEIVER_AUDIO);+#define KSNODETYPE_SATELLITE_RECEIVER_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_SATELLITE_RECEIVER_AUDIO)++#define STATIC_KSNODETYPE_CABLE_TUNER_AUDIO				\+	DEFINE_USB_TERMINAL_GUID(0x070E)+DEFINE_GUIDSTRUCT("DFF220EE-F70F-11D0-B917-00A0C9223196",KSNODETYPE_CABLE_TUNER_AUDIO);+#define KSNODETYPE_CABLE_TUNER_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_CABLE_TUNER_AUDIO)++#define STATIC_KSNODETYPE_DSS_AUDIO					\+	DEFINE_USB_TERMINAL_GUID(0x070F)+DEFINE_GUIDSTRUCT("DFF220EF-F70F-11D0-B917-00A0C9223196",KSNODETYPE_DSS_AUDIO);+#define KSNODETYPE_DSS_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_DSS_AUDIO)++#define STATIC_KSNODETYPE_RADIO_RECEIVER				\+	DEFINE_USB_TERMINAL_GUID(0x0710)+DEFINE_GUIDSTRUCT("DFF220F0-F70F-11D0-B917-00A0C9223196",KSNODETYPE_RADIO_RECEIVER);+#define KSNODETYPE_RADIO_RECEIVER DEFINE_GUIDNAMED(KSNODETYPE_RADIO_RECEIVER)++#define STATIC_KSNODETYPE_RADIO_TRANSMITTER				\+	DEFINE_USB_TERMINAL_GUID(0x0711)+DEFINE_GUIDSTRUCT("DFF220F1-F70F-11D0-B917-00A0C9223196",KSNODETYPE_RADIO_TRANSMITTER);+#define KSNODETYPE_RADIO_TRANSMITTER DEFINE_GUIDNAMED(KSNODETYPE_RADIO_TRANSMITTER)++#define STATIC_KSNODETYPE_MULTITRACK_RECORDER				\+	DEFINE_USB_TERMINAL_GUID(0x0712)+DEFINE_GUIDSTRUCT("DFF220F2-F70F-11D0-B917-00A0C9223196",KSNODETYPE_MULTITRACK_RECORDER);+#define KSNODETYPE_MULTITRACK_RECORDER DEFINE_GUIDNAMED(KSNODETYPE_MULTITRACK_RECORDER)++#define STATIC_KSNODETYPE_SYNTHESIZER					\+	DEFINE_USB_TERMINAL_GUID(0x0713)+DEFINE_GUIDSTRUCT("DFF220F3-F70F-11D0-B917-00A0C9223196",KSNODETYPE_SYNTHESIZER);+#define KSNODETYPE_SYNTHESIZER DEFINE_GUIDNAMED(KSNODETYPE_SYNTHESIZER)++#define STATIC_KSNODETYPE_SWSYNTH					\+	0x423274A0L,0x8B81,0x11D1,0xA0,0x50,0x00,0x00,0xF8,0x00,0x47,0x88+DEFINE_GUIDSTRUCT("423274A0-8B81-11D1-A050-0000F8004788",KSNODETYPE_SWSYNTH);+#define KSNODETYPE_SWSYNTH DEFINE_GUIDNAMED(KSNODETYPE_SWSYNTH)++#define STATIC_KSNODETYPE_SWMIDI					\+	0xCB9BEFA0L,0xA251,0x11D1,0xA0,0x50,0x00,0x00,0xF8,0x00,0x47,0x88+DEFINE_GUIDSTRUCT("CB9BEFA0-A251-11D1-A050-0000F8004788",KSNODETYPE_SWMIDI);+#define KSNODETYPE_SWMIDI DEFINE_GUIDNAMED(KSNODETYPE_SWMIDI)++#define STATIC_KSNODETYPE_DRM_DESCRAMBLE				\+	0xFFBB6E3FL,0xCCFE,0x4D84,0x90,0xD9,0x42,0x14,0x18,0xB0,0x3A,0x8E+DEFINE_GUIDSTRUCT("FFBB6E3F-CCFE-4D84-90D9-421418B03A8E",KSNODETYPE_DRM_DESCRAMBLE);+#define KSNODETYPE_DRM_DESCRAMBLE DEFINE_GUIDNAMED(KSNODETYPE_DRM_DESCRAMBLE)++#define STATIC_KSCATEGORY_AUDIO						\+	0x6994AD04L,0x93EF,0x11D0,0xA3,0xCC,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("6994AD04-93EF-11D0-A3CC-00A0C9223196",KSCATEGORY_AUDIO);+#define KSCATEGORY_AUDIO DEFINE_GUIDNAMED(KSCATEGORY_AUDIO)++#define STATIC_KSCATEGORY_VIDEO						\+	0x6994AD05L,0x93EF,0x11D0,0xA3,0xCC,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("6994AD05-93EF-11D0-A3CC-00A0C9223196",KSCATEGORY_VIDEO);+#define KSCATEGORY_VIDEO DEFINE_GUIDNAMED(KSCATEGORY_VIDEO)++/* Added for Vista and later */
+#define STATIC_KSCATEGORY_REALTIME \
+    0xEB115FFCL, 0x10C8, 0x4964, 0x83, 0x1D, 0x6D, 0xCB, 0x02, 0xE6, 0xF2, 0x3F
+DEFINE_GUIDSTRUCT("EB115FFC-10C8-4964-831D-6DCB02E6F23F", KSCATEGORY_REALTIME);
+#define KSCATEGORY_REALTIME DEFINE_GUIDNAMED(KSCATEGORY_REALTIME)
++#define STATIC_KSCATEGORY_TEXT						\+	0x6994AD06L,0x93EF,0x11D0,0xA3,0xCC,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("6994AD06-93EF-11D0-A3CC-00A0C9223196",KSCATEGORY_TEXT);+#define KSCATEGORY_TEXT DEFINE_GUIDNAMED(KSCATEGORY_TEXT)++#define STATIC_KSCATEGORY_NETWORK					\+	0x67C9CC3CL,0x69C4,0x11D2,0x87,0x59,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("67C9CC3C-69C4-11D2-8759-00A0C9223196",KSCATEGORY_NETWORK);+#define KSCATEGORY_NETWORK DEFINE_GUIDNAMED(KSCATEGORY_NETWORK)++#define STATIC_KSCATEGORY_TOPOLOGY					\+	0xDDA54A40L,0x1E4C,0x11D1,0xA0,0x50,0x40,0x57,0x05,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("DDA54A40-1E4C-11D1-A050-405705C10000",KSCATEGORY_TOPOLOGY);+#define KSCATEGORY_TOPOLOGY DEFINE_GUIDNAMED(KSCATEGORY_TOPOLOGY)++#define STATIC_KSCATEGORY_VIRTUAL					\+	0x3503EAC4L,0x1F26,0x11D1,0x8A,0xB0,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("3503EAC4-1F26-11D1-8AB0-00A0C9223196",KSCATEGORY_VIRTUAL);+#define KSCATEGORY_VIRTUAL DEFINE_GUIDNAMED(KSCATEGORY_VIRTUAL)++#define STATIC_KSCATEGORY_ACOUSTIC_ECHO_CANCEL				\+	0xBF963D80L,0xC559,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1+DEFINE_GUIDSTRUCT("BF963D80-C559-11D0-8A2B-00A0C9255AC1",KSCATEGORY_ACOUSTIC_ECHO_CANCEL);+#define KSCATEGORY_ACOUSTIC_ECHO_CANCEL DEFINE_GUIDNAMED(KSCATEGORY_ACOUSTIC_ECHO_CANCEL)++#define STATIC_KSCATEGORY_SYSAUDIO					\+	0xA7C7A5B1L,0x5AF3,0x11D1,0x9C,0xED,0x00,0xA0,0x24,0xBF,0x04,0x07+DEFINE_GUIDSTRUCT("A7C7A5B1-5AF3-11D1-9CED-00A024BF0407",KSCATEGORY_SYSAUDIO);+#define KSCATEGORY_SYSAUDIO DEFINE_GUIDNAMED(KSCATEGORY_SYSAUDIO)++#define STATIC_KSCATEGORY_WDMAUD					\+	0x3E227E76L,0x690D,0x11D2,0x81,0x61,0x00,0x00,0xF8,0x77,0x5B,0xF1+DEFINE_GUIDSTRUCT("3E227E76-690D-11D2-8161-0000F8775BF1",KSCATEGORY_WDMAUD);+#define KSCATEGORY_WDMAUD DEFINE_GUIDNAMED(KSCATEGORY_WDMAUD)++#define STATIC_KSCATEGORY_AUDIO_GFX					\+	0x9BAF9572L,0x340C,0x11D3,0xAB,0xDC,0x00,0xA0,0xC9,0x0A,0xB1,0x6F+DEFINE_GUIDSTRUCT("9BAF9572-340C-11D3-ABDC-00A0C90AB16F",KSCATEGORY_AUDIO_GFX);+#define KSCATEGORY_AUDIO_GFX DEFINE_GUIDNAMED(KSCATEGORY_AUDIO_GFX)++#define STATIC_KSCATEGORY_AUDIO_SPLITTER				\+	0x9EA331FAL,0xB91B,0x45F8,0x92,0x85,0xBD,0x2B,0xC7,0x7A,0xFC,0xDE+DEFINE_GUIDSTRUCT("9EA331FA-B91B-45F8-9285-BD2BC77AFCDE",KSCATEGORY_AUDIO_SPLITTER);+#define KSCATEGORY_AUDIO_SPLITTER DEFINE_GUIDNAMED(KSCATEGORY_AUDIO_SPLITTER)++#define STATIC_KSCATEGORY_SYNTHESIZER		STATIC_KSNODETYPE_SYNTHESIZER+#define KSCATEGORY_SYNTHESIZER			KSNODETYPE_SYNTHESIZER++#define STATIC_KSCATEGORY_DRM_DESCRAMBLE	STATIC_KSNODETYPE_DRM_DESCRAMBLE+#define KSCATEGORY_DRM_DESCRAMBLE		KSNODETYPE_DRM_DESCRAMBLE++#define STATIC_KSCATEGORY_AUDIO_DEVICE					\+	0xFBF6F530L,0x07B9,0x11D2,0xA7,0x1E,0x00,0x00,0xF8,0x00,0x47,0x88+DEFINE_GUIDSTRUCT("FBF6F530-07B9-11D2-A71E-0000F8004788",KSCATEGORY_AUDIO_DEVICE);+#define KSCATEGORY_AUDIO_DEVICE DEFINE_GUIDNAMED(KSCATEGORY_AUDIO_DEVICE)++#define STATIC_KSCATEGORY_PREFERRED_WAVEOUT_DEVICE			\+	0xD6C5066EL,0x72C1,0x11D2,0x97,0x55,0x00,0x00,0xF8,0x00,0x47,0x88+DEFINE_GUIDSTRUCT("D6C5066E-72C1-11D2-9755-0000F8004788",KSCATEGORY_PREFERRED_WAVEOUT_DEVICE);+#define KSCATEGORY_PREFERRED_WAVEOUT_DEVICE DEFINE_GUIDNAMED(KSCATEGORY_PREFERRED_WAVEOUT_DEVICE)++#define STATIC_KSCATEGORY_PREFERRED_WAVEIN_DEVICE			\+	0xD6C50671L,0x72C1,0x11D2,0x97,0x55,0x00,0x00,0xF8,0x00,0x47,0x88+DEFINE_GUIDSTRUCT("D6C50671-72C1-11D2-9755-0000F8004788",KSCATEGORY_PREFERRED_WAVEIN_DEVICE);+#define KSCATEGORY_PREFERRED_WAVEIN_DEVICE DEFINE_GUIDNAMED(KSCATEGORY_PREFERRED_WAVEIN_DEVICE)++#define STATIC_KSCATEGORY_PREFERRED_MIDIOUT_DEVICE			\+	0xD6C50674L,0x72C1,0x11D2,0x97,0x55,0x00,0x00,0xF8,0x00,0x47,0x88+DEFINE_GUIDSTRUCT("D6C50674-72C1-11D2-9755-0000F8004788",KSCATEGORY_PREFERRED_MIDIOUT_DEVICE);+#define KSCATEGORY_PREFERRED_MIDIOUT_DEVICE DEFINE_GUIDNAMED(KSCATEGORY_PREFERRED_MIDIOUT_DEVICE)++#define STATIC_KSCATEGORY_WDMAUD_USE_PIN_NAME				\+	0x47A4FA20L,0xA251,0x11D1,0xA0,0x50,0x00,0x00,0xF8,0x00,0x47,0x88+DEFINE_GUIDSTRUCT("47A4FA20-A251-11D1-A050-0000F8004788",KSCATEGORY_WDMAUD_USE_PIN_NAME);+#define KSCATEGORY_WDMAUD_USE_PIN_NAME DEFINE_GUIDNAMED(KSCATEGORY_WDMAUD_USE_PIN_NAME)++#define STATIC_KSCATEGORY_ESCALANTE_PLATFORM_DRIVER			\+	0x74f3aea8L,0x9768,0x11d1,0x8e,0x07,0x00,0xa0,0xc9,0x5e,0xc2,0x2e+DEFINE_GUIDSTRUCT("74f3aea8-9768-11d1-8e07-00a0c95ec22e",KSCATEGORY_ESCALANTE_PLATFORM_DRIVER);+#define KSCATEGORY_ESCALANTE_PLATFORM_DRIVER DEFINE_GUIDNAMED(KSCATEGORY_ESCALANTE_PLATFORM_DRIVER)++#define STATIC_KSDATAFORMAT_TYPE_VIDEO					\+	0x73646976L,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71+DEFINE_GUIDSTRUCT("73646976-0000-0010-8000-00aa00389b71",KSDATAFORMAT_TYPE_VIDEO);+#define KSDATAFORMAT_TYPE_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_VIDEO)++#define STATIC_KSDATAFORMAT_TYPE_AUDIO					\+	0x73647561L,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71+DEFINE_GUIDSTRUCT("73647561-0000-0010-8000-00aa00389b71",KSDATAFORMAT_TYPE_AUDIO);+#define KSDATAFORMAT_TYPE_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_AUDIO)++#define STATIC_KSDATAFORMAT_TYPE_TEXT					\+	0x73747874L,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71+DEFINE_GUIDSTRUCT("73747874-0000-0010-8000-00aa00389b71",KSDATAFORMAT_TYPE_TEXT);+#define KSDATAFORMAT_TYPE_TEXT DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_TEXT)++#if !defined(DEFINE_WAVEFORMATEX_GUID)+#define DEFINE_WAVEFORMATEX_GUID(x)					\+	(USHORT)(x),0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71+#endif++#define STATIC_KSDATAFORMAT_SUBTYPE_WAVEFORMATEX			\+	0x00000000L,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71+DEFINE_GUIDSTRUCT("00000000-0000-0010-8000-00aa00389b71",KSDATAFORMAT_SUBTYPE_WAVEFORMATEX);+#define KSDATAFORMAT_SUBTYPE_WAVEFORMATEX DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_WAVEFORMATEX)++#define INIT_WAVEFORMATEX_GUID(Guid,x)					\+{									\+	*(Guid) = KSDATAFORMAT_SUBTYPE_WAVEFORMATEX;			\+	(Guid)->Data1 = (USHORT)(x);					\+}++#define EXTRACT_WAVEFORMATEX_ID(Guid)					\+	(USHORT)((Guid)->Data1)++#define IS_VALID_WAVEFORMATEX_GUID(Guid)				\+	(!memcmp(((PUSHORT)&KSDATAFORMAT_SUBTYPE_WAVEFORMATEX) + 1, ((PUSHORT)(Guid)) + 1,sizeof(GUID) - sizeof(USHORT)))++#ifndef INIT_MMREG_MID+#define INIT_MMREG_MID(guid,id)						\+{									\+	(guid)->Data1 = 0xd5a47fa7 + (USHORT)(id);			\+	(guid)->Data2 = 0x6d98;						\+	(guid)->Data3 = 0x11d1;						\+	(guid)->Data4[0] = 0xa2;					\+	(guid)->Data4[1] = 0x1a;					\+	(guid)->Data4[2] = 0x00;					\+	(guid)->Data4[3] = 0xa0;					\+	(guid)->Data4[4] = 0xc9;					\+	(guid)->Data4[5] = 0x22;					\+	(guid)->Data4[6] = 0x31;					\+	(guid)->Data4[7] = 0x96;					\+}+#define EXTRACT_MMREG_MID(guid)						\+	(USHORT)((guid)->Data1 - 0xd5a47fa7)+#define DEFINE_MMREG_MID_GUID(id)					\+	0xd5a47fa7+(USHORT)(id),0x6d98,0x11d1,0xa2,0x1a,0x00,0xa0,0xc9,0x22,0x31,0x96++#define IS_COMPATIBLE_MMREG_MID(guid)					\+	(((guid)->Data1 >= 0xd5a47fa7) &&				\+	 ((guid)->Data1 < 0xd5a47fa7 + 0xffff) &&			\+	 ((guid)->Data2 == 0x6d98) &&					\+	 ((guid)->Data3 == 0x11d1) &&					\+	 ((guid)->Data4[0] == 0xa2) &&					\+	 ((guid)->Data4[1] == 0x1a) &&					\+	 ((guid)->Data4[2] == 0x00) &&					\+	 ((guid)->Data4[3] == 0xa0) &&					\+	 ((guid)->Data4[4] == 0xc9) &&					\+	 ((guid)->Data4[5] == 0x22) &&					\+	 ((guid)->Data4[6] == 0x31) &&					\+	 ((guid)->Data4[7] == 0x96) )+#endif /* INIT_MMREG_MID */++#ifndef INIT_MMREG_PID+#define INIT_MMREG_PID(guid,id)						\+{									\+	(guid)->Data1 = 0xe36dc2ac + (USHORT)(id);			\+	(guid)->Data2 = 0x6d9a;						\+	(guid)->Data3 = 0x11d1;						\+	(guid)->Data4[0] = 0xa2;					\+	(guid)->Data4[1] = 0x1a;					\+	(guid)->Data4[2] = 0x00;					\+	(guid)->Data4[3] = 0xa0;					\+	(guid)->Data4[4] = 0xc9;					\+	(guid)->Data4[5] = 0x22;					\+	(guid)->Data4[6] = 0x31;					\+	(guid)->Data4[7] = 0x96;					\+}+#define EXTRACT_MMREG_PID(guid)						\+	(USHORT)((guid)->Data1 - 0xe36dc2ac)+#define DEFINE_MMREG_PID_GUID(id)					\+	0xe36dc2ac+(USHORT)(id),0x6d9a,0x11d1,0xa2,0x1a,0x00,0xa0,0xc9,0x22,0x31,0x96++#define IS_COMPATIBLE_MMREG_PID(guid)					\+	(((guid)->Data1 >= 0xe36dc2ac) &&				\+	 ((guid)->Data1 < 0xe36dc2ac + 0xffff) &&			\+	 ((guid)->Data2 == 0x6d9a) &&					\+	 ((guid)->Data3 == 0x11d1) &&					\+	 ((guid)->Data4[0] == 0xa2) &&					\+	 ((guid)->Data4[1] == 0x1a) &&					\+	 ((guid)->Data4[2] == 0x00) &&					\+	 ((guid)->Data4[3] == 0xa0) &&					\+	 ((guid)->Data4[4] == 0xc9) &&					\+	 ((guid)->Data4[5] == 0x22) &&					\+	 ((guid)->Data4[6] == 0x31) &&					\+	 ((guid)->Data4[7] == 0x96) )+#endif /* INIT_MMREG_PID */++#define STATIC_KSDATAFORMAT_SUBTYPE_ANALOG				\+	0x6dba3190L,0x67bd,0x11cf,0xa0,0xf7,0x00,0x20,0xaf,0xd1,0x56,0xe4+DEFINE_GUIDSTRUCT("6dba3190-67bd-11cf-a0f7-0020afd156e4",KSDATAFORMAT_SUBTYPE_ANALOG);+#define KSDATAFORMAT_SUBTYPE_ANALOG DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_ANALOG)++#define STATIC_KSDATAFORMAT_SUBTYPE_PCM					\+	DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_PCM)+DEFINE_GUIDSTRUCT("00000001-0000-0010-8000-00aa00389b71",KSDATAFORMAT_SUBTYPE_PCM);+#define KSDATAFORMAT_SUBTYPE_PCM DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_PCM)++#ifdef _INC_MMREG+#define STATIC_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT				\+	DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_IEEE_FLOAT)+DEFINE_GUIDSTRUCT("00000003-0000-0010-8000-00aa00389b71",KSDATAFORMAT_SUBTYPE_IEEE_FLOAT);+#define KSDATAFORMAT_SUBTYPE_IEEE_FLOAT DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_IEEE_FLOAT)++#define STATIC_KSDATAFORMAT_SUBTYPE_DRM					\+	DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_DRM)+DEFINE_GUIDSTRUCT("00000009-0000-0010-8000-00aa00389b71",KSDATAFORMAT_SUBTYPE_DRM);+#define KSDATAFORMAT_SUBTYPE_DRM DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_DRM)++#define STATIC_KSDATAFORMAT_SUBTYPE_ALAW				\+	DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_ALAW)+DEFINE_GUIDSTRUCT("00000006-0000-0010-8000-00aa00389b71",KSDATAFORMAT_SUBTYPE_ALAW);+#define KSDATAFORMAT_SUBTYPE_ALAW DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_ALAW)++#define STATIC_KSDATAFORMAT_SUBTYPE_MULAW				\+	DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_MULAW)+DEFINE_GUIDSTRUCT("00000007-0000-0010-8000-00aa00389b71",KSDATAFORMAT_SUBTYPE_MULAW);+#define KSDATAFORMAT_SUBTYPE_MULAW DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MULAW)++#define STATIC_KSDATAFORMAT_SUBTYPE_ADPCM				\+	DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_ADPCM)+DEFINE_GUIDSTRUCT("00000002-0000-0010-8000-00aa00389b71",KSDATAFORMAT_SUBTYPE_ADPCM);+#define KSDATAFORMAT_SUBTYPE_ADPCM DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_ADPCM)++#define STATIC_KSDATAFORMAT_SUBTYPE_MPEG				\+	DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_MPEG)+DEFINE_GUIDSTRUCT("00000050-0000-0010-8000-00aa00389b71",KSDATAFORMAT_SUBTYPE_MPEG);+#define KSDATAFORMAT_SUBTYPE_MPEG DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG)+#endif /* _INC_MMREG */++#define STATIC_KSDATAFORMAT_SPECIFIER_VC_ID				\+	0xAD98D184L,0xAAC3,0x11D0,0xA4,0x1C,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("AD98D184-AAC3-11D0-A41C-00A0C9223196",KSDATAFORMAT_SPECIFIER_VC_ID);+#define KSDATAFORMAT_SPECIFIER_VC_ID DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_VC_ID)++#define STATIC_KSDATAFORMAT_SPECIFIER_WAVEFORMATEX			\+	0x05589f81L,0xc356,0x11ce,0xbf,0x01,0x00,0xaa,0x00,0x55,0x59,0x5a+DEFINE_GUIDSTRUCT("05589f81-c356-11ce-bf01-00aa0055595a",KSDATAFORMAT_SPECIFIER_WAVEFORMATEX);+#define KSDATAFORMAT_SPECIFIER_WAVEFORMATEX DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)++#define STATIC_KSDATAFORMAT_SPECIFIER_DSOUND				\+	0x518590a2L,0xa184,0x11d0,0x85,0x22,0x00,0xc0,0x4f,0xd9,0xba,0xf3+DEFINE_GUIDSTRUCT("518590a2-a184-11d0-8522-00c04fd9baf3",KSDATAFORMAT_SPECIFIER_DSOUND);+#define KSDATAFORMAT_SPECIFIER_DSOUND DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DSOUND)++#if defined(_INC_MMSYSTEM) || defined(_INC_MMREG)+#if !defined(PACK_PRAGMAS_NOT_SUPPORTED)+#include <pshpack1.h>+#endif+typedef struct {+  KSDATAFORMAT DataFormat;+  WAVEFORMATEX WaveFormatEx;+} KSDATAFORMAT_WAVEFORMATEX,*PKSDATAFORMAT_WAVEFORMATEX;++#ifndef _WAVEFORMATEXTENSIBLE_+#define _WAVEFORMATEXTENSIBLE_+typedef struct {+  WAVEFORMATEX Format;+  union {+    WORD wValidBitsPerSample;+    WORD wSamplesPerBlock;+    WORD wReserved;+  } Samples;+  DWORD dwChannelMask;++  GUID SubFormat;+} WAVEFORMATEXTENSIBLE,*PWAVEFORMATEXTENSIBLE;+#endif /* _WAVEFORMATEXTENSIBLE_ */++#if !defined(WAVE_FORMAT_EXTENSIBLE)+#define WAVE_FORMAT_EXTENSIBLE			0xFFFE+#endif++typedef struct {+  ULONG Flags;+  ULONG Control;+  WAVEFORMATEX WaveFormatEx;+} KSDSOUND_BUFFERDESC,*PKSDSOUND_BUFFERDESC;++typedef struct {+  KSDATAFORMAT DataFormat;+  KSDSOUND_BUFFERDESC BufferDesc;+} KSDATAFORMAT_DSOUND,*PKSDATAFORMAT_DSOUND;++#if !defined(PACK_PRAGMAS_NOT_SUPPORTED)+#include <poppack.h>+#endif+#endif /* defined(_INC_MMSYSTEM) || defined(_INC_MMREG) */++#define KSDSOUND_BUFFER_PRIMARY			0x00000001+#define KSDSOUND_BUFFER_STATIC			0x00000002+#define KSDSOUND_BUFFER_LOCHARDWARE		0x00000004+#define KSDSOUND_BUFFER_LOCSOFTWARE		0x00000008++#define KSDSOUND_BUFFER_CTRL_3D			0x00000001+#define KSDSOUND_BUFFER_CTRL_FREQUENCY		0x00000002+#define KSDSOUND_BUFFER_CTRL_PAN		0x00000004+#define KSDSOUND_BUFFER_CTRL_VOLUME		0x00000008+#define KSDSOUND_BUFFER_CTRL_POSITIONNOTIFY	0x00000010++typedef struct {+  DWORDLONG PlayOffset;+  DWORDLONG WriteOffset;+} KSAUDIO_POSITION,*PKSAUDIO_POSITION;++typedef struct _DS3DVECTOR {+  __MINGW_EXTENSION union {+    FLOAT x;+    FLOAT dvX;+  };+  __MINGW_EXTENSION union {+    FLOAT y;+    FLOAT dvY;+  };+  __MINGW_EXTENSION union {+    FLOAT z;+    FLOAT dvZ;+  };+} DS3DVECTOR,*PDS3DVECTOR;++#define STATIC_KSPROPSETID_DirectSound3DListener			\+	0x437b3414L,0xd060,0x11d0,0x85,0x83,0x00,0xc0,0x4f,0xd9,0xba,0xf3+DEFINE_GUIDSTRUCT("437b3414-d060-11d0-8583-00c04fd9baf3",KSPROPSETID_DirectSound3DListener);+#define KSPROPSETID_DirectSound3DListener DEFINE_GUIDNAMED(KSPROPSETID_DirectSound3DListener)++typedef enum {+  KSPROPERTY_DIRECTSOUND3DLISTENER_ALL,+  KSPROPERTY_DIRECTSOUND3DLISTENER_POSITION,+  KSPROPERTY_DIRECTSOUND3DLISTENER_VELOCITY,+  KSPROPERTY_DIRECTSOUND3DLISTENER_ORIENTATION,+  KSPROPERTY_DIRECTSOUND3DLISTENER_DISTANCEFACTOR,+  KSPROPERTY_DIRECTSOUND3DLISTENER_ROLLOFFFACTOR,+  KSPROPERTY_DIRECTSOUND3DLISTENER_DOPPLERFACTOR,+  KSPROPERTY_DIRECTSOUND3DLISTENER_BATCH,+  KSPROPERTY_DIRECTSOUND3DLISTENER_ALLOCATION+} KSPROPERTY_DIRECTSOUND3DLISTENER;++typedef struct {+  DS3DVECTOR Position;+  DS3DVECTOR Velocity;+  DS3DVECTOR OrientFront;+  DS3DVECTOR OrientTop;+  FLOAT DistanceFactor;+  FLOAT RolloffFactor;+  FLOAT DopplerFactor;+} KSDS3D_LISTENER_ALL,*PKSDS3D_LISTENER_ALL;++typedef struct {+  DS3DVECTOR Front;+  DS3DVECTOR Top;+} KSDS3D_LISTENER_ORIENTATION,*PKSDS3D_LISTENER_ORIENTATION;++#define STATIC_KSPROPSETID_DirectSound3DBuffer				\+	0x437b3411L,0xd060,0x11d0,0x85,0x83,0x00,0xc0,0x4f,0xd9,0xba,0xf3+DEFINE_GUIDSTRUCT("437b3411-d060-11d0-8583-00c04fd9baf3",KSPROPSETID_DirectSound3DBuffer);+#define KSPROPSETID_DirectSound3DBuffer DEFINE_GUIDNAMED(KSPROPSETID_DirectSound3DBuffer)++typedef enum {+  KSPROPERTY_DIRECTSOUND3DBUFFER_ALL,+  KSPROPERTY_DIRECTSOUND3DBUFFER_POSITION,+  KSPROPERTY_DIRECTSOUND3DBUFFER_VELOCITY,+  KSPROPERTY_DIRECTSOUND3DBUFFER_CONEANGLES,+  KSPROPERTY_DIRECTSOUND3DBUFFER_CONEORIENTATION,+  KSPROPERTY_DIRECTSOUND3DBUFFER_CONEOUTSIDEVOLUME,+  KSPROPERTY_DIRECTSOUND3DBUFFER_MINDISTANCE,+  KSPROPERTY_DIRECTSOUND3DBUFFER_MAXDISTANCE,+  KSPROPERTY_DIRECTSOUND3DBUFFER_MODE+} KSPROPERTY_DIRECTSOUND3DBUFFER;++typedef struct {+  DS3DVECTOR Position;+  DS3DVECTOR Velocity;+  ULONG InsideConeAngle;+  ULONG OutsideConeAngle;+  DS3DVECTOR ConeOrientation;+  LONG ConeOutsideVolume;+  FLOAT MinDistance;+  FLOAT MaxDistance;+  ULONG Mode;+} KSDS3D_BUFFER_ALL,*PKSDS3D_BUFFER_ALL;++typedef struct {+  ULONG InsideConeAngle;+  ULONG OutsideConeAngle;+} KSDS3D_BUFFER_CONE_ANGLES,*PKSDS3D_BUFFER_CONE_ANGLES;++#define KSAUDIO_STEREO_SPEAKER_GEOMETRY_HEADPHONE	(-1)+#define KSAUDIO_STEREO_SPEAKER_GEOMETRY_MIN		5+#define KSAUDIO_STEREO_SPEAKER_GEOMETRY_NARROW		10+#define KSAUDIO_STEREO_SPEAKER_GEOMETRY_WIDE		20+#define KSAUDIO_STEREO_SPEAKER_GEOMETRY_MAX		180++#define KSDSOUND_3D_MODE_NORMAL			0x00000000+#define KSDSOUND_3D_MODE_HEADRELATIVE		0x00000001+#define KSDSOUND_3D_MODE_DISABLE		0x00000002++#define KSDSOUND_BUFFER_CTRL_HRTF_3D		0x40000000++typedef struct {+  ULONG Size;+  ULONG Enabled;+  WINBOOL SwapChannels;+  WINBOOL ZeroAzimuth;+  WINBOOL CrossFadeOutput;+  ULONG FilterSize;+} KSDS3D_HRTF_PARAMS_MSG,*PKSDS3D_HRTF_PARAMS_MSG;++typedef enum {+  FULL_FILTER,+  LIGHT_FILTER,+  KSDS3D_FILTER_QUALITY_COUNT+} KSDS3D_HRTF_FILTER_QUALITY;++typedef struct {+  ULONG Size;+  KSDS3D_HRTF_FILTER_QUALITY Quality;+  FLOAT SampleRate;+  ULONG MaxFilterSize;+  ULONG FilterTransientMuteLength;+  ULONG FilterOverlapBufferLength;+  ULONG OutputOverlapBufferLength;+  ULONG Reserved;+} KSDS3D_HRTF_INIT_MSG,*PKSDS3D_HRTF_INIT_MSG;++typedef enum {+  FLOAT_COEFF,+  SHORT_COEFF,+  KSDS3D_COEFF_COUNT+} KSDS3D_HRTF_COEFF_FORMAT;++typedef enum {+  DIRECT_FORM,+  CASCADE_FORM,+  KSDS3D_FILTER_METHOD_COUNT+} KSDS3D_HRTF_FILTER_METHOD;++typedef enum {+  DS3D_HRTF_VERSION_1+} KSDS3D_HRTF_FILTER_VERSION;++typedef struct {+  KSDS3D_HRTF_FILTER_METHOD FilterMethod;+  KSDS3D_HRTF_COEFF_FORMAT CoeffFormat;+  KSDS3D_HRTF_FILTER_VERSION Version;+  ULONG Reserved;+} KSDS3D_HRTF_FILTER_FORMAT_MSG,*PKSDS3D_HRTF_FILTER_FORMAT_MSG;++#define STATIC_KSPROPSETID_Hrtf3d					\+	0xb66decb0L,0xa083,0x11d0,0x85,0x1e,0x00,0xc0,0x4f,0xd9,0xba,0xf3+DEFINE_GUIDSTRUCT("b66decb0-a083-11d0-851e-00c04fd9baf3",KSPROPSETID_Hrtf3d);+#define KSPROPSETID_Hrtf3d DEFINE_GUIDNAMED(KSPROPSETID_Hrtf3d)++typedef enum {+  KSPROPERTY_HRTF3D_PARAMS = 0,+  KSPROPERTY_HRTF3D_INITIALIZE,+  KSPROPERTY_HRTF3D_FILTER_FORMAT+} KSPROPERTY_HRTF3D;++typedef struct {+  LONG Channel;+  FLOAT VolSmoothScale;+  FLOAT TotalDryAttenuation;+  FLOAT TotalWetAttenuation;+  LONG SmoothFrequency;+  LONG Delay;+} KSDS3D_ITD_PARAMS,*PKSDS3D_ITD_PARAMS;++typedef struct {+  ULONG Enabled;+  KSDS3D_ITD_PARAMS LeftParams;+  KSDS3D_ITD_PARAMS RightParams;+  ULONG Reserved;+} KSDS3D_ITD_PARAMS_MSG,*PKSDS3D_ITD_PARAMS_MSG;++#define STATIC_KSPROPSETID_Itd3d					\+	0x6429f090L,0x9fd9,0x11d0,0xa7,0x5b,0x00,0xa0,0xc9,0x03,0x65,0xe3+DEFINE_GUIDSTRUCT("6429f090-9fd9-11d0-a75b-00a0c90365e3",KSPROPSETID_Itd3d);+#define KSPROPSETID_Itd3d DEFINE_GUIDNAMED(KSPROPSETID_Itd3d)++typedef enum {+  KSPROPERTY_ITD3D_PARAMS = 0+} KSPROPERTY_ITD3D;++typedef struct {+  KSDATARANGE DataRange;+  ULONG MaximumChannels;+  ULONG MinimumBitsPerSample;+  ULONG MaximumBitsPerSample;+  ULONG MinimumSampleFrequency;+  ULONG MaximumSampleFrequency;+} KSDATARANGE_AUDIO,*PKSDATARANGE_AUDIO;++#define STATIC_KSDATAFORMAT_SUBTYPE_RIFF				\+	0x4995DAEEL,0x9EE6,0x11D0,0xA4,0x0E,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("4995DAEE-9EE6-11D0-A40E-00A0C9223196",KSDATAFORMAT_SUBTYPE_RIFF);+#define KSDATAFORMAT_SUBTYPE_RIFF DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_RIFF)++#define STATIC_KSDATAFORMAT_SUBTYPE_RIFFWAVE				\+	0xe436eb8bL,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70+DEFINE_GUIDSTRUCT("e436eb8b-524f-11ce-9f53-0020af0ba770",KSDATAFORMAT_SUBTYPE_RIFFWAVE);+#define KSDATAFORMAT_SUBTYPE_RIFFWAVE DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_RIFFWAVE)++#define STATIC_KSPROPSETID_Bibliographic				\+	0x07BA150EL,0xE2B1,0x11D0,0xAC,0x17,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("07BA150E-E2B1-11D0-AC17-00A0C9223196",KSPROPSETID_Bibliographic);+#define KSPROPSETID_Bibliographic DEFINE_GUIDNAMED(KSPROPSETID_Bibliographic)++typedef enum {+  KSPROPERTY_BIBLIOGRAPHIC_LEADER = 'RDL ',+  KSPROPERTY_BIBLIOGRAPHIC_LCCN = '010 ',+  KSPROPERTY_BIBLIOGRAPHIC_ISBN = '020 ',+  KSPROPERTY_BIBLIOGRAPHIC_ISSN = '220 ',+  KSPROPERTY_BIBLIOGRAPHIC_CATALOGINGSOURCE = '040 ',+  KSPROPERTY_BIBLIOGRAPHIC_MAINPERSONALNAME = '001 ',+  KSPROPERTY_BIBLIOGRAPHIC_MAINCORPORATEBODY = '011 ',+  KSPROPERTY_BIBLIOGRAPHIC_MAINMEETINGNAME = '111 ',+  KSPROPERTY_BIBLIOGRAPHIC_MAINUNIFORMTITLE = '031 ',+  KSPROPERTY_BIBLIOGRAPHIC_UNIFORMTITLE = '042 ',+  KSPROPERTY_BIBLIOGRAPHIC_TITLESTATEMENT = '542 ',+  KSPROPERTY_BIBLIOGRAPHIC_VARYINGFORMTITLE = '642 ',+  KSPROPERTY_BIBLIOGRAPHIC_PUBLICATION = '062 ',+  KSPROPERTY_BIBLIOGRAPHIC_PHYSICALDESCRIPTION = '003 ',+  KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYTITLE = '044 ',+  KSPROPERTY_BIBLIOGRAPHIC_SERIESSTATEMENT = '094 ',+  KSPROPERTY_BIBLIOGRAPHIC_GENERALNOTE = '005 ',+  KSPROPERTY_BIBLIOGRAPHIC_BIBLIOGRAPHYNOTE = '405 ',+  KSPROPERTY_BIBLIOGRAPHIC_CONTENTSNOTE = '505 ',+  KSPROPERTY_BIBLIOGRAPHIC_CREATIONCREDIT = '805 ',+  KSPROPERTY_BIBLIOGRAPHIC_CITATION = '015 ',+  KSPROPERTY_BIBLIOGRAPHIC_PARTICIPANT = '115 ',+  KSPROPERTY_BIBLIOGRAPHIC_SUMMARY = '025 ',+  KSPROPERTY_BIBLIOGRAPHIC_TARGETAUDIENCE = '125 ',+  KSPROPERTY_BIBLIOGRAPHIC_ADDEDFORMAVAILABLE = '035 ',+  KSPROPERTY_BIBLIOGRAPHIC_SYSTEMDETAILS = '835 ',+  KSPROPERTY_BIBLIOGRAPHIC_AWARDS = '685 ',+  KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYPERSONALNAME = '006 ',+  KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYTOPICALTERM = '056 ',+  KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYGEOGRAPHIC = '156 ',+  KSPROPERTY_BIBLIOGRAPHIC_INDEXTERMGENRE = '556 ',+  KSPROPERTY_BIBLIOGRAPHIC_INDEXTERMCURRICULUM = '856 ',+  KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYUNIFORMTITLE = '037 ',+  KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYRELATED = '047 ',+  KSPROPERTY_BIBLIOGRAPHIC_SERIESSTATEMENTPERSONALNAME = '008 ',+  KSPROPERTY_BIBLIOGRAPHIC_SERIESSTATEMENTUNIFORMTITLE = '038 '+} KSPROPERTY_BIBLIOGRAPHIC;++#define STATIC_KSPROPSETID_TopologyNode					\+	0x45FFAAA1L,0x6E1B,0x11D0,0xBC,0xF2,0x44,0x45,0x53,0x54,0x00,0x00+DEFINE_GUIDSTRUCT("45FFAAA1-6E1B-11D0-BCF2-444553540000",KSPROPSETID_TopologyNode);+#define KSPROPSETID_TopologyNode DEFINE_GUIDNAMED(KSPROPSETID_TopologyNode)++typedef enum {+  KSPROPERTY_TOPOLOGYNODE_ENABLE = 1,+  KSPROPERTY_TOPOLOGYNODE_RESET+} KSPROPERTY_TOPOLOGYNODE;++#define STATIC_KSPROPSETID_RtAudio					\+	0xa855a48c,0x2f78,0x4729,0x90,0x51,0x19,0x68,0x74,0x6b,0x9e,0xef+DEFINE_GUIDSTRUCT("A855A48C-2F78-4729-9051-1968746B9EEF",KSPROPSETID_RtAudio);+#define KSPROPSETID_RtAudio DEFINE_GUIDNAMED(KSPROPSETID_RtAudio)++typedef enum {+  KSPROPERTY_RTAUDIO_GETPOSITIONFUNCTION,+  /* Added for Vista and later */+  KSPROPERTY_RTAUDIO_BUFFER,+  KSPROPERTY_RTAUDIO_HWLATENCY,+  KSPROPERTY_RTAUDIO_POSITIONREGISTER,+  KSPROPERTY_RTAUDIO_CLOCKREGISTER,+  KSPROPERTY_RTAUDIO_BUFFER_WITH_NOTIFICATION,+  KSPROPERTY_RTAUDIO_REGISTER_NOTIFICATION_EVENT,+  KSPROPERTY_RTAUDIO_UNREGISTER_NOTIFICATION_EVENT+} KSPROPERTY_RTAUDIO;++#define STATIC_KSPROPSETID_DrmAudioStream				\+	0x2f2c8ddd,0x4198,0x4fac,0xba,0x29,0x61,0xbb,0x5,0xb7,0xde,0x6+DEFINE_GUIDSTRUCT("2F2C8DDD-4198-4fac-BA29-61BB05B7DE06",KSPROPSETID_DrmAudioStream);+#define KSPROPSETID_DrmAudioStream DEFINE_GUIDNAMED(KSPROPSETID_DrmAudioStream)++typedef enum {+  KSPROPERTY_DRMAUDIOSTREAM_CONTENTID+} KSPROPERTY_DRMAUDIOSTREAM;++#define STATIC_KSPROPSETID_Audio					\+	0x45FFAAA0L,0x6E1B,0x11D0,0xBC,0xF2,0x44,0x45,0x53,0x54,0x00,0x00+DEFINE_GUIDSTRUCT("45FFAAA0-6E1B-11D0-BCF2-444553540000",KSPROPSETID_Audio);+#define KSPROPSETID_Audio DEFINE_GUIDNAMED(KSPROPSETID_Audio)++typedef enum {+  KSPROPERTY_AUDIO_LATENCY = 1,+  KSPROPERTY_AUDIO_COPY_PROTECTION,+  KSPROPERTY_AUDIO_CHANNEL_CONFIG,+  KSPROPERTY_AUDIO_VOLUMELEVEL,+  KSPROPERTY_AUDIO_POSITION,+  KSPROPERTY_AUDIO_DYNAMIC_RANGE,+  KSPROPERTY_AUDIO_QUALITY,+  KSPROPERTY_AUDIO_SAMPLING_RATE,+  KSPROPERTY_AUDIO_DYNAMIC_SAMPLING_RATE,+  KSPROPERTY_AUDIO_MIX_LEVEL_TABLE,+  KSPROPERTY_AUDIO_MIX_LEVEL_CAPS,+  KSPROPERTY_AUDIO_MUX_SOURCE,+  KSPROPERTY_AUDIO_MUTE,+  KSPROPERTY_AUDIO_BASS,+  KSPROPERTY_AUDIO_MID,+  KSPROPERTY_AUDIO_TREBLE,+  KSPROPERTY_AUDIO_BASS_BOOST,+  KSPROPERTY_AUDIO_EQ_LEVEL,+  KSPROPERTY_AUDIO_NUM_EQ_BANDS,+  KSPROPERTY_AUDIO_EQ_BANDS,+  KSPROPERTY_AUDIO_AGC,+  KSPROPERTY_AUDIO_DELAY,+  KSPROPERTY_AUDIO_LOUDNESS,+  KSPROPERTY_AUDIO_WIDE_MODE,+  KSPROPERTY_AUDIO_WIDENESS,+  KSPROPERTY_AUDIO_REVERB_LEVEL,+  KSPROPERTY_AUDIO_CHORUS_LEVEL,+  KSPROPERTY_AUDIO_DEV_SPECIFIC,+  KSPROPERTY_AUDIO_DEMUX_DEST,+  KSPROPERTY_AUDIO_STEREO_ENHANCE,+  KSPROPERTY_AUDIO_MANUFACTURE_GUID,+  KSPROPERTY_AUDIO_PRODUCT_GUID,+  KSPROPERTY_AUDIO_CPU_RESOURCES,+  KSPROPERTY_AUDIO_STEREO_SPEAKER_GEOMETRY,+  KSPROPERTY_AUDIO_SURROUND_ENCODE,+  KSPROPERTY_AUDIO_3D_INTERFACE,+  KSPROPERTY_AUDIO_PEAKMETER,+  KSPROPERTY_AUDIO_ALGORITHM_INSTANCE,+  KSPROPERTY_AUDIO_FILTER_STATE,+  KSPROPERTY_AUDIO_PREFERRED_STATUS+} KSPROPERTY_AUDIO;++#define KSAUDIO_QUALITY_WORST			0x0+#define KSAUDIO_QUALITY_PC			0x1+#define KSAUDIO_QUALITY_BASIC			0x2+#define KSAUDIO_QUALITY_ADVANCED		0x3++#define KSAUDIO_CPU_RESOURCES_NOT_HOST_CPU	0x00000000+#define KSAUDIO_CPU_RESOURCES_HOST_CPU		0x7FFFFFFF++typedef struct {+  WINBOOL fCopyrighted;+  WINBOOL fOriginal;+} KSAUDIO_COPY_PROTECTION,*PKSAUDIO_COPY_PROTECTION;++typedef struct {+  LONG ActiveSpeakerPositions;+} KSAUDIO_CHANNEL_CONFIG,*PKSAUDIO_CHANNEL_CONFIG;++#define SPEAKER_FRONT_LEFT		0x1+#define SPEAKER_FRONT_RIGHT		0x2+#define SPEAKER_FRONT_CENTER		0x4+#define SPEAKER_LOW_FREQUENCY		0x8+#define SPEAKER_BACK_LEFT		0x10+#define SPEAKER_BACK_RIGHT		0x20+#define SPEAKER_FRONT_LEFT_OF_CENTER	0x40+#define SPEAKER_FRONT_RIGHT_OF_CENTER	0x80+#define SPEAKER_BACK_CENTER		0x100+#define SPEAKER_SIDE_LEFT		0x200+#define SPEAKER_SIDE_RIGHT		0x400+#define SPEAKER_TOP_CENTER		0x800+#define SPEAKER_TOP_FRONT_LEFT		0x1000+#define SPEAKER_TOP_FRONT_CENTER	0x2000+#define SPEAKER_TOP_FRONT_RIGHT		0x4000+#define SPEAKER_TOP_BACK_LEFT		0x8000+#define SPEAKER_TOP_BACK_CENTER		0x10000+#define SPEAKER_TOP_BACK_RIGHT		0x20000++#define SPEAKER_RESERVED		0x7FFC0000++#define SPEAKER_ALL			0x80000000++#define KSAUDIO_SPEAKER_DIRECTOUT	0+#define KSAUDIO_SPEAKER_MONO		(SPEAKER_FRONT_CENTER)+#define KSAUDIO_SPEAKER_STEREO		(SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT)+#define KSAUDIO_SPEAKER_QUAD		(SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT |		\+					 SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT)+#define KSAUDIO_SPEAKER_SURROUND	(SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT |		\+					 SPEAKER_FRONT_CENTER | SPEAKER_BACK_CENTER)+#define KSAUDIO_SPEAKER_5POINT1		(SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT |		\+					 SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY |		\+					 SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT)+#define KSAUDIO_SPEAKER_7POINT1		(SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT |		\+					 SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY |		\+					 SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT |		\+					 SPEAKER_FRONT_LEFT_OF_CENTER | SPEAKER_FRONT_RIGHT_OF_CENTER)+#define KSAUDIO_SPEAKER_5POINT1_SURROUND (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT |		\+					  SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY |	\+					  SPEAKER_SIDE_LEFT | SPEAKER_SIDE_RIGHT)+#define KSAUDIO_SPEAKER_7POINT1_SURROUND (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT |		\+					  SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY |	\+					  SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT |		\+					  SPEAKER_SIDE_LEFT | SPEAKER_SIDE_RIGHT)++#define KSAUDIO_SPEAKER_5POINT1_BACK	KSAUDIO_SPEAKER_5POINT1+#define KSAUDIO_SPEAKER_7POINT1_WIDE	KSAUDIO_SPEAKER_7POINT1++#define KSAUDIO_SPEAKER_GROUND_FRONT_LEFT	SPEAKER_FRONT_LEFT+#define KSAUDIO_SPEAKER_GROUND_FRONT_CENTER	SPEAKER_FRONT_CENTER+#define KSAUDIO_SPEAKER_GROUND_FRONT_RIGHT	SPEAKER_FRONT_RIGHT+#define KSAUDIO_SPEAKER_GROUND_REAR_LEFT	SPEAKER_BACK_LEFT+#define KSAUDIO_SPEAKER_GROUND_REAR_RIGHT	SPEAKER_BACK_RIGHT+#define KSAUDIO_SPEAKER_TOP_MIDDLE		SPEAKER_TOP_CENTER+#define KSAUDIO_SPEAKER_SUPER_WOOFER		SPEAKER_LOW_FREQUENCY++typedef struct {+  ULONG QuietCompression;+  ULONG LoudCompression;+} KSAUDIO_DYNAMIC_RANGE,*PKSAUDIO_DYNAMIC_RANGE;++typedef struct {+  WINBOOL Mute;+  LONG Level;+} KSAUDIO_MIXLEVEL,*PKSAUDIO_MIXLEVEL;++typedef struct {+  WINBOOL Mute;+  LONG Minimum;+  LONG Maximum;+  LONG Reset;+} KSAUDIO_MIX_CAPS,*PKSAUDIO_MIX_CAPS;++typedef struct {+  ULONG InputChannels;+  ULONG OutputChannels;+  KSAUDIO_MIX_CAPS Capabilities[1];+} KSAUDIO_MIXCAP_TABLE,*PKSAUDIO_MIXCAP_TABLE;++typedef enum {+  SE_TECH_NONE,+  SE_TECH_ANALOG_DEVICES_PHAT,+  SE_TECH_CREATIVE,+  SE_TECH_NATIONAL_SEMI,+  SE_TECH_YAMAHA_YMERSION,+  SE_TECH_BBE,+  SE_TECH_CRYSTAL_SEMI,+  SE_TECH_QSOUND_QXPANDER,+  SE_TECH_SPATIALIZER,+  SE_TECH_SRS,+  SE_TECH_PLATFORM_TECH,+  SE_TECH_AKM,+  SE_TECH_AUREAL,+  SE_TECH_AZTECH,+  SE_TECH_BINAURA,+  SE_TECH_ESS_TECH,+  SE_TECH_HARMAN_VMAX,+  SE_TECH_NVIDEA,+  SE_TECH_PHILIPS_INCREDIBLE,+  SE_TECH_TEXAS_INST,+  SE_TECH_VLSI_TECH+} SE_TECHNIQUE;++typedef struct {+  SE_TECHNIQUE Technique;+  ULONG Center;+  ULONG Depth;+  ULONG Reserved;+} KSAUDIO_STEREO_ENHANCE,*PKSAUDIO_STEREO_ENHANCE;++typedef enum {+  KSPROPERTY_SYSAUDIO_NORMAL_DEFAULT = 0,+  KSPROPERTY_SYSAUDIO_PLAYBACK_DEFAULT,+  KSPROPERTY_SYSAUDIO_RECORD_DEFAULT,+  KSPROPERTY_SYSAUDIO_MIDI_DEFAULT,+  KSPROPERTY_SYSAUDIO_MIXER_DEFAULT+} KSPROPERTY_SYSAUDIO_DEFAULT_TYPE;++typedef struct {+  WINBOOL Enable;+  KSPROPERTY_SYSAUDIO_DEFAULT_TYPE DeviceType;+  ULONG Flags;+  ULONG Reserved;+} KSAUDIO_PREFERRED_STATUS,*PKSAUDIO_PREFERRED_STATUS;++#define STATIC_KSNODETYPE_DAC						\+	0x507AE360L,0xC554,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1+DEFINE_GUIDSTRUCT("507AE360-C554-11D0-8A2B-00A0C9255AC1",KSNODETYPE_DAC);+#define KSNODETYPE_DAC DEFINE_GUIDNAMED(KSNODETYPE_DAC)++#define STATIC_KSNODETYPE_ADC						\+	0x4D837FE0L,0xC555,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1+DEFINE_GUIDSTRUCT("4D837FE0-C555-11D0-8A2B-00A0C9255AC1",KSNODETYPE_ADC);+#define KSNODETYPE_ADC DEFINE_GUIDNAMED(KSNODETYPE_ADC)++#define STATIC_KSNODETYPE_SRC						\+	0x9DB7B9E0L,0xC555,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1+DEFINE_GUIDSTRUCT("9DB7B9E0-C555-11D0-8A2B-00A0C9255AC1",KSNODETYPE_SRC);+#define KSNODETYPE_SRC DEFINE_GUIDNAMED(KSNODETYPE_SRC)++#define STATIC_KSNODETYPE_SUPERMIX					\+	0xE573ADC0L,0xC555,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1+DEFINE_GUIDSTRUCT("E573ADC0-C555-11D0-8A2B-00A0C9255AC1",KSNODETYPE_SUPERMIX);+#define KSNODETYPE_SUPERMIX DEFINE_GUIDNAMED(KSNODETYPE_SUPERMIX)++#define STATIC_KSNODETYPE_MUX						\+	0x2CEAF780L,0xC556,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1+DEFINE_GUIDSTRUCT("2CEAF780-C556-11D0-8A2B-00A0C9255AC1",KSNODETYPE_MUX);+#define KSNODETYPE_MUX DEFINE_GUIDNAMED(KSNODETYPE_MUX)++#define STATIC_KSNODETYPE_DEMUX						\+	0xC0EB67D4L,0xE807,0x11D0,0x95,0x8A,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("C0EB67D4-E807-11D0-958A-00C04FB925D3",KSNODETYPE_DEMUX);+#define KSNODETYPE_DEMUX DEFINE_GUIDNAMED(KSNODETYPE_DEMUX)++#define STATIC_KSNODETYPE_SUM						\+	0xDA441A60L,0xC556,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1+DEFINE_GUIDSTRUCT("DA441A60-C556-11D0-8A2B-00A0C9255AC1",KSNODETYPE_SUM);+#define KSNODETYPE_SUM DEFINE_GUIDNAMED(KSNODETYPE_SUM)++#define STATIC_KSNODETYPE_MUTE						\+	0x02B223C0L,0xC557,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1+DEFINE_GUIDSTRUCT("02B223C0-C557-11D0-8A2B-00A0C9255AC1",KSNODETYPE_MUTE);+#define KSNODETYPE_MUTE DEFINE_GUIDNAMED(KSNODETYPE_MUTE)++#define STATIC_KSNODETYPE_VOLUME					\+	0x3A5ACC00L,0xC557,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1+DEFINE_GUIDSTRUCT("3A5ACC00-C557-11D0-8A2B-00A0C9255AC1",KSNODETYPE_VOLUME);+#define KSNODETYPE_VOLUME DEFINE_GUIDNAMED(KSNODETYPE_VOLUME)++#define STATIC_KSNODETYPE_TONE						\+	0x7607E580L,0xC557,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1+DEFINE_GUIDSTRUCT("7607E580-C557-11D0-8A2B-00A0C9255AC1",KSNODETYPE_TONE);+#define KSNODETYPE_TONE DEFINE_GUIDNAMED(KSNODETYPE_TONE)++#define STATIC_KSNODETYPE_EQUALIZER					\+	0x9D41B4A0L,0xC557,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1+DEFINE_GUIDSTRUCT("9D41B4A0-C557-11D0-8A2B-00A0C9255AC1",KSNODETYPE_EQUALIZER);+#define KSNODETYPE_EQUALIZER DEFINE_GUIDNAMED(KSNODETYPE_EQUALIZER)++#define STATIC_KSNODETYPE_AGC						\+	0xE88C9BA0L,0xC557,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1+DEFINE_GUIDSTRUCT("E88C9BA0-C557-11D0-8A2B-00A0C9255AC1",KSNODETYPE_AGC);+#define KSNODETYPE_AGC DEFINE_GUIDNAMED(KSNODETYPE_AGC)++#define STATIC_KSNODETYPE_NOISE_SUPPRESS				\+	0xe07f903f,0x62fd,0x4e60,0x8c,0xdd,0xde,0xa7,0x23,0x66,0x65,0xb5+DEFINE_GUIDSTRUCT("E07F903F-62FD-4e60-8CDD-DEA7236665B5",KSNODETYPE_NOISE_SUPPRESS);+#define KSNODETYPE_NOISE_SUPPRESS DEFINE_GUIDNAMED(KSNODETYPE_NOISE_SUPPRESS)++#define STATIC_KSNODETYPE_DELAY						\+	0x144981E0L,0xC558,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1+DEFINE_GUIDSTRUCT("144981E0-C558-11D0-8A2B-00A0C9255AC1",KSNODETYPE_DELAY);+#define KSNODETYPE_DELAY DEFINE_GUIDNAMED(KSNODETYPE_DELAY)++#define STATIC_KSNODETYPE_LOUDNESS					\+	0x41887440L,0xC558,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1+DEFINE_GUIDSTRUCT("41887440-C558-11D0-8A2B-00A0C9255AC1",KSNODETYPE_LOUDNESS);+#define KSNODETYPE_LOUDNESS DEFINE_GUIDNAMED(KSNODETYPE_LOUDNESS)++#define STATIC_KSNODETYPE_PROLOGIC_DECODER				\+	0x831C2C80L,0xC558,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1+DEFINE_GUIDSTRUCT("831C2C80-C558-11D0-8A2B-00A0C9255AC1",KSNODETYPE_PROLOGIC_DECODER);+#define KSNODETYPE_PROLOGIC_DECODER DEFINE_GUIDNAMED(KSNODETYPE_PROLOGIC_DECODER)++#define STATIC_KSNODETYPE_STEREO_WIDE					\+	0xA9E69800L,0xC558,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1+DEFINE_GUIDSTRUCT("A9E69800-C558-11D0-8A2B-00A0C9255AC1",KSNODETYPE_STEREO_WIDE);+#define KSNODETYPE_STEREO_WIDE DEFINE_GUIDNAMED(KSNODETYPE_STEREO_WIDE)++#define STATIC_KSNODETYPE_STEREO_ENHANCE				\+	0xAF6878ACL,0xE83F,0x11D0,0x95,0x8A,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("AF6878AC-E83F-11D0-958A-00C04FB925D3",KSNODETYPE_STEREO_ENHANCE);+#define KSNODETYPE_STEREO_ENHANCE DEFINE_GUIDNAMED(KSNODETYPE_STEREO_ENHANCE)++#define STATIC_KSNODETYPE_REVERB					\+	0xEF0328E0L,0xC558,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1+DEFINE_GUIDSTRUCT("EF0328E0-C558-11D0-8A2B-00A0C9255AC1",KSNODETYPE_REVERB);+#define KSNODETYPE_REVERB DEFINE_GUIDNAMED(KSNODETYPE_REVERB)++#define STATIC_KSNODETYPE_CHORUS					\+	0x20173F20L,0xC559,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1+DEFINE_GUIDSTRUCT("20173F20-C559-11D0-8A2B-00A0C9255AC1",KSNODETYPE_CHORUS);+#define KSNODETYPE_CHORUS DEFINE_GUIDNAMED(KSNODETYPE_CHORUS)++#define STATIC_KSNODETYPE_3D_EFFECTS					\+	0x55515860L,0xC559,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1+DEFINE_GUIDSTRUCT("55515860-C559-11D0-8A2B-00A0C9255AC1",KSNODETYPE_3D_EFFECTS);+#define KSNODETYPE_3D_EFFECTS DEFINE_GUIDNAMED(KSNODETYPE_3D_EFFECTS)++#define STATIC_KSNODETYPE_ACOUSTIC_ECHO_CANCEL STATIC_KSCATEGORY_ACOUSTIC_ECHO_CANCEL+#define KSNODETYPE_ACOUSTIC_ECHO_CANCEL KSCATEGORY_ACOUSTIC_ECHO_CANCEL++#define STATIC_KSALGORITHMINSTANCE_SYSTEM_ACOUSTIC_ECHO_CANCEL		\+	0x1c22c56dL,0x9879,0x4f5b,0xa3,0x89,0x27,0x99,0x6d,0xdc,0x28,0x10+DEFINE_GUIDSTRUCT("1C22C56D-9879-4f5b-A389-27996DDC2810",KSALGORITHMINSTANCE_SYSTEM_ACOUSTIC_ECHO_CANCEL);+#define KSALGORITHMINSTANCE_SYSTEM_ACOUSTIC_ECHO_CANCEL DEFINE_GUIDNAMED(KSALGORITHMINSTANCE_SYSTEM_ACOUSTIC_ECHO_CANCEL)++#define STATIC_KSALGORITHMINSTANCE_SYSTEM_NOISE_SUPPRESS		\+	0x5ab0882eL,0x7274,0x4516,0x87,0x7d,0x4e,0xee,0x99,0xba,0x4f,0xd0+DEFINE_GUIDSTRUCT("5AB0882E-7274-4516-877D-4EEE99BA4FD0",KSALGORITHMINSTANCE_SYSTEM_NOISE_SUPPRESS);+#define KSALGORITHMINSTANCE_SYSTEM_NOISE_SUPPRESS DEFINE_GUIDNAMED(KSALGORITHMINSTANCE_SYSTEM_NOISE_SUPPRESS)++#define STATIC_KSALGORITHMINSTANCE_SYSTEM_AGC				\+	0x950e55b9L,0x877c,0x4c67,0xbe,0x8,0xe4,0x7b,0x56,0x11,0x13,0xa+DEFINE_GUIDSTRUCT("950E55B9-877C-4c67-BE08-E47B5611130A",KSALGORITHMINSTANCE_SYSTEM_AGC);+#define KSALGORITHMINSTANCE_SYSTEM_AGC DEFINE_GUIDNAMED(KSALGORITHMINSTANCE_SYSTEM_AGC)++#define STATIC_KSALGORITHMINSTANCE_SYSTEM_MICROPHONE_ARRAY_PROCESSOR	\+	0xB6F5A0A0L,0x9E61,0x4F8C,0x91,0xE3,0x76,0xCF,0xF,0x3C,0x47,0x1F+DEFINE_GUIDSTRUCT("B6F5A0A0-9E61-4f8c-91E3-76CF0F3C471F",KSALGORITHMINSTANCE_SYSTEM_MICROPHONE_ARRAY_PROCESSOR);+#define KSALGORITHMINSTANCE_SYSTEM_MICROPHONE_ARRAY_PROCESSOR DEFINE_GUIDNAMED(KSALGORITHMINSTANCE_SYSTEM_MICROPHONE_ARRAY_PROCESSOR)++#define STATIC_KSNODETYPE_MICROPHONE_ARRAY_PROCESSOR STATIC_KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR+#define KSNODETYPE_MICROPHONE_ARRAY_PROCESSOR KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR++#define STATIC_KSNODETYPE_DEV_SPECIFIC					\+	0x941C7AC0L,0xC559,0x11D0,0x8A,0x2B,0x00,0xA0,0xC9,0x25,0x5A,0xC1+DEFINE_GUIDSTRUCT("941C7AC0-C559-11D0-8A2B-00A0C9255AC1",KSNODETYPE_DEV_SPECIFIC);+#define KSNODETYPE_DEV_SPECIFIC DEFINE_GUIDNAMED(KSNODETYPE_DEV_SPECIFIC)++#define STATIC_KSNODETYPE_PROLOGIC_ENCODER				\+	0x8074C5B2L,0x3C66,0x11D2,0xB4,0x5A,0x30,0x78,0x30,0x2C,0x20,0x30+DEFINE_GUIDSTRUCT("8074C5B2-3C66-11D2-B45A-3078302C2030",KSNODETYPE_PROLOGIC_ENCODER);+#define KSNODETYPE_PROLOGIC_ENCODER DEFINE_GUIDNAMED(KSNODETYPE_PROLOGIC_ENCODER)+#define KSNODETYPE_SURROUND_ENCODER KSNODETYPE_PROLOGIC_ENCODER++#define STATIC_KSNODETYPE_PEAKMETER					\+	0xa085651eL,0x5f0d,0x4b36,0xa8,0x69,0xd1,0x95,0xd6,0xab,0x4b,0x9e+DEFINE_GUIDSTRUCT("A085651E-5F0D-4b36-A869-D195D6AB4B9E",KSNODETYPE_PEAKMETER);+#define KSNODETYPE_PEAKMETER DEFINE_GUIDNAMED(KSNODETYPE_PEAKMETER)++#define STATIC_KSAUDFNAME_BASS						\+	0x185FEDE0L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEDE0-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_BASS);+#define KSAUDFNAME_BASS DEFINE_GUIDNAMED(KSAUDFNAME_BASS)++#define STATIC_KSAUDFNAME_TREBLE					\+	0x185FEDE1L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEDE1-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_TREBLE);+#define KSAUDFNAME_TREBLE DEFINE_GUIDNAMED(KSAUDFNAME_TREBLE)++#define STATIC_KSAUDFNAME_3D_STEREO					\+	0x185FEDE2L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEDE2-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_3D_STEREO);+#define KSAUDFNAME_3D_STEREO DEFINE_GUIDNAMED(KSAUDFNAME_3D_STEREO)++#define STATIC_KSAUDFNAME_MASTER_VOLUME					\+	0x185FEDE3L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEDE3-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_MASTER_VOLUME);+#define KSAUDFNAME_MASTER_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MASTER_VOLUME)++#define STATIC_KSAUDFNAME_MASTER_MUTE					\+	0x185FEDE4L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEDE4-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_MASTER_MUTE);+#define KSAUDFNAME_MASTER_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MASTER_MUTE)++#define STATIC_KSAUDFNAME_WAVE_VOLUME					\+	0x185FEDE5L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEDE5-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_WAVE_VOLUME);+#define KSAUDFNAME_WAVE_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_WAVE_VOLUME)++#define STATIC_KSAUDFNAME_WAVE_MUTE					\+	0x185FEDE6L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEDE6-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_WAVE_MUTE);+#define KSAUDFNAME_WAVE_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_WAVE_MUTE)++#define STATIC_KSAUDFNAME_MIDI_VOLUME					\+	0x185FEDE7L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEDE7-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_MIDI_VOLUME);+#define KSAUDFNAME_MIDI_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MIDI_VOLUME)++#define STATIC_KSAUDFNAME_MIDI_MUTE					\+	0x185FEDE8L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEDE8-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_MIDI_MUTE);+#define KSAUDFNAME_MIDI_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MIDI_MUTE)++#define STATIC_KSAUDFNAME_CD_VOLUME					\+	0x185FEDE9L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEDE9-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_CD_VOLUME);+#define KSAUDFNAME_CD_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_CD_VOLUME)++#define STATIC_KSAUDFNAME_CD_MUTE					\+	0x185FEDEAL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEDEA-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_CD_MUTE);+#define KSAUDFNAME_CD_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_CD_MUTE)++#define STATIC_KSAUDFNAME_LINE_VOLUME					\+	0x185FEDEBL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEDEB-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_LINE_VOLUME);+#define KSAUDFNAME_LINE_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_LINE_VOLUME)++#define STATIC_KSAUDFNAME_LINE_MUTE					\+	0x185FEDECL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEDEC-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_LINE_MUTE);+#define KSAUDFNAME_LINE_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_LINE_MUTE)++#define STATIC_KSAUDFNAME_MIC_VOLUME					\+	0x185FEDEDL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEDED-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_MIC_VOLUME);+#define KSAUDFNAME_MIC_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MIC_VOLUME)++#define STATIC_KSAUDFNAME_MIC_MUTE					\+	0x185FEDEEL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEDEE-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_MIC_MUTE);+#define KSAUDFNAME_MIC_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MIC_MUTE)++#define STATIC_KSAUDFNAME_RECORDING_SOURCE				\+	0x185FEDEFL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEDEF-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_RECORDING_SOURCE);+#define KSAUDFNAME_RECORDING_SOURCE DEFINE_GUIDNAMED(KSAUDFNAME_RECORDING_SOURCE)++#define STATIC_KSAUDFNAME_PC_SPEAKER_VOLUME				\+	0x185FEDF0L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEDF0-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_PC_SPEAKER_VOLUME);+#define KSAUDFNAME_PC_SPEAKER_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_PC_SPEAKER_VOLUME)++#define STATIC_KSAUDFNAME_PC_SPEAKER_MUTE				\+	0x185FEDF1L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEDF1-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_PC_SPEAKER_MUTE);+#define KSAUDFNAME_PC_SPEAKER_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_PC_SPEAKER_MUTE)++#define STATIC_KSAUDFNAME_MIDI_IN_VOLUME				\+	0x185FEDF2L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEDF2-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_MIDI_IN_VOLUME);+#define KSAUDFNAME_MIDI_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MIDI_IN_VOLUME)++#define STATIC_KSAUDFNAME_CD_IN_VOLUME					\+	0x185FEDF3L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEDF3-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_CD_IN_VOLUME);+#define KSAUDFNAME_CD_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_CD_IN_VOLUME)++#define STATIC_KSAUDFNAME_LINE_IN_VOLUME				\+	0x185FEDF4L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEDF4-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_LINE_IN_VOLUME);+#define KSAUDFNAME_LINE_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_LINE_IN_VOLUME)++#define STATIC_KSAUDFNAME_MIC_IN_VOLUME					\+	0x185FEDF5L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEDF5-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_MIC_IN_VOLUME);+#define KSAUDFNAME_MIC_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MIC_IN_VOLUME)++#define STATIC_KSAUDFNAME_WAVE_IN_VOLUME				\+	0x185FEDF6L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEDF6-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_WAVE_IN_VOLUME);+#define KSAUDFNAME_WAVE_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_WAVE_IN_VOLUME)++#define STATIC_KSAUDFNAME_VOLUME_CONTROL				\+	0x185FEDF7L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEDF7-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_VOLUME_CONTROL);+#define KSAUDFNAME_VOLUME_CONTROL DEFINE_GUIDNAMED(KSAUDFNAME_VOLUME_CONTROL)++#define STATIC_KSAUDFNAME_MIDI						\+	0x185FEDF8L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEDF8-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_MIDI);+#define KSAUDFNAME_MIDI DEFINE_GUIDNAMED(KSAUDFNAME_MIDI)++#define STATIC_KSAUDFNAME_LINE_IN					\+	0x185FEDF9L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEDF9-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_LINE_IN);+#define KSAUDFNAME_LINE_IN DEFINE_GUIDNAMED(KSAUDFNAME_LINE_IN)++#define STATIC_KSAUDFNAME_RECORDING_CONTROL				\+	0x185FEDFAL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEDFA-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_RECORDING_CONTROL);+#define KSAUDFNAME_RECORDING_CONTROL DEFINE_GUIDNAMED(KSAUDFNAME_RECORDING_CONTROL)++#define STATIC_KSAUDFNAME_CD_AUDIO					\+	0x185FEDFBL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEDFB-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_CD_AUDIO);+#define KSAUDFNAME_CD_AUDIO DEFINE_GUIDNAMED(KSAUDFNAME_CD_AUDIO)++#define STATIC_KSAUDFNAME_AUX_VOLUME					\+	0x185FEDFCL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEDFC-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_AUX_VOLUME);+#define KSAUDFNAME_AUX_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_AUX_VOLUME)++#define STATIC_KSAUDFNAME_AUX_MUTE					\+	0x185FEDFDL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEDFD-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_AUX_MUTE);+#define KSAUDFNAME_AUX_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_AUX_MUTE)++#define STATIC_KSAUDFNAME_AUX						\+	0x185FEDFEL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEDFE-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_AUX);+#define KSAUDFNAME_AUX DEFINE_GUIDNAMED(KSAUDFNAME_AUX)++#define STATIC_KSAUDFNAME_PC_SPEAKER					\+	0x185FEDFFL,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEDFF-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_PC_SPEAKER);+#define KSAUDFNAME_PC_SPEAKER DEFINE_GUIDNAMED(KSAUDFNAME_PC_SPEAKER)++#define STATIC_KSAUDFNAME_WAVE_OUT_MIX					\+	0x185FEE00L,0x9905,0x11D1,0x95,0xA9,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("185FEE00-9905-11D1-95A9-00C04FB925D3",KSAUDFNAME_WAVE_OUT_MIX);+#define KSAUDFNAME_WAVE_OUT_MIX DEFINE_GUIDNAMED(KSAUDFNAME_WAVE_OUT_MIX)++#define STATIC_KSAUDFNAME_MONO_OUT					\+	0xf9b41dc3L,0x96e2,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68+DEFINE_GUIDSTRUCT("F9B41DC3-96E2-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_MONO_OUT);+#define KSAUDFNAME_MONO_OUT DEFINE_GUIDNAMED(KSAUDFNAME_MONO_OUT)++#define STATIC_KSAUDFNAME_STEREO_MIX					\+	0xdff077L,0x96e3,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68+DEFINE_GUIDSTRUCT("00DFF077-96E3-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_STEREO_MIX);+#define KSAUDFNAME_STEREO_MIX DEFINE_GUIDNAMED(KSAUDFNAME_STEREO_MIX)++#define STATIC_KSAUDFNAME_MONO_MIX					\+	0xdff078L,0x96e3,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68+DEFINE_GUIDSTRUCT("00DFF078-96E3-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_MONO_MIX);+#define KSAUDFNAME_MONO_MIX DEFINE_GUIDNAMED(KSAUDFNAME_MONO_MIX)++#define STATIC_KSAUDFNAME_MONO_OUT_VOLUME				\+	0x1ad247ebL,0x96e3,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68+DEFINE_GUIDSTRUCT("1AD247EB-96E3-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_MONO_OUT_VOLUME);+#define KSAUDFNAME_MONO_OUT_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MONO_OUT_VOLUME)++#define STATIC_KSAUDFNAME_MONO_OUT_MUTE					\+	0x1ad247ecL,0x96e3,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68+DEFINE_GUIDSTRUCT("1AD247EC-96E3-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_MONO_OUT_MUTE);+#define KSAUDFNAME_MONO_OUT_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MONO_OUT_MUTE)++#define STATIC_KSAUDFNAME_STEREO_MIX_VOLUME				\+	0x1ad247edL,0x96e3,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68+DEFINE_GUIDSTRUCT("1AD247ED-96E3-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_STEREO_MIX_VOLUME);+#define KSAUDFNAME_STEREO_MIX_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_STEREO_MIX_VOLUME)++#define STATIC_KSAUDFNAME_STEREO_MIX_MUTE				\+	0x22b0eafdL,0x96e3,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68+DEFINE_GUIDSTRUCT("22B0EAFD-96E3-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_STEREO_MIX_MUTE);+#define KSAUDFNAME_STEREO_MIX_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_STEREO_MIX_MUTE)++#define STATIC_KSAUDFNAME_MONO_MIX_VOLUME				\+	0x22b0eafeL,0x96e3,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68+DEFINE_GUIDSTRUCT("22B0EAFE-96E3-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_MONO_MIX_VOLUME);+#define KSAUDFNAME_MONO_MIX_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MONO_MIX_VOLUME)++#define STATIC_KSAUDFNAME_MONO_MIX_MUTE					\+	0x2bc31d69L,0x96e3,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68+DEFINE_GUIDSTRUCT("2BC31D69-96E3-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_MONO_MIX_MUTE);+#define KSAUDFNAME_MONO_MIX_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MONO_MIX_MUTE)++#define STATIC_KSAUDFNAME_MICROPHONE_BOOST				\+	0x2bc31d6aL,0x96e3,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68+DEFINE_GUIDSTRUCT("2BC31D6A-96E3-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_MICROPHONE_BOOST);+#define KSAUDFNAME_MICROPHONE_BOOST DEFINE_GUIDNAMED(KSAUDFNAME_MICROPHONE_BOOST)++#define STATIC_KSAUDFNAME_ALTERNATE_MICROPHONE				\+	0x2bc31d6bL,0x96e3,0x11d2,0xac,0x4c,0x0,0xc0,0x4f,0x8e,0xfb,0x68+DEFINE_GUIDSTRUCT("2BC31D6B-96E3-11d2-AC4C-00C04F8EFB68",KSAUDFNAME_ALTERNATE_MICROPHONE);+#define KSAUDFNAME_ALTERNATE_MICROPHONE DEFINE_GUIDNAMED(KSAUDFNAME_ALTERNATE_MICROPHONE)++#define STATIC_KSAUDFNAME_3D_DEPTH					\+	0x63ff5747L,0x991f,0x11d2,0xac,0x4d,0x0,0xc0,0x4f,0x8e,0xfb,0x68+DEFINE_GUIDSTRUCT("63FF5747-991F-11d2-AC4D-00C04F8EFB68",KSAUDFNAME_3D_DEPTH);+#define KSAUDFNAME_3D_DEPTH DEFINE_GUIDNAMED(KSAUDFNAME_3D_DEPTH)++#define STATIC_KSAUDFNAME_3D_CENTER					\+	0x9f0670b4L,0x991f,0x11d2,0xac,0x4d,0x0,0xc0,0x4f,0x8e,0xfb,0x68+DEFINE_GUIDSTRUCT("9F0670B4-991F-11d2-AC4D-00C04F8EFB68",KSAUDFNAME_3D_CENTER);+#define KSAUDFNAME_3D_CENTER DEFINE_GUIDNAMED(KSAUDFNAME_3D_CENTER)++#define STATIC_KSAUDFNAME_VIDEO_VOLUME					\+	0x9b46e708L,0x992a,0x11d2,0xac,0x4d,0x0,0xc0,0x4f,0x8e,0xfb,0x68+DEFINE_GUIDSTRUCT("9B46E708-992A-11d2-AC4D-00C04F8EFB68",KSAUDFNAME_VIDEO_VOLUME);+#define KSAUDFNAME_VIDEO_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_VIDEO_VOLUME)++#define STATIC_KSAUDFNAME_VIDEO_MUTE					\+	0x9b46e709L,0x992a,0x11d2,0xac,0x4d,0x0,0xc0,0x4f,0x8e,0xfb,0x68+DEFINE_GUIDSTRUCT("9B46E709-992A-11d2-AC4D-00C04F8EFB68",KSAUDFNAME_VIDEO_MUTE);+#define KSAUDFNAME_VIDEO_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_VIDEO_MUTE)++#define STATIC_KSAUDFNAME_VIDEO						\+	0x915daec4L,0xa434,0x11d2,0xac,0x52,0x0,0xc0,0x4f,0x8e,0xfb,0x68+DEFINE_GUIDSTRUCT("915DAEC4-A434-11d2-AC52-00C04F8EFB68",KSAUDFNAME_VIDEO);+#define KSAUDFNAME_VIDEO DEFINE_GUIDNAMED(KSAUDFNAME_VIDEO)++#define STATIC_KSAUDFNAME_PEAKMETER					\+	0x57e24340L,0xfc5b,0x4612,0xa5,0x62,0x72,0xb1,0x1a,0x29,0xdf,0xae+DEFINE_GUIDSTRUCT("57E24340-FC5B-4612-A562-72B11A29DFAE",KSAUDFNAME_PEAKMETER);+#define KSAUDFNAME_PEAKMETER DEFINE_GUIDNAMED(KSAUDFNAME_PEAKMETER)++#define KSNODEPIN_STANDARD_IN		1+#define KSNODEPIN_STANDARD_OUT		0++#define KSNODEPIN_SUM_MUX_IN		1+#define KSNODEPIN_SUM_MUX_OUT		0++#define KSNODEPIN_DEMUX_IN		0+#define KSNODEPIN_DEMUX_OUT		1++#define KSNODEPIN_AEC_RENDER_IN		1+#define KSNODEPIN_AEC_RENDER_OUT	0+#define KSNODEPIN_AEC_CAPTURE_IN	2+#define KSNODEPIN_AEC_CAPTURE_OUT	3++#define STATIC_KSMETHODSETID_Wavetable					\+	0xDCEF31EBL,0xD907,0x11D0,0x95,0x83,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("DCEF31EB-D907-11D0-9583-00C04FB925D3",KSMETHODSETID_Wavetable);+#define KSMETHODSETID_Wavetable DEFINE_GUIDNAMED(KSMETHODSETID_Wavetable)++typedef enum {+  KSMETHOD_WAVETABLE_WAVE_ALLOC,+  KSMETHOD_WAVETABLE_WAVE_FREE,+  KSMETHOD_WAVETABLE_WAVE_FIND,+  KSMETHOD_WAVETABLE_WAVE_WRITE+} KSMETHOD_WAVETABLE;++typedef struct {+  KSIDENTIFIER Identifier;+  ULONG Size;+  WINBOOL Looped;+  ULONG LoopPoint;+  WINBOOL InROM;+  KSDATAFORMAT Format;+} KSWAVETABLE_WAVE_DESC,*PKSWAVETABLE_WAVE_DESC;++#define STATIC_KSPROPSETID_Acoustic_Echo_Cancel				\+	0xd7a4af8bL,0x3dc1,0x4902,0x91,0xea,0x8a,0x15,0xc9,0x0e,0x05,0xb2+DEFINE_GUIDSTRUCT("D7A4AF8B-3DC1-4902-91EA-8A15C90E05B2",KSPROPSETID_Acoustic_Echo_Cancel);+#define KSPROPSETID_Acoustic_Echo_Cancel DEFINE_GUIDNAMED(KSPROPSETID_Acoustic_Echo_Cancel)++typedef enum {+  KSPROPERTY_AEC_NOISE_FILL_ENABLE = 0,+  KSPROPERTY_AEC_STATUS,+  KSPROPERTY_AEC_MODE+} KSPROPERTY_AEC;++#define AEC_STATUS_FD_HISTORY_UNINITIALIZED		0x0+#define AEC_STATUS_FD_HISTORY_CONTINUOUSLY_CONVERGED	0x1+#define AEC_STATUS_FD_HISTORY_PREVIOUSLY_DIVERGED	0x2+#define AEC_STATUS_FD_CURRENTLY_CONVERGED		0x8++#define AEC_MODE_PASS_THROUGH				0x0+#define AEC_MODE_HALF_DUPLEX				0x1+#define AEC_MODE_FULL_DUPLEX				0x2++#define STATIC_KSPROPSETID_Wave						\+	0x924e54b0L,0x630f,0x11cf,0xad,0xa7,0x08,0x00,0x3e,0x30,0x49,0x4a+DEFINE_GUIDSTRUCT("924e54b0-630f-11cf-ada7-08003e30494a",KSPROPSETID_Wave);+#define KSPROPSETID_Wave DEFINE_GUIDNAMED(KSPROPSETID_Wave)++typedef enum {+  KSPROPERTY_WAVE_COMPATIBLE_CAPABILITIES,+  KSPROPERTY_WAVE_INPUT_CAPABILITIES,+  KSPROPERTY_WAVE_OUTPUT_CAPABILITIES,+  KSPROPERTY_WAVE_BUFFER,+  KSPROPERTY_WAVE_FREQUENCY,+  KSPROPERTY_WAVE_VOLUME,+  KSPROPERTY_WAVE_PAN+} KSPROPERTY_WAVE;++typedef struct {+  ULONG ulDeviceType;+} KSWAVE_COMPATCAPS,*PKSWAVE_COMPATCAPS;++#define KSWAVE_COMPATCAPS_INPUT		0x00000000+#define KSWAVE_COMPATCAPS_OUTPUT	0x00000001++typedef struct {+  ULONG MaximumChannelsPerConnection;+  ULONG MinimumBitsPerSample;+  ULONG MaximumBitsPerSample;+  ULONG MinimumSampleFrequency;+  ULONG MaximumSampleFrequency;+  ULONG TotalConnections;+  ULONG ActiveConnections;+} KSWAVE_INPUT_CAPABILITIES,*PKSWAVE_INPUT_CAPABILITIES;++typedef struct {+  ULONG MaximumChannelsPerConnection;+  ULONG MinimumBitsPerSample;+  ULONG MaximumBitsPerSample;+  ULONG MinimumSampleFrequency;+  ULONG MaximumSampleFrequency;+  ULONG TotalConnections;+  ULONG StaticConnections;+  ULONG StreamingConnections;+  ULONG ActiveConnections;+  ULONG ActiveStaticConnections;+  ULONG ActiveStreamingConnections;+  ULONG Total3DConnections;+  ULONG Static3DConnections;+  ULONG Streaming3DConnections;+  ULONG Active3DConnections;+  ULONG ActiveStatic3DConnections;+  ULONG ActiveStreaming3DConnections;+  ULONG TotalSampleMemory;+  ULONG FreeSampleMemory;+  ULONG LargestFreeContiguousSampleMemory;+} KSWAVE_OUTPUT_CAPABILITIES,*PKSWAVE_OUTPUT_CAPABILITIES;++typedef struct {+  LONG LeftAttenuation;+  LONG RightAttenuation;+} KSWAVE_VOLUME,*PKSWAVE_VOLUME;++#define KSWAVE_BUFFER_ATTRIBUTEF_LOOPING	0x00000001+#define KSWAVE_BUFFER_ATTRIBUTEF_STATIC		0x00000002++typedef struct {+  ULONG Attributes;+  ULONG BufferSize;+  PVOID BufferAddress;+} KSWAVE_BUFFER,*PKSWAVE_BUFFER;++#define STATIC_KSMUSIC_TECHNOLOGY_PORT					\+	0x86C92E60L,0x62E8,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("86C92E60-62E8-11CF-A5D6-28DB04C10000",KSMUSIC_TECHNOLOGY_PORT);+#define KSMUSIC_TECHNOLOGY_PORT DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_PORT)++#define STATIC_KSMUSIC_TECHNOLOGY_SQSYNTH				\+	0x0ECF4380L,0x62E9,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("0ECF4380-62E9-11CF-A5D6-28DB04C10000",KSMUSIC_TECHNOLOGY_SQSYNTH);+#define KSMUSIC_TECHNOLOGY_SQSYNTH DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_SQSYNTH)++#define STATIC_KSMUSIC_TECHNOLOGY_FMSYNTH				\+	0x252C5C80L,0x62E9,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("252C5C80-62E9-11CF-A5D6-28DB04C10000",KSMUSIC_TECHNOLOGY_FMSYNTH);+#define KSMUSIC_TECHNOLOGY_FMSYNTH DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_FMSYNTH)++#define STATIC_KSMUSIC_TECHNOLOGY_WAVETABLE				\+	0x394EC7C0L,0x62E9,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("394EC7C0-62E9-11CF-A5D6-28DB04C10000",KSMUSIC_TECHNOLOGY_WAVETABLE);+#define KSMUSIC_TECHNOLOGY_WAVETABLE DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_WAVETABLE)++#define STATIC_KSMUSIC_TECHNOLOGY_SWSYNTH				\+	0x37407736L,0x3620,0x11D1,0x85,0xD3,0x00,0x00,0xF8,0x75,0x43,0x80+DEFINE_GUIDSTRUCT("37407736-3620-11D1-85D3-0000F8754380",KSMUSIC_TECHNOLOGY_SWSYNTH);+#define KSMUSIC_TECHNOLOGY_SWSYNTH DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_SWSYNTH)++#define STATIC_KSPROPSETID_WaveTable					\+	0x8539E660L,0x62E9,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("8539E660-62E9-11CF-A5D6-28DB04C10000",KSPROPSETID_WaveTable);+#define KSPROPSETID_WaveTable DEFINE_GUIDNAMED(KSPROPSETID_WaveTable)++typedef enum {+  KSPROPERTY_WAVETABLE_LOAD_SAMPLE,+  KSPROPERTY_WAVETABLE_UNLOAD_SAMPLE,+  KSPROPERTY_WAVETABLE_MEMORY,+  KSPROPERTY_WAVETABLE_VERSION+} KSPROPERTY_WAVETABLE;++typedef struct {+  KSDATARANGE DataRange;+  GUID Technology;+  ULONG Channels;+  ULONG Notes;+  ULONG ChannelMask;+} KSDATARANGE_MUSIC,*PKSDATARANGE_MUSIC;++#define STATIC_KSEVENTSETID_Cyclic					\+	0x142C1AC0L,0x072A,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("142C1AC0-072A-11D0-A5D6-28DB04C10000",KSEVENTSETID_Cyclic);+#define KSEVENTSETID_Cyclic DEFINE_GUIDNAMED(KSEVENTSETID_Cyclic)++typedef enum {+  KSEVENT_CYCLIC_TIME_INTERVAL+} KSEVENT_CYCLIC_TIME;++#define STATIC_KSPROPSETID_Cyclic					\+	0x3FFEAEA0L,0x2BEE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("3FFEAEA0-2BEE-11CF-A5D6-28DB04C10000",KSPROPSETID_Cyclic);+#define KSPROPSETID_Cyclic DEFINE_GUIDNAMED(KSPROPSETID_Cyclic)++typedef enum {+  KSPROPERTY_CYCLIC_POSITION+} KSPROPERTY_CYCLIC;++#define STATIC_KSEVENTSETID_AudioControlChange				\+	0xE85E9698L,0xFA2F,0x11D1,0x95,0xBD,0x00,0xC0,0x4F,0xB9,0x25,0xD3+DEFINE_GUIDSTRUCT("E85E9698-FA2F-11D1-95BD-00C04FB925D3",KSEVENTSETID_AudioControlChange);+#define KSEVENTSETID_AudioControlChange DEFINE_GUIDNAMED(KSEVENTSETID_AudioControlChange)++typedef enum {+  KSEVENT_CONTROL_CHANGE+} KSEVENT_AUDIO_CONTROL_CHANGE;++#define STATIC_KSEVENTSETID_LoopedStreaming				\+	0x4682B940L,0xC6EF,0x11D0,0x96,0xD8,0x00,0xAA,0x00,0x51,0xE5,0x1D+DEFINE_GUIDSTRUCT("4682B940-C6EF-11D0-96D8-00AA0051E51D",KSEVENTSETID_LoopedStreaming);+#define KSEVENTSETID_LoopedStreaming DEFINE_GUIDNAMED(KSEVENTSETID_LoopedStreaming)++typedef enum {+  KSEVENT_LOOPEDSTREAMING_POSITION+} KSEVENT_LOOPEDSTREAMING;++typedef struct {+  KSEVENTDATA KsEventData;+  DWORDLONG Position;+} LOOPEDSTREAMING_POSITION_EVENT_DATA,*PLOOPEDSTREAMING_POSITION_EVENT_DATA;++#define STATIC_KSPROPSETID_Sysaudio					\+	0xCBE3FAA0L,0xCC75,0x11D0,0xB4,0x65,0x00,0x00,0x1A,0x18,0x18,0xE6+DEFINE_GUIDSTRUCT("CBE3FAA0-CC75-11D0-B465-00001A1818E6",KSPROPSETID_Sysaudio);+#define KSPROPSETID_Sysaudio DEFINE_GUIDNAMED(KSPROPSETID_Sysaudio)++typedef enum {+  KSPROPERTY_SYSAUDIO_DEVICE_COUNT = 1,+  KSPROPERTY_SYSAUDIO_DEVICE_FRIENDLY_NAME = 2,+  KSPROPERTY_SYSAUDIO_DEVICE_INSTANCE = 3,+  KSPROPERTY_SYSAUDIO_DEVICE_INTERFACE_NAME = 4,+  KSPROPERTY_SYSAUDIO_SELECT_GRAPH = 5,+  KSPROPERTY_SYSAUDIO_CREATE_VIRTUAL_SOURCE = 6,+  KSPROPERTY_SYSAUDIO_DEVICE_DEFAULT = 7,+  KSPROPERTY_SYSAUDIO_INSTANCE_INFO = 14,+  KSPROPERTY_SYSAUDIO_COMPONENT_ID = 16+} KSPROPERTY_SYSAUDIO;++typedef struct {+  KSPROPERTY Property;+  GUID PinCategory;+  GUID PinName;+} SYSAUDIO_CREATE_VIRTUAL_SOURCE,*PSYSAUDIO_CREATE_VIRTUAL_SOURCE;++typedef struct {+  KSPROPERTY Property;+  ULONG PinId;+  ULONG NodeId;+  ULONG Flags;+  ULONG Reserved;+} SYSAUDIO_SELECT_GRAPH,*PSYSAUDIO_SELECT_GRAPH;++typedef struct {+  KSPROPERTY Property;+  ULONG Flags;+  ULONG DeviceNumber;+} SYSAUDIO_INSTANCE_INFO,*PSYSAUDIO_INSTANCE_INFO;++#define SYSAUDIO_FLAGS_DONT_COMBINE_PINS	0x00000001++#define STATIC_KSPROPSETID_Sysaudio_Pin					\+	0xA3A53220L,0xC6E4,0x11D0,0xB4,0x65,0x00,0x00,0x1A,0x18,0x18,0xE6+DEFINE_GUIDSTRUCT("A3A53220-C6E4-11D0-B465-00001A1818E6",KSPROPSETID_Sysaudio_Pin);+#define KSPROPSETID_Sysaudio_Pin DEFINE_GUIDNAMED(KSPROPSETID_Sysaudio_Pin)++typedef enum {+  KSPROPERTY_SYSAUDIO_ATTACH_VIRTUAL_SOURCE = 1+} KSPROPERTY_SYSAUDIO_PIN;++typedef struct {+  KSPROPERTY Property;+  ULONG MixerPinId;+  ULONG Reserved;+} SYSAUDIO_ATTACH_VIRTUAL_SOURCE,*PSYSAUDIO_ATTACH_VIRTUAL_SOURCE;++typedef struct {+  KSPROPERTY Property;+  ULONG NodeId;+  ULONG Reserved;+} KSNODEPROPERTY,*PKSNODEPROPERTY;++typedef struct {+  KSNODEPROPERTY NodeProperty;+  LONG Channel;+  ULONG Reserved;+} KSNODEPROPERTY_AUDIO_CHANNEL,*PKSNODEPROPERTY_AUDIO_CHANNEL;++typedef struct {+  KSNODEPROPERTY NodeProperty;+  ULONG DevSpecificId;+  ULONG DeviceInfo;+  ULONG Length;+} KSNODEPROPERTY_AUDIO_DEV_SPECIFIC,*PKSNODEPROPERTY_AUDIO_DEV_SPECIFIC;++typedef struct {+  KSNODEPROPERTY NodeProperty;+  PVOID ListenerId;+#ifndef _WIN64+  ULONG Reserved;+#endif+} KSNODEPROPERTY_AUDIO_3D_LISTENER,*PKSNODEPROPERTY_AUDIO_3D_LISTENER;++typedef struct {+  KSNODEPROPERTY NodeProperty;+  PVOID AppContext;+  ULONG Length;+#ifndef _WIN64+  ULONG Reserved;+#endif+} KSNODEPROPERTY_AUDIO_PROPERTY,*PKSNODEPROPERTY_AUDIO_PROPERTY;++#define STATIC_KSPROPSETID_AudioGfx					\+	0x79a9312eL,0x59ae,0x43b0,0xa3,0x50,0x8b,0x5,0x28,0x4c,0xab,0x24+DEFINE_GUIDSTRUCT("79A9312E-59AE-43b0-A350-8B05284CAB24",KSPROPSETID_AudioGfx);+#define KSPROPSETID_AudioGfx DEFINE_GUIDNAMED(KSPROPSETID_AudioGfx)++typedef enum {+  KSPROPERTY_AUDIOGFX_RENDERTARGETDEVICEID,+  KSPROPERTY_AUDIOGFX_CAPTURETARGETDEVICEID+} KSPROPERTY_AUDIOGFX;++#define STATIC_KSPROPSETID_Linear					\+	0x5A2FFE80L,0x16B9,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("5A2FFE80-16B9-11D0-A5D6-28DB04C10000",KSPROPSETID_Linear);+#define KSPROPSETID_Linear DEFINE_GUIDNAMED(KSPROPSETID_Linear)++typedef enum {+  KSPROPERTY_LINEAR_POSITION+} KSPROPERTY_LINEAR;++#define STATIC_KSDATAFORMAT_TYPE_MUSIC					\+	0xE725D360L,0x62CC,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("E725D360-62CC-11CF-A5D6-28DB04C10000",KSDATAFORMAT_TYPE_MUSIC);+#define KSDATAFORMAT_TYPE_MUSIC DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MUSIC)++#define STATIC_KSDATAFORMAT_TYPE_MIDI					\+	0x7364696DL,0x0000,0x0010,0x80,0x00,0x00,0xaa,0x00,0x38,0x9b,0x71+DEFINE_GUIDSTRUCT("7364696D-0000-0010-8000-00aa00389b71",KSDATAFORMAT_TYPE_MIDI);+#define KSDATAFORMAT_TYPE_MIDI DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MIDI)++#define STATIC_KSDATAFORMAT_SUBTYPE_MIDI				\+	0x1D262760L,0xE957,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("1D262760-E957-11CF-A5D6-28DB04C10000",KSDATAFORMAT_SUBTYPE_MIDI);+#define KSDATAFORMAT_SUBTYPE_MIDI DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MIDI)++#define STATIC_KSDATAFORMAT_SUBTYPE_MIDI_BUS				\+	0x2CA15FA0L,0x6CFE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00+DEFINE_GUIDSTRUCT("2CA15FA0-6CFE-11CF-A5D6-28DB04C10000",KSDATAFORMAT_SUBTYPE_MIDI_BUS);+#define KSDATAFORMAT_SUBTYPE_MIDI_BUS DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MIDI_BUS)++#define STATIC_KSDATAFORMAT_SUBTYPE_RIFFMIDI				\+	0x4995DAF0L,0x9EE6,0x11D0,0xA4,0x0E,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("4995DAF0-9EE6-11D0-A40E-00A0C9223196",KSDATAFORMAT_SUBTYPE_RIFFMIDI);+#define KSDATAFORMAT_SUBTYPE_RIFFMIDI DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_RIFFMIDI)++typedef struct {+  ULONG TimeDeltaMs;++  ULONG ByteCount;+} KSMUSICFORMAT,*PKSMUSICFORMAT;++#define STATIC_KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM		\+	0x36523b11L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a+DEFINE_GUIDSTRUCT("36523B11-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM);+#define KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM)++#define STATIC_KSDATAFORMAT_TYPE_STANDARD_PES_PACKET			\+	0x36523b12L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a+DEFINE_GUIDSTRUCT("36523B12-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_TYPE_STANDARD_PES_PACKET);+#define KSDATAFORMAT_TYPE_STANDARD_PES_PACKET DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_STANDARD_PES_PACKET)++#define STATIC_KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER			\+	0x36523b13L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a+DEFINE_GUIDSTRUCT("36523B13-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER);+#define KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER)++#define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO		\+	0x36523b21L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a+DEFINE_GUIDSTRUCT("36523B21-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO);+#define KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO)++#define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO		\+	0x36523b22L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a+DEFINE_GUIDSTRUCT("36523B22-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO);+#define KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO)++#define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO		\+	0x36523b23L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a+DEFINE_GUIDSTRUCT("36523B23-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO);+#define KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO)++#define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO		\+	0x36523b24L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a+DEFINE_GUIDSTRUCT("36523B24-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO);+#define KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO)++#define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO			\+	0x36523b25L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a+DEFINE_GUIDSTRUCT("36523B25-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO);+#define KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO)++#define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO		\+	0x36523b31L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a+DEFINE_GUIDSTRUCT("36523B31-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO);+#define KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO)++#define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO		\+	0x36523b32L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a+DEFINE_GUIDSTRUCT("36523B32-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO);+#define KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO)++#define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO		\+	0x36523b33L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a+DEFINE_GUIDSTRUCT("36523B33-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO);+#define KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO)++#define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO		\+	0x36523b34L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a+DEFINE_GUIDSTRUCT("36523B34-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO);+#define KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO)++#define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO			\+	0x36523b35L,0x8ee5,0x11d1,0x8c,0xa3,0x00,0x60,0xb0,0x57,0x66,0x4a+DEFINE_GUIDSTRUCT("36523B35-8EE5-11d1-8CA3-0060B057664A",KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO);+#define KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO)++#define STATIC_KSDATAFORMAT_SUBTYPE_DSS_VIDEO				\+	0xa0af4f81L,0xe163,0x11d0,0xba,0xd9,0x00,0x60,0x97,0x44,0x11,0x1a+DEFINE_GUIDSTRUCT("a0af4f81-e163-11d0-bad9-00609744111a",KSDATAFORMAT_SUBTYPE_DSS_VIDEO);+#define KSDATAFORMAT_SUBTYPE_DSS_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_DSS_VIDEO)++#define STATIC_KSDATAFORMAT_SUBTYPE_DSS_AUDIO				\+		0xa0af4f82L,0xe163,0x11d0,0xba,0xd9,0x00,0x60,0x97,0x44,0x11,0x1a+DEFINE_GUIDSTRUCT("a0af4f82-e163-11d0-bad9-00609744111a",KSDATAFORMAT_SUBTYPE_DSS_AUDIO);+#define KSDATAFORMAT_SUBTYPE_DSS_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_DSS_AUDIO)++#define STATIC_KSDATAFORMAT_SUBTYPE_MPEG1Packet				\+	0xe436eb80,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70+DEFINE_GUIDSTRUCT("e436eb80-524f-11ce-9F53-0020af0ba770",KSDATAFORMAT_SUBTYPE_MPEG1Packet);+#define KSDATAFORMAT_SUBTYPE_MPEG1Packet DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG1Packet)++#define STATIC_KSDATAFORMAT_SUBTYPE_MPEG1Payload			\+	0xe436eb81,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70+DEFINE_GUIDSTRUCT("e436eb81-524f-11ce-9F53-0020af0ba770",KSDATAFORMAT_SUBTYPE_MPEG1Payload);+#define KSDATAFORMAT_SUBTYPE_MPEG1Payload DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG1Payload)++#define STATIC_KSDATAFORMAT_SUBTYPE_MPEG1Video				\+	0xe436eb86,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70+DEFINE_GUIDSTRUCT("e436eb86-524f-11ce-9f53-0020af0ba770",KSDATAFORMAT_SUBTYPE_MPEG1Video);+#define KSDATAFORMAT_SUBTYPE_MPEG1Video DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG1Video)++#define STATIC_KSDATAFORMAT_SPECIFIER_MPEG1_VIDEO			\+	0x05589f82L,0xc356,0x11ce,0xbf,0x01,0x00,0xaa,0x00,0x55,0x59,0x5a+DEFINE_GUIDSTRUCT("05589f82-c356-11ce-bf01-00aa0055595a",KSDATAFORMAT_SPECIFIER_MPEG1_VIDEO);+#define KSDATAFORMAT_SPECIFIER_MPEG1_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_MPEG1_VIDEO)++#define STATIC_KSDATAFORMAT_TYPE_MPEG2_PES				\+	0xe06d8020L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea+DEFINE_GUIDSTRUCT("e06d8020-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_TYPE_MPEG2_PES);+#define KSDATAFORMAT_TYPE_MPEG2_PES DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MPEG2_PES)++#define STATIC_KSDATAFORMAT_TYPE_MPEG2_PROGRAM				\+	0xe06d8022L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea+DEFINE_GUIDSTRUCT("e06d8022-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_TYPE_MPEG2_PROGRAM);+#define KSDATAFORMAT_TYPE_MPEG2_PROGRAM DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MPEG2_PROGRAM)++#define STATIC_KSDATAFORMAT_TYPE_MPEG2_TRANSPORT			\+	0xe06d8023L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea+DEFINE_GUIDSTRUCT("e06d8023-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_TYPE_MPEG2_TRANSPORT);+#define KSDATAFORMAT_TYPE_MPEG2_TRANSPORT DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MPEG2_TRANSPORT)++#define STATIC_KSDATAFORMAT_SUBTYPE_MPEG2_VIDEO				\+	0xe06d8026L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea+DEFINE_GUIDSTRUCT("e06d8026-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SUBTYPE_MPEG2_VIDEO);+#define KSDATAFORMAT_SUBTYPE_MPEG2_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG2_VIDEO)++#define STATIC_KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO			\+	0xe06d80e3L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea+DEFINE_GUIDSTRUCT("e06d80e3-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO);+#define KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO)++#define STATIC_KSPROPSETID_Mpeg2Vid					\+	0xC8E11B60L,0x0CC9,0x11D0,0xBD,0x69,0x00,0x35,0x05,0xC1,0x03,0xA9+DEFINE_GUIDSTRUCT("C8E11B60-0CC9-11D0-BD69-003505C103A9",KSPROPSETID_Mpeg2Vid);+#define KSPROPSETID_Mpeg2Vid DEFINE_GUIDNAMED(KSPROPSETID_Mpeg2Vid)++typedef enum {+  KSPROPERTY_MPEG2VID_MODES,+  KSPROPERTY_MPEG2VID_CUR_MODE,+  KSPROPERTY_MPEG2VID_4_3_RECT,+  KSPROPERTY_MPEG2VID_16_9_RECT,+  KSPROPERTY_MPEG2VID_16_9_PANSCAN+} KSPROPERTY_MPEG2VID;++#define KSMPEGVIDMODE_PANSCAN	0x0001+#define KSMPEGVIDMODE_LTRBOX	0x0002+#define KSMPEGVIDMODE_SCALE	0x0004++typedef struct _KSMPEGVID_RECT {+  ULONG StartX;+  ULONG StartY;+  ULONG EndX;+  ULONG EndY;+} KSMPEGVID_RECT,*PKSMPEGVID_RECT;++#define STATIC_KSDATAFORMAT_SUBTYPE_MPEG2_AUDIO				\+	0xe06d802bL,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea+DEFINE_GUIDSTRUCT("e06d802b-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SUBTYPE_MPEG2_AUDIO);+#define KSDATAFORMAT_SUBTYPE_MPEG2_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG2_AUDIO)++#define STATIC_KSDATAFORMAT_SPECIFIER_MPEG2_AUDIO			\+	0xe06d80e5L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea+DEFINE_GUIDSTRUCT("e06d80e5-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SPECIFIER_MPEG2_AUDIO);+#define KSDATAFORMAT_SPECIFIER_MPEG2_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_MPEG2_AUDIO)++#define STATIC_KSDATAFORMAT_SUBTYPE_LPCM_AUDIO				\+	0xe06d8032L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea+DEFINE_GUIDSTRUCT("e06d8032-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SUBTYPE_LPCM_AUDIO);+#define KSDATAFORMAT_SUBTYPE_LPCM_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_LPCM_AUDIO)++#define STATIC_KSDATAFORMAT_SPECIFIER_LPCM_AUDIO			\+	0xe06d80e6L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea+DEFINE_GUIDSTRUCT("e06d80e6-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SPECIFIER_LPCM_AUDIO);+#define KSDATAFORMAT_SPECIFIER_LPCM_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_LPCM_AUDIO)++#define STATIC_KSDATAFORMAT_SUBTYPE_AC3_AUDIO				\+	0xe06d802cL,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea+DEFINE_GUIDSTRUCT("e06d802c-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SUBTYPE_AC3_AUDIO);+#define KSDATAFORMAT_SUBTYPE_AC3_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_AC3_AUDIO)++#define STATIC_KSDATAFORMAT_SPECIFIER_AC3_AUDIO				\+	0xe06d80e4L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea+DEFINE_GUIDSTRUCT("e06d80e4-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SPECIFIER_AC3_AUDIO);+#define KSDATAFORMAT_SPECIFIER_AC3_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_AC3_AUDIO)++#define STATIC_KSPROPSETID_AC3						\+	0xBFABE720L,0x6E1F,0x11D0,0xBC,0xF2,0x44,0x45,0x53,0x54,0x00,0x00+DEFINE_GUIDSTRUCT("BFABE720-6E1F-11D0-BCF2-444553540000",KSPROPSETID_AC3);+#define KSPROPSETID_AC3 DEFINE_GUIDNAMED(KSPROPSETID_AC3)++typedef enum {+  KSPROPERTY_AC3_ERROR_CONCEALMENT = 1,+  KSPROPERTY_AC3_ALTERNATE_AUDIO,+  KSPROPERTY_AC3_DOWNMIX,+  KSPROPERTY_AC3_BIT_STREAM_MODE,+  KSPROPERTY_AC3_DIALOGUE_LEVEL,+  KSPROPERTY_AC3_LANGUAGE_CODE,+  KSPROPERTY_AC3_ROOM_TYPE+} KSPROPERTY_AC3;++typedef struct {+  WINBOOL fRepeatPreviousBlock;+  WINBOOL fErrorInCurrentBlock;+} KSAC3_ERROR_CONCEALMENT,*PKSAC3_ERROR_CONCEALMENT;++typedef struct {+  WINBOOL fStereo;+  ULONG DualMode;+} KSAC3_ALTERNATE_AUDIO,*PKSAC3_ALTERNATE_AUDIO;++#define KSAC3_ALTERNATE_AUDIO_1		1+#define KSAC3_ALTERNATE_AUDIO_2		2+#define KSAC3_ALTERNATE_AUDIO_BOTH	3++typedef struct {+  WINBOOL fDownMix;+  WINBOOL fDolbySurround;+} KSAC3_DOWNMIX,*PKSAC3_DOWNMIX;++typedef struct {+  LONG BitStreamMode;+} KSAC3_BIT_STREAM_MODE,*PKSAC3_BIT_STREAM_MODE;++#define KSAC3_SERVICE_MAIN_AUDIO	0+#define KSAC3_SERVICE_NO_DIALOG		1+#define KSAC3_SERVICE_VISUALLY_IMPAIRED	2+#define KSAC3_SERVICE_HEARING_IMPAIRED	3+#define KSAC3_SERVICE_DIALOG_ONLY	4+#define KSAC3_SERVICE_COMMENTARY	5+#define KSAC3_SERVICE_EMERGENCY_FLASH	6+#define KSAC3_SERVICE_VOICE_OVER	7++typedef struct {+  ULONG DialogueLevel;+} KSAC3_DIALOGUE_LEVEL,*PKSAC3_DIALOGUE_LEVEL;++typedef struct {+  WINBOOL fLargeRoom;+} KSAC3_ROOM_TYPE,*PKSAC3_ROOM_TYPE;++#define STATIC_KSDATAFORMAT_SUBTYPE_DTS_AUDIO				\+	0xe06d8033L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea+DEFINE_GUIDSTRUCT("e06d8033-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SUBTYPE_DTS_AUDIO);+#define KSDATAFORMAT_SUBTYPE_DTS_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_DTS_AUDIO)++#define STATIC_KSDATAFORMAT_SUBTYPE_SDDS_AUDIO				\+	0xe06d8034L,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea+DEFINE_GUIDSTRUCT("e06d8034-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SUBTYPE_SDDS_AUDIO);+#define KSDATAFORMAT_SUBTYPE_SDDS_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_SDDS_AUDIO)++#define STATIC_KSPROPSETID_AudioDecoderOut				\+	0x6ca6e020L,0x43bd,0x11d0,0xbd,0x6a,0x00,0x35,0x05,0xc1,0x03,0xa9+DEFINE_GUIDSTRUCT("6ca6e020-43bd-11d0-bd6a-003505c103a9",KSPROPSETID_AudioDecoderOut);+#define KSPROPSETID_AudioDecoderOut DEFINE_GUIDNAMED(KSPROPSETID_AudioDecoderOut)++typedef enum {+  KSPROPERTY_AUDDECOUT_MODES,+  KSPROPERTY_AUDDECOUT_CUR_MODE+} KSPROPERTY_AUDDECOUT;++#define KSAUDDECOUTMODE_STEREO_ANALOG	0x0001+#define KSAUDDECOUTMODE_PCM_51		0x0002+#define KSAUDDECOUTMODE_SPDIFF		0x0004++#define STATIC_KSDATAFORMAT_SUBTYPE_SUBPICTURE				\+	0xe06d802dL,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea+DEFINE_GUIDSTRUCT("e06d802d-db46-11cf-b4d1-00805f6cbbea",KSDATAFORMAT_SUBTYPE_SUBPICTURE);+#define KSDATAFORMAT_SUBTYPE_SUBPICTURE DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_SUBPICTURE)++#define STATIC_KSPROPSETID_DvdSubPic					\+	0xac390460L,0x43af,0x11d0,0xbd,0x6a,0x00,0x35,0x05,0xc1,0x03,0xa9+DEFINE_GUIDSTRUCT("ac390460-43af-11d0-bd6a-003505c103a9",KSPROPSETID_DvdSubPic);+#define KSPROPSETID_DvdSubPic DEFINE_GUIDNAMED(KSPROPSETID_DvdSubPic)++typedef enum {+  KSPROPERTY_DVDSUBPIC_PALETTE,+  KSPROPERTY_DVDSUBPIC_HLI,+  KSPROPERTY_DVDSUBPIC_COMPOSIT_ON+} KSPROPERTY_DVDSUBPIC;++typedef struct _KS_DVD_YCrCb {+  UCHAR Reserved;+  UCHAR Y;+  UCHAR Cr;+  UCHAR Cb;+} KS_DVD_YCrCb,*PKS_DVD_YCrCb;++typedef struct _KS_DVD_YUV {+  UCHAR Reserved;+  UCHAR Y;+  UCHAR V;+  UCHAR U;+} KS_DVD_YUV,*PKS_DVD_YUV;++typedef struct _KSPROPERTY_SPPAL {+  KS_DVD_YUV sppal[16];+} KSPROPERTY_SPPAL,*PKSPROPERTY_SPPAL;++typedef struct _KS_COLCON {+  UCHAR emph1col:4;+  UCHAR emph2col:4;+  UCHAR backcol:4;+  UCHAR patcol:4;+  UCHAR emph1con:4;+  UCHAR emph2con:4;+  UCHAR backcon:4;+  UCHAR patcon:4;+} KS_COLCON,*PKS_COLCON;++typedef struct _KSPROPERTY_SPHLI {+  USHORT HLISS;+  USHORT Reserved;+  ULONG StartPTM;+  ULONG EndPTM;+  USHORT StartX;+  USHORT StartY;+  USHORT StopX;+  USHORT StopY;+  KS_COLCON ColCon;+} KSPROPERTY_SPHLI,*PKSPROPERTY_SPHLI;++typedef WINBOOL KSPROPERTY_COMPOSIT_ON,*PKSPROPERTY_COMPOSIT_ON;++#define STATIC_KSPROPSETID_CopyProt					\+	0x0E8A0A40L,0x6AEF,0x11D0,0x9E,0xD0,0x00,0xA0,0x24,0xCA,0x19,0xB3+DEFINE_GUIDSTRUCT("0E8A0A40-6AEF-11D0-9ED0-00A024CA19B3",KSPROPSETID_CopyProt);+#define KSPROPSETID_CopyProt DEFINE_GUIDNAMED(KSPROPSETID_CopyProt)++typedef enum {+  KSPROPERTY_DVDCOPY_CHLG_KEY = 0x01,+  KSPROPERTY_DVDCOPY_DVD_KEY1,+  KSPROPERTY_DVDCOPY_DEC_KEY2,+  KSPROPERTY_DVDCOPY_TITLE_KEY,+  KSPROPERTY_COPY_MACROVISION,+  KSPROPERTY_DVDCOPY_REGION,+  KSPROPERTY_DVDCOPY_SET_COPY_STATE,+  KSPROPERTY_DVDCOPY_DISC_KEY = 0x80+} KSPROPERTY_COPYPROT;++typedef struct _KS_DVDCOPY_CHLGKEY {+  BYTE ChlgKey[10];+  BYTE Reserved[2];+} KS_DVDCOPY_CHLGKEY,*PKS_DVDCOPY_CHLGKEY;++typedef struct _KS_DVDCOPY_BUSKEY {+  BYTE BusKey[5];+  BYTE Reserved[1];+} KS_DVDCOPY_BUSKEY,*PKS_DVDCOPY_BUSKEY;++typedef struct _KS_DVDCOPY_DISCKEY {+  BYTE DiscKey[2048];+} KS_DVDCOPY_DISCKEY,*PKS_DVDCOPY_DISCKEY;++typedef struct _KS_DVDCOPY_REGION {+  UCHAR Reserved;+  UCHAR RegionData;+  UCHAR Reserved2[2];+} KS_DVDCOPY_REGION,*PKS_DVDCOPY_REGION;++typedef struct _KS_DVDCOPY_TITLEKEY {+  ULONG KeyFlags;+  ULONG ReservedNT[2];+  UCHAR TitleKey[6];+  UCHAR Reserved[2];+} KS_DVDCOPY_TITLEKEY,*PKS_DVDCOPY_TITLEKEY;++typedef struct _KS_COPY_MACROVISION {+  ULONG MACROVISIONLevel;+} KS_COPY_MACROVISION,*PKS_COPY_MACROVISION;++typedef struct _KS_DVDCOPY_SET_COPY_STATE {+  ULONG DVDCopyState;+} KS_DVDCOPY_SET_COPY_STATE,*PKS_DVDCOPY_SET_COPY_STATE;++typedef enum {+  KS_DVDCOPYSTATE_INITIALIZE,+  KS_DVDCOPYSTATE_INITIALIZE_TITLE,+  KS_DVDCOPYSTATE_AUTHENTICATION_NOT_REQUIRED,+  KS_DVDCOPYSTATE_AUTHENTICATION_REQUIRED,+  KS_DVDCOPYSTATE_DONE+} KS_DVDCOPYSTATE;++typedef enum {+  KS_MACROVISION_DISABLED,+  KS_MACROVISION_LEVEL1,+  KS_MACROVISION_LEVEL2,+  KS_MACROVISION_LEVEL3+} KS_COPY_MACROVISION_LEVEL,*PKS_COPY_MACROVISION_LEVEL;++#define KS_DVD_CGMS_RESERVED_MASK	0x00000078++#define KS_DVD_CGMS_COPY_PROTECT_MASK	0x00000018+#define KS_DVD_CGMS_COPY_PERMITTED	0x00000000+#define KS_DVD_CGMS_COPY_ONCE		0x00000010+#define KS_DVD_CGMS_NO_COPY		0x00000018++#define KS_DVD_COPYRIGHT_MASK		0x00000040+#define KS_DVD_NOT_COPYRIGHTED		0x00000000+#define KS_DVD_COPYRIGHTED		0x00000040++#define KS_DVD_SECTOR_PROTECT_MASK	0x00000020+#define KS_DVD_SECTOR_NOT_PROTECTED	0x00000000+#define KS_DVD_SECTOR_PROTECTED		0x00000020++#define STATIC_KSCATEGORY_TVTUNER					\+	0xa799a800L,0xa46d,0x11d0,0xa1,0x8c,0x00,0xa0,0x24,0x01,0xdc,0xd4+DEFINE_GUIDSTRUCT("a799a800-a46d-11d0-a18c-00a02401dcd4",KSCATEGORY_TVTUNER);+#define KSCATEGORY_TVTUNER DEFINE_GUIDNAMED(KSCATEGORY_TVTUNER)++#define STATIC_KSCATEGORY_CROSSBAR					\+	0xa799a801L,0xa46d,0x11d0,0xa1,0x8c,0x00,0xa0,0x24,0x01,0xdc,0xd4+DEFINE_GUIDSTRUCT("a799a801-a46d-11d0-a18c-00a02401dcd4",KSCATEGORY_CROSSBAR);+#define KSCATEGORY_CROSSBAR DEFINE_GUIDNAMED(KSCATEGORY_CROSSBAR)++#define STATIC_KSCATEGORY_TVAUDIO					\+	0xa799a802L,0xa46d,0x11d0,0xa1,0x8c,0x00,0xa0,0x24,0x01,0xdc,0xd4+DEFINE_GUIDSTRUCT("a799a802-a46d-11d0-a18c-00a02401dcd4",KSCATEGORY_TVAUDIO);+#define KSCATEGORY_TVAUDIO DEFINE_GUIDNAMED(KSCATEGORY_TVAUDIO)++#define STATIC_KSCATEGORY_VPMUX						\+	0xa799a803L,0xa46d,0x11d0,0xa1,0x8c,0x00,0xa0,0x24,0x01,0xdc,0xd4+DEFINE_GUIDSTRUCT("a799a803-a46d-11d0-a18c-00a02401dcd4",KSCATEGORY_VPMUX);+#define KSCATEGORY_VPMUX DEFINE_GUIDNAMED(KSCATEGORY_VPMUX)++#define STATIC_KSCATEGORY_VBICODEC					\+	0x07dad660L,0x22f1,0x11d1,0xa9,0xf4,0x00,0xc0,0x4f,0xbb,0xde,0x8f+DEFINE_GUIDSTRUCT("07dad660-22f1-11d1-a9f4-00c04fbbde8f",KSCATEGORY_VBICODEC);+#define KSCATEGORY_VBICODEC DEFINE_GUIDNAMED(KSCATEGORY_VBICODEC)++#define STATIC_KSDATAFORMAT_SUBTYPE_VPVideo				\+	0x5a9b6a40L,0x1a22,0x11d1,0xba,0xd9,0x0,0x60,0x97,0x44,0x11,0x1a+DEFINE_GUIDSTRUCT("5a9b6a40-1a22-11d1-bad9-00609744111a",KSDATAFORMAT_SUBTYPE_VPVideo);+#define KSDATAFORMAT_SUBTYPE_VPVideo DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_VPVideo)++#define STATIC_KSDATAFORMAT_SUBTYPE_VPVBI				\+	0x5a9b6a41L,0x1a22,0x11d1,0xba,0xd9,0x0,0x60,0x97,0x44,0x11,0x1a+DEFINE_GUIDSTRUCT("5a9b6a41-1a22-11d1-bad9-00609744111a",KSDATAFORMAT_SUBTYPE_VPVBI);+#define KSDATAFORMAT_SUBTYPE_VPVBI DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_VPVBI)++#define STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO				\+	0x05589f80L,0xc356,0x11ce,0xbf,0x01,0x00,0xaa,0x00,0x55,0x59,0x5a+DEFINE_GUIDSTRUCT("05589f80-c356-11ce-bf01-00aa0055595a",KSDATAFORMAT_SPECIFIER_VIDEOINFO);+#define KSDATAFORMAT_SPECIFIER_VIDEOINFO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_VIDEOINFO)++#define STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO2			\+	0xf72a76A0L,0xeb0a,0x11d0,0xac,0xe4,0x00,0x00,0xc0,0xcc,0x16,0xba+DEFINE_GUIDSTRUCT("f72a76A0-eb0a-11d0-ace4-0000c0cc16ba",KSDATAFORMAT_SPECIFIER_VIDEOINFO2);+#define KSDATAFORMAT_SPECIFIER_VIDEOINFO2 DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_VIDEOINFO2)++#define STATIC_KSDATAFORMAT_TYPE_ANALOGVIDEO				\+	0x0482dde1L,0x7817,0x11cf,0x8a,0x03,0x00,0xaa,0x00,0x6e,0xcb,0x65+DEFINE_GUIDSTRUCT("0482dde1-7817-11cf-8a03-00aa006ecb65",KSDATAFORMAT_TYPE_ANALOGVIDEO);+#define KSDATAFORMAT_TYPE_ANALOGVIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_ANALOGVIDEO)++#define STATIC_KSDATAFORMAT_SPECIFIER_ANALOGVIDEO			\+	0x0482dde0L,0x7817,0x11cf,0x8a,0x03,0x00,0xaa,0x00,0x6e,0xcb,0x65+DEFINE_GUIDSTRUCT("0482dde0-7817-11cf-8a03-00aa006ecb65",KSDATAFORMAT_SPECIFIER_ANALOGVIDEO);+#define KSDATAFORMAT_SPECIFIER_ANALOGVIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_ANALOGVIDEO)++#define STATIC_KSDATAFORMAT_TYPE_ANALOGAUDIO				\+	0x0482dee1L,0x7817,0x11cf,0x8a,0x03,0x00,0xaa,0x00,0x6e,0xcb,0x65+DEFINE_GUIDSTRUCT("0482DEE1-7817-11cf-8a03-00aa006ecb65",KSDATAFORMAT_TYPE_ANALOGAUDIO);+#define KSDATAFORMAT_TYPE_ANALOGAUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_ANALOGAUDIO)++#define STATIC_KSDATAFORMAT_SPECIFIER_VBI				\+	0xf72a76e0L,0xeb0a,0x11d0,0xac,0xe4,0x00,0x00,0xc0,0xcc,0x16,0xba+DEFINE_GUIDSTRUCT("f72a76e0-eb0a-11d0-ace4-0000c0cc16ba",KSDATAFORMAT_SPECIFIER_VBI);+#define KSDATAFORMAT_SPECIFIER_VBI DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_VBI)++#define STATIC_KSDATAFORMAT_TYPE_VBI					\+	0xf72a76e1L,0xeb0a,0x11d0,0xac,0xe4,0x00,0x00,0xc0,0xcc,0x16,0xba+DEFINE_GUIDSTRUCT("f72a76e1-eb0a-11d0-ace4-0000c0cc16ba",KSDATAFORMAT_TYPE_VBI);+#define KSDATAFORMAT_TYPE_VBI DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_VBI)++#define STATIC_KSDATAFORMAT_SUBTYPE_RAW8				\+	0xca20d9a0,0x3e3e,0x11d1,0x9b,0xf9,0x0,0xc0,0x4f,0xbb,0xde,0xbf+DEFINE_GUIDSTRUCT("ca20d9a0-3e3e-11d1-9bf9-00c04fbbdebf",KSDATAFORMAT_SUBTYPE_RAW8);+#define KSDATAFORMAT_SUBTYPE_RAW8 DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_RAW8)++#define STATIC_KSDATAFORMAT_SUBTYPE_CC					\+	0x33214cc1,0x11f,0x11d2,0xb4,0xb1,0x0,0xa0,0xd1,0x2,0xcf,0xbe+DEFINE_GUIDSTRUCT("33214CC1-011F-11D2-B4B1-00A0D102CFBE",KSDATAFORMAT_SUBTYPE_CC);+#define KSDATAFORMAT_SUBTYPE_CC DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_CC)++#define STATIC_KSDATAFORMAT_SUBTYPE_NABTS				\+	0xf72a76e2L,0xeb0a,0x11d0,0xac,0xe4,0x00,0x00,0xc0,0xcc,0x16,0xba+DEFINE_GUIDSTRUCT("f72a76e2-eb0a-11d0-ace4-0000c0cc16ba",KSDATAFORMAT_SUBTYPE_NABTS);+#define KSDATAFORMAT_SUBTYPE_NABTS DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_NABTS)++#define STATIC_KSDATAFORMAT_SUBTYPE_TELETEXT				\+	0xf72a76e3L,0xeb0a,0x11d0,0xac,0xe4,0x00,0x00,0xc0,0xcc,0x16,0xba+DEFINE_GUIDSTRUCT("f72a76e3-eb0a-11d0-ace4-0000c0cc16ba",KSDATAFORMAT_SUBTYPE_TELETEXT);+#define KSDATAFORMAT_SUBTYPE_TELETEXT DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_TELETEXT)++#define KS_BI_RGB		0L+#define KS_BI_RLE8		1L+#define KS_BI_RLE4		2L+#define KS_BI_BITFIELDS		3L++typedef struct tagKS_RGBQUAD {+  BYTE rgbBlue;+  BYTE rgbGreen;+  BYTE rgbRed;+  BYTE rgbReserved;+} KS_RGBQUAD,*PKS_RGBQUAD;++#define KS_iPALETTE_COLORS	256+#define KS_iEGA_COLORS		16+#define KS_iMASK_COLORS		3+#define KS_iTRUECOLOR		16+#define KS_iRED			0+#define KS_iGREEN		1+#define KS_iBLUE		2+#define KS_iPALETTE		8+#define KS_iMAXBITS		8+#define KS_SIZE_EGA_PALETTE	(KS_iEGA_COLORS *sizeof(KS_RGBQUAD))+#define KS_SIZE_PALETTE		(KS_iPALETTE_COLORS *sizeof(KS_RGBQUAD))++typedef struct tagKS_BITMAPINFOHEADER {+  DWORD biSize;+  LONG biWidth;+  LONG biHeight;+  WORD biPlanes;+  WORD biBitCount;+  DWORD biCompression;+  DWORD biSizeImage;+  LONG biXPelsPerMeter;+  LONG biYPelsPerMeter;+  DWORD biClrUsed;+  DWORD biClrImportant;+} KS_BITMAPINFOHEADER,*PKS_BITMAPINFOHEADER;++typedef struct tag_KS_TRUECOLORINFO {+  DWORD dwBitMasks[KS_iMASK_COLORS];+  KS_RGBQUAD bmiColors[KS_iPALETTE_COLORS];+} KS_TRUECOLORINFO,*PKS_TRUECOLORINFO;++#define KS_WIDTHBYTES(bits)	((DWORD)(((bits)+31) & (~31)) / 8)+#define KS_DIBWIDTHBYTES(bi)	(DWORD)KS_WIDTHBYTES((DWORD)(bi).biWidth *(DWORD)(bi).biBitCount)+#define KS__DIBSIZE(bi)		(KS_DIBWIDTHBYTES(bi) *(DWORD)(bi).biHeight)+#define KS_DIBSIZE(bi)		((bi).biHeight < 0 ? (-1)*(KS__DIBSIZE(bi)) : KS__DIBSIZE(bi))++typedef LONGLONG REFERENCE_TIME;++typedef struct tagKS_VIDEOINFOHEADER {+  RECT rcSource;+  RECT rcTarget;+  DWORD dwBitRate;+  DWORD dwBitErrorRate;+  REFERENCE_TIME AvgTimePerFrame;+  KS_BITMAPINFOHEADER bmiHeader;+} KS_VIDEOINFOHEADER,*PKS_VIDEOINFOHEADER;++typedef struct tagKS_VIDEOINFO {+  RECT rcSource;+  RECT rcTarget;+  DWORD dwBitRate;+  DWORD dwBitErrorRate;+  REFERENCE_TIME AvgTimePerFrame;+  KS_BITMAPINFOHEADER bmiHeader;+  __MINGW_EXTENSION union {+    KS_RGBQUAD bmiColors[KS_iPALETTE_COLORS];+    DWORD dwBitMasks[KS_iMASK_COLORS];+    KS_TRUECOLORINFO TrueColorInfo;+  };+} KS_VIDEOINFO,*PKS_VIDEOINFO;++#define KS_SIZE_MASKS			(KS_iMASK_COLORS *sizeof(DWORD))+#define KS_SIZE_PREHEADER		(FIELD_OFFSET(KS_VIDEOINFOHEADER,bmiHeader))++#define KS_SIZE_VIDEOHEADER(pbmi)	((pbmi)->bmiHeader.biSize + KS_SIZE_PREHEADER)++typedef struct tagKS_VBIINFOHEADER {+  ULONG StartLine;+  ULONG EndLine;+  ULONG SamplingFrequency;+  ULONG MinLineStartTime;+  ULONG MaxLineStartTime;+  ULONG ActualLineStartTime;+  ULONG ActualLineEndTime;+  ULONG VideoStandard;+  ULONG SamplesPerLine;+  ULONG StrideInBytes;+  ULONG BufferSize;+} KS_VBIINFOHEADER,*PKS_VBIINFOHEADER;++#define KS_VBIDATARATE_NABTS		(5727272L)+#define KS_VBIDATARATE_CC		(503493L)+#define KS_VBISAMPLINGRATE_4X_NABTS	((long)(4*KS_VBIDATARATE_NABTS))+#define KS_VBISAMPLINGRATE_47X_NABTS	((long)(27000000))+#define KS_VBISAMPLINGRATE_5X_NABTS	((long)(5*KS_VBIDATARATE_NABTS))++#define KS_47NABTS_SCALER		(KS_VBISAMPLINGRATE_47X_NABTS/(double)KS_VBIDATARATE_NABTS)++typedef struct tagKS_AnalogVideoInfo {+  RECT rcSource;+  RECT rcTarget;+  DWORD dwActiveWidth;+  DWORD dwActiveHeight;+  REFERENCE_TIME AvgTimePerFrame;+} KS_ANALOGVIDEOINFO,*PKS_ANALOGVIDEOINFO;++#define KS_TVTUNER_CHANGE_BEGIN_TUNE	0x0001L+#define KS_TVTUNER_CHANGE_END_TUNE	0x0002L++typedef struct tagKS_TVTUNER_CHANGE_INFO {+  DWORD dwFlags;+  DWORD dwCountryCode;+  DWORD dwAnalogVideoStandard;+  DWORD dwChannel;+} KS_TVTUNER_CHANGE_INFO,*PKS_TVTUNER_CHANGE_INFO;++typedef enum {+  KS_MPEG2Level_Low,+  KS_MPEG2Level_Main,+  KS_MPEG2Level_High1440,+  KS_MPEG2Level_High+} KS_MPEG2Level;++typedef enum {+  KS_MPEG2Profile_Simple,+  KS_MPEG2Profile_Main,+  KS_MPEG2Profile_SNRScalable,+  KS_MPEG2Profile_SpatiallyScalable,+  KS_MPEG2Profile_High+} KS_MPEG2Profile;++#define KS_INTERLACE_IsInterlaced		0x00000001+#define KS_INTERLACE_1FieldPerSample		0x00000002+#define KS_INTERLACE_Field1First		0x00000004+#define KS_INTERLACE_UNUSED			0x00000008+#define KS_INTERLACE_FieldPatternMask		0x00000030+#define KS_INTERLACE_FieldPatField1Only		0x00000000+#define KS_INTERLACE_FieldPatField2Only		0x00000010+#define KS_INTERLACE_FieldPatBothRegular	0x00000020+#define KS_INTERLACE_FieldPatBothIrregular	0x00000030+#define KS_INTERLACE_DisplayModeMask		0x000000c0+#define KS_INTERLACE_DisplayModeBobOnly		0x00000000+#define KS_INTERLACE_DisplayModeWeaveOnly	0x00000040+#define KS_INTERLACE_DisplayModeBobOrWeave	0x00000080++#define KS_MPEG2_DoPanScan			0x00000001+#define KS_MPEG2_DVDLine21Field1		0x00000002+#define KS_MPEG2_DVDLine21Field2		0x00000004+#define KS_MPEG2_SourceIsLetterboxed		0x00000008+#define KS_MPEG2_FilmCameraMode			0x00000010+#define KS_MPEG2_LetterboxAnalogOut		0x00000020+#define KS_MPEG2_DSS_UserData			0x00000040+#define KS_MPEG2_DVB_UserData			0x00000080+#define KS_MPEG2_27MhzTimebase			0x00000100++typedef struct tagKS_VIDEOINFOHEADER2 {+  RECT rcSource;+  RECT rcTarget;+  DWORD dwBitRate;+  DWORD dwBitErrorRate;+  REFERENCE_TIME AvgTimePerFrame;+  DWORD dwInterlaceFlags;+  DWORD dwCopyProtectFlags;+  DWORD dwPictAspectRatioX;+  DWORD dwPictAspectRatioY;+  DWORD dwReserved1;+  DWORD dwReserved2;+  KS_BITMAPINFOHEADER bmiHeader;+} KS_VIDEOINFOHEADER2,*PKS_VIDEOINFOHEADER2;++typedef struct tagKS_MPEG1VIDEOINFO {+  KS_VIDEOINFOHEADER hdr;+  DWORD dwStartTimeCode;+  DWORD cbSequenceHeader;+  BYTE bSequenceHeader[1];+} KS_MPEG1VIDEOINFO,*PKS_MPEG1VIDEOINFO;++#define KS_MAX_SIZE_MPEG1_SEQUENCE_INFO	140+#define KS_SIZE_MPEG1VIDEOINFO(pv)	(FIELD_OFFSET(KS_MPEG1VIDEOINFO,bSequenceHeader[0]) + (pv)->cbSequenceHeader)+#define KS_MPEG1_SEQUENCE_INFO(pv)	((const BYTE *)(pv)->bSequenceHeader)++typedef struct tagKS_MPEGVIDEOINFO2 {+  KS_VIDEOINFOHEADER2 hdr;+  DWORD dwStartTimeCode;+  DWORD cbSequenceHeader;+  DWORD dwProfile;+  DWORD dwLevel;+  DWORD dwFlags;+  DWORD bSequenceHeader[1];+} KS_MPEGVIDEOINFO2,*PKS_MPEGVIDEOINFO2;++#define KS_SIZE_MPEGVIDEOINFO2(pv)	(FIELD_OFFSET(KS_MPEGVIDEOINFO2,bSequenceHeader[0]) + (pv)->cbSequenceHeader)+#define KS_MPEG1_SEQUENCE_INFO(pv)	((const BYTE *)(pv)->bSequenceHeader)++#define KS_MPEGAUDIOINFO_27MhzTimebase	0x00000001++typedef struct tagKS_MPEAUDIOINFO {+  DWORD dwFlags;+  DWORD dwReserved1;+  DWORD dwReserved2;+  DWORD dwReserved3;+} KS_MPEGAUDIOINFO,*PKS_MPEGAUDIOINFO;++typedef struct tagKS_DATAFORMAT_VIDEOINFOHEADER {+  KSDATAFORMAT DataFormat;+  KS_VIDEOINFOHEADER VideoInfoHeader;+} KS_DATAFORMAT_VIDEOINFOHEADER,*PKS_DATAFORMAT_VIDEOINFOHEADER;++typedef struct tagKS_DATAFORMAT_VIDEOINFOHEADER2 {+  KSDATAFORMAT DataFormat;+  KS_VIDEOINFOHEADER2 VideoInfoHeader2;+} KS_DATAFORMAT_VIDEOINFOHEADER2,*PKS_DATAFORMAT_VIDEOINFOHEADER2;++typedef struct tagKS_DATAFORMAT_VIDEOINFO_PALETTE {+  KSDATAFORMAT DataFormat;+  KS_VIDEOINFO VideoInfo;+} KS_DATAFORMAT_VIDEOINFO_PALETTE,*PKS_DATAFORMAT_VIDEOINFO_PALETTE;++typedef struct tagKS_DATAFORMAT_VBIINFOHEADER {+  KSDATAFORMAT DataFormat;+  KS_VBIINFOHEADER VBIInfoHeader;+} KS_DATAFORMAT_VBIINFOHEADER,*PKS_DATAFORMAT_VBIINFOHEADER;++typedef struct _KS_VIDEO_STREAM_CONFIG_CAPS {+  GUID guid;+  ULONG VideoStandard;+  SIZE InputSize;+  SIZE MinCroppingSize;+  SIZE MaxCroppingSize;+  int CropGranularityX;+  int CropGranularityY;+  int CropAlignX;+  int CropAlignY;+  SIZE MinOutputSize;+  SIZE MaxOutputSize;+  int OutputGranularityX;+  int OutputGranularityY;+  int StretchTapsX;+  int StretchTapsY;+  int ShrinkTapsX;+  int ShrinkTapsY;+  LONGLONG MinFrameInterval;+  LONGLONG MaxFrameInterval;+  LONG MinBitsPerSecond;+  LONG MaxBitsPerSecond;+} KS_VIDEO_STREAM_CONFIG_CAPS,*PKS_VIDEO_STREAM_CONFIG_CAPS;++typedef struct tagKS_DATARANGE_VIDEO {+  KSDATARANGE DataRange;+  WINBOOL bFixedSizeSamples;+  WINBOOL bTemporalCompression;+  DWORD StreamDescriptionFlags;+  DWORD MemoryAllocationFlags;+  KS_VIDEO_STREAM_CONFIG_CAPS ConfigCaps;+  KS_VIDEOINFOHEADER VideoInfoHeader;+} KS_DATARANGE_VIDEO,*PKS_DATARANGE_VIDEO;++typedef struct tagKS_DATARANGE_VIDEO2 {+  KSDATARANGE DataRange;+  WINBOOL bFixedSizeSamples;+  WINBOOL bTemporalCompression;+  DWORD StreamDescriptionFlags;+  DWORD MemoryAllocationFlags;+  KS_VIDEO_STREAM_CONFIG_CAPS ConfigCaps;+  KS_VIDEOINFOHEADER2 VideoInfoHeader;+} KS_DATARANGE_VIDEO2,*PKS_DATARANGE_VIDEO2;++typedef struct tagKS_DATARANGE_MPEG1_VIDEO {+  KSDATARANGE DataRange;+  WINBOOL bFixedSizeSamples;+  WINBOOL bTemporalCompression;+  DWORD StreamDescriptionFlags;+  DWORD MemoryAllocationFlags;+  KS_VIDEO_STREAM_CONFIG_CAPS ConfigCaps;+  KS_MPEG1VIDEOINFO VideoInfoHeader;+} KS_DATARANGE_MPEG1_VIDEO,*PKS_DATARANGE_MPEG1_VIDEO;++typedef struct tagKS_DATARANGE_MPEG2_VIDEO {+  KSDATARANGE DataRange;+  WINBOOL bFixedSizeSamples;+  WINBOOL bTemporalCompression;+  DWORD StreamDescriptionFlags;+  DWORD MemoryAllocationFlags;+  KS_VIDEO_STREAM_CONFIG_CAPS ConfigCaps;+  KS_MPEGVIDEOINFO2 VideoInfoHeader;+} KS_DATARANGE_MPEG2_VIDEO,*PKS_DATARANGE_MPEG2_VIDEO;++typedef struct tagKS_DATARANGE_VIDEO_PALETTE {+  KSDATARANGE DataRange;+  WINBOOL bFixedSizeSamples;+  WINBOOL bTemporalCompression;+  DWORD StreamDescriptionFlags;+  DWORD MemoryAllocationFlags;+  KS_VIDEO_STREAM_CONFIG_CAPS ConfigCaps;+  KS_VIDEOINFO VideoInfo;+} KS_DATARANGE_VIDEO_PALETTE,*PKS_DATARANGE_VIDEO_PALETTE;++typedef struct tagKS_DATARANGE_VIDEO_VBI {+  KSDATARANGE DataRange;+  WINBOOL bFixedSizeSamples;+  WINBOOL bTemporalCompression;+  DWORD StreamDescriptionFlags;+  DWORD MemoryAllocationFlags;+  KS_VIDEO_STREAM_CONFIG_CAPS ConfigCaps;+  KS_VBIINFOHEADER VBIInfoHeader;+} KS_DATARANGE_VIDEO_VBI,*PKS_DATARANGE_VIDEO_VBI;++typedef struct tagKS_DATARANGE_ANALOGVIDEO {+  KSDATARANGE DataRange;+  KS_ANALOGVIDEOINFO AnalogVideoInfo;+} KS_DATARANGE_ANALOGVIDEO,*PKS_DATARANGE_ANALOGVIDEO;++#define KS_VIDEOSTREAM_PREVIEW		0x0001+#define KS_VIDEOSTREAM_CAPTURE		0x0002+#define KS_VIDEOSTREAM_VBI		0x0010+#define KS_VIDEOSTREAM_NABTS		0x0020+#define KS_VIDEOSTREAM_CC		0x0100+#define KS_VIDEOSTREAM_EDS		0x0200+#define KS_VIDEOSTREAM_TELETEXT		0x0400+#define KS_VIDEOSTREAM_STILL		0x1000+#define KS_VIDEOSTREAM_IS_VPE		0x8000++#define KS_VIDEO_ALLOC_VPE_SYSTEM	0x0001+#define KS_VIDEO_ALLOC_VPE_DISPLAY	0x0002+#define KS_VIDEO_ALLOC_VPE_AGP		0x0004++#define STATIC_KSPROPSETID_VBICAP_PROPERTIES				\+	0xf162c607,0x7b35,0x496f,0xad,0x7f,0x2d,0xca,0x3b,0x46,0xb7,0x18+DEFINE_GUIDSTRUCT("F162C607-7B35-496f-AD7F-2DCA3B46B718",KSPROPSETID_VBICAP_PROPERTIES);+#define KSPROPSETID_VBICAP_PROPERTIES DEFINE_GUIDNAMED(KSPROPSETID_VBICAP_PROPERTIES)++typedef enum {+  KSPROPERTY_VBICAP_PROPERTIES_PROTECTION = 0x01+} KSPROPERTY_VBICAP;++typedef struct _VBICAP_PROPERTIES_PROTECTION_S {+  KSPROPERTY Property;+  ULONG StreamIndex;+  ULONG Status;+} VBICAP_PROPERTIES_PROTECTION_S,*PVBICAP_PROPERTIES_PROTECTION_S;++#define KS_VBICAP_PROTECTION_MV_PRESENT				0x0001L+#define KS_VBICAP_PROTECTION_MV_HARDWARE			0x0002L+#define KS_VBICAP_PROTECTION_MV_DETECTED			0x0004L++#define KS_NABTS_GROUPID_ORIGINAL_CONTENT_BASE			0x800+#define KS_NABTS_GROUPID_ORIGINAL_CONTENT_ADVERTISER_BASE	0x810++#define KS_NABTS_GROUPID_PRODUCTION_COMPANY_CONTENT_BASE	0x820+#define KS_NABTS_GROUPID_PRODUCTION_COMPANY_ADVERTISER_BASE	0x830++#define KS_NABTS_GROUPID_SYNDICATED_SHOW_CONTENT_BASE		0x840+#define KS_NABTS_GROUPID_SYNDICATED_SHOW_ADVERTISER_BASE	0x850++#define KS_NABTS_GROUPID_NETWORK_WIDE_CONTENT_BASE		0x860+#define KS_NABTS_GROUPID_NETWORK_WIDE_ADVERTISER_BASE		0x870++#define KS_NABTS_GROUPID_TELEVISION_STATION_CONTENT_BASE	0x880+#define KS_NABTS_GROUPID_TELEVISION_STATION_ADVERTISER_BASE	0x890++#define KS_NABTS_GROUPID_LOCAL_CABLE_SYSTEM_CONTENT_BASE	0x8A0+#define KS_NABTS_GROUPID_LOCAL_CABLE_SYSTEM_ADVERTISER_BASE	0x8B0++#define KS_NABTS_GROUPID_MICROSOFT_RESERVED_TEST_DATA_BASE	0x8F0++#define STATIC_KSDATAFORMAT_TYPE_NABTS					\+	0xe757bca0,0x39ac,0x11d1,0xa9,0xf5,0x0,0xc0,0x4f,0xbb,0xde,0x8f+DEFINE_GUIDSTRUCT("E757BCA0-39AC-11d1-A9F5-00C04FBBDE8F",KSDATAFORMAT_TYPE_NABTS);+#define KSDATAFORMAT_TYPE_NABTS DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_NABTS)++#define STATIC_KSDATAFORMAT_SUBTYPE_NABTS_FEC				\+	0xe757bca1,0x39ac,0x11d1,0xa9,0xf5,0x0,0xc0,0x4f,0xbb,0xde,0x8f+DEFINE_GUIDSTRUCT("E757BCA1-39AC-11d1-A9F5-00C04FBBDE8F",KSDATAFORMAT_SUBTYPE_NABTS_FEC);+#define KSDATAFORMAT_SUBTYPE_NABTS_FEC DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_NABTS_FEC)++#define MAX_NABTS_VBI_LINES_PER_FIELD	11+#define NABTS_LINES_PER_BUNDLE		16+#define NABTS_PAYLOAD_PER_LINE		28+#define NABTS_BYTES_PER_LINE		36++typedef struct _NABTSFEC_BUFFER {+  ULONG dataSize;+  USHORT groupID;+  USHORT Reserved;+  UCHAR data[NABTS_LINES_PER_BUNDLE *NABTS_PAYLOAD_PER_LINE];+} NABTSFEC_BUFFER,*PNABTSFEC_BUFFER;++#define STATIC_KSPROPSETID_VBICodecFiltering				\+	0xcafeb0caL,0x8715,0x11d0,0xbd,0x6a,0x00,0x35,0xc0,0xed,0xba,0xbe+DEFINE_GUIDSTRUCT("cafeb0ca-8715-11d0-bd6a-0035c0edbabe",KSPROPSETID_VBICodecFiltering);+#define KSPROPSETID_VBICodecFiltering DEFINE_GUIDNAMED(KSPROPSETID_VBICodecFiltering)++typedef enum {+  KSPROPERTY_VBICODECFILTERING_SCANLINES_REQUESTED_BIT_ARRAY = 0x01,+  KSPROPERTY_VBICODECFILTERING_SCANLINES_DISCOVERED_BIT_ARRAY,+  KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_REQUESTED_BIT_ARRAY,+  KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_DISCOVERED_BIT_ARRAY,+  KSPROPERTY_VBICODECFILTERING_STATISTICS+} KSPROPERTY_VBICODECFILTERING;++typedef struct _VBICODECFILTERING_SCANLINES {+  DWORD DwordBitArray[32];+} VBICODECFILTERING_SCANLINES,*PVBICODECFILTERING_SCANLINES;++typedef struct _VBICODECFILTERING_NABTS_SUBSTREAMS {+  DWORD SubstreamMask[128];+} VBICODECFILTERING_NABTS_SUBSTREAMS,*PVBICODECFILTERING_NABTS_SUBSTREAMS;++typedef struct _VBICODECFILTERING_CC_SUBSTREAMS {+  DWORD SubstreamMask;+} VBICODECFILTERING_CC_SUBSTREAMS,*PVBICODECFILTERING_CC_SUBSTREAMS;++#define KS_CC_SUBSTREAM_ODD		0x0001L+#define KS_CC_SUBSTREAM_EVEN		0x0002L++#define KS_CC_SUBSTREAM_FIELD1_MASK	0x00F0L+#define KS_CC_SUBSTREAM_SERVICE_CC1	0x0010L+#define KS_CC_SUBSTREAM_SERVICE_CC2	0x0020L+#define KS_CC_SUBSTREAM_SERVICE_T1	0x0040L+#define KS_CC_SUBSTREAM_SERVICE_T2	0x0080L++#define KS_CC_SUBSTREAM_FIELD2_MASK	0x1F00L+#define KS_CC_SUBSTREAM_SERVICE_CC3	0x0100L+#define KS_CC_SUBSTREAM_SERVICE_CC4	0x0200L+#define KS_CC_SUBSTREAM_SERVICE_T3	0x0400L+#define KS_CC_SUBSTREAM_SERVICE_T4	0x0800L+#define KS_CC_SUBSTREAM_SERVICE_XDS	0x1000L++#define CC_MAX_HW_DECODE_LINES		12+typedef struct _CC_BYTE_PAIR {+  BYTE Decoded[2];+  USHORT Reserved;+} CC_BYTE_PAIR,*PCC_BYTE_PAIR;++typedef struct _CC_HW_FIELD {+  VBICODECFILTERING_SCANLINES ScanlinesRequested;+  ULONG fieldFlags;+  LONGLONG PictureNumber;+  CC_BYTE_PAIR Lines[CC_MAX_HW_DECODE_LINES];+} CC_HW_FIELD,*PCC_HW_FIELD;++#ifndef PACK_PRAGMAS_NOT_SUPPORTED+#include <pshpack1.h>+#endif+typedef struct _NABTS_BUFFER_LINE {+  BYTE Confidence;+  BYTE Bytes[NABTS_BYTES_PER_LINE];+} NABTS_BUFFER_LINE,*PNABTS_BUFFER_LINE;++#define NABTS_BUFFER_PICTURENUMBER_SUPPORT	1+typedef struct _NABTS_BUFFER {+  VBICODECFILTERING_SCANLINES ScanlinesRequested;+  LONGLONG PictureNumber;+  NABTS_BUFFER_LINE NabtsLines[MAX_NABTS_VBI_LINES_PER_FIELD];+} NABTS_BUFFER,*PNABTS_BUFFER;+#ifndef PACK_PRAGMAS_NOT_SUPPORTED+#include <poppack.h>+#endif++#define WST_TVTUNER_CHANGE_BEGIN_TUNE	0x1000L+#define WST_TVTUNER_CHANGE_END_TUNE	0x2000L++#define MAX_WST_VBI_LINES_PER_FIELD	17+#define WST_BYTES_PER_LINE		42++typedef struct _WST_BUFFER_LINE {+  BYTE Confidence;+  BYTE Bytes[WST_BYTES_PER_LINE];+} WST_BUFFER_LINE,*PWST_BUFFER_LINE;++typedef struct _WST_BUFFER {+  VBICODECFILTERING_SCANLINES ScanlinesRequested;+  WST_BUFFER_LINE WstLines[MAX_WST_VBI_LINES_PER_FIELD];+} WST_BUFFER,*PWST_BUFFER;++typedef struct _VBICODECFILTERING_STATISTICS_COMMON {+  DWORD InputSRBsProcessed;+  DWORD OutputSRBsProcessed;+  DWORD SRBsIgnored;+  DWORD InputSRBsMissing;+  DWORD OutputSRBsMissing;+  DWORD OutputFailures;+  DWORD InternalErrors;+  DWORD ExternalErrors;+  DWORD InputDiscontinuities;+  DWORD DSPFailures;+  DWORD TvTunerChanges;+  DWORD VBIHeaderChanges;+  DWORD LineConfidenceAvg;+  DWORD BytesOutput;+} VBICODECFILTERING_STATISTICS_COMMON,*PVBICODECFILTERING_STATISTICS_COMMON;++typedef struct _VBICODECFILTERING_STATISTICS_COMMON_PIN {+  DWORD SRBsProcessed;+  DWORD SRBsIgnored;+  DWORD SRBsMissing;+  DWORD InternalErrors;+  DWORD ExternalErrors;+  DWORD Discontinuities;+  DWORD LineConfidenceAvg;+  DWORD BytesOutput;+} VBICODECFILTERING_STATISTICS_COMMON_PIN,*PVBICODECFILTERING_STATISTICS_COMMON_PIN;++typedef struct _VBICODECFILTERING_STATISTICS_NABTS {+  VBICODECFILTERING_STATISTICS_COMMON Common;+  DWORD FECBundleBadLines;+  DWORD FECQueueOverflows;+  DWORD FECCorrectedLines;+  DWORD FECUncorrectableLines;+  DWORD BundlesProcessed;+  DWORD BundlesSent2IP;+  DWORD FilteredLines;+} VBICODECFILTERING_STATISTICS_NABTS,*PVBICODECFILTERING_STATISTICS_NABTS;++typedef struct _VBICODECFILTERING_STATISTICS_NABTS_PIN {+  VBICODECFILTERING_STATISTICS_COMMON_PIN Common;+} VBICODECFILTERING_STATISTICS_NABTS_PIN,*PVBICODECFILTERING_STATISTICS_NABTS_PIN;++typedef struct _VBICODECFILTERING_STATISTICS_CC {+  VBICODECFILTERING_STATISTICS_COMMON Common;+} VBICODECFILTERING_STATISTICS_CC,*PVBICODECFILTERING_STATISTICS_CC;++typedef struct _VBICODECFILTERING_STATISTICS_CC_PIN {+  VBICODECFILTERING_STATISTICS_COMMON_PIN Common;+} VBICODECFILTERING_STATISTICS_CC_PIN,*PVBICODECFILTERING_STATISTICS_CC_PIN;++typedef struct _VBICODECFILTERING_STATISTICS_TELETEXT {+  VBICODECFILTERING_STATISTICS_COMMON Common;+} VBICODECFILTERING_STATISTICS_TELETEXT,*PVBICODECFILTERING_STATISTICS_TELETEXT;++typedef struct _VBICODECFILTERING_STATISTICS_TELETEXT_PIN {+  VBICODECFILTERING_STATISTICS_COMMON_PIN Common;+} VBICODECFILTERING_STATISTICS_TELETEXT_PIN,*PVBICODECFILTERING_STATISTICS_TELETEXT_PIN;++typedef struct {+  KSPROPERTY Property;+  VBICODECFILTERING_SCANLINES Scanlines;+} KSPROPERTY_VBICODECFILTERING_SCANLINES_S,*PKSPROPERTY_VBICODECFILTERING_SCANLINES_S;++typedef struct {+  KSPROPERTY Property;+  VBICODECFILTERING_NABTS_SUBSTREAMS Substreams;+} KSPROPERTY_VBICODECFILTERING_NABTS_SUBSTREAMS_S,*PKSPROPERTY_VBICODECFILTERING_NABTS_SUBSTREAMS_S;++typedef struct {+  KSPROPERTY Property;+  VBICODECFILTERING_CC_SUBSTREAMS Substreams;+} KSPROPERTY_VBICODECFILTERING_CC_SUBSTREAMS_S,*PKSPROPERTY_VBICODECFILTERING_CC_SUBSTREAMS_S;++typedef struct {+  KSPROPERTY Property;+  VBICODECFILTERING_STATISTICS_COMMON Statistics;+} KSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_S,*PKSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_S;++typedef struct {+  KSPROPERTY Property;+  VBICODECFILTERING_STATISTICS_COMMON_PIN Statistics;+} KSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_PIN_S,*PKSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_PIN_S;++typedef struct {+  KSPROPERTY Property;+  VBICODECFILTERING_STATISTICS_NABTS Statistics;+} KSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_S,*PKSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_S;++typedef struct {+  KSPROPERTY Property;+  VBICODECFILTERING_STATISTICS_NABTS_PIN Statistics;+} KSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_PIN_S,*PKSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_PIN_S;++typedef struct {+  KSPROPERTY Property;+  VBICODECFILTERING_STATISTICS_CC Statistics;+} KSPROPERTY_VBICODECFILTERING_STATISTICS_CC_S,*PKSPROPERTY_VBICODECFILTERING_STATISTICS_CC_S;++typedef struct {+  KSPROPERTY Property;+  VBICODECFILTERING_STATISTICS_CC_PIN Statistics;+} KSPROPERTY_VBICODECFILTERING_STATISTICS_CC_PIN_S,*PKSPROPERTY_VBICODECFILTERING_STATISTICS_CC_PIN_S;++#define STATIC_PINNAME_VIDEO_CAPTURE					\+	0xfb6c4281,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba+#define STATIC_PINNAME_CAPTURE STATIC_PINNAME_VIDEO_CAPTURE+DEFINE_GUIDSTRUCT("FB6C4281-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_CAPTURE);+#define PINNAME_VIDEO_CAPTURE DEFINE_GUIDNAMED(PINNAME_VIDEO_CAPTURE)+#define PINNAME_CAPTURE PINNAME_VIDEO_CAPTURE++#define STATIC_PINNAME_VIDEO_CC_CAPTURE					\+	0x1aad8061,0x12d,0x11d2,0xb4,0xb1,0x0,0xa0,0xd1,0x2,0xcf,0xbe+#define STATIC_PINNAME_CC_CAPTURE STATIC_PINNAME_VIDEO_CC_CAPTURE+DEFINE_GUIDSTRUCT("1AAD8061-012D-11d2-B4B1-00A0D102CFBE",PINNAME_VIDEO_CC_CAPTURE);+#define PINNAME_VIDEO_CC_CAPTURE DEFINE_GUIDNAMED(PINNAME_VIDEO_CC_CAPTURE)++#define STATIC_PINNAME_VIDEO_NABTS_CAPTURE				\+	0x29703660,0x498a,0x11d2,0xb4,0xb1,0x0,0xa0,0xd1,0x2,0xcf,0xbe+#define STATIC_PINNAME_NABTS_CAPTURE STATIC_PINNAME_VIDEO_NABTS_CAPTURE+DEFINE_GUIDSTRUCT("29703660-498A-11d2-B4B1-00A0D102CFBE",PINNAME_VIDEO_NABTS_CAPTURE);+#define PINNAME_VIDEO_NABTS_CAPTURE DEFINE_GUIDNAMED(PINNAME_VIDEO_NABTS_CAPTURE)++#define STATIC_PINNAME_VIDEO_PREVIEW					\+	0xfb6c4282,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba+#define STATIC_PINNAME_PREVIEW STATIC_PINNAME_VIDEO_PREVIEW+DEFINE_GUIDSTRUCT("FB6C4282-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_PREVIEW);+#define PINNAME_VIDEO_PREVIEW DEFINE_GUIDNAMED(PINNAME_VIDEO_PREVIEW)+#define PINNAME_PREVIEW PINNAME_VIDEO_PREVIEW++#define STATIC_PINNAME_VIDEO_ANALOGVIDEOIN				\+	0xfb6c4283,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba+DEFINE_GUIDSTRUCT("FB6C4283-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_ANALOGVIDEOIN);+#define PINNAME_VIDEO_ANALOGVIDEOIN DEFINE_GUIDNAMED(PINNAME_VIDEO_ANALOGVIDEOIN)++#define STATIC_PINNAME_VIDEO_VBI					\+	0xfb6c4284,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba+DEFINE_GUIDSTRUCT("FB6C4284-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_VBI);+#define PINNAME_VIDEO_VBI DEFINE_GUIDNAMED(PINNAME_VIDEO_VBI)++#define STATIC_PINNAME_VIDEO_VIDEOPORT					\+	0xfb6c4285,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba+DEFINE_GUIDSTRUCT("FB6C4285-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_VIDEOPORT);+#define PINNAME_VIDEO_VIDEOPORT DEFINE_GUIDNAMED(PINNAME_VIDEO_VIDEOPORT)++#define STATIC_PINNAME_VIDEO_NABTS					\+	0xfb6c4286,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba+DEFINE_GUIDSTRUCT("FB6C4286-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_NABTS);+#define PINNAME_VIDEO_NABTS DEFINE_GUIDNAMED(PINNAME_VIDEO_NABTS)++#define STATIC_PINNAME_VIDEO_EDS					\+	0xfb6c4287,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba+DEFINE_GUIDSTRUCT("FB6C4287-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_EDS);+#define PINNAME_VIDEO_EDS DEFINE_GUIDNAMED(PINNAME_VIDEO_EDS)++#define STATIC_PINNAME_VIDEO_TELETEXT					\+	0xfb6c4288,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba+DEFINE_GUIDSTRUCT("FB6C4288-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_TELETEXT);+#define PINNAME_VIDEO_TELETEXT DEFINE_GUIDNAMED(PINNAME_VIDEO_TELETEXT)++#define STATIC_PINNAME_VIDEO_CC						\+	0xfb6c4289,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba+DEFINE_GUIDSTRUCT("FB6C4289-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_CC);+#define PINNAME_VIDEO_CC DEFINE_GUIDNAMED(PINNAME_VIDEO_CC)++#define STATIC_PINNAME_VIDEO_STILL					\+	0xfb6c428A,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba+DEFINE_GUIDSTRUCT("FB6C428A-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_STILL);+#define PINNAME_VIDEO_STILL DEFINE_GUIDNAMED(PINNAME_VIDEO_STILL)++#define STATIC_PINNAME_VIDEO_TIMECODE					\+	0xfb6c428B,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba+DEFINE_GUIDSTRUCT("FB6C428B-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_TIMECODE);+#define PINNAME_VIDEO_TIMECODE DEFINE_GUIDNAMED(PINNAME_VIDEO_TIMECODE)++#define STATIC_PINNAME_VIDEO_VIDEOPORT_VBI				\+	0xfb6c428C,0x353,0x11d1,0x90,0x5f,0x0,0x0,0xc0,0xcc,0x16,0xba+DEFINE_GUIDSTRUCT("FB6C428C-0353-11d1-905F-0000C0CC16BA",PINNAME_VIDEO_VIDEOPORT_VBI);+#define PINNAME_VIDEO_VIDEOPORT_VBI DEFINE_GUIDNAMED(PINNAME_VIDEO_VIDEOPORT_VBI)++#define KS_VIDEO_FLAG_FRAME		0x0000L+#define KS_VIDEO_FLAG_FIELD1		0x0001L+#define KS_VIDEO_FLAG_FIELD2		0x0002L++#define KS_VIDEO_FLAG_I_FRAME		0x0000L+#define KS_VIDEO_FLAG_P_FRAME		0x0010L+#define KS_VIDEO_FLAG_B_FRAME		0x0020L++typedef struct tagKS_FRAME_INFO {+  ULONG ExtendedHeaderSize;+  DWORD dwFrameFlags;+  LONGLONG PictureNumber;+  LONGLONG DropCount;+  HANDLE hDirectDraw;+  HANDLE hSurfaceHandle;+  RECT DirectDrawRect;++  DWORD Reserved1;+  DWORD Reserved2;+  DWORD Reserved3;+  DWORD Reserved4;+} KS_FRAME_INFO,*PKS_FRAME_INFO;++#define KS_VBI_FLAG_FIELD1		0x0001L+#define KS_VBI_FLAG_FIELD2		0x0002L++#define KS_VBI_FLAG_MV_PRESENT		0x0100L+#define KS_VBI_FLAG_MV_HARDWARE		0x0200L+#define KS_VBI_FLAG_MV_DETECTED		0x0400L++#define KS_VBI_FLAG_TVTUNER_CHANGE	0x0010L+#define KS_VBI_FLAG_VBIINFOHEADER_CHANGE 0x0020L++typedef struct tagKS_VBI_FRAME_INFO {+  ULONG ExtendedHeaderSize;+  DWORD dwFrameFlags;+  LONGLONG PictureNumber;+  LONGLONG DropCount;+  DWORD dwSamplingFrequency;+  KS_TVTUNER_CHANGE_INFO TvTunerChangeInfo;+  KS_VBIINFOHEADER VBIInfoHeader;+} KS_VBI_FRAME_INFO,*PKS_VBI_FRAME_INFO;++typedef enum+{+  KS_AnalogVideo_None = 0x00000000,+  KS_AnalogVideo_NTSC_M = 0x00000001,+  KS_AnalogVideo_NTSC_M_J = 0x00000002,+  KS_AnalogVideo_NTSC_433 = 0x00000004,+  KS_AnalogVideo_PAL_B = 0x00000010,+  KS_AnalogVideo_PAL_D = 0x00000020,+  KS_AnalogVideo_PAL_G = 0x00000040,+  KS_AnalogVideo_PAL_H = 0x00000080,+  KS_AnalogVideo_PAL_I = 0x00000100,+  KS_AnalogVideo_PAL_M = 0x00000200,+  KS_AnalogVideo_PAL_N = 0x00000400,+  KS_AnalogVideo_PAL_60 = 0x00000800,+  KS_AnalogVideo_SECAM_B = 0x00001000,+  KS_AnalogVideo_SECAM_D = 0x00002000,+  KS_AnalogVideo_SECAM_G = 0x00004000,+  KS_AnalogVideo_SECAM_H = 0x00008000,+  KS_AnalogVideo_SECAM_K = 0x00010000,+  KS_AnalogVideo_SECAM_K1 = 0x00020000,+  KS_AnalogVideo_SECAM_L = 0x00040000,+  KS_AnalogVideo_SECAM_L1 = 0x00080000,+  KS_AnalogVideo_PAL_N_COMBO = 0x00100000+} KS_AnalogVideoStandard;++#define KS_AnalogVideo_NTSC_Mask	0x00000007+#define KS_AnalogVideo_PAL_Mask		0x00100FF0+#define KS_AnalogVideo_SECAM_Mask	0x000FF000++#define STATIC_PROPSETID_ALLOCATOR_CONTROL				\+	0x53171960,0x148e,0x11d2,0x99,0x79,0x0,0x0,0xc0,0xcc,0x16,0xba+DEFINE_GUIDSTRUCT("53171960-148E-11d2-9979-0000C0CC16BA",PROPSETID_ALLOCATOR_CONTROL);+#define PROPSETID_ALLOCATOR_CONTROL DEFINE_GUIDNAMED(PROPSETID_ALLOCATOR_CONTROL)++typedef enum {+  KSPROPERTY_ALLOCATOR_CONTROL_HONOR_COUNT,+  KSPROPERTY_ALLOCATOR_CONTROL_SURFACE_SIZE,+  KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_CAPS,+  KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_INTERLEAVE+} KSPROPERTY_ALLOCATOR_CONTROL;++typedef struct {+  ULONG CX;+  ULONG CY;+} KSPROPERTY_ALLOCATOR_CONTROL_SURFACE_SIZE_S,*PKSPROPERTY_ALLOCATOR_CONTROL_SURFACE_SIZE_S;++typedef struct {+  ULONG InterleavedCapSupported;+} KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_CAPS_S,*PKSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_CAPS_S;++typedef struct {+  ULONG InterleavedCapPossible;+} KSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_INTERLEAVE_S,*PKSPROPERTY_ALLOCATOR_CONTROL_CAPTURE_INTERLEAVE_S;++#define STATIC_PROPSETID_VIDCAP_VIDEOPROCAMP				\+	0xC6E13360L,0x30AC,0x11d0,0xa1,0x8c,0x00,0xA0,0xC9,0x11,0x89,0x56+DEFINE_GUIDSTRUCT("C6E13360-30AC-11d0-A18C-00A0C9118956",PROPSETID_VIDCAP_VIDEOPROCAMP);+#define PROPSETID_VIDCAP_VIDEOPROCAMP DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEOPROCAMP)++typedef enum {+  KSPROPERTY_VIDEOPROCAMP_BRIGHTNESS,+  KSPROPERTY_VIDEOPROCAMP_CONTRAST,+  KSPROPERTY_VIDEOPROCAMP_HUE,+  KSPROPERTY_VIDEOPROCAMP_SATURATION,+  KSPROPERTY_VIDEOPROCAMP_SHARPNESS,+  KSPROPERTY_VIDEOPROCAMP_GAMMA,+  KSPROPERTY_VIDEOPROCAMP_COLORENABLE,+  KSPROPERTY_VIDEOPROCAMP_WHITEBALANCE,+  KSPROPERTY_VIDEOPROCAMP_BACKLIGHT_COMPENSATION,+  KSPROPERTY_VIDEOPROCAMP_GAIN,+  KSPROPERTY_VIDEOPROCAMP_DIGITAL_MULTIPLIER,+  KSPROPERTY_VIDEOPROCAMP_DIGITAL_MULTIPLIER_LIMIT,+  KSPROPERTY_VIDEOPROCAMP_WHITEBALANCE_COMPONENT,+  KSPROPERTY_VIDEOPROCAMP_POWERLINE_FREQUENCY+} KSPROPERTY_VIDCAP_VIDEOPROCAMP;++typedef struct {+  KSPROPERTY Property;+  LONG Value;+  ULONG Flags;+  ULONG Capabilities;+} KSPROPERTY_VIDEOPROCAMP_S,*PKSPROPERTY_VIDEOPROCAMP_S;++typedef struct {+  KSP_NODE NodeProperty;+  LONG Value;+  ULONG Flags;+  ULONG Capabilities;+} KSPROPERTY_VIDEOPROCAMP_NODE_S,*PKSPROPERTY_VIDEOPROCAMP_NODE_S;++typedef struct {+  KSPROPERTY Property;+  LONG Value1;+  ULONG Flags;+  ULONG Capabilities;+  LONG Value2;+} KSPROPERTY_VIDEOPROCAMP_S2,*PKSPROPERTY_VIDEOPROCAMP_S2;++typedef struct {+  KSP_NODE NodeProperty;+  LONG Value1;+  ULONG Flags;+  ULONG Capabilities;+  LONG Value2;+} KSPROPERTY_VIDEOPROCAMP_NODE_S2,*PKSPROPERTY_VIDEOPROCAMP_NODE_S2;++#define KSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO	0X0001L+#define KSPROPERTY_VIDEOPROCAMP_FLAGS_MANUAL	0X0002L++#define STATIC_PROPSETID_VIDCAP_SELECTOR				\+	0x1ABDAECA,0x68B6,0x4F83,0x93,0x71,0xB4,0x13,0x90,0x7C,0x7B,0x9F+DEFINE_GUIDSTRUCT("1ABDAECA-68B6-4F83-9371-B413907C7B9F",PROPSETID_VIDCAP_SELECTOR);+#define PROPSETID_VIDCAP_SELECTOR DEFINE_GUIDNAMED(PROPSETID_VIDCAP_SELECTOR)++typedef enum {+  KSPROPERTY_SELECTOR_SOURCE_NODE_ID,+  KSPROPERTY_SELECTOR_NUM_SOURCES+} KSPROPERTY_VIDCAP_SELECTOR,*PKSPROPERTY_VIDCAP_SELECTOR;++typedef struct {+  KSPROPERTY Property;+  LONG Value;+  ULONG Flags;+  ULONG Capabilities;+} KSPROPERTY_SELECTOR_S,*PKSPROPERTY_SELECTOR_S;++typedef struct {+  KSP_NODE NodeProperty;+  LONG Value;+  ULONG Flags;+  ULONG Capabilities;+} KSPROPERTY_SELECTOR_NODE_S,*PKSPROPERTY_SELECTOR_NODE_S;++#define STATIC_PROPSETID_TUNER						\+	0x6a2e0605L,0x28e4,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56+DEFINE_GUIDSTRUCT("6a2e0605-28e4-11d0-a18c-00a0c9118956",PROPSETID_TUNER);+#define PROPSETID_TUNER DEFINE_GUIDNAMED(PROPSETID_TUNER)++typedef enum {+  KSPROPERTY_TUNER_CAPS,+  KSPROPERTY_TUNER_MODE_CAPS,+  KSPROPERTY_TUNER_MODE,+  KSPROPERTY_TUNER_STANDARD,+  KSPROPERTY_TUNER_FREQUENCY,+  KSPROPERTY_TUNER_INPUT,+  KSPROPERTY_TUNER_STATUS,+  KSPROPERTY_TUNER_IF_MEDIUM+} KSPROPERTY_TUNER;++typedef enum {+  KSPROPERTY_TUNER_MODE_TV = 0X0001,+  KSPROPERTY_TUNER_MODE_FM_RADIO = 0X0002,+  KSPROPERTY_TUNER_MODE_AM_RADIO = 0X0004,+  KSPROPERTY_TUNER_MODE_DSS = 0X0008,+  KSPROPERTY_TUNER_MODE_ATSC = 0X0010+} KSPROPERTY_TUNER_MODES;++typedef enum {+  KS_TUNER_TUNING_EXACT = 1,+  KS_TUNER_TUNING_FINE,+  KS_TUNER_TUNING_COARSE+} KS_TUNER_TUNING_FLAGS;++typedef enum {+  KS_TUNER_STRATEGY_PLL = 0X01,+  KS_TUNER_STRATEGY_SIGNAL_STRENGTH = 0X02,+  KS_TUNER_STRATEGY_DRIVER_TUNES = 0X04+} KS_TUNER_STRATEGY;++typedef struct {+  KSPROPERTY Property;+  ULONG ModesSupported;+  KSPIN_MEDIUM VideoMedium;+  KSPIN_MEDIUM TVAudioMedium;+  KSPIN_MEDIUM RadioAudioMedium;+} KSPROPERTY_TUNER_CAPS_S,*PKSPROPERTY_TUNER_CAPS_S;++typedef struct {+  KSPROPERTY Property;+  KSPIN_MEDIUM IFMedium;+} KSPROPERTY_TUNER_IF_MEDIUM_S,*PKSPROPERTY_TUNER_IF_MEDIUM_S;++typedef struct {+  KSPROPERTY Property;+  ULONG Mode;+  ULONG StandardsSupported;+  ULONG MinFrequency;+  ULONG MaxFrequency;+  ULONG TuningGranularity;+  ULONG NumberOfInputs;+  ULONG SettlingTime;+  ULONG Strategy;+} KSPROPERTY_TUNER_MODE_CAPS_S,*PKSPROPERTY_TUNER_MODE_CAPS_S;++typedef struct {+  KSPROPERTY Property;+  ULONG Mode;+} KSPROPERTY_TUNER_MODE_S,*PKSPROPERTY_TUNER_MODE_S;++typedef struct {+  KSPROPERTY Property;+  ULONG Frequency;+  ULONG LastFrequency;+  ULONG TuningFlags;+  ULONG VideoSubChannel;+  ULONG AudioSubChannel;+  ULONG Channel;+  ULONG Country;+} KSPROPERTY_TUNER_FREQUENCY_S,*PKSPROPERTY_TUNER_FREQUENCY_S;++typedef struct {+  KSPROPERTY Property;+  ULONG Standard;+} KSPROPERTY_TUNER_STANDARD_S,*PKSPROPERTY_TUNER_STANDARD_S;++typedef struct {+  KSPROPERTY Property;+  ULONG InputIndex;+} KSPROPERTY_TUNER_INPUT_S,*PKSPROPERTY_TUNER_INPUT_S;++typedef struct {+  KSPROPERTY Property;+  ULONG CurrentFrequency;+  ULONG PLLOffset;+  ULONG SignalStrength;+  ULONG Busy;+} KSPROPERTY_TUNER_STATUS_S,*PKSPROPERTY_TUNER_STATUS_S;++#define STATIC_EVENTSETID_TUNER						\+	0x6a2e0606L,0x28e4,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56+DEFINE_GUIDSTRUCT("6a2e0606-28e4-11d0-a18c-00a0c9118956",EVENTSETID_TUNER);+#define EVENTSETID_TUNER DEFINE_GUIDNAMED(EVENTSETID_TUNER)++typedef enum {+  KSEVENT_TUNER_CHANGED+} KSEVENT_TUNER;++#define STATIC_KSNODETYPE_VIDEO_STREAMING				\+	0xDFF229E1L,0xF70F,0x11D0,0xB9,0x17,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("DFF229E1-F70F-11D0-B917-00A0C9223196",KSNODETYPE_VIDEO_STREAMING);+#define KSNODETYPE_VIDEO_STREAMING DEFINE_GUIDNAMED(KSNODETYPE_VIDEO_STREAMING)++#define STATIC_KSNODETYPE_VIDEO_INPUT_TERMINAL				\+	0xDFF229E2L,0xF70F,0x11D0,0xB9,0x17,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("DFF229E2-F70F-11D0-B917-00A0C9223196",KSNODETYPE_VIDEO_INPUT_TERMINAL);+#define KSNODETYPE_VIDEO_INPUT_TERMINAL DEFINE_GUIDNAMED(KSNODETYPE_VIDEO_INPUT_TERMINAL)++#define STATIC_KSNODETYPE_VIDEO_OUTPUT_TERMINAL				\+	0xDFF229E3L,0xF70F,0x11D0,0xB9,0x17,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("DFF229E3-F70F-11D0-B917-00A0C9223196",KSNODETYPE_VIDEO_OUTPUT_TERMINAL);+#define KSNODETYPE_VIDEO_OUTPUT_TERMINAL DEFINE_GUIDNAMED(KSNODETYPE_VIDEO_OUTPUT_TERMINAL)++#define STATIC_KSNODETYPE_VIDEO_SELECTOR				\+	0xDFF229E4L,0xF70F,0x11D0,0xB9,0x17,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("DFF229E4-F70F-11D0-B917-00A0C9223196",KSNODETYPE_VIDEO_SELECTOR);+#define KSNODETYPE_VIDEO_SELECTOR DEFINE_GUIDNAMED(KSNODETYPE_VIDEO_SELECTOR)++#define STATIC_KSNODETYPE_VIDEO_PROCESSING				\+	0xDFF229E5L,0xF70F,0x11D0,0xB9,0x17,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("DFF229E5-F70F-11D0-B917-00A0C9223196",KSNODETYPE_VIDEO_PROCESSING);+#define KSNODETYPE_VIDEO_PROCESSING DEFINE_GUIDNAMED(KSNODETYPE_VIDEO_PROCESSING)++#define STATIC_KSNODETYPE_VIDEO_CAMERA_TERMINAL				\+	0xDFF229E6L,0xF70F,0x11D0,0xB9,0x17,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("DFF229E6-F70F-11D0-B917-00A0C9223196",KSNODETYPE_VIDEO_CAMERA_TERMINAL);+#define KSNODETYPE_VIDEO_CAMERA_TERMINAL DEFINE_GUIDNAMED(KSNODETYPE_VIDEO_CAMERA_TERMINAL)++#define STATIC_KSNODETYPE_VIDEO_INPUT_MTT				\+	0xDFF229E7L,0xF70F,0x11D0,0xB9,0x17,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("DFF229E7-F70F-11D0-B917-00A0C9223196",KSNODETYPE_VIDEO_INPUT_MTT);+#define KSNODETYPE_VIDEO_INPUT_MTT DEFINE_GUIDNAMED(KSNODETYPE_VIDEO_INPUT_MTT)++#define STATIC_KSNODETYPE_VIDEO_OUTPUT_MTT				\+	0xDFF229E8L,0xF70F,0x11D0,0xB9,0x17,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("DFF229E8-F70F-11D0-B917-00A0C9223196",KSNODETYPE_VIDEO_OUTPUT_MTT);+#define KSNODETYPE_VIDEO_OUTPUT_MTT DEFINE_GUIDNAMED(KSNODETYPE_VIDEO_OUTPUT_MTT)++#define STATIC_PROPSETID_VIDCAP_VIDEOENCODER				\+	0x6a2e0610L,0x28e4,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56+DEFINE_GUIDSTRUCT("6a2e0610-28e4-11d0-a18c-00a0c9118956",PROPSETID_VIDCAP_VIDEOENCODER);+#define PROPSETID_VIDCAP_VIDEOENCODER DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEOENCODER)++typedef enum {+  KSPROPERTY_VIDEOENCODER_CAPS,+  KSPROPERTY_VIDEOENCODER_STANDARD,+  KSPROPERTY_VIDEOENCODER_COPYPROTECTION,+  KSPROPERTY_VIDEOENCODER_CC_ENABLE+} KSPROPERTY_VIDCAP_VIDEOENCODER;++typedef struct {+  KSPROPERTY Property;+  LONG Value;+  ULONG Flags;+  ULONG Capabilities;+} KSPROPERTY_VIDEOENCODER_S,*PKSPROPERTY_VIDEOENCODER_S;++#define STATIC_PROPSETID_VIDCAP_VIDEODECODER				\+	0xC6E13350L,0x30AC,0x11d0,0xA1,0x8C,0x00,0xA0,0xC9,0x11,0x89,0x56+DEFINE_GUIDSTRUCT("C6E13350-30AC-11d0-A18C-00A0C9118956",PROPSETID_VIDCAP_VIDEODECODER);+#define PROPSETID_VIDCAP_VIDEODECODER DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEODECODER)++typedef enum {+  KSPROPERTY_VIDEODECODER_CAPS,+  KSPROPERTY_VIDEODECODER_STANDARD,+  KSPROPERTY_VIDEODECODER_STATUS,+  KSPROPERTY_VIDEODECODER_OUTPUT_ENABLE,+  KSPROPERTY_VIDEODECODER_VCR_TIMING+} KSPROPERTY_VIDCAP_VIDEODECODER;++typedef enum {+  KS_VIDEODECODER_FLAGS_CAN_DISABLE_OUTPUT = 0X0001,+  KS_VIDEODECODER_FLAGS_CAN_USE_VCR_LOCKING = 0X0002,+  KS_VIDEODECODER_FLAGS_CAN_INDICATE_LOCKED = 0X0004+} KS_VIDEODECODER_FLAGS;++typedef struct {+  KSPROPERTY Property;+  ULONG StandardsSupported;+  ULONG Capabilities;+  ULONG SettlingTime;+  ULONG HSyncPerVSync;+} KSPROPERTY_VIDEODECODER_CAPS_S,*PKSPROPERTY_VIDEODECODER_CAPS_S;++typedef struct {+  KSPROPERTY Property;+  ULONG NumberOfLines;+  ULONG SignalLocked;+} KSPROPERTY_VIDEODECODER_STATUS_S,*PKSPROPERTY_VIDEODECODER_STATUS_S;++typedef struct {+  KSPROPERTY Property;+  ULONG Value;+} KSPROPERTY_VIDEODECODER_S,*PKSPROPERTY_VIDEODECODER_S;++#define STATIC_EVENTSETID_VIDEODECODER					\+	0x6a2e0621L,0x28e4,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56+DEFINE_GUIDSTRUCT("6a2e0621-28e4-11d0-a18c-00a0c9118956",EVENTSETID_VIDEODECODER);+#define EVENTSETID_VIDEODECODER DEFINE_GUIDNAMED(EVENTSETID_VIDEODECODER)++typedef enum {+  KSEVENT_VIDEODECODER_CHANGED+} KSEVENT_VIDEODECODER;++#define STATIC_PROPSETID_VIDCAP_CAMERACONTROL				\+	0xC6E13370L,0x30AC,0x11d0,0xa1,0x8C,0x00,0xA0,0xC9,0x11,0x89,0x56+DEFINE_GUIDSTRUCT("C6E13370-30AC-11d0-A18C-00A0C9118956",PROPSETID_VIDCAP_CAMERACONTROL);+#define PROPSETID_VIDCAP_CAMERACONTROL DEFINE_GUIDNAMED(PROPSETID_VIDCAP_CAMERACONTROL)++typedef enum {+  KSPROPERTY_CAMERACONTROL_PAN,+  KSPROPERTY_CAMERACONTROL_TILT,+  KSPROPERTY_CAMERACONTROL_ROLL,+  KSPROPERTY_CAMERACONTROL_ZOOM,+  KSPROPERTY_CAMERACONTROL_EXPOSURE,+  KSPROPERTY_CAMERACONTROL_IRIS,+  KSPROPERTY_CAMERACONTROL_FOCUS,+  KSPROPERTY_CAMERACONTROL_SCANMODE,+  KSPROPERTY_CAMERACONTROL_PRIVACY,+  KSPROPERTY_CAMERACONTROL_PANTILT,+  KSPROPERTY_CAMERACONTROL_PAN_RELATIVE,+  KSPROPERTY_CAMERACONTROL_TILT_RELATIVE,+  KSPROPERTY_CAMERACONTROL_ROLL_RELATIVE,+  KSPROPERTY_CAMERACONTROL_ZOOM_RELATIVE,+  KSPROPERTY_CAMERACONTROL_EXPOSURE_RELATIVE,+  KSPROPERTY_CAMERACONTROL_IRIS_RELATIVE,+  KSPROPERTY_CAMERACONTROL_FOCUS_RELATIVE,+  KSPROPERTY_CAMERACONTROL_PANTILT_RELATIVE,+  KSPROPERTY_CAMERACONTROL_FOCAL_LENGTH+} KSPROPERTY_VIDCAP_CAMERACONTROL;++typedef struct {+  KSPROPERTY Property;+  LONG Value;+  ULONG Flags;+  ULONG Capabilities;+} KSPROPERTY_CAMERACONTROL_S,*PKSPROPERTY_CAMERACONTROL_S;++typedef struct {+  KSP_NODE NodeProperty;+  LONG Value;+  ULONG Flags;+  ULONG Capabilities;+} KSPROPERTY_CAMERACONTROL_NODE_S,PKSPROPERTY_CAMERACONTROL_NODE_S;++typedef struct {+  KSPROPERTY Property;+  LONG Value1;+  ULONG Flags;+  ULONG Capabilities;+  LONG Value2;+} KSPROPERTY_CAMERACONTROL_S2,*PKSPROPERTY_CAMERACONTROL_S2;++typedef struct {+  KSP_NODE NodeProperty;+  LONG Value1;+  ULONG Flags;+  ULONG Capabilities;+  LONG Value2;+} KSPROPERTY_CAMERACONTROL_NODE_S2,*PKSPROPERTY_CAMERACONTROL_NODE_S2;++typedef struct {+  KSPROPERTY Property;+  LONG lOcularFocalLength;+  LONG lObjectiveFocalLengthMin;+  LONG lObjectiveFocalLengthMax;+} KSPROPERTY_CAMERACONTROL_FOCAL_LENGTH_S,*PKSPROPERTY_CAMERACONTROL_FOCAL_LENGTH_S;++typedef struct {+  KSNODEPROPERTY NodeProperty;+  LONG lOcularFocalLength;+  LONG lObjectiveFocalLengthMin;+  LONG lObjectiveFocalLengthMax;+} KSPROPERTY_CAMERACONTROL_NODE_FOCAL_LENGTH_S,*PKSPROPERTY_CAMERACONTROL_NODE_FOCAL_LENGTH_S;++#define KSPROPERTY_CAMERACONTROL_FLAGS_AUTO	0X0001L+#define KSPROPERTY_CAMERACONTROL_FLAGS_MANUAL	0X0002L++#define KSPROPERTY_CAMERACONTROL_FLAGS_ABSOLUTE	0X0000L+#define KSPROPERTY_CAMERACONTROL_FLAGS_RELATIVE	0X0010L++#ifndef __EDevCtrl__+#define __EDevCtrl__++#define STATIC_PROPSETID_EXT_DEVICE					\+	0xB5730A90L,0x1A2C,0x11cf,0x8c,0x23,0x00,0xAA,0x00,0x6B,0x68,0x14+DEFINE_GUIDSTRUCT("B5730A90-1A2C-11cf-8C23-00AA006B6814",PROPSETID_EXT_DEVICE);+#define PROPSETID_EXT_DEVICE DEFINE_GUIDNAMED(PROPSETID_EXT_DEVICE)++typedef enum {+  KSPROPERTY_EXTDEVICE_ID,+  KSPROPERTY_EXTDEVICE_VERSION,+  KSPROPERTY_EXTDEVICE_POWER_STATE,+  KSPROPERTY_EXTDEVICE_PORT,+  KSPROPERTY_EXTDEVICE_CAPABILITIES+} KSPROPERTY_EXTDEVICE;++typedef struct tagDEVCAPS{+  LONG CanRecord;+  LONG CanRecordStrobe;+  LONG HasAudio;+  LONG HasVideo;+  LONG UsesFiles;+  LONG CanSave;+  LONG DeviceType;+  LONG TCRead;+  LONG TCWrite;+  LONG CTLRead;+  LONG IndexRead;+  LONG Preroll;+  LONG Postroll;+  LONG SyncAcc;+  LONG NormRate;+  LONG CanPreview;+  LONG CanMonitorSrc;+  LONG CanTest;+  LONG VideoIn;+  LONG AudioIn;+  LONG Calibrate;+  LONG SeekType;+  LONG SimulatedHardware;+} DEVCAPS,*PDEVCAPS;++typedef struct {+  KSPROPERTY Property;+  union {+    DEVCAPS Capabilities;+    ULONG DevPort;+    ULONG PowerState;+    WCHAR pawchString[MAX_PATH];+    DWORD NodeUniqueID[2];+  } u;+} KSPROPERTY_EXTDEVICE_S,*PKSPROPERTY_EXTDEVICE_S;++#define STATIC_PROPSETID_EXT_TRANSPORT					\+	0xA03CD5F0L,0x3045,0x11cf,0x8c,0x44,0x00,0xAA,0x00,0x6B,0x68,0x14+DEFINE_GUIDSTRUCT("A03CD5F0-3045-11cf-8C44-00AA006B6814",PROPSETID_EXT_TRANSPORT);+#define PROPSETID_EXT_TRANSPORT DEFINE_GUIDNAMED(PROPSETID_EXT_TRANSPORT)++typedef enum {+  KSPROPERTY_EXTXPORT_CAPABILITIES,+  KSPROPERTY_EXTXPORT_INPUT_SIGNAL_MODE,+  KSPROPERTY_EXTXPORT_OUTPUT_SIGNAL_MODE,+  KSPROPERTY_EXTXPORT_LOAD_MEDIUM,+  KSPROPERTY_EXTXPORT_MEDIUM_INFO,+  KSPROPERTY_EXTXPORT_STATE,+  KSPROPERTY_EXTXPORT_STATE_NOTIFY,+  KSPROPERTY_EXTXPORT_TIMECODE_SEARCH,+  KSPROPERTY_EXTXPORT_ATN_SEARCH,+  KSPROPERTY_EXTXPORT_RTC_SEARCH,+  KSPROPERTY_RAW_AVC_CMD+} KSPROPERTY_EXTXPORT;++typedef struct tagTRANSPORTSTATUS {+  LONG Mode;+  LONG LastError;+  LONG RecordInhibit;+  LONG ServoLock;+  LONG MediaPresent;+  LONG MediaLength;+  LONG MediaSize;+  LONG MediaTrackCount;+  LONG MediaTrackLength;+  LONG MediaTrackSide;+  LONG MediaType;+  LONG LinkMode;+  LONG NotifyOn;+} TRANSPORTSTATUS,*PTRANSPORTSTATUS;++typedef struct tagTRANSPORTBASICPARMS {+  LONG TimeFormat;+  LONG TimeReference;+  LONG Superimpose;+  LONG EndStopAction;+  LONG RecordFormat;+  LONG StepFrames;+  LONG SetpField;+  LONG Preroll;+  LONG RecPreroll;+  LONG Postroll;+  LONG EditDelay;+  LONG PlayTCDelay;+  LONG RecTCDelay;+  LONG EditField;+  LONG FrameServo;+  LONG ColorFrameServo;+  LONG ServoRef;+  LONG WarnGenlock;+  LONG SetTracking;+  TCHAR VolumeName[40];+  LONG Ballistic[20];+  LONG Speed;+  LONG CounterFormat;+  LONG TunerChannel;+  LONG TunerNumber;+  LONG TimerEvent;+  LONG TimerStartDay;+  LONG TimerStartTime;+  LONG TimerStopDay;+  LONG TimerStopTime;+} TRANSPORTBASICPARMS,*PTRANSPORTBASICPARMS;++typedef struct tagTRANSPORTVIDEOPARMS {+  LONG OutputMode;+  LONG Input;+} TRANSPORTVIDEOPARMS,*PTRANSPORTVIDEOPARMS;++typedef struct tagTRANSPORTAUDIOPARMS {+  LONG EnableOutput;+  LONG EnableRecord;+  LONG EnableSelsync;+  LONG Input;+  LONG MonitorSource;+} TRANSPORTAUDIOPARMS,*PTRANSPORTAUDIOPARMS;++typedef struct {+  WINBOOL MediaPresent;+  ULONG MediaType;+  WINBOOL RecordInhibit;+} MEDIUM_INFO,*PMEDIUM_INFO;++typedef struct {+  ULONG Mode;+  ULONG State;+} TRANSPORT_STATE,*PTRANSPORT_STATE;++typedef struct {+  KSPROPERTY Property;+  union {+    ULONG Capabilities;+    ULONG SignalMode;+    ULONG LoadMedium;+    MEDIUM_INFO MediumInfo;+    TRANSPORT_STATE XPrtState;+    struct {+      BYTE frame;+      BYTE second;+      BYTE minute;+      BYTE hour;+    } Timecode;+    DWORD dwTimecode;+    DWORD dwAbsTrackNumber;+    struct {+      ULONG PayloadSize;+      BYTE Payload[512];+    } RawAVC;+  } u;+} KSPROPERTY_EXTXPORT_S,*PKSPROPERTY_EXTXPORT_S;++typedef struct {+  KSP_NODE NodeProperty;+  union {+    ULONG Capabilities;+    ULONG SignalMode;+    ULONG LoadMedium;+    MEDIUM_INFO MediumInfo;+    TRANSPORT_STATE XPrtState;+    struct {+      BYTE frame;+      BYTE second;+      BYTE minute;+      BYTE hour;+    } Timecode;+    DWORD dwTimecode;+    DWORD dwAbsTrackNumber;+    struct {+      ULONG PayloadSize;+      BYTE Payload[512];+    } RawAVC;+  } u;+} KSPROPERTY_EXTXPORT_NODE_S,*PKSPROPERTY_EXTXPORT_NODE_S;++#define STATIC_PROPSETID_TIMECODE_READER				\+	0x9B496CE1L,0x811B,0x11cf,0x8C,0x77,0x00,0xAA,0x00,0x6B,0x68,0x14+DEFINE_GUIDSTRUCT("9B496CE1-811B-11cf-8C77-00AA006B6814",PROPSETID_TIMECODE_READER);+#define PROPSETID_TIMECODE_READER DEFINE_GUIDNAMED(PROPSETID_TIMECODE_READER)++typedef enum {+  KSPROPERTY_TIMECODE_READER,+  KSPROPERTY_ATN_READER,+  KSPROPERTY_RTC_READER+} KSPROPERTY_TIMECODE;++#ifndef TIMECODE_DEFINED+#define TIMECODE_DEFINED+typedef union _timecode {+  struct {+    WORD wFrameRate;+    WORD wFrameFract;+    DWORD dwFrames;+  };+  DWORDLONG qw;+} TIMECODE;+typedef TIMECODE *PTIMECODE;++typedef struct tagTIMECODE_SAMPLE {+  LONGLONG qwTick;+  TIMECODE timecode;+  DWORD dwUser;+  DWORD dwFlags;+} TIMECODE_SAMPLE;++typedef TIMECODE_SAMPLE *PTIMECODE_SAMPLE;+#endif /* TIMECODE_DEFINED */++typedef struct {+  KSPROPERTY Property;+  TIMECODE_SAMPLE TimecodeSamp;+} KSPROPERTY_TIMECODE_S,*PKSPROPERTY_TIMECODE_S;++typedef struct {+  KSP_NODE NodeProperty;+  TIMECODE_SAMPLE TimecodeSamp;+} KSPROPERTY_TIMECODE_NODE_S,*PKSPROPERTY_TIMECODE_NODE_S;++#define STATIC_KSEVENTSETID_EXTDEV_Command				\+	0x109c7988L,0xb3cb,0x11d2,0xb4,0x8e,0x00,0x60,0x97,0xb3,0x39,0x1b+DEFINE_GUIDSTRUCT("109c7988-b3cb-11d2-b48e-006097b3391b",KSEVENTSETID_EXTDEV_Command);+#define KSEVENTSETID_EXTDEV_Command DEFINE_GUIDNAMED(KSEVENTSETID_EXTDEV_Command)++typedef enum {+  KSEVENT_EXTDEV_COMMAND_NOTIFY_INTERIM_READY,+  KSEVENT_EXTDEV_COMMAND_CONTROL_INTERIM_READY,+  KSEVENT_EXTDEV_COMMAND_BUSRESET,+  KSEVENT_EXTDEV_TIMECODE_UPDATE,+  KSEVENT_EXTDEV_OPERATION_MODE_UPDATE,+  KSEVENT_EXTDEV_TRANSPORT_STATE_UPDATE,+  KSEVENT_EXTDEV_NOTIFY_REMOVAL,+  KSEVENT_EXTDEV_NOTIFY_MEDIUM_CHANGE+} KSEVENT_DEVCMD;+#endif /* __EDevCtrl__ */++#define STATIC_PROPSETID_VIDCAP_CROSSBAR				\+	0x6a2e0640L,0x28e4,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56+DEFINE_GUIDSTRUCT("6a2e0640-28e4-11d0-a18c-00a0c9118956",PROPSETID_VIDCAP_CROSSBAR);+#define PROPSETID_VIDCAP_CROSSBAR DEFINE_GUIDNAMED(PROPSETID_VIDCAP_CROSSBAR)++typedef enum {+  KSPROPERTY_CROSSBAR_CAPS,+  KSPROPERTY_CROSSBAR_PININFO,+  KSPROPERTY_CROSSBAR_CAN_ROUTE,+  KSPROPERTY_CROSSBAR_ROUTE+} KSPROPERTY_VIDCAP_CROSSBAR;++typedef struct {+  KSPROPERTY Property;+  ULONG NumberOfInputs;+  ULONG NumberOfOutputs;+} KSPROPERTY_CROSSBAR_CAPS_S,*PKSPROPERTY_CROSSBAR_CAPS_S;++typedef struct {+  KSPROPERTY Property;+  KSPIN_DATAFLOW Direction;+  ULONG Index;+  ULONG PinType;+  ULONG RelatedPinIndex;+  KSPIN_MEDIUM Medium;+} KSPROPERTY_CROSSBAR_PININFO_S,*PKSPROPERTY_CROSSBAR_PININFO_S;++typedef struct {+  KSPROPERTY Property;+  ULONG IndexInputPin;+  ULONG IndexOutputPin;+  ULONG CanRoute;+} KSPROPERTY_CROSSBAR_ROUTE_S,*PKSPROPERTY_CROSSBAR_ROUTE_S;++#define STATIC_EVENTSETID_CROSSBAR					\+	0x6a2e0641L,0x28e4,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56+DEFINE_GUIDSTRUCT("6a2e0641-28e4-11d0-a18c-00a0c9118956",EVENTSETID_CROSSBAR);+#define EVENTSETID_CROSSBAR DEFINE_GUIDNAMED(EVENTSETID_CROSSBAR)++typedef enum {+  KSEVENT_CROSSBAR_CHANGED+} KSEVENT_CROSSBAR;++typedef enum {+  KS_PhysConn_Video_Tuner = 1,+  KS_PhysConn_Video_Composite,+  KS_PhysConn_Video_SVideo,+  KS_PhysConn_Video_RGB,+  KS_PhysConn_Video_YRYBY,+  KS_PhysConn_Video_SerialDigital,+  KS_PhysConn_Video_ParallelDigital,+  KS_PhysConn_Video_SCSI,+  KS_PhysConn_Video_AUX,+  KS_PhysConn_Video_1394,+  KS_PhysConn_Video_USB,+  KS_PhysConn_Video_VideoDecoder,+  KS_PhysConn_Video_VideoEncoder,+  KS_PhysConn_Video_SCART,+  KS_PhysConn_Audio_Tuner = 4096,+  KS_PhysConn_Audio_Line,+  KS_PhysConn_Audio_Mic,+  KS_PhysConn_Audio_AESDigital,+  KS_PhysConn_Audio_SPDIFDigital,+  KS_PhysConn_Audio_SCSI,+  KS_PhysConn_Audio_AUX,+  KS_PhysConn_Audio_1394,+  KS_PhysConn_Audio_USB,+  KS_PhysConn_Audio_AudioDecoder+} KS_PhysicalConnectorType;++#define STATIC_PROPSETID_VIDCAP_TVAUDIO					\+	0x6a2e0650L,0x28e4,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56+DEFINE_GUIDSTRUCT("6a2e0650-28e4-11d0-a18c-00a0c9118956",PROPSETID_VIDCAP_TVAUDIO);+#define PROPSETID_VIDCAP_TVAUDIO DEFINE_GUIDNAMED(PROPSETID_VIDCAP_TVAUDIO)++typedef enum {+  KSPROPERTY_TVAUDIO_CAPS,+  KSPROPERTY_TVAUDIO_MODE,+  KSPROPERTY_TVAUDIO_CURRENTLY_AVAILABLE_MODES+} KSPROPERTY_VIDCAP_TVAUDIO;++#define KS_TVAUDIO_MODE_MONO	0x0001+#define KS_TVAUDIO_MODE_STEREO	0x0002+#define KS_TVAUDIO_MODE_LANG_A	0x0010+#define KS_TVAUDIO_MODE_LANG_B	0x0020+#define KS_TVAUDIO_MODE_LANG_C	0x0040++typedef struct {+  KSPROPERTY Property;+  ULONG Capabilities;+  KSPIN_MEDIUM InputMedium;+  KSPIN_MEDIUM OutputMedium;+} KSPROPERTY_TVAUDIO_CAPS_S,*PKSPROPERTY_TVAUDIO_CAPS_S;++typedef struct {+  KSPROPERTY Property;+  ULONG Mode;+} KSPROPERTY_TVAUDIO_S,*PKSPROPERTY_TVAUDIO_S;++#define STATIC_KSEVENTSETID_VIDCAP_TVAUDIO				\+	0x6a2e0651L,0x28e4,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56+DEFINE_GUIDSTRUCT("6a2e0651-28e4-11d0-a18c-00a0c9118956",KSEVENTSETID_VIDCAP_TVAUDIO);+#define KSEVENTSETID_VIDCAP_TVAUDIO DEFINE_GUIDNAMED(KSEVENTSETID_VIDCAP_TVAUDIO)++typedef enum {+  KSEVENT_TVAUDIO_CHANGED+} KSEVENT_TVAUDIO;++#define STATIC_PROPSETID_VIDCAP_VIDEOCOMPRESSION			\+	0xC6E13343L,0x30AC,0x11d0,0xA1,0x8C,0x00,0xA0,0xC9,0x11,0x89,0x56+DEFINE_GUIDSTRUCT("C6E13343-30AC-11d0-A18C-00A0C9118956",PROPSETID_VIDCAP_VIDEOCOMPRESSION);+#define PROPSETID_VIDCAP_VIDEOCOMPRESSION DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEOCOMPRESSION)++typedef enum {+  KSPROPERTY_VIDEOCOMPRESSION_GETINFO,+  KSPROPERTY_VIDEOCOMPRESSION_KEYFRAME_RATE,+  KSPROPERTY_VIDEOCOMPRESSION_PFRAMES_PER_KEYFRAME,+  KSPROPERTY_VIDEOCOMPRESSION_QUALITY,+  KSPROPERTY_VIDEOCOMPRESSION_OVERRIDE_KEYFRAME,+  KSPROPERTY_VIDEOCOMPRESSION_OVERRIDE_FRAME_SIZE,+  KSPROPERTY_VIDEOCOMPRESSION_WINDOWSIZE+} KSPROPERTY_VIDCAP_VIDEOCOMPRESSION;++typedef enum {+  KS_CompressionCaps_CanQuality = 1,+  KS_CompressionCaps_CanCrunch = 2,+  KS_CompressionCaps_CanKeyFrame = 4,+  KS_CompressionCaps_CanBFrame = 8,+  KS_CompressionCaps_CanWindow = 0x10+} KS_CompressionCaps;++typedef enum {+  KS_StreamingHint_FrameInterval = 0x0100,+  KS_StreamingHint_KeyFrameRate = 0x0200,+  KS_StreamingHint_PFrameRate = 0x0400,+  KS_StreamingHint_CompQuality = 0x0800,+  KS_StreamingHint_CompWindowSize = 0x1000+} KS_VideoStreamingHints;++typedef struct {+  KSPROPERTY Property;+  ULONG StreamIndex;+  LONG DefaultKeyFrameRate;+  LONG DefaultPFrameRate;+  LONG DefaultQuality;+  LONG NumberOfQualitySettings;+  LONG Capabilities;+} KSPROPERTY_VIDEOCOMPRESSION_GETINFO_S,*PKSPROPERTY_VIDEOCOMPRESSION_GETINFO_S;++typedef struct {+  KSPROPERTY Property;+  ULONG StreamIndex;+  LONG Value;+} KSPROPERTY_VIDEOCOMPRESSION_S,*PKSPROPERTY_VIDEOCOMPRESSION_S;++typedef struct {+  KSPROPERTY Property;+  ULONG StreamIndex;+  LONG Value;+  ULONG Flags;+} KSPROPERTY_VIDEOCOMPRESSION_S1,*PKSPROPERTY_VIDEOCOMPRESSION_S1;++#define STATIC_KSDATAFORMAT_SUBTYPE_OVERLAY				\+	0xe436eb7fL,0x524f,0x11ce,0x9f,0x53,0x00,0x20,0xaf,0x0b,0xa7,0x70+DEFINE_GUIDSTRUCT("e436eb7f-524f-11ce-9f53-0020af0ba770",KSDATAFORMAT_SUBTYPE_OVERLAY);+#define KSDATAFORMAT_SUBTYPE_OVERLAY DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_OVERLAY)++#define STATIC_KSPROPSETID_OverlayUpdate				\+	0x490EA5CFL,0x7681,0x11D1,0xA2,0x1C,0x00,0xA0,0xC9,0x22,0x31,0x96+DEFINE_GUIDSTRUCT("490EA5CF-7681-11D1-A21C-00A0C9223196",KSPROPSETID_OverlayUpdate);+#define KSPROPSETID_OverlayUpdate DEFINE_GUIDNAMED(KSPROPSETID_OverlayUpdate)++typedef enum {+  KSPROPERTY_OVERLAYUPDATE_INTERESTS,+  KSPROPERTY_OVERLAYUPDATE_CLIPLIST = 0x1,+  KSPROPERTY_OVERLAYUPDATE_PALETTE = 0x2,+  KSPROPERTY_OVERLAYUPDATE_COLORKEY = 0x4,+  KSPROPERTY_OVERLAYUPDATE_VIDEOPOSITION = 0x8,+  KSPROPERTY_OVERLAYUPDATE_DISPLAYCHANGE = 0x10,+  KSPROPERTY_OVERLAYUPDATE_COLORREF = 0x10000000+} KSPROPERTY_OVERLAYUPDATE;++typedef struct {+  ULONG PelsWidth;+  ULONG PelsHeight;+  ULONG BitsPerPel;+  WCHAR DeviceID[1];+} KSDISPLAYCHANGE,*PKSDISPLAYCHANGE;++#define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_INTERESTS(Handler)		\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_OVERLAYUPDATE_INTERESTS,	\+				(Handler),				\+				sizeof(KSPROPERTY),			\+				sizeof(ULONG),				\+				NULL, NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_PALETTE(Handler)		\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_OVERLAYUPDATE_PALETTE,	\+				NULL,					\+				sizeof(KSPROPERTY),			\+				0,					\+				(Handler),				\+				NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_COLORKEY(Handler)		\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_OVERLAYUPDATE_COLORKEY,	\+				NULL,					\+				sizeof(KSPROPERTY),			\+				sizeof(COLORKEY),			\+				(Handler),				\+				NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_CLIPLIST(Handler)		\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_OVERLAYUPDATE_CLIPLIST,	\+				NULL,					\+				sizeof(KSPROPERTY),			\+				2 *sizeof(RECT) + sizeof(RGNDATAHEADER),\+				(Handler),				\+				NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_VIDEOPOSITION(Handler)	\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_OVERLAYUPDATE_VIDEOPOSITION,	\+				NULL,					\+				sizeof(KSPROPERTY),			\+				2 *sizeof(RECT),			\+				(Handler),				\+				NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_DISPLAYCHANGE(Handler)	\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_OVERLAYUPDATE_DISPLAYCHANGE,	\+				NULL,					\+				sizeof(KSPROPERTY),			\+				sizeof(KSDISPLAYCHANGE),		\+				(Handler),				\+				NULL, 0, NULL, NULL, 0)++#define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_COLORREF(Handler)		\+	DEFINE_KSPROPERTY_ITEM(						\+				KSPROPERTY_OVERLAYUPDATE_COLORREF,	\+				(Handler),				\+				sizeof(KSPROPERTY),			\+				sizeof(COLORREF),			\+				NULL,					\+				NULL, 0, NULL, NULL, 0)++#define STATIC_PROPSETID_VIDCAP_VIDEOCONTROL				\+	0x6a2e0670L,0x28e4,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56+DEFINE_GUIDSTRUCT("6a2e0670-28e4-11d0-a18c-00a0c9118956",PROPSETID_VIDCAP_VIDEOCONTROL);+#define PROPSETID_VIDCAP_VIDEOCONTROL DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEOCONTROL)++typedef enum {+  KSPROPERTY_VIDEOCONTROL_CAPS,+  KSPROPERTY_VIDEOCONTROL_ACTUAL_FRAME_RATE,+  KSPROPERTY_VIDEOCONTROL_FRAME_RATES,+  KSPROPERTY_VIDEOCONTROL_MODE+} KSPROPERTY_VIDCAP_VIDEOCONTROL;++typedef enum {+  KS_VideoControlFlag_FlipHorizontal = 0x0001,+  KS_VideoControlFlag_FlipVertical = 0x0002,+  KS_Obsolete_VideoControlFlag_ExternalTriggerEnable = 0x0010,+  KS_Obsolete_VideoControlFlag_Trigger = 0x0020,+  KS_VideoControlFlag_ExternalTriggerEnable = 0x0004,+  KS_VideoControlFlag_Trigger = 0x0008+} KS_VideoControlFlags;++typedef struct {+  KSPROPERTY Property;+  ULONG StreamIndex;+  ULONG VideoControlCaps;+} KSPROPERTY_VIDEOCONTROL_CAPS_S,*PKSPROPERTY_VIDEOCONTROL_CAPS_S;++typedef struct {+  KSPROPERTY Property;+  ULONG StreamIndex;+  LONG Mode;+} KSPROPERTY_VIDEOCONTROL_MODE_S,*PKSPROPERTY_VIDEOCONTROL_MODE_S;++typedef struct {+  KSPROPERTY Property;+  ULONG StreamIndex;+  ULONG RangeIndex;+  SIZE Dimensions;+  LONGLONG CurrentActualFrameRate;+  LONGLONG CurrentMaxAvailableFrameRate;+} KSPROPERTY_VIDEOCONTROL_ACTUAL_FRAME_RATE_S,*PKSPROPERTY_VIDEOCONTROL_ACTUAL_FRAME_RATE_S;++typedef struct {+  KSPROPERTY Property;+  ULONG StreamIndex;+  ULONG RangeIndex;+  SIZE Dimensions;+} KSPROPERTY_VIDEOCONTROL_FRAME_RATES_S,*PKSPROPERTY_VIDEOCONTROL_FRAME_RATES_S;++#define STATIC_PROPSETID_VIDCAP_DROPPEDFRAMES				\+	0xC6E13344L,0x30AC,0x11d0,0xa1,0x8c,0x00,0xa0,0xc9,0x11,0x89,0x56+DEFINE_GUIDSTRUCT("C6E13344-30AC-11d0-A18C-00A0C9118956",PROPSETID_VIDCAP_DROPPEDFRAMES);+#define PROPSETID_VIDCAP_DROPPEDFRAMES DEFINE_GUIDNAMED(PROPSETID_VIDCAP_DROPPEDFRAMES)++typedef enum {+  KSPROPERTY_DROPPEDFRAMES_CURRENT+} KSPROPERTY_VIDCAP_DROPPEDFRAMES;++typedef struct {+  KSPROPERTY Property;+  LONGLONG PictureNumber;+  LONGLONG DropCount;+  ULONG AverageFrameSize;+} KSPROPERTY_DROPPEDFRAMES_CURRENT_S,*PKSPROPERTY_DROPPEDFRAMES_CURRENT_S;++#define STATIC_KSPROPSETID_VPConfig					\+	0xbc29a660L,0x30e3,0x11d0,0x9e,0x69,0x00,0xc0,0x4f,0xd7,0xc1,0x5b+DEFINE_GUIDSTRUCT("bc29a660-30e3-11d0-9e69-00c04fd7c15b",KSPROPSETID_VPConfig);+#define KSPROPSETID_VPConfig DEFINE_GUIDNAMED(KSPROPSETID_VPConfig)++#define STATIC_KSPROPSETID_VPVBIConfig					\+	0xec529b00L,0x1a1f,0x11d1,0xba,0xd9,0x0,0x60,0x97,0x44,0x11,0x1a+DEFINE_GUIDSTRUCT("ec529b00-1a1f-11d1-bad9-00609744111a",KSPROPSETID_VPVBIConfig);+#define KSPROPSETID_VPVBIConfig DEFINE_GUIDNAMED(KSPROPSETID_VPVBIConfig)++typedef enum {+  KSPROPERTY_VPCONFIG_NUMCONNECTINFO,+  KSPROPERTY_VPCONFIG_GETCONNECTINFO,+  KSPROPERTY_VPCONFIG_SETCONNECTINFO,+  KSPROPERTY_VPCONFIG_VPDATAINFO,+  KSPROPERTY_VPCONFIG_MAXPIXELRATE,+  KSPROPERTY_VPCONFIG_INFORMVPINPUT,+  KSPROPERTY_VPCONFIG_NUMVIDEOFORMAT,+  KSPROPERTY_VPCONFIG_GETVIDEOFORMAT,+  KSPROPERTY_VPCONFIG_SETVIDEOFORMAT,+  KSPROPERTY_VPCONFIG_INVERTPOLARITY,+  KSPROPERTY_VPCONFIG_DECIMATIONCAPABILITY,+  KSPROPERTY_VPCONFIG_SCALEFACTOR,+  KSPROPERTY_VPCONFIG_DDRAWHANDLE,+  KSPROPERTY_VPCONFIG_VIDEOPORTID,+  KSPROPERTY_VPCONFIG_DDRAWSURFACEHANDLE,+  KSPROPERTY_VPCONFIG_SURFACEPARAMS+} KSPROPERTY_VPCONFIG;++#define STATIC_CLSID_KsIBasicAudioInterfaceHandler			\+	0xb9f8ac3e,0x0f71,0x11d2,0xb7,0x2c,0x00,0xc0,0x4f,0xb6,0xbd,0x3d+DEFINE_GUIDSTRUCT("b9f8ac3e-0f71-11d2-b72c-00c04fb6bd3d",CLSID_KsIBasicAudioInterfaceHandler);+#define CLSID_KsIBasicAudioInterfaceHandler DEFINE_GUIDNAMED(CLSID_KsIBasicAudioInterfaceHandler)++#ifdef __IVPType__+typedef struct {+  AMVPSIZE Size;+  DWORD MaxPixelsPerSecond;+  DWORD Reserved;+} KSVPMAXPIXELRATE,*PKSVPMAXPIXELRATE;++typedef struct {+  KSPROPERTY Property;+  AMVPSIZE Size;+} KSVPSIZE_PROP,*PKSVPSIZE_PROP;++typedef struct {+  DWORD dwPitch;+  DWORD dwXOrigin;+  DWORD dwYOrigin;+} KSVPSURFACEPARAMS,*PKSVPSURFACEPARAMS;+#else /* __IVPType__ */++#ifndef __DDRAW_INCLUDED__+#define DDPF_FOURCC 0x00000004l++typedef struct _DDPIXELFORMAT+{+  DWORD dwSize;+  DWORD dwFlags;+  DWORD dwFourCC;+  __MINGW_EXTENSION union+  {+    DWORD dwRGBBitCount;+    DWORD dwYUVBitCount;+    DWORD dwZBufferBitDepth;+    DWORD dwAlphaBitDepth;+  };+  __MINGW_EXTENSION union+  {+    DWORD dwRBitMask;+    DWORD dwYBitMask;+  };+  __MINGW_EXTENSION union+  {+    DWORD dwGBitMask;+    DWORD dwUBitMask;+  };+  __MINGW_EXTENSION union+  {+    DWORD dwBBitMask;+    DWORD dwVBitMask;+  };+  __MINGW_EXTENSION union+  {+    DWORD dwRGBAlphaBitMask;+    DWORD dwYUVAlphaBitMask;+    DWORD dwRGBZBitMask;+    DWORD dwYUVZBitMask;+  };+} DDPIXELFORMAT,*LPDDPIXELFORMAT;+#endif /* __DDRAW_INCLUDED__ */++#ifndef __DVP_INCLUDED__+typedef struct _DDVIDEOPORTCONNECT {+  DWORD dwSize;+  DWORD dwPortWidth;+  GUID guidTypeID;+  DWORD dwFlags;+  ULONG_PTR dwReserved1;+} DDVIDEOPORTCONNECT,*LPDDVIDEOPORTCONNECT;++#define DDVPTYPE_E_HREFH_VREFH						\+	0x54F39980L,0xDA60,0x11CF,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8++#define DDVPTYPE_E_HREFL_VREFL						\+	0xE09C77E0L,0xDA60,0x11CF,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8+#endif /* __DVP_INCLUDED__ */++typedef enum+{+  KS_PixAspectRatio_NTSC4x3,+  KS_PixAspectRatio_NTSC16x9,+  KS_PixAspectRatio_PAL4x3,+  KS_PixAspectRatio_PAL16x9+} KS_AMPixAspectRatio;++typedef enum+{+  KS_AMVP_DO_NOT_CARE,+  KS_AMVP_BEST_BANDWIDTH,+  KS_AMVP_INPUT_SAME_AS_OUTPUT+} KS_AMVP_SELECTFORMATBY;++typedef enum+{+  KS_AMVP_MODE_WEAVE,+  KS_AMVP_MODE_BOBINTERLEAVED,+  KS_AMVP_MODE_BOBNONINTERLEAVED,+  KS_AMVP_MODE_SKIPEVEN,+  KS_AMVP_MODE_SKIPODD+} KS_AMVP_MODE;++typedef struct tagKS_AMVPDIMINFO+{+  DWORD dwFieldWidth;+  DWORD dwFieldHeight;+  DWORD dwVBIWidth;+  DWORD dwVBIHeight;+  RECT rcValidRegion;+} KS_AMVPDIMINFO,*PKS_AMVPDIMINFO;++typedef struct tagKS_AMVPDATAINFO+{+  DWORD dwSize;+  DWORD dwMicrosecondsPerField;+  KS_AMVPDIMINFO amvpDimInfo;+  DWORD dwPictAspectRatioX;+  DWORD dwPictAspectRatioY;+  WINBOOL bEnableDoubleClock;+  WINBOOL bEnableVACT;+  WINBOOL bDataIsInterlaced;+  LONG lHalfLinesOdd;+  WINBOOL bFieldPolarityInverted;+  DWORD dwNumLinesInVREF;+  LONG lHalfLinesEven;+  DWORD dwReserved1;+} KS_AMVPDATAINFO,*PKS_AMVPDATAINFO;++typedef struct tagKS_AMVPSIZE+{+  DWORD dwWidth;+  DWORD dwHeight;+} KS_AMVPSIZE,*PKS_AMVPSIZE;++typedef struct {+  KS_AMVPSIZE Size;+  DWORD MaxPixelsPerSecond;+  DWORD Reserved;+} KSVPMAXPIXELRATE,*PKSVPMAXPIXELRATE;++typedef struct {+  KSPROPERTY Property;+  KS_AMVPSIZE Size;+} KSVPSIZE_PROP,*PKSVPSIZE_PROP;++typedef struct {+  DWORD dwPitch;+  DWORD dwXOrigin;+  DWORD dwYOrigin;+} KSVPSURFACEPARAMS,*PKSVPSURFACEPARAMS;+#endif /* __IVPType__ */++#define STATIC_KSEVENTSETID_VPNotify					\+	0x20c5598eL,0xd3c8,0x11d0,0x8d,0xfc,0x00,0xc0,0x4f,0xd7,0xc0,0x8b+DEFINE_GUIDSTRUCT("20c5598e-d3c8-11d0-8dfc-00c04fd7c08b",KSEVENTSETID_VPNotify);+#define KSEVENTSETID_VPNotify DEFINE_GUIDNAMED(KSEVENTSETID_VPNotify)++typedef enum {+  KSEVENT_VPNOTIFY_FORMATCHANGE+} KSEVENT_VPNOTIFY;++#define STATIC_KSEVENTSETID_VIDCAPTOSTI					\+	0xdb47de20,0xf628,0x11d1,0xba,0x41,0x0,0xa0,0xc9,0xd,0x2b,0x5+DEFINE_GUIDSTRUCT("DB47DE20-F628-11d1-BA41-00A0C90D2B05",KSEVENTSETID_VIDCAPTOSTI);+#define KSEVENTSETID_VIDCAPNotify DEFINE_GUIDNAMED(KSEVENTSETID_VIDCAPTOSTI)++typedef enum {+  KSEVENT_VIDCAPTOSTI_EXT_TRIGGER,+  KSEVENT_VIDCAP_AUTO_UPDATE,+  KSEVENT_VIDCAP_SEARCH+} KSEVENT_VIDCAPTOSTI;++typedef enum {+  KSPROPERTY_EXTENSION_UNIT_INFO,+  KSPROPERTY_EXTENSION_UNIT_CONTROL,+  KSPROPERTY_EXTENSION_UNIT_PASS_THROUGH = 0xffff+} KSPROPERTY_EXTENSION_UNIT,*PKSPROPERTY_EXTENSION_UNIT;++#define STATIC_KSEVENTSETID_VPVBINotify					\+	0xec529b01L,0x1a1f,0x11d1,0xba,0xd9,0x0,0x60,0x97,0x44,0x11,0x1a+DEFINE_GUIDSTRUCT("ec529b01-1a1f-11d1-bad9-00609744111a",KSEVENTSETID_VPVBINotify);+#define KSEVENTSETID_VPVBINotify DEFINE_GUIDNAMED(KSEVENTSETID_VPVBINotify)++typedef enum {+  KSEVENT_VPVBINOTIFY_FORMATCHANGE+} KSEVENT_VPVBINOTIFY;++#define STATIC_KSDATAFORMAT_TYPE_AUXLine21Data				\+	0x670aea80L,0x3a82,0x11d0,0xb7,0x9b,0x00,0xaa,0x00,0x37,0x67,0xa7+DEFINE_GUIDSTRUCT("670aea80-3a82-11d0-b79b-00aa003767a7",KSDATAFORMAT_TYPE_AUXLine21Data);+#define KSDATAFORMAT_TYPE_AUXLine21Data DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_AUXLine21Data)++#define STATIC_KSDATAFORMAT_SUBTYPE_Line21_BytePair			\+	0x6e8d4a22L,0x310c,0x11d0,0xb7,0x9a,0x00,0xaa,0x00,0x37,0x67,0xa7+DEFINE_GUIDSTRUCT("6e8d4a22-310c-11d0-b79a-00aa003767a7",KSDATAFORMAT_SUBTYPE_Line21_BytePair);+#define KSDATAFORMAT_SUBTYPE_Line21_BytePair DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_Line21_BytePair)++#define STATIC_KSDATAFORMAT_SUBTYPE_Line21_GOPPacket			\+	0x6e8d4a23L,0x310c,0x11d0,0xb7,0x9a,0x00,0xaa,0x00,0x37,0x67,0xa7+DEFINE_GUIDSTRUCT("6e8d4a23-310c-11d0-b79a-00aa003767a7",KSDATAFORMAT_SUBTYPE_Line21_GOPPacket);+#define KSDATAFORMAT_SUBTYPE_Line21_GOPPacket DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_Line21_GOPPacket)++typedef struct _KSGOP_USERDATA {+  ULONG sc;+  ULONG reserved1;+  BYTE cFields;+  CHAR l21Data[3];+} KSGOP_USERDATA,*PKSGOP_USERDATA;++#define STATIC_KSDATAFORMAT_TYPE_DVD_ENCRYPTED_PACK			\+	0xed0b916a,0x044d,0x11d1,0xaa,0x78,0x00,0xc0,0x4f,0xc3,0x1d,0x60+DEFINE_GUIDSTRUCT("ed0b916a-044d-11d1-aa78-00c04fc31d60",KSDATAFORMAT_TYPE_DVD_ENCRYPTED_PACK);+#define KSDATAFORMAT_TYPE_DVD_ENCRYPTED_PACK DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_DVD_ENCRYPTED_PACK)++#define KS_AM_UseNewCSSKey			0x1++#define STATIC_KSPROPSETID_TSRateChange					\+	0xa503c5c0,0x1d1d,0x11d1,0xad,0x80,0x44,0x45,0x53,0x54,0x0,0x0+DEFINE_GUIDSTRUCT("A503C5C0-1D1D-11D1-AD80-444553540000",KSPROPSETID_TSRateChange);+#define KSPROPSETID_TSRateChange DEFINE_GUIDNAMED(KSPROPSETID_TSRateChange)++typedef enum {+  KS_AM_RATE_SimpleRateChange = 1,+  KS_AM_RATE_ExactRateChange = 2,+  KS_AM_RATE_MaxFullDataRate = 3,+  KS_AM_RATE_Step = 4+} KS_AM_PROPERTY_TS_RATE_CHANGE;++typedef struct {+  REFERENCE_TIME StartTime;+  LONG Rate;+} KS_AM_SimpleRateChange,*PKS_AM_SimpleRateChange;++typedef struct {+  REFERENCE_TIME OutputZeroTime;+  LONG Rate;+} KS_AM_ExactRateChange,*PKS_AM_ExactRateChange;++typedef LONG KS_AM_MaxFullDataRate;+typedef DWORD KS_AM_Step;++#define STATIC_KSCATEGORY_ENCODER					\+	0x19689bf6,0xc384,0x48fd,0xad,0x51,0x90,0xe5,0x8c,0x79,0xf7,0xb+DEFINE_GUIDSTRUCT("19689BF6-C384-48fd-AD51-90E58C79F70B",KSCATEGORY_ENCODER);+#define KSCATEGORY_ENCODER DEFINE_GUIDNAMED(KSCATEGORY_ENCODER)++#define STATIC_KSCATEGORY_MULTIPLEXER					\+	0x7a5de1d3,0x1a1,0x452c,0xb4,0x81,0x4f,0xa2,0xb9,0x62,0x71,0xe8+DEFINE_GUIDSTRUCT("7A5DE1D3-01A1-452c-B481-4FA2B96271E8",KSCATEGORY_MULTIPLEXER);+#define KSCATEGORY_MULTIPLEXER DEFINE_GUIDNAMED(KSCATEGORY_MULTIPLEXER)++#ifndef __ENCODER_API_GUIDS__+#define __ENCODER_API_GUIDS__++#define STATIC_ENCAPIPARAM_BITRATE					\+	0x49cc4c43,0xca83,0x4ad4,0xa9,0xaf,0xf3,0x69,0x6a,0xf6,0x66,0xdf+DEFINE_GUIDSTRUCT("49CC4C43-CA83-4ad4-A9AF-F3696AF666DF",ENCAPIPARAM_BITRATE);+#define ENCAPIPARAM_BITRATE DEFINE_GUIDNAMED(ENCAPIPARAM_BITRATE)++#define STATIC_ENCAPIPARAM_PEAK_BITRATE					\+	0x703f16a9,0x3d48,0x44a1,0xb0,0x77,0x1,0x8d,0xff,0x91,0x5d,0x19+DEFINE_GUIDSTRUCT("703F16A9-3D48-44a1-B077-018DFF915D19",ENCAPIPARAM_PEAK_BITRATE);+#define ENCAPIPARAM_PEAK_BITRATE DEFINE_GUIDNAMED(ENCAPIPARAM_PEAK_BITRATE)++#define STATIC_ENCAPIPARAM_BITRATE_MODE					\+	0xee5fb25c,0xc713,0x40d1,0x9d,0x58,0xc0,0xd7,0x24,0x1e,0x25,0xf+DEFINE_GUIDSTRUCT("EE5FB25C-C713-40d1-9D58-C0D7241E250F",ENCAPIPARAM_BITRATE_MODE);+#define ENCAPIPARAM_BITRATE_MODE DEFINE_GUIDNAMED(ENCAPIPARAM_BITRATE_MODE)++#define STATIC_CODECAPI_CHANGELISTS					\+	0x62b12acf,0xf6b0,0x47d9,0x94,0x56,0x96,0xf2,0x2c,0x4e,0x0b,0x9d+DEFINE_GUIDSTRUCT("62B12ACF-F6B0-47D9-9456-96F22C4E0B9D",CODECAPI_CHANGELISTS);+#define CODECAPI_CHANGELISTS DEFINE_GUIDNAMED(CODECAPI_CHANGELISTS)++#define STATIC_CODECAPI_VIDEO_ENCODER					\+	0x7112e8e1,0x3d03,0x47ef,0x8e,0x60,0x03,0xf1,0xcf,0x53,0x73,0x01+DEFINE_GUIDSTRUCT("7112E8E1-3D03-47EF-8E60-03F1CF537301",CODECAPI_VIDEO_ENCODER);+#define CODECAPI_VIDEO_ENCODER DEFINE_GUIDNAMED(CODECAPI_VIDEO_ENCODER)++#define STATIC_CODECAPI_AUDIO_ENCODER					\+	0xb9d19a3e,0xf897,0x429c,0xbc,0x46,0x81,0x38,0xb7,0x27,0x2b,0x2d+DEFINE_GUIDSTRUCT("B9D19A3E-F897-429C-BC46-8138B7272B2D",CODECAPI_AUDIO_ENCODER);+#define CODECAPI_AUDIO_ENCODER DEFINE_GUIDNAMED(CODECAPI_AUDIO_ENCODER)++#define STATIC_CODECAPI_SETALLDEFAULTS					\+	0x6c5e6a7c,0xacf8,0x4f55,0xa9,0x99,0x1a,0x62,0x81,0x09,0x05,0x1b+DEFINE_GUIDSTRUCT("6C5E6A7C-ACF8-4F55-A999-1A628109051B",CODECAPI_SETALLDEFAULTS);+#define CODECAPI_SETALLDEFAULTS DEFINE_GUIDNAMED(CODECAPI_SETALLDEFAULTS)++#define STATIC_CODECAPI_ALLSETTINGS					\+	0x6a577e92,0x83e1,0x4113,0xad,0xc2,0x4f,0xce,0xc3,0x2f,0x83,0xa1+DEFINE_GUIDSTRUCT("6A577E92-83E1-4113-ADC2-4FCEC32F83A1",CODECAPI_ALLSETTINGS);+#define CODECAPI_ALLSETTINGS DEFINE_GUIDNAMED(CODECAPI_ALLSETTINGS)++#define STATIC_CODECAPI_SUPPORTSEVENTS					\+	0x0581af97,0x7693,0x4dbd,0x9d,0xca,0x3f,0x9e,0xbd,0x65,0x85,0xa1+DEFINE_GUIDSTRUCT("0581AF97-7693-4DBD-9DCA-3F9EBD6585A1",CODECAPI_SUPPORTSEVENTS);+#define CODECAPI_SUPPORTSEVENTS DEFINE_GUIDNAMED(CODECAPI_SUPPORTSEVENTS)++#define STATIC_CODECAPI_CURRENTCHANGELIST				\+	0x1cb14e83,0x7d72,0x4657,0x83,0xfd,0x47,0xa2,0xc5,0xb9,0xd1,0x3d+DEFINE_GUIDSTRUCT("1CB14E83-7D72-4657-83FD-47A2C5B9D13D",CODECAPI_CURRENTCHANGELIST);+#define CODECAPI_CURRENTCHANGELIST DEFINE_GUIDNAMED(CODECAPI_CURRENTCHANGELIST)+#endif /* __ENCODER_API_GUIDS__ */++#ifndef __ENCODER_API_DEFINES__+#define __ENCODER_API_DEFINES__+typedef enum {+  ConstantBitRate = 0,+  VariableBitRateAverage,+  VariableBitRatePeak+} VIDEOENCODER_BITRATE_MODE;+#endif /* __ENCODER_API_DEFINES__ */++#define STATIC_KSPROPSETID_Jack\+    0x4509f757, 0x2d46, 0x4637, 0x8e, 0x62, 0xce, 0x7d, 0xb9, 0x44, 0xf5, 0x7b+DEFINE_GUIDSTRUCT("4509F757-2D46-4637-8E62-CE7DB944F57B", KSPROPSETID_Jack);+#define KSPROPSETID_Jack DEFINE_GUIDNAMED(KSPROPSETID_Jack)++typedef enum {+    KSPROPERTY_JACK_DESCRIPTION = 1,+    KSPROPERTY_JACK_DESCRIPTION2,+    KSPROPERTY_JACK_SINK_INFO+} KSPROPERTY_JACK;++typedef enum+{+    eConnTypeUnknown,+    eConnType3Point5mm,+    eConnTypeQuarter,+    eConnTypeAtapiInternal,+    eConnTypeRCA,+    eConnTypeOptical,+    eConnTypeOtherDigital,+    eConnTypeOtherAnalog,+    eConnTypeMultichannelAnalogDIN,+    eConnTypeXlrProfessional,+    eConnTypeRJ11Modem,+    eConnTypeCombination+} EPcxConnectionType;++typedef enum+{+    eGeoLocRear = 0x1,+    eGeoLocFront,+    eGeoLocLeft,+    eGeoLocRight,+    eGeoLocTop,+    eGeoLocBottom,+    eGeoLocRearPanel,+    eGeoLocRiser,+    eGeoLocInsideMobileLid,+    eGeoLocDrivebay,+    eGeoLocHDMI,+    eGeoLocOutsideMobileLid,+    eGeoLocATAPI,+    eGeoLocReserved5,+    eGeoLocReserved6,+    EPcxGeoLocation_enum_count+} EPcxGeoLocation;++typedef enum+{+    eGenLocPrimaryBox = 0,+    eGenLocInternal,+    eGenLocSeparate,+    eGenLocOther,+    EPcxGenLocation_enum_count+} EPcxGenLocation;++typedef enum+{+    ePortConnJack = 0,+    ePortConnIntegratedDevice,+    ePortConnBothIntegratedAndJack,+    ePortConnUnknown+} EPxcPortConnection;++typedef struct +{+    DWORD                 ChannelMapping;+    COLORREF              Color;+    EPcxConnectionType    ConnectionType;+    EPcxGeoLocation       GeoLocation;+    EPcxGenLocation       GenLocation;+    EPxcPortConnection    PortConnection;+    BOOL                  IsConnected;+} KSJACK_DESCRIPTION, *PKSJACK_DESCRIPTION;++typedef enum +{+    KSJACK_SINK_CONNECTIONTYPE_HDMI = 0,           +    KSJACK_SINK_CONNECTIONTYPE_DISPLAYPORT,         +} KSJACK_SINK_CONNECTIONTYPE;++#define MAX_SINK_DESCRIPTION_NAME_LENGTH 32+typedef struct _tagKSJACK_SINK_INFORMATION+{+  KSJACK_SINK_CONNECTIONTYPE ConnType;              +  WORD  ManufacturerId;                            +  WORD  ProductId;                                  +  WORD  AudioLatency;                               +  BOOL  HDCPCapable;                                +  BOOL  AICapable;                                  +  UCHAR SinkDescriptionLength;                      +  WCHAR SinkDescription[MAX_SINK_DESCRIPTION_NAME_LENGTH];+  LUID  PortId;                                 +}  KSJACK_SINK_INFORMATION, *PKSJACK_SINK_INFORMATION;++#define JACKDESC2_PRESENCE_DETECT_CAPABILITY       0x00000001 +#define JACKDESC2_DYNAMIC_FORMAT_CHANGE_CAPABILITY 0x00000002++typedef struct _tagKSJACK_DESCRIPTION2+{+  DWORD              DeviceStateInfo;+  DWORD              JackCapabilities;+} KSJACK_DESCRIPTION2, *PKSJACK_DESCRIPTION2;++/* Additional structs for Windows Vista and later */+typedef struct _tagKSRTAUDIO_BUFFER_PROPERTY {+    KSPROPERTY  Property;+    PVOID       BaseAddress;+    ULONG       RequestedBufferSize;+} KSRTAUDIO_BUFFER_PROPERTY, *PKSRTAUDIO_BUFFER_PROPERTY;++typedef struct _tagKSRTAUDIO_BUFFER_PROPERTY_WITH_NOTIFICATION {+    KSPROPERTY  Property;+    PVOID       BaseAddress;+    ULONG       RequestedBufferSize;+    ULONG       NotificationCount;+} KSRTAUDIO_BUFFER_PROPERTY_WITH_NOTIFICATION, *PKSRTAUDIO_BUFFER_PROPERTY_WITH_NOTIFICATION;++typedef struct _tagKSRTAUDIO_BUFFER {+    PVOID   BufferAddress;+    ULONG   ActualBufferSize;+    BOOL    CallMemoryBarrier;+} KSRTAUDIO_BUFFER, *PKSRTAUDIO_BUFFER;++typedef struct _tagKSRTAUDIO_HWLATENCY {+    ULONG   FifoSize;+    ULONG   ChipsetDelay;+    ULONG   CodecDelay;+} KSRTAUDIO_HWLATENCY, *PKSRTAUDIO_HWLATENCY;++typedef struct _tagKSRTAUDIO_HWREGISTER_PROPERTY {+    KSPROPERTY  Property;+    PVOID       BaseAddress;+} KSRTAUDIO_HWREGISTER_PROPERTY, *PKSRTAUDIO_HWREGISTER_PROPERTY;++typedef struct _tagKSRTAUDIO_HWREGISTER {+    PVOID       Register;+    ULONG       Width;+    ULONGLONG   Numerator;+    ULONGLONG   Denominator;+    ULONG       Accuracy;+} KSRTAUDIO_HWREGISTER, *PKSRTAUDIO_HWREGISTER;++typedef struct _tagKSRTAUDIO_NOTIFICATION_EVENT_PROPERTY {+    KSPROPERTY  Property;+    HANDLE      NotificationEvent;+} KSRTAUDIO_NOTIFICATION_EVENT_PROPERTY, *PKSRTAUDIO_NOTIFICATION_EVENT_PROPERTY;+++#endif /* _KSMEDIA_ */+
+ portaudio/src/hostapi/wasapi/mingw-include/ksproxy.h view
@@ -0,0 +1,639 @@+/**+ * This file has no copyright assigned and is placed in the Public Domain.+ * This file is part of the w64 mingw-runtime package.+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.+ */+#ifndef __KSPROXY__+#define __KSPROXY__++#ifdef __cplusplus+extern "C" {+#endif++#undef KSDDKAPI+#ifdef _KSDDK_+#define KSDDKAPI+#else+#define KSDDKAPI DECLSPEC_IMPORT+#endif++#define STATIC_IID_IKsObject						\+	0x423c13a2L,0x2070,0x11d0,0x9e,0xf7,0x00,0xaa,0x00,0xa2,0x16,0xa1++#define STATIC_IID_IKsPinEx						\+	0x7bb38260L,0xd19c,0x11d2,0xb3,0x8a,0x00,0xa0,0xc9,0x5e,0xc2,0x2e++#define STATIC_IID_IKsPin						\+	0xb61178d1L,0xa2d9,0x11cf,0x9e,0x53,0x00,0xaa,0x00,0xa2,0x16,0xa1++#define STATIC_IID_IKsPinPipe						\+	0xe539cd90L,0xa8b4,0x11d1,0x81,0x89,0x00,0xa0,0xc9,0x06,0x28,0x02++#define STATIC_IID_IKsDataTypeHandler					\+	0x5ffbaa02L,0x49a3,0x11d0,0x9f,0x36,0x00,0xaa,0x00,0xa2,0x16,0xa1++#define STATIC_IID_IKsDataTypeCompletion				\+	0x827D1A0EL,0x0F73,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96++#define STATIC_IID_IKsInterfaceHandler					\+	0xD3ABC7E0L,0x9A61,0x11D0,0xA4,0x0D,0x00,0xA0,0xC9,0x22,0x31,0x96++#define STATIC_IID_IKsClockPropertySet					\+	0x5C5CBD84L,0xE755,0x11D0,0xAC,0x18,0x00,0xA0,0xC9,0x22,0x31,0x96++#define STATIC_IID_IKsAllocator						\+	0x8da64899L,0xc0d9,0x11d0,0x84,0x13,0x00,0x00,0xf8,0x22,0xfe,0x8a++#define STATIC_IID_IKsAllocatorEx					\+	0x091bb63aL,0x603f,0x11d1,0xb0,0x67,0x00,0xa0,0xc9,0x06,0x28,0x02++#ifndef STATIC_IID_IKsPropertySet+#define STATIC_IID_IKsPropertySet					\+	0x31EFAC30L,0x515C,0x11d0,0xA9,0xAA,0x00,0xAA,0x00,0x61,0xBE,0x93+#endif++#define STATIC_IID_IKsTopology						\+	0x28F54683L,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96++#ifndef STATIC_IID_IKsControl+#define STATIC_IID_IKsControl						\+	0x28F54685L,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96+#endif++#define STATIC_IID_IKsAggregateControl					\+	0x7F40EAC0L,0x3947,0x11D2,0x87,0x4E,0x00,0xA0,0xC9,0x22,0x31,0x96++#define STATIC_CLSID_Proxy						\+	0x17CCA71BL,0xECD7,0x11D0,0xB9,0x08,0x00,0xA0,0xC9,0x22,0x31,0x96++#ifdef _KS_++DEFINE_GUIDEX(IID_IKsObject);++DEFINE_GUIDEX(IID_IKsPin);++DEFINE_GUIDEX(IID_IKsPinEx);++DEFINE_GUIDEX(IID_IKsPinPipe);++DEFINE_GUIDEX(IID_IKsDataTypeHandler);++DEFINE_GUIDEX(IID_IKsDataTypeCompletion);++DEFINE_GUIDEX(IID_IKsInterfaceHandler);++DEFINE_GUIDEX(IID_IKsClockPropertySet);++DEFINE_GUIDEX(IID_IKsAllocator);++DEFINE_GUIDEX(IID_IKsAllocatorEx);++#define IID_IKsQualityForwarder KSCATEGORY_QUALITY+#define STATIC_IID_IKsQualityForwarder STATIC_KSCATEGORY_QUALITY++typedef enum {+  KsAllocatorMode_User,+  KsAllocatorMode_Kernel+} KSALLOCATORMODE;++typedef enum {+  FramingProp_Uninitialized,+  FramingProp_None,+  FramingProp_Old,+  FramingProp_Ex+} FRAMING_PROP;++typedef FRAMING_PROP *PFRAMING_PROP;++typedef enum {+  Framing_Cache_Update,+  Framing_Cache_ReadLast,+  Framing_Cache_ReadOrig,+  Framing_Cache_Write+} FRAMING_CACHE_OPS;++typedef struct {+  LONGLONG MinTotalNominator;+  LONGLONG MaxTotalNominator;+  LONGLONG TotalDenominator;+} OPTIMAL_WEIGHT_TOTALS;++typedef struct IPin IPin;+typedef struct IKsPin IKsPin;+typedef struct IKsAllocator IKsAllocator;+typedef struct IKsAllocatorEx IKsAllocatorEx;++#define AllocatorStrategy_DontCare			0+#define AllocatorStrategy_MinimizeNumberOfFrames	0x00000001+#define AllocatorStrategy_MinimizeFrameSize		0x00000002+#define AllocatorStrategy_MinimizeNumberOfAllocators	0x00000004+#define AllocatorStrategy_MaximizeSpeed			0x00000008++#define PipeFactor_None					0+#define PipeFactor_UserModeUpstream			0x00000001+#define PipeFactor_UserModeDownstream			0x00000002+#define PipeFactor_MemoryTypes				0x00000004+#define PipeFactor_Flags				0x00000008+#define PipeFactor_PhysicalRanges			0x00000010+#define PipeFactor_OptimalRanges			0x00000020+#define PipeFactor_FixedCompression			0x00000040+#define PipeFactor_UnknownCompression			0x00000080++#define PipeFactor_Buffers				0x00000100+#define PipeFactor_Align				0x00000200+#define PipeFactor_PhysicalEnd				0x00000400+#define PipeFactor_LogicalEnd				0x00000800++typedef enum {+  PipeState_DontCare,+  PipeState_RangeNotFixed,+  PipeState_RangeFixed,+  PipeState_CompressionUnknown,+  PipeState_Finalized+} PIPE_STATE;++typedef struct _PIPE_DIMENSIONS {+  KS_COMPRESSION AllocatorPin;+  KS_COMPRESSION MaxExpansionPin;+  KS_COMPRESSION EndPin;+} PIPE_DIMENSIONS,*PPIPE_DIMENSIONS;++typedef enum {+  Pipe_Allocator_None,+  Pipe_Allocator_FirstPin,+  Pipe_Allocator_LastPin,+  Pipe_Allocator_MiddlePin+} PIPE_ALLOCATOR_PLACE;++typedef PIPE_ALLOCATOR_PLACE *PPIPE_ALLOCATOR_PLACE;++typedef enum {+  KS_MemoryTypeDontCare = 0,+  KS_MemoryTypeKernelPaged,+  KS_MemoryTypeKernelNonPaged,+  KS_MemoryTypeDeviceHostMapped,+  KS_MemoryTypeDeviceSpecific,+  KS_MemoryTypeUser,+  KS_MemoryTypeAnyHost+} KS_LogicalMemoryType;++typedef KS_LogicalMemoryType *PKS_LogicalMemoryType;++typedef struct _PIPE_TERMINATION {+  ULONG Flags;+  ULONG OutsideFactors;+  ULONG Weigth;+  KS_FRAMING_RANGE PhysicalRange;+  KS_FRAMING_RANGE_WEIGHTED OptimalRange;+  KS_COMPRESSION Compression;+} PIPE_TERMINATION;++typedef struct _ALLOCATOR_PROPERTIES_EX+{+  long cBuffers;+  long cbBuffer;+  long cbAlign;+  long cbPrefix;++  GUID MemoryType;+  GUID BusType;+  PIPE_STATE State;+  PIPE_TERMINATION Input;+  PIPE_TERMINATION Output;+  ULONG Strategy;+  ULONG Flags;+  ULONG Weight;+  KS_LogicalMemoryType LogicalMemoryType;+  PIPE_ALLOCATOR_PLACE AllocatorPlace;+  PIPE_DIMENSIONS Dimensions;+  KS_FRAMING_RANGE PhysicalRange;+  IKsAllocatorEx *PrevSegment;+  ULONG CountNextSegments;+  IKsAllocatorEx **NextSegments;+  ULONG InsideFactors;+  ULONG NumberPins;+} ALLOCATOR_PROPERTIES_EX;++typedef ALLOCATOR_PROPERTIES_EX *PALLOCATOR_PROPERTIES_EX;++#ifdef __STREAMS__++struct IKsClockPropertySet;+#undef INTERFACE+#define INTERFACE IKsClockPropertySet+DECLARE_INTERFACE_(IKsClockPropertySet,IUnknown)+{+  STDMETHOD(KsGetTime)			(THIS_+						LONGLONG *Time+					) PURE;+  STDMETHOD(KsSetTime)			(THIS_+						LONGLONG Time+					) PURE;+  STDMETHOD(KsGetPhysicalTime)		(THIS_+						LONGLONG *Time+					) PURE;+  STDMETHOD(KsSetPhysicalTime)		(THIS_+						LONGLONG Time+					) PURE;+  STDMETHOD(KsGetCorrelatedTime)	(THIS_+						KSCORRELATED_TIME *CorrelatedTime+					) PURE;+  STDMETHOD(KsSetCorrelatedTime)	(THIS_+						KSCORRELATED_TIME *CorrelatedTime+					) PURE;+  STDMETHOD(KsGetCorrelatedPhysicalTime)(THIS_+						KSCORRELATED_TIME *CorrelatedTime+					) PURE;+  STDMETHOD(KsSetCorrelatedPhysicalTime)(THIS_+						KSCORRELATED_TIME *CorrelatedTime+					) PURE;+  STDMETHOD(KsGetResolution)		(THIS_+						KSRESOLUTION *Resolution+					) PURE;+  STDMETHOD(KsGetState)			(THIS_+						KSSTATE *State+					) PURE;+};++struct IKsAllocator;+#undef INTERFACE+#define INTERFACE IKsAllocator+DECLARE_INTERFACE_(IKsAllocator,IUnknown)+{+  STDMETHOD_(HANDLE,KsGetAllocatorHandle)(THIS) PURE;+  STDMETHOD_(KSALLOCATORMODE,KsGetAllocatorMode)(THIS) PURE;+  STDMETHOD(KsGetAllocatorStatus)	(THIS_+						PKSSTREAMALLOCATOR_STATUS AllocatorStatus+					) PURE;+  STDMETHOD_(VOID,KsSetAllocatorMode)	(THIS_+						KSALLOCATORMODE Mode+					) PURE;+};++struct IKsAllocatorEx;+#undef INTERFACE+#define INTERFACE IKsAllocatorEx+DECLARE_INTERFACE_(IKsAllocatorEx,IKsAllocator)+{+  STDMETHOD_(PALLOCATOR_PROPERTIES_EX,KsGetProperties)(THIS) PURE;+  STDMETHOD_(VOID,KsSetProperties)	(THIS_+						PALLOCATOR_PROPERTIES_EX+					) PURE;+  STDMETHOD_(VOID,KsSetAllocatorHandle)	(THIS_+						HANDLE AllocatorHandle+					) PURE;+  STDMETHOD_(HANDLE,KsCreateAllocatorAndGetHandle)(THIS_+						IKsPin *KsPin+					) PURE;+};++typedef enum {+  KsPeekOperation_PeekOnly,+  KsPeekOperation_AddRef+} KSPEEKOPERATION;++typedef struct _KSSTREAM_SEGMENT *PKSSTREAM_SEGMENT;+struct IKsPin;++#undef INTERFACE+#define INTERFACE IKsPin+DECLARE_INTERFACE_(IKsPin,IUnknown)+{+  STDMETHOD(KsQueryMediums)		(THIS_+						PKSMULTIPLE_ITEM *MediumList+					) PURE;+  STDMETHOD(KsQueryInterfaces)		(THIS_+						PKSMULTIPLE_ITEM *InterfaceList+					) PURE;+  STDMETHOD(KsCreateSinkPinHandle)	(THIS_+						KSPIN_INTERFACE& Interface,+						KSPIN_MEDIUM& Medium+					) PURE;+  STDMETHOD(KsGetCurrentCommunication)	(THIS_+						KSPIN_COMMUNICATION *Communication,+						KSPIN_INTERFACE *Interface,+						KSPIN_MEDIUM *Medium+					) PURE;+  STDMETHOD(KsPropagateAcquire)		(THIS) PURE;+  STDMETHOD(KsDeliver)			(THIS_+						IMediaSample *Sample,+						ULONG Flags+					) PURE;+  STDMETHOD(KsMediaSamplesCompleted)	(THIS_+						PKSSTREAM_SEGMENT StreamSegment+					) PURE;+  STDMETHOD_(IMemAllocator *,KsPeekAllocator)(THIS_+						KSPEEKOPERATION Operation+					) PURE;+  STDMETHOD(KsReceiveAllocator)		(THIS_+						IMemAllocator *MemAllocator+					) PURE;+  STDMETHOD(KsRenegotiateAllocator)	(THIS) PURE;+  STDMETHOD_(LONG,KsIncrementPendingIoCount)(THIS) PURE;+  STDMETHOD_(LONG,KsDecrementPendingIoCount)(THIS) PURE;+  STDMETHOD(KsQualityNotify)		(THIS_+						ULONG Proportion,+						REFERENCE_TIME TimeDelta+					) PURE;+};++struct IKsPinEx;+#undef INTERFACE+#define INTERFACE IKsPinEx+DECLARE_INTERFACE_(IKsPinEx,IKsPin)+{+  STDMETHOD_(VOID,KsNotifyError)	(THIS_+						IMediaSample *Sample,+						HRESULT hr+					) PURE;+};++struct IKsPinPipe;+#undef INTERFACE+#define INTERFACE IKsPinPipe+DECLARE_INTERFACE_(IKsPinPipe,IUnknown)+{+  STDMETHOD(KsGetPinFramingCache)	(THIS_+						PKSALLOCATOR_FRAMING_EX *FramingEx,+						PFRAMING_PROP FramingProp,+						FRAMING_CACHE_OPS Option+					) PURE;+  STDMETHOD(KsSetPinFramingCache)	(THIS_+						PKSALLOCATOR_FRAMING_EX FramingEx,+						PFRAMING_PROP FramingProp,+						FRAMING_CACHE_OPS Option+					) PURE;+  STDMETHOD_(IPin*,KsGetConnectedPin)	(THIS) PURE;+  STDMETHOD_(IKsAllocatorEx*,KsGetPipe)	(THIS_+						KSPEEKOPERATION Operation+					) PURE;+  STDMETHOD(KsSetPipe)			(THIS_+						IKsAllocatorEx *KsAllocator+					) PURE;+  STDMETHOD_(ULONG,KsGetPipeAllocatorFlag)(THIS) PURE;+  STDMETHOD(KsSetPipeAllocatorFlag)	(THIS_+						ULONG Flag+					) PURE;+  STDMETHOD_(GUID,KsGetPinBusCache)	(THIS) PURE;+  STDMETHOD(KsSetPinBusCache)		(THIS_+						GUID Bus+					) PURE;+  STDMETHOD_(PWCHAR,KsGetPinName)	(THIS) PURE;+  STDMETHOD_(PWCHAR,KsGetFilterName)	(THIS) PURE;+};++struct IKsPinFactory;+#undef INTERFACE+#define INTERFACE IKsPinFactory+DECLARE_INTERFACE_(IKsPinFactory,IUnknown)+{+  STDMETHOD(KsPinFactory)		(THIS_+						ULONG *PinFactory+					) PURE;+};++typedef enum {+  KsIoOperation_Write,+  KsIoOperation_Read+} KSIOOPERATION;++struct IKsDataTypeHandler;+#undef INTERFACE+#define INTERFACE IKsDataTypeHandler+DECLARE_INTERFACE_(IKsDataTypeHandler,IUnknown)+{+  STDMETHOD(KsCompleteIoOperation)	(THIS_+						IMediaSample *Sample,+						PVOID StreamHeader,+						KSIOOPERATION IoOperation,+						WINBOOL Cancelled+					) PURE;+  STDMETHOD(KsIsMediaTypeInRanges)	(THIS_+						PVOID DataRanges+					) PURE;+  STDMETHOD(KsPrepareIoOperation)	(THIS_+						IMediaSample *Sample,+						PVOID StreamHeader,+						KSIOOPERATION IoOperation+					) PURE;+  STDMETHOD(KsQueryExtendedSize)	(THIS_+						ULONG *ExtendedSize+					) PURE;+  STDMETHOD(KsSetMediaType)		(THIS_+						const AM_MEDIA_TYPE *AmMediaType+					) PURE;+};++struct IKsDataTypeCompletion;+#undef INTERFACE+#define INTERFACE IKsDataTypeCompletion+DECLARE_INTERFACE_(IKsDataTypeCompletion,IUnknown)+{+  STDMETHOD(KsCompleteMediaType)	(THIS_+						HANDLE FilterHandle,+						ULONG PinFactoryId,+						AM_MEDIA_TYPE *AmMediaType+					) PURE;+};++struct IKsInterfaceHandler;+#undef INTERFACE+#define INTERFACE IKsInterfaceHandler+DECLARE_INTERFACE_(IKsInterfaceHandler,IUnknown)+{+  STDMETHOD(KsSetPin)			(THIS_+						IKsPin *KsPin+					) PURE;+  STDMETHOD(KsProcessMediaSamples)	(THIS_+						IKsDataTypeHandler *KsDataTypeHandler,+						IMediaSample **SampleList,+						PLONG SampleCount,+						KSIOOPERATION IoOperation,+						PKSSTREAM_SEGMENT *StreamSegment+					) PURE;+  STDMETHOD(KsCompleteIo)		(THIS_+						PKSSTREAM_SEGMENT StreamSegment+					) PURE;+};++typedef struct _KSSTREAM_SEGMENT {+  IKsInterfaceHandler *KsInterfaceHandler;+  IKsDataTypeHandler *KsDataTypeHandler;+  KSIOOPERATION IoOperation;+  HANDLE CompletionEvent;+} KSSTREAM_SEGMENT;++struct IKsObject;+#undef INTERFACE+#define INTERFACE IKsObject+DECLARE_INTERFACE_(IKsObject,IUnknown)+{+  STDMETHOD_(HANDLE,KsGetObjectHandle)	(THIS) PURE;+};++struct IKsQualityForwarder;+#undef INTERFACE+#define INTERFACE IKsQualityForwarder+DECLARE_INTERFACE_(IKsQualityForwarder,IKsObject)+{+  STDMETHOD_(VOID,KsFlushClient)	(THIS_+						IKsPin *Pin+					) PURE;+};++struct IKsNotifyEvent;+#undef INTERFACE+#define INTERFACE IKsNotifyEvent+DECLARE_INTERFACE_(IKsNotifyEvent,IUnknown)+{+  STDMETHOD(KsNotifyEvent)		(THIS_+						ULONG Event,+						ULONG_PTR lParam1,+						ULONG_PTR lParam2+					) PURE;+};++KSDDKAPI HRESULT WINAPI KsResolveRequiredAttributes(PKSDATARANGE DataRange,PKSMULTIPLE_ITEM Attributes);+KSDDKAPI HRESULT WINAPI KsOpenDefaultDevice(REFGUID Category,ACCESS_MASK Access,PHANDLE DeviceHandle);+KSDDKAPI HRESULT WINAPI KsSynchronousDeviceControl(HANDLE Handle,ULONG IoControl,PVOID InBuffer,ULONG InLength,PVOID OutBuffer,ULONG OutLength,PULONG BytesReturned);+KSDDKAPI HRESULT WINAPI KsGetMultiplePinFactoryItems(HANDLE FilterHandle,ULONG PinFactoryId,ULONG PropertyId,PVOID *Items);+KSDDKAPI HRESULT WINAPI KsGetMediaTypeCount(HANDLE FilterHandle,ULONG PinFactoryId,ULONG *MediaTypeCount);+KSDDKAPI HRESULT WINAPI KsGetMediaType(int Position,AM_MEDIA_TYPE *AmMediaType,HANDLE FilterHandle,ULONG PinFactoryId);+#endif /* __STREAMS__ */++#ifndef _IKsPropertySet_+DEFINE_GUIDEX(IID_IKsPropertySet);+#endif++#ifndef _IKsControl_+DEFINE_GUIDEX(IID_IKsControl);+#endif++DEFINE_GUIDEX(IID_IKsAggregateControl);+#ifndef _IKsTopology_+DEFINE_GUIDEX(IID_IKsTopology);+#endif+DEFINE_GUIDSTRUCT("17CCA71B-ECD7-11D0-B908-00A0C9223196",CLSID_Proxy);+#define CLSID_Proxy DEFINE_GUIDNAMED(CLSID_Proxy)++#else /* _KS_ */++#ifndef _IKsPropertySet_+DEFINE_GUID(IID_IKsPropertySet,STATIC_IID_IKsPropertySet);+#endif++DEFINE_GUID(CLSID_Proxy,STATIC_CLSID_Proxy);++#endif /* _KS_ */++#ifndef _IKsPropertySet_+#define _IKsPropertySet_+#define KSPROPERTY_SUPPORT_GET 1+#define KSPROPERTY_SUPPORT_SET 2++#ifdef DECLARE_INTERFACE_+struct IKsPropertySet;+#undef INTERFACE+#define INTERFACE IKsPropertySet+DECLARE_INTERFACE_(IKsPropertySet,IUnknown)+{+  STDMETHOD(Set)			(THIS_+						REFGUID PropSet,+						ULONG Id,+						LPVOID InstanceData,+						ULONG InstanceLength,+						LPVOID PropertyData,+						ULONG DataLength+					) PURE;+  STDMETHOD(Get)			(THIS_+						REFGUID PropSet,+						ULONG Id,+						LPVOID InstanceData,+						ULONG InstanceLength,+						LPVOID PropertyData,+						ULONG DataLength,+						ULONG *BytesReturned+					) PURE;+  STDMETHOD(QuerySupported)		(THIS_+						REFGUID PropSet,+						ULONG Id,+						ULONG *TypeSupport+					) PURE;+};+#endif /* DECLARE_INTERFACE_ */+#endif /* _IKsPropertySet_ */++#ifndef _IKsControl_+#define _IKsControl_+#ifdef DECLARE_INTERFACE_+struct IKsControl;+#undef INTERFACE+#define INTERFACE IKsControl+DECLARE_INTERFACE_(IKsControl,IUnknown)+{+  STDMETHOD(KsProperty)			(THIS_+						PKSPROPERTY Property,+						ULONG PropertyLength,+						LPVOID PropertyData,+						ULONG DataLength,+						ULONG *BytesReturned+					) PURE;+  STDMETHOD(KsMethod)			(THIS_+						PKSMETHOD Method,+						ULONG MethodLength,+						LPVOID MethodData,+						ULONG DataLength,+						ULONG *BytesReturned+					) PURE;+  STDMETHOD(KsEvent)			(THIS_+						PKSEVENT Event,+						ULONG EventLength,+						LPVOID EventData,+						ULONG DataLength,+						ULONG *BytesReturned+					) PURE;+};+#endif /* DECLARE_INTERFACE_ */+#endif /* _IKsControl_ */++#ifdef DECLARE_INTERFACE_+struct IKsAggregateControl;+#undef INTERFACE+#define INTERFACE IKsAggregateControl+DECLARE_INTERFACE_(IKsAggregateControl,IUnknown)+{+  STDMETHOD(KsAddAggregate)		(THIS_+						REFGUID AggregateClass+					) PURE;+  STDMETHOD(KsRemoveAggregate)		(THIS_+						REFGUID AggregateClass+					) PURE;+};+#endif /* DECLARE_INTERFACE_ */++#ifndef _IKsTopology_+#define _IKsTopology_+#ifdef DECLARE_INTERFACE_+struct IKsTopology;+#undef INTERFACE+#define INTERFACE IKsTopology+DECLARE_INTERFACE_(IKsTopology,IUnknown)+{+  STDMETHOD(CreateNodeInstance)		(THIS_+						ULONG NodeId,+						ULONG Flags,+						ACCESS_MASK DesiredAccess,+						IUnknown *UnkOuter,+						REFGUID InterfaceId,+						LPVOID *Interface+					) PURE;+};+#endif /* DECLARE_INTERFACE_ */+#endif /* _IKsTopology_ */++#ifdef __cplusplus+}+#endif++#endif /* __KSPROXY__ */+
+ portaudio/src/hostapi/wasapi/mingw-include/ksuuids.h view
@@ -0,0 +1,159 @@+/**+ * This file has no copyright assigned and is placed in the Public Domain.+ * This file is part of the w64 mingw-runtime package.+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.+ */++OUR_GUID_ENTRY(MEDIATYPE_MPEG2_PACK,+		0x36523B13,0x8EE5,0x11d1,0x8C,0xA3,0x00,0x60,0xB0,0x57,0x66,0x4A)++OUR_GUID_ENTRY(MEDIATYPE_MPEG2_PES,+		0xe06d8020,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea)++OUR_GUID_ENTRY(MEDIATYPE_MPEG2_SECTIONS,+		0x455f176c,0x4b06,0x47ce,0x9a,0xef,0x8c,0xae,0xf7,0x3d,0xf7,0xb5)++OUR_GUID_ENTRY(MEDIASUBTYPE_ATSC_SI,+		0xb3c7397c,0xd303,0x414d,0xb3,0x3c,0x4e,0xd2,0xc9,0xd2,0x97,0x33)++OUR_GUID_ENTRY(MEDIASUBTYPE_DVB_SI,+		0xe9dd31a3,0x221d,0x4adb,0x85,0x32,0x9a,0xf3,0x9,0xc1,0xa4,0x8)++OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2DATA,+		0xc892e55b,0x252d,0x42b5,0xa3,0x16,0xd9,0x97,0xe7,0xa5,0xd9,0x95)++OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_VIDEO,+		0xe06d8026,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea)++OUR_GUID_ENTRY(FORMAT_MPEG2_VIDEO,+		0xe06d80e3,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x5f,0x6c,0xbb,0xea)++OUR_GUID_ENTRY(FORMAT_VIDEOINFO2,+		0xf72a76A0L,0xeb0a,0x11d0,0xac,0xe4,0x0,0x0,0xc0,0xcc,0x16,0xba)++OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_PROGRAM,+		0xe06d8022,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)++OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_TRANSPORT,+		0xe06d8023,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)++OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_TRANSPORT_STRIDE,+		0x138aa9a4,0x1ee2,0x4c5b,0x98,0x8e,0x19,0xab,0xfd,0xbc,0x8a,0x11)++OUR_GUID_ENTRY(MEDIASUBTYPE_MPEG2_AUDIO,+		0xe06d802b,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)++OUR_GUID_ENTRY(MEDIASUBTYPE_DOLBY_AC3,+		0xe06d802c,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)++OUR_GUID_ENTRY(MEDIASUBTYPE_DVD_SUBPICTURE,+		0xe06d802d,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)++OUR_GUID_ENTRY(MEDIASUBTYPE_DVD_LPCM_AUDIO,+		0xe06d8032,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)++OUR_GUID_ENTRY(MEDIASUBTYPE_DTS,+		0xe06d8033,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)++OUR_GUID_ENTRY(MEDIASUBTYPE_SDDS,+		0xe06d8034,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)++OUR_GUID_ENTRY(MEDIATYPE_DVD_ENCRYPTED_PACK,+		0xed0b916a,0x044d,0x11d1,0xaa,0x78,0x00,0xc0,0x04f,0xc3,0x1d,0x60)++OUR_GUID_ENTRY(MEDIATYPE_DVD_NAVIGATION,+		0xe06d802e,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)++OUR_GUID_ENTRY(MEDIASUBTYPE_DVD_NAVIGATION_PCI,+		0xe06d802f,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)++OUR_GUID_ENTRY(MEDIASUBTYPE_DVD_NAVIGATION_DSI,+		0xe06d8030,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)++OUR_GUID_ENTRY(MEDIASUBTYPE_DVD_NAVIGATION_PROVIDER,+		0xe06d8031,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)++OUR_GUID_ENTRY(FORMAT_MPEG2Video,+		0xe06d80e3,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)++OUR_GUID_ENTRY(FORMAT_DolbyAC3,+		0xe06d80e4,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)++OUR_GUID_ENTRY(FORMAT_MPEG2Audio,+		0xe06d80e5,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)++OUR_GUID_ENTRY(FORMAT_DVD_LPCMAudio,+		0xe06d80e6,0xdb46,0x11cf,0xb4,0xd1,0x00,0x80,0x05f,0x6c,0xbb,0xea)++OUR_GUID_ENTRY(AM_KSPROPSETID_AC3,+		0xBFABE720,0x6E1F,0x11D0,0xBC,0xF2,0x44,0x45,0x53,0x54,0x00,0x00)++OUR_GUID_ENTRY(AM_KSPROPSETID_DvdSubPic,+		0xac390460,0x43af,0x11d0,0xbd,0x6a,0x00,0x35,0x05,0xc1,0x03,0xa9)++OUR_GUID_ENTRY(AM_KSPROPSETID_CopyProt,+		0x0E8A0A40,0x6AEF,0x11D0,0x9E,0xD0,0x00,0xA0,0x24,0xCA,0x19,0xB3)++OUR_GUID_ENTRY(AM_KSPROPSETID_TSRateChange,+		0xa503c5c0,0x1d1d,0x11d1,0xad,0x80,0x44,0x45,0x53,0x54,0x0,0x0)++OUR_GUID_ENTRY(AM_KSPROPSETID_DVD_RateChange,+		0x3577eb09,0x9582,0x477f,0xb2,0x9c,0xb0,0xc4,0x52,0xa4,0xff,0x9a)++OUR_GUID_ENTRY(AM_KSPROPSETID_DvdKaraoke,+		0xae4720ae,0xaa71,0x42d8,0xb8,0x2a,0xff,0xfd,0xf5,0x8b,0x76,0xfd)++OUR_GUID_ENTRY(AM_KSPROPSETID_FrameStep,+		0xc830acbd,0xab07,0x492f,0x88,0x52,0x45,0xb6,0x98,0x7c,0x29,0x79)++OUR_GUID_ENTRY(AM_KSCATEGORY_CAPTURE,+		0x65E8773DL,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96)++OUR_GUID_ENTRY(AM_KSCATEGORY_RENDER,+		0x65E8773EL,0x8F56,0x11D0,0xA3,0xB9,0x00,0xA0,0xC9,0x22,0x31,0x96)++OUR_GUID_ENTRY(AM_KSCATEGORY_DATACOMPRESSOR,+		0x1E84C900L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00)++OUR_GUID_ENTRY(AM_KSCATEGORY_AUDIO,+		0x6994AD04L,0x93EF,0x11D0,0xA3,0xCC,0x00,0xA0,0xC9,0x22,0x31,0x96)++OUR_GUID_ENTRY(AM_KSCATEGORY_VIDEO,+		0x6994AD05L,0x93EF,0x11D0,0xA3,0xCC,0x00,0xA0,0xC9,0x22,0x31,0x96)++OUR_GUID_ENTRY(AM_KSCATEGORY_TVTUNER,+		0xa799a800L,0xa46d,0x11d0,0xa1,0x8c,0x00,0xa0,0x24,0x01,0xdc,0xd4)++OUR_GUID_ENTRY(AM_KSCATEGORY_CROSSBAR,+		0xa799a801L,0xa46d,0x11d0,0xa1,0x8c,0x00,0xa0,0x24,0x01,0xdc,0xd4)++OUR_GUID_ENTRY(AM_KSCATEGORY_TVAUDIO,+		0xa799a802L,0xa46d,0x11d0,0xa1,0x8c,0x00,0xa0,0x24,0x01,0xdc,0xd4)++OUR_GUID_ENTRY(AM_KSCATEGORY_VBICODEC,+		0x07dad660L,0x22f1,0x11d1,0xa9,0xf4,0x00,0xc0,0x4f,0xbb,0xde,0x8f)++OUR_GUID_ENTRY(AM_KSCATEGORY_VBICODEC_MI,+		0x9c24a977,0x951,0x451a,0x80,0x6,0xe,0x49,0xbd,0x28,0xcd,0x5f)++OUR_GUID_ENTRY(AM_KSCATEGORY_SPLITTER,+		0x0A4252A0L,0x7E70,0x11D0,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00)++OUR_GUID_ENTRY(IID_IKsInterfaceHandler,+		0xD3ABC7E0L,0x9A61,0x11D0,0xA4,0x0D,0x00,0xA0,0xC9,0x22,0x31,0x96)++OUR_GUID_ENTRY(IID_IKsDataTypeHandler,+		0x5FFBAA02L,0x49A3,0x11D0,0x9F,0x36,0x00,0xAA,0x00,0xA2,0x16,0xA1)++OUR_GUID_ENTRY(IID_IKsPin,+		0xb61178d1L,0xa2d9,0x11cf,0x9e,0x53,0x00,0xaa,0x00,0xa2,0x16,0xa1)++OUR_GUID_ENTRY(IID_IKsControl,+		0x28F54685L,0x06FD,0x11D2,0xB2,0x7A,0x00,0xA0,0xC9,0x22,0x31,0x96)++OUR_GUID_ENTRY(IID_IKsPinFactory,+		0xCD5EBE6BL,0x8B6E,0x11D1,0x8A,0xE0,0x00,0xA0,0xC9,0x22,0x31,0x96)++OUR_GUID_ENTRY(AM_INTERFACESETID_Standard,+		0x1A8766A0L,0x62CE,0x11CF,0xA5,0xD6,0x28,0xDB,0x04,0xC1,0x00,0x00)+
+ portaudio/src/hostapi/wasapi/mingw-include/mmdeviceapi.h view
@@ -0,0 +1,929 @@+
+
+/* this ALWAYS GENERATED file contains the definitions for the interfaces */
+
+
+ /* File created by MIDL compiler version 7.00.0499 */
+/* Compiler settings for mmdeviceapi.idl:
+    Oicf, W1, Zp8, env=Win32 (32b run)
+    protocol : dce , ms_ext, c_ext, robust
+    error checks: allocation ref bounds_check enum stub_data 
+    VC __declspec() decoration level: 
+         __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+         DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING(  )
+
+#pragma warning( disable: 4049 )  /* more than 64k source lines */
+
+
+/* verify that the <rpcndr.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 500
+#endif
+
+/* verify that the <rpcsal.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCSAL_H_VERSION__
+#define __REQUIRED_RPCSAL_H_VERSION__ 100
+#endif
+
+#include "rpc.h"
+#include "rpcndr.h"
+
+#ifndef __RPCNDR_H_VERSION__
+#error this stub requires an updated version of <rpcndr.h>
+#endif // __RPCNDR_H_VERSION__
+
+#ifndef COM_NO_WINDOWS_H
+#include "windows.h"
+#include "ole2.h"
+#endif /*COM_NO_WINDOWS_H*/
+
+#ifndef __mmdeviceapi_h__
+#define __mmdeviceapi_h__
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#pragma once
+#endif
+
+/* Forward Declarations */ 
+
+#ifndef __IMMNotificationClient_FWD_DEFINED__
+#define __IMMNotificationClient_FWD_DEFINED__
+typedef interface IMMNotificationClient IMMNotificationClient;
+#endif 	/* __IMMNotificationClient_FWD_DEFINED__ */
+
+
+#ifndef __IMMDevice_FWD_DEFINED__
+#define __IMMDevice_FWD_DEFINED__
+typedef interface IMMDevice IMMDevice;
+#endif 	/* __IMMDevice_FWD_DEFINED__ */
+
+
+#ifndef __IMMDeviceCollection_FWD_DEFINED__
+#define __IMMDeviceCollection_FWD_DEFINED__
+typedef interface IMMDeviceCollection IMMDeviceCollection;
+#endif 	/* __IMMDeviceCollection_FWD_DEFINED__ */
+
+
+#ifndef __IMMEndpoint_FWD_DEFINED__
+#define __IMMEndpoint_FWD_DEFINED__
+typedef interface IMMEndpoint IMMEndpoint;
+#endif 	/* __IMMEndpoint_FWD_DEFINED__ */
+
+
+#ifndef __IMMDeviceEnumerator_FWD_DEFINED__
+#define __IMMDeviceEnumerator_FWD_DEFINED__
+typedef interface IMMDeviceEnumerator IMMDeviceEnumerator;
+#endif 	/* __IMMDeviceEnumerator_FWD_DEFINED__ */
+
+
+#ifndef __IMMDeviceActivator_FWD_DEFINED__
+#define __IMMDeviceActivator_FWD_DEFINED__
+typedef interface IMMDeviceActivator IMMDeviceActivator;
+#endif 	/* __IMMDeviceActivator_FWD_DEFINED__ */
+
+
+#ifndef __MMDeviceEnumerator_FWD_DEFINED__
+#define __MMDeviceEnumerator_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class MMDeviceEnumerator MMDeviceEnumerator;
+#else
+typedef struct MMDeviceEnumerator MMDeviceEnumerator;
+#endif /* __cplusplus */
+
+#endif 	/* __MMDeviceEnumerator_FWD_DEFINED__ */
+
+
+/* header files for imported files */
+#include "unknwn.h"
+#include "propsys.h"
+
+#ifdef __cplusplus
+extern "C"{
+#endif 
+
+
+/* interface __MIDL_itf_mmdeviceapi_0000_0000 */
+/* [local] */ 
+
+#define E_NOTFOUND HRESULT_FROM_WIN32(ERROR_NOT_FOUND)
+#define E_UNSUPPORTED_TYPE HRESULT_FROM_WIN32(ERROR_UNSUPPORTED_TYPE)
+#define DEVICE_STATE_ACTIVE      0x00000001
+#define DEVICE_STATE_DISABLED    0x00000002
+#define DEVICE_STATE_NOTPRESENT  0x00000004
+#define DEVICE_STATE_UNPLUGGED   0x00000008
+#define DEVICE_STATEMASK_ALL     0x0000000f
+#ifdef DEFINE_PROPERTYKEY
+#undef DEFINE_PROPERTYKEY
+#endif
+#ifdef INITGUID
+#define DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) EXTERN_C const PROPERTYKEY name = { { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }, pid }
+#else
+#define DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) EXTERN_C const PROPERTYKEY name
+#endif // INITGUID
+DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_FormFactor, 0x1da5d803, 0xd492, 0x4edd, 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, 0); 
+DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_ControlPanelPageProvider, 0x1da5d803, 0xd492, 0x4edd, 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, 1); 
+DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_Association, 0x1da5d803, 0xd492, 0x4edd, 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, 2);
+DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_PhysicalSpeakers, 0x1da5d803, 0xd492, 0x4edd, 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, 3);
+DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_GUID, 0x1da5d803, 0xd492, 0x4edd, 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, 4);
+DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_Disable_SysFx, 0x1da5d803, 0xd492, 0x4edd, 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, 5);
+#define ENDPOINT_SYSFX_ENABLED          0x00000000  // System Effects are enabled.
+#define ENDPOINT_SYSFX_DISABLED         0x00000001  // System Effects are disabled.
+DEFINE_PROPERTYKEY(PKEY_AudioEndpoint_FullRangeSpeakers, 0x1da5d803, 0xd492, 0x4edd, 0x8c, 0x23, 0xe0, 0xc0, 0xff, 0xee, 0x7f, 0x0e, 6);
+DEFINE_PROPERTYKEY(PKEY_AudioEngine_DeviceFormat, 0xf19f064d, 0x82c, 0x4e27, 0xbc, 0x73, 0x68, 0x82, 0xa1, 0xbb, 0x8e, 0x4c, 0); 
+typedef struct tagDIRECTX_AUDIO_ACTIVATION_PARAMS
+    {
+    DWORD cbDirectXAudioActivationParams;
+    GUID guidAudioSession;
+    DWORD dwAudioStreamFlags;
+    } 	DIRECTX_AUDIO_ACTIVATION_PARAMS;
+
+typedef struct tagDIRECTX_AUDIO_ACTIVATION_PARAMS *PDIRECTX_AUDIO_ACTIVATION_PARAMS;
+
+typedef /* [public][public][public][public][public] */ 
+enum __MIDL___MIDL_itf_mmdeviceapi_0000_0000_0001
+    {	eRender	= 0,
+	eCapture	= ( eRender + 1 ) ,
+	eAll	= ( eCapture + 1 ) ,
+	EDataFlow_enum_count	= ( eAll + 1 ) 
+    } 	EDataFlow;
+
+typedef /* [public][public][public] */ 
+enum __MIDL___MIDL_itf_mmdeviceapi_0000_0000_0002
+    {	eConsole	= 0,
+	eMultimedia	= ( eConsole + 1 ) ,
+	eCommunications	= ( eMultimedia + 1 ) ,
+	ERole_enum_count	= ( eCommunications + 1 ) 
+    } 	ERole;
+
+typedef /* [public] */ 
+enum __MIDL___MIDL_itf_mmdeviceapi_0000_0000_0003
+    {	RemoteNetworkDevice	= 0,
+	Speakers	= ( RemoteNetworkDevice + 1 ) ,
+	LineLevel	= ( Speakers + 1 ) ,
+	Headphones	= ( LineLevel + 1 ) ,
+	Microphone	= ( Headphones + 1 ) ,
+	Headset	= ( Microphone + 1 ) ,
+	Handset	= ( Headset + 1 ) ,
+	UnknownDigitalPassthrough	= ( Handset + 1 ) ,
+	SPDIF	= ( UnknownDigitalPassthrough + 1 ) ,
+	HDMI	= ( SPDIF + 1 ) ,
+	UnknownFormFactor	= ( HDMI + 1 ) 
+    } 	EndpointFormFactor;
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_mmdeviceapi_0000_0000_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_mmdeviceapi_0000_0000_v0_0_s_ifspec;
+
+#ifndef __IMMNotificationClient_INTERFACE_DEFINED__
+#define __IMMNotificationClient_INTERFACE_DEFINED__
+
+/* interface IMMNotificationClient */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IMMNotificationClient;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("7991EEC9-7E89-4D85-8390-6C703CEC60C0")
+    IMMNotificationClient : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE OnDeviceStateChanged( 
+            /* [in] */ 
+            __in  LPCWSTR pwstrDeviceId,
+            /* [in] */ 
+            __in  DWORD dwNewState) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE OnDeviceAdded( 
+            /* [in] */ 
+            __in  LPCWSTR pwstrDeviceId) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE OnDeviceRemoved( 
+            /* [in] */ 
+            __in  LPCWSTR pwstrDeviceId) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE OnDefaultDeviceChanged( 
+            /* [in] */ 
+            __in  EDataFlow flow,
+            /* [in] */ 
+            __in  ERole role,
+            /* [in] */ 
+            __in  LPCWSTR pwstrDefaultDeviceId) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE OnPropertyValueChanged( 
+            /* [in] */ 
+            __in  LPCWSTR pwstrDeviceId,
+            /* [in] */ 
+            __in  const PROPERTYKEY key) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IMMNotificationClientVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IMMNotificationClient * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IMMNotificationClient * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IMMNotificationClient * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *OnDeviceStateChanged )( 
+            IMMNotificationClient * This,
+            /* [in] */ 
+            __in  LPCWSTR pwstrDeviceId,
+            /* [in] */ 
+            __in  DWORD dwNewState);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *OnDeviceAdded )( 
+            IMMNotificationClient * This,
+            /* [in] */ 
+            __in  LPCWSTR pwstrDeviceId);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *OnDeviceRemoved )( 
+            IMMNotificationClient * This,
+            /* [in] */ 
+            __in  LPCWSTR pwstrDeviceId);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *OnDefaultDeviceChanged )( 
+            IMMNotificationClient * This,
+            /* [in] */ 
+            __in  EDataFlow flow,
+            /* [in] */ 
+            __in  ERole role,
+            /* [in] */ 
+            __in  LPCWSTR pwstrDefaultDeviceId);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *OnPropertyValueChanged )( 
+            IMMNotificationClient * This,
+            /* [in] */ 
+            __in  LPCWSTR pwstrDeviceId,
+            /* [in] */ 
+            __in  const PROPERTYKEY key);
+        
+        END_INTERFACE
+    } IMMNotificationClientVtbl;
+
+    interface IMMNotificationClient
+    {
+        CONST_VTBL struct IMMNotificationClientVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IMMNotificationClient_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IMMNotificationClient_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IMMNotificationClient_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IMMNotificationClient_OnDeviceStateChanged(This,pwstrDeviceId,dwNewState)	\
+    ( (This)->lpVtbl -> OnDeviceStateChanged(This,pwstrDeviceId,dwNewState) ) 
+
+#define IMMNotificationClient_OnDeviceAdded(This,pwstrDeviceId)	\
+    ( (This)->lpVtbl -> OnDeviceAdded(This,pwstrDeviceId) ) 
+
+#define IMMNotificationClient_OnDeviceRemoved(This,pwstrDeviceId)	\
+    ( (This)->lpVtbl -> OnDeviceRemoved(This,pwstrDeviceId) ) 
+
+#define IMMNotificationClient_OnDefaultDeviceChanged(This,flow,role,pwstrDefaultDeviceId)	\
+    ( (This)->lpVtbl -> OnDefaultDeviceChanged(This,flow,role,pwstrDefaultDeviceId) ) 
+
+#define IMMNotificationClient_OnPropertyValueChanged(This,pwstrDeviceId,key)	\
+    ( (This)->lpVtbl -> OnPropertyValueChanged(This,pwstrDeviceId,key) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IMMNotificationClient_INTERFACE_DEFINED__ */
+
+
+#ifndef __IMMDevice_INTERFACE_DEFINED__
+#define __IMMDevice_INTERFACE_DEFINED__
+
+/* interface IMMDevice */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IMMDevice;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("D666063F-1587-4E43-81F1-B948E807363F")
+    IMMDevice : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Activate( 
+            /* [in] */ 
+            __in  REFIID iid,
+            /* [in] */ 
+            __in  DWORD dwClsCtx,
+            /* [unique][in] */ 
+            __in_opt  PROPVARIANT *pActivationParams,
+            /* [iid_is][out] */ 
+            __out  void **ppInterface) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE OpenPropertyStore( 
+            /* [in] */ 
+            __in  DWORD stgmAccess,
+            /* [out] */ 
+            __out  IPropertyStore **ppProperties) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetId( 
+            /* [out] */ 
+            __deref_out  LPWSTR *ppstrId) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetState( 
+            /* [out] */ 
+            __out  DWORD *pdwState) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IMMDeviceVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IMMDevice * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IMMDevice * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IMMDevice * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Activate )( 
+            IMMDevice * This,
+            /* [in] */ 
+            __in  REFIID iid,
+            /* [in] */ 
+            __in  DWORD dwClsCtx,
+            /* [unique][in] */ 
+            __in_opt  PROPVARIANT *pActivationParams,
+            /* [iid_is][out] */ 
+            __out  void **ppInterface);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *OpenPropertyStore )( 
+            IMMDevice * This,
+            /* [in] */ 
+            __in  DWORD stgmAccess,
+            /* [out] */ 
+            __out  IPropertyStore **ppProperties);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetId )( 
+            IMMDevice * This,
+            /* [out] */ 
+            __deref_out  LPWSTR *ppstrId);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetState )( 
+            IMMDevice * This,
+            /* [out] */ 
+            __out  DWORD *pdwState);
+        
+        END_INTERFACE
+    } IMMDeviceVtbl;
+
+    interface IMMDevice
+    {
+        CONST_VTBL struct IMMDeviceVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IMMDevice_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IMMDevice_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IMMDevice_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IMMDevice_Activate(This,iid,dwClsCtx,pActivationParams,ppInterface)	\
+    ( (This)->lpVtbl -> Activate(This,iid,dwClsCtx,pActivationParams,ppInterface) ) 
+
+#define IMMDevice_OpenPropertyStore(This,stgmAccess,ppProperties)	\
+    ( (This)->lpVtbl -> OpenPropertyStore(This,stgmAccess,ppProperties) ) 
+
+#define IMMDevice_GetId(This,ppstrId)	\
+    ( (This)->lpVtbl -> GetId(This,ppstrId) ) 
+
+#define IMMDevice_GetState(This,pdwState)	\
+    ( (This)->lpVtbl -> GetState(This,pdwState) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IMMDevice_INTERFACE_DEFINED__ */
+
+
+#ifndef __IMMDeviceCollection_INTERFACE_DEFINED__
+#define __IMMDeviceCollection_INTERFACE_DEFINED__
+
+/* interface IMMDeviceCollection */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IMMDeviceCollection;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("0BD7A1BE-7A1A-44DB-8397-CC5392387B5E")
+    IMMDeviceCollection : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetCount( 
+            /* [out] */ 
+            __out  UINT *pcDevices) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Item( 
+            /* [in] */ 
+            __in  UINT nDevice,
+            /* [out] */ 
+            __out  IMMDevice **ppDevice) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IMMDeviceCollectionVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IMMDeviceCollection * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IMMDeviceCollection * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IMMDeviceCollection * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetCount )( 
+            IMMDeviceCollection * This,
+            /* [out] */ 
+            __out  UINT *pcDevices);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Item )( 
+            IMMDeviceCollection * This,
+            /* [in] */ 
+            __in  UINT nDevice,
+            /* [out] */ 
+            __out  IMMDevice **ppDevice);
+        
+        END_INTERFACE
+    } IMMDeviceCollectionVtbl;
+
+    interface IMMDeviceCollection
+    {
+        CONST_VTBL struct IMMDeviceCollectionVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IMMDeviceCollection_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IMMDeviceCollection_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IMMDeviceCollection_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IMMDeviceCollection_GetCount(This,pcDevices)	\
+    ( (This)->lpVtbl -> GetCount(This,pcDevices) ) 
+
+#define IMMDeviceCollection_Item(This,nDevice,ppDevice)	\
+    ( (This)->lpVtbl -> Item(This,nDevice,ppDevice) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IMMDeviceCollection_INTERFACE_DEFINED__ */
+
+
+#ifndef __IMMEndpoint_INTERFACE_DEFINED__
+#define __IMMEndpoint_INTERFACE_DEFINED__
+
+/* interface IMMEndpoint */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IMMEndpoint;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("1BE09788-6894-4089-8586-9A2A6C265AC5")
+    IMMEndpoint : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetDataFlow( 
+            /* [out] */ 
+            __out  EDataFlow *pDataFlow) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IMMEndpointVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IMMEndpoint * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IMMEndpoint * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IMMEndpoint * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetDataFlow )( 
+            IMMEndpoint * This,
+            /* [out] */ 
+            __out  EDataFlow *pDataFlow);
+        
+        END_INTERFACE
+    } IMMEndpointVtbl;
+
+    interface IMMEndpoint
+    {
+        CONST_VTBL struct IMMEndpointVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IMMEndpoint_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IMMEndpoint_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IMMEndpoint_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IMMEndpoint_GetDataFlow(This,pDataFlow)	\
+    ( (This)->lpVtbl -> GetDataFlow(This,pDataFlow) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IMMEndpoint_INTERFACE_DEFINED__ */
+
+
+#ifndef __IMMDeviceEnumerator_INTERFACE_DEFINED__
+#define __IMMDeviceEnumerator_INTERFACE_DEFINED__
+
+/* interface IMMDeviceEnumerator */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IMMDeviceEnumerator;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("A95664D2-9614-4F35-A746-DE8DB63617E6")
+    IMMDeviceEnumerator : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE EnumAudioEndpoints( 
+            /* [in] */ 
+            __in  EDataFlow dataFlow,
+            /* [in] */ 
+            __in  DWORD dwStateMask,
+            /* [out] */ 
+            __out  IMMDeviceCollection **ppDevices) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetDefaultAudioEndpoint( 
+            /* [in] */ 
+            __in  EDataFlow dataFlow,
+            /* [in] */ 
+            __in  ERole role,
+            /* [out] */ 
+            __out  IMMDevice **ppEndpoint) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetDevice( 
+            /*  */ 
+            __in  LPCWSTR pwstrId,
+            /* [out] */ 
+            __out  IMMDevice **ppDevice) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE RegisterEndpointNotificationCallback( 
+            /* [in] */ 
+            __in  IMMNotificationClient *pClient) = 0;
+        
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE UnregisterEndpointNotificationCallback( 
+            /* [in] */ 
+            __in  IMMNotificationClient *pClient) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IMMDeviceEnumeratorVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IMMDeviceEnumerator * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IMMDeviceEnumerator * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IMMDeviceEnumerator * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *EnumAudioEndpoints )( 
+            IMMDeviceEnumerator * This,
+            /* [in] */ 
+            __in  EDataFlow dataFlow,
+            /* [in] */ 
+            __in  DWORD dwStateMask,
+            /* [out] */ 
+            __out  IMMDeviceCollection **ppDevices);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetDefaultAudioEndpoint )( 
+            IMMDeviceEnumerator * This,
+            /* [in] */ 
+            __in  EDataFlow dataFlow,
+            /* [in] */ 
+            __in  ERole role,
+            /* [out] */ 
+            __out  IMMDevice **ppEndpoint);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetDevice )( 
+            IMMDeviceEnumerator * This,
+            /*  */ 
+            __in  LPCWSTR pwstrId,
+            /* [out] */ 
+            __out  IMMDevice **ppDevice);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RegisterEndpointNotificationCallback )( 
+            IMMDeviceEnumerator * This,
+            /* [in] */ 
+            __in  IMMNotificationClient *pClient);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *UnregisterEndpointNotificationCallback )( 
+            IMMDeviceEnumerator * This,
+            /* [in] */ 
+            __in  IMMNotificationClient *pClient);
+        
+        END_INTERFACE
+    } IMMDeviceEnumeratorVtbl;
+
+    interface IMMDeviceEnumerator
+    {
+        CONST_VTBL struct IMMDeviceEnumeratorVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IMMDeviceEnumerator_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IMMDeviceEnumerator_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IMMDeviceEnumerator_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IMMDeviceEnumerator_EnumAudioEndpoints(This,dataFlow,dwStateMask,ppDevices)	\
+    ( (This)->lpVtbl -> EnumAudioEndpoints(This,dataFlow,dwStateMask,ppDevices) ) 
+
+#define IMMDeviceEnumerator_GetDefaultAudioEndpoint(This,dataFlow,role,ppEndpoint)	\
+    ( (This)->lpVtbl -> GetDefaultAudioEndpoint(This,dataFlow,role,ppEndpoint) ) 
+
+#define IMMDeviceEnumerator_GetDevice(This,pwstrId,ppDevice)	\
+    ( (This)->lpVtbl -> GetDevice(This,pwstrId,ppDevice) ) 
+
+#define IMMDeviceEnumerator_RegisterEndpointNotificationCallback(This,pClient)	\
+    ( (This)->lpVtbl -> RegisterEndpointNotificationCallback(This,pClient) ) 
+
+#define IMMDeviceEnumerator_UnregisterEndpointNotificationCallback(This,pClient)	\
+    ( (This)->lpVtbl -> UnregisterEndpointNotificationCallback(This,pClient) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IMMDeviceEnumerator_INTERFACE_DEFINED__ */
+
+
+#ifndef __IMMDeviceActivator_INTERFACE_DEFINED__
+#define __IMMDeviceActivator_INTERFACE_DEFINED__
+
+/* interface IMMDeviceActivator */
+/* [unique][helpstring][nonextensible][uuid][local][object] */ 
+
+
+EXTERN_C const IID IID_IMMDeviceActivator;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("3B0D0EA4-D0A9-4B0E-935B-09516746FAC0")
+    IMMDeviceActivator : public IUnknown
+    {
+    public:
+        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Activate( 
+            /* [in] */ 
+            __in  REFIID iid,
+            /* [in] */ 
+            __in  IMMDevice *pDevice,
+            /* [in] */ 
+            __in_opt  PROPVARIANT *pActivationParams,
+            /* [iid_is][out] */ 
+            __out  void **ppInterface) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IMMDeviceActivatorVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IMMDeviceActivator * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IMMDeviceActivator * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IMMDeviceActivator * This);
+        
+        /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Activate )( 
+            IMMDeviceActivator * This,
+            /* [in] */ 
+            __in  REFIID iid,
+            /* [in] */ 
+            __in  IMMDevice *pDevice,
+            /* [in] */ 
+            __in_opt  PROPVARIANT *pActivationParams,
+            /* [iid_is][out] */ 
+            __out  void **ppInterface);
+        
+        END_INTERFACE
+    } IMMDeviceActivatorVtbl;
+
+    interface IMMDeviceActivator
+    {
+        CONST_VTBL struct IMMDeviceActivatorVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IMMDeviceActivator_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IMMDeviceActivator_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IMMDeviceActivator_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IMMDeviceActivator_Activate(This,iid,pDevice,pActivationParams,ppInterface)	\
+    ( (This)->lpVtbl -> Activate(This,iid,pDevice,pActivationParams,ppInterface) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IMMDeviceActivator_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_mmdeviceapi_0000_0006 */
+/* [local] */ 
+
+typedef /* [public] */ struct __MIDL___MIDL_itf_mmdeviceapi_0000_0006_0001
+    {
+    LPARAM AddPageParam;
+    IMMDevice *pEndpoint;
+    IMMDevice *pPnpInterface;
+    IMMDevice *pPnpDevnode;
+    } 	AudioExtensionParams;
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_mmdeviceapi_0000_0006_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_mmdeviceapi_0000_0006_v0_0_s_ifspec;
+
+
+#ifndef __MMDeviceAPILib_LIBRARY_DEFINED__
+#define __MMDeviceAPILib_LIBRARY_DEFINED__
+
+/* library MMDeviceAPILib */
+/* [helpstring][version][uuid] */ 
+
+
+EXTERN_C const IID LIBID_MMDeviceAPILib;
+
+EXTERN_C const CLSID CLSID_MMDeviceEnumerator;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("BCDE0395-E52F-467C-8E3D-C4579291692E")
+MMDeviceEnumerator;
+#endif
+#endif /* __MMDeviceAPILib_LIBRARY_DEFINED__ */
+
+/* Additional Prototypes for ALL interfaces */
+
+/* end of Additional Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
+
+ portaudio/src/hostapi/wasapi/mingw-include/propidl.h view
@@ -0,0 +1,1275 @@+
+
+/* this ALWAYS GENERATED file contains the definitions for the interfaces */
+
+
+ /* File created by MIDL compiler version 7.00.0499 */
+/* Compiler settings for propidl.idl:
+    Oicf, W1, Zp8, env=Win32 (32b run)
+    protocol : dce , ms_ext, c_ext, robust
+    error checks: allocation ref bounds_check enum stub_data
+    VC __declspec() decoration level:
+         __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+         DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING(  )
+
+#pragma warning( disable: 4049 )  /* more than 64k source lines */
+
+
+/* verify that the <rpcndr.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 500
+#endif
+
+/* verify that the <rpcsal.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCSAL_H_VERSION__
+#define __REQUIRED_RPCSAL_H_VERSION__ 100
+#endif
+
+#include "rpc.h"
+#include "rpcndr.h"
+
+#ifndef __RPCNDR_H_VERSION__
+#error this stub requires an updated version of <rpcndr.h>
+#endif // __RPCNDR_H_VERSION__
+
+#ifndef COM_NO_WINDOWS_H
+#include "windows.h"
+#include "ole2.h"
+#endif /*COM_NO_WINDOWS_H*/
+
+#ifndef __propidl_h__
+#define __propidl_h__
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#define interface struct
+#include "sal.h"
+#include "rpcsal.h"
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#pragma once
+#endif
+
+/* Forward Declarations */
+
+#ifndef __IPropertyStorage_FWD_DEFINED__
+#define __IPropertyStorage_FWD_DEFINED__
+typedef interface IPropertyStorage IPropertyStorage;
+#endif 	/* __IPropertyStorage_FWD_DEFINED__ */
+
+
+#ifndef __IPropertySetStorage_FWD_DEFINED__
+#define __IPropertySetStorage_FWD_DEFINED__
+typedef interface IPropertySetStorage IPropertySetStorage;
+#endif 	/* __IPropertySetStorage_FWD_DEFINED__ */
+
+
+#ifndef __IEnumSTATPROPSTG_FWD_DEFINED__
+#define __IEnumSTATPROPSTG_FWD_DEFINED__
+typedef interface IEnumSTATPROPSTG IEnumSTATPROPSTG;
+#endif 	/* __IEnumSTATPROPSTG_FWD_DEFINED__ */
+
+
+#ifndef __IEnumSTATPROPSETSTG_FWD_DEFINED__
+#define __IEnumSTATPROPSETSTG_FWD_DEFINED__
+typedef interface IEnumSTATPROPSETSTG IEnumSTATPROPSETSTG;
+#endif 	/* __IEnumSTATPROPSETSTG_FWD_DEFINED__ */
+
+
+/* header files for imported files */
+#include "objidl.h"
+#include "oaidl.h"
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+
+/* interface __MIDL_itf_propidl_0000_0000 */
+/* [local] */
+
+//+-------------------------------------------------------------------------
+//
+//  Microsoft Windows
+//  Copyright (c) Microsoft Corporation. All rights reserved.
+//
+//--------------------------------------------------------------------------
+#if ( _MSC_VER >= 800 )
+#if _MSC_VER >= 1200
+#pragma warning(push)
+#endif
+#pragma warning(disable:4201)    /* Nameless struct/union */
+#pragma warning(disable:4237)    /* obsolete member named 'bool' */
+#endif
+#if ( _MSC_VER >= 1020 )
+#pragma once
+#endif
+
+
+
+typedef struct tagVersionedStream
+    {
+    GUID guidVersion;
+    IStream *pStream;
+    } 	VERSIONEDSTREAM;
+
+typedef struct tagVersionedStream *LPVERSIONEDSTREAM;
+
+
+// Flags for IPropertySetStorage::Create
+#define	PROPSETFLAG_DEFAULT	( 0 )
+
+#define	PROPSETFLAG_NONSIMPLE	( 1 )
+
+#define	PROPSETFLAG_ANSI	( 2 )
+
+//   (This flag is only supported on StgCreatePropStg & StgOpenPropStg
+#define	PROPSETFLAG_UNBUFFERED	( 4 )
+
+//   (This flag causes a version-1 property set to be created
+#define	PROPSETFLAG_CASE_SENSITIVE	( 8 )
+
+
+// Flags for the reservied PID_BEHAVIOR property
+#define	PROPSET_BEHAVIOR_CASE_SENSITIVE	( 1 )
+
+#ifdef MIDL_PASS
+// This is the PROPVARIANT definition for marshaling.
+typedef struct tag_inner_PROPVARIANT PROPVARIANT;
+
+#else
+// This is the standard C layout of the PROPVARIANT.
+typedef struct tagPROPVARIANT PROPVARIANT;
+#endif
+typedef struct tagCAC
+    {
+    ULONG cElems;
+    CHAR *pElems;
+    } 	CAC;
+#ifdef WIN64
+typedef struct tagCAUB
+    {
+    ULONG cElems;
+    UCHAR *pElems;
+    } 	CAUB;
+
+typedef struct tagCAI
+    {
+    ULONG cElems;
+    SHORT *pElems;
+    } 	CAI;
+
+typedef struct tagCAUI
+    {
+    ULONG cElems;
+    USHORT *pElems;
+    } 	CAUI;
+
+typedef struct tagCAL
+    {
+    ULONG cElems;
+    LONG *pElems;
+    } 	CAL;
+
+typedef struct tagCAUL
+    {
+    ULONG cElems;
+    ULONG *pElems;
+    } 	CAUL;
+
+typedef struct tagCAFLT
+    {
+    ULONG cElems;
+    FLOAT *pElems;
+    } 	CAFLT;
+
+typedef struct tagCADBL
+    {
+    ULONG cElems;
+    DOUBLE *pElems;
+    } 	CADBL;
+
+typedef struct tagCACY
+    {
+    ULONG cElems;
+    CY *pElems;
+    } 	CACY;
+
+typedef struct tagCADATE
+    {
+    ULONG cElems;
+    DATE *pElems;
+    } 	CADATE;
+
+typedef struct tagCABSTR
+    {
+    ULONG cElems;
+    BSTR *pElems;
+    } 	CABSTR;
+
+typedef struct tagCABSTRBLOB
+    {
+    ULONG cElems;
+    BSTRBLOB *pElems;
+    } 	CABSTRBLOB;
+
+typedef struct tagCABOOL
+    {
+    ULONG cElems;
+    VARIANT_BOOL *pElems;
+    } 	CABOOL;
+
+typedef struct tagCASCODE
+    {
+    ULONG cElems;
+    SCODE *pElems;
+    } 	CASCODE;
+
+typedef struct tagCAPROPVARIANT
+    {
+    ULONG cElems;
+    PROPVARIANT *pElems;
+    } 	CAPROPVARIANT;
+
+typedef struct tagCAH
+    {
+    ULONG cElems;
+    LARGE_INTEGER *pElems;
+    } 	CAH;
+
+typedef struct tagCAUH
+    {
+    ULONG cElems;
+    ULARGE_INTEGER *pElems;
+    } 	CAUH;
+
+typedef struct tagCALPSTR
+    {
+    ULONG cElems;
+    LPSTR *pElems;
+    } 	CALPSTR;
+
+typedef struct tagCALPWSTR
+    {
+    ULONG cElems;
+    LPWSTR *pElems;
+    } 	CALPWSTR;
+
+typedef struct tagCAFILETIME
+    {
+    ULONG cElems;
+    FILETIME *pElems;
+    } 	CAFILETIME;
+
+typedef struct tagCACLIPDATA
+    {
+    ULONG cElems;
+    CLIPDATA *pElems;
+    } 	CACLIPDATA;
+
+typedef struct tagCACLSID
+    {
+    ULONG cElems;
+    CLSID *pElems;
+    } 	CACLSID;
+#endif
+#ifdef MIDL_PASS
+// This is the PROPVARIANT padding layout for marshaling.
+typedef BYTE PROPVAR_PAD1;
+
+typedef BYTE PROPVAR_PAD2;
+
+typedef ULONG PROPVAR_PAD3;
+
+#else
+// This is the standard C layout of the structure.
+typedef WORD PROPVAR_PAD1;
+typedef WORD PROPVAR_PAD2;
+typedef WORD PROPVAR_PAD3;
+#define tag_inner_PROPVARIANT
+#endif
+#ifdef WIN64
+#ifndef MIDL_PASS
+struct tagPROPVARIANT {
+  union {
+#endif
+struct tag_inner_PROPVARIANT
+    {
+    VARTYPE vt;
+    PROPVAR_PAD1 wReserved1;
+    PROPVAR_PAD2 wReserved2;
+    PROPVAR_PAD3 wReserved3;
+    /* [switch_type] */ union
+        {
+         /* Empty union arm */
+        CHAR cVal;
+        UCHAR bVal;
+        SHORT iVal;
+        USHORT uiVal;
+        LONG lVal;
+        ULONG ulVal;
+        INT intVal;
+        UINT uintVal;
+        LARGE_INTEGER hVal;
+        ULARGE_INTEGER uhVal;
+        FLOAT fltVal;
+        DOUBLE dblVal;
+        VARIANT_BOOL boolVal;
+        //_VARIANT_BOOL bool;
+        SCODE scode;
+        CY cyVal;
+        DATE date;
+        FILETIME filetime;
+        CLSID *puuid;
+        CLIPDATA *pclipdata;
+        BSTR bstrVal;
+        BSTRBLOB bstrblobVal;
+        BLOB blob;
+        LPSTR pszVal;
+        LPWSTR pwszVal;
+        IUnknown *punkVal;
+        IDispatch *pdispVal;
+        IStream *pStream;
+        IStorage *pStorage;
+        LPVERSIONEDSTREAM pVersionedStream;
+        LPSAFEARRAY parray;
+        CAC cac;
+        CAUB caub;
+        CAI cai;
+        CAUI caui;
+        CAL cal;
+        CAUL caul;
+        CAH cah;
+        CAUH cauh;
+        CAFLT caflt;
+        CADBL cadbl;
+        CABOOL cabool;
+        CASCODE cascode;
+        CACY cacy;
+        CADATE cadate;
+        CAFILETIME cafiletime;
+        CACLSID cauuid;
+        CACLIPDATA caclipdata;
+        CABSTR cabstr;
+        CABSTRBLOB cabstrblob;
+        CALPSTR calpstr;
+        CALPWSTR calpwstr;
+        CAPROPVARIANT capropvar;
+        CHAR *pcVal;
+        UCHAR *pbVal;
+        SHORT *piVal;
+        USHORT *puiVal;
+        LONG *plVal;
+        ULONG *pulVal;
+        INT *pintVal;
+        UINT *puintVal;
+        FLOAT *pfltVal;
+        DOUBLE *pdblVal;
+        VARIANT_BOOL *pboolVal;
+        DECIMAL *pdecVal;
+        SCODE *pscode;
+        CY *pcyVal;
+        DATE *pdate;
+        BSTR *pbstrVal;
+        IUnknown **ppunkVal;
+        IDispatch **ppdispVal;
+        LPSAFEARRAY *pparray;
+        PROPVARIANT *pvarVal;
+        } 	;
+    } ;
+#ifndef MIDL_PASS
+    DECIMAL decVal;
+  };
+};
+#endif
+#endif
+#ifdef MIDL_PASS
+// This is the LPPROPVARIANT definition for marshaling.
+typedef struct tag_inner_PROPVARIANT *LPPROPVARIANT;
+
+typedef const PROPVARIANT *REFPROPVARIANT;
+
+#else
+
+// This is the standard C layout of the PROPVARIANT.
+#ifdef WIN64
+typedef struct tagPROPVARIANT * LPPROPVARIANT;
+#endif
+
+#ifndef _REFPROPVARIANT_DEFINED
+#define _REFPROPVARIANT_DEFINED
+#ifdef __cplusplus
+#define REFPROPVARIANT const PROPVARIANT &
+#else
+#define REFPROPVARIANT const PROPVARIANT * __MIDL_CONST
+#endif
+#endif
+
+#endif // MIDL_PASS
+
+// Reserved global Property IDs
+#define	PID_DICTIONARY	( 0 )
+
+#define	PID_CODEPAGE	( 0x1 )
+
+#define	PID_FIRST_USABLE	( 0x2 )
+
+#define	PID_FIRST_NAME_DEFAULT	( 0xfff )
+
+#define	PID_LOCALE	( 0x80000000 )
+
+#define	PID_MODIFY_TIME	( 0x80000001 )
+
+#define	PID_SECURITY	( 0x80000002 )
+
+#define	PID_BEHAVIOR	( 0x80000003 )
+
+#define	PID_ILLEGAL	( 0xffffffff )
+
+// Range which is read-only to downlevel implementations
+#define	PID_MIN_READONLY	( 0x80000000 )
+
+#define	PID_MAX_READONLY	( 0xbfffffff )
+
+// Property IDs for the DiscardableInformation Property Set
+
+#define PIDDI_THUMBNAIL          0x00000002L // VT_BLOB
+
+// Property IDs for the SummaryInformation Property Set
+
+#define PIDSI_TITLE               0x00000002L  // VT_LPSTR
+#define PIDSI_SUBJECT             0x00000003L  // VT_LPSTR
+#define PIDSI_AUTHOR              0x00000004L  // VT_LPSTR
+#define PIDSI_KEYWORDS            0x00000005L  // VT_LPSTR
+#define PIDSI_COMMENTS            0x00000006L  // VT_LPSTR
+#define PIDSI_TEMPLATE            0x00000007L  // VT_LPSTR
+#define PIDSI_LASTAUTHOR          0x00000008L  // VT_LPSTR
+#define PIDSI_REVNUMBER           0x00000009L  // VT_LPSTR
+#define PIDSI_EDITTIME            0x0000000aL  // VT_FILETIME (UTC)
+#define PIDSI_LASTPRINTED         0x0000000bL  // VT_FILETIME (UTC)
+#define PIDSI_CREATE_DTM          0x0000000cL  // VT_FILETIME (UTC)
+#define PIDSI_LASTSAVE_DTM        0x0000000dL  // VT_FILETIME (UTC)
+#define PIDSI_PAGECOUNT           0x0000000eL  // VT_I4
+#define PIDSI_WORDCOUNT           0x0000000fL  // VT_I4
+#define PIDSI_CHARCOUNT           0x00000010L  // VT_I4
+#define PIDSI_THUMBNAIL           0x00000011L  // VT_CF
+#define PIDSI_APPNAME             0x00000012L  // VT_LPSTR
+#define PIDSI_DOC_SECURITY        0x00000013L  // VT_I4
+
+// Property IDs for the DocSummaryInformation Property Set
+
+#define PIDDSI_CATEGORY          0x00000002 // VT_LPSTR
+#define PIDDSI_PRESFORMAT        0x00000003 // VT_LPSTR
+#define PIDDSI_BYTECOUNT         0x00000004 // VT_I4
+#define PIDDSI_LINECOUNT         0x00000005 // VT_I4
+#define PIDDSI_PARCOUNT          0x00000006 // VT_I4
+#define PIDDSI_SLIDECOUNT        0x00000007 // VT_I4
+#define PIDDSI_NOTECOUNT         0x00000008 // VT_I4
+#define PIDDSI_HIDDENCOUNT       0x00000009 // VT_I4
+#define PIDDSI_MMCLIPCOUNT       0x0000000A // VT_I4
+#define PIDDSI_SCALE             0x0000000B // VT_BOOL
+#define PIDDSI_HEADINGPAIR       0x0000000C // VT_VARIANT | VT_VECTOR
+#define PIDDSI_DOCPARTS          0x0000000D // VT_LPSTR | VT_VECTOR
+#define PIDDSI_MANAGER           0x0000000E // VT_LPSTR
+#define PIDDSI_COMPANY           0x0000000F // VT_LPSTR
+#define PIDDSI_LINKSDIRTY        0x00000010 // VT_BOOL
+
+
+//  FMTID_MediaFileSummaryInfo - Property IDs
+
+#define PIDMSI_EDITOR                   0x00000002L  // VT_LPWSTR
+#define PIDMSI_SUPPLIER                 0x00000003L  // VT_LPWSTR
+#define PIDMSI_SOURCE                   0x00000004L  // VT_LPWSTR
+#define PIDMSI_SEQUENCE_NO              0x00000005L  // VT_LPWSTR
+#define PIDMSI_PROJECT                  0x00000006L  // VT_LPWSTR
+#define PIDMSI_STATUS                   0x00000007L  // VT_UI4
+#define PIDMSI_OWNER                    0x00000008L  // VT_LPWSTR
+#define PIDMSI_RATING                   0x00000009L  // VT_LPWSTR
+#define PIDMSI_PRODUCTION               0x0000000AL  // VT_FILETIME (UTC)
+#define PIDMSI_COPYRIGHT                0x0000000BL  // VT_LPWSTR
+
+//  PIDMSI_STATUS value definitions
+
+enum PIDMSI_STATUS_VALUE
+    {	PIDMSI_STATUS_NORMAL	= 0,
+	PIDMSI_STATUS_NEW	= ( PIDMSI_STATUS_NORMAL + 1 ) ,
+	PIDMSI_STATUS_PRELIM	= ( PIDMSI_STATUS_NEW + 1 ) ,
+	PIDMSI_STATUS_DRAFT	= ( PIDMSI_STATUS_PRELIM + 1 ) ,
+	PIDMSI_STATUS_INPROGRESS	= ( PIDMSI_STATUS_DRAFT + 1 ) ,
+	PIDMSI_STATUS_EDIT	= ( PIDMSI_STATUS_INPROGRESS + 1 ) ,
+	PIDMSI_STATUS_REVIEW	= ( PIDMSI_STATUS_EDIT + 1 ) ,
+	PIDMSI_STATUS_PROOF	= ( PIDMSI_STATUS_REVIEW + 1 ) ,
+	PIDMSI_STATUS_FINAL	= ( PIDMSI_STATUS_PROOF + 1 ) ,
+	PIDMSI_STATUS_OTHER	= 0x7fff
+    } ;
+#define	PRSPEC_INVALID	( 0xffffffff )
+
+#define	PRSPEC_LPWSTR	( 0 )
+
+#define	PRSPEC_PROPID	( 1 )
+
+#ifdef WIN64
+typedef struct tagPROPSPEC
+    {
+    ULONG ulKind;
+    /* [switch_type] */ union
+        {
+        PROPID propid;
+        LPOLESTR lpwstr;
+         /* Empty union arm */
+        } 	;
+    } 	PROPSPEC;
+
+typedef struct tagSTATPROPSTG
+    {
+    LPOLESTR lpwstrName;
+    PROPID propid;
+    VARTYPE vt;
+    } 	STATPROPSTG;
+#endif
+
+// Macros for parsing the OS Version of the Property Set Header
+#define PROPSETHDR_OSVER_KIND(dwOSVer)      HIWORD( (dwOSVer) )
+#define PROPSETHDR_OSVER_MAJOR(dwOSVer)     LOBYTE(LOWORD( (dwOSVer) ))
+#define PROPSETHDR_OSVER_MINOR(dwOSVer)     HIBYTE(LOWORD( (dwOSVer) ))
+#define PROPSETHDR_OSVERSION_UNKNOWN        0xFFFFFFFF
+#ifdef WIN64
+typedef struct tagSTATPROPSETSTG
+    {
+    FMTID fmtid;
+    CLSID clsid;
+    DWORD grfFlags;
+    FILETIME mtime;
+    FILETIME ctime;
+    FILETIME atime;
+    DWORD dwOSVersion;
+    } 	STATPROPSETSTG;
+#endif
+
+
+extern RPC_IF_HANDLE __MIDL_itf_propidl_0000_0000_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_propidl_0000_0000_v0_0_s_ifspec;
+
+#ifndef __IPropertyStorage_INTERFACE_DEFINED__
+#define __IPropertyStorage_INTERFACE_DEFINED__
+
+/* interface IPropertyStorage */
+/* [unique][uuid][object] */
+
+
+EXTERN_C const IID IID_IPropertyStorage;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+    MIDL_INTERFACE("00000138-0000-0000-C000-000000000046")
+    IPropertyStorage : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE ReadMultiple(
+            /* [in] */ ULONG cpspec,
+            /* [size_is][in] */ __RPC__in_ecount_full(cpspec) const PROPSPEC rgpspec[  ],
+            /* [size_is][out] */ __RPC__out_ecount_full(cpspec) PROPVARIANT rgpropvar[  ]) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE WriteMultiple(
+            /* [in] */ ULONG cpspec,
+            /* [size_is][in] */ __RPC__in_ecount_full(cpspec) const PROPSPEC rgpspec[  ],
+            /* [size_is][in] */ __RPC__in_ecount_full(cpspec) const PROPVARIANT rgpropvar[  ],
+            /* [in] */ PROPID propidNameFirst) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE DeleteMultiple(
+            /* [in] */ ULONG cpspec,
+            /* [size_is][in] */ __RPC__in_ecount_full(cpspec) const PROPSPEC rgpspec[  ]) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE ReadPropertyNames(
+            /* [in] */ ULONG cpropid,
+            /* [size_is][in] */ __RPC__in_ecount_full(cpropid) const PROPID rgpropid[  ],
+            /* [size_is][out] */ __RPC__out_ecount_full(cpropid) LPOLESTR rglpwstrName[  ]) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE WritePropertyNames(
+            /* [in] */ ULONG cpropid,
+            /* [size_is][in] */ __RPC__in_ecount_full(cpropid) const PROPID rgpropid[  ],
+            /* [size_is][in] */ __RPC__in_ecount_full(cpropid) const LPOLESTR rglpwstrName[  ]) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE DeletePropertyNames(
+            /* [in] */ ULONG cpropid,
+            /* [size_is][in] */ __RPC__in_ecount_full(cpropid) const PROPID rgpropid[  ]) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE Commit(
+            /* [in] */ DWORD grfCommitFlags) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE Revert( void) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE Enum(
+            /* [out] */ __RPC__deref_out_opt IEnumSTATPROPSTG **ppenum) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE SetTimes(
+            /* [in] */ __RPC__in const FILETIME *pctime,
+            /* [in] */ __RPC__in const FILETIME *patime,
+            /* [in] */ __RPC__in const FILETIME *pmtime) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE SetClass(
+            /* [in] */ __RPC__in REFCLSID clsid) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE Stat(
+            /* [out] */ __RPC__out STATPROPSETSTG *pstatpsstg) = 0;
+
+    };
+
+#else 	/* C style interface */
+
+//    typedef struct IPropertyStorageVtbl
+//    {
+//        BEGIN_INTERFACE
+//
+//        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+//            IPropertyStorage * This,
+//            /* [in] */ __RPC__in REFIID riid,
+//            /* [iid_is][out] */
+//            __RPC__deref_out  void **ppvObject);
+//
+//        ULONG ( STDMETHODCALLTYPE *AddRef )(
+//            IPropertyStorage * This);
+//
+//        ULONG ( STDMETHODCALLTYPE *Release )(
+//            IPropertyStorage * This);
+//
+//        HRESULT ( STDMETHODCALLTYPE *ReadMultiple )(
+//            IPropertyStorage * This,
+//            /* [in] */ ULONG cpspec,
+//            /* [size_is][in] */ __RPC__in_ecount_full(cpspec) const PROPSPEC rgpspec[  ],
+//            /* [size_is][out] */ __RPC__out_ecount_full(cpspec) PROPVARIANT rgpropvar[  ]);
+//
+//        HRESULT ( STDMETHODCALLTYPE *WriteMultiple )(
+//            IPropertyStorage * This,
+//            /* [in] */ ULONG cpspec,
+//            /* [size_is][in] */ __RPC__in_ecount_full(cpspec) const PROPSPEC rgpspec[  ],
+//            /* [size_is][in] */ __RPC__in_ecount_full(cpspec) const PROPVARIANT rgpropvar[  ],
+//            /* [in] */ PROPID propidNameFirst);
+//
+//        HRESULT ( STDMETHODCALLTYPE *DeleteMultiple )(
+//            IPropertyStorage * This,
+//            /* [in] */ ULONG cpspec,
+//            /* [size_is][in] */ __RPC__in_ecount_full(cpspec) const PROPSPEC rgpspec[  ]);
+//
+//        HRESULT ( STDMETHODCALLTYPE *ReadPropertyNames )(
+//            IPropertyStorage * This,
+//            /* [in] */ ULONG cpropid,
+//            /* [size_is][in] */ __RPC__in_ecount_full(cpropid) const PROPID rgpropid[  ],
+//            /* [size_is][out] */ __RPC__out_ecount_full(cpropid) LPOLESTR rglpwstrName[  ]);
+//
+//        HRESULT ( STDMETHODCALLTYPE *WritePropertyNames )(
+//            IPropertyStorage * This,
+//            /* [in] */ ULONG cpropid,
+//            /* [size_is][in] */ __RPC__in_ecount_full(cpropid) const PROPID rgpropid[  ],
+//            /* [size_is][in] */ __RPC__in_ecount_full(cpropid) const LPOLESTR rglpwstrName[  ]);
+//
+//        HRESULT ( STDMETHODCALLTYPE *DeletePropertyNames )(
+//            IPropertyStorage * This,
+//            /* [in] */ ULONG cpropid,
+//            /* [size_is][in] */ __RPC__in_ecount_full(cpropid) const PROPID rgpropid[  ]);
+//
+//        HRESULT ( STDMETHODCALLTYPE *Commit )(
+//            IPropertyStorage * This,
+//            /* [in] */ DWORD grfCommitFlags);
+//
+//        HRESULT ( STDMETHODCALLTYPE *Revert )(
+//            IPropertyStorage * This);
+//
+//        HRESULT ( STDMETHODCALLTYPE *Enum )(
+//            IPropertyStorage * This,
+//            /* [out] */ __RPC__deref_out_opt IEnumSTATPROPSTG **ppenum);
+//
+//        HRESULT ( STDMETHODCALLTYPE *SetTimes )(
+//            IPropertyStorage * This,
+//            /* [in] */ __RPC__in const FILETIME *pctime,
+//            /* [in] */ __RPC__in const FILETIME *patime,
+//            /* [in] */ __RPC__in const FILETIME *pmtime);
+//
+//        HRESULT ( STDMETHODCALLTYPE *SetClass )(
+//            IPropertyStorage * This,
+//            /* [in] */ __RPC__in REFCLSID clsid);
+//
+//        HRESULT ( STDMETHODCALLTYPE *Stat )(
+//            IPropertyStorage * This,
+//            /* [out] */ __RPC__out STATPROPSETSTG *pstatpsstg);
+//
+//        END_INTERFACE
+//    } IPropertyStorageVtbl;
+//
+//    interface IPropertyStorage
+//    {
+//        CONST_VTBL struct IPropertyStorageVtbl *lpVtbl;
+//    };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IPropertyStorage_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IPropertyStorage_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) )
+
+#define IPropertyStorage_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) )
+
+
+#define IPropertyStorage_ReadMultiple(This,cpspec,rgpspec,rgpropvar)	\
+    ( (This)->lpVtbl -> ReadMultiple(This,cpspec,rgpspec,rgpropvar) )
+
+#define IPropertyStorage_WriteMultiple(This,cpspec,rgpspec,rgpropvar,propidNameFirst)	\
+    ( (This)->lpVtbl -> WriteMultiple(This,cpspec,rgpspec,rgpropvar,propidNameFirst) )
+
+#define IPropertyStorage_DeleteMultiple(This,cpspec,rgpspec)	\
+    ( (This)->lpVtbl -> DeleteMultiple(This,cpspec,rgpspec) )
+
+#define IPropertyStorage_ReadPropertyNames(This,cpropid,rgpropid,rglpwstrName)	\
+    ( (This)->lpVtbl -> ReadPropertyNames(This,cpropid,rgpropid,rglpwstrName) )
+
+#define IPropertyStorage_WritePropertyNames(This,cpropid,rgpropid,rglpwstrName)	\
+    ( (This)->lpVtbl -> WritePropertyNames(This,cpropid,rgpropid,rglpwstrName) )
+
+#define IPropertyStorage_DeletePropertyNames(This,cpropid,rgpropid)	\
+    ( (This)->lpVtbl -> DeletePropertyNames(This,cpropid,rgpropid) )
+
+#define IPropertyStorage_Commit(This,grfCommitFlags)	\
+    ( (This)->lpVtbl -> Commit(This,grfCommitFlags) )
+
+#define IPropertyStorage_Revert(This)	\
+    ( (This)->lpVtbl -> Revert(This) )
+
+#define IPropertyStorage_Enum(This,ppenum)	\
+    ( (This)->lpVtbl -> Enum(This,ppenum) )
+
+#define IPropertyStorage_SetTimes(This,pctime,patime,pmtime)	\
+    ( (This)->lpVtbl -> SetTimes(This,pctime,patime,pmtime) )
+
+#define IPropertyStorage_SetClass(This,clsid)	\
+    ( (This)->lpVtbl -> SetClass(This,clsid) )
+
+#define IPropertyStorage_Stat(This,pstatpsstg)	\
+    ( (This)->lpVtbl -> Stat(This,pstatpsstg) )
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPropertyStorage_INTERFACE_DEFINED__ */
+
+
+#ifndef __IPropertySetStorage_INTERFACE_DEFINED__
+#define __IPropertySetStorage_INTERFACE_DEFINED__
+
+/* interface IPropertySetStorage */
+/* [unique][uuid][object] */
+
+typedef /* [unique] */  __RPC_unique_pointer IPropertySetStorage *LPPROPERTYSETSTORAGE;
+
+
+EXTERN_C const IID IID_IPropertySetStorage;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+    MIDL_INTERFACE("0000013A-0000-0000-C000-000000000046")
+    IPropertySetStorage : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE Create(
+            /* [in] */ __RPC__in REFFMTID rfmtid,
+            /* [unique][in] */ __RPC__in_opt const CLSID *pclsid,
+            /* [in] */ DWORD grfFlags,
+            /* [in] */ DWORD grfMode,
+            /* [out] */ __RPC__deref_out_opt IPropertyStorage **ppprstg) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE Open(
+            /* [in] */ __RPC__in REFFMTID rfmtid,
+            /* [in] */ DWORD grfMode,
+            /* [out] */ __RPC__deref_out_opt IPropertyStorage **ppprstg) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE Delete(
+            /* [in] */ __RPC__in REFFMTID rfmtid) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE Enum(
+            /* [out] */ __RPC__deref_out_opt IEnumSTATPROPSETSTG **ppenum) = 0;
+
+    };
+
+#else 	/* C style interface */
+
+//    typedef struct IPropertySetStorageVtbl
+//    {
+//        BEGIN_INTERFACE
+//
+//        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+//            IPropertySetStorage * This,
+//            /* [in] */ __RPC__in REFIID riid,
+//            /* [iid_is][out] */
+//            __RPC__deref_out  void **ppvObject);
+//
+//        ULONG ( STDMETHODCALLTYPE *AddRef )(
+//            IPropertySetStorage * This);
+//
+//        ULONG ( STDMETHODCALLTYPE *Release )(
+//            IPropertySetStorage * This);
+//
+//        HRESULT ( STDMETHODCALLTYPE *Create )(
+//            IPropertySetStorage * This,
+//            /* [in] */ __RPC__in REFFMTID rfmtid,
+//            /* [unique][in] */ __RPC__in_opt const CLSID *pclsid,
+//            /* [in] */ DWORD grfFlags,
+//            /* [in] */ DWORD grfMode,
+//            /* [out] */ __RPC__deref_out_opt IPropertyStorage **ppprstg);
+//
+//        HRESULT ( STDMETHODCALLTYPE *Open )(
+//            IPropertySetStorage * This,
+//            /* [in] */ __RPC__in REFFMTID rfmtid,
+//            /* [in] */ DWORD grfMode,
+//            /* [out] */ __RPC__deref_out_opt IPropertyStorage **ppprstg);
+//
+//        HRESULT ( STDMETHODCALLTYPE *Delete )(
+//            IPropertySetStorage * This,
+//            /* [in] */ __RPC__in REFFMTID rfmtid);
+//
+//        HRESULT ( STDMETHODCALLTYPE *Enum )(
+//            IPropertySetStorage * This,
+//            /* [out] */ __RPC__deref_out_opt IEnumSTATPROPSETSTG **ppenum);
+//
+//        END_INTERFACE
+//    } IPropertySetStorageVtbl;
+//
+//    interface IPropertySetStorage
+//    {
+//        CONST_VTBL struct IPropertySetStorageVtbl *lpVtbl;
+//    };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IPropertySetStorage_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IPropertySetStorage_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) )
+
+#define IPropertySetStorage_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) )
+
+
+#define IPropertySetStorage_Create(This,rfmtid,pclsid,grfFlags,grfMode,ppprstg)	\
+    ( (This)->lpVtbl -> Create(This,rfmtid,pclsid,grfFlags,grfMode,ppprstg) )
+
+#define IPropertySetStorage_Open(This,rfmtid,grfMode,ppprstg)	\
+    ( (This)->lpVtbl -> Open(This,rfmtid,grfMode,ppprstg) )
+
+#define IPropertySetStorage_Delete(This,rfmtid)	\
+    ( (This)->lpVtbl -> Delete(This,rfmtid) )
+
+#define IPropertySetStorage_Enum(This,ppenum)	\
+    ( (This)->lpVtbl -> Enum(This,ppenum) )
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPropertySetStorage_INTERFACE_DEFINED__ */
+
+
+#ifndef __IEnumSTATPROPSTG_INTERFACE_DEFINED__
+#define __IEnumSTATPROPSTG_INTERFACE_DEFINED__
+
+/* interface IEnumSTATPROPSTG */
+/* [unique][uuid][object] */
+
+//typedef /* [unique] */  __RPC_unique_pointer IEnumSTATPROPSTG *LPENUMSTATPROPSTG;
+
+
+EXTERN_C const IID IID_IEnumSTATPROPSTG;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+    MIDL_INTERFACE("00000139-0000-0000-C000-000000000046")
+    IEnumSTATPROPSTG : public IUnknown
+    {
+    public:
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE Next(
+            /* [in] */ ULONG celt,
+            /* [length_is][size_is][out] */ STATPROPSTG *rgelt,
+            /* [out] */ ULONG *pceltFetched) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE Skip(
+            /* [in] */ ULONG celt) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE Reset( void) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE Clone(
+            /* [out] */ __RPC__deref_out_opt IEnumSTATPROPSTG **ppenum) = 0;
+
+    };
+
+#else 	/* C style interface */
+
+//    typedef struct IEnumSTATPROPSTGVtbl
+//    {
+//        BEGIN_INTERFACE
+//
+//        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+//            IEnumSTATPROPSTG * This,
+//            /* [in] */ __RPC__in REFIID riid,
+//            /* [iid_is][out] */
+//            __RPC__deref_out  void **ppvObject);
+//
+//        ULONG ( STDMETHODCALLTYPE *AddRef )(
+//            IEnumSTATPROPSTG * This);
+//
+//        ULONG ( STDMETHODCALLTYPE *Release )(
+//            IEnumSTATPROPSTG * This);
+//
+//        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Next )(
+//            IEnumSTATPROPSTG * This,
+//            /* [in] */ ULONG celt,
+//            /* [length_is][size_is][out] */ STATPROPSTG *rgelt,
+//            /* [out] */ ULONG *pceltFetched);
+//
+//        HRESULT ( STDMETHODCALLTYPE *Skip )(
+//            IEnumSTATPROPSTG * This,
+//            /* [in] */ ULONG celt);
+//
+//        HRESULT ( STDMETHODCALLTYPE *Reset )(
+//            IEnumSTATPROPSTG * This);
+//
+//        HRESULT ( STDMETHODCALLTYPE *Clone )(
+//            IEnumSTATPROPSTG * This,
+//            /* [out] */ __RPC__deref_out_opt IEnumSTATPROPSTG **ppenum);
+//
+//        END_INTERFACE
+//    } IEnumSTATPROPSTGVtbl;
+//
+//    interface IEnumSTATPROPSTG
+//    {
+//        CONST_VTBL struct IEnumSTATPROPSTGVtbl *lpVtbl;
+//    };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IEnumSTATPROPSTG_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IEnumSTATPROPSTG_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) )
+
+#define IEnumSTATPROPSTG_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) )
+
+
+#define IEnumSTATPROPSTG_Next(This,celt,rgelt,pceltFetched)	\
+    ( (This)->lpVtbl -> Next(This,celt,rgelt,pceltFetched) )
+
+#define IEnumSTATPROPSTG_Skip(This,celt)	\
+    ( (This)->lpVtbl -> Skip(This,celt) )
+
+#define IEnumSTATPROPSTG_Reset(This)	\
+    ( (This)->lpVtbl -> Reset(This) )
+
+#define IEnumSTATPROPSTG_Clone(This,ppenum)	\
+    ( (This)->lpVtbl -> Clone(This,ppenum) )
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+/* [call_as] */ HRESULT STDMETHODCALLTYPE IEnumSTATPROPSTG_RemoteNext_Proxy(
+    IEnumSTATPROPSTG * This,
+    /* [in] */ ULONG celt,
+    /* [length_is][size_is][out] */ __RPC__out_ecount_part(celt, *pceltFetched) STATPROPSTG *rgelt,
+    /* [out] */ __RPC__out ULONG *pceltFetched);
+
+
+void __RPC_STUB IEnumSTATPROPSTG_RemoteNext_Stub(
+    IRpcStubBuffer *This,
+    IRpcChannelBuffer *_pRpcChannelBuffer,
+    PRPC_MESSAGE _pRpcMessage,
+    DWORD *_pdwStubPhase);
+
+
+
+#endif 	/* __IEnumSTATPROPSTG_INTERFACE_DEFINED__ */
+
+
+#ifndef __IEnumSTATPROPSETSTG_INTERFACE_DEFINED__
+#define __IEnumSTATPROPSETSTG_INTERFACE_DEFINED__
+
+/* interface IEnumSTATPROPSETSTG */
+/* [unique][uuid][object] */
+
+typedef /* [unique] */  __RPC_unique_pointer IEnumSTATPROPSETSTG *LPENUMSTATPROPSETSTG;
+
+
+EXTERN_C const IID IID_IEnumSTATPROPSETSTG;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+    MIDL_INTERFACE("0000013B-0000-0000-C000-000000000046")
+    IEnumSTATPROPSETSTG : public IUnknown
+    {
+    public:
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE Next(
+            /* [in] */ ULONG celt,
+            /* [length_is][size_is][out] */ STATPROPSETSTG *rgelt,
+            /* [out] */ ULONG *pceltFetched) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE Skip(
+            /* [in] */ ULONG celt) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE Reset( void) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE Clone(
+            /* [out] */ __RPC__deref_out_opt IEnumSTATPROPSETSTG **ppenum) = 0;
+
+    };
+
+#else 	/* C style interface */
+
+//    typedef struct IEnumSTATPROPSETSTGVtbl
+//    {
+//        BEGIN_INTERFACE
+//
+//        HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+//            IEnumSTATPROPSETSTG * This,
+//            /* [in] */ __RPC__in REFIID riid,
+//            /* [iid_is][out] */
+//            __RPC__deref_out  void **ppvObject);
+//
+//        ULONG ( STDMETHODCALLTYPE *AddRef )(
+//            IEnumSTATPROPSETSTG * This);
+//
+//        ULONG ( STDMETHODCALLTYPE *Release )(
+//            IEnumSTATPROPSETSTG * This);
+//
+//        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Next )(
+//            IEnumSTATPROPSETSTG * This,
+//            /* [in] */ ULONG celt,
+//            /* [length_is][size_is][out] */ STATPROPSETSTG *rgelt,
+//            /* [out] */ ULONG *pceltFetched);
+//
+//        HRESULT ( STDMETHODCALLTYPE *Skip )(
+//            IEnumSTATPROPSETSTG * This,
+//            /* [in] */ ULONG celt);
+//
+//        HRESULT ( STDMETHODCALLTYPE *Reset )(
+//            IEnumSTATPROPSETSTG * This);
+//
+//        HRESULT ( STDMETHODCALLTYPE *Clone )(
+//            IEnumSTATPROPSETSTG * This,
+//            /* [out] */ __RPC__deref_out_opt IEnumSTATPROPSETSTG **ppenum);
+//
+//        END_INTERFACE
+//    } IEnumSTATPROPSETSTGVtbl;
+//
+//    interface IEnumSTATPROPSETSTG
+//    {
+//        CONST_VTBL struct IEnumSTATPROPSETSTGVtbl *lpVtbl;
+//    };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IEnumSTATPROPSETSTG_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IEnumSTATPROPSETSTG_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) )
+
+#define IEnumSTATPROPSETSTG_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) )
+
+
+#define IEnumSTATPROPSETSTG_Next(This,celt,rgelt,pceltFetched)	\
+    ( (This)->lpVtbl -> Next(This,celt,rgelt,pceltFetched) )
+
+#define IEnumSTATPROPSETSTG_Skip(This,celt)	\
+    ( (This)->lpVtbl -> Skip(This,celt) )
+
+#define IEnumSTATPROPSETSTG_Reset(This)	\
+    ( (This)->lpVtbl -> Reset(This) )
+
+#define IEnumSTATPROPSETSTG_Clone(This,ppenum)	\
+    ( (This)->lpVtbl -> Clone(This,ppenum) )
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+/* [call_as] */ HRESULT STDMETHODCALLTYPE IEnumSTATPROPSETSTG_RemoteNext_Proxy(
+    IEnumSTATPROPSETSTG * This,
+    /* [in] */ ULONG celt,
+    /* [length_is][size_is][out] */ __RPC__out_ecount_part(celt, *pceltFetched) STATPROPSETSTG *rgelt,
+    /* [out] */ __RPC__out ULONG *pceltFetched);
+
+
+void __RPC_STUB IEnumSTATPROPSETSTG_RemoteNext_Stub(
+    IRpcStubBuffer *This,
+    IRpcChannelBuffer *_pRpcChannelBuffer,
+    PRPC_MESSAGE _pRpcMessage,
+    DWORD *_pdwStubPhase);
+
+
+
+#endif 	/* __IEnumSTATPROPSETSTG_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_propidl_0000_0004 */
+/* [local] */
+
+typedef /* [unique] */  __RPC_unique_pointer IPropertyStorage *LPPROPERTYSTORAGE;
+
+WINOLEAPI PropVariantCopy ( PROPVARIANT * pvarDest, const PROPVARIANT * pvarSrc );
+WINOLEAPI PropVariantClear ( PROPVARIANT * pvar );
+WINOLEAPI FreePropVariantArray ( ULONG cVariants, PROPVARIANT * rgvars );
+
+#define _PROPVARIANTINIT_DEFINED_
+#   ifdef __cplusplus
+inline void PropVariantInit ( PROPVARIANT * pvar )
+{
+    memset ( pvar, 0, sizeof(PROPVARIANT) );
+}
+#   else
+#   define PropVariantInit(pvar) memset ( (pvar), 0, sizeof(PROPVARIANT) )
+#   endif
+
+
+#ifndef _STGCREATEPROPSTG_DEFINED_
+WINOLEAPI StgCreatePropStg( IUnknown* pUnk, REFFMTID fmtid, const CLSID *pclsid, DWORD grfFlags, DWORD dwReserved, IPropertyStorage **ppPropStg );
+WINOLEAPI StgOpenPropStg( IUnknown* pUnk, REFFMTID fmtid, DWORD grfFlags, DWORD dwReserved, IPropertyStorage **ppPropStg );
+WINOLEAPI StgCreatePropSetStg( IStorage *pStorage, DWORD dwReserved, IPropertySetStorage **ppPropSetStg);
+
+#define CCH_MAX_PROPSTG_NAME    31
+__checkReturn WINOLEAPI FmtIdToPropStgName( const FMTID *pfmtid, __out_ecount(CCH_MAX_PROPSTG_NAME+1) LPOLESTR oszName );
+WINOLEAPI PropStgNameToFmtId( __in __nullterminated const LPOLESTR oszName, FMTID *pfmtid );
+#endif
+#ifndef _SERIALIZEDPROPERTYVALUE_DEFINED_
+#define _SERIALIZEDPROPERTYVALUE_DEFINED_
+typedef struct tagSERIALIZEDPROPERTYVALUE		// prop
+{
+    DWORD	dwType;
+    BYTE	rgb[1];
+} SERIALIZEDPROPERTYVALUE;
+#endif
+
+EXTERN_C SERIALIZEDPROPERTYVALUE* __stdcall
+StgConvertVariantToProperty(
+            __in const PROPVARIANT* pvar,
+            USHORT CodePage,
+            __out_bcount_opt(*pcb) SERIALIZEDPROPERTYVALUE* pprop,
+            __inout ULONG* pcb,
+            PROPID pid,
+            __reserved BOOLEAN fReserved,
+            __out_opt ULONG* pcIndirect);
+
+#ifdef __cplusplus
+class PMemoryAllocator;
+
+EXTERN_C BOOLEAN __stdcall
+StgConvertPropertyToVariant(
+            __in const SERIALIZEDPROPERTYVALUE* pprop,
+            USHORT CodePage,
+            __out PROPVARIANT* pvar,
+            __in PMemoryAllocator* pma);
+#endif
+#if _MSC_VER >= 1200
+#pragma warning(pop)
+#else
+#pragma warning(default:4201)    /* Nameless struct/union */
+#pragma warning(default:4237)    /* keywords bool, true, false, etc.. */
+#endif
+
+
+extern RPC_IF_HANDLE __MIDL_itf_propidl_0000_0004_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_propidl_0000_0004_v0_0_s_ifspec;
+
+/* Additional Prototypes for ALL interfaces */
+
+unsigned long             __RPC_USER  BSTR_UserSize(     unsigned long *, unsigned long            , BSTR * );
+unsigned char * __RPC_USER  BSTR_UserMarshal(  unsigned long *, unsigned char *, BSTR * );
+unsigned char * __RPC_USER  BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * );
+void                      __RPC_USER  BSTR_UserFree(     unsigned long *, BSTR * );
+
+unsigned long             __RPC_USER  LPSAFEARRAY_UserSize(     unsigned long *, unsigned long            , LPSAFEARRAY * );
+unsigned char * __RPC_USER  LPSAFEARRAY_UserMarshal(  unsigned long *, unsigned char *, LPSAFEARRAY * );
+unsigned char * __RPC_USER  LPSAFEARRAY_UserUnmarshal(unsigned long *, unsigned char *, LPSAFEARRAY * );
+void                      __RPC_USER  LPSAFEARRAY_UserFree(     unsigned long *, LPSAFEARRAY * );
+
+unsigned long             __RPC_USER  BSTR_UserSize64(     unsigned long *, unsigned long            , BSTR * );
+unsigned char * __RPC_USER  BSTR_UserMarshal64(  unsigned long *, unsigned char *, BSTR * );
+unsigned char * __RPC_USER  BSTR_UserUnmarshal64(unsigned long *, unsigned char *, BSTR * );
+void                      __RPC_USER  BSTR_UserFree64(     unsigned long *, BSTR * );
+
+unsigned long             __RPC_USER  LPSAFEARRAY_UserSize64(     unsigned long *, unsigned long            , LPSAFEARRAY * );
+unsigned char * __RPC_USER  LPSAFEARRAY_UserMarshal64(  unsigned long *, unsigned char *, LPSAFEARRAY * );
+unsigned char * __RPC_USER  LPSAFEARRAY_UserUnmarshal64(unsigned long *, unsigned char *, LPSAFEARRAY * );
+void                      __RPC_USER  LPSAFEARRAY_UserFree64(     unsigned long *, LPSAFEARRAY * );
+
+/* [local] */ HRESULT STDMETHODCALLTYPE IEnumSTATPROPSTG_Next_Proxy(
+    IEnumSTATPROPSTG * This,
+    /* [in] */ ULONG celt,
+    /* [length_is][size_is][out] */ STATPROPSTG *rgelt,
+    /* [out] */ ULONG *pceltFetched);
+
+
+/* [call_as] */ HRESULT STDMETHODCALLTYPE IEnumSTATPROPSTG_Next_Stub(
+    IEnumSTATPROPSTG * This,
+    /* [in] */ ULONG celt,
+    /* [length_is][size_is][out] */ __RPC__out_ecount_part(celt, *pceltFetched) STATPROPSTG *rgelt,
+    /* [out] */ __RPC__out ULONG *pceltFetched);
+
+/* [local] */ HRESULT STDMETHODCALLTYPE IEnumSTATPROPSETSTG_Next_Proxy(
+    IEnumSTATPROPSETSTG * This,
+    /* [in] */ ULONG celt,
+    /* [length_is][size_is][out] */ STATPROPSETSTG *rgelt,
+    /* [out] */ ULONG *pceltFetched);
+
+
+/* [call_as] */ HRESULT STDMETHODCALLTYPE IEnumSTATPROPSETSTG_Next_Stub(
+    IEnumSTATPROPSETSTG * This,
+    /* [in] */ ULONG celt,
+    /* [length_is][size_is][out] */ __RPC__out_ecount_part(celt, *pceltFetched) STATPROPSETSTG *rgelt,
+    /* [out] */ __RPC__out ULONG *pceltFetched);
+
+
+
+/* end of Additional Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
+
+ portaudio/src/hostapi/wasapi/mingw-include/propkey.h view
@@ -0,0 +1,4274 @@+//===========================================================================
+//
+// Copyright (c) Microsoft Corporation. All rights reserved.
+//
+//===========================================================================
+
+
+#ifndef _INC_PROPKEY
+#define _INC_PROPKEY
+
+#ifndef DEFINE_API_PKEY
+#define DEFINE_API_PKEY(name, managed_name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) \
+        DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid)
+#endif
+
+#include <propkeydef.h>
+
+#ifndef _WIN32_IE
+#define _WIN32_IE 0x0501
+#else
+#if (_WIN32_IE < 0x0400) && defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0500)
+#error _WIN32_IE setting conflicts with _WIN32_WINNT setting
+#endif
+#endif
+
+ 
+//-----------------------------------------------------------------------------
+// Audio properties
+
+//  Name:     System.Audio.ChannelCount -- PKEY_Audio_ChannelCount
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_AudioSummaryInformation) 64440490-4C8B-11D1-8B70-080036B11A03, 7 (PIDASI_CHANNEL_COUNT)
+//
+//  Indicates the channel count for the audio file.  Values: 1 (mono), 2 (stereo).
+DEFINE_PROPERTYKEY(PKEY_Audio_ChannelCount, 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 7);
+
+// Possible discrete values for PKEY_Audio_ChannelCount are:
+#define AUDIO_CHANNELCOUNT_MONO             1ul
+#define AUDIO_CHANNELCOUNT_STEREO           2ul
+
+//  Name:     System.Audio.Compression -- PKEY_Audio_Compression
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_AudioSummaryInformation) 64440490-4C8B-11D1-8B70-080036B11A03, 10 (PIDASI_COMPRESSION)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Audio_Compression, 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 10);
+
+//  Name:     System.Audio.EncodingBitrate -- PKEY_Audio_EncodingBitrate
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_AudioSummaryInformation) 64440490-4C8B-11D1-8B70-080036B11A03, 4 (PIDASI_AVG_DATA_RATE)
+//
+//  Indicates the average data rate in Hz for the audio file in "bits per second".
+DEFINE_PROPERTYKEY(PKEY_Audio_EncodingBitrate, 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 4);
+
+//  Name:     System.Audio.Format -- PKEY_Audio_Format
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)  Legacy code may treat this as VT_BSTR.
+//  FormatID: (FMTID_AudioSummaryInformation) 64440490-4C8B-11D1-8B70-080036B11A03, 2 (PIDASI_FORMAT)
+//
+//  Indicates the format of the audio file.
+DEFINE_PROPERTYKEY(PKEY_Audio_Format, 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 2);
+
+//  Name:     System.Audio.IsVariableBitRate -- PKEY_Audio_IsVariableBitRate
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: E6822FEE-8C17-4D62-823C-8E9CFCBD1D5C, 100
+DEFINE_PROPERTYKEY(PKEY_Audio_IsVariableBitRate, 0xE6822FEE, 0x8C17, 0x4D62, 0x82, 0x3C, 0x8E, 0x9C, 0xFC, 0xBD, 0x1D, 0x5C, 100);
+
+//  Name:     System.Audio.PeakValue -- PKEY_Audio_PeakValue
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 2579E5D0-1116-4084-BD9A-9B4F7CB4DF5E, 100
+DEFINE_PROPERTYKEY(PKEY_Audio_PeakValue, 0x2579E5D0, 0x1116, 0x4084, 0xBD, 0x9A, 0x9B, 0x4F, 0x7C, 0xB4, 0xDF, 0x5E, 100);
+
+//  Name:     System.Audio.SampleRate -- PKEY_Audio_SampleRate
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_AudioSummaryInformation) 64440490-4C8B-11D1-8B70-080036B11A03, 5 (PIDASI_SAMPLE_RATE)
+//
+//  Indicates the audio sample rate for the audio file in "samples per second".
+DEFINE_PROPERTYKEY(PKEY_Audio_SampleRate, 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 5);
+
+//  Name:     System.Audio.SampleSize -- PKEY_Audio_SampleSize
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_AudioSummaryInformation) 64440490-4C8B-11D1-8B70-080036B11A03, 6 (PIDASI_SAMPLE_SIZE)
+//
+//  Indicates the audio sample size for the audio file in "bits per sample".
+DEFINE_PROPERTYKEY(PKEY_Audio_SampleSize, 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 6);
+
+//  Name:     System.Audio.StreamName -- PKEY_Audio_StreamName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_AudioSummaryInformation) 64440490-4C8B-11D1-8B70-080036B11A03, 9 (PIDASI_STREAM_NAME)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Audio_StreamName, 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 9);
+
+//  Name:     System.Audio.StreamNumber -- PKEY_Audio_StreamNumber
+//  Type:     UInt16 -- VT_UI2
+//  FormatID: (FMTID_AudioSummaryInformation) 64440490-4C8B-11D1-8B70-080036B11A03, 8 (PIDASI_STREAM_NUMBER)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Audio_StreamNumber, 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 8);
+
+ 
+ 
+//-----------------------------------------------------------------------------
+// Calendar properties
+
+//  Name:     System.Calendar.Duration -- PKEY_Calendar_Duration
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 293CA35A-09AA-4DD2-B180-1FE245728A52, 100
+//
+//  The duration as specified in a string.
+DEFINE_PROPERTYKEY(PKEY_Calendar_Duration, 0x293CA35A, 0x09AA, 0x4DD2, 0xB1, 0x80, 0x1F, 0xE2, 0x45, 0x72, 0x8A, 0x52, 100);
+
+//  Name:     System.Calendar.IsOnline -- PKEY_Calendar_IsOnline
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: BFEE9149-E3E2-49A7-A862-C05988145CEC, 100
+//
+//  Identifies if the event is an online event.
+DEFINE_PROPERTYKEY(PKEY_Calendar_IsOnline, 0xBFEE9149, 0xE3E2, 0x49A7, 0xA8, 0x62, 0xC0, 0x59, 0x88, 0x14, 0x5C, 0xEC, 100);
+
+//  Name:     System.Calendar.IsRecurring -- PKEY_Calendar_IsRecurring
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: 315B9C8D-80A9-4EF9-AE16-8E746DA51D70, 100
+DEFINE_PROPERTYKEY(PKEY_Calendar_IsRecurring, 0x315B9C8D, 0x80A9, 0x4EF9, 0xAE, 0x16, 0x8E, 0x74, 0x6D, 0xA5, 0x1D, 0x70, 100);
+
+//  Name:     System.Calendar.Location -- PKEY_Calendar_Location
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: F6272D18-CECC-40B1-B26A-3911717AA7BD, 100
+DEFINE_PROPERTYKEY(PKEY_Calendar_Location, 0xF6272D18, 0xCECC, 0x40B1, 0xB2, 0x6A, 0x39, 0x11, 0x71, 0x7A, 0xA7, 0xBD, 100);
+
+//  Name:     System.Calendar.OptionalAttendeeAddresses -- PKEY_Calendar_OptionalAttendeeAddresses
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: D55BAE5A-3892-417A-A649-C6AC5AAAEAB3, 100
+DEFINE_PROPERTYKEY(PKEY_Calendar_OptionalAttendeeAddresses, 0xD55BAE5A, 0x3892, 0x417A, 0xA6, 0x49, 0xC6, 0xAC, 0x5A, 0xAA, 0xEA, 0xB3, 100);
+
+//  Name:     System.Calendar.OptionalAttendeeNames -- PKEY_Calendar_OptionalAttendeeNames
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: 09429607-582D-437F-84C3-DE93A2B24C3C, 100
+DEFINE_PROPERTYKEY(PKEY_Calendar_OptionalAttendeeNames, 0x09429607, 0x582D, 0x437F, 0x84, 0xC3, 0xDE, 0x93, 0xA2, 0xB2, 0x4C, 0x3C, 100);
+
+//  Name:     System.Calendar.OrganizerAddress -- PKEY_Calendar_OrganizerAddress
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 744C8242-4DF5-456C-AB9E-014EFB9021E3, 100
+//
+//  Address of the organizer organizing the event.
+DEFINE_PROPERTYKEY(PKEY_Calendar_OrganizerAddress, 0x744C8242, 0x4DF5, 0x456C, 0xAB, 0x9E, 0x01, 0x4E, 0xFB, 0x90, 0x21, 0xE3, 100);
+
+//  Name:     System.Calendar.OrganizerName -- PKEY_Calendar_OrganizerName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: AAA660F9-9865-458E-B484-01BC7FE3973E, 100
+//
+//  Name of the organizer organizing the event.
+DEFINE_PROPERTYKEY(PKEY_Calendar_OrganizerName, 0xAAA660F9, 0x9865, 0x458E, 0xB4, 0x84, 0x01, 0xBC, 0x7F, 0xE3, 0x97, 0x3E, 100);
+
+//  Name:     System.Calendar.ReminderTime -- PKEY_Calendar_ReminderTime
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: 72FC5BA4-24F9-4011-9F3F-ADD27AFAD818, 100
+DEFINE_PROPERTYKEY(PKEY_Calendar_ReminderTime, 0x72FC5BA4, 0x24F9, 0x4011, 0x9F, 0x3F, 0xAD, 0xD2, 0x7A, 0xFA, 0xD8, 0x18, 100);
+
+//  Name:     System.Calendar.RequiredAttendeeAddresses -- PKEY_Calendar_RequiredAttendeeAddresses
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: 0BA7D6C3-568D-4159-AB91-781A91FB71E5, 100
+DEFINE_PROPERTYKEY(PKEY_Calendar_RequiredAttendeeAddresses, 0x0BA7D6C3, 0x568D, 0x4159, 0xAB, 0x91, 0x78, 0x1A, 0x91, 0xFB, 0x71, 0xE5, 100);
+
+//  Name:     System.Calendar.RequiredAttendeeNames -- PKEY_Calendar_RequiredAttendeeNames
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: B33AF30B-F552-4584-936C-CB93E5CDA29F, 100
+DEFINE_PROPERTYKEY(PKEY_Calendar_RequiredAttendeeNames, 0xB33AF30B, 0xF552, 0x4584, 0x93, 0x6C, 0xCB, 0x93, 0xE5, 0xCD, 0xA2, 0x9F, 100);
+
+//  Name:     System.Calendar.Resources -- PKEY_Calendar_Resources
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: 00F58A38-C54B-4C40-8696-97235980EAE1, 100
+DEFINE_PROPERTYKEY(PKEY_Calendar_Resources, 0x00F58A38, 0xC54B, 0x4C40, 0x86, 0x96, 0x97, 0x23, 0x59, 0x80, 0xEA, 0xE1, 100);
+
+//  Name:     System.Calendar.ShowTimeAs -- PKEY_Calendar_ShowTimeAs
+//  Type:     UInt16 -- VT_UI2
+//  FormatID: 5BF396D4-5EB2-466F-BDE9-2FB3F2361D6E, 100
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Calendar_ShowTimeAs, 0x5BF396D4, 0x5EB2, 0x466F, 0xBD, 0xE9, 0x2F, 0xB3, 0xF2, 0x36, 0x1D, 0x6E, 100);
+
+// Possible discrete values for PKEY_Calendar_ShowTimeAs are:
+#define CALENDAR_SHOWTIMEAS_FREE            0u
+#define CALENDAR_SHOWTIMEAS_TENTATIVE       1u
+#define CALENDAR_SHOWTIMEAS_BUSY            2u
+#define CALENDAR_SHOWTIMEAS_OOF             3u
+
+//  Name:     System.Calendar.ShowTimeAsText -- PKEY_Calendar_ShowTimeAsText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 53DA57CF-62C0-45C4-81DE-7610BCEFD7F5, 100
+//  
+//  This is the user-friendly form of System.Calendar.ShowTimeAs.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_Calendar_ShowTimeAsText, 0x53DA57CF, 0x62C0, 0x45C4, 0x81, 0xDE, 0x76, 0x10, 0xBC, 0xEF, 0xD7, 0xF5, 100);
+ 
+//-----------------------------------------------------------------------------
+// Communication properties
+
+
+
+//  Name:     System.Communication.AccountName -- PKEY_Communication_AccountName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 9
+//
+//  Account Name
+DEFINE_PROPERTYKEY(PKEY_Communication_AccountName, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 9);
+
+//  Name:     System.Communication.Suffix -- PKEY_Communication_Suffix
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 807B653A-9E91-43EF-8F97-11CE04EE20C5, 100
+DEFINE_PROPERTYKEY(PKEY_Communication_Suffix, 0x807B653A, 0x9E91, 0x43EF, 0x8F, 0x97, 0x11, 0xCE, 0x04, 0xEE, 0x20, 0xC5, 100);
+
+//  Name:     System.Communication.TaskStatus -- PKEY_Communication_TaskStatus
+//  Type:     UInt16 -- VT_UI2
+//  FormatID: BE1A72C6-9A1D-46B7-AFE7-AFAF8CEF4999, 100
+DEFINE_PROPERTYKEY(PKEY_Communication_TaskStatus, 0xBE1A72C6, 0x9A1D, 0x46B7, 0xAF, 0xE7, 0xAF, 0xAF, 0x8C, 0xEF, 0x49, 0x99, 100);
+
+// Possible discrete values for PKEY_Communication_TaskStatus are:
+#define TASKSTATUS_NOTSTARTED               0u
+#define TASKSTATUS_INPROGRESS               1u
+#define TASKSTATUS_COMPLETE                 2u
+#define TASKSTATUS_WAITING                  3u
+#define TASKSTATUS_DEFERRED                 4u
+
+//  Name:     System.Communication.TaskStatusText -- PKEY_Communication_TaskStatusText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: A6744477-C237-475B-A075-54F34498292A, 100
+//  
+//  This is the user-friendly form of System.Communication.TaskStatus.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_Communication_TaskStatusText, 0xA6744477, 0xC237, 0x475B, 0xA0, 0x75, 0x54, 0xF3, 0x44, 0x98, 0x29, 0x2A, 100);
+ 
+//-----------------------------------------------------------------------------
+// Computer properties
+
+
+
+//  Name:     System.Computer.DecoratedFreeSpace -- PKEY_Computer_DecoratedFreeSpace
+//  Type:     Multivalue UInt64 -- VT_VECTOR | VT_UI8  (For variants: VT_ARRAY | VT_UI8)
+//  FormatID: (FMTID_Volume) 9B174B35-40FF-11D2-A27E-00C04FC30871, 7  (Filesystem Volume Properties)
+//
+//  Free space and total space: "%s free of %s"
+DEFINE_PROPERTYKEY(PKEY_Computer_DecoratedFreeSpace, 0x9B174B35, 0x40FF, 0x11D2, 0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71, 7);
+ 
+//-----------------------------------------------------------------------------
+// Contact properties
+
+
+
+//  Name:     System.Contact.Anniversary -- PKEY_Contact_Anniversary
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: 9AD5BADB-CEA7-4470-A03D-B84E51B9949E, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_Anniversary, 0x9AD5BADB, 0xCEA7, 0x4470, 0xA0, 0x3D, 0xB8, 0x4E, 0x51, 0xB9, 0x94, 0x9E, 100);
+
+//  Name:     System.Contact.AssistantName -- PKEY_Contact_AssistantName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: CD102C9C-5540-4A88-A6F6-64E4981C8CD1, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_AssistantName, 0xCD102C9C, 0x5540, 0x4A88, 0xA6, 0xF6, 0x64, 0xE4, 0x98, 0x1C, 0x8C, 0xD1, 100);
+
+//  Name:     System.Contact.AssistantTelephone -- PKEY_Contact_AssistantTelephone
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 9A93244D-A7AD-4FF8-9B99-45EE4CC09AF6, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_AssistantTelephone, 0x9A93244D, 0xA7AD, 0x4FF8, 0x9B, 0x99, 0x45, 0xEE, 0x4C, 0xC0, 0x9A, 0xF6, 100);
+
+//  Name:     System.Contact.Birthday -- PKEY_Contact_Birthday
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 47
+DEFINE_PROPERTYKEY(PKEY_Contact_Birthday, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 47);
+
+//  Name:     System.Contact.BusinessAddress -- PKEY_Contact_BusinessAddress
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 730FB6DD-CF7C-426B-A03F-BD166CC9EE24, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_BusinessAddress, 0x730FB6DD, 0xCF7C, 0x426B, 0xA0, 0x3F, 0xBD, 0x16, 0x6C, 0xC9, 0xEE, 0x24, 100);
+
+//  Name:     System.Contact.BusinessAddressCity -- PKEY_Contact_BusinessAddressCity
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 402B5934-EC5A-48C3-93E6-85E86A2D934E, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_BusinessAddressCity, 0x402B5934, 0xEC5A, 0x48C3, 0x93, 0xE6, 0x85, 0xE8, 0x6A, 0x2D, 0x93, 0x4E, 100);
+
+//  Name:     System.Contact.BusinessAddressCountry -- PKEY_Contact_BusinessAddressCountry
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: B0B87314-FCF6-4FEB-8DFF-A50DA6AF561C, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_BusinessAddressCountry, 0xB0B87314, 0xFCF6, 0x4FEB, 0x8D, 0xFF, 0xA5, 0x0D, 0xA6, 0xAF, 0x56, 0x1C, 100);
+
+//  Name:     System.Contact.BusinessAddressPostalCode -- PKEY_Contact_BusinessAddressPostalCode
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: E1D4A09E-D758-4CD1-B6EC-34A8B5A73F80, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_BusinessAddressPostalCode, 0xE1D4A09E, 0xD758, 0x4CD1, 0xB6, 0xEC, 0x34, 0xA8, 0xB5, 0xA7, 0x3F, 0x80, 100);
+
+//  Name:     System.Contact.BusinessAddressPostOfficeBox -- PKEY_Contact_BusinessAddressPostOfficeBox
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: BC4E71CE-17F9-48D5-BEE9-021DF0EA5409, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_BusinessAddressPostOfficeBox, 0xBC4E71CE, 0x17F9, 0x48D5, 0xBE, 0xE9, 0x02, 0x1D, 0xF0, 0xEA, 0x54, 0x09, 100);
+
+//  Name:     System.Contact.BusinessAddressState -- PKEY_Contact_BusinessAddressState
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 446F787F-10C4-41CB-A6C4-4D0343551597, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_BusinessAddressState, 0x446F787F, 0x10C4, 0x41CB, 0xA6, 0xC4, 0x4D, 0x03, 0x43, 0x55, 0x15, 0x97, 100);
+
+//  Name:     System.Contact.BusinessAddressStreet -- PKEY_Contact_BusinessAddressStreet
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: DDD1460F-C0BF-4553-8CE4-10433C908FB0, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_BusinessAddressStreet, 0xDDD1460F, 0xC0BF, 0x4553, 0x8C, 0xE4, 0x10, 0x43, 0x3C, 0x90, 0x8F, 0xB0, 100);
+
+//  Name:     System.Contact.BusinessFaxNumber -- PKEY_Contact_BusinessFaxNumber
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 91EFF6F3-2E27-42CA-933E-7C999FBE310B, 100
+//
+//  Business fax number of the contact.
+DEFINE_PROPERTYKEY(PKEY_Contact_BusinessFaxNumber, 0x91EFF6F3, 0x2E27, 0x42CA, 0x93, 0x3E, 0x7C, 0x99, 0x9F, 0xBE, 0x31, 0x0B, 100);
+
+//  Name:     System.Contact.BusinessHomePage -- PKEY_Contact_BusinessHomePage
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 56310920-2491-4919-99CE-EADB06FAFDB2, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_BusinessHomePage, 0x56310920, 0x2491, 0x4919, 0x99, 0xCE, 0xEA, 0xDB, 0x06, 0xFA, 0xFD, 0xB2, 100);
+
+//  Name:     System.Contact.BusinessTelephone -- PKEY_Contact_BusinessTelephone
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 6A15E5A0-0A1E-4CD7-BB8C-D2F1B0C929BC, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_BusinessTelephone, 0x6A15E5A0, 0x0A1E, 0x4CD7, 0xBB, 0x8C, 0xD2, 0xF1, 0xB0, 0xC9, 0x29, 0xBC, 100);
+
+//  Name:     System.Contact.CallbackTelephone -- PKEY_Contact_CallbackTelephone
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: BF53D1C3-49E0-4F7F-8567-5A821D8AC542, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_CallbackTelephone, 0xBF53D1C3, 0x49E0, 0x4F7F, 0x85, 0x67, 0x5A, 0x82, 0x1D, 0x8A, 0xC5, 0x42, 100);
+
+//  Name:     System.Contact.CarTelephone -- PKEY_Contact_CarTelephone
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 8FDC6DEA-B929-412B-BA90-397A257465FE, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_CarTelephone, 0x8FDC6DEA, 0xB929, 0x412B, 0xBA, 0x90, 0x39, 0x7A, 0x25, 0x74, 0x65, 0xFE, 100);
+
+//  Name:     System.Contact.Children -- PKEY_Contact_Children
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: D4729704-8EF1-43EF-9024-2BD381187FD5, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_Children, 0xD4729704, 0x8EF1, 0x43EF, 0x90, 0x24, 0x2B, 0xD3, 0x81, 0x18, 0x7F, 0xD5, 100);
+
+//  Name:     System.Contact.CompanyMainTelephone -- PKEY_Contact_CompanyMainTelephone
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 8589E481-6040-473D-B171-7FA89C2708ED, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_CompanyMainTelephone, 0x8589E481, 0x6040, 0x473D, 0xB1, 0x71, 0x7F, 0xA8, 0x9C, 0x27, 0x08, 0xED, 100);
+
+//  Name:     System.Contact.Department -- PKEY_Contact_Department
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: FC9F7306-FF8F-4D49-9FB6-3FFE5C0951EC, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_Department, 0xFC9F7306, 0xFF8F, 0x4D49, 0x9F, 0xB6, 0x3F, 0xFE, 0x5C, 0x09, 0x51, 0xEC, 100);
+
+//  Name:     System.Contact.EmailAddress -- PKEY_Contact_EmailAddress
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: F8FA7FA3-D12B-4785-8A4E-691A94F7A3E7, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_EmailAddress, 0xF8FA7FA3, 0xD12B, 0x4785, 0x8A, 0x4E, 0x69, 0x1A, 0x94, 0xF7, 0xA3, 0xE7, 100);
+
+//  Name:     System.Contact.EmailAddress2 -- PKEY_Contact_EmailAddress2
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 38965063-EDC8-4268-8491-B7723172CF29, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_EmailAddress2, 0x38965063, 0xEDC8, 0x4268, 0x84, 0x91, 0xB7, 0x72, 0x31, 0x72, 0xCF, 0x29, 100);
+
+//  Name:     System.Contact.EmailAddress3 -- PKEY_Contact_EmailAddress3
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 644D37B4-E1B3-4BAD-B099-7E7C04966ACA, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_EmailAddress3, 0x644D37B4, 0xE1B3, 0x4BAD, 0xB0, 0x99, 0x7E, 0x7C, 0x04, 0x96, 0x6A, 0xCA, 100);
+
+//  Name:     System.Contact.EmailAddresses -- PKEY_Contact_EmailAddresses
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: 84D8F337-981D-44B3-9615-C7596DBA17E3, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_EmailAddresses, 0x84D8F337, 0x981D, 0x44B3, 0x96, 0x15, 0xC7, 0x59, 0x6D, 0xBA, 0x17, 0xE3, 100);
+
+//  Name:     System.Contact.EmailName -- PKEY_Contact_EmailName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: CC6F4F24-6083-4BD4-8754-674D0DE87AB8, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_EmailName, 0xCC6F4F24, 0x6083, 0x4BD4, 0x87, 0x54, 0x67, 0x4D, 0x0D, 0xE8, 0x7A, 0xB8, 100);
+
+//  Name:     System.Contact.FileAsName -- PKEY_Contact_FileAsName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: F1A24AA7-9CA7-40F6-89EC-97DEF9FFE8DB, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_FileAsName, 0xF1A24AA7, 0x9CA7, 0x40F6, 0x89, 0xEC, 0x97, 0xDE, 0xF9, 0xFF, 0xE8, 0xDB, 100);
+
+//  Name:     System.Contact.FirstName -- PKEY_Contact_FirstName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 14977844-6B49-4AAD-A714-A4513BF60460, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_FirstName, 0x14977844, 0x6B49, 0x4AAD, 0xA7, 0x14, 0xA4, 0x51, 0x3B, 0xF6, 0x04, 0x60, 100);
+
+//  Name:     System.Contact.FullName -- PKEY_Contact_FullName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 635E9051-50A5-4BA2-B9DB-4ED056C77296, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_FullName, 0x635E9051, 0x50A5, 0x4BA2, 0xB9, 0xDB, 0x4E, 0xD0, 0x56, 0xC7, 0x72, 0x96, 100);
+
+//  Name:     System.Contact.Gender -- PKEY_Contact_Gender
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 3C8CEE58-D4F0-4CF9-B756-4E5D24447BCD, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_Gender, 0x3C8CEE58, 0xD4F0, 0x4CF9, 0xB7, 0x56, 0x4E, 0x5D, 0x24, 0x44, 0x7B, 0xCD, 100);
+
+//  Name:     System.Contact.Hobbies -- PKEY_Contact_Hobbies
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: 5DC2253F-5E11-4ADF-9CFE-910DD01E3E70, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_Hobbies, 0x5DC2253F, 0x5E11, 0x4ADF, 0x9C, 0xFE, 0x91, 0x0D, 0xD0, 0x1E, 0x3E, 0x70, 100);
+
+//  Name:     System.Contact.HomeAddress -- PKEY_Contact_HomeAddress
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 98F98354-617A-46B8-8560-5B1B64BF1F89, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_HomeAddress, 0x98F98354, 0x617A, 0x46B8, 0x85, 0x60, 0x5B, 0x1B, 0x64, 0xBF, 0x1F, 0x89, 100);
+
+//  Name:     System.Contact.HomeAddressCity -- PKEY_Contact_HomeAddressCity
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 65
+DEFINE_PROPERTYKEY(PKEY_Contact_HomeAddressCity, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 65);
+
+//  Name:     System.Contact.HomeAddressCountry -- PKEY_Contact_HomeAddressCountry
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 08A65AA1-F4C9-43DD-9DDF-A33D8E7EAD85, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_HomeAddressCountry, 0x08A65AA1, 0xF4C9, 0x43DD, 0x9D, 0xDF, 0xA3, 0x3D, 0x8E, 0x7E, 0xAD, 0x85, 100);
+
+//  Name:     System.Contact.HomeAddressPostalCode -- PKEY_Contact_HomeAddressPostalCode
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 8AFCC170-8A46-4B53-9EEE-90BAE7151E62, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_HomeAddressPostalCode, 0x8AFCC170, 0x8A46, 0x4B53, 0x9E, 0xEE, 0x90, 0xBA, 0xE7, 0x15, 0x1E, 0x62, 100);
+
+//  Name:     System.Contact.HomeAddressPostOfficeBox -- PKEY_Contact_HomeAddressPostOfficeBox
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 7B9F6399-0A3F-4B12-89BD-4ADC51C918AF, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_HomeAddressPostOfficeBox, 0x7B9F6399, 0x0A3F, 0x4B12, 0x89, 0xBD, 0x4A, 0xDC, 0x51, 0xC9, 0x18, 0xAF, 100);
+
+//  Name:     System.Contact.HomeAddressState -- PKEY_Contact_HomeAddressState
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: C89A23D0-7D6D-4EB8-87D4-776A82D493E5, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_HomeAddressState, 0xC89A23D0, 0x7D6D, 0x4EB8, 0x87, 0xD4, 0x77, 0x6A, 0x82, 0xD4, 0x93, 0xE5, 100);
+
+//  Name:     System.Contact.HomeAddressStreet -- PKEY_Contact_HomeAddressStreet
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 0ADEF160-DB3F-4308-9A21-06237B16FA2A, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_HomeAddressStreet, 0x0ADEF160, 0xDB3F, 0x4308, 0x9A, 0x21, 0x06, 0x23, 0x7B, 0x16, 0xFA, 0x2A, 100);
+
+//  Name:     System.Contact.HomeFaxNumber -- PKEY_Contact_HomeFaxNumber
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 660E04D6-81AB-4977-A09F-82313113AB26, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_HomeFaxNumber, 0x660E04D6, 0x81AB, 0x4977, 0xA0, 0x9F, 0x82, 0x31, 0x31, 0x13, 0xAB, 0x26, 100);
+
+//  Name:     System.Contact.HomeTelephone -- PKEY_Contact_HomeTelephone
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 20
+DEFINE_PROPERTYKEY(PKEY_Contact_HomeTelephone, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 20);
+
+//  Name:     System.Contact.IMAddress -- PKEY_Contact_IMAddress
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: D68DBD8A-3374-4B81-9972-3EC30682DB3D, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_IMAddress, 0xD68DBD8A, 0x3374, 0x4B81, 0x99, 0x72, 0x3E, 0xC3, 0x06, 0x82, 0xDB, 0x3D, 100);
+
+//  Name:     System.Contact.Initials -- PKEY_Contact_Initials
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: F3D8F40D-50CB-44A2-9718-40CB9119495D, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_Initials, 0xF3D8F40D, 0x50CB, 0x44A2, 0x97, 0x18, 0x40, 0xCB, 0x91, 0x19, 0x49, 0x5D, 100);
+
+//  Name:     System.Contact.JA.CompanyNamePhonetic -- PKEY_Contact_JA_CompanyNamePhonetic
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 897B3694-FE9E-43E6-8066-260F590C0100, 2
+//  
+//  
+DEFINE_PROPERTYKEY(PKEY_Contact_JA_CompanyNamePhonetic, 0x897B3694, 0xFE9E, 0x43E6, 0x80, 0x66, 0x26, 0x0F, 0x59, 0x0C, 0x01, 0x00, 2);
+
+//  Name:     System.Contact.JA.FirstNamePhonetic -- PKEY_Contact_JA_FirstNamePhonetic
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 897B3694-FE9E-43E6-8066-260F590C0100, 3
+//  
+//  
+DEFINE_PROPERTYKEY(PKEY_Contact_JA_FirstNamePhonetic, 0x897B3694, 0xFE9E, 0x43E6, 0x80, 0x66, 0x26, 0x0F, 0x59, 0x0C, 0x01, 0x00, 3);
+
+//  Name:     System.Contact.JA.LastNamePhonetic -- PKEY_Contact_JA_LastNamePhonetic
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 897B3694-FE9E-43E6-8066-260F590C0100, 4
+//  
+//  
+DEFINE_PROPERTYKEY(PKEY_Contact_JA_LastNamePhonetic, 0x897B3694, 0xFE9E, 0x43E6, 0x80, 0x66, 0x26, 0x0F, 0x59, 0x0C, 0x01, 0x00, 4);
+
+//  Name:     System.Contact.JobTitle -- PKEY_Contact_JobTitle
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 6
+DEFINE_PROPERTYKEY(PKEY_Contact_JobTitle, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 6);
+
+//  Name:     System.Contact.Label -- PKEY_Contact_Label
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 97B0AD89-DF49-49CC-834E-660974FD755B, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_Label, 0x97B0AD89, 0xDF49, 0x49CC, 0x83, 0x4E, 0x66, 0x09, 0x74, 0xFD, 0x75, 0x5B, 100);
+
+//  Name:     System.Contact.LastName -- PKEY_Contact_LastName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 8F367200-C270-457C-B1D4-E07C5BCD90C7, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_LastName, 0x8F367200, 0xC270, 0x457C, 0xB1, 0xD4, 0xE0, 0x7C, 0x5B, 0xCD, 0x90, 0xC7, 100);
+
+//  Name:     System.Contact.MailingAddress -- PKEY_Contact_MailingAddress
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: C0AC206A-827E-4650-95AE-77E2BB74FCC9, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_MailingAddress, 0xC0AC206A, 0x827E, 0x4650, 0x95, 0xAE, 0x77, 0xE2, 0xBB, 0x74, 0xFC, 0xC9, 100);
+
+//  Name:     System.Contact.MiddleName -- PKEY_Contact_MiddleName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 71
+DEFINE_PROPERTYKEY(PKEY_Contact_MiddleName, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 71);
+
+//  Name:     System.Contact.MobileTelephone -- PKEY_Contact_MobileTelephone
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 35
+DEFINE_PROPERTYKEY(PKEY_Contact_MobileTelephone, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 35);
+
+//  Name:     System.Contact.NickName -- PKEY_Contact_NickName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 74
+DEFINE_PROPERTYKEY(PKEY_Contact_NickName, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 74);
+
+//  Name:     System.Contact.OfficeLocation -- PKEY_Contact_OfficeLocation
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 7
+DEFINE_PROPERTYKEY(PKEY_Contact_OfficeLocation, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 7);
+
+//  Name:     System.Contact.OtherAddress -- PKEY_Contact_OtherAddress
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 508161FA-313B-43D5-83A1-C1ACCF68622C, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_OtherAddress, 0x508161FA, 0x313B, 0x43D5, 0x83, 0xA1, 0xC1, 0xAC, 0xCF, 0x68, 0x62, 0x2C, 100);
+
+//  Name:     System.Contact.OtherAddressCity -- PKEY_Contact_OtherAddressCity
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 6E682923-7F7B-4F0C-A337-CFCA296687BF, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_OtherAddressCity, 0x6E682923, 0x7F7B, 0x4F0C, 0xA3, 0x37, 0xCF, 0xCA, 0x29, 0x66, 0x87, 0xBF, 100);
+
+//  Name:     System.Contact.OtherAddressCountry -- PKEY_Contact_OtherAddressCountry
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 8F167568-0AAE-4322-8ED9-6055B7B0E398, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_OtherAddressCountry, 0x8F167568, 0x0AAE, 0x4322, 0x8E, 0xD9, 0x60, 0x55, 0xB7, 0xB0, 0xE3, 0x98, 100);
+
+//  Name:     System.Contact.OtherAddressPostalCode -- PKEY_Contact_OtherAddressPostalCode
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 95C656C1-2ABF-4148-9ED3-9EC602E3B7CD, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_OtherAddressPostalCode, 0x95C656C1, 0x2ABF, 0x4148, 0x9E, 0xD3, 0x9E, 0xC6, 0x02, 0xE3, 0xB7, 0xCD, 100);
+
+//  Name:     System.Contact.OtherAddressPostOfficeBox -- PKEY_Contact_OtherAddressPostOfficeBox
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 8B26EA41-058F-43F6-AECC-4035681CE977, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_OtherAddressPostOfficeBox, 0x8B26EA41, 0x058F, 0x43F6, 0xAE, 0xCC, 0x40, 0x35, 0x68, 0x1C, 0xE9, 0x77, 100);
+
+//  Name:     System.Contact.OtherAddressState -- PKEY_Contact_OtherAddressState
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 71B377D6-E570-425F-A170-809FAE73E54E, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_OtherAddressState, 0x71B377D6, 0xE570, 0x425F, 0xA1, 0x70, 0x80, 0x9F, 0xAE, 0x73, 0xE5, 0x4E, 100);
+
+//  Name:     System.Contact.OtherAddressStreet -- PKEY_Contact_OtherAddressStreet
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: FF962609-B7D6-4999-862D-95180D529AEA, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_OtherAddressStreet, 0xFF962609, 0xB7D6, 0x4999, 0x86, 0x2D, 0x95, 0x18, 0x0D, 0x52, 0x9A, 0xEA, 100);
+
+//  Name:     System.Contact.PagerTelephone -- PKEY_Contact_PagerTelephone
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: D6304E01-F8F5-4F45-8B15-D024A6296789, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_PagerTelephone, 0xD6304E01, 0xF8F5, 0x4F45, 0x8B, 0x15, 0xD0, 0x24, 0xA6, 0x29, 0x67, 0x89, 100);
+
+//  Name:     System.Contact.PersonalTitle -- PKEY_Contact_PersonalTitle
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 69
+DEFINE_PROPERTYKEY(PKEY_Contact_PersonalTitle, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 69);
+
+//  Name:     System.Contact.PrimaryAddressCity -- PKEY_Contact_PrimaryAddressCity
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: C8EA94F0-A9E3-4969-A94B-9C62A95324E0, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_PrimaryAddressCity, 0xC8EA94F0, 0xA9E3, 0x4969, 0xA9, 0x4B, 0x9C, 0x62, 0xA9, 0x53, 0x24, 0xE0, 100);
+
+//  Name:     System.Contact.PrimaryAddressCountry -- PKEY_Contact_PrimaryAddressCountry
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: E53D799D-0F3F-466E-B2FF-74634A3CB7A4, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_PrimaryAddressCountry, 0xE53D799D, 0x0F3F, 0x466E, 0xB2, 0xFF, 0x74, 0x63, 0x4A, 0x3C, 0xB7, 0xA4, 100);
+
+//  Name:     System.Contact.PrimaryAddressPostalCode -- PKEY_Contact_PrimaryAddressPostalCode
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 18BBD425-ECFD-46EF-B612-7B4A6034EDA0, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_PrimaryAddressPostalCode, 0x18BBD425, 0xECFD, 0x46EF, 0xB6, 0x12, 0x7B, 0x4A, 0x60, 0x34, 0xED, 0xA0, 100);
+
+//  Name:     System.Contact.PrimaryAddressPostOfficeBox -- PKEY_Contact_PrimaryAddressPostOfficeBox
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: DE5EF3C7-46E1-484E-9999-62C5308394C1, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_PrimaryAddressPostOfficeBox, 0xDE5EF3C7, 0x46E1, 0x484E, 0x99, 0x99, 0x62, 0xC5, 0x30, 0x83, 0x94, 0xC1, 100);
+
+//  Name:     System.Contact.PrimaryAddressState -- PKEY_Contact_PrimaryAddressState
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: F1176DFE-7138-4640-8B4C-AE375DC70A6D, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_PrimaryAddressState, 0xF1176DFE, 0x7138, 0x4640, 0x8B, 0x4C, 0xAE, 0x37, 0x5D, 0xC7, 0x0A, 0x6D, 100);
+
+//  Name:     System.Contact.PrimaryAddressStreet -- PKEY_Contact_PrimaryAddressStreet
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 63C25B20-96BE-488F-8788-C09C407AD812, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_PrimaryAddressStreet, 0x63C25B20, 0x96BE, 0x488F, 0x87, 0x88, 0xC0, 0x9C, 0x40, 0x7A, 0xD8, 0x12, 100);
+
+//  Name:     System.Contact.PrimaryEmailAddress -- PKEY_Contact_PrimaryEmailAddress
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 48
+DEFINE_PROPERTYKEY(PKEY_Contact_PrimaryEmailAddress, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 48);
+
+//  Name:     System.Contact.PrimaryTelephone -- PKEY_Contact_PrimaryTelephone
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 25
+DEFINE_PROPERTYKEY(PKEY_Contact_PrimaryTelephone, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 25);
+
+//  Name:     System.Contact.Profession -- PKEY_Contact_Profession
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 7268AF55-1CE4-4F6E-A41F-B6E4EF10E4A9, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_Profession, 0x7268AF55, 0x1CE4, 0x4F6E, 0xA4, 0x1F, 0xB6, 0xE4, 0xEF, 0x10, 0xE4, 0xA9, 100);
+
+//  Name:     System.Contact.SpouseName -- PKEY_Contact_SpouseName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 9D2408B6-3167-422B-82B0-F583B7A7CFE3, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_SpouseName, 0x9D2408B6, 0x3167, 0x422B, 0x82, 0xB0, 0xF5, 0x83, 0xB7, 0xA7, 0xCF, 0xE3, 100);
+
+//  Name:     System.Contact.Suffix -- PKEY_Contact_Suffix
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 176DC63C-2688-4E89-8143-A347800F25E9, 73
+DEFINE_PROPERTYKEY(PKEY_Contact_Suffix, 0x176DC63C, 0x2688, 0x4E89, 0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9, 73);
+
+//  Name:     System.Contact.TelexNumber -- PKEY_Contact_TelexNumber
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: C554493C-C1F7-40C1-A76C-EF8C0614003E, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_TelexNumber, 0xC554493C, 0xC1F7, 0x40C1, 0xA7, 0x6C, 0xEF, 0x8C, 0x06, 0x14, 0x00, 0x3E, 100);
+
+//  Name:     System.Contact.TTYTDDTelephone -- PKEY_Contact_TTYTDDTelephone
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: AAF16BAC-2B55-45E6-9F6D-415EB94910DF, 100
+DEFINE_PROPERTYKEY(PKEY_Contact_TTYTDDTelephone, 0xAAF16BAC, 0x2B55, 0x45E6, 0x9F, 0x6D, 0x41, 0x5E, 0xB9, 0x49, 0x10, 0xDF, 100);
+
+//  Name:     System.Contact.WebPage -- PKEY_Contact_WebPage
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 18
+DEFINE_PROPERTYKEY(PKEY_Contact_WebPage, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 18);
+ 
+//-----------------------------------------------------------------------------
+// Core properties
+
+
+
+//  Name:     System.AcquisitionID -- PKEY_AcquisitionID
+//  Type:     Int32 -- VT_I4
+//  FormatID: 65A98875-3C80-40AB-ABBC-EFDAF77DBEE2, 100
+//
+//  Hash to determine acquisition session.
+DEFINE_PROPERTYKEY(PKEY_AcquisitionID, 0x65A98875, 0x3C80, 0x40AB, 0xAB, 0xBC, 0xEF, 0xDA, 0xF7, 0x7D, 0xBE, 0xE2, 100);
+
+//  Name:     System.ApplicationName -- PKEY_ApplicationName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)  Legacy code may treat this as VT_LPSTR.
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 18 (PIDSI_APPNAME)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_ApplicationName, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 18);
+
+//  Name:     System.Author -- PKEY_Author
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)  Legacy code may treat this as VT_LPSTR.
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 4 (PIDSI_AUTHOR)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Author, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 4);
+
+//  Name:     System.Capacity -- PKEY_Capacity
+//  Type:     UInt64 -- VT_UI8
+//  FormatID: (FMTID_Volume) 9B174B35-40FF-11D2-A27E-00C04FC30871, 3 (PID_VOLUME_CAPACITY)  (Filesystem Volume Properties)
+//
+//  The amount of total space in bytes.
+DEFINE_PROPERTYKEY(PKEY_Capacity, 0x9B174B35, 0x40FF, 0x11D2, 0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71, 3);
+
+//  Name:     System.Category -- PKEY_Category
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 2 (PIDDSI_CATEGORY)
+//
+//  Legacy code treats this as VT_LPSTR.
+DEFINE_PROPERTYKEY(PKEY_Category, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 2);
+
+//  Name:     System.Comment -- PKEY_Comment
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)  Legacy code may treat this as VT_LPSTR.
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 6 (PIDSI_COMMENTS)
+//
+//  Comments.
+DEFINE_PROPERTYKEY(PKEY_Comment, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 6);
+
+//  Name:     System.Company -- PKEY_Company
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 15 (PIDDSI_COMPANY)
+//
+//  The company or publisher.
+DEFINE_PROPERTYKEY(PKEY_Company, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 15);
+
+//  Name:     System.ComputerName -- PKEY_ComputerName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 5 (PID_COMPUTERNAME)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_ComputerName, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 5);
+
+//  Name:     System.ContainedItems -- PKEY_ContainedItems
+//  Type:     Multivalue Guid -- VT_VECTOR | VT_CLSID  (For variants: VT_ARRAY | VT_CLSID)
+//  FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 29
+//  
+//  The list of type of items, this item contains. For example, this item contains urls, attachments etc.
+//  This is represented as a vector array of GUIDs where each GUID represents certain type.
+DEFINE_PROPERTYKEY(PKEY_ContainedItems, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 29);
+
+//  Name:     System.ContentStatus -- PKEY_ContentStatus
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 27
+DEFINE_PROPERTYKEY(PKEY_ContentStatus, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 27);
+
+//  Name:     System.ContentType -- PKEY_ContentType
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 26
+DEFINE_PROPERTYKEY(PKEY_ContentType, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 26);
+
+//  Name:     System.Copyright -- PKEY_Copyright
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 11 (PIDMSI_COPYRIGHT)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Copyright, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 11);
+
+//  Name:     System.DateAccessed -- PKEY_DateAccessed
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 16 (PID_STG_ACCESSTIME)
+//
+//  The time of the last access to the item.  The Indexing Service friendly name is 'access'.
+DEFINE_PROPERTYKEY(PKEY_DateAccessed, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 16);
+
+//  Name:     System.DateAcquired -- PKEY_DateAcquired
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: 2CBAA8F5-D81F-47CA-B17A-F8D822300131, 100
+//  
+//  The time the file entered the system via acquisition.  This is not the same as System.DateImported.
+//  Examples are when pictures are acquired from a camera, or when music is purchased online.
+DEFINE_PROPERTYKEY(PKEY_DateAcquired, 0x2CBAA8F5, 0xD81F, 0x47CA, 0xB1, 0x7A, 0xF8, 0xD8, 0x22, 0x30, 0x01, 0x31, 100);
+
+//  Name:     System.DateArchived -- PKEY_DateArchived
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: 43F8D7B7-A444-4F87-9383-52271C9B915C, 100
+DEFINE_PROPERTYKEY(PKEY_DateArchived, 0x43F8D7B7, 0xA444, 0x4F87, 0x93, 0x83, 0x52, 0x27, 0x1C, 0x9B, 0x91, 0x5C, 100);
+
+//  Name:     System.DateCompleted -- PKEY_DateCompleted
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: 72FAB781-ACDA-43E5-B155-B2434F85E678, 100
+DEFINE_PROPERTYKEY(PKEY_DateCompleted, 0x72FAB781, 0xACDA, 0x43E5, 0xB1, 0x55, 0xB2, 0x43, 0x4F, 0x85, 0xE6, 0x78, 100);
+
+//  Name:     System.DateCreated -- PKEY_DateCreated
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 15 (PID_STG_CREATETIME)
+//
+//  The date and time the item was created. The Indexing Service friendly name is 'create'.
+DEFINE_PROPERTYKEY(PKEY_DateCreated, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 15);
+
+//  Name:     System.DateImported -- PKEY_DateImported
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 18258
+//
+//  The time the file is imported into a separate database.  This is not the same as System.DateAcquired.  (Eg, 2003:05:22 13:55:04)
+DEFINE_PROPERTYKEY(PKEY_DateImported, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 18258);
+
+//  Name:     System.DateModified -- PKEY_DateModified
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 14 (PID_STG_WRITETIME)
+//
+//  The date and time of the last write to the item. The Indexing Service friendly name is 'write'.
+DEFINE_PROPERTYKEY(PKEY_DateModified, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 14);
+
+//  Name:     System.DueDate -- PKEY_DueDate
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: 3F8472B5-E0AF-4DB2-8071-C53FE76AE7CE, 100
+DEFINE_PROPERTYKEY(PKEY_DueDate, 0x3F8472B5, 0xE0AF, 0x4DB2, 0x80, 0x71, 0xC5, 0x3F, 0xE7, 0x6A, 0xE7, 0xCE, 100);
+
+//  Name:     System.EndDate -- PKEY_EndDate
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: C75FAA05-96FD-49E7-9CB4-9F601082D553, 100
+DEFINE_PROPERTYKEY(PKEY_EndDate, 0xC75FAA05, 0x96FD, 0x49E7, 0x9C, 0xB4, 0x9F, 0x60, 0x10, 0x82, 0xD5, 0x53, 100);
+
+//  Name:     System.FileAllocationSize -- PKEY_FileAllocationSize
+//  Type:     UInt64 -- VT_UI8
+//  FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 18 (PID_STG_ALLOCSIZE)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_FileAllocationSize, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 18);
+
+//  Name:     System.FileAttributes -- PKEY_FileAttributes
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 13 (PID_STG_ATTRIBUTES)
+//  
+//  This is the WIN32_FIND_DATA dwFileAttributes for the file-based item.
+DEFINE_PROPERTYKEY(PKEY_FileAttributes, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 13);
+
+//  Name:     System.FileCount -- PKEY_FileCount
+//  Type:     UInt64 -- VT_UI8
+//  FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 12
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_FileCount, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 12);
+
+//  Name:     System.FileDescription -- PKEY_FileDescription
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSFMTID_VERSION) 0CEF7D53-FA64-11D1-A203-0000F81FEDEE, 3 (PIDVSI_FileDescription)
+//  
+//  This is a user-friendly description of the file.
+DEFINE_PROPERTYKEY(PKEY_FileDescription, 0x0CEF7D53, 0xFA64, 0x11D1, 0xA2, 0x03, 0x00, 0x00, 0xF8, 0x1F, 0xED, 0xEE, 3);
+
+//  Name:     System.FileExtension -- PKEY_FileExtension
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: E4F10A3C-49E6-405D-8288-A23BD4EEAA6C, 100
+//  
+//  This is the file extension of the file based item, including the leading period.  
+//  
+//  If System.FileName is VT_EMPTY, then this property should be too.  Otherwise, it should be derived
+//  appropriately by the data source from System.FileName.  If System.FileName does not have a file 
+//  extension, this value should be VT_EMPTY.
+//  
+//  To obtain the type of any item (including an item that is not a file), use System.ItemType.
+//  
+//  Example values:
+//  
+//      If the path is...                     The property value is...
+//      -----------------                     ------------------------
+//      "c:\foo\bar\hello.txt"                ".txt"
+//      "\\server\share\mydir\goodnews.doc"   ".doc"
+//      "\\server\share\numbers.xls"          ".xls"
+//      "\\server\share\folder"               VT_EMPTY
+//      "c:\foo\MyFolder"                     VT_EMPTY
+//      [desktop]                             VT_EMPTY
+DEFINE_PROPERTYKEY(PKEY_FileExtension, 0xE4F10A3C, 0x49E6, 0x405D, 0x82, 0x88, 0xA2, 0x3B, 0xD4, 0xEE, 0xAA, 0x6C, 100);
+
+//  Name:     System.FileFRN -- PKEY_FileFRN
+//  Type:     UInt64 -- VT_UI8
+//  FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 21 (PID_STG_FRN)
+//  
+//  This is the unique file ID, also known as the File Reference Number. For a given file, this is the same value
+//  as is found in the structure variable FILE_ID_BOTH_DIR_INFO.FileId, via GetFileInformationByHandleEx().
+DEFINE_PROPERTYKEY(PKEY_FileFRN, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 21);
+
+//  Name:     System.FileName -- PKEY_FileName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 41CF5AE0-F75A-4806-BD87-59C7D9248EB9, 100
+//  
+//  This is the file name (including extension) of the file.
+//  
+//  It is possible that the item might not exist on a filesystem (ie, it may not be opened 
+//  using CreateFile).  Nonetheless, if the item is represented as a file from the logical sense 
+//  (and its name follows standard Win32 file-naming syntax), then the data source should emit this property.
+//  
+//  If an item is not a file, then the value for this property is VT_EMPTY.  See 
+//  System.ItemNameDisplay.
+//  
+//  This has the same value as System.ParsingName for items that are provided by the Shell's file folder.
+//  
+//  Example values:
+//  
+//      If the path is...                     The property value is...
+//      -----------------                     ------------------------
+//      "c:\foo\bar\hello.txt"                "hello.txt"
+//      "\\server\share\mydir\goodnews.doc"   "goodnews.doc"
+//      "\\server\share\numbers.xls"          "numbers.xls"
+//      "c:\foo\MyFolder"                     "MyFolder"
+//      (email message)                       VT_EMPTY
+//      (song on portable device)             "song.wma"
+DEFINE_PROPERTYKEY(PKEY_FileName, 0x41CF5AE0, 0xF75A, 0x4806, 0xBD, 0x87, 0x59, 0xC7, 0xD9, 0x24, 0x8E, 0xB9, 100);
+
+//  Name:     System.FileOwner -- PKEY_FileOwner
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_Misc) 9B174B34-40FF-11D2-A27E-00C04FC30871, 4 (PID_MISC_OWNER)
+//  
+//  This is the owner of the file, according to the file system.
+DEFINE_PROPERTYKEY(PKEY_FileOwner, 0x9B174B34, 0x40FF, 0x11D2, 0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71, 4);
+
+//  Name:     System.FileVersion -- PKEY_FileVersion
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSFMTID_VERSION) 0CEF7D53-FA64-11D1-A203-0000F81FEDEE, 4 (PIDVSI_FileVersion)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_FileVersion, 0x0CEF7D53, 0xFA64, 0x11D1, 0xA2, 0x03, 0x00, 0x00, 0xF8, 0x1F, 0xED, 0xEE, 4);
+
+//  Name:     System.FindData -- PKEY_FindData
+//  Type:     Buffer -- VT_VECTOR | VT_UI1  (For variants: VT_ARRAY | VT_UI1)
+//  FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 0 (PID_FINDDATA)
+//
+//  WIN32_FIND_DATAW in buffer of bytes.
+DEFINE_PROPERTYKEY(PKEY_FindData, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 0);
+
+//  Name:     System.FlagColor -- PKEY_FlagColor
+//  Type:     UInt16 -- VT_UI2
+//  FormatID: 67DF94DE-0CA7-4D6F-B792-053A3E4F03CF, 100
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_FlagColor, 0x67DF94DE, 0x0CA7, 0x4D6F, 0xB7, 0x92, 0x05, 0x3A, 0x3E, 0x4F, 0x03, 0xCF, 100);
+
+// Possible discrete values for PKEY_FlagColor are:
+#define FLAGCOLOR_PURPLE                    1u
+#define FLAGCOLOR_ORANGE                    2u
+#define FLAGCOLOR_GREEN                     3u
+#define FLAGCOLOR_YELLOW                    4u
+#define FLAGCOLOR_BLUE                      5u
+#define FLAGCOLOR_RED                       6u
+
+//  Name:     System.FlagColorText -- PKEY_FlagColorText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 45EAE747-8E2A-40AE-8CBF-CA52ABA6152A, 100
+//  
+//  This is the user-friendly form of System.FlagColor.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_FlagColorText, 0x45EAE747, 0x8E2A, 0x40AE, 0x8C, 0xBF, 0xCA, 0x52, 0xAB, 0xA6, 0x15, 0x2A, 100);
+
+//  Name:     System.FlagStatus -- PKEY_FlagStatus
+//  Type:     Int32 -- VT_I4
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 12
+//
+//  Status of Flag.  Values: (0=none 1=white 2=Red).  cdoPR_FLAG_STATUS
+DEFINE_PROPERTYKEY(PKEY_FlagStatus, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 12);
+
+// Possible discrete values for PKEY_FlagStatus are:
+#define FLAGSTATUS_NOTFLAGGED               0l
+#define FLAGSTATUS_COMPLETED                1l
+#define FLAGSTATUS_FOLLOWUP                 2l
+
+//  Name:     System.FlagStatusText -- PKEY_FlagStatusText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: DC54FD2E-189D-4871-AA01-08C2F57A4ABC, 100
+//  
+//  This is the user-friendly form of System.FlagStatus.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_FlagStatusText, 0xDC54FD2E, 0x189D, 0x4871, 0xAA, 0x01, 0x08, 0xC2, 0xF5, 0x7A, 0x4A, 0xBC, 100);
+
+//  Name:     System.FreeSpace -- PKEY_FreeSpace
+//  Type:     UInt64 -- VT_UI8
+//  FormatID: (FMTID_Volume) 9B174B35-40FF-11D2-A27E-00C04FC30871, 2 (PID_VOLUME_FREE)  (Filesystem Volume Properties)
+//
+//  The amount of free space in bytes.
+DEFINE_PROPERTYKEY(PKEY_FreeSpace, 0x9B174B35, 0x40FF, 0x11D2, 0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71, 2);
+
+//  Name:     System.Identity -- PKEY_Identity
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: A26F4AFC-7346-4299-BE47-EB1AE613139F, 100
+DEFINE_PROPERTYKEY(PKEY_Identity, 0xA26F4AFC, 0x7346, 0x4299, 0xBE, 0x47, 0xEB, 0x1A, 0xE6, 0x13, 0x13, 0x9F, 100);
+
+//  Name:     System.Importance -- PKEY_Importance
+//  Type:     Int32 -- VT_I4
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 11
+DEFINE_PROPERTYKEY(PKEY_Importance, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 11);
+
+// Possible range of values for PKEY_Importance are:
+#define IMPORTANCE_LOW_MIN                  0l
+#define IMPORTANCE_LOW_SET                  1l
+#define IMPORTANCE_LOW_MAX                  1l
+
+#define IMPORTANCE_NORMAL_MIN               2l
+#define IMPORTANCE_NORMAL_SET               3l
+#define IMPORTANCE_NORMAL_MAX               4l
+
+#define IMPORTANCE_HIGH_MIN                 5l
+#define IMPORTANCE_HIGH_SET                 5l
+#define IMPORTANCE_HIGH_MAX                 5l
+
+
+//  Name:     System.ImportanceText -- PKEY_ImportanceText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: A3B29791-7713-4E1D-BB40-17DB85F01831, 100
+//  
+//  This is the user-friendly form of System.Importance.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_ImportanceText, 0xA3B29791, 0x7713, 0x4E1D, 0xBB, 0x40, 0x17, 0xDB, 0x85, 0xF0, 0x18, 0x31, 100);
+
+//  Name:     System.IsAttachment -- PKEY_IsAttachment
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: F23F425C-71A1-4FA8-922F-678EA4A60408, 100
+//
+//  Identifies if this item is an attachment.
+DEFINE_PROPERTYKEY(PKEY_IsAttachment, 0xF23F425C, 0x71A1, 0x4FA8, 0x92, 0x2F, 0x67, 0x8E, 0xA4, 0xA6, 0x04, 0x08, 100);
+
+//  Name:     System.IsDeleted -- PKEY_IsDeleted
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: 5CDA5FC8-33EE-4FF3-9094-AE7BD8868C4D, 100
+DEFINE_PROPERTYKEY(PKEY_IsDeleted, 0x5CDA5FC8, 0x33EE, 0x4FF3, 0x90, 0x94, 0xAE, 0x7B, 0xD8, 0x86, 0x8C, 0x4D, 100);
+
+//  Name:     System.IsFlagged -- PKEY_IsFlagged
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: 5DA84765-E3FF-4278-86B0-A27967FBDD03, 100
+DEFINE_PROPERTYKEY(PKEY_IsFlagged, 0x5DA84765, 0xE3FF, 0x4278, 0x86, 0xB0, 0xA2, 0x79, 0x67, 0xFB, 0xDD, 0x03, 100);
+
+//  Name:     System.IsFlaggedComplete -- PKEY_IsFlaggedComplete
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: A6F360D2-55F9-48DE-B909-620E090A647C, 100
+DEFINE_PROPERTYKEY(PKEY_IsFlaggedComplete, 0xA6F360D2, 0x55F9, 0x48DE, 0xB9, 0x09, 0x62, 0x0E, 0x09, 0x0A, 0x64, 0x7C, 100);
+
+//  Name:     System.IsIncomplete -- PKEY_IsIncomplete
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: 346C8BD1-2E6A-4C45-89A4-61B78E8E700F, 100
+//
+//  Identifies if the message was not completely received for some error condition.
+DEFINE_PROPERTYKEY(PKEY_IsIncomplete, 0x346C8BD1, 0x2E6A, 0x4C45, 0x89, 0xA4, 0x61, 0xB7, 0x8E, 0x8E, 0x70, 0x0F, 100);
+
+//  Name:     System.IsRead -- PKEY_IsRead
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 10
+//
+//  Has the item been read?
+DEFINE_PROPERTYKEY(PKEY_IsRead, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 10);
+
+//  Name:     System.IsSendToTarget -- PKEY_IsSendToTarget
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 33
+//
+//  Provided by certain shell folders. Return TRUE if the folder is a valid Send To target.
+DEFINE_PROPERTYKEY(PKEY_IsSendToTarget, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 33);
+
+//  Name:     System.IsShared -- PKEY_IsShared
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: EF884C5B-2BFE-41BB-AAE5-76EEDF4F9902, 100
+//
+//  Is this item shared?
+DEFINE_PROPERTYKEY(PKEY_IsShared, 0xEF884C5B, 0x2BFE, 0x41BB, 0xAA, 0xE5, 0x76, 0xEE, 0xDF, 0x4F, 0x99, 0x02, 100);
+
+//  Name:     System.ItemAuthors -- PKEY_ItemAuthors
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: D0A04F0A-462A-48A4-BB2F-3706E88DBD7D, 100
+//  
+//  This is the generic list of authors associated with an item. 
+//  
+//  For example, the artist name for a track is the item author.
+DEFINE_PROPERTYKEY(PKEY_ItemAuthors, 0xD0A04F0A, 0x462A, 0x48A4, 0xBB, 0x2F, 0x37, 0x06, 0xE8, 0x8D, 0xBD, 0x7D, 100);
+
+//  Name:     System.ItemDate -- PKEY_ItemDate
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: F7DB74B4-4287-4103-AFBA-F1B13DCD75CF, 100
+//  
+//  This is the main date for an item. The date of interest. 
+//  
+//  For example, for photos this maps to System.Photo.DateTaken.
+DEFINE_PROPERTYKEY(PKEY_ItemDate, 0xF7DB74B4, 0x4287, 0x4103, 0xAF, 0xBA, 0xF1, 0xB1, 0x3D, 0xCD, 0x75, 0xCF, 100);
+
+//  Name:     System.ItemFolderNameDisplay -- PKEY_ItemFolderNameDisplay
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 2 (PID_STG_DIRECTORY)
+//  
+//  This is the user-friendly display name of the parent folder of an item.
+//  
+//  If System.ItemFolderPathDisplay is VT_EMPTY, then this property should be too.  Otherwise, it 
+//  should be derived appropriately by the data source from System.ItemFolderPathDisplay.
+//  
+//  Example values:
+//  
+//      If the path is...                     The property value is...
+//      -----------------                     ------------------------
+//      "c:\foo\bar\hello.txt"                "bar"
+//      "\\server\share\mydir\goodnews.doc"   "mydir"
+//      "\\server\share\numbers.xls"          "share"
+//      "c:\foo\MyFolder"                     "foo"
+//      "/Mailbox Account/Inbox/'Re: Hello!'" "Inbox"
+DEFINE_PROPERTYKEY(PKEY_ItemFolderNameDisplay, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 2);
+
+//  Name:     System.ItemFolderPathDisplay -- PKEY_ItemFolderPathDisplay
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 6
+//  
+//  This is the user-friendly display path of the parent folder of an item.
+//  
+//  If System.ItemPathDisplay is VT_EMPTY, then this property should be too.  Otherwise, it should 
+//  be derived appropriately by the data source from System.ItemPathDisplay.
+//  
+//  Example values:
+//  
+//      If the path is...                     The property value is...
+//      -----------------                     ------------------------
+//      "c:\foo\bar\hello.txt"                "c:\foo\bar"
+//      "\\server\share\mydir\goodnews.doc"   "\\server\share\mydir"
+//      "\\server\share\numbers.xls"          "\\server\share"
+//      "c:\foo\MyFolder"                     "c:\foo"
+//      "/Mailbox Account/Inbox/'Re: Hello!'" "/Mailbox Account/Inbox"
+DEFINE_PROPERTYKEY(PKEY_ItemFolderPathDisplay, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 6);
+
+//  Name:     System.ItemFolderPathDisplayNarrow -- PKEY_ItemFolderPathDisplayNarrow
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: DABD30ED-0043-4789-A7F8-D013A4736622, 100
+//  
+//  This is the user-friendly display path of the parent folder of an item.  The format of the string
+//  should be tailored such that the folder name comes first, to optimize for a narrow viewing column.
+//  
+//  If the folder is a file folder, the value includes localized names if they are present.
+//  
+//  If System.ItemFolderPathDisplay is VT_EMPTY, then this property should be too.  Otherwise, it should
+//  be derived appropriately by the data source from System.ItemFolderPathDisplay.
+//  
+//  Example values:
+//  
+//      If the path is...                     The property value is...
+//      -----------------                     ------------------------
+//      "c:\foo\bar\hello.txt"                "bar (c:\foo)"
+//      "\\server\share\mydir\goodnews.doc"   "mydir (\\server\share)"
+//      "\\server\share\numbers.xls"          "share (\\server)"
+//      "c:\foo\MyFolder"                     "foo (c:\)"
+//      "/Mailbox Account/Inbox/'Re: Hello!'" "Inbox (/Mailbox Account)"
+DEFINE_PROPERTYKEY(PKEY_ItemFolderPathDisplayNarrow, 0xDABD30ED, 0x0043, 0x4789, 0xA7, 0xF8, 0xD0, 0x13, 0xA4, 0x73, 0x66, 0x22, 100);
+
+//  Name:     System.ItemName -- PKEY_ItemName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 6B8DA074-3B5C-43BC-886F-0A2CDCE00B6F, 100
+//  
+//  This is the base-name of the System.ItemNameDisplay.
+//  
+//  If the item is a file this property
+//  includes the extension in all cases, and will be localized if a localized name is available.
+//  
+//  If the item is a message, then the value of this property does not include the forwarding or
+//  reply prefixes (see System.ItemNamePrefix).
+DEFINE_PROPERTYKEY(PKEY_ItemName, 0x6B8DA074, 0x3B5C, 0x43BC, 0x88, 0x6F, 0x0A, 0x2C, 0xDC, 0xE0, 0x0B, 0x6F, 100);
+
+//  Name:     System.ItemNameDisplay -- PKEY_ItemNameDisplay
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 10 (PID_STG_NAME)
+//  
+//  This is the display name in "most complete" form.  This is the best effort unique representation
+//  of the name of an item that makes sense for end users to read.  It is the concatentation of
+//  System.ItemNamePrefix and System.ItemName.
+//  
+//  If the item is a file this property
+//  includes the extension in all cases, and will be localized if a localized name is available.
+//  
+//  There are acceptable cases when System.FileName is not VT_EMPTY, yet the value of this property 
+//  is completely different.  Email messages are a key example.  If the item is an email message, 
+//  the item name is likely the subject.  In that case, the value must be the concatenation of the
+//  System.ItemNamePrefix and System.ItemName.  Since the value of System.ItemNamePrefix excludes
+//  any trailing whitespace, the concatenation must include a whitespace when generating System.ItemNameDisplay.
+//  
+//  Note that this property is not guaranteed to be unique, but the idea is to promote the most likely
+//  candidate that can be unique and also makes sense for end users. For example, for documents, you
+//  might think about using System.Title as the System.ItemNameDisplay, but in practice the title of
+//  the documents may not be useful or unique enough to be of value as the sole System.ItemNameDisplay.  
+//  Instead, providing the value of System.FileName as the value of System.ItemNameDisplay is a better
+//  candidate.  In Windows Mail, the emails are stored in the file system as .eml files and the 
+//  System.FileName for those files are not human-friendly as they contain GUIDs. In this example, 
+//  promoting System.Subject as System.ItemNameDisplay makes more sense.
+//  
+//  Compatibility notes:
+//  
+//  Shell folder implementations on Vista: use PKEY_ItemNameDisplay for the name column when
+//  you want Explorer to call ISF::GetDisplayNameOf(SHGDN_NORMAL) to get the value of the name. Use
+//  another PKEY (like PKEY_ItemName) when you want Explorer to call either the folder's property store or
+//  ISF2::GetDetailsEx in order to get the value of the name.
+//  
+//  Shell folder implementations on XP: the first column needs to be the name column, and Explorer
+//  will call ISF::GetDisplayNameOf to get the value of the name.  The PKEY/SCID does not matter.
+//  
+//  Example values:
+//  
+//      File:          "hello.txt"
+//      Message:       "Re: Let's talk about Tom's argyle socks!"
+//      Device folder: "song.wma"
+//      Folder:        "Documents"
+DEFINE_PROPERTYKEY(PKEY_ItemNameDisplay, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 10);
+
+//  Name:     System.ItemNamePrefix -- PKEY_ItemNamePrefix
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: D7313FF1-A77A-401C-8C99-3DBDD68ADD36, 100
+//  
+//  This is the prefix of an item, used for email messages.
+//  where the subject begins with "Re:" which is the prefix.
+//  
+//  If the item is a file, then the value of this property is VT_EMPTY.
+//  
+//  If the item is a message, then the value of this property is the forwarding or reply 
+//  prefixes (including delimiting colon, but no whitespace), or VT_EMPTY if there is no prefix.
+//  
+//  Example values:
+//  
+//  System.ItemNamePrefix    System.ItemName      System.ItemNameDisplay
+//  ---------------------    -------------------  ----------------------
+//  VT_EMPTY                 "Great day"          "Great day"
+//  "Re:"                    "Great day"          "Re: Great day"
+//  "Fwd: "                  "Monthly budget"     "Fwd: Monthly budget"
+//  VT_EMPTY                 "accounts.xls"       "accounts.xls"
+DEFINE_PROPERTYKEY(PKEY_ItemNamePrefix, 0xD7313FF1, 0xA77A, 0x401C, 0x8C, 0x99, 0x3D, 0xBD, 0xD6, 0x8A, 0xDD, 0x36, 100);
+
+//  Name:     System.ItemParticipants -- PKEY_ItemParticipants
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: D4D0AA16-9948-41A4-AA85-D97FF9646993, 100
+//  
+//  This is the generic list of people associated with an item and who contributed 
+//  to the item. 
+//  
+//  For example, this is the combination of people in the To list, Cc list and 
+//  sender of an email message.
+DEFINE_PROPERTYKEY(PKEY_ItemParticipants, 0xD4D0AA16, 0x9948, 0x41A4, 0xAA, 0x85, 0xD9, 0x7F, 0xF9, 0x64, 0x69, 0x93, 100);
+
+//  Name:     System.ItemPathDisplay -- PKEY_ItemPathDisplay
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 7
+//  
+//  This is the user-friendly display path to the item.
+//  
+//  If the item is a file or folder this property
+//  includes the extension in all cases, and will be localized if a localized name is available.
+//  
+//  For other items,this is the user-friendly equivalent, assuming the item exists in hierarchical storage.
+//  
+//  Unlike System.ItemUrl, this property value does not include the URL scheme.
+//  
+//  To parse an item path, use System.ItemUrl or System.ParsingPath.  To reference shell 
+//  namespace items using shell APIs, use System.ParsingPath.
+//  
+//  Example values:
+//  
+//      If the path is...                     The property value is...
+//      -----------------                     ------------------------
+//      "c:\foo\bar\hello.txt"                "c:\foo\bar\hello.txt"
+//      "\\server\share\mydir\goodnews.doc"   "\\server\share\mydir\goodnews.doc"
+//      "\\server\share\numbers.xls"          "\\server\share\numbers.xls"
+//      "c:\foo\MyFolder"                     "c:\foo\MyFolder"
+//      "/Mailbox Account/Inbox/'Re: Hello!'" "/Mailbox Account/Inbox/'Re: Hello!'"
+DEFINE_PROPERTYKEY(PKEY_ItemPathDisplay, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 7);
+
+//  Name:     System.ItemPathDisplayNarrow -- PKEY_ItemPathDisplayNarrow
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 8
+//  
+//  This is the user-friendly display path to the item. The format of the string should be 
+//  tailored such that the name comes first, to optimize for a narrow viewing column.
+//  
+//  If the item is a file, the value excludes the file extension, and includes localized names if they are present.
+//  If the item is a message, the value includes the System.ItemNamePrefix.
+//  
+//  To parse an item path, use System.ItemUrl or System.ParsingPath.
+//  
+//  Example values:
+//  
+//      If the path is...                     The property value is...
+//      -----------------                     ------------------------
+//      "c:\foo\bar\hello.txt"                "hello (c:\foo\bar)"
+//      "\\server\share\mydir\goodnews.doc"   "goodnews (\\server\share\mydir)"
+//      "\\server\share\folder"               "folder (\\server\share)"
+//      "c:\foo\MyFolder"                     "MyFolder (c:\foo)"
+//      "/Mailbox Account/Inbox/'Re: Hello!'" "Re: Hello! (/Mailbox Account/Inbox)"
+DEFINE_PROPERTYKEY(PKEY_ItemPathDisplayNarrow, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 8);
+
+//  Name:     System.ItemType -- PKEY_ItemType
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 11
+//  
+//  This is the canonical type of the item and is intended to be programmatically
+//  parsed.
+//  
+//  If there is no canonical type, the value is VT_EMPTY.
+//  
+//  If the item is a file (ie, System.FileName is not VT_EMPTY), the value is the same as
+//  System.FileExtension.
+//  
+//  Use System.ItemTypeText when you want to display the type to end users in a view.  (If
+//   the item is a file, passing the System.ItemType value to PSFormatForDisplay will
+//   result in the same value as System.ItemTypeText.)
+//  
+//  Example values:
+//  
+//      If the path is...                     The property value is...
+//      -----------------                     ------------------------
+//      "c:\foo\bar\hello.txt"                ".txt"
+//      "\\server\share\mydir\goodnews.doc"   ".doc"
+//      "\\server\share\folder"               "Directory"
+//      "c:\foo\MyFolder"                     "Directory"
+//      [desktop]                             "Folder"
+//      "/Mailbox Account/Inbox/'Re: Hello!'" "MAPI/IPM.Message"
+DEFINE_PROPERTYKEY(PKEY_ItemType, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 11);
+
+//  Name:     System.ItemTypeText -- PKEY_ItemTypeText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 4 (PID_STG_STORAGETYPE)
+//  
+//  This is the user friendly type name of the item.  This is not intended to be
+//  programmatically parsed.
+//  
+//  If System.ItemType is VT_EMPTY, the value of this property is also VT_EMPTY.
+//  
+//  If the item is a file, the value of this property is the same as if you passed the 
+//  file's System.ItemType value to PSFormatForDisplay.
+//  
+//  This property should not be confused with System.Kind, where System.Kind is a high-level
+//  user friendly kind name. For example, for a document, System.Kind = "Document" and 
+//  System.Item.Type = ".doc" and System.Item.TypeText = "Microsoft Word Document"
+//  
+//  Example values:
+//  
+//      If the path is...                     The property value is...
+//      -----------------                     ------------------------
+//      "c:\foo\bar\hello.txt"                "Text File"
+//      "\\server\share\mydir\goodnews.doc"   "Microsoft Word Document"
+//      "\\server\share\folder"               "File Folder"
+//      "c:\foo\MyFolder"                     "File Folder"
+//      "/Mailbox Account/Inbox/'Re: Hello!'" "Outlook E-Mail Message"
+DEFINE_PROPERTYKEY(PKEY_ItemTypeText, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 4);
+
+//  Name:     System.ItemUrl -- PKEY_ItemUrl
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_Query) 49691C90-7E17-101A-A91C-08002B2ECDA9, 9 (PROPID_QUERY_VIRTUALPATH)
+//  
+//  This always represents a well formed URL that points to the item.  
+//  
+//  To reference shell namespace items using shell APIs, use System.ParsingPath.
+//  
+//  Example values:
+//  
+//      Files:    "file:///c:/foo/bar/hello.txt"
+//                "csc://{GUID}/..."
+//      Messages: "mapi://..."
+DEFINE_PROPERTYKEY(PKEY_ItemUrl, 0x49691C90, 0x7E17, 0x101A, 0xA9, 0x1C, 0x08, 0x00, 0x2B, 0x2E, 0xCD, 0xA9, 9);
+
+//  Name:     System.Keywords -- PKEY_Keywords
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)  Legacy code may treat this as VT_LPSTR.
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 5 (PIDSI_KEYWORDS)
+//
+//  The keywords for the item.  Also referred to as tags.
+DEFINE_PROPERTYKEY(PKEY_Keywords, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 5);
+
+//  Name:     System.Kind -- PKEY_Kind
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: 1E3EE840-BC2B-476C-8237-2ACD1A839B22, 3
+//  
+//  System.Kind is used to map extensions to various .Search folders.
+//  Extensions are mapped to Kinds at HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\KindMap
+//  The list of kinds is not extensible.
+DEFINE_PROPERTYKEY(PKEY_Kind, 0x1E3EE840, 0xBC2B, 0x476C, 0x82, 0x37, 0x2A, 0xCD, 0x1A, 0x83, 0x9B, 0x22, 3);
+
+// Possible discrete values for PKEY_Kind are:
+#define KIND_CALENDAR                       L"calendar"
+#define KIND_COMMUNICATION                  L"communication"
+#define KIND_CONTACT                        L"contact"
+#define KIND_DOCUMENT                       L"document"
+#define KIND_EMAIL                          L"email"
+#define KIND_FEED                           L"feed"
+#define KIND_FOLDER                         L"folder"
+#define KIND_GAME                           L"game"
+#define KIND_INSTANTMESSAGE                 L"instantmessage"
+#define KIND_JOURNAL                        L"journal"
+#define KIND_LINK                           L"link"
+#define KIND_MOVIE                          L"movie"
+#define KIND_MUSIC                          L"music"
+#define KIND_NOTE                           L"note"
+#define KIND_PICTURE                        L"picture"
+#define KIND_PROGRAM                        L"program"
+#define KIND_RECORDEDTV                     L"recordedtv"
+#define KIND_SEARCHFOLDER                   L"searchfolder"
+#define KIND_TASK                           L"task"
+#define KIND_VIDEO                          L"video"
+#define KIND_WEBHISTORY                     L"webhistory"
+
+//  Name:     System.KindText -- PKEY_KindText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: F04BEF95-C585-4197-A2B7-DF46FDC9EE6D, 100
+//  
+//  This is the user-friendly form of System.Kind.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_KindText, 0xF04BEF95, 0xC585, 0x4197, 0xA2, 0xB7, 0xDF, 0x46, 0xFD, 0xC9, 0xEE, 0x6D, 100);
+
+//  Name:     System.Language -- PKEY_Language
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 28
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Language, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 28);
+
+//  Name:     System.MileageInformation -- PKEY_MileageInformation
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: FDF84370-031A-4ADD-9E91-0D775F1C6605, 100
+DEFINE_PROPERTYKEY(PKEY_MileageInformation, 0xFDF84370, 0x031A, 0x4ADD, 0x9E, 0x91, 0x0D, 0x77, 0x5F, 0x1C, 0x66, 0x05, 100);
+
+//  Name:     System.MIMEType -- PKEY_MIMEType
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 0B63E350-9CCC-11D0-BCDB-00805FCCCE04, 5
+//
+//  The MIME type.  Eg, for EML files: 'message/rfc822'.
+DEFINE_PROPERTYKEY(PKEY_MIMEType, 0x0B63E350, 0x9CCC, 0x11D0, 0xBC, 0xDB, 0x00, 0x80, 0x5F, 0xCC, 0xCE, 0x04, 5);
+
+//  Name:     System.Null -- PKEY_Null
+//  Type:     Null -- VT_NULL
+//  FormatID: 00000000-0000-0000-0000-000000000000, 0
+DEFINE_PROPERTYKEY(PKEY_Null, 0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0);
+
+//  Name:     System.OfflineAvailability -- PKEY_OfflineAvailability
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: A94688B6-7D9F-4570-A648-E3DFC0AB2B3F, 100
+DEFINE_PROPERTYKEY(PKEY_OfflineAvailability, 0xA94688B6, 0x7D9F, 0x4570, 0xA6, 0x48, 0xE3, 0xDF, 0xC0, 0xAB, 0x2B, 0x3F, 100);
+
+// Possible discrete values for PKEY_OfflineAvailability are:
+#define OFFLINEAVAILABILITY_NOT_AVAILABLE   0ul
+#define OFFLINEAVAILABILITY_AVAILABLE       1ul
+#define OFFLINEAVAILABILITY_ALWAYS_AVAILABLE 2ul
+
+//  Name:     System.OfflineStatus -- PKEY_OfflineStatus
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 6D24888F-4718-4BDA-AFED-EA0FB4386CD8, 100
+DEFINE_PROPERTYKEY(PKEY_OfflineStatus, 0x6D24888F, 0x4718, 0x4BDA, 0xAF, 0xED, 0xEA, 0x0F, 0xB4, 0x38, 0x6C, 0xD8, 100);
+
+// Possible discrete values for PKEY_OfflineStatus are:
+#define OFFLINESTATUS_ONLINE                0ul
+#define OFFLINESTATUS_OFFLINE               1ul
+#define OFFLINESTATUS_OFFLINE_FORCED        2ul
+#define OFFLINESTATUS_OFFLINE_SLOW          3ul
+#define OFFLINESTATUS_OFFLINE_ERROR         4ul
+#define OFFLINESTATUS_OFFLINE_ITEM_VERSION_CONFLICT 5ul
+#define OFFLINESTATUS_OFFLINE_SUSPENDED     6ul
+
+//  Name:     System.OriginalFileName -- PKEY_OriginalFileName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSFMTID_VERSION) 0CEF7D53-FA64-11D1-A203-0000F81FEDEE, 6
+//  
+//  
+DEFINE_PROPERTYKEY(PKEY_OriginalFileName, 0x0CEF7D53, 0xFA64, 0x11D1, 0xA2, 0x03, 0x00, 0x00, 0xF8, 0x1F, 0xED, 0xEE, 6);
+
+//  Name:     System.ParentalRating -- PKEY_ParentalRating
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 21 (PIDMSI_PARENTAL_RATING)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_ParentalRating, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 21);
+
+//  Name:     System.ParentalRatingReason -- PKEY_ParentalRatingReason
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 10984E0A-F9F2-4321-B7EF-BAF195AF4319, 100
+DEFINE_PROPERTYKEY(PKEY_ParentalRatingReason, 0x10984E0A, 0xF9F2, 0x4321, 0xB7, 0xEF, 0xBA, 0xF1, 0x95, 0xAF, 0x43, 0x19, 100);
+
+//  Name:     System.ParentalRatingsOrganization -- PKEY_ParentalRatingsOrganization
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: A7FE0840-1344-46F0-8D37-52ED712A4BF9, 100
+DEFINE_PROPERTYKEY(PKEY_ParentalRatingsOrganization, 0xA7FE0840, 0x1344, 0x46F0, 0x8D, 0x37, 0x52, 0xED, 0x71, 0x2A, 0x4B, 0xF9, 100);
+
+//  Name:     System.ParsingBindContext -- PKEY_ParsingBindContext
+//  Type:     Any -- VT_NULL  Legacy code may treat this as VT_UNKNOWN.
+//  FormatID: DFB9A04D-362F-4CA3-B30B-0254B17B5B84, 100
+//  
+//  used to get the IBindCtx for an item for parsing
+DEFINE_PROPERTYKEY(PKEY_ParsingBindContext, 0xDFB9A04D, 0x362F, 0x4CA3, 0xB3, 0x0B, 0x02, 0x54, 0xB1, 0x7B, 0x5B, 0x84, 100);
+
+//  Name:     System.ParsingName -- PKEY_ParsingName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 24
+//  
+//  The shell namespace name of an item relative to a parent folder.  This name may be passed to 
+//  IShellFolder::ParseDisplayName() of the parent shell folder.
+DEFINE_PROPERTYKEY(PKEY_ParsingName, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 24);
+
+//  Name:     System.ParsingPath -- PKEY_ParsingPath
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 30
+//  
+//  This is the shell namespace path to the item.  This path may be passed to 
+//  SHParseDisplayName to parse the path to the correct shell folder.
+//  
+//  If the item is a file, the value is identical to System.ItemPathDisplay.
+//  
+//  If the item cannot be accessed through the shell namespace, this value is VT_EMPTY.
+DEFINE_PROPERTYKEY(PKEY_ParsingPath, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 30);
+
+//  Name:     System.PerceivedType -- PKEY_PerceivedType
+//  Type:     Int32 -- VT_I4
+//  FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 9
+//
+//  The perceived type of a shell item, based upon its canonical type.
+DEFINE_PROPERTYKEY(PKEY_PerceivedType, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 9);
+
+// For the enumerated values of PKEY_PerceivedType, see the PERCEIVED_TYPE_* values in shtypes.idl.
+
+//  Name:     System.PercentFull -- PKEY_PercentFull
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_Volume) 9B174B35-40FF-11D2-A27E-00C04FC30871, 5  (Filesystem Volume Properties)
+//
+//  The amount filled as a percentage, multiplied by 100 (ie, the valid range is 0 through 100).
+DEFINE_PROPERTYKEY(PKEY_PercentFull, 0x9B174B35, 0x40FF, 0x11D2, 0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71, 5);
+
+//  Name:     System.Priority -- PKEY_Priority
+//  Type:     UInt16 -- VT_UI2
+//  FormatID: 9C1FCF74-2D97-41BA-B4AE-CB2E3661A6E4, 5
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Priority, 0x9C1FCF74, 0x2D97, 0x41BA, 0xB4, 0xAE, 0xCB, 0x2E, 0x36, 0x61, 0xA6, 0xE4, 5);
+
+// Possible discrete values for PKEY_Priority are:
+#define PRIORITY_PROP_LOW                   0u
+#define PRIORITY_PROP_NORMAL                1u
+#define PRIORITY_PROP_HIGH                  2u
+
+//  Name:     System.PriorityText -- PKEY_PriorityText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: D98BE98B-B86B-4095-BF52-9D23B2E0A752, 100
+//  
+//  This is the user-friendly form of System.Priority.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_PriorityText, 0xD98BE98B, 0xB86B, 0x4095, 0xBF, 0x52, 0x9D, 0x23, 0xB2, 0xE0, 0xA7, 0x52, 100);
+
+//  Name:     System.Project -- PKEY_Project
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 39A7F922-477C-48DE-8BC8-B28441E342E3, 100
+DEFINE_PROPERTYKEY(PKEY_Project, 0x39A7F922, 0x477C, 0x48DE, 0x8B, 0xC8, 0xB2, 0x84, 0x41, 0xE3, 0x42, 0xE3, 100);
+
+//  Name:     System.ProviderItemID -- PKEY_ProviderItemID
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: F21D9941-81F0-471A-ADEE-4E74B49217ED, 100
+//  
+//  
+DEFINE_PROPERTYKEY(PKEY_ProviderItemID, 0xF21D9941, 0x81F0, 0x471A, 0xAD, 0xEE, 0x4E, 0x74, 0xB4, 0x92, 0x17, 0xED, 100);
+
+//  Name:     System.Rating -- PKEY_Rating
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 9 (PIDMSI_RATING)
+//  
+//  Indicates the users preference rating of an item on a scale of 0-99 (0 = unrated, 1-12 = One Star, 
+//  13-37 = Two Stars, 38-62 = Three Stars, 63-87 = Four Stars, 88-99 = Five Stars).
+DEFINE_PROPERTYKEY(PKEY_Rating, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 9);
+
+// Use the following constants to convert between visual stars and the ratings value:
+#define RATING_UNRATED_MIN                  0ul
+#define RATING_UNRATED_SET                  0ul
+#define RATING_UNRATED_MAX                  0ul
+
+#define RATING_ONE_STAR_MIN                 1ul
+#define RATING_ONE_STAR_SET                 1ul
+#define RATING_ONE_STAR_MAX                 12ul
+
+#define RATING_TWO_STARS_MIN                13ul
+#define RATING_TWO_STARS_SET                25ul
+#define RATING_TWO_STARS_MAX                37ul
+
+#define RATING_THREE_STARS_MIN              38ul
+#define RATING_THREE_STARS_SET              50ul
+#define RATING_THREE_STARS_MAX              62ul
+
+#define RATING_FOUR_STARS_MIN               63ul
+#define RATING_FOUR_STARS_SET               75ul
+#define RATING_FOUR_STARS_MAX               87ul
+
+#define RATING_FIVE_STARS_MIN               88ul
+#define RATING_FIVE_STARS_SET               99ul
+#define RATING_FIVE_STARS_MAX               99ul
+
+
+//  Name:     System.RatingText -- PKEY_RatingText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 90197CA7-FD8F-4E8C-9DA3-B57E1E609295, 100
+//  
+//  This is the user-friendly form of System.Rating.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_RatingText, 0x90197CA7, 0xFD8F, 0x4E8C, 0x9D, 0xA3, 0xB5, 0x7E, 0x1E, 0x60, 0x92, 0x95, 100);
+
+//  Name:     System.Sensitivity -- PKEY_Sensitivity
+//  Type:     UInt16 -- VT_UI2
+//  FormatID: F8D3F6AC-4874-42CB-BE59-AB454B30716A, 100
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Sensitivity, 0xF8D3F6AC, 0x4874, 0x42CB, 0xBE, 0x59, 0xAB, 0x45, 0x4B, 0x30, 0x71, 0x6A, 100);
+
+// Possible discrete values for PKEY_Sensitivity are:
+#define SENSITIVITY_PROP_NORMAL             0u
+#define SENSITIVITY_PROP_PERSONAL           1u
+#define SENSITIVITY_PROP_PRIVATE            2u
+#define SENSITIVITY_PROP_CONFIDENTIAL       3u
+
+//  Name:     System.SensitivityText -- PKEY_SensitivityText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: D0C7F054-3F72-4725-8527-129A577CB269, 100
+//  
+//  This is the user-friendly form of System.Sensitivity.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_SensitivityText, 0xD0C7F054, 0x3F72, 0x4725, 0x85, 0x27, 0x12, 0x9A, 0x57, 0x7C, 0xB2, 0x69, 100);
+
+//  Name:     System.SFGAOFlags -- PKEY_SFGAOFlags
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 25
+//
+//  IShellFolder::GetAttributesOf flags, with SFGAO_PKEYSFGAOMASK attributes masked out.
+DEFINE_PROPERTYKEY(PKEY_SFGAOFlags, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 25);
+
+//  Name:     System.SharedWith -- PKEY_SharedWith
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: EF884C5B-2BFE-41BB-AAE5-76EEDF4F9902, 200
+//
+//  Who is the item shared with?
+DEFINE_PROPERTYKEY(PKEY_SharedWith, 0xEF884C5B, 0x2BFE, 0x41BB, 0xAA, 0xE5, 0x76, 0xEE, 0xDF, 0x4F, 0x99, 0x02, 200);
+
+//  Name:     System.ShareUserRating -- PKEY_ShareUserRating
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 12 (PIDMSI_SHARE_USER_RATING)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_ShareUserRating, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 12);
+
+//  Name:     System.Shell.OmitFromView -- PKEY_Shell_OmitFromView
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: DE35258C-C695-4CBC-B982-38B0AD24CED0, 2
+//  
+//  Set this to a string value of 'True' to omit this item from shell views
+DEFINE_PROPERTYKEY(PKEY_Shell_OmitFromView, 0xDE35258C, 0xC695, 0x4CBC, 0xB9, 0x82, 0x38, 0xB0, 0xAD, 0x24, 0xCE, 0xD0, 2);
+
+//  Name:     System.SimpleRating -- PKEY_SimpleRating
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: A09F084E-AD41-489F-8076-AA5BE3082BCA, 100
+//  
+//  Indicates the users preference rating of an item on a scale of 0-5 (0=unrated, 1=One Star, 2=Two Stars, 3=Three Stars,
+//  4=Four Stars, 5=Five Stars)
+DEFINE_PROPERTYKEY(PKEY_SimpleRating, 0xA09F084E, 0xAD41, 0x489F, 0x80, 0x76, 0xAA, 0x5B, 0xE3, 0x08, 0x2B, 0xCA, 100);
+
+//  Name:     System.Size -- PKEY_Size
+//  Type:     UInt64 -- VT_UI8
+//  FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 12 (PID_STG_SIZE)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Size, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 12);
+
+//  Name:     System.SoftwareUsed -- PKEY_SoftwareUsed
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 305
+//
+//  PropertyTagSoftwareUsed
+DEFINE_PROPERTYKEY(PKEY_SoftwareUsed, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 305);
+
+//  Name:     System.SourceItem -- PKEY_SourceItem
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 668CDFA5-7A1B-4323-AE4B-E527393A1D81, 100
+DEFINE_PROPERTYKEY(PKEY_SourceItem, 0x668CDFA5, 0x7A1B, 0x4323, 0xAE, 0x4B, 0xE5, 0x27, 0x39, 0x3A, 0x1D, 0x81, 100);
+
+//  Name:     System.StartDate -- PKEY_StartDate
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: 48FD6EC8-8A12-4CDF-A03E-4EC5A511EDDE, 100
+DEFINE_PROPERTYKEY(PKEY_StartDate, 0x48FD6EC8, 0x8A12, 0x4CDF, 0xA0, 0x3E, 0x4E, 0xC5, 0xA5, 0x11, 0xED, 0xDE, 100);
+
+//  Name:     System.Status -- PKEY_Status
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_IntSite) 000214A1-0000-0000-C000-000000000046, 9
+DEFINE_PROPERTYKEY(PKEY_Status, 0x000214A1, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 9);
+
+//  Name:     System.Subject -- PKEY_Subject
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 3 (PIDSI_SUBJECT)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Subject, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 3);
+
+//  Name:     System.Thumbnail -- PKEY_Thumbnail
+//  Type:     Clipboard -- VT_CF
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 17 (PIDSI_THUMBNAIL)
+//
+//  A data that represents the thumbnail in VT_CF format.
+DEFINE_PROPERTYKEY(PKEY_Thumbnail, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 17);
+
+//  Name:     System.ThumbnailCacheId -- PKEY_ThumbnailCacheId
+//  Type:     UInt64 -- VT_UI8
+//  FormatID: 446D16B1-8DAD-4870-A748-402EA43D788C, 100
+//  
+//  Unique value that can be used as a key to cache thumbnails. The value changes when the name, volume, or data modified 
+//  of an item changes.
+DEFINE_PROPERTYKEY(PKEY_ThumbnailCacheId, 0x446D16B1, 0x8DAD, 0x4870, 0xA7, 0x48, 0x40, 0x2E, 0xA4, 0x3D, 0x78, 0x8C, 100);
+
+//  Name:     System.ThumbnailStream -- PKEY_ThumbnailStream
+//  Type:     Stream -- VT_STREAM
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 27
+//
+//  Data that represents the thumbnail in VT_STREAM format that GDI+/WindowsCodecs supports (jpg, png, etc).
+DEFINE_PROPERTYKEY(PKEY_ThumbnailStream, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 27);
+
+//  Name:     System.Title -- PKEY_Title
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)  Legacy code may treat this as VT_LPSTR.
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 2 (PIDSI_TITLE)
+//
+//  Title of item.
+DEFINE_PROPERTYKEY(PKEY_Title, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 2);
+
+//  Name:     System.TotalFileSize -- PKEY_TotalFileSize
+//  Type:     UInt64 -- VT_UI8
+//  FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 14
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_TotalFileSize, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 14);
+
+//  Name:     System.Trademarks -- PKEY_Trademarks
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSFMTID_VERSION) 0CEF7D53-FA64-11D1-A203-0000F81FEDEE, 9 (PIDVSI_Trademarks)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Trademarks, 0x0CEF7D53, 0xFA64, 0x11D1, 0xA2, 0x03, 0x00, 0x00, 0xF8, 0x1F, 0xED, 0xEE, 9);
+ 
+//-----------------------------------------------------------------------------
+// Document properties
+
+
+
+//  Name:     System.Document.ByteCount -- PKEY_Document_ByteCount
+//  Type:     Int32 -- VT_I4
+//  FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 4 (PIDDSI_BYTECOUNT)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Document_ByteCount, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 4);
+
+//  Name:     System.Document.CharacterCount -- PKEY_Document_CharacterCount
+//  Type:     Int32 -- VT_I4
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 16 (PIDSI_CHARCOUNT)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Document_CharacterCount, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 16);
+
+//  Name:     System.Document.ClientID -- PKEY_Document_ClientID
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 276D7BB0-5B34-4FB0-AA4B-158ED12A1809, 100
+DEFINE_PROPERTYKEY(PKEY_Document_ClientID, 0x276D7BB0, 0x5B34, 0x4FB0, 0xAA, 0x4B, 0x15, 0x8E, 0xD1, 0x2A, 0x18, 0x09, 100);
+
+//  Name:     System.Document.Contributor -- PKEY_Document_Contributor
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: F334115E-DA1B-4509-9B3D-119504DC7ABB, 100
+DEFINE_PROPERTYKEY(PKEY_Document_Contributor, 0xF334115E, 0xDA1B, 0x4509, 0x9B, 0x3D, 0x11, 0x95, 0x04, 0xDC, 0x7A, 0xBB, 100);
+
+//  Name:     System.Document.DateCreated -- PKEY_Document_DateCreated
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 12 (PIDSI_CREATE_DTM)
+//  
+//  This property is stored in the document, not obtained from the file system.
+DEFINE_PROPERTYKEY(PKEY_Document_DateCreated, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 12);
+
+//  Name:     System.Document.DatePrinted -- PKEY_Document_DatePrinted
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 11 (PIDSI_LASTPRINTED)
+//
+//  Legacy name: "DocLastPrinted".
+DEFINE_PROPERTYKEY(PKEY_Document_DatePrinted, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 11);
+
+//  Name:     System.Document.DateSaved -- PKEY_Document_DateSaved
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 13 (PIDSI_LASTSAVE_DTM)
+//
+//  Legacy name: "DocLastSavedTm".
+DEFINE_PROPERTYKEY(PKEY_Document_DateSaved, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 13);
+
+//  Name:     System.Document.Division -- PKEY_Document_Division
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 1E005EE6-BF27-428B-B01C-79676ACD2870, 100
+DEFINE_PROPERTYKEY(PKEY_Document_Division, 0x1E005EE6, 0xBF27, 0x428B, 0xB0, 0x1C, 0x79, 0x67, 0x6A, 0xCD, 0x28, 0x70, 100);
+
+//  Name:     System.Document.DocumentID -- PKEY_Document_DocumentID
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: E08805C8-E395-40DF-80D2-54F0D6C43154, 100
+DEFINE_PROPERTYKEY(PKEY_Document_DocumentID, 0xE08805C8, 0xE395, 0x40DF, 0x80, 0xD2, 0x54, 0xF0, 0xD6, 0xC4, 0x31, 0x54, 100);
+
+//  Name:     System.Document.HiddenSlideCount -- PKEY_Document_HiddenSlideCount
+//  Type:     Int32 -- VT_I4
+//  FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 9 (PIDDSI_HIDDENCOUNT)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Document_HiddenSlideCount, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 9);
+
+//  Name:     System.Document.LastAuthor -- PKEY_Document_LastAuthor
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 8 (PIDSI_LASTAUTHOR)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Document_LastAuthor, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 8);
+
+//  Name:     System.Document.LineCount -- PKEY_Document_LineCount
+//  Type:     Int32 -- VT_I4
+//  FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 5 (PIDDSI_LINECOUNT)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Document_LineCount, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 5);
+
+//  Name:     System.Document.Manager -- PKEY_Document_Manager
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 14 (PIDDSI_MANAGER)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Document_Manager, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 14);
+
+//  Name:     System.Document.MultimediaClipCount -- PKEY_Document_MultimediaClipCount
+//  Type:     Int32 -- VT_I4
+//  FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 10 (PIDDSI_MMCLIPCOUNT)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Document_MultimediaClipCount, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 10);
+
+//  Name:     System.Document.NoteCount -- PKEY_Document_NoteCount
+//  Type:     Int32 -- VT_I4
+//  FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 8 (PIDDSI_NOTECOUNT)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Document_NoteCount, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 8);
+
+//  Name:     System.Document.PageCount -- PKEY_Document_PageCount
+//  Type:     Int32 -- VT_I4
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 14 (PIDSI_PAGECOUNT)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Document_PageCount, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 14);
+
+//  Name:     System.Document.ParagraphCount -- PKEY_Document_ParagraphCount
+//  Type:     Int32 -- VT_I4
+//  FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 6 (PIDDSI_PARCOUNT)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Document_ParagraphCount, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 6);
+
+//  Name:     System.Document.PresentationFormat -- PKEY_Document_PresentationFormat
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 3 (PIDDSI_PRESFORMAT)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Document_PresentationFormat, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 3);
+
+//  Name:     System.Document.RevisionNumber -- PKEY_Document_RevisionNumber
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 9 (PIDSI_REVNUMBER)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Document_RevisionNumber, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 9);
+
+//  Name:     System.Document.Security -- PKEY_Document_Security
+//  Type:     Int32 -- VT_I4
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 19
+//
+//  Access control information, from SummaryInfo propset
+DEFINE_PROPERTYKEY(PKEY_Document_Security, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 19);
+
+//  Name:     System.Document.SlideCount -- PKEY_Document_SlideCount
+//  Type:     Int32 -- VT_I4
+//  FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 7 (PIDDSI_SLIDECOUNT)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Document_SlideCount, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 7);
+
+//  Name:     System.Document.Template -- PKEY_Document_Template
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 7 (PIDSI_TEMPLATE)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Document_Template, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 7);
+
+//  Name:     System.Document.TotalEditingTime -- PKEY_Document_TotalEditingTime
+//  Type:     UInt64 -- VT_UI8
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 10 (PIDSI_EDITTIME)
+//
+//  100ns units, not milliseconds. VT_FILETIME for IPropertySetStorage handlers (legacy)
+DEFINE_PROPERTYKEY(PKEY_Document_TotalEditingTime, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 10);
+
+//  Name:     System.Document.Version -- PKEY_Document_Version
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_DocumentSummaryInformation) D5CDD502-2E9C-101B-9397-08002B2CF9AE, 29
+DEFINE_PROPERTYKEY(PKEY_Document_Version, 0xD5CDD502, 0x2E9C, 0x101B, 0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE, 29);
+
+//  Name:     System.Document.WordCount -- PKEY_Document_WordCount
+//  Type:     Int32 -- VT_I4
+//  FormatID: (FMTID_SummaryInformation) F29F85E0-4FF9-1068-AB91-08002B27B3D9, 15 (PIDSI_WORDCOUNT)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Document_WordCount, 0xF29F85E0, 0x4FF9, 0x1068, 0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9, 15);
+
+ 
+ 
+//-----------------------------------------------------------------------------
+// DRM properties
+
+//  Name:     System.DRM.DatePlayExpires -- PKEY_DRM_DatePlayExpires
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: (FMTID_DRM) AEAC19E4-89AE-4508-B9B7-BB867ABEE2ED, 6 (PIDDRSI_PLAYEXPIRES)
+//
+//  Indicates when play expires for digital rights management.
+DEFINE_PROPERTYKEY(PKEY_DRM_DatePlayExpires, 0xAEAC19E4, 0x89AE, 0x4508, 0xB9, 0xB7, 0xBB, 0x86, 0x7A, 0xBE, 0xE2, 0xED, 6);
+
+//  Name:     System.DRM.DatePlayStarts -- PKEY_DRM_DatePlayStarts
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: (FMTID_DRM) AEAC19E4-89AE-4508-B9B7-BB867ABEE2ED, 5 (PIDDRSI_PLAYSTARTS)
+//
+//  Indicates when play starts for digital rights management.
+DEFINE_PROPERTYKEY(PKEY_DRM_DatePlayStarts, 0xAEAC19E4, 0x89AE, 0x4508, 0xB9, 0xB7, 0xBB, 0x86, 0x7A, 0xBE, 0xE2, 0xED, 5);
+
+//  Name:     System.DRM.Description -- PKEY_DRM_Description
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_DRM) AEAC19E4-89AE-4508-B9B7-BB867ABEE2ED, 3 (PIDDRSI_DESCRIPTION)
+//
+//  Displays the description for digital rights management.
+DEFINE_PROPERTYKEY(PKEY_DRM_Description, 0xAEAC19E4, 0x89AE, 0x4508, 0xB9, 0xB7, 0xBB, 0x86, 0x7A, 0xBE, 0xE2, 0xED, 3);
+
+//  Name:     System.DRM.IsProtected -- PKEY_DRM_IsProtected
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: (FMTID_DRM) AEAC19E4-89AE-4508-B9B7-BB867ABEE2ED, 2 (PIDDRSI_PROTECTED)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_DRM_IsProtected, 0xAEAC19E4, 0x89AE, 0x4508, 0xB9, 0xB7, 0xBB, 0x86, 0x7A, 0xBE, 0xE2, 0xED, 2);
+
+//  Name:     System.DRM.PlayCount -- PKEY_DRM_PlayCount
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_DRM) AEAC19E4-89AE-4508-B9B7-BB867ABEE2ED, 4 (PIDDRSI_PLAYCOUNT)
+//
+//  Indicates the play count for digital rights management.
+DEFINE_PROPERTYKEY(PKEY_DRM_PlayCount, 0xAEAC19E4, 0x89AE, 0x4508, 0xB9, 0xB7, 0xBB, 0x86, 0x7A, 0xBE, 0xE2, 0xED, 4);
+ 
+//-----------------------------------------------------------------------------
+// GPS properties
+
+//  Name:     System.GPS.Altitude -- PKEY_GPS_Altitude
+//  Type:     Double -- VT_R8
+//  FormatID: 827EDB4F-5B73-44A7-891D-FDFFABEA35CA, 100
+//  
+//  Indicates the altitude based on the reference in PKEY_GPS_AltitudeRef.  Calculated from PKEY_GPS_AltitudeNumerator and 
+//  PKEY_GPS_AltitudeDenominator
+DEFINE_PROPERTYKEY(PKEY_GPS_Altitude, 0x827EDB4F, 0x5B73, 0x44A7, 0x89, 0x1D, 0xFD, 0xFF, 0xAB, 0xEA, 0x35, 0xCA, 100);
+
+//  Name:     System.GPS.AltitudeDenominator -- PKEY_GPS_AltitudeDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 78342DCB-E358-4145-AE9A-6BFE4E0F9F51, 100
+//
+//  Denominator of PKEY_GPS_Altitude
+DEFINE_PROPERTYKEY(PKEY_GPS_AltitudeDenominator, 0x78342DCB, 0xE358, 0x4145, 0xAE, 0x9A, 0x6B, 0xFE, 0x4E, 0x0F, 0x9F, 0x51, 100);
+
+//  Name:     System.GPS.AltitudeNumerator -- PKEY_GPS_AltitudeNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 2DAD1EB7-816D-40D3-9EC3-C9773BE2AADE, 100
+//
+//  Numerator of PKEY_GPS_Altitude
+DEFINE_PROPERTYKEY(PKEY_GPS_AltitudeNumerator, 0x2DAD1EB7, 0x816D, 0x40D3, 0x9E, 0xC3, 0xC9, 0x77, 0x3B, 0xE2, 0xAA, 0xDE, 100);
+
+//  Name:     System.GPS.AltitudeRef -- PKEY_GPS_AltitudeRef
+//  Type:     Byte -- VT_UI1
+//  FormatID: 46AC629D-75EA-4515-867F-6DC4321C5844, 100
+//
+//  Indicates the reference for the altitude property. (eg: above sea level, below sea level, absolute value)
+DEFINE_PROPERTYKEY(PKEY_GPS_AltitudeRef, 0x46AC629D, 0x75EA, 0x4515, 0x86, 0x7F, 0x6D, 0xC4, 0x32, 0x1C, 0x58, 0x44, 100);
+
+//  Name:     System.GPS.AreaInformation -- PKEY_GPS_AreaInformation
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 972E333E-AC7E-49F1-8ADF-A70D07A9BCAB, 100
+//
+//  Represents the name of the GPS area
+DEFINE_PROPERTYKEY(PKEY_GPS_AreaInformation, 0x972E333E, 0xAC7E, 0x49F1, 0x8A, 0xDF, 0xA7, 0x0D, 0x07, 0xA9, 0xBC, 0xAB, 100);
+
+//  Name:     System.GPS.Date -- PKEY_GPS_Date
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: 3602C812-0F3B-45F0-85AD-603468D69423, 100
+//
+//  Date and time of the GPS record
+DEFINE_PROPERTYKEY(PKEY_GPS_Date, 0x3602C812, 0x0F3B, 0x45F0, 0x85, 0xAD, 0x60, 0x34, 0x68, 0xD6, 0x94, 0x23, 100);
+
+//  Name:     System.GPS.DestBearing -- PKEY_GPS_DestBearing
+//  Type:     Double -- VT_R8
+//  FormatID: C66D4B3C-E888-47CC-B99F-9DCA3EE34DEA, 100
+//  
+//  Indicates the bearing to the destination point.  Calculated from PKEY_GPS_DestBearingNumerator and 
+//  PKEY_GPS_DestBearingDenominator.
+DEFINE_PROPERTYKEY(PKEY_GPS_DestBearing, 0xC66D4B3C, 0xE888, 0x47CC, 0xB9, 0x9F, 0x9D, 0xCA, 0x3E, 0xE3, 0x4D, 0xEA, 100);
+
+//  Name:     System.GPS.DestBearingDenominator -- PKEY_GPS_DestBearingDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 7ABCF4F8-7C3F-4988-AC91-8D2C2E97ECA5, 100
+//
+//  Denominator of PKEY_GPS_DestBearing
+DEFINE_PROPERTYKEY(PKEY_GPS_DestBearingDenominator, 0x7ABCF4F8, 0x7C3F, 0x4988, 0xAC, 0x91, 0x8D, 0x2C, 0x2E, 0x97, 0xEC, 0xA5, 100);
+
+//  Name:     System.GPS.DestBearingNumerator -- PKEY_GPS_DestBearingNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: BA3B1DA9-86EE-4B5D-A2A4-A271A429F0CF, 100
+//
+//  Numerator of PKEY_GPS_DestBearing
+DEFINE_PROPERTYKEY(PKEY_GPS_DestBearingNumerator, 0xBA3B1DA9, 0x86EE, 0x4B5D, 0xA2, 0xA4, 0xA2, 0x71, 0xA4, 0x29, 0xF0, 0xCF, 100);
+
+//  Name:     System.GPS.DestBearingRef -- PKEY_GPS_DestBearingRef
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 9AB84393-2A0F-4B75-BB22-7279786977CB, 100
+//
+//  Indicates the reference used for the giving the bearing to the destination point.  (eg: true direction, magnetic direction)
+DEFINE_PROPERTYKEY(PKEY_GPS_DestBearingRef, 0x9AB84393, 0x2A0F, 0x4B75, 0xBB, 0x22, 0x72, 0x79, 0x78, 0x69, 0x77, 0xCB, 100);
+
+//  Name:     System.GPS.DestDistance -- PKEY_GPS_DestDistance
+//  Type:     Double -- VT_R8
+//  FormatID: A93EAE04-6804-4F24-AC81-09B266452118, 100
+//  
+//  Indicates the distance to the destination point.  Calculated from PKEY_GPS_DestDistanceNumerator and 
+//  PKEY_GPS_DestDistanceDenominator.
+DEFINE_PROPERTYKEY(PKEY_GPS_DestDistance, 0xA93EAE04, 0x6804, 0x4F24, 0xAC, 0x81, 0x09, 0xB2, 0x66, 0x45, 0x21, 0x18, 100);
+
+//  Name:     System.GPS.DestDistanceDenominator -- PKEY_GPS_DestDistanceDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 9BC2C99B-AC71-4127-9D1C-2596D0D7DCB7, 100
+//
+//  Denominator of PKEY_GPS_DestDistance
+DEFINE_PROPERTYKEY(PKEY_GPS_DestDistanceDenominator, 0x9BC2C99B, 0xAC71, 0x4127, 0x9D, 0x1C, 0x25, 0x96, 0xD0, 0xD7, 0xDC, 0xB7, 100);
+
+//  Name:     System.GPS.DestDistanceNumerator -- PKEY_GPS_DestDistanceNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 2BDA47DA-08C6-4FE1-80BC-A72FC517C5D0, 100
+//
+//  Numerator of PKEY_GPS_DestDistance
+DEFINE_PROPERTYKEY(PKEY_GPS_DestDistanceNumerator, 0x2BDA47DA, 0x08C6, 0x4FE1, 0x80, 0xBC, 0xA7, 0x2F, 0xC5, 0x17, 0xC5, 0xD0, 100);
+
+//  Name:     System.GPS.DestDistanceRef -- PKEY_GPS_DestDistanceRef
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: ED4DF2D3-8695-450B-856F-F5C1C53ACB66, 100
+//
+//  Indicates the unit used to express the distance to the destination.  (eg: kilometers, miles, knots)
+DEFINE_PROPERTYKEY(PKEY_GPS_DestDistanceRef, 0xED4DF2D3, 0x8695, 0x450B, 0x85, 0x6F, 0xF5, 0xC1, 0xC5, 0x3A, 0xCB, 0x66, 100);
+
+//  Name:     System.GPS.DestLatitude -- PKEY_GPS_DestLatitude
+//  Type:     Multivalue Double -- VT_VECTOR | VT_R8  (For variants: VT_ARRAY | VT_R8)
+//  FormatID: 9D1D7CC5-5C39-451C-86B3-928E2D18CC47, 100
+//  
+//  Indicates the latitude of the destination point.  This is an array of three values.  Index 0 is the degrees, index 1 
+//  is the minutes, index 2 is the seconds.  Each is calculated from the values in PKEY_GPS_DestLatitudeNumerator and 
+//  PKEY_GPS_DestLatitudeDenominator.
+DEFINE_PROPERTYKEY(PKEY_GPS_DestLatitude, 0x9D1D7CC5, 0x5C39, 0x451C, 0x86, 0xB3, 0x92, 0x8E, 0x2D, 0x18, 0xCC, 0x47, 100);
+
+//  Name:     System.GPS.DestLatitudeDenominator -- PKEY_GPS_DestLatitudeDenominator
+//  Type:     Multivalue UInt32 -- VT_VECTOR | VT_UI4  (For variants: VT_ARRAY | VT_UI4)
+//  FormatID: 3A372292-7FCA-49A7-99D5-E47BB2D4E7AB, 100
+//
+//  Denominator of PKEY_GPS_DestLatitude
+DEFINE_PROPERTYKEY(PKEY_GPS_DestLatitudeDenominator, 0x3A372292, 0x7FCA, 0x49A7, 0x99, 0xD5, 0xE4, 0x7B, 0xB2, 0xD4, 0xE7, 0xAB, 100);
+
+//  Name:     System.GPS.DestLatitudeNumerator -- PKEY_GPS_DestLatitudeNumerator
+//  Type:     Multivalue UInt32 -- VT_VECTOR | VT_UI4  (For variants: VT_ARRAY | VT_UI4)
+//  FormatID: ECF4B6F6-D5A6-433C-BB92-4076650FC890, 100
+//
+//  Numerator of PKEY_GPS_DestLatitude
+DEFINE_PROPERTYKEY(PKEY_GPS_DestLatitudeNumerator, 0xECF4B6F6, 0xD5A6, 0x433C, 0xBB, 0x92, 0x40, 0x76, 0x65, 0x0F, 0xC8, 0x90, 100);
+
+//  Name:     System.GPS.DestLatitudeRef -- PKEY_GPS_DestLatitudeRef
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: CEA820B9-CE61-4885-A128-005D9087C192, 100
+//
+//  Indicates whether the latitude destination point is north or south latitude
+DEFINE_PROPERTYKEY(PKEY_GPS_DestLatitudeRef, 0xCEA820B9, 0xCE61, 0x4885, 0xA1, 0x28, 0x00, 0x5D, 0x90, 0x87, 0xC1, 0x92, 100);
+
+//  Name:     System.GPS.DestLongitude -- PKEY_GPS_DestLongitude
+//  Type:     Multivalue Double -- VT_VECTOR | VT_R8  (For variants: VT_ARRAY | VT_R8)
+//  FormatID: 47A96261-CB4C-4807-8AD3-40B9D9DBC6BC, 100
+//  
+//  Indicates the latitude of the destination point.  This is an array of three values.  Index 0 is the degrees, index 1 
+//  is the minutes, index 2 is the seconds.  Each is calculated from the values in PKEY_GPS_DestLongitudeNumerator and 
+//  PKEY_GPS_DestLongitudeDenominator.
+DEFINE_PROPERTYKEY(PKEY_GPS_DestLongitude, 0x47A96261, 0xCB4C, 0x4807, 0x8A, 0xD3, 0x40, 0xB9, 0xD9, 0xDB, 0xC6, 0xBC, 100);
+
+//  Name:     System.GPS.DestLongitudeDenominator -- PKEY_GPS_DestLongitudeDenominator
+//  Type:     Multivalue UInt32 -- VT_VECTOR | VT_UI4  (For variants: VT_ARRAY | VT_UI4)
+//  FormatID: 425D69E5-48AD-4900-8D80-6EB6B8D0AC86, 100
+//
+//  Denominator of PKEY_GPS_DestLongitude
+DEFINE_PROPERTYKEY(PKEY_GPS_DestLongitudeDenominator, 0x425D69E5, 0x48AD, 0x4900, 0x8D, 0x80, 0x6E, 0xB6, 0xB8, 0xD0, 0xAC, 0x86, 100);
+
+//  Name:     System.GPS.DestLongitudeNumerator -- PKEY_GPS_DestLongitudeNumerator
+//  Type:     Multivalue UInt32 -- VT_VECTOR | VT_UI4  (For variants: VT_ARRAY | VT_UI4)
+//  FormatID: A3250282-FB6D-48D5-9A89-DBCACE75CCCF, 100
+//
+//  Numerator of PKEY_GPS_DestLongitude
+DEFINE_PROPERTYKEY(PKEY_GPS_DestLongitudeNumerator, 0xA3250282, 0xFB6D, 0x48D5, 0x9A, 0x89, 0xDB, 0xCA, 0xCE, 0x75, 0xCC, 0xCF, 100);
+
+//  Name:     System.GPS.DestLongitudeRef -- PKEY_GPS_DestLongitudeRef
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 182C1EA6-7C1C-4083-AB4B-AC6C9F4ED128, 100
+//
+//  Indicates whether the longitude destination point is east or west longitude
+DEFINE_PROPERTYKEY(PKEY_GPS_DestLongitudeRef, 0x182C1EA6, 0x7C1C, 0x4083, 0xAB, 0x4B, 0xAC, 0x6C, 0x9F, 0x4E, 0xD1, 0x28, 100);
+
+//  Name:     System.GPS.Differential -- PKEY_GPS_Differential
+//  Type:     UInt16 -- VT_UI2
+//  FormatID: AAF4EE25-BD3B-4DD7-BFC4-47F77BB00F6D, 100
+//
+//  Indicates whether differential correction was applied to the GPS receiver
+DEFINE_PROPERTYKEY(PKEY_GPS_Differential, 0xAAF4EE25, 0xBD3B, 0x4DD7, 0xBF, 0xC4, 0x47, 0xF7, 0x7B, 0xB0, 0x0F, 0x6D, 100);
+
+//  Name:     System.GPS.DOP -- PKEY_GPS_DOP
+//  Type:     Double -- VT_R8
+//  FormatID: 0CF8FB02-1837-42F1-A697-A7017AA289B9, 100
+//
+//  Indicates the GPS DOP (data degree of precision).  Calculated from PKEY_GPS_DOPNumerator and PKEY_GPS_DOPDenominator
+DEFINE_PROPERTYKEY(PKEY_GPS_DOP, 0x0CF8FB02, 0x1837, 0x42F1, 0xA6, 0x97, 0xA7, 0x01, 0x7A, 0xA2, 0x89, 0xB9, 100);
+
+//  Name:     System.GPS.DOPDenominator -- PKEY_GPS_DOPDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: A0BE94C5-50BA-487B-BD35-0654BE8881ED, 100
+//
+//  Denominator of PKEY_GPS_DOP
+DEFINE_PROPERTYKEY(PKEY_GPS_DOPDenominator, 0xA0BE94C5, 0x50BA, 0x487B, 0xBD, 0x35, 0x06, 0x54, 0xBE, 0x88, 0x81, 0xED, 100);
+
+//  Name:     System.GPS.DOPNumerator -- PKEY_GPS_DOPNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 47166B16-364F-4AA0-9F31-E2AB3DF449C3, 100
+//
+//  Numerator of PKEY_GPS_DOP
+DEFINE_PROPERTYKEY(PKEY_GPS_DOPNumerator, 0x47166B16, 0x364F, 0x4AA0, 0x9F, 0x31, 0xE2, 0xAB, 0x3D, 0xF4, 0x49, 0xC3, 100);
+
+//  Name:     System.GPS.ImgDirection -- PKEY_GPS_ImgDirection
+//  Type:     Double -- VT_R8
+//  FormatID: 16473C91-D017-4ED9-BA4D-B6BAA55DBCF8, 100
+//  
+//  Indicates direction of the image when it was captured.  Calculated from PKEY_GPS_ImgDirectionNumerator and 
+//  PKEY_GPS_ImgDirectionDenominator.
+DEFINE_PROPERTYKEY(PKEY_GPS_ImgDirection, 0x16473C91, 0xD017, 0x4ED9, 0xBA, 0x4D, 0xB6, 0xBA, 0xA5, 0x5D, 0xBC, 0xF8, 100);
+
+//  Name:     System.GPS.ImgDirectionDenominator -- PKEY_GPS_ImgDirectionDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 10B24595-41A2-4E20-93C2-5761C1395F32, 100
+//
+//  Denominator of PKEY_GPS_ImgDirection
+DEFINE_PROPERTYKEY(PKEY_GPS_ImgDirectionDenominator, 0x10B24595, 0x41A2, 0x4E20, 0x93, 0xC2, 0x57, 0x61, 0xC1, 0x39, 0x5F, 0x32, 100);
+
+//  Name:     System.GPS.ImgDirectionNumerator -- PKEY_GPS_ImgDirectionNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: DC5877C7-225F-45F7-BAC7-E81334B6130A, 100
+//
+//  Numerator of PKEY_GPS_ImgDirection
+DEFINE_PROPERTYKEY(PKEY_GPS_ImgDirectionNumerator, 0xDC5877C7, 0x225F, 0x45F7, 0xBA, 0xC7, 0xE8, 0x13, 0x34, 0xB6, 0x13, 0x0A, 100);
+
+//  Name:     System.GPS.ImgDirectionRef -- PKEY_GPS_ImgDirectionRef
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: A4AAA5B7-1AD0-445F-811A-0F8F6E67F6B5, 100
+//
+//  Indicates reference for giving the direction of the image when it was captured.  (eg: true direction, magnetic direction)
+DEFINE_PROPERTYKEY(PKEY_GPS_ImgDirectionRef, 0xA4AAA5B7, 0x1AD0, 0x445F, 0x81, 0x1A, 0x0F, 0x8F, 0x6E, 0x67, 0xF6, 0xB5, 100);
+
+//  Name:     System.GPS.Latitude -- PKEY_GPS_Latitude
+//  Type:     Multivalue Double -- VT_VECTOR | VT_R8  (For variants: VT_ARRAY | VT_R8)
+//  FormatID: 8727CFFF-4868-4EC6-AD5B-81B98521D1AB, 100
+//  
+//  Indicates the latitude.  This is an array of three values.  Index 0 is the degrees, index 1 is the minutes, index 2 
+//  is the seconds.  Each is calculated from the values in PKEY_GPS_LatitudeNumerator and PKEY_GPS_LatitudeDenominator.
+DEFINE_PROPERTYKEY(PKEY_GPS_Latitude, 0x8727CFFF, 0x4868, 0x4EC6, 0xAD, 0x5B, 0x81, 0xB9, 0x85, 0x21, 0xD1, 0xAB, 100);
+
+//  Name:     System.GPS.LatitudeDenominator -- PKEY_GPS_LatitudeDenominator
+//  Type:     Multivalue UInt32 -- VT_VECTOR | VT_UI4  (For variants: VT_ARRAY | VT_UI4)
+//  FormatID: 16E634EE-2BFF-497B-BD8A-4341AD39EEB9, 100
+//
+//  Denominator of PKEY_GPS_Latitude
+DEFINE_PROPERTYKEY(PKEY_GPS_LatitudeDenominator, 0x16E634EE, 0x2BFF, 0x497B, 0xBD, 0x8A, 0x43, 0x41, 0xAD, 0x39, 0xEE, 0xB9, 100);
+
+//  Name:     System.GPS.LatitudeNumerator -- PKEY_GPS_LatitudeNumerator
+//  Type:     Multivalue UInt32 -- VT_VECTOR | VT_UI4  (For variants: VT_ARRAY | VT_UI4)
+//  FormatID: 7DDAAAD1-CCC8-41AE-B750-B2CB8031AEA2, 100
+//
+//  Numerator of PKEY_GPS_Latitude
+DEFINE_PROPERTYKEY(PKEY_GPS_LatitudeNumerator, 0x7DDAAAD1, 0xCCC8, 0x41AE, 0xB7, 0x50, 0xB2, 0xCB, 0x80, 0x31, 0xAE, 0xA2, 100);
+
+//  Name:     System.GPS.LatitudeRef -- PKEY_GPS_LatitudeRef
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 029C0252-5B86-46C7-ACA0-2769FFC8E3D4, 100
+//
+//  Indicates whether latitude is north or south latitude 
+DEFINE_PROPERTYKEY(PKEY_GPS_LatitudeRef, 0x029C0252, 0x5B86, 0x46C7, 0xAC, 0xA0, 0x27, 0x69, 0xFF, 0xC8, 0xE3, 0xD4, 100);
+
+//  Name:     System.GPS.Longitude -- PKEY_GPS_Longitude
+//  Type:     Multivalue Double -- VT_VECTOR | VT_R8  (For variants: VT_ARRAY | VT_R8)
+//  FormatID: C4C4DBB2-B593-466B-BBDA-D03D27D5E43A, 100
+//  
+//  Indicates the longitude.  This is an array of three values.  Index 0 is the degrees, index 1 is the minutes, index 2 
+//  is the seconds.  Each is calculated from the values in PKEY_GPS_LongitudeNumerator and PKEY_GPS_LongitudeDenominator.
+DEFINE_PROPERTYKEY(PKEY_GPS_Longitude, 0xC4C4DBB2, 0xB593, 0x466B, 0xBB, 0xDA, 0xD0, 0x3D, 0x27, 0xD5, 0xE4, 0x3A, 100);
+
+//  Name:     System.GPS.LongitudeDenominator -- PKEY_GPS_LongitudeDenominator
+//  Type:     Multivalue UInt32 -- VT_VECTOR | VT_UI4  (For variants: VT_ARRAY | VT_UI4)
+//  FormatID: BE6E176C-4534-4D2C-ACE5-31DEDAC1606B, 100
+//
+//  Denominator of PKEY_GPS_Longitude
+DEFINE_PROPERTYKEY(PKEY_GPS_LongitudeDenominator, 0xBE6E176C, 0x4534, 0x4D2C, 0xAC, 0xE5, 0x31, 0xDE, 0xDA, 0xC1, 0x60, 0x6B, 100);
+
+//  Name:     System.GPS.LongitudeNumerator -- PKEY_GPS_LongitudeNumerator
+//  Type:     Multivalue UInt32 -- VT_VECTOR | VT_UI4  (For variants: VT_ARRAY | VT_UI4)
+//  FormatID: 02B0F689-A914-4E45-821D-1DDA452ED2C4, 100
+//
+//  Numerator of PKEY_GPS_Longitude
+DEFINE_PROPERTYKEY(PKEY_GPS_LongitudeNumerator, 0x02B0F689, 0xA914, 0x4E45, 0x82, 0x1D, 0x1D, 0xDA, 0x45, 0x2E, 0xD2, 0xC4, 100);
+
+//  Name:     System.GPS.LongitudeRef -- PKEY_GPS_LongitudeRef
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 33DCF22B-28D5-464C-8035-1EE9EFD25278, 100
+//
+//  Indicates whether longitude is east or west longitude
+DEFINE_PROPERTYKEY(PKEY_GPS_LongitudeRef, 0x33DCF22B, 0x28D5, 0x464C, 0x80, 0x35, 0x1E, 0xE9, 0xEF, 0xD2, 0x52, 0x78, 100);
+
+//  Name:     System.GPS.MapDatum -- PKEY_GPS_MapDatum
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 2CA2DAE6-EDDC-407D-BEF1-773942ABFA95, 100
+//
+//  Indicates the geodetic survey data used by the GPS receiver
+DEFINE_PROPERTYKEY(PKEY_GPS_MapDatum, 0x2CA2DAE6, 0xEDDC, 0x407D, 0xBE, 0xF1, 0x77, 0x39, 0x42, 0xAB, 0xFA, 0x95, 100);
+
+//  Name:     System.GPS.MeasureMode -- PKEY_GPS_MeasureMode
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: A015ED5D-AAEA-4D58-8A86-3C586920EA0B, 100
+//
+//  Indicates the GPS measurement mode.  (eg: 2-dimensional, 3-dimensional)
+DEFINE_PROPERTYKEY(PKEY_GPS_MeasureMode, 0xA015ED5D, 0xAAEA, 0x4D58, 0x8A, 0x86, 0x3C, 0x58, 0x69, 0x20, 0xEA, 0x0B, 100);
+
+//  Name:     System.GPS.ProcessingMethod -- PKEY_GPS_ProcessingMethod
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 59D49E61-840F-4AA9-A939-E2099B7F6399, 100
+//
+//  Indicates the name of the method used for location finding
+DEFINE_PROPERTYKEY(PKEY_GPS_ProcessingMethod, 0x59D49E61, 0x840F, 0x4AA9, 0xA9, 0x39, 0xE2, 0x09, 0x9B, 0x7F, 0x63, 0x99, 100);
+
+//  Name:     System.GPS.Satellites -- PKEY_GPS_Satellites
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 467EE575-1F25-4557-AD4E-B8B58B0D9C15, 100
+//
+//  Indicates the GPS satellites used for measurements
+DEFINE_PROPERTYKEY(PKEY_GPS_Satellites, 0x467EE575, 0x1F25, 0x4557, 0xAD, 0x4E, 0xB8, 0xB5, 0x8B, 0x0D, 0x9C, 0x15, 100);
+
+//  Name:     System.GPS.Speed -- PKEY_GPS_Speed
+//  Type:     Double -- VT_R8
+//  FormatID: DA5D0862-6E76-4E1B-BABD-70021BD25494, 100
+//  
+//  Indicates the speed of the GPS receiver movement.  Calculated from PKEY_GPS_SpeedNumerator and 
+//  PKEY_GPS_SpeedDenominator.
+DEFINE_PROPERTYKEY(PKEY_GPS_Speed, 0xDA5D0862, 0x6E76, 0x4E1B, 0xBA, 0xBD, 0x70, 0x02, 0x1B, 0xD2, 0x54, 0x94, 100);
+
+//  Name:     System.GPS.SpeedDenominator -- PKEY_GPS_SpeedDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 7D122D5A-AE5E-4335-8841-D71E7CE72F53, 100
+//
+//  Denominator of PKEY_GPS_Speed
+DEFINE_PROPERTYKEY(PKEY_GPS_SpeedDenominator, 0x7D122D5A, 0xAE5E, 0x4335, 0x88, 0x41, 0xD7, 0x1E, 0x7C, 0xE7, 0x2F, 0x53, 100);
+
+//  Name:     System.GPS.SpeedNumerator -- PKEY_GPS_SpeedNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: ACC9CE3D-C213-4942-8B48-6D0820F21C6D, 100
+//
+//  Numerator of PKEY_GPS_Speed
+DEFINE_PROPERTYKEY(PKEY_GPS_SpeedNumerator, 0xACC9CE3D, 0xC213, 0x4942, 0x8B, 0x48, 0x6D, 0x08, 0x20, 0xF2, 0x1C, 0x6D, 100);
+
+//  Name:     System.GPS.SpeedRef -- PKEY_GPS_SpeedRef
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: ECF7F4C9-544F-4D6D-9D98-8AD79ADAF453, 100
+//  
+//  Indicates the unit used to express the speed of the GPS receiver movement.  (eg: kilometers per hour, 
+//  miles per hour, knots).
+DEFINE_PROPERTYKEY(PKEY_GPS_SpeedRef, 0xECF7F4C9, 0x544F, 0x4D6D, 0x9D, 0x98, 0x8A, 0xD7, 0x9A, 0xDA, 0xF4, 0x53, 100);
+
+//  Name:     System.GPS.Status -- PKEY_GPS_Status
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 125491F4-818F-46B2-91B5-D537753617B2, 100
+//  
+//  Indicates the status of the GPS receiver when the image was recorded.  (eg: measurement in progress, 
+//  measurement interoperability).
+DEFINE_PROPERTYKEY(PKEY_GPS_Status, 0x125491F4, 0x818F, 0x46B2, 0x91, 0xB5, 0xD5, 0x37, 0x75, 0x36, 0x17, 0xB2, 100);
+
+//  Name:     System.GPS.Track -- PKEY_GPS_Track
+//  Type:     Double -- VT_R8
+//  FormatID: 76C09943-7C33-49E3-9E7E-CDBA872CFADA, 100
+//  
+//  Indicates the direction of the GPS receiver movement.  Calculated from PKEY_GPS_TrackNumerator and 
+//  PKEY_GPS_TrackDenominator.
+DEFINE_PROPERTYKEY(PKEY_GPS_Track, 0x76C09943, 0x7C33, 0x49E3, 0x9E, 0x7E, 0xCD, 0xBA, 0x87, 0x2C, 0xFA, 0xDA, 100);
+
+//  Name:     System.GPS.TrackDenominator -- PKEY_GPS_TrackDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: C8D1920C-01F6-40C0-AC86-2F3A4AD00770, 100
+//
+//  Denominator of PKEY_GPS_Track
+DEFINE_PROPERTYKEY(PKEY_GPS_TrackDenominator, 0xC8D1920C, 0x01F6, 0x40C0, 0xAC, 0x86, 0x2F, 0x3A, 0x4A, 0xD0, 0x07, 0x70, 100);
+
+//  Name:     System.GPS.TrackNumerator -- PKEY_GPS_TrackNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 702926F4-44A6-43E1-AE71-45627116893B, 100
+//
+//  Numerator of PKEY_GPS_Track
+DEFINE_PROPERTYKEY(PKEY_GPS_TrackNumerator, 0x702926F4, 0x44A6, 0x43E1, 0xAE, 0x71, 0x45, 0x62, 0x71, 0x16, 0x89, 0x3B, 100);
+
+//  Name:     System.GPS.TrackRef -- PKEY_GPS_TrackRef
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 35DBE6FE-44C3-4400-AAAE-D2C799C407E8, 100
+//
+//  Indicates reference for the direction of the GPS receiver movement.  (eg: true direction, magnetic direction)
+DEFINE_PROPERTYKEY(PKEY_GPS_TrackRef, 0x35DBE6FE, 0x44C3, 0x4400, 0xAA, 0xAE, 0xD2, 0xC7, 0x99, 0xC4, 0x07, 0xE8, 100);
+
+//  Name:     System.GPS.VersionID -- PKEY_GPS_VersionID
+//  Type:     Buffer -- VT_VECTOR | VT_UI1  (For variants: VT_ARRAY | VT_UI1)
+//  FormatID: 22704DA4-C6B2-4A99-8E56-F16DF8C92599, 100
+//
+//  Indicates the version of the GPS information
+DEFINE_PROPERTYKEY(PKEY_GPS_VersionID, 0x22704DA4, 0xC6B2, 0x4A99, 0x8E, 0x56, 0xF1, 0x6D, 0xF8, 0xC9, 0x25, 0x99, 100);
+ 
+//-----------------------------------------------------------------------------
+// Image properties
+
+
+
+//  Name:     System.Image.BitDepth -- PKEY_Image_BitDepth
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (PSGUID_IMAGESUMMARYINFORMATION) 6444048F-4C8B-11D1-8B70-080036B11A03, 7 (PIDISI_BITDEPTH)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Image_BitDepth, 0x6444048F, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 7);
+
+//  Name:     System.Image.ColorSpace -- PKEY_Image_ColorSpace
+//  Type:     UInt16 -- VT_UI2
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 40961
+//
+//  PropertyTagExifColorSpace
+DEFINE_PROPERTYKEY(PKEY_Image_ColorSpace, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 40961);
+
+// Possible discrete values for PKEY_Image_ColorSpace are:
+#define IMAGE_COLORSPACE_SRGB               1u
+#define IMAGE_COLORSPACE_UNCALIBRATED       0xFFFFu
+
+//  Name:     System.Image.CompressedBitsPerPixel -- PKEY_Image_CompressedBitsPerPixel
+//  Type:     Double -- VT_R8
+//  FormatID: 364B6FA9-37AB-482A-BE2B-AE02F60D4318, 100
+//
+//  Calculated from PKEY_Image_CompressedBitsPerPixelNumerator and PKEY_Image_CompressedBitsPerPixelDenominator.
+DEFINE_PROPERTYKEY(PKEY_Image_CompressedBitsPerPixel, 0x364B6FA9, 0x37AB, 0x482A, 0xBE, 0x2B, 0xAE, 0x02, 0xF6, 0x0D, 0x43, 0x18, 100);
+
+//  Name:     System.Image.CompressedBitsPerPixelDenominator -- PKEY_Image_CompressedBitsPerPixelDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 1F8844E1-24AD-4508-9DFD-5326A415CE02, 100
+//
+//  Denominator of PKEY_Image_CompressedBitsPerPixel.
+DEFINE_PROPERTYKEY(PKEY_Image_CompressedBitsPerPixelDenominator, 0x1F8844E1, 0x24AD, 0x4508, 0x9D, 0xFD, 0x53, 0x26, 0xA4, 0x15, 0xCE, 0x02, 100);
+
+//  Name:     System.Image.CompressedBitsPerPixelNumerator -- PKEY_Image_CompressedBitsPerPixelNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: D21A7148-D32C-4624-8900-277210F79C0F, 100
+//
+//  Numerator of PKEY_Image_CompressedBitsPerPixel.
+DEFINE_PROPERTYKEY(PKEY_Image_CompressedBitsPerPixelNumerator, 0xD21A7148, 0xD32C, 0x4624, 0x89, 0x00, 0x27, 0x72, 0x10, 0xF7, 0x9C, 0x0F, 100);
+
+//  Name:     System.Image.Compression -- PKEY_Image_Compression
+//  Type:     UInt16 -- VT_UI2
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 259
+//
+//  Indicates the image compression level.  PropertyTagCompression.
+DEFINE_PROPERTYKEY(PKEY_Image_Compression, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 259);
+
+// Possible discrete values for PKEY_Image_Compression are:
+#define IMAGE_COMPRESSION_UNCOMPRESSED      1u
+#define IMAGE_COMPRESSION_CCITT_T3          2u
+#define IMAGE_COMPRESSION_CCITT_T4          3u
+#define IMAGE_COMPRESSION_CCITT_T6          4u
+#define IMAGE_COMPRESSION_LZW               5u
+#define IMAGE_COMPRESSION_JPEG              6u
+#define IMAGE_COMPRESSION_PACKBITS          32773u
+
+//  Name:     System.Image.CompressionText -- PKEY_Image_CompressionText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 3F08E66F-2F44-4BB9-A682-AC35D2562322, 100
+//  
+//  This is the user-friendly form of System.Image.Compression.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_Image_CompressionText, 0x3F08E66F, 0x2F44, 0x4BB9, 0xA6, 0x82, 0xAC, 0x35, 0xD2, 0x56, 0x23, 0x22, 100);
+
+//  Name:     System.Image.Dimensions -- PKEY_Image_Dimensions
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_IMAGESUMMARYINFORMATION) 6444048F-4C8B-11D1-8B70-080036B11A03, 13 (PIDISI_DIMENSIONS)
+//
+//  Indicates the dimensions of the image.
+DEFINE_PROPERTYKEY(PKEY_Image_Dimensions, 0x6444048F, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 13);
+
+//  Name:     System.Image.HorizontalResolution -- PKEY_Image_HorizontalResolution
+//  Type:     Double -- VT_R8
+//  FormatID: (PSGUID_IMAGESUMMARYINFORMATION) 6444048F-4C8B-11D1-8B70-080036B11A03, 5 (PIDISI_RESOLUTIONX)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Image_HorizontalResolution, 0x6444048F, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 5);
+
+//  Name:     System.Image.HorizontalSize -- PKEY_Image_HorizontalSize
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (PSGUID_IMAGESUMMARYINFORMATION) 6444048F-4C8B-11D1-8B70-080036B11A03, 3 (PIDISI_CX)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Image_HorizontalSize, 0x6444048F, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 3);
+
+//  Name:     System.Image.ImageID -- PKEY_Image_ImageID
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 10DABE05-32AA-4C29-BF1A-63E2D220587F, 100
+DEFINE_PROPERTYKEY(PKEY_Image_ImageID, 0x10DABE05, 0x32AA, 0x4C29, 0xBF, 0x1A, 0x63, 0xE2, 0xD2, 0x20, 0x58, 0x7F, 100);
+
+//  Name:     System.Image.ResolutionUnit -- PKEY_Image_ResolutionUnit
+//  Type:     Int16 -- VT_I2
+//  FormatID: 19B51FA6-1F92-4A5C-AB48-7DF0ABD67444, 100
+DEFINE_PROPERTYKEY(PKEY_Image_ResolutionUnit, 0x19B51FA6, 0x1F92, 0x4A5C, 0xAB, 0x48, 0x7D, 0xF0, 0xAB, 0xD6, 0x74, 0x44, 100);
+
+//  Name:     System.Image.VerticalResolution -- PKEY_Image_VerticalResolution
+//  Type:     Double -- VT_R8
+//  FormatID: (PSGUID_IMAGESUMMARYINFORMATION) 6444048F-4C8B-11D1-8B70-080036B11A03, 6 (PIDISI_RESOLUTIONY)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Image_VerticalResolution, 0x6444048F, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 6);
+
+//  Name:     System.Image.VerticalSize -- PKEY_Image_VerticalSize
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (PSGUID_IMAGESUMMARYINFORMATION) 6444048F-4C8B-11D1-8B70-080036B11A03, 4 (PIDISI_CY)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Image_VerticalSize, 0x6444048F, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 4);
+
+ 
+ 
+//-----------------------------------------------------------------------------
+// Journal properties
+
+//  Name:     System.Journal.Contacts -- PKEY_Journal_Contacts
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: DEA7C82C-1D89-4A66-9427-A4E3DEBABCB1, 100
+DEFINE_PROPERTYKEY(PKEY_Journal_Contacts, 0xDEA7C82C, 0x1D89, 0x4A66, 0x94, 0x27, 0xA4, 0xE3, 0xDE, 0xBA, 0xBC, 0xB1, 100);
+
+//  Name:     System.Journal.EntryType -- PKEY_Journal_EntryType
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 95BEB1FC-326D-4644-B396-CD3ED90E6DDF, 100
+DEFINE_PROPERTYKEY(PKEY_Journal_EntryType, 0x95BEB1FC, 0x326D, 0x4644, 0xB3, 0x96, 0xCD, 0x3E, 0xD9, 0x0E, 0x6D, 0xDF, 100);
+ 
+//-----------------------------------------------------------------------------
+// Link properties
+
+
+
+//  Name:     System.Link.Comment -- PKEY_Link_Comment
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_LINK) B9B4B3FC-2B51-4A42-B5D8-324146AFCF25, 5
+DEFINE_PROPERTYKEY(PKEY_Link_Comment, 0xB9B4B3FC, 0x2B51, 0x4A42, 0xB5, 0xD8, 0x32, 0x41, 0x46, 0xAF, 0xCF, 0x25, 5);
+
+//  Name:     System.Link.DateVisited -- PKEY_Link_DateVisited
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: 5CBF2787-48CF-4208-B90E-EE5E5D420294, 23  (PKEYs relating to URLs.  Used by IE History.)
+DEFINE_PROPERTYKEY(PKEY_Link_DateVisited, 0x5CBF2787, 0x48CF, 0x4208, 0xB9, 0x0E, 0xEE, 0x5E, 0x5D, 0x42, 0x02, 0x94, 23);
+
+//  Name:     System.Link.Description -- PKEY_Link_Description
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 5CBF2787-48CF-4208-B90E-EE5E5D420294, 21  (PKEYs relating to URLs.  Used by IE History.)
+DEFINE_PROPERTYKEY(PKEY_Link_Description, 0x5CBF2787, 0x48CF, 0x4208, 0xB9, 0x0E, 0xEE, 0x5E, 0x5D, 0x42, 0x02, 0x94, 21);
+
+//  Name:     System.Link.Status -- PKEY_Link_Status
+//  Type:     Int32 -- VT_I4
+//  FormatID: (PSGUID_LINK) B9B4B3FC-2B51-4A42-B5D8-324146AFCF25, 3 (PID_LINK_TARGET_TYPE)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Link_Status, 0xB9B4B3FC, 0x2B51, 0x4A42, 0xB5, 0xD8, 0x32, 0x41, 0x46, 0xAF, 0xCF, 0x25, 3);
+
+// Possible discrete values for PKEY_Link_Status are:
+#define LINK_STATUS_RESOLVED                1l
+#define LINK_STATUS_BROKEN                  2l
+
+//  Name:     System.Link.TargetExtension -- PKEY_Link_TargetExtension
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: 7A7D76F4-B630-4BD7-95FF-37CC51A975C9, 2
+//
+//  The file extension of the link target.  See System.File.Extension
+DEFINE_PROPERTYKEY(PKEY_Link_TargetExtension, 0x7A7D76F4, 0xB630, 0x4BD7, 0x95, 0xFF, 0x37, 0xCC, 0x51, 0xA9, 0x75, 0xC9, 2);
+
+//  Name:     System.Link.TargetParsingPath -- PKEY_Link_TargetParsingPath
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_LINK) B9B4B3FC-2B51-4A42-B5D8-324146AFCF25, 2 (PID_LINK_TARGET)
+//  
+//  This is the shell namespace path to the target of the link item.  This path may be passed to 
+//  SHParseDisplayName to parse the path to the correct shell folder.
+//  
+//  If the target item is a file, the value is identical to System.ItemPathDisplay.
+//  
+//  If the target item cannot be accessed through the shell namespace, this value is VT_EMPTY.
+DEFINE_PROPERTYKEY(PKEY_Link_TargetParsingPath, 0xB9B4B3FC, 0x2B51, 0x4A42, 0xB5, 0xD8, 0x32, 0x41, 0x46, 0xAF, 0xCF, 0x25, 2);
+
+//  Name:     System.Link.TargetSFGAOFlags -- PKEY_Link_TargetSFGAOFlags
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (PSGUID_LINK) B9B4B3FC-2B51-4A42-B5D8-324146AFCF25, 8
+//  
+//  IShellFolder::GetAttributesOf flags for the target of a link, with SFGAO_PKEYSFGAOMASK 
+//  attributes masked out.
+DEFINE_PROPERTYKEY(PKEY_Link_TargetSFGAOFlags, 0xB9B4B3FC, 0x2B51, 0x4A42, 0xB5, 0xD8, 0x32, 0x41, 0x46, 0xAF, 0xCF, 0x25, 8);
+ 
+//-----------------------------------------------------------------------------
+// Media properties
+
+
+
+//  Name:     System.Media.AuthorUrl -- PKEY_Media_AuthorUrl
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 32 (PIDMSI_AUTHOR_URL)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_AuthorUrl, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 32);
+
+//  Name:     System.Media.AverageLevel -- PKEY_Media_AverageLevel
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 09EDD5B6-B301-43C5-9990-D00302EFFD46, 100
+DEFINE_PROPERTYKEY(PKEY_Media_AverageLevel, 0x09EDD5B6, 0xB301, 0x43C5, 0x99, 0x90, 0xD0, 0x03, 0x02, 0xEF, 0xFD, 0x46, 100);
+
+//  Name:     System.Media.ClassPrimaryID -- PKEY_Media_ClassPrimaryID
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 13 (PIDMSI_CLASS_PRIMARY_ID)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_ClassPrimaryID, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 13);
+
+//  Name:     System.Media.ClassSecondaryID -- PKEY_Media_ClassSecondaryID
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 14 (PIDMSI_CLASS_SECONDARY_ID)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_ClassSecondaryID, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 14);
+
+//  Name:     System.Media.CollectionGroupID -- PKEY_Media_CollectionGroupID
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 24 (PIDMSI_COLLECTION_GROUP_ID)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_CollectionGroupID, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 24);
+
+//  Name:     System.Media.CollectionID -- PKEY_Media_CollectionID
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 25 (PIDMSI_COLLECTION_ID)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_CollectionID, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 25);
+
+//  Name:     System.Media.ContentDistributor -- PKEY_Media_ContentDistributor
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 18 (PIDMSI_CONTENTDISTRIBUTOR)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_ContentDistributor, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 18);
+
+//  Name:     System.Media.ContentID -- PKEY_Media_ContentID
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 26 (PIDMSI_CONTENT_ID)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_ContentID, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 26);
+
+//  Name:     System.Media.CreatorApplication -- PKEY_Media_CreatorApplication
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 27 (PIDMSI_TOOL_NAME)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_CreatorApplication, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 27);
+
+//  Name:     System.Media.CreatorApplicationVersion -- PKEY_Media_CreatorApplicationVersion
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 28 (PIDMSI_TOOL_VERSION)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_CreatorApplicationVersion, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 28);
+
+//  Name:     System.Media.DateEncoded -- PKEY_Media_DateEncoded
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: 2E4B640D-5019-46D8-8881-55414CC5CAA0, 100
+//
+//  DateTime is in UTC (in the doc, not file system).
+DEFINE_PROPERTYKEY(PKEY_Media_DateEncoded, 0x2E4B640D, 0x5019, 0x46D8, 0x88, 0x81, 0x55, 0x41, 0x4C, 0xC5, 0xCA, 0xA0, 100);
+
+//  Name:     System.Media.DateReleased -- PKEY_Media_DateReleased
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: DE41CC29-6971-4290-B472-F59F2E2F31E2, 100
+DEFINE_PROPERTYKEY(PKEY_Media_DateReleased, 0xDE41CC29, 0x6971, 0x4290, 0xB4, 0x72, 0xF5, 0x9F, 0x2E, 0x2F, 0x31, 0xE2, 100);
+
+//  Name:     System.Media.Duration -- PKEY_Media_Duration
+//  Type:     UInt64 -- VT_UI8
+//  FormatID: (FMTID_AudioSummaryInformation) 64440490-4C8B-11D1-8B70-080036B11A03, 3 (PIDASI_TIMELENGTH)
+//
+//  100ns units, not milliseconds
+DEFINE_PROPERTYKEY(PKEY_Media_Duration, 0x64440490, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 3);
+
+//  Name:     System.Media.DVDID -- PKEY_Media_DVDID
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 15 (PIDMSI_DVDID)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_DVDID, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 15);
+
+//  Name:     System.Media.EncodedBy -- PKEY_Media_EncodedBy
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 36 (PIDMSI_ENCODED_BY)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_EncodedBy, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 36);
+
+//  Name:     System.Media.EncodingSettings -- PKEY_Media_EncodingSettings
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 37 (PIDMSI_ENCODING_SETTINGS)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_EncodingSettings, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 37);
+
+//  Name:     System.Media.FrameCount -- PKEY_Media_FrameCount
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (PSGUID_IMAGESUMMARYINFORMATION) 6444048F-4C8B-11D1-8B70-080036B11A03, 12 (PIDISI_FRAMECOUNT)
+//
+//  Indicates the frame count for the image.
+DEFINE_PROPERTYKEY(PKEY_Media_FrameCount, 0x6444048F, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 12);
+
+//  Name:     System.Media.MCDI -- PKEY_Media_MCDI
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 16 (PIDMSI_MCDI)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_MCDI, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 16);
+
+//  Name:     System.Media.MetadataContentProvider -- PKEY_Media_MetadataContentProvider
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 17 (PIDMSI_PROVIDER)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_MetadataContentProvider, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 17);
+
+//  Name:     System.Media.Producer -- PKEY_Media_Producer
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 22 (PIDMSI_PRODUCER)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_Producer, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 22);
+
+//  Name:     System.Media.PromotionUrl -- PKEY_Media_PromotionUrl
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 33 (PIDMSI_PROMOTION_URL)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_PromotionUrl, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 33);
+
+//  Name:     System.Media.ProtectionType -- PKEY_Media_ProtectionType
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 38
+//  
+//  If media is protected, how is it protected?
+DEFINE_PROPERTYKEY(PKEY_Media_ProtectionType, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 38);
+
+//  Name:     System.Media.ProviderRating -- PKEY_Media_ProviderRating
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 39
+//  
+//  Rating (0 - 99) supplied by metadata provider
+DEFINE_PROPERTYKEY(PKEY_Media_ProviderRating, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 39);
+
+//  Name:     System.Media.ProviderStyle -- PKEY_Media_ProviderStyle
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 40
+//  
+//  Style of music or video, supplied by metadata provider
+DEFINE_PROPERTYKEY(PKEY_Media_ProviderStyle, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 40);
+
+//  Name:     System.Media.Publisher -- PKEY_Media_Publisher
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 30 (PIDMSI_PUBLISHER)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_Publisher, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 30);
+
+//  Name:     System.Media.SubscriptionContentId -- PKEY_Media_SubscriptionContentId
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 9AEBAE7A-9644-487D-A92C-657585ED751A, 100
+DEFINE_PROPERTYKEY(PKEY_Media_SubscriptionContentId, 0x9AEBAE7A, 0x9644, 0x487D, 0xA9, 0x2C, 0x65, 0x75, 0x85, 0xED, 0x75, 0x1A, 100);
+
+//  Name:     System.Media.SubTitle -- PKEY_Media_SubTitle
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 38 (PIDSI_MUSIC_SUB_TITLE)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_SubTitle, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 38);
+
+//  Name:     System.Media.UniqueFileIdentifier -- PKEY_Media_UniqueFileIdentifier
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 35 (PIDMSI_UNIQUE_FILE_IDENTIFIER)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_UniqueFileIdentifier, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 35);
+
+//  Name:     System.Media.UserNoAutoInfo -- PKEY_Media_UserNoAutoInfo
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 41
+//  
+//  If true, do NOT alter this file's metadata. Set by user.
+DEFINE_PROPERTYKEY(PKEY_Media_UserNoAutoInfo, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 41);
+
+//  Name:     System.Media.UserWebUrl -- PKEY_Media_UserWebUrl
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 34 (PIDMSI_USER_WEB_URL)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_UserWebUrl, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 34);
+
+//  Name:     System.Media.Writer -- PKEY_Media_Writer
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 23 (PIDMSI_WRITER)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_Writer, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 23);
+
+//  Name:     System.Media.Year -- PKEY_Media_Year
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 5 (PIDSI_MUSIC_YEAR)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Media_Year, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 5);
+ 
+//-----------------------------------------------------------------------------
+// Message properties
+
+
+
+//  Name:     System.Message.AttachmentContents -- PKEY_Message_AttachmentContents
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 3143BF7C-80A8-4854-8880-E2E40189BDD0, 100
+DEFINE_PROPERTYKEY(PKEY_Message_AttachmentContents, 0x3143BF7C, 0x80A8, 0x4854, 0x88, 0x80, 0xE2, 0xE4, 0x01, 0x89, 0xBD, 0xD0, 100);
+
+//  Name:     System.Message.AttachmentNames -- PKEY_Message_AttachmentNames
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 21
+//
+//  The names of the attachments in a message
+DEFINE_PROPERTYKEY(PKEY_Message_AttachmentNames, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 21);
+
+//  Name:     System.Message.BccAddress -- PKEY_Message_BccAddress
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 2
+//
+//  Addresses in Bcc: field
+DEFINE_PROPERTYKEY(PKEY_Message_BccAddress, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 2);
+
+//  Name:     System.Message.BccName -- PKEY_Message_BccName
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 3
+//
+//  person names in Bcc: field
+DEFINE_PROPERTYKEY(PKEY_Message_BccName, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 3);
+
+//  Name:     System.Message.CcAddress -- PKEY_Message_CcAddress
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 4
+//
+//  Addresses in Cc: field
+DEFINE_PROPERTYKEY(PKEY_Message_CcAddress, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 4);
+
+//  Name:     System.Message.CcName -- PKEY_Message_CcName
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 5
+//
+//  person names in Cc: field
+DEFINE_PROPERTYKEY(PKEY_Message_CcName, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 5);
+
+//  Name:     System.Message.ConversationID -- PKEY_Message_ConversationID
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: DC8F80BD-AF1E-4289-85B6-3DFC1B493992, 100
+DEFINE_PROPERTYKEY(PKEY_Message_ConversationID, 0xDC8F80BD, 0xAF1E, 0x4289, 0x85, 0xB6, 0x3D, 0xFC, 0x1B, 0x49, 0x39, 0x92, 100);
+
+//  Name:     System.Message.ConversationIndex -- PKEY_Message_ConversationIndex
+//  Type:     Buffer -- VT_VECTOR | VT_UI1  (For variants: VT_ARRAY | VT_UI1)
+//  FormatID: DC8F80BD-AF1E-4289-85B6-3DFC1B493992, 101
+//  
+//  
+DEFINE_PROPERTYKEY(PKEY_Message_ConversationIndex, 0xDC8F80BD, 0xAF1E, 0x4289, 0x85, 0xB6, 0x3D, 0xFC, 0x1B, 0x49, 0x39, 0x92, 101);
+
+//  Name:     System.Message.DateReceived -- PKEY_Message_DateReceived
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 20
+//
+//  Date and Time communication was received
+DEFINE_PROPERTYKEY(PKEY_Message_DateReceived, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 20);
+
+//  Name:     System.Message.DateSent -- PKEY_Message_DateSent
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 19
+//
+//  Date and Time communication was sent
+DEFINE_PROPERTYKEY(PKEY_Message_DateSent, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 19);
+
+//  Name:     System.Message.FromAddress -- PKEY_Message_FromAddress
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 13
+DEFINE_PROPERTYKEY(PKEY_Message_FromAddress, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 13);
+
+//  Name:     System.Message.FromName -- PKEY_Message_FromName
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 14
+//
+//  Address in from field as person name
+DEFINE_PROPERTYKEY(PKEY_Message_FromName, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 14);
+
+//  Name:     System.Message.HasAttachments -- PKEY_Message_HasAttachments
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: 9C1FCF74-2D97-41BA-B4AE-CB2E3661A6E4, 8
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Message_HasAttachments, 0x9C1FCF74, 0x2D97, 0x41BA, 0xB4, 0xAE, 0xCB, 0x2E, 0x36, 0x61, 0xA6, 0xE4, 8);
+
+//  Name:     System.Message.IsFwdOrReply -- PKEY_Message_IsFwdOrReply
+//  Type:     Int32 -- VT_I4
+//  FormatID: 9A9BC088-4F6D-469E-9919-E705412040F9, 100
+DEFINE_PROPERTYKEY(PKEY_Message_IsFwdOrReply, 0x9A9BC088, 0x4F6D, 0x469E, 0x99, 0x19, 0xE7, 0x05, 0x41, 0x20, 0x40, 0xF9, 100);
+
+//  Name:     System.Message.MessageClass -- PKEY_Message_MessageClass
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: CD9ED458-08CE-418F-A70E-F912C7BB9C5C, 103
+//  
+//  What type of outlook msg this is (meeting, task, mail, etc.)
+DEFINE_PROPERTYKEY(PKEY_Message_MessageClass, 0xCD9ED458, 0x08CE, 0x418F, 0xA7, 0x0E, 0xF9, 0x12, 0xC7, 0xBB, 0x9C, 0x5C, 103);
+
+//  Name:     System.Message.SenderAddress -- PKEY_Message_SenderAddress
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 0BE1C8E7-1981-4676-AE14-FDD78F05A6E7, 100
+DEFINE_PROPERTYKEY(PKEY_Message_SenderAddress, 0x0BE1C8E7, 0x1981, 0x4676, 0xAE, 0x14, 0xFD, 0xD7, 0x8F, 0x05, 0xA6, 0xE7, 100);
+
+//  Name:     System.Message.SenderName -- PKEY_Message_SenderName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 0DA41CFA-D224-4A18-AE2F-596158DB4B3A, 100
+DEFINE_PROPERTYKEY(PKEY_Message_SenderName, 0x0DA41CFA, 0xD224, 0x4A18, 0xAE, 0x2F, 0x59, 0x61, 0x58, 0xDB, 0x4B, 0x3A, 100);
+
+//  Name:     System.Message.Store -- PKEY_Message_Store
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 15
+//
+//  The store (aka protocol handler) FILE, MAIL, OUTLOOKEXPRESS
+DEFINE_PROPERTYKEY(PKEY_Message_Store, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 15);
+
+//  Name:     System.Message.ToAddress -- PKEY_Message_ToAddress
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 16
+//
+//  Addresses in To: field
+DEFINE_PROPERTYKEY(PKEY_Message_ToAddress, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 16);
+
+//  Name:     System.Message.ToDoTitle -- PKEY_Message_ToDoTitle
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: BCCC8A3C-8CEF-42E5-9B1C-C69079398BC7, 100
+DEFINE_PROPERTYKEY(PKEY_Message_ToDoTitle, 0xBCCC8A3C, 0x8CEF, 0x42E5, 0x9B, 0x1C, 0xC6, 0x90, 0x79, 0x39, 0x8B, 0xC7, 100);
+
+//  Name:     System.Message.ToName -- PKEY_Message_ToName
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD, 17
+//
+//  Person names in To: field
+DEFINE_PROPERTYKEY(PKEY_Message_ToName, 0xE3E0584C, 0xB788, 0x4A5A, 0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD, 17);
+ 
+//-----------------------------------------------------------------------------
+// Music properties
+
+//  Name:     System.Music.AlbumArtist -- PKEY_Music_AlbumArtist
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 13 (PIDSI_MUSIC_ALBUM_ARTIST)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Music_AlbumArtist, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 13);
+
+//  Name:     System.Music.AlbumTitle -- PKEY_Music_AlbumTitle
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 4 (PIDSI_MUSIC_ALBUM)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Music_AlbumTitle, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 4);
+
+//  Name:     System.Music.Artist -- PKEY_Music_Artist
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 2 (PIDSI_MUSIC_ARTIST)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Music_Artist, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 2);
+
+//  Name:     System.Music.BeatsPerMinute -- PKEY_Music_BeatsPerMinute
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 35 (PIDSI_MUSIC_BEATS_PER_MINUTE)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Music_BeatsPerMinute, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 35);
+
+//  Name:     System.Music.Composer -- PKEY_Music_Composer
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 19 (PIDMSI_COMPOSER)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Music_Composer, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 19);
+
+//  Name:     System.Music.Conductor -- PKEY_Music_Conductor
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 36 (PIDSI_MUSIC_CONDUCTOR)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Music_Conductor, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 36);
+
+//  Name:     System.Music.ContentGroupDescription -- PKEY_Music_ContentGroupDescription
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 33 (PIDSI_MUSIC_CONTENT_GROUP_DESCRIPTION)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Music_ContentGroupDescription, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 33);
+
+//  Name:     System.Music.Genre -- PKEY_Music_Genre
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 11 (PIDSI_MUSIC_GENRE)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Music_Genre, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 11);
+
+//  Name:     System.Music.InitialKey -- PKEY_Music_InitialKey
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 34 (PIDSI_MUSIC_INITIAL_KEY)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Music_InitialKey, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 34);
+
+//  Name:     System.Music.Lyrics -- PKEY_Music_Lyrics
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 12 (PIDSI_MUSIC_LYRICS)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Music_Lyrics, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 12);
+
+//  Name:     System.Music.Mood -- PKEY_Music_Mood
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 39 (PIDSI_MUSIC_MOOD)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Music_Mood, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 39);
+
+//  Name:     System.Music.PartOfSet -- PKEY_Music_PartOfSet
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 37 (PIDSI_MUSIC_PART_OF_SET)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Music_PartOfSet, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 37);
+
+//  Name:     System.Music.Period -- PKEY_Music_Period
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 31 (PIDMSI_PERIOD)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Music_Period, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 31);
+
+//  Name:     System.Music.SynchronizedLyrics -- PKEY_Music_SynchronizedLyrics
+//  Type:     Blob -- VT_BLOB
+//  FormatID: 6B223B6A-162E-4AA9-B39F-05D678FC6D77, 100
+DEFINE_PROPERTYKEY(PKEY_Music_SynchronizedLyrics, 0x6B223B6A, 0x162E, 0x4AA9, 0xB3, 0x9F, 0x05, 0xD6, 0x78, 0xFC, 0x6D, 0x77, 100);
+
+//  Name:     System.Music.TrackNumber -- PKEY_Music_TrackNumber
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_MUSIC) 56A3372E-CE9C-11D2-9F0E-006097C686F6, 7 (PIDSI_MUSIC_TRACK)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Music_TrackNumber, 0x56A3372E, 0xCE9C, 0x11D2, 0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6, 7);
+
+ 
+ 
+//-----------------------------------------------------------------------------
+// Note properties
+
+//  Name:     System.Note.Color -- PKEY_Note_Color
+//  Type:     UInt16 -- VT_UI2
+//  FormatID: 4776CAFA-BCE4-4CB1-A23E-265E76D8EB11, 100
+DEFINE_PROPERTYKEY(PKEY_Note_Color, 0x4776CAFA, 0xBCE4, 0x4CB1, 0xA2, 0x3E, 0x26, 0x5E, 0x76, 0xD8, 0xEB, 0x11, 100);
+
+// Possible discrete values for PKEY_Note_Color are:
+#define NOTE_COLOR_BLUE                     0u
+#define NOTE_COLOR_GREEN                    1u
+#define NOTE_COLOR_PINK                     2u
+#define NOTE_COLOR_YELLOW                   3u
+#define NOTE_COLOR_WHITE                    4u
+#define NOTE_COLOR_LIGHTGREEN               5u
+
+//  Name:     System.Note.ColorText -- PKEY_Note_ColorText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 46B4E8DE-CDB2-440D-885C-1658EB65B914, 100
+//  
+//  This is the user-friendly form of System.Note.Color.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_Note_ColorText, 0x46B4E8DE, 0xCDB2, 0x440D, 0x88, 0x5C, 0x16, 0x58, 0xEB, 0x65, 0xB9, 0x14, 100);
+ 
+//-----------------------------------------------------------------------------
+// Photo properties
+
+
+
+//  Name:     System.Photo.Aperture -- PKEY_Photo_Aperture
+//  Type:     Double -- VT_R8
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 37378
+//
+//  PropertyTagExifAperture.  Calculated from PKEY_Photo_ApertureNumerator and PKEY_Photo_ApertureDenominator
+DEFINE_PROPERTYKEY(PKEY_Photo_Aperture, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 37378);
+
+//  Name:     System.Photo.ApertureDenominator -- PKEY_Photo_ApertureDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: E1A9A38B-6685-46BD-875E-570DC7AD7320, 100
+//
+//  Denominator of PKEY_Photo_Aperture
+DEFINE_PROPERTYKEY(PKEY_Photo_ApertureDenominator, 0xE1A9A38B, 0x6685, 0x46BD, 0x87, 0x5E, 0x57, 0x0D, 0xC7, 0xAD, 0x73, 0x20, 100);
+
+//  Name:     System.Photo.ApertureNumerator -- PKEY_Photo_ApertureNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 0337ECEC-39FB-4581-A0BD-4C4CC51E9914, 100
+//
+//  Numerator of PKEY_Photo_Aperture
+DEFINE_PROPERTYKEY(PKEY_Photo_ApertureNumerator, 0x0337ECEC, 0x39FB, 0x4581, 0xA0, 0xBD, 0x4C, 0x4C, 0xC5, 0x1E, 0x99, 0x14, 100);
+
+//  Name:     System.Photo.Brightness -- PKEY_Photo_Brightness
+//  Type:     Double -- VT_R8
+//  FormatID: 1A701BF6-478C-4361-83AB-3701BB053C58, 100 (PropertyTagExifBrightness)
+//  
+//  This is the brightness of the photo.
+//  
+//  Calculated from PKEY_Photo_BrightnessNumerator and PKEY_Photo_BrightnessDenominator.
+//  
+//  The units are "APEX", normally in the range of -99.99 to 99.99. If the numerator of 
+//  the recorded value is FFFFFFFF.H, "Unknown" should be indicated.
+DEFINE_PROPERTYKEY(PKEY_Photo_Brightness, 0x1A701BF6, 0x478C, 0x4361, 0x83, 0xAB, 0x37, 0x01, 0xBB, 0x05, 0x3C, 0x58, 100);
+
+//  Name:     System.Photo.BrightnessDenominator -- PKEY_Photo_BrightnessDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 6EBE6946-2321-440A-90F0-C043EFD32476, 100
+//
+//  Denominator of PKEY_Photo_Brightness
+DEFINE_PROPERTYKEY(PKEY_Photo_BrightnessDenominator, 0x6EBE6946, 0x2321, 0x440A, 0x90, 0xF0, 0xC0, 0x43, 0xEF, 0xD3, 0x24, 0x76, 100);
+
+//  Name:     System.Photo.BrightnessNumerator -- PKEY_Photo_BrightnessNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 9E7D118F-B314-45A0-8CFB-D654B917C9E9, 100
+//
+//  Numerator of PKEY_Photo_Brightness
+DEFINE_PROPERTYKEY(PKEY_Photo_BrightnessNumerator, 0x9E7D118F, 0xB314, 0x45A0, 0x8C, 0xFB, 0xD6, 0x54, 0xB9, 0x17, 0xC9, 0xE9, 100);
+
+//  Name:     System.Photo.CameraManufacturer -- PKEY_Photo_CameraManufacturer
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 271 (PropertyTagEquipMake)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Photo_CameraManufacturer, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 271);
+
+//  Name:     System.Photo.CameraModel -- PKEY_Photo_CameraModel
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 272 (PropertyTagEquipModel)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Photo_CameraModel, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 272);
+
+//  Name:     System.Photo.CameraSerialNumber -- PKEY_Photo_CameraSerialNumber
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 273
+//
+//  Serial number of camera that produced this photo
+DEFINE_PROPERTYKEY(PKEY_Photo_CameraSerialNumber, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 273);
+
+//  Name:     System.Photo.Contrast -- PKEY_Photo_Contrast
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 2A785BA9-8D23-4DED-82E6-60A350C86A10, 100
+//  
+//  This indicates the direction of contrast processing applied by the camera 
+//  when the image was shot.
+DEFINE_PROPERTYKEY(PKEY_Photo_Contrast, 0x2A785BA9, 0x8D23, 0x4DED, 0x82, 0xE6, 0x60, 0xA3, 0x50, 0xC8, 0x6A, 0x10, 100);
+
+// Possible discrete values for PKEY_Photo_Contrast are:
+#define PHOTO_CONTRAST_NORMAL               0ul
+#define PHOTO_CONTRAST_SOFT                 1ul
+#define PHOTO_CONTRAST_HARD                 2ul
+
+//  Name:     System.Photo.ContrastText -- PKEY_Photo_ContrastText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 59DDE9F2-5253-40EA-9A8B-479E96C6249A, 100
+//  
+//  This is the user-friendly form of System.Photo.Contrast.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_Photo_ContrastText, 0x59DDE9F2, 0x5253, 0x40EA, 0x9A, 0x8B, 0x47, 0x9E, 0x96, 0xC6, 0x24, 0x9A, 100);
+
+//  Name:     System.Photo.DateTaken -- PKEY_Photo_DateTaken
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 36867
+//
+//  PropertyTagExifDTOrig
+DEFINE_PROPERTYKEY(PKEY_Photo_DateTaken, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 36867);
+
+//  Name:     System.Photo.DigitalZoom -- PKEY_Photo_DigitalZoom
+//  Type:     Double -- VT_R8
+//  FormatID: F85BF840-A925-4BC2-B0C4-8E36B598679E, 100
+//
+//  PropertyTagExifDigitalZoom.  Calculated from PKEY_Photo_DigitalZoomNumerator and PKEY_Photo_DigitalZoomDenominator
+DEFINE_PROPERTYKEY(PKEY_Photo_DigitalZoom, 0xF85BF840, 0xA925, 0x4BC2, 0xB0, 0xC4, 0x8E, 0x36, 0xB5, 0x98, 0x67, 0x9E, 100);
+
+//  Name:     System.Photo.DigitalZoomDenominator -- PKEY_Photo_DigitalZoomDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 745BAF0E-E5C1-4CFB-8A1B-D031A0A52393, 100
+//
+//  Denominator of PKEY_Photo_DigitalZoom
+DEFINE_PROPERTYKEY(PKEY_Photo_DigitalZoomDenominator, 0x745BAF0E, 0xE5C1, 0x4CFB, 0x8A, 0x1B, 0xD0, 0x31, 0xA0, 0xA5, 0x23, 0x93, 100);
+
+//  Name:     System.Photo.DigitalZoomNumerator -- PKEY_Photo_DigitalZoomNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 16CBB924-6500-473B-A5BE-F1599BCBE413, 100
+//
+//  Numerator of PKEY_Photo_DigitalZoom
+DEFINE_PROPERTYKEY(PKEY_Photo_DigitalZoomNumerator, 0x16CBB924, 0x6500, 0x473B, 0xA5, 0xBE, 0xF1, 0x59, 0x9B, 0xCB, 0xE4, 0x13, 100);
+
+//  Name:     System.Photo.Event -- PKEY_Photo_Event
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 18248
+//
+//  The event at which the photo was taken
+DEFINE_PROPERTYKEY(PKEY_Photo_Event, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 18248);
+
+//  Name:     System.Photo.EXIFVersion -- PKEY_Photo_EXIFVersion
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: D35F743A-EB2E-47F2-A286-844132CB1427, 100
+//
+//  The EXIF version.
+DEFINE_PROPERTYKEY(PKEY_Photo_EXIFVersion, 0xD35F743A, 0xEB2E, 0x47F2, 0xA2, 0x86, 0x84, 0x41, 0x32, 0xCB, 0x14, 0x27, 100);
+
+//  Name:     System.Photo.ExposureBias -- PKEY_Photo_ExposureBias
+//  Type:     Double -- VT_R8
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 37380
+//
+//  PropertyTagExifExposureBias.  Calculated from PKEY_Photo_ExposureBiasNumerator and PKEY_Photo_ExposureBiasDenominator
+DEFINE_PROPERTYKEY(PKEY_Photo_ExposureBias, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 37380);
+
+//  Name:     System.Photo.ExposureBiasDenominator -- PKEY_Photo_ExposureBiasDenominator
+//  Type:     Int32 -- VT_I4
+//  FormatID: AB205E50-04B7-461C-A18C-2F233836E627, 100
+//
+//  Denominator of PKEY_Photo_ExposureBias
+DEFINE_PROPERTYKEY(PKEY_Photo_ExposureBiasDenominator, 0xAB205E50, 0x04B7, 0x461C, 0xA1, 0x8C, 0x2F, 0x23, 0x38, 0x36, 0xE6, 0x27, 100);
+
+//  Name:     System.Photo.ExposureBiasNumerator -- PKEY_Photo_ExposureBiasNumerator
+//  Type:     Int32 -- VT_I4
+//  FormatID: 738BF284-1D87-420B-92CF-5834BF6EF9ED, 100
+//
+//  Numerator of PKEY_Photo_ExposureBias
+DEFINE_PROPERTYKEY(PKEY_Photo_ExposureBiasNumerator, 0x738BF284, 0x1D87, 0x420B, 0x92, 0xCF, 0x58, 0x34, 0xBF, 0x6E, 0xF9, 0xED, 100);
+
+//  Name:     System.Photo.ExposureIndex -- PKEY_Photo_ExposureIndex
+//  Type:     Double -- VT_R8
+//  FormatID: 967B5AF8-995A-46ED-9E11-35B3C5B9782D, 100
+//
+//  PropertyTagExifExposureIndex.  Calculated from PKEY_Photo_ExposureIndexNumerator and PKEY_Photo_ExposureIndexDenominator
+DEFINE_PROPERTYKEY(PKEY_Photo_ExposureIndex, 0x967B5AF8, 0x995A, 0x46ED, 0x9E, 0x11, 0x35, 0xB3, 0xC5, 0xB9, 0x78, 0x2D, 100);
+
+//  Name:     System.Photo.ExposureIndexDenominator -- PKEY_Photo_ExposureIndexDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 93112F89-C28B-492F-8A9D-4BE2062CEE8A, 100
+//
+//  Denominator of PKEY_Photo_ExposureIndex
+DEFINE_PROPERTYKEY(PKEY_Photo_ExposureIndexDenominator, 0x93112F89, 0xC28B, 0x492F, 0x8A, 0x9D, 0x4B, 0xE2, 0x06, 0x2C, 0xEE, 0x8A, 100);
+
+//  Name:     System.Photo.ExposureIndexNumerator -- PKEY_Photo_ExposureIndexNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: CDEDCF30-8919-44DF-8F4C-4EB2FFDB8D89, 100
+//
+//  Numerator of PKEY_Photo_ExposureIndex
+DEFINE_PROPERTYKEY(PKEY_Photo_ExposureIndexNumerator, 0xCDEDCF30, 0x8919, 0x44DF, 0x8F, 0x4C, 0x4E, 0xB2, 0xFF, 0xDB, 0x8D, 0x89, 100);
+
+//  Name:     System.Photo.ExposureProgram -- PKEY_Photo_ExposureProgram
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 34850 (PropertyTagExifExposureProg)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Photo_ExposureProgram, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 34850);
+
+// Possible discrete values for PKEY_Photo_ExposureProgram are:
+#define PHOTO_EXPOSUREPROGRAM_UNKNOWN       0ul
+#define PHOTO_EXPOSUREPROGRAM_MANUAL        1ul
+#define PHOTO_EXPOSUREPROGRAM_NORMAL        2ul
+#define PHOTO_EXPOSUREPROGRAM_APERTURE      3ul
+#define PHOTO_EXPOSUREPROGRAM_SHUTTER       4ul
+#define PHOTO_EXPOSUREPROGRAM_CREATIVE      5ul
+#define PHOTO_EXPOSUREPROGRAM_ACTION        6ul
+#define PHOTO_EXPOSUREPROGRAM_PORTRAIT      7ul
+#define PHOTO_EXPOSUREPROGRAM_LANDSCAPE     8ul
+
+//  Name:     System.Photo.ExposureProgramText -- PKEY_Photo_ExposureProgramText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: FEC690B7-5F30-4646-AE47-4CAAFBA884A3, 100
+//  
+//  This is the user-friendly form of System.Photo.ExposureProgram.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_Photo_ExposureProgramText, 0xFEC690B7, 0x5F30, 0x4646, 0xAE, 0x47, 0x4C, 0xAA, 0xFB, 0xA8, 0x84, 0xA3, 100);
+
+//  Name:     System.Photo.ExposureTime -- PKEY_Photo_ExposureTime
+//  Type:     Double -- VT_R8
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 33434
+//
+//  PropertyTagExifExposureTime.  Calculated from  PKEY_Photo_ExposureTimeNumerator and PKEY_Photo_ExposureTimeDenominator
+DEFINE_PROPERTYKEY(PKEY_Photo_ExposureTime, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 33434);
+
+//  Name:     System.Photo.ExposureTimeDenominator -- PKEY_Photo_ExposureTimeDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 55E98597-AD16-42E0-B624-21599A199838, 100
+//
+//  Denominator of PKEY_Photo_ExposureTime
+DEFINE_PROPERTYKEY(PKEY_Photo_ExposureTimeDenominator, 0x55E98597, 0xAD16, 0x42E0, 0xB6, 0x24, 0x21, 0x59, 0x9A, 0x19, 0x98, 0x38, 100);
+
+//  Name:     System.Photo.ExposureTimeNumerator -- PKEY_Photo_ExposureTimeNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 257E44E2-9031-4323-AC38-85C552871B2E, 100
+//
+//  Numerator of PKEY_Photo_ExposureTime
+DEFINE_PROPERTYKEY(PKEY_Photo_ExposureTimeNumerator, 0x257E44E2, 0x9031, 0x4323, 0xAC, 0x38, 0x85, 0xC5, 0x52, 0x87, 0x1B, 0x2E, 100);
+
+//  Name:     System.Photo.Flash -- PKEY_Photo_Flash
+//  Type:     Byte -- VT_UI1
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 37385
+//
+//  PropertyTagExifFlash
+DEFINE_PROPERTYKEY(PKEY_Photo_Flash, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 37385);
+
+// Possible discrete values for PKEY_Photo_Flash are:
+#define PHOTO_FLASH_NONE                    0
+#define PHOTO_FLASH_FLASH                   1
+#define PHOTO_FLASH_WITHOUTSTROBE           5
+#define PHOTO_FLASH_WITHSTROBE              7
+
+//  Name:     System.Photo.FlashEnergy -- PKEY_Photo_FlashEnergy
+//  Type:     Double -- VT_R8
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 41483
+//
+//  PropertyTagExifFlashEnergy.  Calculated from PKEY_Photo_FlashEnergyNumerator and PKEY_Photo_FlashEnergyDenominator
+DEFINE_PROPERTYKEY(PKEY_Photo_FlashEnergy, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 41483);
+
+//  Name:     System.Photo.FlashEnergyDenominator -- PKEY_Photo_FlashEnergyDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: D7B61C70-6323-49CD-A5FC-C84277162C97, 100
+//
+//  Denominator of PKEY_Photo_FlashEnergy
+DEFINE_PROPERTYKEY(PKEY_Photo_FlashEnergyDenominator, 0xD7B61C70, 0x6323, 0x49CD, 0xA5, 0xFC, 0xC8, 0x42, 0x77, 0x16, 0x2C, 0x97, 100);
+
+//  Name:     System.Photo.FlashEnergyNumerator -- PKEY_Photo_FlashEnergyNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: FCAD3D3D-0858-400F-AAA3-2F66CCE2A6BC, 100
+//
+//  Numerator of PKEY_Photo_FlashEnergy
+DEFINE_PROPERTYKEY(PKEY_Photo_FlashEnergyNumerator, 0xFCAD3D3D, 0x0858, 0x400F, 0xAA, 0xA3, 0x2F, 0x66, 0xCC, 0xE2, 0xA6, 0xBC, 100);
+
+//  Name:     System.Photo.FlashManufacturer -- PKEY_Photo_FlashManufacturer
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: AABAF6C9-E0C5-4719-8585-57B103E584FE, 100
+DEFINE_PROPERTYKEY(PKEY_Photo_FlashManufacturer, 0xAABAF6C9, 0xE0C5, 0x4719, 0x85, 0x85, 0x57, 0xB1, 0x03, 0xE5, 0x84, 0xFE, 100);
+
+//  Name:     System.Photo.FlashModel -- PKEY_Photo_FlashModel
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: FE83BB35-4D1A-42E2-916B-06F3E1AF719E, 100
+DEFINE_PROPERTYKEY(PKEY_Photo_FlashModel, 0xFE83BB35, 0x4D1A, 0x42E2, 0x91, 0x6B, 0x06, 0xF3, 0xE1, 0xAF, 0x71, 0x9E, 100);
+
+//  Name:     System.Photo.FlashText -- PKEY_Photo_FlashText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 6B8B68F6-200B-47EA-8D25-D8050F57339F, 100
+//  
+//  This is the user-friendly form of System.Photo.Flash.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_Photo_FlashText, 0x6B8B68F6, 0x200B, 0x47EA, 0x8D, 0x25, 0xD8, 0x05, 0x0F, 0x57, 0x33, 0x9F, 100);
+
+//  Name:     System.Photo.FNumber -- PKEY_Photo_FNumber
+//  Type:     Double -- VT_R8
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 33437
+//
+//  PropertyTagExifFNumber.  Calculated from PKEY_Photo_FNumberNumerator and PKEY_Photo_FNumberDenominator
+DEFINE_PROPERTYKEY(PKEY_Photo_FNumber, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 33437);
+
+//  Name:     System.Photo.FNumberDenominator -- PKEY_Photo_FNumberDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: E92A2496-223B-4463-A4E3-30EABBA79D80, 100
+//
+//  Denominator of PKEY_Photo_FNumber
+DEFINE_PROPERTYKEY(PKEY_Photo_FNumberDenominator, 0xE92A2496, 0x223B, 0x4463, 0xA4, 0xE3, 0x30, 0xEA, 0xBB, 0xA7, 0x9D, 0x80, 100);
+
+//  Name:     System.Photo.FNumberNumerator -- PKEY_Photo_FNumberNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 1B97738A-FDFC-462F-9D93-1957E08BE90C, 100
+//
+//  Numerator of PKEY_Photo_FNumber
+DEFINE_PROPERTYKEY(PKEY_Photo_FNumberNumerator, 0x1B97738A, 0xFDFC, 0x462F, 0x9D, 0x93, 0x19, 0x57, 0xE0, 0x8B, 0xE9, 0x0C, 100);
+
+//  Name:     System.Photo.FocalLength -- PKEY_Photo_FocalLength
+//  Type:     Double -- VT_R8
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 37386
+//
+//  PropertyTagExifFocalLength.  Calculated from PKEY_Photo_FocalLengthNumerator and PKEY_Photo_FocalLengthDenominator
+DEFINE_PROPERTYKEY(PKEY_Photo_FocalLength, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 37386);
+
+//  Name:     System.Photo.FocalLengthDenominator -- PKEY_Photo_FocalLengthDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 305BC615-DCA1-44A5-9FD4-10C0BA79412E, 100
+//
+//  Denominator of PKEY_Photo_FocalLength
+DEFINE_PROPERTYKEY(PKEY_Photo_FocalLengthDenominator, 0x305BC615, 0xDCA1, 0x44A5, 0x9F, 0xD4, 0x10, 0xC0, 0xBA, 0x79, 0x41, 0x2E, 100);
+
+//  Name:     System.Photo.FocalLengthInFilm -- PKEY_Photo_FocalLengthInFilm
+//  Type:     UInt16 -- VT_UI2
+//  FormatID: A0E74609-B84D-4F49-B860-462BD9971F98, 100
+DEFINE_PROPERTYKEY(PKEY_Photo_FocalLengthInFilm, 0xA0E74609, 0xB84D, 0x4F49, 0xB8, 0x60, 0x46, 0x2B, 0xD9, 0x97, 0x1F, 0x98, 100);
+
+//  Name:     System.Photo.FocalLengthNumerator -- PKEY_Photo_FocalLengthNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 776B6B3B-1E3D-4B0C-9A0E-8FBAF2A8492A, 100
+//
+//  Numerator of PKEY_Photo_FocalLength
+DEFINE_PROPERTYKEY(PKEY_Photo_FocalLengthNumerator, 0x776B6B3B, 0x1E3D, 0x4B0C, 0x9A, 0x0E, 0x8F, 0xBA, 0xF2, 0xA8, 0x49, 0x2A, 100);
+
+//  Name:     System.Photo.FocalPlaneXResolution -- PKEY_Photo_FocalPlaneXResolution
+//  Type:     Double -- VT_R8
+//  FormatID: CFC08D97-C6F7-4484-89DD-EBEF4356FE76, 100
+//  
+//  PropertyTagExifFocalXRes.  Calculated from PKEY_Photo_FocalPlaneXResolutionNumerator and 
+//  PKEY_Photo_FocalPlaneXResolutionDenominator.
+DEFINE_PROPERTYKEY(PKEY_Photo_FocalPlaneXResolution, 0xCFC08D97, 0xC6F7, 0x4484, 0x89, 0xDD, 0xEB, 0xEF, 0x43, 0x56, 0xFE, 0x76, 100);
+
+//  Name:     System.Photo.FocalPlaneXResolutionDenominator -- PKEY_Photo_FocalPlaneXResolutionDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 0933F3F5-4786-4F46-A8E8-D64DD37FA521, 100
+//
+//  Denominator of PKEY_Photo_FocalPlaneXResolution
+DEFINE_PROPERTYKEY(PKEY_Photo_FocalPlaneXResolutionDenominator, 0x0933F3F5, 0x4786, 0x4F46, 0xA8, 0xE8, 0xD6, 0x4D, 0xD3, 0x7F, 0xA5, 0x21, 100);
+
+//  Name:     System.Photo.FocalPlaneXResolutionNumerator -- PKEY_Photo_FocalPlaneXResolutionNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: DCCB10AF-B4E2-4B88-95F9-031B4D5AB490, 100
+//
+//  Numerator of PKEY_Photo_FocalPlaneXResolution
+DEFINE_PROPERTYKEY(PKEY_Photo_FocalPlaneXResolutionNumerator, 0xDCCB10AF, 0xB4E2, 0x4B88, 0x95, 0xF9, 0x03, 0x1B, 0x4D, 0x5A, 0xB4, 0x90, 100);
+
+//  Name:     System.Photo.FocalPlaneYResolution -- PKEY_Photo_FocalPlaneYResolution
+//  Type:     Double -- VT_R8
+//  FormatID: 4FFFE4D0-914F-4AC4-8D6F-C9C61DE169B1, 100
+//  
+//  PropertyTagExifFocalYRes.  Calculated from PKEY_Photo_FocalPlaneYResolutionNumerator and 
+//  PKEY_Photo_FocalPlaneYResolutionDenominator.
+DEFINE_PROPERTYKEY(PKEY_Photo_FocalPlaneYResolution, 0x4FFFE4D0, 0x914F, 0x4AC4, 0x8D, 0x6F, 0xC9, 0xC6, 0x1D, 0xE1, 0x69, 0xB1, 100);
+
+//  Name:     System.Photo.FocalPlaneYResolutionDenominator -- PKEY_Photo_FocalPlaneYResolutionDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 1D6179A6-A876-4031-B013-3347B2B64DC8, 100
+//
+//  Denominator of PKEY_Photo_FocalPlaneYResolution
+DEFINE_PROPERTYKEY(PKEY_Photo_FocalPlaneYResolutionDenominator, 0x1D6179A6, 0xA876, 0x4031, 0xB0, 0x13, 0x33, 0x47, 0xB2, 0xB6, 0x4D, 0xC8, 100);
+
+//  Name:     System.Photo.FocalPlaneYResolutionNumerator -- PKEY_Photo_FocalPlaneYResolutionNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: A2E541C5-4440-4BA8-867E-75CFC06828CD, 100
+//
+//  Numerator of PKEY_Photo_FocalPlaneYResolution
+DEFINE_PROPERTYKEY(PKEY_Photo_FocalPlaneYResolutionNumerator, 0xA2E541C5, 0x4440, 0x4BA8, 0x86, 0x7E, 0x75, 0xCF, 0xC0, 0x68, 0x28, 0xCD, 100);
+
+//  Name:     System.Photo.GainControl -- PKEY_Photo_GainControl
+//  Type:     Double -- VT_R8
+//  FormatID: FA304789-00C7-4D80-904A-1E4DCC7265AA, 100 (PropertyTagExifGainControl)
+//  
+//  This indicates the degree of overall image gain adjustment.
+//  
+//  Calculated from PKEY_Photo_GainControlNumerator and PKEY_Photo_GainControlDenominator.
+DEFINE_PROPERTYKEY(PKEY_Photo_GainControl, 0xFA304789, 0x00C7, 0x4D80, 0x90, 0x4A, 0x1E, 0x4D, 0xCC, 0x72, 0x65, 0xAA, 100);
+
+// Possible discrete values for PKEY_Photo_GainControl are:
+#define PHOTO_GAINCONTROL_NONE              0.0
+#define PHOTO_GAINCONTROL_LOWGAINUP         1.0
+#define PHOTO_GAINCONTROL_HIGHGAINUP        2.0
+#define PHOTO_GAINCONTROL_LOWGAINDOWN       3.0
+#define PHOTO_GAINCONTROL_HIGHGAINDOWN      4.0
+
+//  Name:     System.Photo.GainControlDenominator -- PKEY_Photo_GainControlDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 42864DFD-9DA4-4F77-BDED-4AAD7B256735, 100
+//
+//  Denominator of PKEY_Photo_GainControl
+DEFINE_PROPERTYKEY(PKEY_Photo_GainControlDenominator, 0x42864DFD, 0x9DA4, 0x4F77, 0xBD, 0xED, 0x4A, 0xAD, 0x7B, 0x25, 0x67, 0x35, 100);
+
+//  Name:     System.Photo.GainControlNumerator -- PKEY_Photo_GainControlNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 8E8ECF7C-B7B8-4EB8-A63F-0EE715C96F9E, 100
+//
+//  Numerator of PKEY_Photo_GainControl
+DEFINE_PROPERTYKEY(PKEY_Photo_GainControlNumerator, 0x8E8ECF7C, 0xB7B8, 0x4EB8, 0xA6, 0x3F, 0x0E, 0xE7, 0x15, 0xC9, 0x6F, 0x9E, 100);
+
+//  Name:     System.Photo.GainControlText -- PKEY_Photo_GainControlText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: C06238B2-0BF9-4279-A723-25856715CB9D, 100
+//  
+//  This is the user-friendly form of System.Photo.GainControl.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_Photo_GainControlText, 0xC06238B2, 0x0BF9, 0x4279, 0xA7, 0x23, 0x25, 0x85, 0x67, 0x15, 0xCB, 0x9D, 100);
+
+//  Name:     System.Photo.ISOSpeed -- PKEY_Photo_ISOSpeed
+//  Type:     UInt16 -- VT_UI2
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 34855
+//
+//  PropertyTagExifISOSpeed
+DEFINE_PROPERTYKEY(PKEY_Photo_ISOSpeed, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 34855);
+
+//  Name:     System.Photo.LensManufacturer -- PKEY_Photo_LensManufacturer
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: E6DDCAF7-29C5-4F0A-9A68-D19412EC7090, 100
+DEFINE_PROPERTYKEY(PKEY_Photo_LensManufacturer, 0xE6DDCAF7, 0x29C5, 0x4F0A, 0x9A, 0x68, 0xD1, 0x94, 0x12, 0xEC, 0x70, 0x90, 100);
+
+//  Name:     System.Photo.LensModel -- PKEY_Photo_LensModel
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: E1277516-2B5F-4869-89B1-2E585BD38B7A, 100
+DEFINE_PROPERTYKEY(PKEY_Photo_LensModel, 0xE1277516, 0x2B5F, 0x4869, 0x89, 0xB1, 0x2E, 0x58, 0x5B, 0xD3, 0x8B, 0x7A, 100);
+
+//  Name:     System.Photo.LightSource -- PKEY_Photo_LightSource
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 37384
+//
+//  PropertyTagExifLightSource
+DEFINE_PROPERTYKEY(PKEY_Photo_LightSource, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 37384);
+
+// Possible discrete values for PKEY_Photo_LightSource are:
+#define PHOTO_LIGHTSOURCE_UNKNOWN           0ul
+#define PHOTO_LIGHTSOURCE_DAYLIGHT          1ul
+#define PHOTO_LIGHTSOURCE_FLUORESCENT       2ul
+#define PHOTO_LIGHTSOURCE_TUNGSTEN          3ul
+#define PHOTO_LIGHTSOURCE_STANDARD_A        17ul
+#define PHOTO_LIGHTSOURCE_STANDARD_B        18ul
+#define PHOTO_LIGHTSOURCE_STANDARD_C        19ul
+#define PHOTO_LIGHTSOURCE_D55               20ul
+#define PHOTO_LIGHTSOURCE_D65               21ul
+#define PHOTO_LIGHTSOURCE_D75               22ul
+
+//  Name:     System.Photo.MakerNote -- PKEY_Photo_MakerNote
+//  Type:     Buffer -- VT_VECTOR | VT_UI1  (For variants: VT_ARRAY | VT_UI1)
+//  FormatID: FA303353-B659-4052-85E9-BCAC79549B84, 100
+DEFINE_PROPERTYKEY(PKEY_Photo_MakerNote, 0xFA303353, 0xB659, 0x4052, 0x85, 0xE9, 0xBC, 0xAC, 0x79, 0x54, 0x9B, 0x84, 100);
+
+//  Name:     System.Photo.MakerNoteOffset -- PKEY_Photo_MakerNoteOffset
+//  Type:     UInt64 -- VT_UI8
+//  FormatID: 813F4124-34E6-4D17-AB3E-6B1F3C2247A1, 100
+DEFINE_PROPERTYKEY(PKEY_Photo_MakerNoteOffset, 0x813F4124, 0x34E6, 0x4D17, 0xAB, 0x3E, 0x6B, 0x1F, 0x3C, 0x22, 0x47, 0xA1, 100);
+
+//  Name:     System.Photo.MaxAperture -- PKEY_Photo_MaxAperture
+//  Type:     Double -- VT_R8
+//  FormatID: 08F6D7C2-E3F2-44FC-AF1E-5AA5C81A2D3E, 100
+//
+//  Calculated from PKEY_Photo_MaxApertureNumerator and PKEY_Photo_MaxApertureDenominator
+DEFINE_PROPERTYKEY(PKEY_Photo_MaxAperture, 0x08F6D7C2, 0xE3F2, 0x44FC, 0xAF, 0x1E, 0x5A, 0xA5, 0xC8, 0x1A, 0x2D, 0x3E, 100);
+
+//  Name:     System.Photo.MaxApertureDenominator -- PKEY_Photo_MaxApertureDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: C77724D4-601F-46C5-9B89-C53F93BCEB77, 100
+//
+//  Denominator of PKEY_Photo_MaxAperture
+DEFINE_PROPERTYKEY(PKEY_Photo_MaxApertureDenominator, 0xC77724D4, 0x601F, 0x46C5, 0x9B, 0x89, 0xC5, 0x3F, 0x93, 0xBC, 0xEB, 0x77, 100);
+
+//  Name:     System.Photo.MaxApertureNumerator -- PKEY_Photo_MaxApertureNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: C107E191-A459-44C5-9AE6-B952AD4B906D, 100
+//
+//  Numerator of PKEY_Photo_MaxAperture
+DEFINE_PROPERTYKEY(PKEY_Photo_MaxApertureNumerator, 0xC107E191, 0xA459, 0x44C5, 0x9A, 0xE6, 0xB9, 0x52, 0xAD, 0x4B, 0x90, 0x6D, 100);
+
+//  Name:     System.Photo.MeteringMode -- PKEY_Photo_MeteringMode
+//  Type:     UInt16 -- VT_UI2
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 37383
+//
+//  PropertyTagExifMeteringMode
+DEFINE_PROPERTYKEY(PKEY_Photo_MeteringMode, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 37383);
+
+// Possible discrete values for PKEY_Photo_MeteringMode are:
+#define PHOTO_METERINGMODE_UNKNOWN          0u
+#define PHOTO_METERINGMODE_AVERAGE          1u
+#define PHOTO_METERINGMODE_CENTER           2u
+#define PHOTO_METERINGMODE_SPOT             3u
+#define PHOTO_METERINGMODE_MULTISPOT        4u
+#define PHOTO_METERINGMODE_PATTERN          5u
+#define PHOTO_METERINGMODE_PARTIAL          6u
+
+//  Name:     System.Photo.MeteringModeText -- PKEY_Photo_MeteringModeText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: F628FD8C-7BA8-465A-A65B-C5AA79263A9E, 100
+//  
+//  This is the user-friendly form of System.Photo.MeteringMode.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_Photo_MeteringModeText, 0xF628FD8C, 0x7BA8, 0x465A, 0xA6, 0x5B, 0xC5, 0xAA, 0x79, 0x26, 0x3A, 0x9E, 100);
+
+//  Name:     System.Photo.Orientation -- PKEY_Photo_Orientation
+//  Type:     UInt16 -- VT_UI2
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 274 (PropertyTagOrientation)
+//  
+//  This is the image orientation viewed in terms of rows and columns.
+DEFINE_PROPERTYKEY(PKEY_Photo_Orientation, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 274);
+
+// Possible discrete values for PKEY_Photo_Orientation are:
+#define PHOTO_ORIENTATION_NORMAL            1u
+#define PHOTO_ORIENTATION_FLIPHORIZONTAL    2u
+#define PHOTO_ORIENTATION_ROTATE180         3u
+#define PHOTO_ORIENTATION_FLIPVERTICAL      4u
+#define PHOTO_ORIENTATION_TRANSPOSE         5u
+#define PHOTO_ORIENTATION_ROTATE270         6u
+#define PHOTO_ORIENTATION_TRANSVERSE        7u
+#define PHOTO_ORIENTATION_ROTATE90          8u
+
+//  Name:     System.Photo.OrientationText -- PKEY_Photo_OrientationText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: A9EA193C-C511-498A-A06B-58E2776DCC28, 100
+//  
+//  This is the user-friendly form of System.Photo.Orientation.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_Photo_OrientationText, 0xA9EA193C, 0xC511, 0x498A, 0xA0, 0x6B, 0x58, 0xE2, 0x77, 0x6D, 0xCC, 0x28, 100);
+
+//  Name:     System.Photo.PhotometricInterpretation -- PKEY_Photo_PhotometricInterpretation
+//  Type:     UInt16 -- VT_UI2
+//  FormatID: 341796F1-1DF9-4B1C-A564-91BDEFA43877, 100
+//  
+//  This is the pixel composition. In JPEG compressed data, a JPEG marker is used 
+//  instead of this property.
+DEFINE_PROPERTYKEY(PKEY_Photo_PhotometricInterpretation, 0x341796F1, 0x1DF9, 0x4B1C, 0xA5, 0x64, 0x91, 0xBD, 0xEF, 0xA4, 0x38, 0x77, 100);
+
+// Possible discrete values for PKEY_Photo_PhotometricInterpretation are:
+#define PHOTO_PHOTOMETRIC_RGB               2u
+#define PHOTO_PHOTOMETRIC_YCBCR             6u
+
+//  Name:     System.Photo.PhotometricInterpretationText -- PKEY_Photo_PhotometricInterpretationText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 821437D6-9EAB-4765-A589-3B1CBBD22A61, 100
+//  
+//  This is the user-friendly form of System.Photo.PhotometricInterpretation.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_Photo_PhotometricInterpretationText, 0x821437D6, 0x9EAB, 0x4765, 0xA5, 0x89, 0x3B, 0x1C, 0xBB, 0xD2, 0x2A, 0x61, 100);
+
+//  Name:     System.Photo.ProgramMode -- PKEY_Photo_ProgramMode
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 6D217F6D-3F6A-4825-B470-5F03CA2FBE9B, 100
+//  
+//  This is the class of the program used by the camera to set exposure when the 
+//  picture is taken.
+DEFINE_PROPERTYKEY(PKEY_Photo_ProgramMode, 0x6D217F6D, 0x3F6A, 0x4825, 0xB4, 0x70, 0x5F, 0x03, 0xCA, 0x2F, 0xBE, 0x9B, 100);
+
+// Possible discrete values for PKEY_Photo_ProgramMode are:
+#define PHOTO_PROGRAMMODE_NOTDEFINED        0ul
+#define PHOTO_PROGRAMMODE_MANUAL            1ul
+#define PHOTO_PROGRAMMODE_NORMAL            2ul
+#define PHOTO_PROGRAMMODE_APERTURE          3ul
+#define PHOTO_PROGRAMMODE_SHUTTER           4ul
+#define PHOTO_PROGRAMMODE_CREATIVE          5ul
+#define PHOTO_PROGRAMMODE_ACTION            6ul
+#define PHOTO_PROGRAMMODE_PORTRAIT          7ul
+#define PHOTO_PROGRAMMODE_LANDSCAPE         8ul
+
+//  Name:     System.Photo.ProgramModeText -- PKEY_Photo_ProgramModeText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 7FE3AA27-2648-42F3-89B0-454E5CB150C3, 100
+//  
+//  This is the user-friendly form of System.Photo.ProgramMode.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_Photo_ProgramModeText, 0x7FE3AA27, 0x2648, 0x42F3, 0x89, 0xB0, 0x45, 0x4E, 0x5C, 0xB1, 0x50, 0xC3, 100);
+
+//  Name:     System.Photo.RelatedSoundFile -- PKEY_Photo_RelatedSoundFile
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 318A6B45-087F-4DC2-B8CC-05359551FC9E, 100
+DEFINE_PROPERTYKEY(PKEY_Photo_RelatedSoundFile, 0x318A6B45, 0x087F, 0x4DC2, 0xB8, 0xCC, 0x05, 0x35, 0x95, 0x51, 0xFC, 0x9E, 100);
+
+//  Name:     System.Photo.Saturation -- PKEY_Photo_Saturation
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 49237325-A95A-4F67-B211-816B2D45D2E0, 100
+//  
+//  This indicates the direction of saturation processing applied by the camera when 
+//  the image was shot.
+DEFINE_PROPERTYKEY(PKEY_Photo_Saturation, 0x49237325, 0xA95A, 0x4F67, 0xB2, 0x11, 0x81, 0x6B, 0x2D, 0x45, 0xD2, 0xE0, 100);
+
+// Possible discrete values for PKEY_Photo_Saturation are:
+#define PHOTO_SATURATION_NORMAL             0ul
+#define PHOTO_SATURATION_LOW                1ul
+#define PHOTO_SATURATION_HIGH               2ul
+
+//  Name:     System.Photo.SaturationText -- PKEY_Photo_SaturationText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 61478C08-B600-4A84-BBE4-E99C45F0A072, 100
+//  
+//  This is the user-friendly form of System.Photo.Saturation.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_Photo_SaturationText, 0x61478C08, 0xB600, 0x4A84, 0xBB, 0xE4, 0xE9, 0x9C, 0x45, 0xF0, 0xA0, 0x72, 100);
+
+//  Name:     System.Photo.Sharpness -- PKEY_Photo_Sharpness
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: FC6976DB-8349-4970-AE97-B3C5316A08F0, 100
+//  
+//  This indicates the direction of sharpness processing applied by the camera when 
+//  the image was shot.
+DEFINE_PROPERTYKEY(PKEY_Photo_Sharpness, 0xFC6976DB, 0x8349, 0x4970, 0xAE, 0x97, 0xB3, 0xC5, 0x31, 0x6A, 0x08, 0xF0, 100);
+
+// Possible discrete values for PKEY_Photo_Sharpness are:
+#define PHOTO_SHARPNESS_NORMAL              0ul
+#define PHOTO_SHARPNESS_SOFT                1ul
+#define PHOTO_SHARPNESS_HARD                2ul
+
+//  Name:     System.Photo.SharpnessText -- PKEY_Photo_SharpnessText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 51EC3F47-DD50-421D-8769-334F50424B1E, 100
+//  
+//  This is the user-friendly form of System.Photo.Sharpness.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_Photo_SharpnessText, 0x51EC3F47, 0xDD50, 0x421D, 0x87, 0x69, 0x33, 0x4F, 0x50, 0x42, 0x4B, 0x1E, 100);
+
+//  Name:     System.Photo.ShutterSpeed -- PKEY_Photo_ShutterSpeed
+//  Type:     Double -- VT_R8
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 37377
+//
+//  PropertyTagExifShutterSpeed.  Calculated from PKEY_Photo_ShutterSpeedNumerator and PKEY_Photo_ShutterSpeedDenominator
+DEFINE_PROPERTYKEY(PKEY_Photo_ShutterSpeed, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 37377);
+
+//  Name:     System.Photo.ShutterSpeedDenominator -- PKEY_Photo_ShutterSpeedDenominator
+//  Type:     Int32 -- VT_I4
+//  FormatID: E13D8975-81C7-4948-AE3F-37CAE11E8FF7, 100
+//
+//  Denominator of PKEY_Photo_ShutterSpeed
+DEFINE_PROPERTYKEY(PKEY_Photo_ShutterSpeedDenominator, 0xE13D8975, 0x81C7, 0x4948, 0xAE, 0x3F, 0x37, 0xCA, 0xE1, 0x1E, 0x8F, 0xF7, 100);
+
+//  Name:     System.Photo.ShutterSpeedNumerator -- PKEY_Photo_ShutterSpeedNumerator
+//  Type:     Int32 -- VT_I4
+//  FormatID: 16EA4042-D6F4-4BCA-8349-7C78D30FB333, 100
+//
+//  Numerator of PKEY_Photo_ShutterSpeed
+DEFINE_PROPERTYKEY(PKEY_Photo_ShutterSpeedNumerator, 0x16EA4042, 0xD6F4, 0x4BCA, 0x83, 0x49, 0x7C, 0x78, 0xD3, 0x0F, 0xB3, 0x33, 100);
+
+//  Name:     System.Photo.SubjectDistance -- PKEY_Photo_SubjectDistance
+//  Type:     Double -- VT_R8
+//  FormatID: (FMTID_ImageProperties) 14B81DA1-0135-4D31-96D9-6CBFC9671A99, 37382
+//
+//  PropertyTagExifSubjectDist.  Calculated from PKEY_Photo_SubjectDistanceNumerator and PKEY_Photo_SubjectDistanceDenominator
+DEFINE_PROPERTYKEY(PKEY_Photo_SubjectDistance, 0x14B81DA1, 0x0135, 0x4D31, 0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99, 37382);
+
+//  Name:     System.Photo.SubjectDistanceDenominator -- PKEY_Photo_SubjectDistanceDenominator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 0C840A88-B043-466D-9766-D4B26DA3FA77, 100
+//
+//  Denominator of PKEY_Photo_SubjectDistance
+DEFINE_PROPERTYKEY(PKEY_Photo_SubjectDistanceDenominator, 0x0C840A88, 0xB043, 0x466D, 0x97, 0x66, 0xD4, 0xB2, 0x6D, 0xA3, 0xFA, 0x77, 100);
+
+//  Name:     System.Photo.SubjectDistanceNumerator -- PKEY_Photo_SubjectDistanceNumerator
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 8AF4961C-F526-43E5-AA81-DB768219178D, 100
+//
+//  Numerator of PKEY_Photo_SubjectDistance
+DEFINE_PROPERTYKEY(PKEY_Photo_SubjectDistanceNumerator, 0x8AF4961C, 0xF526, 0x43E5, 0xAA, 0x81, 0xDB, 0x76, 0x82, 0x19, 0x17, 0x8D, 100);
+
+//  Name:     System.Photo.TranscodedForSync -- PKEY_Photo_TranscodedForSync
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: 9A8EBB75-6458-4E82-BACB-35C0095B03BB, 100
+DEFINE_PROPERTYKEY(PKEY_Photo_TranscodedForSync, 0x9A8EBB75, 0x6458, 0x4E82, 0xBA, 0xCB, 0x35, 0xC0, 0x09, 0x5B, 0x03, 0xBB, 100);
+
+//  Name:     System.Photo.WhiteBalance -- PKEY_Photo_WhiteBalance
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: EE3D3D8A-5381-4CFA-B13B-AAF66B5F4EC9, 100
+//  
+//  This indicates the white balance mode set when the image was shot.
+DEFINE_PROPERTYKEY(PKEY_Photo_WhiteBalance, 0xEE3D3D8A, 0x5381, 0x4CFA, 0xB1, 0x3B, 0xAA, 0xF6, 0x6B, 0x5F, 0x4E, 0xC9, 100);
+
+// Possible discrete values for PKEY_Photo_WhiteBalance are:
+#define PHOTO_WHITEBALANCE_AUTO             0ul
+#define PHOTO_WHITEBALANCE_MANUAL           1ul
+
+//  Name:     System.Photo.WhiteBalanceText -- PKEY_Photo_WhiteBalanceText
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 6336B95E-C7A7-426D-86FD-7AE3D39C84B4, 100
+//  
+//  This is the user-friendly form of System.Photo.WhiteBalance.  Not intended to be parsed 
+//  programmatically.
+DEFINE_PROPERTYKEY(PKEY_Photo_WhiteBalanceText, 0x6336B95E, 0xC7A7, 0x426D, 0x86, 0xFD, 0x7A, 0xE3, 0xD3, 0x9C, 0x84, 0xB4, 100);
+ 
+//-----------------------------------------------------------------------------
+// PropGroup properties
+
+//  Name:     System.PropGroup.Advanced -- PKEY_PropGroup_Advanced
+//  Type:     Null -- VT_NULL
+//  FormatID: 900A403B-097B-4B95-8AE2-071FDAEEB118, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_Advanced, 0x900A403B, 0x097B, 0x4B95, 0x8A, 0xE2, 0x07, 0x1F, 0xDA, 0xEE, 0xB1, 0x18, 100);
+
+//  Name:     System.PropGroup.Audio -- PKEY_PropGroup_Audio
+//  Type:     Null -- VT_NULL
+//  FormatID: 2804D469-788F-48AA-8570-71B9C187E138, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_Audio, 0x2804D469, 0x788F, 0x48AA, 0x85, 0x70, 0x71, 0xB9, 0xC1, 0x87, 0xE1, 0x38, 100);
+
+//  Name:     System.PropGroup.Calendar -- PKEY_PropGroup_Calendar
+//  Type:     Null -- VT_NULL
+//  FormatID: 9973D2B5-BFD8-438A-BA94-5349B293181A, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_Calendar, 0x9973D2B5, 0xBFD8, 0x438A, 0xBA, 0x94, 0x53, 0x49, 0xB2, 0x93, 0x18, 0x1A, 100);
+
+//  Name:     System.PropGroup.Camera -- PKEY_PropGroup_Camera
+//  Type:     Null -- VT_NULL
+//  FormatID: DE00DE32-547E-4981-AD4B-542F2E9007D8, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_Camera, 0xDE00DE32, 0x547E, 0x4981, 0xAD, 0x4B, 0x54, 0x2F, 0x2E, 0x90, 0x07, 0xD8, 100);
+
+//  Name:     System.PropGroup.Contact -- PKEY_PropGroup_Contact
+//  Type:     Null -- VT_NULL
+//  FormatID: DF975FD3-250A-4004-858F-34E29A3E37AA, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_Contact, 0xDF975FD3, 0x250A, 0x4004, 0x85, 0x8F, 0x34, 0xE2, 0x9A, 0x3E, 0x37, 0xAA, 100);
+
+//  Name:     System.PropGroup.Content -- PKEY_PropGroup_Content
+//  Type:     Null -- VT_NULL
+//  FormatID: D0DAB0BA-368A-4050-A882-6C010FD19A4F, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_Content, 0xD0DAB0BA, 0x368A, 0x4050, 0xA8, 0x82, 0x6C, 0x01, 0x0F, 0xD1, 0x9A, 0x4F, 100);
+
+//  Name:     System.PropGroup.Description -- PKEY_PropGroup_Description
+//  Type:     Null -- VT_NULL
+//  FormatID: 8969B275-9475-4E00-A887-FF93B8B41E44, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_Description, 0x8969B275, 0x9475, 0x4E00, 0xA8, 0x87, 0xFF, 0x93, 0xB8, 0xB4, 0x1E, 0x44, 100);
+
+//  Name:     System.PropGroup.FileSystem -- PKEY_PropGroup_FileSystem
+//  Type:     Null -- VT_NULL
+//  FormatID: E3A7D2C1-80FC-4B40-8F34-30EA111BDC2E, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_FileSystem, 0xE3A7D2C1, 0x80FC, 0x4B40, 0x8F, 0x34, 0x30, 0xEA, 0x11, 0x1B, 0xDC, 0x2E, 100);
+
+//  Name:     System.PropGroup.General -- PKEY_PropGroup_General
+//  Type:     Null -- VT_NULL
+//  FormatID: CC301630-B192-4C22-B372-9F4C6D338E07, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_General, 0xCC301630, 0xB192, 0x4C22, 0xB3, 0x72, 0x9F, 0x4C, 0x6D, 0x33, 0x8E, 0x07, 100);
+
+//  Name:     System.PropGroup.GPS -- PKEY_PropGroup_GPS
+//  Type:     Null -- VT_NULL
+//  FormatID: F3713ADA-90E3-4E11-AAE5-FDC17685B9BE, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_GPS, 0xF3713ADA, 0x90E3, 0x4E11, 0xAA, 0xE5, 0xFD, 0xC1, 0x76, 0x85, 0xB9, 0xBE, 100);
+
+//  Name:     System.PropGroup.Image -- PKEY_PropGroup_Image
+//  Type:     Null -- VT_NULL
+//  FormatID: E3690A87-0FA8-4A2A-9A9F-FCE8827055AC, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_Image, 0xE3690A87, 0x0FA8, 0x4A2A, 0x9A, 0x9F, 0xFC, 0xE8, 0x82, 0x70, 0x55, 0xAC, 100);
+
+//  Name:     System.PropGroup.Media -- PKEY_PropGroup_Media
+//  Type:     Null -- VT_NULL
+//  FormatID: 61872CF7-6B5E-4B4B-AC2D-59DA84459248, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_Media, 0x61872CF7, 0x6B5E, 0x4B4B, 0xAC, 0x2D, 0x59, 0xDA, 0x84, 0x45, 0x92, 0x48, 100);
+
+//  Name:     System.PropGroup.MediaAdvanced -- PKEY_PropGroup_MediaAdvanced
+//  Type:     Null -- VT_NULL
+//  FormatID: 8859A284-DE7E-4642-99BA-D431D044B1EC, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_MediaAdvanced, 0x8859A284, 0xDE7E, 0x4642, 0x99, 0xBA, 0xD4, 0x31, 0xD0, 0x44, 0xB1, 0xEC, 100);
+
+//  Name:     System.PropGroup.Message -- PKEY_PropGroup_Message
+//  Type:     Null -- VT_NULL
+//  FormatID: 7FD7259D-16B4-4135-9F97-7C96ECD2FA9E, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_Message, 0x7FD7259D, 0x16B4, 0x4135, 0x9F, 0x97, 0x7C, 0x96, 0xEC, 0xD2, 0xFA, 0x9E, 100);
+
+//  Name:     System.PropGroup.Music -- PKEY_PropGroup_Music
+//  Type:     Null -- VT_NULL
+//  FormatID: 68DD6094-7216-40F1-A029-43FE7127043F, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_Music, 0x68DD6094, 0x7216, 0x40F1, 0xA0, 0x29, 0x43, 0xFE, 0x71, 0x27, 0x04, 0x3F, 100);
+
+//  Name:     System.PropGroup.Origin -- PKEY_PropGroup_Origin
+//  Type:     Null -- VT_NULL
+//  FormatID: 2598D2FB-5569-4367-95DF-5CD3A177E1A5, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_Origin, 0x2598D2FB, 0x5569, 0x4367, 0x95, 0xDF, 0x5C, 0xD3, 0xA1, 0x77, 0xE1, 0xA5, 100);
+
+//  Name:     System.PropGroup.PhotoAdvanced -- PKEY_PropGroup_PhotoAdvanced
+//  Type:     Null -- VT_NULL
+//  FormatID: 0CB2BF5A-9EE7-4A86-8222-F01E07FDADAF, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_PhotoAdvanced, 0x0CB2BF5A, 0x9EE7, 0x4A86, 0x82, 0x22, 0xF0, 0x1E, 0x07, 0xFD, 0xAD, 0xAF, 100);
+
+//  Name:     System.PropGroup.RecordedTV -- PKEY_PropGroup_RecordedTV
+//  Type:     Null -- VT_NULL
+//  FormatID: E7B33238-6584-4170-A5C0-AC25EFD9DA56, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_RecordedTV, 0xE7B33238, 0x6584, 0x4170, 0xA5, 0xC0, 0xAC, 0x25, 0xEF, 0xD9, 0xDA, 0x56, 100);
+
+//  Name:     System.PropGroup.Video -- PKEY_PropGroup_Video
+//  Type:     Null -- VT_NULL
+//  FormatID: BEBE0920-7671-4C54-A3EB-49FDDFC191EE, 100
+DEFINE_PROPERTYKEY(PKEY_PropGroup_Video, 0xBEBE0920, 0x7671, 0x4C54, 0xA3, 0xEB, 0x49, 0xFD, 0xDF, 0xC1, 0x91, 0xEE, 100);
+ 
+//-----------------------------------------------------------------------------
+// PropList properties
+
+
+
+//  Name:     System.PropList.ConflictPrompt -- PKEY_PropList_ConflictPrompt
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: C9944A21-A406-48FE-8225-AEC7E24C211B, 11
+//  
+//  The list of properties to show in the file operation conflict resolution dialog. Properties with empty 
+//  values will not be displayed. Register under the regvalue of "ConflictPrompt".
+DEFINE_PROPERTYKEY(PKEY_PropList_ConflictPrompt, 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 11);
+
+//  Name:     System.PropList.ExtendedTileInfo -- PKEY_PropList_ExtendedTileInfo
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: C9944A21-A406-48FE-8225-AEC7E24C211B, 9
+//  
+//  The list of properties to show in the listview on extended tiles. Register under the regvalue of 
+//  "ExtendedTileInfo".
+DEFINE_PROPERTYKEY(PKEY_PropList_ExtendedTileInfo, 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 9);
+
+//  Name:     System.PropList.FileOperationPrompt -- PKEY_PropList_FileOperationPrompt
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: C9944A21-A406-48FE-8225-AEC7E24C211B, 10
+//  
+//  The list of properties to show in the file operation confirmation dialog. Properties with empty values 
+//  will not be displayed. If this list is not specified, then the InfoTip property list is used instead. 
+//  Register under the regvalue of "FileOperationPrompt".
+DEFINE_PROPERTYKEY(PKEY_PropList_FileOperationPrompt, 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 10);
+
+//  Name:     System.PropList.FullDetails -- PKEY_PropList_FullDetails
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: C9944A21-A406-48FE-8225-AEC7E24C211B, 2
+//  
+//  The list of all the properties to show in the details page.  Property groups can be included in this list 
+//  in order to more easily organize the UI.  Register under the regvalue of "FullDetails".
+DEFINE_PROPERTYKEY(PKEY_PropList_FullDetails, 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 2);
+
+//  Name:     System.PropList.InfoTip -- PKEY_PropList_InfoTip
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: C9944A21-A406-48FE-8225-AEC7E24C211B, 4 (PID_PROPLIST_INFOTIP)
+//  
+//  The list of properties to show in the infotip. Properties with empty values will not be displayed. Register 
+//  under the regvalue of "InfoTip".
+DEFINE_PROPERTYKEY(PKEY_PropList_InfoTip, 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 4);
+
+//  Name:     System.PropList.NonPersonal -- PKEY_PropList_NonPersonal
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 49D1091F-082E-493F-B23F-D2308AA9668C, 100
+//  
+//  The list of properties that are considered 'non-personal'. When told to remove all non-personal properties 
+//  from a given file, the system will leave these particular properties untouched. Register under the regvalue 
+//  of "NonPersonal".
+DEFINE_PROPERTYKEY(PKEY_PropList_NonPersonal, 0x49D1091F, 0x082E, 0x493F, 0xB2, 0x3F, 0xD2, 0x30, 0x8A, 0xA9, 0x66, 0x8C, 100);
+
+//  Name:     System.PropList.PreviewDetails -- PKEY_PropList_PreviewDetails
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: C9944A21-A406-48FE-8225-AEC7E24C211B, 8
+//
+//  The list of properties to display in the preview pane.  Register under the regvalue of "PreviewDetails".
+DEFINE_PROPERTYKEY(PKEY_PropList_PreviewDetails, 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 8);
+
+//  Name:     System.PropList.PreviewTitle -- PKEY_PropList_PreviewTitle
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: C9944A21-A406-48FE-8225-AEC7E24C211B, 6
+//  
+//  The one or two properties to display in the preview pane title section.  The optional second property is 
+//  displayed as a subtitle.  Register under the regvalue of "PreviewTitle".
+DEFINE_PROPERTYKEY(PKEY_PropList_PreviewTitle, 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 6);
+
+//  Name:     System.PropList.QuickTip -- PKEY_PropList_QuickTip
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: C9944A21-A406-48FE-8225-AEC7E24C211B, 5 (PID_PROPLIST_QUICKTIP)
+//  
+//  The list of properties to show in the infotip when the item is on a slow network. Properties with empty 
+//  values will not be displayed. Register under the regvalue of "QuickTip".
+DEFINE_PROPERTYKEY(PKEY_PropList_QuickTip, 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 5);
+
+//  Name:     System.PropList.TileInfo -- PKEY_PropList_TileInfo
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: C9944A21-A406-48FE-8225-AEC7E24C211B, 3 (PID_PROPLIST_TILEINFO)
+//  
+//  The list of properties to show in the listview on tiles. Register under the regvalue of "TileInfo".
+DEFINE_PROPERTYKEY(PKEY_PropList_TileInfo, 0xC9944A21, 0xA406, 0x48FE, 0x82, 0x25, 0xAE, 0xC7, 0xE2, 0x4C, 0x21, 0x1B, 3);
+
+//  Name:     System.PropList.XPDetailsPanel -- PKEY_PropList_XPDetailsPanel
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_WebView) F2275480-F782-4291-BD94-F13693513AEC, 0 (PID_DISPLAY_PROPERTIES)
+//
+//  The list of properties to display in the XP webview details panel. Obsolete.
+DEFINE_PROPERTYKEY(PKEY_PropList_XPDetailsPanel, 0xF2275480, 0xF782, 0x4291, 0xBD, 0x94, 0xF1, 0x36, 0x93, 0x51, 0x3A, 0xEC, 0);
+ 
+//-----------------------------------------------------------------------------
+// RecordedTV properties
+
+
+
+//  Name:     System.RecordedTV.ChannelNumber -- PKEY_RecordedTV_ChannelNumber
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 7
+//
+//  Example: 42
+DEFINE_PROPERTYKEY(PKEY_RecordedTV_ChannelNumber, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 7);
+
+//  Name:     System.RecordedTV.Credits -- PKEY_RecordedTV_Credits
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 4
+//
+//  Example: "Don Messick/Frank Welker/Casey Kasem/Heather North/Nicole Jaffe;;;"
+DEFINE_PROPERTYKEY(PKEY_RecordedTV_Credits, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 4);
+
+//  Name:     System.RecordedTV.DateContentExpires -- PKEY_RecordedTV_DateContentExpires
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 15
+DEFINE_PROPERTYKEY(PKEY_RecordedTV_DateContentExpires, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 15);
+
+//  Name:     System.RecordedTV.EpisodeName -- PKEY_RecordedTV_EpisodeName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 2
+//
+//  Example: "Nowhere to Hyde"
+DEFINE_PROPERTYKEY(PKEY_RecordedTV_EpisodeName, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 2);
+
+//  Name:     System.RecordedTV.IsATSCContent -- PKEY_RecordedTV_IsATSCContent
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 16
+DEFINE_PROPERTYKEY(PKEY_RecordedTV_IsATSCContent, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 16);
+
+//  Name:     System.RecordedTV.IsClosedCaptioningAvailable -- PKEY_RecordedTV_IsClosedCaptioningAvailable
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 12
+DEFINE_PROPERTYKEY(PKEY_RecordedTV_IsClosedCaptioningAvailable, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 12);
+
+//  Name:     System.RecordedTV.IsDTVContent -- PKEY_RecordedTV_IsDTVContent
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 17
+DEFINE_PROPERTYKEY(PKEY_RecordedTV_IsDTVContent, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 17);
+
+//  Name:     System.RecordedTV.IsHDContent -- PKEY_RecordedTV_IsHDContent
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 18
+DEFINE_PROPERTYKEY(PKEY_RecordedTV_IsHDContent, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 18);
+
+//  Name:     System.RecordedTV.IsRepeatBroadcast -- PKEY_RecordedTV_IsRepeatBroadcast
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 13
+DEFINE_PROPERTYKEY(PKEY_RecordedTV_IsRepeatBroadcast, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 13);
+
+//  Name:     System.RecordedTV.IsSAP -- PKEY_RecordedTV_IsSAP
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 14
+DEFINE_PROPERTYKEY(PKEY_RecordedTV_IsSAP, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 14);
+
+//  Name:     System.RecordedTV.NetworkAffiliation -- PKEY_RecordedTV_NetworkAffiliation
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 2C53C813-FB63-4E22-A1AB-0B331CA1E273, 100
+DEFINE_PROPERTYKEY(PKEY_RecordedTV_NetworkAffiliation, 0x2C53C813, 0xFB63, 0x4E22, 0xA1, 0xAB, 0x0B, 0x33, 0x1C, 0xA1, 0xE2, 0x73, 100);
+
+//  Name:     System.RecordedTV.OriginalBroadcastDate -- PKEY_RecordedTV_OriginalBroadcastDate
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: 4684FE97-8765-4842-9C13-F006447B178C, 100
+DEFINE_PROPERTYKEY(PKEY_RecordedTV_OriginalBroadcastDate, 0x4684FE97, 0x8765, 0x4842, 0x9C, 0x13, 0xF0, 0x06, 0x44, 0x7B, 0x17, 0x8C, 100);
+
+//  Name:     System.RecordedTV.ProgramDescription -- PKEY_RecordedTV_ProgramDescription
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 3
+DEFINE_PROPERTYKEY(PKEY_RecordedTV_ProgramDescription, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 3);
+
+//  Name:     System.RecordedTV.RecordingTime -- PKEY_RecordedTV_RecordingTime
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: A5477F61-7A82-4ECA-9DDE-98B69B2479B3, 100
+DEFINE_PROPERTYKEY(PKEY_RecordedTV_RecordingTime, 0xA5477F61, 0x7A82, 0x4ECA, 0x9D, 0xDE, 0x98, 0xB6, 0x9B, 0x24, 0x79, 0xB3, 100);
+
+//  Name:     System.RecordedTV.StationCallSign -- PKEY_RecordedTV_StationCallSign
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 6D748DE2-8D38-4CC3-AC60-F009B057C557, 5
+//
+//  Example: "TOONP"
+DEFINE_PROPERTYKEY(PKEY_RecordedTV_StationCallSign, 0x6D748DE2, 0x8D38, 0x4CC3, 0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57, 5);
+
+//  Name:     System.RecordedTV.StationName -- PKEY_RecordedTV_StationName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 1B5439E7-EBA1-4AF8-BDD7-7AF1D4549493, 100
+DEFINE_PROPERTYKEY(PKEY_RecordedTV_StationName, 0x1B5439E7, 0xEBA1, 0x4AF8, 0xBD, 0xD7, 0x7A, 0xF1, 0xD4, 0x54, 0x94, 0x93, 100);
+ 
+//-----------------------------------------------------------------------------
+// Search properties
+
+
+
+//  Name:     System.Search.AutoSummary -- PKEY_Search_AutoSummary
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 560C36C0-503A-11CF-BAA1-00004C752A9A, 2
+//
+//  General Summary of the document.
+DEFINE_PROPERTYKEY(PKEY_Search_AutoSummary, 0x560C36C0, 0x503A, 0x11CF, 0xBA, 0xA1, 0x00, 0x00, 0x4C, 0x75, 0x2A, 0x9A, 2);
+
+//  Name:     System.Search.ContainerHash -- PKEY_Search_ContainerHash
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: BCEEE283-35DF-4D53-826A-F36A3EEFC6BE, 100
+//
+//  Hash code used to identify attachments to be deleted based on a common container url
+DEFINE_PROPERTYKEY(PKEY_Search_ContainerHash, 0xBCEEE283, 0x35DF, 0x4D53, 0x82, 0x6A, 0xF3, 0x6A, 0x3E, 0xEF, 0xC6, 0xBE, 100);
+
+//  Name:     System.Search.Contents -- PKEY_Search_Contents
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_Storage) B725F130-47EF-101A-A5F1-02608C9EEBAC, 19 (PID_STG_CONTENTS)
+//  
+//  The contents of the item. This property is for query restrictions only; it cannot be retrieved in a 
+//  query result. The Indexing Service friendly name is 'contents'.
+DEFINE_PROPERTYKEY(PKEY_Search_Contents, 0xB725F130, 0x47EF, 0x101A, 0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC, 19);
+
+//  Name:     System.Search.EntryID -- PKEY_Search_EntryID
+//  Type:     Int32 -- VT_I4
+//  FormatID: (FMTID_Query) 49691C90-7E17-101A-A91C-08002B2ECDA9, 5 (PROPID_QUERY_WORKID)
+//  
+//  The entry ID for an item within a given catalog in the Windows Search Index.
+//  This value may be recycled, and therefore is not considered unique over time.
+DEFINE_PROPERTYKEY(PKEY_Search_EntryID, 0x49691C90, 0x7E17, 0x101A, 0xA9, 0x1C, 0x08, 0x00, 0x2B, 0x2E, 0xCD, 0xA9, 5);
+
+//  Name:     System.Search.GatherTime -- PKEY_Search_GatherTime
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: 0B63E350-9CCC-11D0-BCDB-00805FCCCE04, 8
+//
+//  The Datetime that the Windows Search Gatherer process last pushed properties of this document to the Windows Search Gatherer Plugins.
+DEFINE_PROPERTYKEY(PKEY_Search_GatherTime, 0x0B63E350, 0x9CCC, 0x11D0, 0xBC, 0xDB, 0x00, 0x80, 0x5F, 0xCC, 0xCE, 0x04, 8);
+
+//  Name:     System.Search.IsClosedDirectory -- PKEY_Search_IsClosedDirectory
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: 0B63E343-9CCC-11D0-BCDB-00805FCCCE04, 23
+//
+//  If this property is emitted with a value of TRUE, then it indicates that this URL's last modified time applies to all of it's children, and if this URL is deleted then all of it's children are deleted as well.  For example, this would be emitted as TRUE when emitting the URL of an email so that all attachments are tied to the last modified time of that email.
+DEFINE_PROPERTYKEY(PKEY_Search_IsClosedDirectory, 0x0B63E343, 0x9CCC, 0x11D0, 0xBC, 0xDB, 0x00, 0x80, 0x5F, 0xCC, 0xCE, 0x04, 23);
+
+//  Name:     System.Search.IsFullyContained -- PKEY_Search_IsFullyContained
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: 0B63E343-9CCC-11D0-BCDB-00805FCCCE04, 24
+//
+//  Any child URL of a URL which has System.Search.IsClosedDirectory=TRUE must emit System.Search.IsFullyContained=TRUE.  This ensures that the URL is not deleted at the end of a crawl because it hasn't been visited (which is the normal mechanism for detecting deletes).  For example an email attachment would emit this property
+DEFINE_PROPERTYKEY(PKEY_Search_IsFullyContained, 0x0B63E343, 0x9CCC, 0x11D0, 0xBC, 0xDB, 0x00, 0x80, 0x5F, 0xCC, 0xCE, 0x04, 24);
+
+//  Name:     System.Search.QueryFocusedSummary -- PKEY_Search_QueryFocusedSummary
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 560C36C0-503A-11CF-BAA1-00004C752A9A, 3
+//
+//  Query Focused Summary of the document.
+DEFINE_PROPERTYKEY(PKEY_Search_QueryFocusedSummary, 0x560C36C0, 0x503A, 0x11CF, 0xBA, 0xA1, 0x00, 0x00, 0x4C, 0x75, 0x2A, 0x9A, 3);
+
+//  Name:     System.Search.Rank -- PKEY_Search_Rank
+//  Type:     Int32 -- VT_I4
+//  FormatID: (FMTID_Query) 49691C90-7E17-101A-A91C-08002B2ECDA9, 3 (PROPID_QUERY_RANK)
+//  
+//  Relevance rank of row. Ranges from 0-1000. Larger numbers = better matches.  Query-time only, not 
+//  defined in Search schema, retrievable but not searchable.
+DEFINE_PROPERTYKEY(PKEY_Search_Rank, 0x49691C90, 0x7E17, 0x101A, 0xA9, 0x1C, 0x08, 0x00, 0x2B, 0x2E, 0xCD, 0xA9, 3);
+
+//  Name:     System.Search.Store -- PKEY_Search_Store
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: A06992B3-8CAF-4ED7-A547-B259E32AC9FC, 100
+//
+//  The identifier for the protocol handler that produced this item. (E.g. MAPI, CSC, FILE etc.)
+DEFINE_PROPERTYKEY(PKEY_Search_Store, 0xA06992B3, 0x8CAF, 0x4ED7, 0xA5, 0x47, 0xB2, 0x59, 0xE3, 0x2A, 0xC9, 0xFC, 100);
+
+//  Name:     System.Search.UrlToIndex -- PKEY_Search_UrlToIndex
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 0B63E343-9CCC-11D0-BCDB-00805FCCCE04, 2
+//
+//  This property should be emitted by a container IFilter for each child URL within the container.  The children will eventually be crawled by the indexer if they are within scope.
+DEFINE_PROPERTYKEY(PKEY_Search_UrlToIndex, 0x0B63E343, 0x9CCC, 0x11D0, 0xBC, 0xDB, 0x00, 0x80, 0x5F, 0xCC, 0xCE, 0x04, 2);
+
+//  Name:     System.Search.UrlToIndexWithModificationTime -- PKEY_Search_UrlToIndexWithModificationTime
+//  Type:     Multivalue Any -- VT_VECTOR | VT_NULL  (For variants: VT_ARRAY | VT_NULL)
+//  FormatID: 0B63E343-9CCC-11D0-BCDB-00805FCCCE04, 12
+//
+//  This property is the same as System.Search.UrlToIndex except that it includes the time the URL was last modified.  This is an optimization for the indexer as it doesn't have to call back into the protocol handler to ask for this information to determine if the content needs to be indexed again.  The property is a vector with two elements, a VT_LPWSTR with the URL and a VT_FILETIME for the last modified time.
+DEFINE_PROPERTYKEY(PKEY_Search_UrlToIndexWithModificationTime, 0x0B63E343, 0x9CCC, 0x11D0, 0xBC, 0xDB, 0x00, 0x80, 0x5F, 0xCC, 0xCE, 0x04, 12);
+ 
+//-----------------------------------------------------------------------------
+// Shell properties
+
+
+
+//  Name:     System.DescriptionID -- PKEY_DescriptionID
+//  Type:     Buffer -- VT_VECTOR | VT_UI1  (For variants: VT_ARRAY | VT_UI1)
+//  FormatID: (FMTID_ShellDetails) 28636AA6-953D-11D2-B5D6-00C04FD918D0, 2 (PID_DESCRIPTIONID)
+//
+//  The contents of a SHDESCRIPTIONID structure as a buffer of bytes.
+DEFINE_PROPERTYKEY(PKEY_DescriptionID, 0x28636AA6, 0x953D, 0x11D2, 0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0, 2);
+
+//  Name:     System.Link.TargetSFGAOFlagsStrings -- PKEY_Link_TargetSFGAOFlagsStrings
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: D6942081-D53B-443D-AD47-5E059D9CD27A, 3
+//  
+//  Expresses the SFGAO flags of a link as string values and is used as a query optimization.  See 
+//  PKEY_Shell_SFGAOFlagsStrings for possible values of this.
+DEFINE_PROPERTYKEY(PKEY_Link_TargetSFGAOFlagsStrings, 0xD6942081, 0xD53B, 0x443D, 0xAD, 0x47, 0x5E, 0x05, 0x9D, 0x9C, 0xD2, 0x7A, 3);
+
+//  Name:     System.Link.TargetUrl -- PKEY_Link_TargetUrl
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 5CBF2787-48CF-4208-B90E-EE5E5D420294, 2  (PKEYs relating to URLs.  Used by IE History.)
+DEFINE_PROPERTYKEY(PKEY_Link_TargetUrl, 0x5CBF2787, 0x48CF, 0x4208, 0xB9, 0x0E, 0xEE, 0x5E, 0x5D, 0x42, 0x02, 0x94, 2);
+
+//  Name:     System.Shell.SFGAOFlagsStrings -- PKEY_Shell_SFGAOFlagsStrings
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: D6942081-D53B-443D-AD47-5E059D9CD27A, 2
+//
+//  Expresses the SFGAO flags as string values and is used as a query optimization.
+DEFINE_PROPERTYKEY(PKEY_Shell_SFGAOFlagsStrings, 0xD6942081, 0xD53B, 0x443D, 0xAD, 0x47, 0x5E, 0x05, 0x9D, 0x9C, 0xD2, 0x7A, 2);
+
+// Possible discrete values for PKEY_Shell_SFGAOFlagsStrings are:
+#define SFGAOSTR_FILESYS                    L"filesys"               // SFGAO_FILESYSTEM
+#define SFGAOSTR_FILEANC                    L"fileanc"               // SFGAO_FILESYSANCESTOR
+#define SFGAOSTR_STORAGEANC                 L"storageanc"               // SFGAO_STORAGEANCESTOR
+#define SFGAOSTR_STREAM                     L"stream"               // SFGAO_STREAM
+#define SFGAOSTR_LINK                       L"link"               // SFGAO_LINK
+#define SFGAOSTR_HIDDEN                     L"hidden"               // SFGAO_HIDDEN
+#define SFGAOSTR_FOLDER                     L"folder"               // SFGAO_FOLDER
+#define SFGAOSTR_NONENUM                    L"nonenum"               // SFGAO_NONENUMERATED
+#define SFGAOSTR_BROWSABLE                  L"browsable"               // SFGAO_BROWSABLE
+ 
+//-----------------------------------------------------------------------------
+// Software properties
+
+
+
+//  Name:     System.Software.DateLastUsed -- PKEY_Software_DateLastUsed
+//  Type:     DateTime -- VT_FILETIME  (For variants: VT_DATE)
+//  FormatID: 841E4F90-FF59-4D16-8947-E81BBFFAB36D, 16
+//  
+//  
+DEFINE_PROPERTYKEY(PKEY_Software_DateLastUsed, 0x841E4F90, 0xFF59, 0x4D16, 0x89, 0x47, 0xE8, 0x1B, 0xBF, 0xFA, 0xB3, 0x6D, 16);
+
+//  Name:     System.Software.ProductName -- PKEY_Software_ProductName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (PSFMTID_VERSION) 0CEF7D53-FA64-11D1-A203-0000F81FEDEE, 7
+//  
+//  
+DEFINE_PROPERTYKEY(PKEY_Software_ProductName, 0x0CEF7D53, 0xFA64, 0x11D1, 0xA2, 0x03, 0x00, 0x00, 0xF8, 0x1F, 0xED, 0xEE, 7);
+ 
+//-----------------------------------------------------------------------------
+// Sync properties
+
+
+
+//  Name:     System.Sync.Comments -- PKEY_Sync_Comments
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 7BD5533E-AF15-44DB-B8C8-BD6624E1D032, 13
+DEFINE_PROPERTYKEY(PKEY_Sync_Comments, 0x7BD5533E, 0xAF15, 0x44DB, 0xB8, 0xC8, 0xBD, 0x66, 0x24, 0xE1, 0xD0, 0x32, 13);
+
+//  Name:     System.Sync.ConflictDescription -- PKEY_Sync_ConflictDescription
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: CE50C159-2FB8-41FD-BE68-D3E042E274BC, 4
+DEFINE_PROPERTYKEY(PKEY_Sync_ConflictDescription, 0xCE50C159, 0x2FB8, 0x41FD, 0xBE, 0x68, 0xD3, 0xE0, 0x42, 0xE2, 0x74, 0xBC, 4);
+
+//  Name:     System.Sync.ConflictFirstLocation -- PKEY_Sync_ConflictFirstLocation
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: CE50C159-2FB8-41FD-BE68-D3E042E274BC, 6
+DEFINE_PROPERTYKEY(PKEY_Sync_ConflictFirstLocation, 0xCE50C159, 0x2FB8, 0x41FD, 0xBE, 0x68, 0xD3, 0xE0, 0x42, 0xE2, 0x74, 0xBC, 6);
+
+//  Name:     System.Sync.ConflictSecondLocation -- PKEY_Sync_ConflictSecondLocation
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: CE50C159-2FB8-41FD-BE68-D3E042E274BC, 7
+DEFINE_PROPERTYKEY(PKEY_Sync_ConflictSecondLocation, 0xCE50C159, 0x2FB8, 0x41FD, 0xBE, 0x68, 0xD3, 0xE0, 0x42, 0xE2, 0x74, 0xBC, 7);
+
+//  Name:     System.Sync.HandlerCollectionID -- PKEY_Sync_HandlerCollectionID
+//  Type:     Guid -- VT_CLSID
+//  FormatID: 7BD5533E-AF15-44DB-B8C8-BD6624E1D032, 2
+DEFINE_PROPERTYKEY(PKEY_Sync_HandlerCollectionID, 0x7BD5533E, 0xAF15, 0x44DB, 0xB8, 0xC8, 0xBD, 0x66, 0x24, 0xE1, 0xD0, 0x32, 2);
+
+//  Name:     System.Sync.HandlerID -- PKEY_Sync_HandlerID
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 7BD5533E-AF15-44DB-B8C8-BD6624E1D032, 3
+DEFINE_PROPERTYKEY(PKEY_Sync_HandlerID, 0x7BD5533E, 0xAF15, 0x44DB, 0xB8, 0xC8, 0xBD, 0x66, 0x24, 0xE1, 0xD0, 0x32, 3);
+
+//  Name:     System.Sync.HandlerName -- PKEY_Sync_HandlerName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: CE50C159-2FB8-41FD-BE68-D3E042E274BC, 2
+DEFINE_PROPERTYKEY(PKEY_Sync_HandlerName, 0xCE50C159, 0x2FB8, 0x41FD, 0xBE, 0x68, 0xD3, 0xE0, 0x42, 0xE2, 0x74, 0xBC, 2);
+
+//  Name:     System.Sync.HandlerType -- PKEY_Sync_HandlerType
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: 7BD5533E-AF15-44DB-B8C8-BD6624E1D032, 8
+//  
+//  
+DEFINE_PROPERTYKEY(PKEY_Sync_HandlerType, 0x7BD5533E, 0xAF15, 0x44DB, 0xB8, 0xC8, 0xBD, 0x66, 0x24, 0xE1, 0xD0, 0x32, 8);
+
+// Possible discrete values for PKEY_Sync_HandlerType are:
+#define SYNC_HANDLERTYPE_OTHER              0ul
+#define SYNC_HANDLERTYPE_PROGRAMS           1ul
+#define SYNC_HANDLERTYPE_DEVICES            2ul
+#define SYNC_HANDLERTYPE_FOLDERS            3ul
+#define SYNC_HANDLERTYPE_WEBSERVICES        4ul
+#define SYNC_HANDLERTYPE_COMPUTERS          5ul
+
+//  Name:     System.Sync.HandlerTypeLabel -- PKEY_Sync_HandlerTypeLabel
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 7BD5533E-AF15-44DB-B8C8-BD6624E1D032, 9
+//  
+//  
+DEFINE_PROPERTYKEY(PKEY_Sync_HandlerTypeLabel, 0x7BD5533E, 0xAF15, 0x44DB, 0xB8, 0xC8, 0xBD, 0x66, 0x24, 0xE1, 0xD0, 0x32, 9);
+
+//  Name:     System.Sync.ItemID -- PKEY_Sync_ItemID
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 7BD5533E-AF15-44DB-B8C8-BD6624E1D032, 6
+DEFINE_PROPERTYKEY(PKEY_Sync_ItemID, 0x7BD5533E, 0xAF15, 0x44DB, 0xB8, 0xC8, 0xBD, 0x66, 0x24, 0xE1, 0xD0, 0x32, 6);
+
+//  Name:     System.Sync.ItemName -- PKEY_Sync_ItemName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: CE50C159-2FB8-41FD-BE68-D3E042E274BC, 3
+DEFINE_PROPERTYKEY(PKEY_Sync_ItemName, 0xCE50C159, 0x2FB8, 0x41FD, 0xBE, 0x68, 0xD3, 0xE0, 0x42, 0xE2, 0x74, 0xBC, 3);
+ 
+//-----------------------------------------------------------------------------
+// Task properties
+
+//  Name:     System.Task.BillingInformation -- PKEY_Task_BillingInformation
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: D37D52C6-261C-4303-82B3-08B926AC6F12, 100
+DEFINE_PROPERTYKEY(PKEY_Task_BillingInformation, 0xD37D52C6, 0x261C, 0x4303, 0x82, 0xB3, 0x08, 0xB9, 0x26, 0xAC, 0x6F, 0x12, 100);
+
+//  Name:     System.Task.CompletionStatus -- PKEY_Task_CompletionStatus
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 084D8A0A-E6D5-40DE-BF1F-C8820E7C877C, 100
+DEFINE_PROPERTYKEY(PKEY_Task_CompletionStatus, 0x084D8A0A, 0xE6D5, 0x40DE, 0xBF, 0x1F, 0xC8, 0x82, 0x0E, 0x7C, 0x87, 0x7C, 100);
+
+//  Name:     System.Task.Owner -- PKEY_Task_Owner
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: 08C7CC5F-60F2-4494-AD75-55E3E0B5ADD0, 100
+DEFINE_PROPERTYKEY(PKEY_Task_Owner, 0x08C7CC5F, 0x60F2, 0x4494, 0xAD, 0x75, 0x55, 0xE3, 0xE0, 0xB5, 0xAD, 0xD0, 100);
+
+ 
+ 
+//-----------------------------------------------------------------------------
+// Video properties
+
+//  Name:     System.Video.Compression -- PKEY_Video_Compression
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 10 (PIDVSI_COMPRESSION)
+//
+//  Indicates the level of compression for the video stream.  "Compression".
+DEFINE_PROPERTYKEY(PKEY_Video_Compression, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 10);
+
+//  Name:     System.Video.Director -- PKEY_Video_Director
+//  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)
+//  FormatID: (PSGUID_MEDIAFILESUMMARYINFORMATION) 64440492-4C8B-11D1-8B70-080036B11A03, 20 (PIDMSI_DIRECTOR)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Video_Director, 0x64440492, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 20);
+
+//  Name:     System.Video.EncodingBitrate -- PKEY_Video_EncodingBitrate
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 8 (PIDVSI_DATA_RATE)
+//
+//  Indicates the data rate in "bits per second" for the video stream. "DataRate".
+DEFINE_PROPERTYKEY(PKEY_Video_EncodingBitrate, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 8);
+
+//  Name:     System.Video.FourCC -- PKEY_Video_FourCC
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 44
+//  
+//  Indicates the 4CC for the video stream.
+DEFINE_PROPERTYKEY(PKEY_Video_FourCC, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 44);
+
+//  Name:     System.Video.FrameHeight -- PKEY_Video_FrameHeight
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 4
+//
+//  Indicates the frame height for the video stream.
+DEFINE_PROPERTYKEY(PKEY_Video_FrameHeight, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 4);
+
+//  Name:     System.Video.FrameRate -- PKEY_Video_FrameRate
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 6 (PIDVSI_FRAME_RATE)
+//
+//  Indicates the frame rate in "frames per millisecond" for the video stream.  "FrameRate".
+DEFINE_PROPERTYKEY(PKEY_Video_FrameRate, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 6);
+
+//  Name:     System.Video.FrameWidth -- PKEY_Video_FrameWidth
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 3
+//
+//  Indicates the frame width for the video stream.
+DEFINE_PROPERTYKEY(PKEY_Video_FrameWidth, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 3);
+
+//  Name:     System.Video.HorizontalAspectRatio -- PKEY_Video_HorizontalAspectRatio
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 42
+//  
+//  Indicates the horizontal portion of the aspect ratio. The X portion of XX:YY,
+//  like 16:9.
+DEFINE_PROPERTYKEY(PKEY_Video_HorizontalAspectRatio, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 42);
+
+//  Name:     System.Video.SampleSize -- PKEY_Video_SampleSize
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 9 (PIDVSI_SAMPLE_SIZE)
+//
+//  Indicates the sample size in bits for the video stream.  "SampleSize".
+DEFINE_PROPERTYKEY(PKEY_Video_SampleSize, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 9);
+
+//  Name:     System.Video.StreamName -- PKEY_Video_StreamName
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 2 (PIDVSI_STREAM_NAME)
+//
+//  Indicates the name for the video stream. "StreamName".
+DEFINE_PROPERTYKEY(PKEY_Video_StreamName, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 2);
+
+//  Name:     System.Video.StreamNumber -- PKEY_Video_StreamNumber
+//  Type:     UInt16 -- VT_UI2
+//  FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 11 (PIDVSI_STREAM_NUMBER)
+//
+//  "Stream Number".
+DEFINE_PROPERTYKEY(PKEY_Video_StreamNumber, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 11);
+
+//  Name:     System.Video.TotalBitrate -- PKEY_Video_TotalBitrate
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 43 (PIDVSI_TOTAL_BITRATE)
+//
+//  Indicates the total data rate in "bits per second" for all video and audio streams.
+DEFINE_PROPERTYKEY(PKEY_Video_TotalBitrate, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 43);
+
+//  Name:     System.Video.VerticalAspectRatio -- PKEY_Video_VerticalAspectRatio
+//  Type:     UInt32 -- VT_UI4
+//  FormatID: (FMTID_VideoSummaryInformation) 64440491-4C8B-11D1-8B70-080036B11A03, 45
+//  
+//  Indicates the vertical portion of the aspect ratio. The Y portion of 
+//  XX:YY, like 16:9.
+DEFINE_PROPERTYKEY(PKEY_Video_VerticalAspectRatio, 0x64440491, 0x4C8B, 0x11D1, 0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03, 45);
+
+ 
+ 
+//-----------------------------------------------------------------------------
+// Volume properties
+
+//  Name:     System.Volume.FileSystem -- PKEY_Volume_FileSystem
+//  Type:     String -- VT_LPWSTR  (For variants: VT_BSTR)
+//  FormatID: (FMTID_Volume) 9B174B35-40FF-11D2-A27E-00C04FC30871, 4 (PID_VOLUME_FILESYSTEM)  (Filesystem Volume Properties)
+//
+//  Indicates the filesystem of the volume.
+DEFINE_PROPERTYKEY(PKEY_Volume_FileSystem, 0x9B174B35, 0x40FF, 0x11D2, 0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71, 4);
+
+//  Name:     System.Volume.IsMappedDrive -- PKEY_Volume_IsMappedDrive
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: 149C0B69-2C2D-48FC-808F-D318D78C4636, 2
+DEFINE_PROPERTYKEY(PKEY_Volume_IsMappedDrive, 0x149C0B69, 0x2C2D, 0x48FC, 0x80, 0x8F, 0xD3, 0x18, 0xD7, 0x8C, 0x46, 0x36, 2);
+
+//  Name:     System.Volume.IsRoot -- PKEY_Volume_IsRoot
+//  Type:     Boolean -- VT_BOOL
+//  FormatID: (FMTID_Volume) 9B174B35-40FF-11D2-A27E-00C04FC30871, 10  (Filesystem Volume Properties)
+//
+//  
+DEFINE_PROPERTYKEY(PKEY_Volume_IsRoot, 0x9B174B35, 0x40FF, 0x11D2, 0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71, 10);
+
+#endif  /* _INC_PROPKEY */
+
+
+ portaudio/src/hostapi/wasapi/mingw-include/propkeydef.h view
@@ -0,0 +1,26 @@+#ifndef PID_FIRST_USABLE
+#define PID_FIRST_USABLE 2
+#endif
+
+#ifndef REFPROPERTYKEY
+#ifdef __cplusplus
+#define REFPROPERTYKEY const PROPERTYKEY &
+#else // !__cplusplus
+#define REFPROPERTYKEY const PROPERTYKEY * __MIDL_CONST
+#endif // __cplusplus
+#endif //REFPROPERTYKEY
+
+#ifdef DEFINE_PROPERTYKEY
+#undef DEFINE_PROPERTYKEY
+#endif
+
+#ifdef INITGUID
+#define DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) EXTERN_C const PROPERTYKEY DECLSPEC_SELECTANY name = { { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }, pid }
+#else
+#define DEFINE_PROPERTYKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) EXTERN_C const PROPERTYKEY name
+#endif // INITGUID
+
+#ifndef IsEqualPropertyKey
+#define IsEqualPropertyKey(a, b)   (((a).pid == (b).pid) && IsEqualIID((a).fmtid, (b).fmtid) )
+#endif  // IsEqualPropertyKey
+
+ portaudio/src/hostapi/wasapi/mingw-include/propsys.h view
@@ -0,0 +1,3605 @@+
+
+/* this ALWAYS GENERATED file contains the definitions for the interfaces */
+
+
+ /* File created by MIDL compiler version 7.00.0499 */
+/* Compiler settings for propsys.idl:
+    Oicf, W1, Zp8, env=Win32 (32b run)
+    protocol : dce , ms_ext, c_ext, robust
+    error checks: allocation ref bounds_check enum stub_data 
+    VC __declspec() decoration level: 
+         __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+         DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING(  )
+
+#pragma warning( disable: 4049 )  /* more than 64k source lines */
+
+
+/* verify that the <rpcndr.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+
+/* verify that the <rpcsal.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCSAL_H_VERSION__
+#define __REQUIRED_RPCSAL_H_VERSION__ 100
+#endif
+
+#include "rpc.h"
+#include "rpcndr.h"
+
+#ifndef __RPCNDR_H_VERSION__
+#error this stub requires an updated version of <rpcndr.h>
+#endif // __RPCNDR_H_VERSION__
+
+#ifndef COM_NO_WINDOWS_H
+#include "windows.h"
+#include "ole2.h"
+#endif /*COM_NO_WINDOWS_H*/
+
+#ifndef __propsys_h__
+#define __propsys_h__
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#pragma once
+#endif
+
+/* Forward Declarations */ 
+
+#ifndef __IInitializeWithFile_FWD_DEFINED__
+#define __IInitializeWithFile_FWD_DEFINED__
+typedef interface IInitializeWithFile IInitializeWithFile;
+#endif 	/* __IInitializeWithFile_FWD_DEFINED__ */
+
+
+#ifndef __IInitializeWithStream_FWD_DEFINED__
+#define __IInitializeWithStream_FWD_DEFINED__
+typedef interface IInitializeWithStream IInitializeWithStream;
+#endif 	/* __IInitializeWithStream_FWD_DEFINED__ */
+
+
+#ifndef __IPropertyStore_FWD_DEFINED__
+#define __IPropertyStore_FWD_DEFINED__
+typedef interface IPropertyStore IPropertyStore;
+#endif 	/* __IPropertyStore_FWD_DEFINED__ */
+
+
+#ifndef __INamedPropertyStore_FWD_DEFINED__
+#define __INamedPropertyStore_FWD_DEFINED__
+typedef interface INamedPropertyStore INamedPropertyStore;
+#endif 	/* __INamedPropertyStore_FWD_DEFINED__ */
+
+
+#ifndef __IObjectWithPropertyKey_FWD_DEFINED__
+#define __IObjectWithPropertyKey_FWD_DEFINED__
+typedef interface IObjectWithPropertyKey IObjectWithPropertyKey;
+#endif 	/* __IObjectWithPropertyKey_FWD_DEFINED__ */
+
+
+#ifndef __IPropertyChange_FWD_DEFINED__
+#define __IPropertyChange_FWD_DEFINED__
+typedef interface IPropertyChange IPropertyChange;
+#endif 	/* __IPropertyChange_FWD_DEFINED__ */
+
+
+#ifndef __IPropertyChangeArray_FWD_DEFINED__
+#define __IPropertyChangeArray_FWD_DEFINED__
+typedef interface IPropertyChangeArray IPropertyChangeArray;
+#endif 	/* __IPropertyChangeArray_FWD_DEFINED__ */
+
+
+#ifndef __IPropertyStoreCapabilities_FWD_DEFINED__
+#define __IPropertyStoreCapabilities_FWD_DEFINED__
+typedef interface IPropertyStoreCapabilities IPropertyStoreCapabilities;
+#endif 	/* __IPropertyStoreCapabilities_FWD_DEFINED__ */
+
+
+#ifndef __IPropertyStoreCache_FWD_DEFINED__
+#define __IPropertyStoreCache_FWD_DEFINED__
+typedef interface IPropertyStoreCache IPropertyStoreCache;
+#endif 	/* __IPropertyStoreCache_FWD_DEFINED__ */
+
+
+#ifndef __IPropertyEnumType_FWD_DEFINED__
+#define __IPropertyEnumType_FWD_DEFINED__
+typedef interface IPropertyEnumType IPropertyEnumType;
+#endif 	/* __IPropertyEnumType_FWD_DEFINED__ */
+
+
+#ifndef __IPropertyEnumTypeList_FWD_DEFINED__
+#define __IPropertyEnumTypeList_FWD_DEFINED__
+typedef interface IPropertyEnumTypeList IPropertyEnumTypeList;
+#endif 	/* __IPropertyEnumTypeList_FWD_DEFINED__ */
+
+
+#ifndef __IPropertyDescription_FWD_DEFINED__
+#define __IPropertyDescription_FWD_DEFINED__
+typedef interface IPropertyDescription IPropertyDescription;
+#endif 	/* __IPropertyDescription_FWD_DEFINED__ */
+
+
+#ifndef __IPropertyDescriptionAliasInfo_FWD_DEFINED__
+#define __IPropertyDescriptionAliasInfo_FWD_DEFINED__
+typedef interface IPropertyDescriptionAliasInfo IPropertyDescriptionAliasInfo;
+#endif 	/* __IPropertyDescriptionAliasInfo_FWD_DEFINED__ */
+
+
+#ifndef __IPropertyDescriptionSearchInfo_FWD_DEFINED__
+#define __IPropertyDescriptionSearchInfo_FWD_DEFINED__
+typedef interface IPropertyDescriptionSearchInfo IPropertyDescriptionSearchInfo;
+#endif 	/* __IPropertyDescriptionSearchInfo_FWD_DEFINED__ */
+
+
+#ifndef __IPropertySystem_FWD_DEFINED__
+#define __IPropertySystem_FWD_DEFINED__
+typedef interface IPropertySystem IPropertySystem;
+#endif 	/* __IPropertySystem_FWD_DEFINED__ */
+
+
+#ifndef __IPropertyDescriptionList_FWD_DEFINED__
+#define __IPropertyDescriptionList_FWD_DEFINED__
+typedef interface IPropertyDescriptionList IPropertyDescriptionList;
+#endif 	/* __IPropertyDescriptionList_FWD_DEFINED__ */
+
+
+#ifndef __IPropertyStoreFactory_FWD_DEFINED__
+#define __IPropertyStoreFactory_FWD_DEFINED__
+typedef interface IPropertyStoreFactory IPropertyStoreFactory;
+#endif 	/* __IPropertyStoreFactory_FWD_DEFINED__ */
+
+
+#ifndef __IDelayedPropertyStoreFactory_FWD_DEFINED__
+#define __IDelayedPropertyStoreFactory_FWD_DEFINED__
+typedef interface IDelayedPropertyStoreFactory IDelayedPropertyStoreFactory;
+#endif 	/* __IDelayedPropertyStoreFactory_FWD_DEFINED__ */
+
+
+#ifndef __IPersistSerializedPropStorage_FWD_DEFINED__
+#define __IPersistSerializedPropStorage_FWD_DEFINED__
+typedef interface IPersistSerializedPropStorage IPersistSerializedPropStorage;
+#endif 	/* __IPersistSerializedPropStorage_FWD_DEFINED__ */
+
+
+#ifndef __IPropertySystemChangeNotify_FWD_DEFINED__
+#define __IPropertySystemChangeNotify_FWD_DEFINED__
+typedef interface IPropertySystemChangeNotify IPropertySystemChangeNotify;
+#endif 	/* __IPropertySystemChangeNotify_FWD_DEFINED__ */
+
+
+#ifndef __ICreateObject_FWD_DEFINED__
+#define __ICreateObject_FWD_DEFINED__
+typedef interface ICreateObject ICreateObject;
+#endif 	/* __ICreateObject_FWD_DEFINED__ */
+
+
+#ifndef __InMemoryPropertyStore_FWD_DEFINED__
+#define __InMemoryPropertyStore_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class InMemoryPropertyStore InMemoryPropertyStore;
+#else
+typedef struct InMemoryPropertyStore InMemoryPropertyStore;
+#endif /* __cplusplus */
+
+#endif 	/* __InMemoryPropertyStore_FWD_DEFINED__ */
+
+
+#ifndef __PropertySystem_FWD_DEFINED__
+#define __PropertySystem_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class PropertySystem PropertySystem;
+#else
+typedef struct PropertySystem PropertySystem;
+#endif /* __cplusplus */
+
+#endif 	/* __PropertySystem_FWD_DEFINED__ */
+
+
+/* header files for imported files */
+#include "objidl.h"
+#include "oleidl.h"
+#include "ocidl.h"
+#include "shtypes.h"
+#include "structuredquery.h"
+
+#ifdef __cplusplus
+extern "C"{
+#endif 
+
+
+/* interface __MIDL_itf_propsys_0000_0000 */
+/* [local] */ 
+
+#ifndef PSSTDAPI
+#if defined(_PROPSYS_)
+#define PSSTDAPI          STDAPI
+#define PSSTDAPI_(type)   STDAPI_(type)
+#else
+#define PSSTDAPI          EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE
+#define PSSTDAPI_(type)   EXTERN_C DECLSPEC_IMPORT type STDAPICALLTYPE
+#endif
+#endif // PSSTDAPI
+#if 0
+typedef PROPERTYKEY *REFPROPERTYKEY;
+
+#endif // 0
+#include <propkeydef.h>
+
+
+extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0000_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0000_v0_0_s_ifspec;
+
+#ifndef __IInitializeWithFile_INTERFACE_DEFINED__
+#define __IInitializeWithFile_INTERFACE_DEFINED__
+
+/* interface IInitializeWithFile */
+/* [unique][object][uuid] */ 
+
+
+EXTERN_C const IID IID_IInitializeWithFile;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("b7d14566-0509-4cce-a71f-0a554233bd9b")
+    IInitializeWithFile : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE Initialize( 
+            /* [string][in] */ __RPC__in LPCWSTR pszFilePath,
+            /* [in] */ DWORD grfMode) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IInitializeWithFileVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IInitializeWithFile * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IInitializeWithFile * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IInitializeWithFile * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *Initialize )( 
+            IInitializeWithFile * This,
+            /* [string][in] */ __RPC__in LPCWSTR pszFilePath,
+            /* [in] */ DWORD grfMode);
+        
+        END_INTERFACE
+    } IInitializeWithFileVtbl;
+
+    interface IInitializeWithFile
+    {
+        CONST_VTBL struct IInitializeWithFileVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IInitializeWithFile_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IInitializeWithFile_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IInitializeWithFile_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IInitializeWithFile_Initialize(This,pszFilePath,grfMode)	\
+    ( (This)->lpVtbl -> Initialize(This,pszFilePath,grfMode) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IInitializeWithFile_INTERFACE_DEFINED__ */
+
+
+#ifndef __IInitializeWithStream_INTERFACE_DEFINED__
+#define __IInitializeWithStream_INTERFACE_DEFINED__
+
+/* interface IInitializeWithStream */
+/* [unique][object][uuid] */ 
+
+
+EXTERN_C const IID IID_IInitializeWithStream;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("b824b49d-22ac-4161-ac8a-9916e8fa3f7f")
+    IInitializeWithStream : public IUnknown
+    {
+    public:
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE Initialize( 
+            /* [in] */ IStream *pstream,
+            /* [in] */ DWORD grfMode) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IInitializeWithStreamVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IInitializeWithStream * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IInitializeWithStream * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IInitializeWithStream * This);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Initialize )( 
+            IInitializeWithStream * This,
+            /* [in] */ IStream *pstream,
+            /* [in] */ DWORD grfMode);
+        
+        END_INTERFACE
+    } IInitializeWithStreamVtbl;
+
+    interface IInitializeWithStream
+    {
+        CONST_VTBL struct IInitializeWithStreamVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IInitializeWithStream_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IInitializeWithStream_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IInitializeWithStream_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IInitializeWithStream_Initialize(This,pstream,grfMode)	\
+    ( (This)->lpVtbl -> Initialize(This,pstream,grfMode) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+/* [call_as] */ HRESULT STDMETHODCALLTYPE IInitializeWithStream_RemoteInitialize_Proxy( 
+    IInitializeWithStream * This,
+    /* [in] */ __RPC__in_opt IStream *pstream,
+    /* [in] */ DWORD grfMode);
+
+
+void __RPC_STUB IInitializeWithStream_RemoteInitialize_Stub(
+    IRpcStubBuffer *This,
+    IRpcChannelBuffer *_pRpcChannelBuffer,
+    PRPC_MESSAGE _pRpcMessage,
+    DWORD *_pdwStubPhase);
+
+
+
+#endif 	/* __IInitializeWithStream_INTERFACE_DEFINED__ */
+
+
+#ifndef __IPropertyStore_INTERFACE_DEFINED__
+#define __IPropertyStore_INTERFACE_DEFINED__
+
+/* interface IPropertyStore */
+/* [unique][object][helpstring][uuid] */ 
+
+
+EXTERN_C const IID IID_IPropertyStore;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("886d8eeb-8cf2-4446-8d02-cdba1dbdcf99")
+    IPropertyStore : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetCount( 
+            /* [out] */ __RPC__out DWORD *cProps) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetAt( 
+            /* [in] */ DWORD iProp,
+            /* [out] */ __RPC__out PROPERTYKEY *pkey) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetValue( 
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [out] */ __RPC__out PROPVARIANT *pv) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE SetValue( 
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE Commit( void) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPropertyStoreVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPropertyStore * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPropertyStore * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPropertyStore * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetCount )( 
+            IPropertyStore * This,
+            /* [out] */ __RPC__out DWORD *cProps);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetAt )( 
+            IPropertyStore * This,
+            /* [in] */ DWORD iProp,
+            /* [out] */ __RPC__out PROPERTYKEY *pkey);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetValue )( 
+            IPropertyStore * This,
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [out] */ __RPC__out PROPVARIANT *pv);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetValue )( 
+            IPropertyStore * This,
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar);
+        
+        HRESULT ( STDMETHODCALLTYPE *Commit )( 
+            IPropertyStore * This);
+        
+        END_INTERFACE
+    } IPropertyStoreVtbl;
+
+    interface IPropertyStore
+    {
+        CONST_VTBL struct IPropertyStoreVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPropertyStore_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPropertyStore_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPropertyStore_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPropertyStore_GetCount(This,cProps)	\
+    ( (This)->lpVtbl -> GetCount(This,cProps) ) 
+
+#define IPropertyStore_GetAt(This,iProp,pkey)	\
+    ( (This)->lpVtbl -> GetAt(This,iProp,pkey) ) 
+
+#define IPropertyStore_GetValue(This,key,pv)	\
+    ( (This)->lpVtbl -> GetValue(This,key,pv) ) 
+
+#define IPropertyStore_SetValue(This,key,propvar)	\
+    ( (This)->lpVtbl -> SetValue(This,key,propvar) ) 
+
+#define IPropertyStore_Commit(This)	\
+    ( (This)->lpVtbl -> Commit(This) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPropertyStore_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_propsys_0000_0003 */
+/* [local] */ 
+
+typedef /* [unique] */  __RPC_unique_pointer IPropertyStore *LPPROPERTYSTORE;
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0003_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0003_v0_0_s_ifspec;
+
+#ifndef __INamedPropertyStore_INTERFACE_DEFINED__
+#define __INamedPropertyStore_INTERFACE_DEFINED__
+
+/* interface INamedPropertyStore */
+/* [unique][object][uuid] */ 
+
+
+EXTERN_C const IID IID_INamedPropertyStore;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("71604b0f-97b0-4764-8577-2f13e98a1422")
+    INamedPropertyStore : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetNamedValue( 
+            /* [string][in] */ __RPC__in LPCWSTR pszName,
+            /* [out] */ __RPC__out PROPVARIANT *ppropvar) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE SetNamedValue( 
+            /* [string][in] */ __RPC__in LPCWSTR pszName,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetNameCount( 
+            /* [out] */ __RPC__out DWORD *pdwCount) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetNameAt( 
+            /* [in] */ DWORD iProp,
+            /* [out] */ __RPC__deref_out_opt BSTR *pbstrName) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct INamedPropertyStoreVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            INamedPropertyStore * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            INamedPropertyStore * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            INamedPropertyStore * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetNamedValue )( 
+            INamedPropertyStore * This,
+            /* [string][in] */ __RPC__in LPCWSTR pszName,
+            /* [out] */ __RPC__out PROPVARIANT *ppropvar);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetNamedValue )( 
+            INamedPropertyStore * This,
+            /* [string][in] */ __RPC__in LPCWSTR pszName,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetNameCount )( 
+            INamedPropertyStore * This,
+            /* [out] */ __RPC__out DWORD *pdwCount);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetNameAt )( 
+            INamedPropertyStore * This,
+            /* [in] */ DWORD iProp,
+            /* [out] */ __RPC__deref_out_opt BSTR *pbstrName);
+        
+        END_INTERFACE
+    } INamedPropertyStoreVtbl;
+
+    interface INamedPropertyStore
+    {
+        CONST_VTBL struct INamedPropertyStoreVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define INamedPropertyStore_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define INamedPropertyStore_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define INamedPropertyStore_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define INamedPropertyStore_GetNamedValue(This,pszName,ppropvar)	\
+    ( (This)->lpVtbl -> GetNamedValue(This,pszName,ppropvar) ) 
+
+#define INamedPropertyStore_SetNamedValue(This,pszName,propvar)	\
+    ( (This)->lpVtbl -> SetNamedValue(This,pszName,propvar) ) 
+
+#define INamedPropertyStore_GetNameCount(This,pdwCount)	\
+    ( (This)->lpVtbl -> GetNameCount(This,pdwCount) ) 
+
+#define INamedPropertyStore_GetNameAt(This,iProp,pbstrName)	\
+    ( (This)->lpVtbl -> GetNameAt(This,iProp,pbstrName) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __INamedPropertyStore_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_propsys_0000_0004 */
+/* [local] */ 
+
+/* [v1_enum] */ 
+enum tagGETPROPERTYSTOREFLAGS
+    {	GPS_DEFAULT	= 0,
+	GPS_HANDLERPROPERTIESONLY	= 0x1,
+	GPS_READWRITE	= 0x2,
+	GPS_TEMPORARY	= 0x4,
+	GPS_FASTPROPERTIESONLY	= 0x8,
+	GPS_OPENSLOWITEM	= 0x10,
+	GPS_DELAYCREATION	= 0x20,
+	GPS_BESTEFFORT	= 0x40,
+	GPS_MASK_VALID	= 0x7f
+    } ;
+typedef int GETPROPERTYSTOREFLAGS;
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0004_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0004_v0_0_s_ifspec;
+
+#ifndef __IObjectWithPropertyKey_INTERFACE_DEFINED__
+#define __IObjectWithPropertyKey_INTERFACE_DEFINED__
+
+/* interface IObjectWithPropertyKey */
+/* [uuid][object] */ 
+
+
+EXTERN_C const IID IID_IObjectWithPropertyKey;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("fc0ca0a7-c316-4fd2-9031-3e628e6d4f23")
+    IObjectWithPropertyKey : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE SetPropertyKey( 
+            /* [in] */ __RPC__in REFPROPERTYKEY key) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetPropertyKey( 
+            /* [out] */ __RPC__out PROPERTYKEY *pkey) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IObjectWithPropertyKeyVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IObjectWithPropertyKey * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IObjectWithPropertyKey * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IObjectWithPropertyKey * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetPropertyKey )( 
+            IObjectWithPropertyKey * This,
+            /* [in] */ __RPC__in REFPROPERTYKEY key);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPropertyKey )( 
+            IObjectWithPropertyKey * This,
+            /* [out] */ __RPC__out PROPERTYKEY *pkey);
+        
+        END_INTERFACE
+    } IObjectWithPropertyKeyVtbl;
+
+    interface IObjectWithPropertyKey
+    {
+        CONST_VTBL struct IObjectWithPropertyKeyVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IObjectWithPropertyKey_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IObjectWithPropertyKey_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IObjectWithPropertyKey_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IObjectWithPropertyKey_SetPropertyKey(This,key)	\
+    ( (This)->lpVtbl -> SetPropertyKey(This,key) ) 
+
+#define IObjectWithPropertyKey_GetPropertyKey(This,pkey)	\
+    ( (This)->lpVtbl -> GetPropertyKey(This,pkey) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IObjectWithPropertyKey_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_propsys_0000_0005 */
+/* [local] */ 
+
+typedef /* [v1_enum] */ 
+enum tagPKA_FLAGS
+    {	PKA_SET	= 0,
+	PKA_APPEND	= ( PKA_SET + 1 ) ,
+	PKA_DELETE	= ( PKA_APPEND + 1 ) 
+    } 	PKA_FLAGS;
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0005_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0005_v0_0_s_ifspec;
+
+#ifndef __IPropertyChange_INTERFACE_DEFINED__
+#define __IPropertyChange_INTERFACE_DEFINED__
+
+/* interface IPropertyChange */
+/* [unique][object][uuid] */ 
+
+
+EXTERN_C const IID IID_IPropertyChange;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("f917bc8a-1bba-4478-a245-1bde03eb9431")
+    IPropertyChange : public IObjectWithPropertyKey
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE ApplyToPropVariant( 
+            /* [in] */ __RPC__in REFPROPVARIANT propvarIn,
+            /* [out] */ __RPC__out PROPVARIANT *ppropvarOut) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPropertyChangeVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPropertyChange * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPropertyChange * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPropertyChange * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetPropertyKey )( 
+            IPropertyChange * This,
+            /* [in] */ __RPC__in REFPROPERTYKEY key);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPropertyKey )( 
+            IPropertyChange * This,
+            /* [out] */ __RPC__out PROPERTYKEY *pkey);
+        
+        HRESULT ( STDMETHODCALLTYPE *ApplyToPropVariant )( 
+            IPropertyChange * This,
+            /* [in] */ __RPC__in REFPROPVARIANT propvarIn,
+            /* [out] */ __RPC__out PROPVARIANT *ppropvarOut);
+        
+        END_INTERFACE
+    } IPropertyChangeVtbl;
+
+    interface IPropertyChange
+    {
+        CONST_VTBL struct IPropertyChangeVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPropertyChange_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPropertyChange_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPropertyChange_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPropertyChange_SetPropertyKey(This,key)	\
+    ( (This)->lpVtbl -> SetPropertyKey(This,key) ) 
+
+#define IPropertyChange_GetPropertyKey(This,pkey)	\
+    ( (This)->lpVtbl -> GetPropertyKey(This,pkey) ) 
+
+
+#define IPropertyChange_ApplyToPropVariant(This,propvarIn,ppropvarOut)	\
+    ( (This)->lpVtbl -> ApplyToPropVariant(This,propvarIn,ppropvarOut) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPropertyChange_INTERFACE_DEFINED__ */
+
+
+#ifndef __IPropertyChangeArray_INTERFACE_DEFINED__
+#define __IPropertyChangeArray_INTERFACE_DEFINED__
+
+/* interface IPropertyChangeArray */
+/* [unique][object][uuid] */ 
+
+
+EXTERN_C const IID IID_IPropertyChangeArray;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("380f5cad-1b5e-42f2-805d-637fd392d31e")
+    IPropertyChangeArray : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetCount( 
+            /* [out] */ __RPC__out UINT *pcOperations) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetAt( 
+            /* [in] */ UINT iIndex,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE InsertAt( 
+            /* [in] */ UINT iIndex,
+            /* [in] */ __RPC__in_opt IPropertyChange *ppropChange) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE Append( 
+            /* [in] */ __RPC__in_opt IPropertyChange *ppropChange) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE AppendOrReplace( 
+            /* [in] */ __RPC__in_opt IPropertyChange *ppropChange) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE RemoveAt( 
+            /* [in] */ UINT iIndex) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE IsKeyInArray( 
+            /* [in] */ __RPC__in REFPROPERTYKEY key) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPropertyChangeArrayVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPropertyChangeArray * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPropertyChangeArray * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPropertyChangeArray * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetCount )( 
+            IPropertyChangeArray * This,
+            /* [out] */ __RPC__out UINT *pcOperations);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetAt )( 
+            IPropertyChangeArray * This,
+            /* [in] */ UINT iIndex,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        HRESULT ( STDMETHODCALLTYPE *InsertAt )( 
+            IPropertyChangeArray * This,
+            /* [in] */ UINT iIndex,
+            /* [in] */ __RPC__in_opt IPropertyChange *ppropChange);
+        
+        HRESULT ( STDMETHODCALLTYPE *Append )( 
+            IPropertyChangeArray * This,
+            /* [in] */ __RPC__in_opt IPropertyChange *ppropChange);
+        
+        HRESULT ( STDMETHODCALLTYPE *AppendOrReplace )( 
+            IPropertyChangeArray * This,
+            /* [in] */ __RPC__in_opt IPropertyChange *ppropChange);
+        
+        HRESULT ( STDMETHODCALLTYPE *RemoveAt )( 
+            IPropertyChangeArray * This,
+            /* [in] */ UINT iIndex);
+        
+        HRESULT ( STDMETHODCALLTYPE *IsKeyInArray )( 
+            IPropertyChangeArray * This,
+            /* [in] */ __RPC__in REFPROPERTYKEY key);
+        
+        END_INTERFACE
+    } IPropertyChangeArrayVtbl;
+
+    interface IPropertyChangeArray
+    {
+        CONST_VTBL struct IPropertyChangeArrayVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPropertyChangeArray_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPropertyChangeArray_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPropertyChangeArray_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPropertyChangeArray_GetCount(This,pcOperations)	\
+    ( (This)->lpVtbl -> GetCount(This,pcOperations) ) 
+
+#define IPropertyChangeArray_GetAt(This,iIndex,riid,ppv)	\
+    ( (This)->lpVtbl -> GetAt(This,iIndex,riid,ppv) ) 
+
+#define IPropertyChangeArray_InsertAt(This,iIndex,ppropChange)	\
+    ( (This)->lpVtbl -> InsertAt(This,iIndex,ppropChange) ) 
+
+#define IPropertyChangeArray_Append(This,ppropChange)	\
+    ( (This)->lpVtbl -> Append(This,ppropChange) ) 
+
+#define IPropertyChangeArray_AppendOrReplace(This,ppropChange)	\
+    ( (This)->lpVtbl -> AppendOrReplace(This,ppropChange) ) 
+
+#define IPropertyChangeArray_RemoveAt(This,iIndex)	\
+    ( (This)->lpVtbl -> RemoveAt(This,iIndex) ) 
+
+#define IPropertyChangeArray_IsKeyInArray(This,key)	\
+    ( (This)->lpVtbl -> IsKeyInArray(This,key) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPropertyChangeArray_INTERFACE_DEFINED__ */
+
+
+#ifndef __IPropertyStoreCapabilities_INTERFACE_DEFINED__
+#define __IPropertyStoreCapabilities_INTERFACE_DEFINED__
+
+/* interface IPropertyStoreCapabilities */
+/* [unique][object][uuid] */ 
+
+
+EXTERN_C const IID IID_IPropertyStoreCapabilities;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("c8e2d566-186e-4d49-bf41-6909ead56acc")
+    IPropertyStoreCapabilities : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE IsPropertyWritable( 
+            /* [in] */ __RPC__in REFPROPERTYKEY key) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPropertyStoreCapabilitiesVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPropertyStoreCapabilities * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPropertyStoreCapabilities * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPropertyStoreCapabilities * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *IsPropertyWritable )( 
+            IPropertyStoreCapabilities * This,
+            /* [in] */ __RPC__in REFPROPERTYKEY key);
+        
+        END_INTERFACE
+    } IPropertyStoreCapabilitiesVtbl;
+
+    interface IPropertyStoreCapabilities
+    {
+        CONST_VTBL struct IPropertyStoreCapabilitiesVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPropertyStoreCapabilities_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPropertyStoreCapabilities_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPropertyStoreCapabilities_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPropertyStoreCapabilities_IsPropertyWritable(This,key)	\
+    ( (This)->lpVtbl -> IsPropertyWritable(This,key) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPropertyStoreCapabilities_INTERFACE_DEFINED__ */
+
+
+#ifndef __IPropertyStoreCache_INTERFACE_DEFINED__
+#define __IPropertyStoreCache_INTERFACE_DEFINED__
+
+/* interface IPropertyStoreCache */
+/* [unique][object][uuid] */ 
+
+typedef /* [v1_enum] */ 
+enum _PSC_STATE
+    {	PSC_NORMAL	= 0,
+	PSC_NOTINSOURCE	= 1,
+	PSC_DIRTY	= 2,
+	PSC_READONLY	= 3
+    } 	PSC_STATE;
+
+
+EXTERN_C const IID IID_IPropertyStoreCache;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("3017056d-9a91-4e90-937d-746c72abbf4f")
+    IPropertyStoreCache : public IPropertyStore
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetState( 
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [out] */ __RPC__out PSC_STATE *pstate) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetValueAndState( 
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [out] */ __RPC__out PROPVARIANT *ppropvar,
+            /* [out] */ __RPC__out PSC_STATE *pstate) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE SetState( 
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [in] */ PSC_STATE state) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE SetValueAndState( 
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [unique][in] */ __RPC__in_opt const PROPVARIANT *ppropvar,
+            /* [in] */ PSC_STATE state) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPropertyStoreCacheVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPropertyStoreCache * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPropertyStoreCache * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPropertyStoreCache * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetCount )( 
+            IPropertyStoreCache * This,
+            /* [out] */ __RPC__out DWORD *cProps);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetAt )( 
+            IPropertyStoreCache * This,
+            /* [in] */ DWORD iProp,
+            /* [out] */ __RPC__out PROPERTYKEY *pkey);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetValue )( 
+            IPropertyStoreCache * This,
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [out] */ __RPC__out PROPVARIANT *pv);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetValue )( 
+            IPropertyStoreCache * This,
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar);
+        
+        HRESULT ( STDMETHODCALLTYPE *Commit )( 
+            IPropertyStoreCache * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetState )( 
+            IPropertyStoreCache * This,
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [out] */ __RPC__out PSC_STATE *pstate);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetValueAndState )( 
+            IPropertyStoreCache * This,
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [out] */ __RPC__out PROPVARIANT *ppropvar,
+            /* [out] */ __RPC__out PSC_STATE *pstate);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetState )( 
+            IPropertyStoreCache * This,
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [in] */ PSC_STATE state);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetValueAndState )( 
+            IPropertyStoreCache * This,
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [unique][in] */ __RPC__in_opt const PROPVARIANT *ppropvar,
+            /* [in] */ PSC_STATE state);
+        
+        END_INTERFACE
+    } IPropertyStoreCacheVtbl;
+
+    interface IPropertyStoreCache
+    {
+        CONST_VTBL struct IPropertyStoreCacheVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPropertyStoreCache_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPropertyStoreCache_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPropertyStoreCache_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPropertyStoreCache_GetCount(This,cProps)	\
+    ( (This)->lpVtbl -> GetCount(This,cProps) ) 
+
+#define IPropertyStoreCache_GetAt(This,iProp,pkey)	\
+    ( (This)->lpVtbl -> GetAt(This,iProp,pkey) ) 
+
+#define IPropertyStoreCache_GetValue(This,key,pv)	\
+    ( (This)->lpVtbl -> GetValue(This,key,pv) ) 
+
+#define IPropertyStoreCache_SetValue(This,key,propvar)	\
+    ( (This)->lpVtbl -> SetValue(This,key,propvar) ) 
+
+#define IPropertyStoreCache_Commit(This)	\
+    ( (This)->lpVtbl -> Commit(This) ) 
+
+
+#define IPropertyStoreCache_GetState(This,key,pstate)	\
+    ( (This)->lpVtbl -> GetState(This,key,pstate) ) 
+
+#define IPropertyStoreCache_GetValueAndState(This,key,ppropvar,pstate)	\
+    ( (This)->lpVtbl -> GetValueAndState(This,key,ppropvar,pstate) ) 
+
+#define IPropertyStoreCache_SetState(This,key,state)	\
+    ( (This)->lpVtbl -> SetState(This,key,state) ) 
+
+#define IPropertyStoreCache_SetValueAndState(This,key,ppropvar,state)	\
+    ( (This)->lpVtbl -> SetValueAndState(This,key,ppropvar,state) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPropertyStoreCache_INTERFACE_DEFINED__ */
+
+
+#ifndef __IPropertyEnumType_INTERFACE_DEFINED__
+#define __IPropertyEnumType_INTERFACE_DEFINED__
+
+/* interface IPropertyEnumType */
+/* [unique][object][uuid] */ 
+
+/* [v1_enum] */ 
+enum tagPROPENUMTYPE
+    {	PET_DISCRETEVALUE	= 0,
+	PET_RANGEDVALUE	= 1,
+	PET_DEFAULTVALUE	= 2,
+	PET_ENDRANGE	= 3
+    } ;
+typedef enum tagPROPENUMTYPE PROPENUMTYPE;
+
+
+EXTERN_C const IID IID_IPropertyEnumType;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("11e1fbf9-2d56-4a6b-8db3-7cd193a471f2")
+    IPropertyEnumType : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetEnumType( 
+            /* [out] */ __RPC__out PROPENUMTYPE *penumtype) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetValue( 
+            /* [out] */ __RPC__out PROPVARIANT *ppropvar) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetRangeMinValue( 
+            /* [out] */ __RPC__out PROPVARIANT *ppropvarMin) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetRangeSetValue( 
+            /* [out] */ __RPC__out PROPVARIANT *ppropvarSet) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetDisplayText( 
+            /* [out] */ __RPC__deref_out_opt LPWSTR *ppszDisplay) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPropertyEnumTypeVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPropertyEnumType * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPropertyEnumType * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPropertyEnumType * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetEnumType )( 
+            IPropertyEnumType * This,
+            /* [out] */ __RPC__out PROPENUMTYPE *penumtype);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetValue )( 
+            IPropertyEnumType * This,
+            /* [out] */ __RPC__out PROPVARIANT *ppropvar);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetRangeMinValue )( 
+            IPropertyEnumType * This,
+            /* [out] */ __RPC__out PROPVARIANT *ppropvarMin);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetRangeSetValue )( 
+            IPropertyEnumType * This,
+            /* [out] */ __RPC__out PROPVARIANT *ppropvarSet);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetDisplayText )( 
+            IPropertyEnumType * This,
+            /* [out] */ __RPC__deref_out_opt LPWSTR *ppszDisplay);
+        
+        END_INTERFACE
+    } IPropertyEnumTypeVtbl;
+
+    interface IPropertyEnumType
+    {
+        CONST_VTBL struct IPropertyEnumTypeVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPropertyEnumType_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPropertyEnumType_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPropertyEnumType_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPropertyEnumType_GetEnumType(This,penumtype)	\
+    ( (This)->lpVtbl -> GetEnumType(This,penumtype) ) 
+
+#define IPropertyEnumType_GetValue(This,ppropvar)	\
+    ( (This)->lpVtbl -> GetValue(This,ppropvar) ) 
+
+#define IPropertyEnumType_GetRangeMinValue(This,ppropvarMin)	\
+    ( (This)->lpVtbl -> GetRangeMinValue(This,ppropvarMin) ) 
+
+#define IPropertyEnumType_GetRangeSetValue(This,ppropvarSet)	\
+    ( (This)->lpVtbl -> GetRangeSetValue(This,ppropvarSet) ) 
+
+#define IPropertyEnumType_GetDisplayText(This,ppszDisplay)	\
+    ( (This)->lpVtbl -> GetDisplayText(This,ppszDisplay) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPropertyEnumType_INTERFACE_DEFINED__ */
+
+
+#ifndef __IPropertyEnumTypeList_INTERFACE_DEFINED__
+#define __IPropertyEnumTypeList_INTERFACE_DEFINED__
+
+/* interface IPropertyEnumTypeList */
+/* [unique][object][uuid] */ 
+
+
+EXTERN_C const IID IID_IPropertyEnumTypeList;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("a99400f4-3d84-4557-94ba-1242fb2cc9a6")
+    IPropertyEnumTypeList : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetCount( 
+            /* [out] */ __RPC__out UINT *pctypes) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetAt( 
+            /* [in] */ UINT itype,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetConditionAt( 
+            /* [in] */ UINT nIndex,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE FindMatchingIndex( 
+            /* [in] */ __RPC__in REFPROPVARIANT propvarCmp,
+            /* [out] */ __RPC__out UINT *pnIndex) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPropertyEnumTypeListVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPropertyEnumTypeList * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPropertyEnumTypeList * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPropertyEnumTypeList * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetCount )( 
+            IPropertyEnumTypeList * This,
+            /* [out] */ __RPC__out UINT *pctypes);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetAt )( 
+            IPropertyEnumTypeList * This,
+            /* [in] */ UINT itype,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetConditionAt )( 
+            IPropertyEnumTypeList * This,
+            /* [in] */ UINT nIndex,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        HRESULT ( STDMETHODCALLTYPE *FindMatchingIndex )( 
+            IPropertyEnumTypeList * This,
+            /* [in] */ __RPC__in REFPROPVARIANT propvarCmp,
+            /* [out] */ __RPC__out UINT *pnIndex);
+        
+        END_INTERFACE
+    } IPropertyEnumTypeListVtbl;
+
+    interface IPropertyEnumTypeList
+    {
+        CONST_VTBL struct IPropertyEnumTypeListVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPropertyEnumTypeList_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPropertyEnumTypeList_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPropertyEnumTypeList_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPropertyEnumTypeList_GetCount(This,pctypes)	\
+    ( (This)->lpVtbl -> GetCount(This,pctypes) ) 
+
+#define IPropertyEnumTypeList_GetAt(This,itype,riid,ppv)	\
+    ( (This)->lpVtbl -> GetAt(This,itype,riid,ppv) ) 
+
+#define IPropertyEnumTypeList_GetConditionAt(This,nIndex,riid,ppv)	\
+    ( (This)->lpVtbl -> GetConditionAt(This,nIndex,riid,ppv) ) 
+
+#define IPropertyEnumTypeList_FindMatchingIndex(This,propvarCmp,pnIndex)	\
+    ( (This)->lpVtbl -> FindMatchingIndex(This,propvarCmp,pnIndex) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPropertyEnumTypeList_INTERFACE_DEFINED__ */
+
+
+#ifndef __IPropertyDescription_INTERFACE_DEFINED__
+#define __IPropertyDescription_INTERFACE_DEFINED__
+
+/* interface IPropertyDescription */
+/* [unique][object][uuid] */ 
+
+/* [v1_enum] */ 
+enum tagPROPDESC_TYPE_FLAGS
+    {	PDTF_DEFAULT	= 0,
+	PDTF_MULTIPLEVALUES	= 0x1,
+	PDTF_ISINNATE	= 0x2,
+	PDTF_ISGROUP	= 0x4,
+	PDTF_CANGROUPBY	= 0x8,
+	PDTF_CANSTACKBY	= 0x10,
+	PDTF_ISTREEPROPERTY	= 0x20,
+	PDTF_INCLUDEINFULLTEXTQUERY	= 0x40,
+	PDTF_ISVIEWABLE	= 0x80,
+	PDTF_ISQUERYABLE	= 0x100,
+	PDTF_ISSYSTEMPROPERTY	= 0x80000000,
+	PDTF_MASK_ALL	= 0x800001ff
+    } ;
+typedef int PROPDESC_TYPE_FLAGS;
+
+/* [v1_enum] */ 
+enum tagPROPDESC_VIEW_FLAGS
+    {	PDVF_DEFAULT	= 0,
+	PDVF_CENTERALIGN	= 0x1,
+	PDVF_RIGHTALIGN	= 0x2,
+	PDVF_BEGINNEWGROUP	= 0x4,
+	PDVF_FILLAREA	= 0x8,
+	PDVF_SORTDESCENDING	= 0x10,
+	PDVF_SHOWONLYIFPRESENT	= 0x20,
+	PDVF_SHOWBYDEFAULT	= 0x40,
+	PDVF_SHOWINPRIMARYLIST	= 0x80,
+	PDVF_SHOWINSECONDARYLIST	= 0x100,
+	PDVF_HIDELABEL	= 0x200,
+	PDVF_HIDDEN	= 0x800,
+	PDVF_CANWRAP	= 0x1000,
+	PDVF_MASK_ALL	= 0x1bff
+    } ;
+typedef int PROPDESC_VIEW_FLAGS;
+
+/* [v1_enum] */ 
+enum tagPROPDESC_DISPLAYTYPE
+    {	PDDT_STRING	= 0,
+	PDDT_NUMBER	= 1,
+	PDDT_BOOLEAN	= 2,
+	PDDT_DATETIME	= 3,
+	PDDT_ENUMERATED	= 4
+    } ;
+typedef enum tagPROPDESC_DISPLAYTYPE PROPDESC_DISPLAYTYPE;
+
+/* [v1_enum] */ 
+enum tagPROPDESC_GROUPING_RANGE
+    {	PDGR_DISCRETE	= 0,
+	PDGR_ALPHANUMERIC	= 1,
+	PDGR_SIZE	= 2,
+	PDGR_DYNAMIC	= 3,
+	PDGR_DATE	= 4,
+	PDGR_PERCENT	= 5,
+	PDGR_ENUMERATED	= 6
+    } ;
+typedef enum tagPROPDESC_GROUPING_RANGE PROPDESC_GROUPING_RANGE;
+
+/* [v1_enum] */ 
+enum tagPROPDESC_FORMAT_FLAGS
+    {	PDFF_DEFAULT	= 0,
+	PDFF_PREFIXNAME	= 0x1,
+	PDFF_FILENAME	= 0x2,
+	PDFF_ALWAYSKB	= 0x4,
+	PDFF_RESERVED_RIGHTTOLEFT	= 0x8,
+	PDFF_SHORTTIME	= 0x10,
+	PDFF_LONGTIME	= 0x20,
+	PDFF_HIDETIME	= 0x40,
+	PDFF_SHORTDATE	= 0x80,
+	PDFF_LONGDATE	= 0x100,
+	PDFF_HIDEDATE	= 0x200,
+	PDFF_RELATIVEDATE	= 0x400,
+	PDFF_USEEDITINVITATION	= 0x800,
+	PDFF_READONLY	= 0x1000,
+	PDFF_NOAUTOREADINGORDER	= 0x2000
+    } ;
+typedef int PROPDESC_FORMAT_FLAGS;
+
+/* [v1_enum] */ 
+enum tagPROPDESC_SORTDESCRIPTION
+    {	PDSD_GENERAL	= 0,
+	PDSD_A_Z	= 1,
+	PDSD_LOWEST_HIGHEST	= 2,
+	PDSD_SMALLEST_BIGGEST	= 3,
+	PDSD_OLDEST_NEWEST	= 4
+    } ;
+typedef enum tagPROPDESC_SORTDESCRIPTION PROPDESC_SORTDESCRIPTION;
+
+/* [v1_enum] */ 
+enum tagPROPDESC_RELATIVEDESCRIPTION_TYPE
+    {	PDRDT_GENERAL	= 0,
+	PDRDT_DATE	= 1,
+	PDRDT_SIZE	= 2,
+	PDRDT_COUNT	= 3,
+	PDRDT_REVISION	= 4,
+	PDRDT_LENGTH	= 5,
+	PDRDT_DURATION	= 6,
+	PDRDT_SPEED	= 7,
+	PDRDT_RATE	= 8,
+	PDRDT_RATING	= 9,
+	PDRDT_PRIORITY	= 10
+    } ;
+typedef enum tagPROPDESC_RELATIVEDESCRIPTION_TYPE PROPDESC_RELATIVEDESCRIPTION_TYPE;
+
+/* [v1_enum] */ 
+enum tagPROPDESC_AGGREGATION_TYPE
+    {	PDAT_DEFAULT	= 0,
+	PDAT_FIRST	= 1,
+	PDAT_SUM	= 2,
+	PDAT_AVERAGE	= 3,
+	PDAT_DATERANGE	= 4,
+	PDAT_UNION	= 5,
+	PDAT_MAX	= 6,
+	PDAT_MIN	= 7
+    } ;
+typedef enum tagPROPDESC_AGGREGATION_TYPE PROPDESC_AGGREGATION_TYPE;
+
+/* [v1_enum] */ 
+enum tagPROPDESC_CONDITION_TYPE
+    {	PDCOT_NONE	= 0,
+	PDCOT_STRING	= 1,
+	PDCOT_SIZE	= 2,
+	PDCOT_DATETIME	= 3,
+	PDCOT_BOOLEAN	= 4,
+	PDCOT_NUMBER	= 5
+    } ;
+typedef enum tagPROPDESC_CONDITION_TYPE PROPDESC_CONDITION_TYPE;
+
+
+EXTERN_C const IID IID_IPropertyDescription;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("6f79d558-3e96-4549-a1d1-7d75d2288814")
+    IPropertyDescription : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetPropertyKey( 
+            /* [out] */ __RPC__out PROPERTYKEY *pkey) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetCanonicalName( 
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszName) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetPropertyType( 
+            /* [out] */ __RPC__out VARTYPE *pvartype) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetDisplayName( 
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszName) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetEditInvitation( 
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszInvite) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetTypeFlags( 
+            /* [in] */ PROPDESC_TYPE_FLAGS mask,
+            /* [out] */ __RPC__out PROPDESC_TYPE_FLAGS *ppdtFlags) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetViewFlags( 
+            /* [out] */ __RPC__out PROPDESC_VIEW_FLAGS *ppdvFlags) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetDefaultColumnWidth( 
+            /* [out] */ __RPC__out UINT *pcxChars) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetDisplayType( 
+            /* [out] */ __RPC__out PROPDESC_DISPLAYTYPE *pdisplaytype) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetColumnState( 
+            /* [out] */ __RPC__out SHCOLSTATEF *pcsFlags) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetGroupingRange( 
+            /* [out] */ __RPC__out PROPDESC_GROUPING_RANGE *pgr) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetRelativeDescriptionType( 
+            /* [out] */ __RPC__out PROPDESC_RELATIVEDESCRIPTION_TYPE *prdt) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetRelativeDescription( 
+            /* [in] */ __RPC__in REFPROPVARIANT propvar1,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar2,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDesc1,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDesc2) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetSortDescription( 
+            /* [out] */ __RPC__out PROPDESC_SORTDESCRIPTION *psd) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetSortDescriptionLabel( 
+            /* [in] */ BOOL fDescending,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDescription) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetAggregationType( 
+            /* [out] */ __RPC__out PROPDESC_AGGREGATION_TYPE *paggtype) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetConditionType( 
+            /* [out] */ __RPC__out PROPDESC_CONDITION_TYPE *pcontype,
+            /* [out] */ __RPC__out CONDITION_OPERATION *popDefault) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetEnumTypeList( 
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0;
+        
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE CoerceToCanonicalValue( 
+            /* [out][in] */ PROPVARIANT *ppropvar) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE FormatForDisplay( 
+            /* [in] */ __RPC__in REFPROPVARIANT propvar,
+            /* [in] */ PROPDESC_FORMAT_FLAGS pdfFlags,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDisplay) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE IsValueCanonical( 
+            /* [in] */ __RPC__in REFPROPVARIANT propvar) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPropertyDescriptionVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPropertyDescription * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPropertyDescription * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPropertyDescription * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPropertyKey )( 
+            IPropertyDescription * This,
+            /* [out] */ __RPC__out PROPERTYKEY *pkey);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetCanonicalName )( 
+            IPropertyDescription * This,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszName);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPropertyType )( 
+            IPropertyDescription * This,
+            /* [out] */ __RPC__out VARTYPE *pvartype);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetDisplayName )( 
+            IPropertyDescription * This,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszName);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetEditInvitation )( 
+            IPropertyDescription * This,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszInvite);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetTypeFlags )( 
+            IPropertyDescription * This,
+            /* [in] */ PROPDESC_TYPE_FLAGS mask,
+            /* [out] */ __RPC__out PROPDESC_TYPE_FLAGS *ppdtFlags);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetViewFlags )( 
+            IPropertyDescription * This,
+            /* [out] */ __RPC__out PROPDESC_VIEW_FLAGS *ppdvFlags);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetDefaultColumnWidth )( 
+            IPropertyDescription * This,
+            /* [out] */ __RPC__out UINT *pcxChars);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetDisplayType )( 
+            IPropertyDescription * This,
+            /* [out] */ __RPC__out PROPDESC_DISPLAYTYPE *pdisplaytype);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetColumnState )( 
+            IPropertyDescription * This,
+            /* [out] */ __RPC__out SHCOLSTATEF *pcsFlags);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetGroupingRange )( 
+            IPropertyDescription * This,
+            /* [out] */ __RPC__out PROPDESC_GROUPING_RANGE *pgr);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetRelativeDescriptionType )( 
+            IPropertyDescription * This,
+            /* [out] */ __RPC__out PROPDESC_RELATIVEDESCRIPTION_TYPE *prdt);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetRelativeDescription )( 
+            IPropertyDescription * This,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar1,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar2,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDesc1,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDesc2);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetSortDescription )( 
+            IPropertyDescription * This,
+            /* [out] */ __RPC__out PROPDESC_SORTDESCRIPTION *psd);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetSortDescriptionLabel )( 
+            IPropertyDescription * This,
+            /* [in] */ BOOL fDescending,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDescription);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetAggregationType )( 
+            IPropertyDescription * This,
+            /* [out] */ __RPC__out PROPDESC_AGGREGATION_TYPE *paggtype);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetConditionType )( 
+            IPropertyDescription * This,
+            /* [out] */ __RPC__out PROPDESC_CONDITION_TYPE *pcontype,
+            /* [out] */ __RPC__out CONDITION_OPERATION *popDefault);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetEnumTypeList )( 
+            IPropertyDescription * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *CoerceToCanonicalValue )( 
+            IPropertyDescription * This,
+            /* [out][in] */ PROPVARIANT *ppropvar);
+        
+        HRESULT ( STDMETHODCALLTYPE *FormatForDisplay )( 
+            IPropertyDescription * This,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar,
+            /* [in] */ PROPDESC_FORMAT_FLAGS pdfFlags,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDisplay);
+        
+        HRESULT ( STDMETHODCALLTYPE *IsValueCanonical )( 
+            IPropertyDescription * This,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar);
+        
+        END_INTERFACE
+    } IPropertyDescriptionVtbl;
+
+    interface IPropertyDescription
+    {
+        CONST_VTBL struct IPropertyDescriptionVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPropertyDescription_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPropertyDescription_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPropertyDescription_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPropertyDescription_GetPropertyKey(This,pkey)	\
+    ( (This)->lpVtbl -> GetPropertyKey(This,pkey) ) 
+
+#define IPropertyDescription_GetCanonicalName(This,ppszName)	\
+    ( (This)->lpVtbl -> GetCanonicalName(This,ppszName) ) 
+
+#define IPropertyDescription_GetPropertyType(This,pvartype)	\
+    ( (This)->lpVtbl -> GetPropertyType(This,pvartype) ) 
+
+#define IPropertyDescription_GetDisplayName(This,ppszName)	\
+    ( (This)->lpVtbl -> GetDisplayName(This,ppszName) ) 
+
+#define IPropertyDescription_GetEditInvitation(This,ppszInvite)	\
+    ( (This)->lpVtbl -> GetEditInvitation(This,ppszInvite) ) 
+
+#define IPropertyDescription_GetTypeFlags(This,mask,ppdtFlags)	\
+    ( (This)->lpVtbl -> GetTypeFlags(This,mask,ppdtFlags) ) 
+
+#define IPropertyDescription_GetViewFlags(This,ppdvFlags)	\
+    ( (This)->lpVtbl -> GetViewFlags(This,ppdvFlags) ) 
+
+#define IPropertyDescription_GetDefaultColumnWidth(This,pcxChars)	\
+    ( (This)->lpVtbl -> GetDefaultColumnWidth(This,pcxChars) ) 
+
+#define IPropertyDescription_GetDisplayType(This,pdisplaytype)	\
+    ( (This)->lpVtbl -> GetDisplayType(This,pdisplaytype) ) 
+
+#define IPropertyDescription_GetColumnState(This,pcsFlags)	\
+    ( (This)->lpVtbl -> GetColumnState(This,pcsFlags) ) 
+
+#define IPropertyDescription_GetGroupingRange(This,pgr)	\
+    ( (This)->lpVtbl -> GetGroupingRange(This,pgr) ) 
+
+#define IPropertyDescription_GetRelativeDescriptionType(This,prdt)	\
+    ( (This)->lpVtbl -> GetRelativeDescriptionType(This,prdt) ) 
+
+#define IPropertyDescription_GetRelativeDescription(This,propvar1,propvar2,ppszDesc1,ppszDesc2)	\
+    ( (This)->lpVtbl -> GetRelativeDescription(This,propvar1,propvar2,ppszDesc1,ppszDesc2) ) 
+
+#define IPropertyDescription_GetSortDescription(This,psd)	\
+    ( (This)->lpVtbl -> GetSortDescription(This,psd) ) 
+
+#define IPropertyDescription_GetSortDescriptionLabel(This,fDescending,ppszDescription)	\
+    ( (This)->lpVtbl -> GetSortDescriptionLabel(This,fDescending,ppszDescription) ) 
+
+#define IPropertyDescription_GetAggregationType(This,paggtype)	\
+    ( (This)->lpVtbl -> GetAggregationType(This,paggtype) ) 
+
+#define IPropertyDescription_GetConditionType(This,pcontype,popDefault)	\
+    ( (This)->lpVtbl -> GetConditionType(This,pcontype,popDefault) ) 
+
+#define IPropertyDescription_GetEnumTypeList(This,riid,ppv)	\
+    ( (This)->lpVtbl -> GetEnumTypeList(This,riid,ppv) ) 
+
+#define IPropertyDescription_CoerceToCanonicalValue(This,ppropvar)	\
+    ( (This)->lpVtbl -> CoerceToCanonicalValue(This,ppropvar) ) 
+
+#define IPropertyDescription_FormatForDisplay(This,propvar,pdfFlags,ppszDisplay)	\
+    ( (This)->lpVtbl -> FormatForDisplay(This,propvar,pdfFlags,ppszDisplay) ) 
+
+#define IPropertyDescription_IsValueCanonical(This,propvar)	\
+    ( (This)->lpVtbl -> IsValueCanonical(This,propvar) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+/* [call_as] */ HRESULT STDMETHODCALLTYPE IPropertyDescription_RemoteCoerceToCanonicalValue_Proxy( 
+    IPropertyDescription * This,
+    /* [in] */ __RPC__in REFPROPVARIANT propvar,
+    /* [out] */ __RPC__out PROPVARIANT *ppropvar);
+
+
+void __RPC_STUB IPropertyDescription_RemoteCoerceToCanonicalValue_Stub(
+    IRpcStubBuffer *This,
+    IRpcChannelBuffer *_pRpcChannelBuffer,
+    PRPC_MESSAGE _pRpcMessage,
+    DWORD *_pdwStubPhase);
+
+
+
+#endif 	/* __IPropertyDescription_INTERFACE_DEFINED__ */
+
+
+#ifndef __IPropertyDescriptionAliasInfo_INTERFACE_DEFINED__
+#define __IPropertyDescriptionAliasInfo_INTERFACE_DEFINED__
+
+/* interface IPropertyDescriptionAliasInfo */
+/* [unique][object][uuid] */ 
+
+
+EXTERN_C const IID IID_IPropertyDescriptionAliasInfo;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("f67104fc-2af9-46fd-b32d-243c1404f3d1")
+    IPropertyDescriptionAliasInfo : public IPropertyDescription
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetSortByAlias( 
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetAdditionalSortByAliases( 
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPropertyDescriptionAliasInfoVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPropertyDescriptionAliasInfo * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPropertyDescriptionAliasInfo * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPropertyKey )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [out] */ __RPC__out PROPERTYKEY *pkey);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetCanonicalName )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszName);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPropertyType )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [out] */ __RPC__out VARTYPE *pvartype);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetDisplayName )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszName);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetEditInvitation )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszInvite);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetTypeFlags )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [in] */ PROPDESC_TYPE_FLAGS mask,
+            /* [out] */ __RPC__out PROPDESC_TYPE_FLAGS *ppdtFlags);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetViewFlags )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [out] */ __RPC__out PROPDESC_VIEW_FLAGS *ppdvFlags);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetDefaultColumnWidth )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [out] */ __RPC__out UINT *pcxChars);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetDisplayType )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [out] */ __RPC__out PROPDESC_DISPLAYTYPE *pdisplaytype);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetColumnState )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [out] */ __RPC__out SHCOLSTATEF *pcsFlags);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetGroupingRange )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [out] */ __RPC__out PROPDESC_GROUPING_RANGE *pgr);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetRelativeDescriptionType )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [out] */ __RPC__out PROPDESC_RELATIVEDESCRIPTION_TYPE *prdt);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetRelativeDescription )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar1,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar2,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDesc1,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDesc2);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetSortDescription )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [out] */ __RPC__out PROPDESC_SORTDESCRIPTION *psd);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetSortDescriptionLabel )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [in] */ BOOL fDescending,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDescription);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetAggregationType )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [out] */ __RPC__out PROPDESC_AGGREGATION_TYPE *paggtype);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetConditionType )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [out] */ __RPC__out PROPDESC_CONDITION_TYPE *pcontype,
+            /* [out] */ __RPC__out CONDITION_OPERATION *popDefault);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetEnumTypeList )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *CoerceToCanonicalValue )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [out][in] */ PROPVARIANT *ppropvar);
+        
+        HRESULT ( STDMETHODCALLTYPE *FormatForDisplay )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar,
+            /* [in] */ PROPDESC_FORMAT_FLAGS pdfFlags,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDisplay);
+        
+        HRESULT ( STDMETHODCALLTYPE *IsValueCanonical )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetSortByAlias )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetAdditionalSortByAliases )( 
+            IPropertyDescriptionAliasInfo * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        END_INTERFACE
+    } IPropertyDescriptionAliasInfoVtbl;
+
+    interface IPropertyDescriptionAliasInfo
+    {
+        CONST_VTBL struct IPropertyDescriptionAliasInfoVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPropertyDescriptionAliasInfo_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPropertyDescriptionAliasInfo_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPropertyDescriptionAliasInfo_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPropertyDescriptionAliasInfo_GetPropertyKey(This,pkey)	\
+    ( (This)->lpVtbl -> GetPropertyKey(This,pkey) ) 
+
+#define IPropertyDescriptionAliasInfo_GetCanonicalName(This,ppszName)	\
+    ( (This)->lpVtbl -> GetCanonicalName(This,ppszName) ) 
+
+#define IPropertyDescriptionAliasInfo_GetPropertyType(This,pvartype)	\
+    ( (This)->lpVtbl -> GetPropertyType(This,pvartype) ) 
+
+#define IPropertyDescriptionAliasInfo_GetDisplayName(This,ppszName)	\
+    ( (This)->lpVtbl -> GetDisplayName(This,ppszName) ) 
+
+#define IPropertyDescriptionAliasInfo_GetEditInvitation(This,ppszInvite)	\
+    ( (This)->lpVtbl -> GetEditInvitation(This,ppszInvite) ) 
+
+#define IPropertyDescriptionAliasInfo_GetTypeFlags(This,mask,ppdtFlags)	\
+    ( (This)->lpVtbl -> GetTypeFlags(This,mask,ppdtFlags) ) 
+
+#define IPropertyDescriptionAliasInfo_GetViewFlags(This,ppdvFlags)	\
+    ( (This)->lpVtbl -> GetViewFlags(This,ppdvFlags) ) 
+
+#define IPropertyDescriptionAliasInfo_GetDefaultColumnWidth(This,pcxChars)	\
+    ( (This)->lpVtbl -> GetDefaultColumnWidth(This,pcxChars) ) 
+
+#define IPropertyDescriptionAliasInfo_GetDisplayType(This,pdisplaytype)	\
+    ( (This)->lpVtbl -> GetDisplayType(This,pdisplaytype) ) 
+
+#define IPropertyDescriptionAliasInfo_GetColumnState(This,pcsFlags)	\
+    ( (This)->lpVtbl -> GetColumnState(This,pcsFlags) ) 
+
+#define IPropertyDescriptionAliasInfo_GetGroupingRange(This,pgr)	\
+    ( (This)->lpVtbl -> GetGroupingRange(This,pgr) ) 
+
+#define IPropertyDescriptionAliasInfo_GetRelativeDescriptionType(This,prdt)	\
+    ( (This)->lpVtbl -> GetRelativeDescriptionType(This,prdt) ) 
+
+#define IPropertyDescriptionAliasInfo_GetRelativeDescription(This,propvar1,propvar2,ppszDesc1,ppszDesc2)	\
+    ( (This)->lpVtbl -> GetRelativeDescription(This,propvar1,propvar2,ppszDesc1,ppszDesc2) ) 
+
+#define IPropertyDescriptionAliasInfo_GetSortDescription(This,psd)	\
+    ( (This)->lpVtbl -> GetSortDescription(This,psd) ) 
+
+#define IPropertyDescriptionAliasInfo_GetSortDescriptionLabel(This,fDescending,ppszDescription)	\
+    ( (This)->lpVtbl -> GetSortDescriptionLabel(This,fDescending,ppszDescription) ) 
+
+#define IPropertyDescriptionAliasInfo_GetAggregationType(This,paggtype)	\
+    ( (This)->lpVtbl -> GetAggregationType(This,paggtype) ) 
+
+#define IPropertyDescriptionAliasInfo_GetConditionType(This,pcontype,popDefault)	\
+    ( (This)->lpVtbl -> GetConditionType(This,pcontype,popDefault) ) 
+
+#define IPropertyDescriptionAliasInfo_GetEnumTypeList(This,riid,ppv)	\
+    ( (This)->lpVtbl -> GetEnumTypeList(This,riid,ppv) ) 
+
+#define IPropertyDescriptionAliasInfo_CoerceToCanonicalValue(This,ppropvar)	\
+    ( (This)->lpVtbl -> CoerceToCanonicalValue(This,ppropvar) ) 
+
+#define IPropertyDescriptionAliasInfo_FormatForDisplay(This,propvar,pdfFlags,ppszDisplay)	\
+    ( (This)->lpVtbl -> FormatForDisplay(This,propvar,pdfFlags,ppszDisplay) ) 
+
+#define IPropertyDescriptionAliasInfo_IsValueCanonical(This,propvar)	\
+    ( (This)->lpVtbl -> IsValueCanonical(This,propvar) ) 
+
+
+#define IPropertyDescriptionAliasInfo_GetSortByAlias(This,riid,ppv)	\
+    ( (This)->lpVtbl -> GetSortByAlias(This,riid,ppv) ) 
+
+#define IPropertyDescriptionAliasInfo_GetAdditionalSortByAliases(This,riid,ppv)	\
+    ( (This)->lpVtbl -> GetAdditionalSortByAliases(This,riid,ppv) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPropertyDescriptionAliasInfo_INTERFACE_DEFINED__ */
+
+
+#ifndef __IPropertyDescriptionSearchInfo_INTERFACE_DEFINED__
+#define __IPropertyDescriptionSearchInfo_INTERFACE_DEFINED__
+
+/* interface IPropertyDescriptionSearchInfo */
+/* [unique][object][uuid] */ 
+
+/* [v1_enum] */ 
+enum tagPROPDESC_SEARCHINFO_FLAGS
+    {	PDSIF_DEFAULT	= 0,
+	PDSIF_ININVERTEDINDEX	= 0x1,
+	PDSIF_ISCOLUMN	= 0x2,
+	PDSIF_ISCOLUMNSPARSE	= 0x4
+    } ;
+typedef int PROPDESC_SEARCHINFO_FLAGS;
+
+typedef /* [v1_enum] */ 
+enum tagPROPDESC_COLUMNINDEX_TYPE
+    {	PDCIT_NONE	= 0,
+	PDCIT_ONDISK	= 1,
+	PDCIT_INMEMORY	= 2
+    } 	PROPDESC_COLUMNINDEX_TYPE;
+
+
+EXTERN_C const IID IID_IPropertyDescriptionSearchInfo;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("078f91bd-29a2-440f-924e-46a291524520")
+    IPropertyDescriptionSearchInfo : public IPropertyDescription
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetSearchInfoFlags( 
+            /* [out] */ __RPC__out PROPDESC_SEARCHINFO_FLAGS *ppdsiFlags) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetColumnIndexType( 
+            /* [out] */ __RPC__out PROPDESC_COLUMNINDEX_TYPE *ppdciType) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetProjectionString( 
+            /* [out] */ __RPC__deref_out_opt LPWSTR *ppszProjection) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetMaxSize( 
+            /* [out] */ __RPC__out UINT *pcbMaxSize) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPropertyDescriptionSearchInfoVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPropertyDescriptionSearchInfo * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPropertyDescriptionSearchInfo * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPropertyKey )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [out] */ __RPC__out PROPERTYKEY *pkey);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetCanonicalName )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszName);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPropertyType )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [out] */ __RPC__out VARTYPE *pvartype);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetDisplayName )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszName);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetEditInvitation )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszInvite);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetTypeFlags )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [in] */ PROPDESC_TYPE_FLAGS mask,
+            /* [out] */ __RPC__out PROPDESC_TYPE_FLAGS *ppdtFlags);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetViewFlags )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [out] */ __RPC__out PROPDESC_VIEW_FLAGS *ppdvFlags);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetDefaultColumnWidth )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [out] */ __RPC__out UINT *pcxChars);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetDisplayType )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [out] */ __RPC__out PROPDESC_DISPLAYTYPE *pdisplaytype);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetColumnState )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [out] */ __RPC__out SHCOLSTATEF *pcsFlags);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetGroupingRange )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [out] */ __RPC__out PROPDESC_GROUPING_RANGE *pgr);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetRelativeDescriptionType )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [out] */ __RPC__out PROPDESC_RELATIVEDESCRIPTION_TYPE *prdt);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetRelativeDescription )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar1,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar2,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDesc1,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDesc2);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetSortDescription )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [out] */ __RPC__out PROPDESC_SORTDESCRIPTION *psd);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetSortDescriptionLabel )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [in] */ BOOL fDescending,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDescription);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetAggregationType )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [out] */ __RPC__out PROPDESC_AGGREGATION_TYPE *paggtype);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetConditionType )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [out] */ __RPC__out PROPDESC_CONDITION_TYPE *pcontype,
+            /* [out] */ __RPC__out CONDITION_OPERATION *popDefault);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetEnumTypeList )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *CoerceToCanonicalValue )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [out][in] */ PROPVARIANT *ppropvar);
+        
+        HRESULT ( STDMETHODCALLTYPE *FormatForDisplay )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar,
+            /* [in] */ PROPDESC_FORMAT_FLAGS pdfFlags,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDisplay);
+        
+        HRESULT ( STDMETHODCALLTYPE *IsValueCanonical )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetSearchInfoFlags )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [out] */ __RPC__out PROPDESC_SEARCHINFO_FLAGS *ppdsiFlags);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetColumnIndexType )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [out] */ __RPC__out PROPDESC_COLUMNINDEX_TYPE *ppdciType);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetProjectionString )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [out] */ __RPC__deref_out_opt LPWSTR *ppszProjection);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetMaxSize )( 
+            IPropertyDescriptionSearchInfo * This,
+            /* [out] */ __RPC__out UINT *pcbMaxSize);
+        
+        END_INTERFACE
+    } IPropertyDescriptionSearchInfoVtbl;
+
+    interface IPropertyDescriptionSearchInfo
+    {
+        CONST_VTBL struct IPropertyDescriptionSearchInfoVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPropertyDescriptionSearchInfo_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPropertyDescriptionSearchInfo_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPropertyDescriptionSearchInfo_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPropertyDescriptionSearchInfo_GetPropertyKey(This,pkey)	\
+    ( (This)->lpVtbl -> GetPropertyKey(This,pkey) ) 
+
+#define IPropertyDescriptionSearchInfo_GetCanonicalName(This,ppszName)	\
+    ( (This)->lpVtbl -> GetCanonicalName(This,ppszName) ) 
+
+#define IPropertyDescriptionSearchInfo_GetPropertyType(This,pvartype)	\
+    ( (This)->lpVtbl -> GetPropertyType(This,pvartype) ) 
+
+#define IPropertyDescriptionSearchInfo_GetDisplayName(This,ppszName)	\
+    ( (This)->lpVtbl -> GetDisplayName(This,ppszName) ) 
+
+#define IPropertyDescriptionSearchInfo_GetEditInvitation(This,ppszInvite)	\
+    ( (This)->lpVtbl -> GetEditInvitation(This,ppszInvite) ) 
+
+#define IPropertyDescriptionSearchInfo_GetTypeFlags(This,mask,ppdtFlags)	\
+    ( (This)->lpVtbl -> GetTypeFlags(This,mask,ppdtFlags) ) 
+
+#define IPropertyDescriptionSearchInfo_GetViewFlags(This,ppdvFlags)	\
+    ( (This)->lpVtbl -> GetViewFlags(This,ppdvFlags) ) 
+
+#define IPropertyDescriptionSearchInfo_GetDefaultColumnWidth(This,pcxChars)	\
+    ( (This)->lpVtbl -> GetDefaultColumnWidth(This,pcxChars) ) 
+
+#define IPropertyDescriptionSearchInfo_GetDisplayType(This,pdisplaytype)	\
+    ( (This)->lpVtbl -> GetDisplayType(This,pdisplaytype) ) 
+
+#define IPropertyDescriptionSearchInfo_GetColumnState(This,pcsFlags)	\
+    ( (This)->lpVtbl -> GetColumnState(This,pcsFlags) ) 
+
+#define IPropertyDescriptionSearchInfo_GetGroupingRange(This,pgr)	\
+    ( (This)->lpVtbl -> GetGroupingRange(This,pgr) ) 
+
+#define IPropertyDescriptionSearchInfo_GetRelativeDescriptionType(This,prdt)	\
+    ( (This)->lpVtbl -> GetRelativeDescriptionType(This,prdt) ) 
+
+#define IPropertyDescriptionSearchInfo_GetRelativeDescription(This,propvar1,propvar2,ppszDesc1,ppszDesc2)	\
+    ( (This)->lpVtbl -> GetRelativeDescription(This,propvar1,propvar2,ppszDesc1,ppszDesc2) ) 
+
+#define IPropertyDescriptionSearchInfo_GetSortDescription(This,psd)	\
+    ( (This)->lpVtbl -> GetSortDescription(This,psd) ) 
+
+#define IPropertyDescriptionSearchInfo_GetSortDescriptionLabel(This,fDescending,ppszDescription)	\
+    ( (This)->lpVtbl -> GetSortDescriptionLabel(This,fDescending,ppszDescription) ) 
+
+#define IPropertyDescriptionSearchInfo_GetAggregationType(This,paggtype)	\
+    ( (This)->lpVtbl -> GetAggregationType(This,paggtype) ) 
+
+#define IPropertyDescriptionSearchInfo_GetConditionType(This,pcontype,popDefault)	\
+    ( (This)->lpVtbl -> GetConditionType(This,pcontype,popDefault) ) 
+
+#define IPropertyDescriptionSearchInfo_GetEnumTypeList(This,riid,ppv)	\
+    ( (This)->lpVtbl -> GetEnumTypeList(This,riid,ppv) ) 
+
+#define IPropertyDescriptionSearchInfo_CoerceToCanonicalValue(This,ppropvar)	\
+    ( (This)->lpVtbl -> CoerceToCanonicalValue(This,ppropvar) ) 
+
+#define IPropertyDescriptionSearchInfo_FormatForDisplay(This,propvar,pdfFlags,ppszDisplay)	\
+    ( (This)->lpVtbl -> FormatForDisplay(This,propvar,pdfFlags,ppszDisplay) ) 
+
+#define IPropertyDescriptionSearchInfo_IsValueCanonical(This,propvar)	\
+    ( (This)->lpVtbl -> IsValueCanonical(This,propvar) ) 
+
+
+#define IPropertyDescriptionSearchInfo_GetSearchInfoFlags(This,ppdsiFlags)	\
+    ( (This)->lpVtbl -> GetSearchInfoFlags(This,ppdsiFlags) ) 
+
+#define IPropertyDescriptionSearchInfo_GetColumnIndexType(This,ppdciType)	\
+    ( (This)->lpVtbl -> GetColumnIndexType(This,ppdciType) ) 
+
+#define IPropertyDescriptionSearchInfo_GetProjectionString(This,ppszProjection)	\
+    ( (This)->lpVtbl -> GetProjectionString(This,ppszProjection) ) 
+
+#define IPropertyDescriptionSearchInfo_GetMaxSize(This,pcbMaxSize)	\
+    ( (This)->lpVtbl -> GetMaxSize(This,pcbMaxSize) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPropertyDescriptionSearchInfo_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_propsys_0000_0014 */
+/* [local] */ 
+
+/* [v1_enum] */ 
+enum tagPROPDESC_ENUMFILTER
+    {	PDEF_ALL	= 0,
+	PDEF_SYSTEM	= 1,
+	PDEF_NONSYSTEM	= 2,
+	PDEF_VIEWABLE	= 3,
+	PDEF_QUERYABLE	= 4,
+	PDEF_INFULLTEXTQUERY	= 5,
+	PDEF_COLUMN	= 6
+    } ;
+typedef enum tagPROPDESC_ENUMFILTER PROPDESC_ENUMFILTER;
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0014_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0014_v0_0_s_ifspec;
+
+#ifndef __IPropertySystem_INTERFACE_DEFINED__
+#define __IPropertySystem_INTERFACE_DEFINED__
+
+/* interface IPropertySystem */
+/* [unique][object][uuid] */ 
+
+
+EXTERN_C const IID IID_IPropertySystem;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("ca724e8a-c3e6-442b-88a4-6fb0db8035a3")
+    IPropertySystem : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetPropertyDescription( 
+            /* [in] */ __RPC__in REFPROPERTYKEY propkey,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetPropertyDescriptionByName( 
+            /* [string][in] */ __RPC__in LPCWSTR pszCanonicalName,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetPropertyDescriptionListFromString( 
+            /* [string][in] */ __RPC__in LPCWSTR pszPropList,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE EnumeratePropertyDescriptions( 
+            /* [in] */ PROPDESC_ENUMFILTER filterOn,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE FormatForDisplay( 
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar,
+            /* [in] */ PROPDESC_FORMAT_FLAGS pdff,
+            /* [size_is][string][out] */ __RPC__out_ecount_full_string(cchText) LPWSTR pszText,
+            /* [in] */ DWORD cchText) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE FormatForDisplayAlloc( 
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar,
+            /* [in] */ PROPDESC_FORMAT_FLAGS pdff,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDisplay) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE RegisterPropertySchema( 
+            /* [string][in] */ __RPC__in LPCWSTR pszPath) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE UnregisterPropertySchema( 
+            /* [string][in] */ __RPC__in LPCWSTR pszPath) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE RefreshPropertySchema( void) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPropertySystemVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPropertySystem * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPropertySystem * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPropertySystem * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPropertyDescription )( 
+            IPropertySystem * This,
+            /* [in] */ __RPC__in REFPROPERTYKEY propkey,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPropertyDescriptionByName )( 
+            IPropertySystem * This,
+            /* [string][in] */ __RPC__in LPCWSTR pszCanonicalName,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPropertyDescriptionListFromString )( 
+            IPropertySystem * This,
+            /* [string][in] */ __RPC__in LPCWSTR pszPropList,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        HRESULT ( STDMETHODCALLTYPE *EnumeratePropertyDescriptions )( 
+            IPropertySystem * This,
+            /* [in] */ PROPDESC_ENUMFILTER filterOn,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        HRESULT ( STDMETHODCALLTYPE *FormatForDisplay )( 
+            IPropertySystem * This,
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar,
+            /* [in] */ PROPDESC_FORMAT_FLAGS pdff,
+            /* [size_is][string][out] */ __RPC__out_ecount_full_string(cchText) LPWSTR pszText,
+            /* [in] */ DWORD cchText);
+        
+        HRESULT ( STDMETHODCALLTYPE *FormatForDisplayAlloc )( 
+            IPropertySystem * This,
+            /* [in] */ __RPC__in REFPROPERTYKEY key,
+            /* [in] */ __RPC__in REFPROPVARIANT propvar,
+            /* [in] */ PROPDESC_FORMAT_FLAGS pdff,
+            /* [string][out] */ __RPC__deref_out_opt_string LPWSTR *ppszDisplay);
+        
+        HRESULT ( STDMETHODCALLTYPE *RegisterPropertySchema )( 
+            IPropertySystem * This,
+            /* [string][in] */ __RPC__in LPCWSTR pszPath);
+        
+        HRESULT ( STDMETHODCALLTYPE *UnregisterPropertySchema )( 
+            IPropertySystem * This,
+            /* [string][in] */ __RPC__in LPCWSTR pszPath);
+        
+        HRESULT ( STDMETHODCALLTYPE *RefreshPropertySchema )( 
+            IPropertySystem * This);
+        
+        END_INTERFACE
+    } IPropertySystemVtbl;
+
+    interface IPropertySystem
+    {
+        CONST_VTBL struct IPropertySystemVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPropertySystem_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPropertySystem_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPropertySystem_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPropertySystem_GetPropertyDescription(This,propkey,riid,ppv)	\
+    ( (This)->lpVtbl -> GetPropertyDescription(This,propkey,riid,ppv) ) 
+
+#define IPropertySystem_GetPropertyDescriptionByName(This,pszCanonicalName,riid,ppv)	\
+    ( (This)->lpVtbl -> GetPropertyDescriptionByName(This,pszCanonicalName,riid,ppv) ) 
+
+#define IPropertySystem_GetPropertyDescriptionListFromString(This,pszPropList,riid,ppv)	\
+    ( (This)->lpVtbl -> GetPropertyDescriptionListFromString(This,pszPropList,riid,ppv) ) 
+
+#define IPropertySystem_EnumeratePropertyDescriptions(This,filterOn,riid,ppv)	\
+    ( (This)->lpVtbl -> EnumeratePropertyDescriptions(This,filterOn,riid,ppv) ) 
+
+#define IPropertySystem_FormatForDisplay(This,key,propvar,pdff,pszText,cchText)	\
+    ( (This)->lpVtbl -> FormatForDisplay(This,key,propvar,pdff,pszText,cchText) ) 
+
+#define IPropertySystem_FormatForDisplayAlloc(This,key,propvar,pdff,ppszDisplay)	\
+    ( (This)->lpVtbl -> FormatForDisplayAlloc(This,key,propvar,pdff,ppszDisplay) ) 
+
+#define IPropertySystem_RegisterPropertySchema(This,pszPath)	\
+    ( (This)->lpVtbl -> RegisterPropertySchema(This,pszPath) ) 
+
+#define IPropertySystem_UnregisterPropertySchema(This,pszPath)	\
+    ( (This)->lpVtbl -> UnregisterPropertySchema(This,pszPath) ) 
+
+#define IPropertySystem_RefreshPropertySchema(This)	\
+    ( (This)->lpVtbl -> RefreshPropertySchema(This) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPropertySystem_INTERFACE_DEFINED__ */
+
+
+#ifndef __IPropertyDescriptionList_INTERFACE_DEFINED__
+#define __IPropertyDescriptionList_INTERFACE_DEFINED__
+
+/* interface IPropertyDescriptionList */
+/* [unique][object][uuid] */ 
+
+
+EXTERN_C const IID IID_IPropertyDescriptionList;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("1f9fc1d0-c39b-4b26-817f-011967d3440e")
+    IPropertyDescriptionList : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetCount( 
+            /* [out] */ __RPC__out UINT *pcElem) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetAt( 
+            /* [in] */ UINT iElem,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPropertyDescriptionListVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPropertyDescriptionList * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPropertyDescriptionList * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPropertyDescriptionList * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetCount )( 
+            IPropertyDescriptionList * This,
+            /* [out] */ __RPC__out UINT *pcElem);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetAt )( 
+            IPropertyDescriptionList * This,
+            /* [in] */ UINT iElem,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        END_INTERFACE
+    } IPropertyDescriptionListVtbl;
+
+    interface IPropertyDescriptionList
+    {
+        CONST_VTBL struct IPropertyDescriptionListVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPropertyDescriptionList_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPropertyDescriptionList_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPropertyDescriptionList_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPropertyDescriptionList_GetCount(This,pcElem)	\
+    ( (This)->lpVtbl -> GetCount(This,pcElem) ) 
+
+#define IPropertyDescriptionList_GetAt(This,iElem,riid,ppv)	\
+    ( (This)->lpVtbl -> GetAt(This,iElem,riid,ppv) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPropertyDescriptionList_INTERFACE_DEFINED__ */
+
+
+#ifndef __IPropertyStoreFactory_INTERFACE_DEFINED__
+#define __IPropertyStoreFactory_INTERFACE_DEFINED__
+
+/* interface IPropertyStoreFactory */
+/* [unique][object][uuid] */ 
+
+
+EXTERN_C const IID IID_IPropertyStoreFactory;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("bc110b6d-57e8-4148-a9c6-91015ab2f3a5")
+    IPropertyStoreFactory : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetPropertyStore( 
+            /* [in] */ GETPROPERTYSTOREFLAGS flags,
+            /* [unique][in] */ __RPC__in_opt IUnknown *pUnkFactory,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetPropertyStoreForKeys( 
+            /* [unique][in] */ __RPC__in_opt const PROPERTYKEY *rgKeys,
+            /* [in] */ UINT cKeys,
+            /* [in] */ GETPROPERTYSTOREFLAGS flags,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPropertyStoreFactoryVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPropertyStoreFactory * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPropertyStoreFactory * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPropertyStoreFactory * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPropertyStore )( 
+            IPropertyStoreFactory * This,
+            /* [in] */ GETPROPERTYSTOREFLAGS flags,
+            /* [unique][in] */ __RPC__in_opt IUnknown *pUnkFactory,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPropertyStoreForKeys )( 
+            IPropertyStoreFactory * This,
+            /* [unique][in] */ __RPC__in_opt const PROPERTYKEY *rgKeys,
+            /* [in] */ UINT cKeys,
+            /* [in] */ GETPROPERTYSTOREFLAGS flags,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        END_INTERFACE
+    } IPropertyStoreFactoryVtbl;
+
+    interface IPropertyStoreFactory
+    {
+        CONST_VTBL struct IPropertyStoreFactoryVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPropertyStoreFactory_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPropertyStoreFactory_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPropertyStoreFactory_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPropertyStoreFactory_GetPropertyStore(This,flags,pUnkFactory,riid,ppv)	\
+    ( (This)->lpVtbl -> GetPropertyStore(This,flags,pUnkFactory,riid,ppv) ) 
+
+#define IPropertyStoreFactory_GetPropertyStoreForKeys(This,rgKeys,cKeys,flags,riid,ppv)	\
+    ( (This)->lpVtbl -> GetPropertyStoreForKeys(This,rgKeys,cKeys,flags,riid,ppv) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPropertyStoreFactory_INTERFACE_DEFINED__ */
+
+
+#ifndef __IDelayedPropertyStoreFactory_INTERFACE_DEFINED__
+#define __IDelayedPropertyStoreFactory_INTERFACE_DEFINED__
+
+/* interface IDelayedPropertyStoreFactory */
+/* [unique][object][uuid] */ 
+
+
+EXTERN_C const IID IID_IDelayedPropertyStoreFactory;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("40d4577f-e237-4bdb-bd69-58f089431b6a")
+    IDelayedPropertyStoreFactory : public IPropertyStoreFactory
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetDelayedPropertyStore( 
+            /* [in] */ GETPROPERTYSTOREFLAGS flags,
+            /* [in] */ DWORD dwStoreId,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IDelayedPropertyStoreFactoryVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IDelayedPropertyStoreFactory * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IDelayedPropertyStoreFactory * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IDelayedPropertyStoreFactory * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPropertyStore )( 
+            IDelayedPropertyStoreFactory * This,
+            /* [in] */ GETPROPERTYSTOREFLAGS flags,
+            /* [unique][in] */ __RPC__in_opt IUnknown *pUnkFactory,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPropertyStoreForKeys )( 
+            IDelayedPropertyStoreFactory * This,
+            /* [unique][in] */ __RPC__in_opt const PROPERTYKEY *rgKeys,
+            /* [in] */ UINT cKeys,
+            /* [in] */ GETPROPERTYSTOREFLAGS flags,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetDelayedPropertyStore )( 
+            IDelayedPropertyStoreFactory * This,
+            /* [in] */ GETPROPERTYSTOREFLAGS flags,
+            /* [in] */ DWORD dwStoreId,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        END_INTERFACE
+    } IDelayedPropertyStoreFactoryVtbl;
+
+    interface IDelayedPropertyStoreFactory
+    {
+        CONST_VTBL struct IDelayedPropertyStoreFactoryVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IDelayedPropertyStoreFactory_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IDelayedPropertyStoreFactory_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IDelayedPropertyStoreFactory_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IDelayedPropertyStoreFactory_GetPropertyStore(This,flags,pUnkFactory,riid,ppv)	\
+    ( (This)->lpVtbl -> GetPropertyStore(This,flags,pUnkFactory,riid,ppv) ) 
+
+#define IDelayedPropertyStoreFactory_GetPropertyStoreForKeys(This,rgKeys,cKeys,flags,riid,ppv)	\
+    ( (This)->lpVtbl -> GetPropertyStoreForKeys(This,rgKeys,cKeys,flags,riid,ppv) ) 
+
+
+#define IDelayedPropertyStoreFactory_GetDelayedPropertyStore(This,flags,dwStoreId,riid,ppv)	\
+    ( (This)->lpVtbl -> GetDelayedPropertyStore(This,flags,dwStoreId,riid,ppv) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IDelayedPropertyStoreFactory_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_propsys_0000_0018 */
+/* [local] */ 
+
+/* [v1_enum] */ 
+enum tagPERSIST_SPROPSTORE_FLAGS
+    {	FPSPS_READONLY	= 0x1
+    } ;
+typedef int PERSIST_SPROPSTORE_FLAGS;
+
+typedef struct tagSERIALIZEDPROPSTORAGE SERIALIZEDPROPSTORAGE;
+
+typedef SERIALIZEDPROPSTORAGE __unaligned *PUSERIALIZEDPROPSTORAGE;
+
+typedef const SERIALIZEDPROPSTORAGE __unaligned *PCUSERIALIZEDPROPSTORAGE;
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0018_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0018_v0_0_s_ifspec;
+
+#ifndef __IPersistSerializedPropStorage_INTERFACE_DEFINED__
+#define __IPersistSerializedPropStorage_INTERFACE_DEFINED__
+
+/* interface IPersistSerializedPropStorage */
+/* [object][local][unique][uuid] */ 
+
+
+EXTERN_C const IID IID_IPersistSerializedPropStorage;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("e318ad57-0aa0-450f-aca5-6fab7103d917")
+    IPersistSerializedPropStorage : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE SetFlags( 
+            /* [in] */ PERSIST_SPROPSTORE_FLAGS flags) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE SetPropertyStorage( 
+            /* [in] */ 
+            __in_bcount(cb)  PCUSERIALIZEDPROPSTORAGE psps,
+            /* [in] */ 
+            __in  DWORD cb) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetPropertyStorage( 
+            /* [out] */ 
+            __deref_out_bcount(*pcb)  SERIALIZEDPROPSTORAGE **ppsps,
+            /* [out] */ 
+            __out  DWORD *pcb) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPersistSerializedPropStorageVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPersistSerializedPropStorage * This,
+            /* [in] */ REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPersistSerializedPropStorage * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPersistSerializedPropStorage * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetFlags )( 
+            IPersistSerializedPropStorage * This,
+            /* [in] */ PERSIST_SPROPSTORE_FLAGS flags);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetPropertyStorage )( 
+            IPersistSerializedPropStorage * This,
+            /* [in] */ 
+            __in_bcount(cb)  PCUSERIALIZEDPROPSTORAGE psps,
+            /* [in] */ 
+            __in  DWORD cb);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetPropertyStorage )( 
+            IPersistSerializedPropStorage * This,
+            /* [out] */ 
+            __deref_out_bcount(*pcb)  SERIALIZEDPROPSTORAGE **ppsps,
+            /* [out] */ 
+            __out  DWORD *pcb);
+        
+        END_INTERFACE
+    } IPersistSerializedPropStorageVtbl;
+
+    interface IPersistSerializedPropStorage
+    {
+        CONST_VTBL struct IPersistSerializedPropStorageVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPersistSerializedPropStorage_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPersistSerializedPropStorage_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPersistSerializedPropStorage_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPersistSerializedPropStorage_SetFlags(This,flags)	\
+    ( (This)->lpVtbl -> SetFlags(This,flags) ) 
+
+#define IPersistSerializedPropStorage_SetPropertyStorage(This,psps,cb)	\
+    ( (This)->lpVtbl -> SetPropertyStorage(This,psps,cb) ) 
+
+#define IPersistSerializedPropStorage_GetPropertyStorage(This,ppsps,pcb)	\
+    ( (This)->lpVtbl -> GetPropertyStorage(This,ppsps,pcb) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPersistSerializedPropStorage_INTERFACE_DEFINED__ */
+
+
+#ifndef __IPropertySystemChangeNotify_INTERFACE_DEFINED__
+#define __IPropertySystemChangeNotify_INTERFACE_DEFINED__
+
+/* interface IPropertySystemChangeNotify */
+/* [unique][object][uuid] */ 
+
+
+EXTERN_C const IID IID_IPropertySystemChangeNotify;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("fa955fd9-38be-4879-a6ce-824cf52d609f")
+    IPropertySystemChangeNotify : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE SchemaRefreshed( void) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IPropertySystemChangeNotifyVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IPropertySystemChangeNotify * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IPropertySystemChangeNotify * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IPropertySystemChangeNotify * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *SchemaRefreshed )( 
+            IPropertySystemChangeNotify * This);
+        
+        END_INTERFACE
+    } IPropertySystemChangeNotifyVtbl;
+
+    interface IPropertySystemChangeNotify
+    {
+        CONST_VTBL struct IPropertySystemChangeNotifyVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IPropertySystemChangeNotify_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IPropertySystemChangeNotify_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IPropertySystemChangeNotify_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IPropertySystemChangeNotify_SchemaRefreshed(This)	\
+    ( (This)->lpVtbl -> SchemaRefreshed(This) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IPropertySystemChangeNotify_INTERFACE_DEFINED__ */
+
+
+#ifndef __ICreateObject_INTERFACE_DEFINED__
+#define __ICreateObject_INTERFACE_DEFINED__
+
+/* interface ICreateObject */
+/* [object][unique][uuid] */ 
+
+
+EXTERN_C const IID IID_ICreateObject;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("75121952-e0d0-43e5-9380-1d80483acf72")
+    ICreateObject : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE CreateObject( 
+            /* [in] */ __RPC__in REFCLSID clsid,
+            /* [unique][in] */ __RPC__in_opt IUnknown *pUnkOuter,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct ICreateObjectVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            ICreateObject * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            ICreateObject * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            ICreateObject * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *CreateObject )( 
+            ICreateObject * This,
+            /* [in] */ __RPC__in REFCLSID clsid,
+            /* [unique][in] */ __RPC__in_opt IUnknown *pUnkOuter,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ __RPC__deref_out_opt void **ppv);
+        
+        END_INTERFACE
+    } ICreateObjectVtbl;
+
+    interface ICreateObject
+    {
+        CONST_VTBL struct ICreateObjectVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define ICreateObject_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define ICreateObject_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define ICreateObject_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define ICreateObject_CreateObject(This,clsid,pUnkOuter,riid,ppv)	\
+    ( (This)->lpVtbl -> CreateObject(This,clsid,pUnkOuter,riid,ppv) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __ICreateObject_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_propsys_0000_0021 */
+/* [local] */ 
+
+// Format a property value for display purposes
+PSSTDAPI PSFormatForDisplay(
+    __in REFPROPERTYKEY propkey,
+    __in REFPROPVARIANT propvar,
+    __in PROPDESC_FORMAT_FLAGS pdfFlags,
+    __out_ecount(cchText) LPWSTR pwszText,
+    __in DWORD cchText);
+
+PSSTDAPI PSFormatForDisplayAlloc(
+    __in REFPROPERTYKEY key,
+    __in REFPROPVARIANT propvar,
+    __in PROPDESC_FORMAT_FLAGS pdff,
+    __deref_out PWSTR *ppszDisplay);
+
+PSSTDAPI PSFormatPropertyValue(
+    __in IPropertyStore *pps,
+    __in IPropertyDescription *ppd,
+    __in PROPDESC_FORMAT_FLAGS pdff,
+    __deref_out LPWSTR *ppszDisplay);
+
+
+#define PKEY_PIDSTR_MAX     10   // will take care of any long integer value
+#define GUIDSTRING_MAX      (1 + 8 + 1 + 4 + 1 + 4 + 1 + 4 + 1 + 12 + 1 + 1)  // "{12345678-1234-1234-1234-123456789012}"
+#define PKEYSTR_MAX         (GUIDSTRING_MAX + 1 + PKEY_PIDSTR_MAX)
+
+// Convert a PROPERTYKEY to and from a PWSTR
+PSSTDAPI PSStringFromPropertyKey(
+    __in REFPROPERTYKEY pkey,
+    __out_ecount(cch) LPWSTR psz,
+    __in UINT cch);
+
+PSSTDAPI PSPropertyKeyFromString(
+    __in LPCWSTR pszString,
+    __out PROPERTYKEY *pkey);
+
+
+// Creates an in-memory property store
+// Returns an IPropertyStore, IPersistSerializedPropStorage, and related interfaces interface
+PSSTDAPI PSCreateMemoryPropertyStore(
+    __in REFIID riid,
+    __deref_out void **ppv);
+
+
+// Create a read-only, delay-bind multiplexing property store
+// Returns an IPropertyStore interface or related interfaces
+PSSTDAPI PSCreateDelayedMultiplexPropertyStore(
+    __in GETPROPERTYSTOREFLAGS flags,
+    __in IDelayedPropertyStoreFactory *pdpsf,
+    __in_ecount(cStores) const DWORD *rgStoreIds,
+    __in DWORD cStores,
+    __in REFIID riid,
+    __deref_out void **ppv);
+
+
+// Create a read-only property store from one or more sources (which each must support either IPropertyStore or IPropertySetStorage)
+// Returns an IPropertyStore interface or related interfaces
+PSSTDAPI PSCreateMultiplexPropertyStore(
+    __in_ecount(cStores) IUnknown **prgpunkStores,
+    __in DWORD cStores,
+    __in REFIID riid,
+    __deref_out void **ppv);
+
+
+// Create a container for IPropertyChanges
+// Returns an IPropertyChangeArray interface
+PSSTDAPI PSCreatePropertyChangeArray(
+    __in_ecount_opt(cChanges) const PROPERTYKEY *rgpropkey,
+    __in_ecount_opt(cChanges) const PKA_FLAGS *rgflags,
+    __in_ecount_opt(cChanges) const PROPVARIANT *rgpropvar,
+    __in UINT cChanges,
+    __in REFIID riid,
+    __deref_out void **ppv);
+
+
+// Create a simple property change
+// Returns an IPropertyChange interface
+PSSTDAPI PSCreateSimplePropertyChange(
+    __in PKA_FLAGS flags,
+    __in REFPROPERTYKEY key,
+    __in REFPROPVARIANT propvar,
+    __in REFIID riid,
+    __deref_out void **ppv);
+
+
+// Get a property description
+// Returns an IPropertyDescription interface
+PSSTDAPI PSGetPropertyDescription(
+    __in REFPROPERTYKEY propkey,
+    __in REFIID riid,
+    __deref_out void **ppv);
+
+PSSTDAPI PSGetPropertyDescriptionByName(
+    __in LPCWSTR pszCanonicalName,
+    __in REFIID riid,
+    __deref_out void **ppv);
+
+
+// Lookup a per-machine registered file property handler
+PSSTDAPI PSLookupPropertyHandlerCLSID(
+    __in PCWSTR pszFilePath,
+    __out CLSID *pclsid);
+// Get a property handler, on Vista or downlevel to XP
+// punkItem is a shell item created with an SHCreateItemXXX API
+// Returns an IPropertyStore
+PSSTDAPI PSGetItemPropertyHandler(
+    __in IUnknown *punkItem,
+    __in BOOL fReadWrite,
+    __in REFIID riid,
+    __deref_out void **ppv);
+
+
+// Get a property handler, on Vista or downlevel to XP
+// punkItem is a shell item created with an SHCreateItemXXX API
+// punkCreateObject supports ICreateObject
+// Returns an IPropertyStore
+PSSTDAPI PSGetItemPropertyHandlerWithCreateObject(
+    __in IUnknown *punkItem,
+    __in BOOL fReadWrite,
+    __in IUnknown *punkCreateObject,
+    __in REFIID riid,
+    __deref_out void **ppv);
+
+
+// Get or set a property value from a store
+PSSTDAPI PSGetPropertyValue(
+    __in IPropertyStore *pps,
+    __in IPropertyDescription *ppd,
+    __out PROPVARIANT *ppropvar);
+
+PSSTDAPI PSSetPropertyValue(
+    __in IPropertyStore *pps,
+    __in IPropertyDescription *ppd,
+    __in REFPROPVARIANT propvar);
+
+
+// Interact with the set of property descriptions
+PSSTDAPI PSRegisterPropertySchema(
+    __in PCWSTR pszPath);
+
+PSSTDAPI PSUnregisterPropertySchema(
+    __in PCWSTR pszPath);
+
+PSSTDAPI PSRefreshPropertySchema();
+
+// Returns either: IPropertyDescriptionList or IEnumUnknown interfaces
+PSSTDAPI PSEnumeratePropertyDescriptions(
+    __in PROPDESC_ENUMFILTER filterOn,
+    __in REFIID riid,
+    __deref_out void **ppv);
+
+
+// Convert between a PROPERTYKEY and its canonical name
+PSSTDAPI PSGetPropertyKeyFromName(
+    __in PCWSTR pszName,
+    __out PROPERTYKEY *ppropkey);
+
+PSSTDAPI PSGetNameFromPropertyKey(
+    __in REFPROPERTYKEY propkey,
+    __deref_out PWSTR *ppszCanonicalName);
+
+
+// Coerce and canonicalize a property value
+PSSTDAPI PSCoerceToCanonicalValue(
+    __in REFPROPERTYKEY key,
+    __inout PROPVARIANT *ppropvar);
+
+
+// Convert a 'prop:' string into a list of property descriptions
+// Returns an IPropertyDescriptionList interface
+PSSTDAPI PSGetPropertyDescriptionListFromString(
+    __in LPCWSTR pszPropList,
+    __in REFIID riid,
+    __deref_out void **ppv);
+
+
+// Wrap an IPropertySetStorage interface in an IPropertyStore interface
+// Returns an IPropertyStore or related interface
+PSSTDAPI PSCreatePropertyStoreFromPropertySetStorage(
+    __in IPropertySetStorage *ppss,
+    DWORD grfMode,
+    REFIID riid,
+    __deref_out void **ppv);
+
+
+// punkSource must support IPropertyStore or IPropertySetStorage
+// On success, the returned ppv is guaranteed to support IPropertyStore.
+// If punkSource already supports IPropertyStore, no wrapper is created.
+PSSTDAPI PSCreatePropertyStoreFromObject(
+    __in IUnknown *punk,
+    __in DWORD grfMode,
+    __in REFIID riid,
+    __deref_out void **ppv);
+
+
+// punkSource must support IPropertyStore
+// riid may be IPropertyStore, IPropertySetStorage, IPropertyStoreCapabilities, or IObjectProvider
+PSSTDAPI PSCreateAdapterFromPropertyStore(
+    __in IPropertyStore *pps,
+    __in REFIID riid,
+    __deref_out void **ppv);
+
+
+// Talk to the property system using an interface
+// Returns an IPropertySystem interface
+PSSTDAPI PSGetPropertySystem(
+    __in REFIID riid,
+    __deref_out void **ppv);
+
+
+// Obtain a value from serialized property storage
+PSSTDAPI PSGetPropertyFromPropertyStorage(
+    __in_bcount(cb) PCUSERIALIZEDPROPSTORAGE psps, 
+    __in DWORD cb, 
+    __in REFPROPERTYKEY rpkey, 
+    __out PROPVARIANT *ppropvar);
+
+
+// Obtain a named value from serialized property storage
+PSSTDAPI PSGetNamedPropertyFromPropertyStorage(
+    __in_bcount(cb) PCUSERIALIZEDPROPSTORAGE psps, 
+    __in DWORD cb, 
+    __in LPCWSTR pszName, 
+    __out PROPVARIANT *ppropvar);
+
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0021_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_propsys_0000_0021_v0_0_s_ifspec;
+
+
+#ifndef __PropSysObjects_LIBRARY_DEFINED__
+#define __PropSysObjects_LIBRARY_DEFINED__
+
+/* library PropSysObjects */
+/* [version][lcid][uuid] */ 
+
+
+EXTERN_C const IID LIBID_PropSysObjects;
+
+EXTERN_C const CLSID CLSID_InMemoryPropertyStore;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("9a02e012-6303-4e1e-b9a1-630f802592c5")
+InMemoryPropertyStore;
+#endif
+
+EXTERN_C const CLSID CLSID_PropertySystem;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("b8967f85-58ae-4f46-9fb2-5d7904798f4b")
+PropertySystem;
+#endif
+#endif /* __PropSysObjects_LIBRARY_DEFINED__ */
+
+/* Additional Prototypes for ALL interfaces */
+
+unsigned long             __RPC_USER  BSTR_UserSize(     unsigned long *, unsigned long            , BSTR * ); 
+unsigned char * __RPC_USER  BSTR_UserMarshal(  unsigned long *, unsigned char *, BSTR * ); 
+unsigned char * __RPC_USER  BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * ); 
+void                      __RPC_USER  BSTR_UserFree(     unsigned long *, BSTR * ); 
+
+unsigned long             __RPC_USER  LPSAFEARRAY_UserSize(     unsigned long *, unsigned long            , LPSAFEARRAY * ); 
+unsigned char * __RPC_USER  LPSAFEARRAY_UserMarshal(  unsigned long *, unsigned char *, LPSAFEARRAY * ); 
+unsigned char * __RPC_USER  LPSAFEARRAY_UserUnmarshal(unsigned long *, unsigned char *, LPSAFEARRAY * ); 
+void                      __RPC_USER  LPSAFEARRAY_UserFree(     unsigned long *, LPSAFEARRAY * ); 
+
+unsigned long             __RPC_USER  BSTR_UserSize64(     unsigned long *, unsigned long            , BSTR * ); 
+unsigned char * __RPC_USER  BSTR_UserMarshal64(  unsigned long *, unsigned char *, BSTR * ); 
+unsigned char * __RPC_USER  BSTR_UserUnmarshal64(unsigned long *, unsigned char *, BSTR * ); 
+void                      __RPC_USER  BSTR_UserFree64(     unsigned long *, BSTR * ); 
+
+unsigned long             __RPC_USER  LPSAFEARRAY_UserSize64(     unsigned long *, unsigned long            , LPSAFEARRAY * ); 
+unsigned char * __RPC_USER  LPSAFEARRAY_UserMarshal64(  unsigned long *, unsigned char *, LPSAFEARRAY * ); 
+unsigned char * __RPC_USER  LPSAFEARRAY_UserUnmarshal64(unsigned long *, unsigned char *, LPSAFEARRAY * ); 
+void                      __RPC_USER  LPSAFEARRAY_UserFree64(     unsigned long *, LPSAFEARRAY * ); 
+
+/* [local] */ HRESULT STDMETHODCALLTYPE IInitializeWithStream_Initialize_Proxy( 
+    IInitializeWithStream * This,
+    /* [in] */ IStream *pstream,
+    /* [in] */ DWORD grfMode);
+
+
+/* [call_as] */ HRESULT STDMETHODCALLTYPE IInitializeWithStream_Initialize_Stub( 
+    IInitializeWithStream * This,
+    /* [in] */ __RPC__in_opt IStream *pstream,
+    /* [in] */ DWORD grfMode);
+
+/* [local] */ HRESULT STDMETHODCALLTYPE IPropertyDescription_CoerceToCanonicalValue_Proxy( 
+    IPropertyDescription * This,
+    /* [out][in] */ PROPVARIANT *ppropvar);
+
+
+/* [call_as] */ HRESULT STDMETHODCALLTYPE IPropertyDescription_CoerceToCanonicalValue_Stub( 
+    IPropertyDescription * This,
+    /* [in] */ __RPC__in REFPROPVARIANT propvar,
+    /* [out] */ __RPC__out PROPVARIANT *ppropvar);
+
+
+
+/* end of Additional Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
+
+ portaudio/src/hostapi/wasapi/mingw-include/rpcsal.h view
@@ -0,0 +1,113 @@+#pragma once
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#define RPC_range(min,max)
+
+#define __RPC__in           
+#define __RPC__in_string
+#define __RPC__in_opt_string
+#define __RPC__deref_opt_in_opt
+#define __RPC__opt_in_opt_string
+#define __RPC__in_ecount(size) 
+#define __RPC__in_ecount_full(size)
+#define __RPC__in_ecount_full_string(size)
+#define __RPC__in_ecount_part(size, length)
+#define __RPC__in_ecount_full_opt(size)
+#define __RPC__in_ecount_full_opt_string(size)
+#define __RPC__inout_ecount_full_opt_string(size)
+#define __RPC__in_ecount_part_opt(size, length)
+
+#define __RPC__deref_in 
+#define __RPC__deref_in_string
+#define __RPC__deref_opt_in
+#define __RPC__deref_in_opt
+#define __RPC__deref_in_ecount(size) 
+#define __RPC__deref_in_ecount_part(size, length) 
+#define __RPC__deref_in_ecount_full(size) 
+#define __RPC__deref_in_ecount_full_opt(size)
+#define __RPC__deref_in_ecount_full_string(size)
+#define __RPC__deref_in_ecount_full_opt_string(size)
+#define __RPC__deref_in_ecount_opt(size) 
+#define __RPC__deref_in_ecount_opt_string(size)
+#define __RPC__deref_in_ecount_part_opt(size, length) 
+
+// [out]
+#define __RPC__out     
+#define __RPC__out_ecount(size) 
+#define __RPC__out_ecount_part(size, length) 
+#define __RPC__out_ecount_full(size)
+#define __RPC__out_ecount_full_string(size)
+
+// [in,out] 
+#define __RPC__inout                                   
+#define __RPC__inout_string
+#define __RPC__opt_inout
+#define __RPC__inout_ecount(size)                     
+#define __RPC__inout_ecount_part(size, length)    
+#define __RPC__inout_ecount_full(size)          
+#define __RPC__inout_ecount_full_string(size)          
+
+// [in,unique] 
+#define __RPC__in_opt       
+#define __RPC__in_ecount_opt(size)   
+
+
+// [in,out,unique] 
+#define __RPC__inout_opt    
+#define __RPC__inout_ecount_opt(size)  
+#define __RPC__inout_ecount_part_opt(size, length) 
+#define __RPC__inout_ecount_full_opt(size)     
+#define __RPC__inout_ecount_full_string(size)
+
+// [out] **
+#define __RPC__deref_out   
+#define __RPC__deref_out_string
+#define __RPC__deref_out_opt 
+#define __RPC__deref_out_opt_string
+#define __RPC__deref_out_ecount(size) 
+#define __RPC__deref_out_ecount_part(size, length) 
+#define __RPC__deref_out_ecount_full(size)  
+#define __RPC__deref_out_ecount_full_string(size)
+
+
+// [in,out] **, second pointer decoration. 
+#define __RPC__deref_inout    
+#define __RPC__deref_inout_string
+#define __RPC__deref_inout_opt 
+#define __RPC__deref_inout_opt_string
+#define __RPC__deref_inout_ecount_full(size)
+#define __RPC__deref_inout_ecount_full_string(size)
+#define __RPC__deref_inout_ecount_opt(size) 
+#define __RPC__deref_inout_ecount_part_opt(size, length) 
+#define __RPC__deref_inout_ecount_full_opt(size) 
+#define __RPC__deref_inout_ecount_full_opt_string(size) 
+
+// #define __RPC_out_opt    out_opt is not allowed in rpc
+
+// [in,out,unique] 
+#define __RPC__deref_opt_inout  
+#define __RPC__deref_opt_inout_string
+#define __RPC__deref_opt_inout_ecount(size)     
+#define __RPC__deref_opt_inout_ecount_part(size, length) 
+#define __RPC__deref_opt_inout_ecount_full(size) 
+#define __RPC__deref_opt_inout_ecount_full_string(size)
+
+#define __RPC__deref_out_ecount_opt(size) 
+#define __RPC__deref_out_ecount_part_opt(size, length) 
+#define __RPC__deref_out_ecount_full_opt(size) 
+#define __RPC__deref_out_ecount_full_opt_string(size)
+
+#define __RPC__deref_opt_inout_opt      
+#define __RPC__deref_opt_inout_opt_string
+#define __RPC__deref_opt_inout_ecount_opt(size)   
+#define __RPC__deref_opt_inout_ecount_part_opt(size, length) 
+#define __RPC__deref_opt_inout_ecount_full_opt(size) 
+#define __RPC__deref_opt_inout_ecount_full_opt_string(size) 
+
+#define __RPC_full_pointer  
+#define __RPC_unique_pointer
+#define __RPC_ref_pointer
+#define __RPC_string                               
+ portaudio/src/hostapi/wasapi/mingw-include/sal.h view
@@ -0,0 +1,252 @@+#pragma once
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+/*#define __null*/ // << Conflicts with GCC internal type __null
+#define __notnull
+#define __maybenull
+#define __readonly
+#define __notreadonly
+#define __maybereadonly
+#define __valid
+#define __notvalid
+#define __maybevalid
+#define __readableTo(extent)
+#define __elem_readableTo(size)
+#define __byte_readableTo(size)
+#define __writableTo(size)
+#define __elem_writableTo(size)
+#define __byte_writableTo(size)
+#define __deref
+#define __pre
+#define __post
+#define __precond(expr)
+#define __postcond(expr)
+#define __exceptthat
+#define __execeptthat
+#define __inner_success(expr)
+#define __inner_checkReturn
+#define __inner_typefix(ctype)
+#define __inner_override
+#define __inner_callback
+#define __inner_blocksOn(resource)
+#define __inner_fallthrough_dec
+#define __inner_fallthrough
+#define __refparam
+#define __inner_control_entrypoint(category)
+#define __inner_data_entrypoint(category)
+
+#define __ecount(size)
+#define __bcount(size)
+#define __in
+#define __in_ecount(size)
+#define __in_bcount(size)
+#define __in_z
+#define __in_ecount_z(size)
+#define __in_bcount_z(size)
+#define __in_nz
+#define __in_ecount_nz(size)
+#define __in_bcount_nz(size)
+#define __out
+#define __out_ecount(size)
+#define __out_bcount(size)
+#define __out_ecount_part(size,length)
+#define __out_bcount_part(size,length)
+#define __out_ecount_full(size)
+#define __out_bcount_full(size)
+#define __out_z
+#define __out_z_opt
+#define __out_ecount_z(size)
+#define __out_bcount_z(size)
+#define __out_ecount_part_z(size,length)
+#define __out_bcount_part_z(size,length)
+#define __out_ecount_full_z(size)
+#define __out_bcount_full_z(size)
+#define __out_nz
+#define __out_nz_opt
+#define __out_ecount_nz(size)
+#define __out_bcount_nz(size)
+#define __inout
+#define __inout_ecount(size)
+#define __inout_bcount(size)
+#define __inout_ecount_part(size,length)
+#define __inout_bcount_part(size,length)
+#define __inout_ecount_full(size)
+#define __inout_bcount_full(size)
+#define __inout_z
+#define __inout_ecount_z(size)
+#define __inout_bcount_z(size)
+#define __inout_nz
+#define __inout_ecount_nz(size)
+#define __inout_bcount_nz(size)
+#define __ecount_opt(size)
+#define __bcount_opt(size)
+#define __in_opt
+#define __in_ecount_opt(size)
+#define __in_bcount_opt(size)
+#define __in_z_opt
+#define __in_ecount_z_opt(size)
+#define __in_bcount_z_opt(size)
+#define __in_nz_opt
+#define __in_ecount_nz_opt(size)
+#define __in_bcount_nz_opt(size)
+#define __out_opt
+#define __out_ecount_opt(size)
+#define __out_bcount_opt(size)
+#define __out_ecount_part_opt(size,length)
+#define __out_bcount_part_opt(size,length)
+#define __out_ecount_full_opt(size)
+#define __out_bcount_full_opt(size)
+#define __out_ecount_z_opt(size)
+#define __out_bcount_z_opt(size)
+#define __out_ecount_part_z_opt(size,length)
+#define __out_bcount_part_z_opt(size,length)
+#define __out_ecount_full_z_opt(size)
+#define __out_bcount_full_z_opt(size)
+#define __out_ecount_nz_opt(size)
+#define __out_bcount_nz_opt(size)
+#define __inout_opt
+#define __inout_ecount_opt(size)
+#define __inout_bcount_opt(size)
+#define __inout_ecount_part_opt(size,length)
+#define __inout_bcount_part_opt(size,length)
+#define __inout_ecount_full_opt(size)
+#define __inout_bcount_full_opt(size)
+#define __inout_z_opt
+#define __inout_ecount_z_opt(size)
+#define __inout_ecount_z_opt(size)
+#define __inout_bcount_z_opt(size)
+#define __inout_nz_opt
+#define __inout_ecount_nz_opt(size)
+#define __inout_bcount_nz_opt(size)
+#define __deref_ecount(size)
+#define __deref_bcount(size)
+#define __deref_out
+#define __deref_out_ecount(size)
+#define __deref_out_bcount(size)
+#define __deref_out_ecount_part(size,length)
+#define __deref_out_bcount_part(size,length)
+#define __deref_out_ecount_full(size)
+#define __deref_out_bcount_full(size)
+#define __deref_out_z
+#define __deref_out_ecount_z(size)
+#define __deref_out_bcount_z(size)
+#define __deref_out_nz
+#define __deref_out_ecount_nz(size)
+#define __deref_out_bcount_nz(size)
+#define __deref_inout
+#define __deref_inout_z
+#define __deref_inout_ecount(size)
+#define __deref_inout_bcount(size)
+#define __deref_inout_ecount_part(size,length)
+#define __deref_inout_bcount_part(size,length)
+#define __deref_inout_ecount_full(size)
+#define __deref_inout_bcount_full(size)
+#define __deref_inout_z
+#define __deref_inout_ecount_z(size)
+#define __deref_inout_bcount_z(size)
+#define __deref_inout_nz
+#define __deref_inout_ecount_nz(size)
+#define __deref_inout_bcount_nz(size)
+#define __deref_ecount_opt(size)
+#define __deref_bcount_opt(size)
+#define __deref_out_opt
+#define __deref_out_ecount_opt(size)
+#define __deref_out_bcount_opt(size)
+#define __deref_out_ecount_part_opt(size,length)
+#define __deref_out_bcount_part_opt(size,length)
+#define __deref_out_ecount_full_opt(size)
+#define __deref_out_bcount_full_opt(size)
+#define __deref_out_z_opt
+#define __deref_out_ecount_z_opt(size)
+#define __deref_out_bcount_z_opt(size)
+#define __deref_out_nz_opt
+#define __deref_out_ecount_nz_opt(size)
+#define __deref_out_bcount_nz_opt(size)
+#define __deref_inout_opt
+#define __deref_inout_ecount_opt(size)
+#define __deref_inout_bcount_opt(size)
+#define __deref_inout_ecount_part_opt(size,length)
+#define __deref_inout_bcount_part_opt(size,length)
+#define __deref_inout_ecount_full_opt(size)
+#define __deref_inout_bcount_full_opt(size)
+#define __deref_inout_z_opt
+#define __deref_inout_ecount_z_opt(size)
+#define __deref_inout_bcount_z_opt(size)
+#define __deref_inout_nz_opt
+#define __deref_inout_ecount_nz_opt(size)
+#define __deref_inout_bcount_nz_opt(size)
+#define __deref_opt_ecount(size)
+#define __deref_opt_bcount(size)
+#define __deref_opt_out
+#define __deref_opt_out_z
+#define __deref_opt_out_ecount(size)
+#define __deref_opt_out_bcount(size)
+#define __deref_opt_out_ecount_part(size,length)
+#define __deref_opt_out_bcount_part(size,length)
+#define __deref_opt_out_ecount_full(size)
+#define __deref_opt_out_bcount_full(size)
+#define __deref_opt_inout
+#define __deref_opt_inout_ecount(size)
+#define __deref_opt_inout_bcount(size)
+#define __deref_opt_inout_ecount_part(size,length)
+#define __deref_opt_inout_bcount_part(size,length)
+#define __deref_opt_inout_ecount_full(size)
+#define __deref_opt_inout_bcount_full(size)
+#define __deref_opt_inout_z
+#define __deref_opt_inout_ecount_z(size)
+#define __deref_opt_inout_bcount_z(size)
+#define __deref_opt_inout_nz
+#define __deref_opt_inout_ecount_nz(size)
+#define __deref_opt_inout_bcount_nz(size)
+#define __deref_opt_ecount_opt(size)
+#define __deref_opt_bcount_opt(size)
+#define __deref_opt_out_opt
+#define __deref_opt_out_ecount_opt(size)
+#define __deref_opt_out_bcount_opt(size)
+#define __deref_opt_out_ecount_part_opt(size,length)
+#define __deref_opt_out_bcount_part_opt(size,length)
+#define __deref_opt_out_ecount_full_opt(size)
+#define __deref_opt_out_bcount_full_opt(size)
+#define __deref_opt_out_z_opt
+#define __deref_opt_out_ecount_z_opt(size)
+#define __deref_opt_out_bcount_z_opt(size)
+#define __deref_opt_out_nz_opt
+#define __deref_opt_out_ecount_nz_opt(size)
+#define __deref_opt_out_bcount_nz_opt(size)
+#define __deref_opt_inout_opt
+#define __deref_opt_inout_ecount_opt(size)
+#define __deref_opt_inout_bcount_opt(size)
+#define __deref_opt_inout_ecount_part_opt(size,length)
+#define __deref_opt_inout_bcount_part_opt(size,length)
+#define __deref_opt_inout_ecount_full_opt(size)
+#define __deref_opt_inout_bcount_full_opt(size)
+#define __deref_opt_inout_z_opt
+#define __deref_opt_inout_ecount_z_opt(size)
+#define __deref_opt_inout_bcount_z_opt(size)
+#define __deref_opt_inout_nz_opt
+#define __deref_opt_inout_ecount_nz_opt(size)
+#define __deref_opt_inout_bcount_nz_opt(size)
+
+#define __success(expr)
+#define __nullterminated
+#define __nullnullterminated
+#define __reserved
+#define __checkReturn
+#define __typefix(ctype)
+#define __override
+#define __callback
+#define __format_string
+#define __blocksOn(resource)
+#define __control_entrypoint(category)
+#define __data_entrypoint(category)
+
+#ifndef __fallthrough
+    #define __fallthrough __inner_fallthrough
+#endif
+
+#ifndef __analysis_assume
+    #define __analysis_assume(expr)
+#endif
+ portaudio/src/hostapi/wasapi/mingw-include/sdkddkver.h view
@@ -0,0 +1,225 @@+/*
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+
+Module Name:
+
+    sdkddkver.h
+
+Abstract:
+
+    Master include file for versioning windows SDK/DDK.
+
+*/
+
+#ifndef _INC_SDKDDKVER
+#define _INC_SDKDDKVER
+
+#pragma once
+
+//
+// _WIN32_WINNT version constants
+//
+#define _WIN32_WINNT_NT4                    0x0400
+#define _WIN32_WINNT_WIN2K                  0x0500
+#define _WIN32_WINNT_WINXP                  0x0501
+#define _WIN32_WINNT_WS03                   0x0502
+#define _WIN32_WINNT_LONGHORN               0x0600
+
+//
+// _WIN32_IE_ version constants
+//
+#define _WIN32_IE_IE20                      0x0200
+#define _WIN32_IE_IE30                      0x0300
+#define _WIN32_IE_IE302                     0x0302
+#define _WIN32_IE_IE40                      0x0400
+#define _WIN32_IE_IE401                     0x0401
+#define _WIN32_IE_IE50                      0x0500
+#define _WIN32_IE_IE501                     0x0501
+#define _WIN32_IE_IE55                      0x0550
+#define _WIN32_IE_IE60                      0x0600
+#define _WIN32_IE_IE60SP1                   0x0601
+#define _WIN32_IE_IE60SP2                   0x0603
+#define _WIN32_IE_IE70                      0x0700
+
+//
+// IE <-> OS version mapping
+//
+// NT4 supports IE versions 2.0 -> 6.0 SP1
+#define _WIN32_IE_NT4                       _WIN32_IE_IE20
+#define _WIN32_IE_NT4SP1                    _WIN32_IE_IE20
+#define _WIN32_IE_NT4SP2                    _WIN32_IE_IE20
+#define _WIN32_IE_NT4SP3                    _WIN32_IE_IE302
+#define _WIN32_IE_NT4SP4                    _WIN32_IE_IE401
+#define _WIN32_IE_NT4SP5                    _WIN32_IE_IE401
+#define _WIN32_IE_NT4SP6                    _WIN32_IE_IE50
+// Win98 supports IE versions 4.01 -> 6.0 SP1
+#define _WIN32_IE_WIN98                     _WIN32_IE_IE401
+// Win98SE supports IE versions 5.0 -> 6.0 SP1
+#define _WIN32_IE_WIN98SE                   _WIN32_IE_IE50
+// WinME supports IE versions 5.5 -> 6.0 SP1
+#define _WIN32_IE_WINME                     _WIN32_IE_IE55
+// Win2k supports IE versions 5.01 -> 6.0 SP1
+#define _WIN32_IE_WIN2K                     _WIN32_IE_IE501
+#define _WIN32_IE_WIN2KSP1                  _WIN32_IE_IE501
+#define _WIN32_IE_WIN2KSP2                  _WIN32_IE_IE501
+#define _WIN32_IE_WIN2KSP3                  _WIN32_IE_IE501
+#define _WIN32_IE_WIN2KSP4                  _WIN32_IE_IE501
+#define _WIN32_IE_XP                        _WIN32_IE_IE60
+#define _WIN32_IE_XPSP1                     _WIN32_IE_IE60SP1
+#define _WIN32_IE_XPSP2                     _WIN32_IE_IE60SP2
+#define _WIN32_IE_WS03                      0x0602
+#define _WIN32_IE_WS03SP1                   _WIN32_IE_IE60SP2
+#define _WIN32_IE_LONGHORN                  _WIN32_IE_IE70
+
+
+//
+// NTDDI version constants
+//
+#define NTDDI_WIN2K                         0x05000000
+#define NTDDI_WIN2KSP1                      0x05000100
+#define NTDDI_WIN2KSP2                      0x05000200
+#define NTDDI_WIN2KSP3                      0x05000300
+#define NTDDI_WIN2KSP4                      0x05000400
+
+#define NTDDI_WINXP                         0x05010000
+#define NTDDI_WINXPSP1                      0x05010100
+#define NTDDI_WINXPSP2                      0x05010200
+
+#define NTDDI_WS03                          0x05020000
+#define NTDDI_WS03SP1                       0x05020100
+
+#define NTDDI_LONGHORN                      0x06000000
+
+//
+// masks for version macros
+//
+#define OSVERSION_MASK      0xFFFF0000
+#define SPVERSION_MASK      0x0000FF00
+#define SUBVERSION_MASK     0x000000FF
+
+
+//
+// macros to extract various version fields from the NTDDI version
+//
+#define OSVER(Version)  ((Version) & OSVERSION_MASK)
+#define SPVER(Version)  (((Version) & SPVERSION_MASK) >> 8)
+#define SUBVER(Version) (((Version) & SUBVERSION_MASK) )
+
+
+#if defined(DECLSPEC_DEPRECATED_DDK)
+
+// deprecate in 2k or later
+#if (NTDDI_VERSION >= NTDDI_WIN2K)
+#define DECLSPEC_DEPRECATED_DDK_WIN2K DECLSPEC_DEPRECATED_DDK
+#else
+#define DECLSPEC_DEPRECATED_DDK_WIN2K
+#endif
+
+// deprecate in XP or later
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+#define DECLSPEC_DEPRECATED_DDK_WINXP DECLSPEC_DEPRECATED_DDK
+#else
+#define DECLSPEC_DEPRECATED_DDK_WINXP
+#endif
+
+// deprecate in WS03 or later
+#if (NTDDI_VERSION >= NTDDI_WS03)
+#define DECLSPEC_DEPRECATED_DDK_WIN2003 DECLSPEC_DEPRECATED_DDK
+#else
+#define DECLSPEC_DEPRECATED_DDK_WIN2003
+#endif
+
+// deprecate in WS03 or later
+#if (NTDDI_VERSION >= NTDDI_LONGHORN)
+#define DECLSPEC_DEPRECATED_DDK_LONGHORN DECLSPEC_DEPRECATED_DDK
+#else
+#define DECLSPEC_DEPRECATED_DDK_LONGHORN
+#endif
+
+#endif // defined(DECLSPEC_DEPRECATED_DDK)
+
+
+//
+// if versions aren't already defined, default to most current
+//
+
+#define NTDDI_VERSION_FROM_WIN32_WINNT2(ver)    ver##0000
+#define NTDDI_VERSION_FROM_WIN32_WINNT(ver)     NTDDI_VERSION_FROM_WIN32_WINNT2(ver)
+
+#if !defined(_WIN32_WINNT) && !defined(_CHICAGO_)
+#define  _WIN32_WINNT   0x0600
+#endif
+
+#ifndef NTDDI_VERSION
+#ifdef _WIN32_WINNT
+// set NTDDI_VERSION based on _WIN32_WINNT
+#define NTDDI_VERSION   NTDDI_VERSION_FROM_WIN32_WINNT(_WIN32_WINNT)
+#else
+#define NTDDI_VERSION   0x06000000
+#endif
+#endif
+
+#ifndef WINVER
+#ifdef _WIN32_WINNT
+// set WINVER based on _WIN32_WINNT
+#define WINVER          _WIN32_WINNT
+#else
+#define WINVER          0x0600
+#endif
+#endif
+
+#ifndef _WIN32_IE
+#ifdef _WIN32_WINNT
+// set _WIN32_IE based on _WIN32_WINNT
+#if (_WIN32_WINNT <= _WIN32_WINNT_NT4)
+#define _WIN32_IE       _WIN32_IE_IE50
+#elif (_WIN32_WINNT <= _WIN32_WINNT_WIN2K)
+#define _WIN32_IE       _WIN32_IE_IE501
+#elif (_WIN32_WINNT <= _WIN32_WINNT_WINXP)
+#define _WIN32_IE       _WIN32_IE_IE60
+#elif (_WIN32_WINNT <= _WIN32_WINNT_WS03)
+#define _WIN32_IE       0x0602
+#else
+#define _WIN32_IE       0x0700
+#endif
+#else
+#define _WIN32_IE       0x0700
+#endif
+#endif
+
+//
+// Sanity check for compatible versions
+//
+#if defined(_WIN32_WINNT) && !defined(MIDL_PASS) && !defined(RC_INVOKED)
+
+#if (defined(WINVER) && (WINVER < 0x0400) && (_WIN32_WINNT > 0x0400))
+#error WINVER setting conflicts with _WIN32_WINNT setting
+#endif
+
+#if (((OSVERSION_MASK & NTDDI_VERSION) == NTDDI_WIN2K) && (_WIN32_WINNT != _WIN32_WINNT_WIN2K))
+#error NTDDI_VERSION setting conflicts with _WIN32_WINNT setting
+#endif
+
+#if (((OSVERSION_MASK & NTDDI_VERSION) == NTDDI_WINXP) && (_WIN32_WINNT != _WIN32_WINNT_WINXP))
+#error NTDDI_VERSION setting conflicts with _WIN32_WINNT setting
+#endif
+
+#if (((OSVERSION_MASK & NTDDI_VERSION) == NTDDI_WS03) && (_WIN32_WINNT != _WIN32_WINNT_WS03))
+#error NTDDI_VERSION setting conflicts with _WIN32_WINNT setting
+#endif
+
+#if (((OSVERSION_MASK & NTDDI_VERSION) == NTDDI_LONGHORN) && (_WIN32_WINNT != _WIN32_WINNT_LONGHORN))
+#error NTDDI_VERSION setting conflicts with _WIN32_WINNT setting
+#endif
+
+#if ((_WIN32_WINNT < _WIN32_WINNT_WIN2K) && (_WIN32_IE > _WIN32_IE_IE60SP1))
+#error _WIN32_WINNT settings conflicts with _WIN32_IE setting
+#endif
+
+#endif  // defined(_WIN32_WINNT) && !defined(MIDL_PASS) && !defined(_WINRESRC_)
+
+
+#endif  // !_INC_SDKDDKVER
+
+
+ portaudio/src/hostapi/wasapi/mingw-include/shtypes.h view
@@ -0,0 +1,468 @@+
+
+/* this ALWAYS GENERATED file contains the definitions for the interfaces */
+
+
+ /* File created by MIDL compiler version 7.00.0499 */
+/* Compiler settings for shtypes.idl:
+    Oicf, W1, Zp8, env=Win32 (32b run)
+    protocol : dce , ms_ext, c_ext, robust
+    error checks: allocation ref bounds_check enum stub_data 
+    VC __declspec() decoration level: 
+         __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+         DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING(  )
+
+#pragma warning( disable: 4049 )  /* more than 64k source lines */
+
+
+/* verify that the <rpcndr.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 500
+#endif
+
+/* verify that the <rpcsal.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCSAL_H_VERSION__
+#define __REQUIRED_RPCSAL_H_VERSION__ 100
+#endif
+
+#include "rpc.h"
+#include "rpcndr.h"
+
+#ifndef __RPCNDR_H_VERSION__
+#error this stub requires an updated version of <rpcndr.h>
+#endif // __RPCNDR_H_VERSION__
+
+
+#ifndef __shtypes_h__
+#define __shtypes_h__
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#pragma once
+#endif
+
+/* Forward Declarations */ 
+
+/* header files for imported files */
+#include "wtypes.h"
+
+#ifdef __cplusplus
+extern "C"{
+#endif 
+
+
+/* interface __MIDL_itf_shtypes_0000_0000 */
+/* [local] */ 
+
+//+-------------------------------------------------------------------------
+//
+//  Microsoft Windows
+//  Copyright (c) Microsoft Corporation. All rights reserved.
+//
+//--------------------------------------------------------------------------
+//===========================================================================
+//
+// Object identifiers in the explorer's name space (ItemID and IDList)
+//
+//  All the items that the user can browse with the explorer (such as files,
+// directories, servers, work-groups, etc.) has an identifier which is unique
+// among items within the parent folder. Those identifiers are called item
+// IDs (SHITEMID). Since all its parent folders have their own item IDs,
+// any items can be uniquely identified by a list of item IDs, which is called
+// an ID list (ITEMIDLIST).
+//
+//  ID lists are almost always allocated by the task allocator (see some
+// description below as well as OLE 2.0 SDK) and may be passed across
+// some of shell interfaces (such as IShellFolder). Each item ID in an ID list
+// is only meaningful to its parent folder (which has generated it), and all
+// the clients must treat it as an opaque binary data except the first two
+// bytes, which indicates the size of the item ID.
+//
+//  When a shell extension -- which implements the IShellFolder interace --
+// generates an item ID, it may put any information in it, not only the data
+// with that it needs to identifies the item, but also some additional
+// information, which would help implementing some other functions efficiently.
+// For example, the shell's IShellFolder implementation of file system items
+// stores the primary (long) name of a file or a directory as the item
+// identifier, but it also stores its alternative (short) name, size and date
+// etc.
+//
+//  When an ID list is passed to one of shell APIs (such as SHGetPathFromIDList),
+// it is always an absolute path -- relative from the root of the name space,
+// which is the desktop folder. When an ID list is passed to one of IShellFolder
+// member function, it is always a relative path from the folder (unless it
+// is explicitly specified).
+//
+//===========================================================================
+//
+// SHITEMID -- Item ID  (mkid)
+//     USHORT      cb;             // Size of the ID (including cb itself)
+//     BYTE        abID[];         // The item ID (variable length)
+//
+#include <pshpack1.h>
+typedef struct _SHITEMID
+    {
+    USHORT cb;
+    BYTE abID[ 1 ];
+    } 	SHITEMID;
+
+#include <poppack.h>
+#if defined(_M_IX86)
+#define __unaligned
+#endif // __unaligned
+typedef SHITEMID __unaligned *LPSHITEMID;
+
+typedef const SHITEMID __unaligned *LPCSHITEMID;
+
+//
+// ITEMIDLIST -- List if item IDs (combined with 0-terminator)
+//
+#include <pshpack1.h>
+typedef struct _ITEMIDLIST
+    {
+    SHITEMID mkid;
+    } 	ITEMIDLIST;
+
+#if defined(STRICT_TYPED_ITEMIDS) && defined(__cplusplus)
+typedef struct _ITEMIDLIST_RELATIVE : ITEMIDLIST {} ITEMIDLIST_RELATIVE;
+typedef struct _ITEMID_CHILD : ITEMIDLIST_RELATIVE {} ITEMID_CHILD;
+typedef struct _ITEMIDLIST_ABSOLUTE : ITEMIDLIST_RELATIVE {} ITEMIDLIST_ABSOLUTE;
+#else // !(defined(STRICT_TYPED_ITEMIDS) && defined(__cplusplus))
+typedef ITEMIDLIST ITEMIDLIST_RELATIVE;
+
+typedef ITEMIDLIST ITEMID_CHILD;
+
+typedef ITEMIDLIST ITEMIDLIST_ABSOLUTE;
+
+#endif // defined(STRICT_TYPED_ITEMIDS) && defined(__cplusplus)
+#include <poppack.h>
+typedef /* [unique] */  __RPC_unique_pointer BYTE_BLOB *wirePIDL;
+
+typedef /* [wire_marshal] */ ITEMIDLIST __unaligned *LPITEMIDLIST;
+
+typedef /* [wire_marshal] */ const ITEMIDLIST __unaligned *LPCITEMIDLIST;
+
+#if defined(STRICT_TYPED_ITEMIDS) && defined(__cplusplus)
+typedef /* [wire_marshal] */ ITEMIDLIST_ABSOLUTE *PIDLIST_ABSOLUTE;
+
+typedef /* [wire_marshal] */ const ITEMIDLIST_ABSOLUTE *PCIDLIST_ABSOLUTE;
+
+typedef /* [wire_marshal] */ const ITEMIDLIST_ABSOLUTE __unaligned *PCUIDLIST_ABSOLUTE;
+
+typedef /* [wire_marshal] */ ITEMIDLIST_RELATIVE *PIDLIST_RELATIVE;
+
+typedef /* [wire_marshal] */ const ITEMIDLIST_RELATIVE *PCIDLIST_RELATIVE;
+
+typedef /* [wire_marshal] */ ITEMIDLIST_RELATIVE __unaligned *PUIDLIST_RELATIVE;
+
+typedef /* [wire_marshal] */ const ITEMIDLIST_RELATIVE __unaligned *PCUIDLIST_RELATIVE;
+
+typedef /* [wire_marshal] */ ITEMID_CHILD *PITEMID_CHILD;
+
+typedef /* [wire_marshal] */ const ITEMID_CHILD *PCITEMID_CHILD;
+
+typedef /* [wire_marshal] */ ITEMID_CHILD __unaligned *PUITEMID_CHILD;
+
+typedef /* [wire_marshal] */ const ITEMID_CHILD __unaligned *PCUITEMID_CHILD;
+
+typedef const PCUITEMID_CHILD *PCUITEMID_CHILD_ARRAY;
+
+typedef const PCUIDLIST_RELATIVE *PCUIDLIST_RELATIVE_ARRAY;
+
+typedef const PCIDLIST_ABSOLUTE *PCIDLIST_ABSOLUTE_ARRAY;
+
+typedef const PCUIDLIST_ABSOLUTE *PCUIDLIST_ABSOLUTE_ARRAY;
+
+#else // !(defined(STRICT_TYPED_ITEMIDS) && defined(__cplusplus))
+#define PIDLIST_ABSOLUTE         LPITEMIDLIST
+#define PCIDLIST_ABSOLUTE        LPCITEMIDLIST
+#define PCUIDLIST_ABSOLUTE       LPCITEMIDLIST
+#define PIDLIST_RELATIVE         LPITEMIDLIST
+#define PCIDLIST_RELATIVE        LPCITEMIDLIST
+#define PUIDLIST_RELATIVE        LPITEMIDLIST
+#define PCUIDLIST_RELATIVE       LPCITEMIDLIST
+#define PITEMID_CHILD            LPITEMIDLIST
+#define PCITEMID_CHILD           LPCITEMIDLIST
+#define PUITEMID_CHILD           LPITEMIDLIST
+#define PCUITEMID_CHILD          LPCITEMIDLIST
+#define PCUITEMID_CHILD_ARRAY    LPCITEMIDLIST *
+#define PCUIDLIST_RELATIVE_ARRAY LPCITEMIDLIST *
+#define PCIDLIST_ABSOLUTE_ARRAY  LPCITEMIDLIST *
+#define PCUIDLIST_ABSOLUTE_ARRAY LPCITEMIDLIST *
+#endif // defined(STRICT_TYPED_ITEMIDS) && defined(__cplusplus)
+#ifdef MIDL_PASS
+typedef struct _WIN32_FIND_DATAA
+    {
+    DWORD dwFileAttributes;
+    FILETIME ftCreationTime;
+    FILETIME ftLastAccessTime;
+    FILETIME ftLastWriteTime;
+    DWORD nFileSizeHigh;
+    DWORD nFileSizeLow;
+    DWORD dwReserved0;
+    DWORD dwReserved1;
+    CHAR cFileName[ 260 ];
+    CHAR cAlternateFileName[ 14 ];
+    } 	WIN32_FIND_DATAA;
+
+typedef struct _WIN32_FIND_DATAA *PWIN32_FIND_DATAA;
+
+typedef struct _WIN32_FIND_DATAA *LPWIN32_FIND_DATAA;
+
+typedef struct _WIN32_FIND_DATAW
+    {
+    DWORD dwFileAttributes;
+    FILETIME ftCreationTime;
+    FILETIME ftLastAccessTime;
+    FILETIME ftLastWriteTime;
+    DWORD nFileSizeHigh;
+    DWORD nFileSizeLow;
+    DWORD dwReserved0;
+    DWORD dwReserved1;
+    WCHAR cFileName[ 260 ];
+    WCHAR cAlternateFileName[ 14 ];
+    } 	WIN32_FIND_DATAW;
+
+typedef struct _WIN32_FIND_DATAW *PWIN32_FIND_DATAW;
+
+typedef struct _WIN32_FIND_DATAW *LPWIN32_FIND_DATAW;
+
+#endif // MIDL_PASS
+//-------------------------------------------------------------------------
+//
+// struct STRRET
+//
+// structure for returning strings from IShellFolder member functions
+//
+//-------------------------------------------------------------------------
+//
+//  uType indicate which union member to use 
+//    STRRET_WSTR    Use STRRET.pOleStr     must be freed by caller of GetDisplayNameOf
+//    STRRET_OFFSET  Use STRRET.uOffset     Offset into SHITEMID for ANSI string 
+//    STRRET_CSTR    Use STRRET.cStr        ANSI Buffer
+//
+typedef /* [v1_enum] */ 
+enum tagSTRRET_TYPE
+    {	STRRET_WSTR	= 0,
+	STRRET_OFFSET	= 0x1,
+	STRRET_CSTR	= 0x2
+    } 	STRRET_TYPE;
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#pragma warning(push)
+#pragma warning(disable:4201) /* nonstandard extension used : nameless struct/union */
+#pragma once
+#endif
+#include <pshpack8.h>
+typedef struct _STRRET
+    {
+    UINT uType;
+    union 
+        {
+        LPWSTR pOleStr;
+        UINT uOffset;
+        char cStr[ 260 ];
+        } 	DUMMYUNIONNAME;
+    } 	STRRET;
+
+#include <poppack.h>
+#if defined(_MSC_VER) && (_MSC_VER >= 1200)
+#pragma warning(pop)
+#endif
+typedef STRRET *LPSTRRET;
+
+//-------------------------------------------------------------------------
+//
+// struct SHELLDETAILS
+//
+// structure for returning strings from IShellDetails
+//
+//-------------------------------------------------------------------------
+//
+//  fmt;            // LVCFMT_* value (header only)
+//  cxChar;         // Number of 'average' characters (header only)
+//  str;            // String information
+//
+#include <pshpack1.h>
+typedef struct _SHELLDETAILS
+    {
+    int fmt;
+    int cxChar;
+    STRRET str;
+    } 	SHELLDETAILS;
+
+typedef struct _SHELLDETAILS *LPSHELLDETAILS;
+
+#include <poppack.h>
+
+#if (_WIN32_IE >= _WIN32_IE_IE60SP2)
+typedef /* [v1_enum] */ 
+enum tagPERCEIVED
+    {	PERCEIVED_TYPE_FIRST	= -3,
+	PERCEIVED_TYPE_CUSTOM	= -3,
+	PERCEIVED_TYPE_UNSPECIFIED	= -2,
+	PERCEIVED_TYPE_FOLDER	= -1,
+	PERCEIVED_TYPE_UNKNOWN	= 0,
+	PERCEIVED_TYPE_TEXT	= 1,
+	PERCEIVED_TYPE_IMAGE	= 2,
+	PERCEIVED_TYPE_AUDIO	= 3,
+	PERCEIVED_TYPE_VIDEO	= 4,
+	PERCEIVED_TYPE_COMPRESSED	= 5,
+	PERCEIVED_TYPE_DOCUMENT	= 6,
+	PERCEIVED_TYPE_SYSTEM	= 7,
+	PERCEIVED_TYPE_APPLICATION	= 8,
+	PERCEIVED_TYPE_GAMEMEDIA	= 9,
+	PERCEIVED_TYPE_CONTACTS	= 10,
+	PERCEIVED_TYPE_LAST	= 10
+    } 	PERCEIVED;
+
+#define PERCEIVEDFLAG_UNDEFINED     0x0000
+#define PERCEIVEDFLAG_SOFTCODED     0x0001
+#define PERCEIVEDFLAG_HARDCODED     0x0002
+#define PERCEIVEDFLAG_NATIVESUPPORT 0x0004
+#define PERCEIVEDFLAG_GDIPLUS       0x0010
+#define PERCEIVEDFLAG_WMSDK         0x0020
+#define PERCEIVEDFLAG_ZIPFOLDER     0x0040
+typedef DWORD PERCEIVEDFLAG;
+
+#endif  // _WIN32_IE_IE60SP2
+
+#if (NTDDI_VERSION >= NTDDI_LONGHORN)
+typedef struct _COMDLG_FILTERSPEC
+    {
+    LPCWSTR pszName;
+    LPCWSTR pszSpec;
+    } 	COMDLG_FILTERSPEC;
+
+typedef struct tagMACHINE_ID
+    {
+    char szName[ 16 ];
+    } 	MACHINE_ID;
+
+typedef struct tagDOMAIN_RELATIVE_OBJECTID
+    {
+    GUID guidVolume;
+    GUID guidObject;
+    } 	DOMAIN_RELATIVE_OBJECTID;
+
+typedef GUID KNOWNFOLDERID;
+
+#if 0
+typedef KNOWNFOLDERID *REFKNOWNFOLDERID;
+
+#endif // 0
+#ifdef __cplusplus
+#define REFKNOWNFOLDERID const KNOWNFOLDERID &
+#else // !__cplusplus
+#define REFKNOWNFOLDERID const KNOWNFOLDERID * __MIDL_CONST
+#endif // __cplusplus
+#endif  // NTDDI_LONGHORN
+typedef GUID FOLDERTYPEID;
+
+#if 0
+typedef FOLDERTYPEID *REFFOLDERTYPEID;
+
+#endif // 0
+#ifdef __cplusplus
+#define REFFOLDERTYPEID const FOLDERTYPEID &
+#else // !__cplusplus
+#define REFFOLDERTYPEID const FOLDERTYPEID * __MIDL_CONST
+#endif // __cplusplus
+typedef GUID TASKOWNERID;
+
+#if 0
+typedef TASKOWNERID *REFTASKOWNERID;
+
+#endif // 0
+#ifdef __cplusplus
+#define REFTASKOWNERID const TASKOWNERID &
+#else // !__cplusplus
+#define REFTASKOWNERID const TASKOWNERID * __MIDL_CONST
+#endif // __cplusplus
+#ifndef LF_FACESIZE
+typedef struct tagLOGFONTA
+    {
+    LONG lfHeight;
+    LONG lfWidth;
+    LONG lfEscapement;
+    LONG lfOrientation;
+    LONG lfWeight;
+    BYTE lfItalic;
+    BYTE lfUnderline;
+    BYTE lfStrikeOut;
+    BYTE lfCharSet;
+    BYTE lfOutPrecision;
+    BYTE lfClipPrecision;
+    BYTE lfQuality;
+    BYTE lfPitchAndFamily;
+    CHAR lfFaceName[ 32 ];
+    } 	LOGFONTA;
+
+typedef struct tagLOGFONTW
+    {
+    LONG lfHeight;
+    LONG lfWidth;
+    LONG lfEscapement;
+    LONG lfOrientation;
+    LONG lfWeight;
+    BYTE lfItalic;
+    BYTE lfUnderline;
+    BYTE lfStrikeOut;
+    BYTE lfCharSet;
+    BYTE lfOutPrecision;
+    BYTE lfClipPrecision;
+    BYTE lfQuality;
+    BYTE lfPitchAndFamily;
+    WCHAR lfFaceName[ 32 ];
+    } 	LOGFONTW;
+
+typedef LOGFONTA LOGFONT;
+
+#endif // LF_FACESIZE
+typedef /* [v1_enum] */ 
+enum tagSHCOLSTATE
+    {	SHCOLSTATE_TYPE_STR	= 0x1,
+	SHCOLSTATE_TYPE_INT	= 0x2,
+	SHCOLSTATE_TYPE_DATE	= 0x3,
+	SHCOLSTATE_TYPEMASK	= 0xf,
+	SHCOLSTATE_ONBYDEFAULT	= 0x10,
+	SHCOLSTATE_SLOW	= 0x20,
+	SHCOLSTATE_EXTENDED	= 0x40,
+	SHCOLSTATE_SECONDARYUI	= 0x80,
+	SHCOLSTATE_HIDDEN	= 0x100,
+	SHCOLSTATE_PREFER_VARCMP	= 0x200,
+	SHCOLSTATE_PREFER_FMTCMP	= 0x400,
+	SHCOLSTATE_NOSORTBYFOLDERNESS	= 0x800,
+	SHCOLSTATE_VIEWONLY	= 0x10000,
+	SHCOLSTATE_BATCHREAD	= 0x20000,
+	SHCOLSTATE_NO_GROUPBY	= 0x40000,
+	SHCOLSTATE_FIXED_WIDTH	= 0x1000,
+	SHCOLSTATE_NODPISCALE	= 0x2000,
+	SHCOLSTATE_FIXED_RATIO	= 0x4000,
+	SHCOLSTATE_DISPLAYMASK	= 0xf000
+    } 	SHCOLSTATE;
+
+typedef DWORD SHCOLSTATEF;
+
+typedef PROPERTYKEY SHCOLUMNID;
+
+typedef const SHCOLUMNID *LPCSHCOLUMNID;
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_shtypes_0000_0000_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_shtypes_0000_0000_v0_0_s_ifspec;
+
+/* Additional Prototypes for ALL interfaces */
+
+/* end of Additional Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
+
+ portaudio/src/hostapi/wasapi/mingw-include/structuredquery.h view
@@ -0,0 +1,2478 @@+
+
+/* this ALWAYS GENERATED file contains the definitions for the interfaces */
+
+
+ /* File created by MIDL compiler version 7.00.0499 */
+/* Compiler settings for structuredquery.idl:
+    Oicf, W1, Zp8, env=Win32 (32b run)
+    protocol : dce , ms_ext, c_ext, robust
+    error checks: allocation ref bounds_check enum stub_data 
+    VC __declspec() decoration level: 
+         __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+         DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING(  )
+
+#pragma warning( disable: 4049 )  /* more than 64k source lines */
+
+
+/* verify that the <rpcndr.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+
+/* verify that the <rpcsal.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCSAL_H_VERSION__
+#define __REQUIRED_RPCSAL_H_VERSION__ 100
+#endif
+
+#include "rpc.h"
+#include "rpcndr.h"
+
+#ifndef __RPCNDR_H_VERSION__
+#error this stub requires an updated version of <rpcndr.h>
+#endif // __RPCNDR_H_VERSION__
+
+#ifndef COM_NO_WINDOWS_H
+#include "windows.h"
+#include "ole2.h"
+#endif /*COM_NO_WINDOWS_H*/
+
+#ifndef __structuredquery_h__
+#define __structuredquery_h__
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#pragma once
+#endif
+
+/* Forward Declarations */ 
+
+#ifndef __IQueryParser_FWD_DEFINED__
+#define __IQueryParser_FWD_DEFINED__
+typedef interface IQueryParser IQueryParser;
+#endif 	/* __IQueryParser_FWD_DEFINED__ */
+
+
+#ifndef __IConditionFactory_FWD_DEFINED__
+#define __IConditionFactory_FWD_DEFINED__
+typedef interface IConditionFactory IConditionFactory;
+#endif 	/* __IConditionFactory_FWD_DEFINED__ */
+
+
+#ifndef __IQuerySolution_FWD_DEFINED__
+#define __IQuerySolution_FWD_DEFINED__
+typedef interface IQuerySolution IQuerySolution;
+#endif 	/* __IQuerySolution_FWD_DEFINED__ */
+
+
+#ifndef __ICondition_FWD_DEFINED__
+#define __ICondition_FWD_DEFINED__
+typedef interface ICondition ICondition;
+#endif 	/* __ICondition_FWD_DEFINED__ */
+
+
+#ifndef __IConditionGenerator_FWD_DEFINED__
+#define __IConditionGenerator_FWD_DEFINED__
+typedef interface IConditionGenerator IConditionGenerator;
+#endif 	/* __IConditionGenerator_FWD_DEFINED__ */
+
+
+#ifndef __IRichChunk_FWD_DEFINED__
+#define __IRichChunk_FWD_DEFINED__
+typedef interface IRichChunk IRichChunk;
+#endif 	/* __IRichChunk_FWD_DEFINED__ */
+
+
+#ifndef __IInterval_FWD_DEFINED__
+#define __IInterval_FWD_DEFINED__
+typedef interface IInterval IInterval;
+#endif 	/* __IInterval_FWD_DEFINED__ */
+
+
+#ifndef __IMetaData_FWD_DEFINED__
+#define __IMetaData_FWD_DEFINED__
+typedef interface IMetaData IMetaData;
+#endif 	/* __IMetaData_FWD_DEFINED__ */
+
+
+#ifndef __IEntity_FWD_DEFINED__
+#define __IEntity_FWD_DEFINED__
+typedef interface IEntity IEntity;
+#endif 	/* __IEntity_FWD_DEFINED__ */
+
+
+#ifndef __IRelationship_FWD_DEFINED__
+#define __IRelationship_FWD_DEFINED__
+typedef interface IRelationship IRelationship;
+#endif 	/* __IRelationship_FWD_DEFINED__ */
+
+
+#ifndef __INamedEntity_FWD_DEFINED__
+#define __INamedEntity_FWD_DEFINED__
+typedef interface INamedEntity INamedEntity;
+#endif 	/* __INamedEntity_FWD_DEFINED__ */
+
+
+#ifndef __ISchemaProvider_FWD_DEFINED__
+#define __ISchemaProvider_FWD_DEFINED__
+typedef interface ISchemaProvider ISchemaProvider;
+#endif 	/* __ISchemaProvider_FWD_DEFINED__ */
+
+
+#ifndef __ITokenCollection_FWD_DEFINED__
+#define __ITokenCollection_FWD_DEFINED__
+typedef interface ITokenCollection ITokenCollection;
+#endif 	/* __ITokenCollection_FWD_DEFINED__ */
+
+
+#ifndef __INamedEntityCollector_FWD_DEFINED__
+#define __INamedEntityCollector_FWD_DEFINED__
+typedef interface INamedEntityCollector INamedEntityCollector;
+#endif 	/* __INamedEntityCollector_FWD_DEFINED__ */
+
+
+#ifndef __ISchemaLocalizerSupport_FWD_DEFINED__
+#define __ISchemaLocalizerSupport_FWD_DEFINED__
+typedef interface ISchemaLocalizerSupport ISchemaLocalizerSupport;
+#endif 	/* __ISchemaLocalizerSupport_FWD_DEFINED__ */
+
+
+#ifndef __IQueryParserManager_FWD_DEFINED__
+#define __IQueryParserManager_FWD_DEFINED__
+typedef interface IQueryParserManager IQueryParserManager;
+#endif 	/* __IQueryParserManager_FWD_DEFINED__ */
+
+
+#ifndef __QueryParser_FWD_DEFINED__
+#define __QueryParser_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class QueryParser QueryParser;
+#else
+typedef struct QueryParser QueryParser;
+#endif /* __cplusplus */
+
+#endif 	/* __QueryParser_FWD_DEFINED__ */
+
+
+#ifndef __NegationCondition_FWD_DEFINED__
+#define __NegationCondition_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class NegationCondition NegationCondition;
+#else
+typedef struct NegationCondition NegationCondition;
+#endif /* __cplusplus */
+
+#endif 	/* __NegationCondition_FWD_DEFINED__ */
+
+
+#ifndef __CompoundCondition_FWD_DEFINED__
+#define __CompoundCondition_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class CompoundCondition CompoundCondition;
+#else
+typedef struct CompoundCondition CompoundCondition;
+#endif /* __cplusplus */
+
+#endif 	/* __CompoundCondition_FWD_DEFINED__ */
+
+
+#ifndef __LeafCondition_FWD_DEFINED__
+#define __LeafCondition_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class LeafCondition LeafCondition;
+#else
+typedef struct LeafCondition LeafCondition;
+#endif /* __cplusplus */
+
+#endif 	/* __LeafCondition_FWD_DEFINED__ */
+
+
+#ifndef __ConditionFactory_FWD_DEFINED__
+#define __ConditionFactory_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class ConditionFactory ConditionFactory;
+#else
+typedef struct ConditionFactory ConditionFactory;
+#endif /* __cplusplus */
+
+#endif 	/* __ConditionFactory_FWD_DEFINED__ */
+
+
+#ifndef __Interval_FWD_DEFINED__
+#define __Interval_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class Interval Interval;
+#else
+typedef struct Interval Interval;
+#endif /* __cplusplus */
+
+#endif 	/* __Interval_FWD_DEFINED__ */
+
+
+#ifndef __QueryParserManager_FWD_DEFINED__
+#define __QueryParserManager_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class QueryParserManager QueryParserManager;
+#else
+typedef struct QueryParserManager QueryParserManager;
+#endif /* __cplusplus */
+
+#endif 	/* __QueryParserManager_FWD_DEFINED__ */
+
+
+/* header files for imported files */
+#include "oaidl.h"
+#include "ocidl.h"
+#include "propidl.h"
+
+#ifdef __cplusplus
+extern "C"{
+#endif 
+
+
+/* interface __MIDL_itf_structuredquery_0000_0000 */
+/* [local] */ 
+
+
+
+
+
+
+
+
+
+
+
+typedef /* [v1_enum] */ 
+enum tagCONDITION_TYPE
+    {	CT_AND_CONDITION	= 0,
+	CT_OR_CONDITION	= ( CT_AND_CONDITION + 1 ) ,
+	CT_NOT_CONDITION	= ( CT_OR_CONDITION + 1 ) ,
+	CT_LEAF_CONDITION	= ( CT_NOT_CONDITION + 1 ) 
+    } 	CONDITION_TYPE;
+
+typedef /* [v1_enum] */ 
+enum tagCONDITION_OPERATION
+    {	COP_IMPLICIT	= 0,
+	COP_EQUAL	= ( COP_IMPLICIT + 1 ) ,
+	COP_NOTEQUAL	= ( COP_EQUAL + 1 ) ,
+	COP_LESSTHAN	= ( COP_NOTEQUAL + 1 ) ,
+	COP_GREATERTHAN	= ( COP_LESSTHAN + 1 ) ,
+	COP_LESSTHANOREQUAL	= ( COP_GREATERTHAN + 1 ) ,
+	COP_GREATERTHANOREQUAL	= ( COP_LESSTHANOREQUAL + 1 ) ,
+	COP_VALUE_STARTSWITH	= ( COP_GREATERTHANOREQUAL + 1 ) ,
+	COP_VALUE_ENDSWITH	= ( COP_VALUE_STARTSWITH + 1 ) ,
+	COP_VALUE_CONTAINS	= ( COP_VALUE_ENDSWITH + 1 ) ,
+	COP_VALUE_NOTCONTAINS	= ( COP_VALUE_CONTAINS + 1 ) ,
+	COP_DOSWILDCARDS	= ( COP_VALUE_NOTCONTAINS + 1 ) ,
+	COP_WORD_EQUAL	= ( COP_DOSWILDCARDS + 1 ) ,
+	COP_WORD_STARTSWITH	= ( COP_WORD_EQUAL + 1 ) ,
+	COP_APPLICATION_SPECIFIC	= ( COP_WORD_STARTSWITH + 1 ) 
+    } 	CONDITION_OPERATION;
+
+typedef /* [v1_enum] */ 
+enum tagSTRUCTURED_QUERY_SINGLE_OPTION
+    {	SQSO_SCHEMA	= 0,
+	SQSO_LOCALE_WORD_BREAKING	= ( SQSO_SCHEMA + 1 ) ,
+	SQSO_WORD_BREAKER	= ( SQSO_LOCALE_WORD_BREAKING + 1 ) ,
+	SQSO_NATURAL_SYNTAX	= ( SQSO_WORD_BREAKER + 1 ) ,
+	SQSO_AUTOMATIC_WILDCARD	= ( SQSO_NATURAL_SYNTAX + 1 ) ,
+	SQSO_TRACE_LEVEL	= ( SQSO_AUTOMATIC_WILDCARD + 1 ) ,
+	SQSO_LANGUAGE_KEYWORDS	= ( SQSO_TRACE_LEVEL + 1 ) 
+    } 	STRUCTURED_QUERY_SINGLE_OPTION;
+
+typedef /* [v1_enum] */ 
+enum tagSTRUCTURED_QUERY_MULTIOPTION
+    {	SQMO_VIRTUAL_PROPERTY	= 0,
+	SQMO_DEFAULT_PROPERTY	= ( SQMO_VIRTUAL_PROPERTY + 1 ) ,
+	SQMO_GENERATOR_FOR_TYPE	= ( SQMO_DEFAULT_PROPERTY + 1 ) 
+    } 	STRUCTURED_QUERY_MULTIOPTION;
+
+typedef /* [v1_enum] */ 
+enum tagSTRUCTURED_QUERY_PARSE_ERROR
+    {	SQPE_NONE	= 0,
+	SQPE_EXTRA_OPENING_PARENTHESIS	= ( SQPE_NONE + 1 ) ,
+	SQPE_EXTRA_CLOSING_PARENTHESIS	= ( SQPE_EXTRA_OPENING_PARENTHESIS + 1 ) ,
+	SQPE_IGNORED_MODIFIER	= ( SQPE_EXTRA_CLOSING_PARENTHESIS + 1 ) ,
+	SQPE_IGNORED_CONNECTOR	= ( SQPE_IGNORED_MODIFIER + 1 ) ,
+	SQPE_IGNORED_KEYWORD	= ( SQPE_IGNORED_CONNECTOR + 1 ) ,
+	SQPE_UNHANDLED	= ( SQPE_IGNORED_KEYWORD + 1 ) 
+    } 	STRUCTURED_QUERY_PARSE_ERROR;
+
+/* [v1_enum] */ 
+enum tagSTRUCTURED_QUERY_RESOLVE_OPTION
+    {	SQRO_DONT_RESOLVE_DATETIME	= 0x1,
+	SQRO_ALWAYS_ONE_INTERVAL	= 0x2,
+	SQRO_DONT_SIMPLIFY_CONDITION_TREES	= 0x4,
+	SQRO_DONT_MAP_RELATIONS	= 0x8,
+	SQRO_DONT_RESOLVE_RANGES	= 0x10,
+	SQRO_DONT_REMOVE_UNRESTRICTED_KEYWORDS	= 0x20,
+	SQRO_DONT_SPLIT_WORDS	= 0x40,
+	SQRO_IGNORE_PHRASE_ORDER	= 0x80
+    } ;
+typedef int STRUCTURED_QUERY_RESOLVE_OPTION;
+
+typedef /* [v1_enum] */ 
+enum tagINTERVAL_LIMIT_KIND
+    {	ILK_EXPLICIT_INCLUDED	= 0,
+	ILK_EXPLICIT_EXCLUDED	= ( ILK_EXPLICIT_INCLUDED + 1 ) ,
+	ILK_NEGATIVE_INFINITY	= ( ILK_EXPLICIT_EXCLUDED + 1 ) ,
+	ILK_POSITIVE_INFINITY	= ( ILK_NEGATIVE_INFINITY + 1 ) 
+    } 	INTERVAL_LIMIT_KIND;
+
+typedef /* [v1_enum] */ 
+enum tagQUERY_PARSER_MANAGER_OPTION
+    {	QPMO_SCHEMA_BINARY_NAME	= 0,
+	QPMO_PRELOCALIZED_SCHEMA_BINARY_PATH	= ( QPMO_SCHEMA_BINARY_NAME + 1 ) ,
+	QPMO_UNLOCALIZED_SCHEMA_BINARY_PATH	= ( QPMO_PRELOCALIZED_SCHEMA_BINARY_PATH + 1 ) ,
+	QPMO_LOCALIZED_SCHEMA_BINARY_PATH	= ( QPMO_UNLOCALIZED_SCHEMA_BINARY_PATH + 1 ) ,
+	QPMO_APPEND_LCID_TO_LOCALIZED_PATH	= ( QPMO_LOCALIZED_SCHEMA_BINARY_PATH + 1 ) ,
+	QPMO_LOCALIZER_SUPPORT	= ( QPMO_APPEND_LCID_TO_LOCALIZED_PATH + 1 ) 
+    } 	QUERY_PARSER_MANAGER_OPTION;
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_structuredquery_0000_0000_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_structuredquery_0000_0000_v0_0_s_ifspec;
+
+#ifndef __IQueryParser_INTERFACE_DEFINED__
+#define __IQueryParser_INTERFACE_DEFINED__
+
+/* interface IQueryParser */
+/* [unique][uuid][object] */ 
+
+
+EXTERN_C const IID IID_IQueryParser;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("2EBDEE67-3505-43f8-9946-EA44ABC8E5B0")
+    IQueryParser : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE Parse( 
+            /* [in] */ __RPC__in LPCWSTR pszInputString,
+            /* [in] */ __RPC__in_opt IEnumUnknown *pCustomProperties,
+            /* [retval][out] */ __RPC__deref_out_opt IQuerySolution **ppSolution) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE SetOption( 
+            /* [in] */ STRUCTURED_QUERY_SINGLE_OPTION option,
+            /* [in] */ __RPC__in const PROPVARIANT *pOptionValue) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetOption( 
+            /* [in] */ STRUCTURED_QUERY_SINGLE_OPTION option,
+            /* [retval][out] */ __RPC__out PROPVARIANT *pOptionValue) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE SetMultiOption( 
+            /* [in] */ STRUCTURED_QUERY_MULTIOPTION option,
+            /* [in] */ __RPC__in LPCWSTR pszOptionKey,
+            /* [in] */ __RPC__in const PROPVARIANT *pOptionValue) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetSchemaProvider( 
+            /* [retval][out] */ __RPC__deref_out_opt ISchemaProvider **ppSchemaProvider) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE RestateToString( 
+            /* [in] */ __RPC__in_opt ICondition *pCondition,
+            /* [in] */ BOOL fUseEnglish,
+            /* [out] */ __RPC__deref_out_opt LPWSTR *ppszQueryString) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE ParsePropertyValue( 
+            /* [in] */ __RPC__in LPCWSTR pszPropertyName,
+            /* [in] */ __RPC__in LPCWSTR pszInputString,
+            /* [retval][out] */ __RPC__deref_out_opt IQuerySolution **ppSolution) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE RestatePropertyValueToString( 
+            /* [in] */ __RPC__in_opt ICondition *pCondition,
+            /* [in] */ BOOL fUseEnglish,
+            /* [out] */ __RPC__deref_out_opt LPWSTR *ppszPropertyName,
+            /* [out] */ __RPC__deref_out_opt LPWSTR *ppszQueryString) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IQueryParserVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IQueryParser * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IQueryParser * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IQueryParser * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *Parse )( 
+            IQueryParser * This,
+            /* [in] */ __RPC__in LPCWSTR pszInputString,
+            /* [in] */ __RPC__in_opt IEnumUnknown *pCustomProperties,
+            /* [retval][out] */ __RPC__deref_out_opt IQuerySolution **ppSolution);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetOption )( 
+            IQueryParser * This,
+            /* [in] */ STRUCTURED_QUERY_SINGLE_OPTION option,
+            /* [in] */ __RPC__in const PROPVARIANT *pOptionValue);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetOption )( 
+            IQueryParser * This,
+            /* [in] */ STRUCTURED_QUERY_SINGLE_OPTION option,
+            /* [retval][out] */ __RPC__out PROPVARIANT *pOptionValue);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetMultiOption )( 
+            IQueryParser * This,
+            /* [in] */ STRUCTURED_QUERY_MULTIOPTION option,
+            /* [in] */ __RPC__in LPCWSTR pszOptionKey,
+            /* [in] */ __RPC__in const PROPVARIANT *pOptionValue);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetSchemaProvider )( 
+            IQueryParser * This,
+            /* [retval][out] */ __RPC__deref_out_opt ISchemaProvider **ppSchemaProvider);
+        
+        HRESULT ( STDMETHODCALLTYPE *RestateToString )( 
+            IQueryParser * This,
+            /* [in] */ __RPC__in_opt ICondition *pCondition,
+            /* [in] */ BOOL fUseEnglish,
+            /* [out] */ __RPC__deref_out_opt LPWSTR *ppszQueryString);
+        
+        HRESULT ( STDMETHODCALLTYPE *ParsePropertyValue )( 
+            IQueryParser * This,
+            /* [in] */ __RPC__in LPCWSTR pszPropertyName,
+            /* [in] */ __RPC__in LPCWSTR pszInputString,
+            /* [retval][out] */ __RPC__deref_out_opt IQuerySolution **ppSolution);
+        
+        HRESULT ( STDMETHODCALLTYPE *RestatePropertyValueToString )( 
+            IQueryParser * This,
+            /* [in] */ __RPC__in_opt ICondition *pCondition,
+            /* [in] */ BOOL fUseEnglish,
+            /* [out] */ __RPC__deref_out_opt LPWSTR *ppszPropertyName,
+            /* [out] */ __RPC__deref_out_opt LPWSTR *ppszQueryString);
+        
+        END_INTERFACE
+    } IQueryParserVtbl;
+
+    interface IQueryParser
+    {
+        CONST_VTBL struct IQueryParserVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IQueryParser_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IQueryParser_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IQueryParser_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IQueryParser_Parse(This,pszInputString,pCustomProperties,ppSolution)	\
+    ( (This)->lpVtbl -> Parse(This,pszInputString,pCustomProperties,ppSolution) ) 
+
+#define IQueryParser_SetOption(This,option,pOptionValue)	\
+    ( (This)->lpVtbl -> SetOption(This,option,pOptionValue) ) 
+
+#define IQueryParser_GetOption(This,option,pOptionValue)	\
+    ( (This)->lpVtbl -> GetOption(This,option,pOptionValue) ) 
+
+#define IQueryParser_SetMultiOption(This,option,pszOptionKey,pOptionValue)	\
+    ( (This)->lpVtbl -> SetMultiOption(This,option,pszOptionKey,pOptionValue) ) 
+
+#define IQueryParser_GetSchemaProvider(This,ppSchemaProvider)	\
+    ( (This)->lpVtbl -> GetSchemaProvider(This,ppSchemaProvider) ) 
+
+#define IQueryParser_RestateToString(This,pCondition,fUseEnglish,ppszQueryString)	\
+    ( (This)->lpVtbl -> RestateToString(This,pCondition,fUseEnglish,ppszQueryString) ) 
+
+#define IQueryParser_ParsePropertyValue(This,pszPropertyName,pszInputString,ppSolution)	\
+    ( (This)->lpVtbl -> ParsePropertyValue(This,pszPropertyName,pszInputString,ppSolution) ) 
+
+#define IQueryParser_RestatePropertyValueToString(This,pCondition,fUseEnglish,ppszPropertyName,ppszQueryString)	\
+    ( (This)->lpVtbl -> RestatePropertyValueToString(This,pCondition,fUseEnglish,ppszPropertyName,ppszQueryString) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IQueryParser_INTERFACE_DEFINED__ */
+
+
+#ifndef __IConditionFactory_INTERFACE_DEFINED__
+#define __IConditionFactory_INTERFACE_DEFINED__
+
+/* interface IConditionFactory */
+/* [unique][uuid][object] */ 
+
+
+EXTERN_C const IID IID_IConditionFactory;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("A5EFE073-B16F-474f-9F3E-9F8B497A3E08")
+    IConditionFactory : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE MakeNot( 
+            /* [in] */ __RPC__in_opt ICondition *pSubCondition,
+            /* [in] */ BOOL simplify,
+            /* [retval][out] */ __RPC__deref_out_opt ICondition **ppResultQuery) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE MakeAndOr( 
+            /* [in] */ CONDITION_TYPE nodeType,
+            /* [in] */ __RPC__in_opt IEnumUnknown *pSubConditions,
+            /* [in] */ BOOL simplify,
+            /* [retval][out] */ __RPC__deref_out_opt ICondition **ppResultQuery) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE MakeLeaf( 
+            /* [unique][in] */ __RPC__in_opt LPCWSTR pszPropertyName,
+            /* [in] */ CONDITION_OPERATION op,
+            /* [unique][in] */ __RPC__in_opt LPCWSTR pszValueType,
+            /* [in] */ __RPC__in const PROPVARIANT *pValue,
+            /* [in] */ __RPC__in_opt IRichChunk *pPropertyNameTerm,
+            /* [in] */ __RPC__in_opt IRichChunk *pOperationTerm,
+            /* [in] */ __RPC__in_opt IRichChunk *pValueTerm,
+            /* [in] */ BOOL expand,
+            /* [retval][out] */ __RPC__deref_out_opt ICondition **ppResultQuery) = 0;
+        
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE Resolve( 
+            /* [in] */ 
+            __in  ICondition *pConditionTree,
+            /* [in] */ 
+            __in  STRUCTURED_QUERY_RESOLVE_OPTION sqro,
+            /* [ref][in] */ 
+            __in_opt  const SYSTEMTIME *pstReferenceTime,
+            /* [retval][out] */ 
+            __out  ICondition **ppResolvedConditionTree) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IConditionFactoryVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IConditionFactory * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IConditionFactory * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IConditionFactory * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *MakeNot )( 
+            IConditionFactory * This,
+            /* [in] */ __RPC__in_opt ICondition *pSubCondition,
+            /* [in] */ BOOL simplify,
+            /* [retval][out] */ __RPC__deref_out_opt ICondition **ppResultQuery);
+        
+        HRESULT ( STDMETHODCALLTYPE *MakeAndOr )( 
+            IConditionFactory * This,
+            /* [in] */ CONDITION_TYPE nodeType,
+            /* [in] */ __RPC__in_opt IEnumUnknown *pSubConditions,
+            /* [in] */ BOOL simplify,
+            /* [retval][out] */ __RPC__deref_out_opt ICondition **ppResultQuery);
+        
+        HRESULT ( STDMETHODCALLTYPE *MakeLeaf )( 
+            IConditionFactory * This,
+            /* [unique][in] */ __RPC__in_opt LPCWSTR pszPropertyName,
+            /* [in] */ CONDITION_OPERATION op,
+            /* [unique][in] */ __RPC__in_opt LPCWSTR pszValueType,
+            /* [in] */ __RPC__in const PROPVARIANT *pValue,
+            /* [in] */ __RPC__in_opt IRichChunk *pPropertyNameTerm,
+            /* [in] */ __RPC__in_opt IRichChunk *pOperationTerm,
+            /* [in] */ __RPC__in_opt IRichChunk *pValueTerm,
+            /* [in] */ BOOL expand,
+            /* [retval][out] */ __RPC__deref_out_opt ICondition **ppResultQuery);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Resolve )( 
+            IConditionFactory * This,
+            /* [in] */ 
+            __in  ICondition *pConditionTree,
+            /* [in] */ 
+            __in  STRUCTURED_QUERY_RESOLVE_OPTION sqro,
+            /* [ref][in] */ 
+            __in_opt  const SYSTEMTIME *pstReferenceTime,
+            /* [retval][out] */ 
+            __out  ICondition **ppResolvedConditionTree);
+        
+        END_INTERFACE
+    } IConditionFactoryVtbl;
+
+    interface IConditionFactory
+    {
+        CONST_VTBL struct IConditionFactoryVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IConditionFactory_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IConditionFactory_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IConditionFactory_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IConditionFactory_MakeNot(This,pSubCondition,simplify,ppResultQuery)	\
+    ( (This)->lpVtbl -> MakeNot(This,pSubCondition,simplify,ppResultQuery) ) 
+
+#define IConditionFactory_MakeAndOr(This,nodeType,pSubConditions,simplify,ppResultQuery)	\
+    ( (This)->lpVtbl -> MakeAndOr(This,nodeType,pSubConditions,simplify,ppResultQuery) ) 
+
+#define IConditionFactory_MakeLeaf(This,pszPropertyName,op,pszValueType,pValue,pPropertyNameTerm,pOperationTerm,pValueTerm,expand,ppResultQuery)	\
+    ( (This)->lpVtbl -> MakeLeaf(This,pszPropertyName,op,pszValueType,pValue,pPropertyNameTerm,pOperationTerm,pValueTerm,expand,ppResultQuery) ) 
+
+#define IConditionFactory_Resolve(This,pConditionTree,sqro,pstReferenceTime,ppResolvedConditionTree)	\
+    ( (This)->lpVtbl -> Resolve(This,pConditionTree,sqro,pstReferenceTime,ppResolvedConditionTree) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IConditionFactory_INTERFACE_DEFINED__ */
+
+
+#ifndef __IQuerySolution_INTERFACE_DEFINED__
+#define __IQuerySolution_INTERFACE_DEFINED__
+
+/* interface IQuerySolution */
+/* [unique][uuid][object] */ 
+
+
+EXTERN_C const IID IID_IQuerySolution;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("D6EBC66B-8921-4193-AFDD-A1789FB7FF57")
+    IQuerySolution : public IConditionFactory
+    {
+    public:
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE GetQuery( 
+            /* [out] */ 
+            __out_opt  ICondition **ppQueryNode,
+            /* [out] */ 
+            __out_opt  IEntity **ppMainType) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetErrors( 
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **ppParseErrors) = 0;
+        
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE GetLexicalData( 
+            /* [out] */ 
+            __deref_opt_out  LPWSTR *ppszInputString,
+            /* [out] */ 
+            __out_opt  ITokenCollection **ppTokens,
+            /* [out] */ 
+            __out_opt  LCID *pLocale,
+            /* [out] */ 
+            __out_opt  IUnknown **ppWordBreaker) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IQuerySolutionVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IQuerySolution * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IQuerySolution * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IQuerySolution * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *MakeNot )( 
+            IQuerySolution * This,
+            /* [in] */ __RPC__in_opt ICondition *pSubCondition,
+            /* [in] */ BOOL simplify,
+            /* [retval][out] */ __RPC__deref_out_opt ICondition **ppResultQuery);
+        
+        HRESULT ( STDMETHODCALLTYPE *MakeAndOr )( 
+            IQuerySolution * This,
+            /* [in] */ CONDITION_TYPE nodeType,
+            /* [in] */ __RPC__in_opt IEnumUnknown *pSubConditions,
+            /* [in] */ BOOL simplify,
+            /* [retval][out] */ __RPC__deref_out_opt ICondition **ppResultQuery);
+        
+        HRESULT ( STDMETHODCALLTYPE *MakeLeaf )( 
+            IQuerySolution * This,
+            /* [unique][in] */ __RPC__in_opt LPCWSTR pszPropertyName,
+            /* [in] */ CONDITION_OPERATION op,
+            /* [unique][in] */ __RPC__in_opt LPCWSTR pszValueType,
+            /* [in] */ __RPC__in const PROPVARIANT *pValue,
+            /* [in] */ __RPC__in_opt IRichChunk *pPropertyNameTerm,
+            /* [in] */ __RPC__in_opt IRichChunk *pOperationTerm,
+            /* [in] */ __RPC__in_opt IRichChunk *pValueTerm,
+            /* [in] */ BOOL expand,
+            /* [retval][out] */ __RPC__deref_out_opt ICondition **ppResultQuery);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Resolve )( 
+            IQuerySolution * This,
+            /* [in] */ 
+            __in  ICondition *pConditionTree,
+            /* [in] */ 
+            __in  STRUCTURED_QUERY_RESOLVE_OPTION sqro,
+            /* [ref][in] */ 
+            __in_opt  const SYSTEMTIME *pstReferenceTime,
+            /* [retval][out] */ 
+            __out  ICondition **ppResolvedConditionTree);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *GetQuery )( 
+            IQuerySolution * This,
+            /* [out] */ 
+            __out_opt  ICondition **ppQueryNode,
+            /* [out] */ 
+            __out_opt  IEntity **ppMainType);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetErrors )( 
+            IQuerySolution * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **ppParseErrors);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *GetLexicalData )( 
+            IQuerySolution * This,
+            /* [out] */ 
+            __deref_opt_out  LPWSTR *ppszInputString,
+            /* [out] */ 
+            __out_opt  ITokenCollection **ppTokens,
+            /* [out] */ 
+            __out_opt  LCID *pLocale,
+            /* [out] */ 
+            __out_opt  IUnknown **ppWordBreaker);
+        
+        END_INTERFACE
+    } IQuerySolutionVtbl;
+
+    interface IQuerySolution
+    {
+        CONST_VTBL struct IQuerySolutionVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IQuerySolution_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IQuerySolution_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IQuerySolution_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IQuerySolution_MakeNot(This,pSubCondition,simplify,ppResultQuery)	\
+    ( (This)->lpVtbl -> MakeNot(This,pSubCondition,simplify,ppResultQuery) ) 
+
+#define IQuerySolution_MakeAndOr(This,nodeType,pSubConditions,simplify,ppResultQuery)	\
+    ( (This)->lpVtbl -> MakeAndOr(This,nodeType,pSubConditions,simplify,ppResultQuery) ) 
+
+#define IQuerySolution_MakeLeaf(This,pszPropertyName,op,pszValueType,pValue,pPropertyNameTerm,pOperationTerm,pValueTerm,expand,ppResultQuery)	\
+    ( (This)->lpVtbl -> MakeLeaf(This,pszPropertyName,op,pszValueType,pValue,pPropertyNameTerm,pOperationTerm,pValueTerm,expand,ppResultQuery) ) 
+
+#define IQuerySolution_Resolve(This,pConditionTree,sqro,pstReferenceTime,ppResolvedConditionTree)	\
+    ( (This)->lpVtbl -> Resolve(This,pConditionTree,sqro,pstReferenceTime,ppResolvedConditionTree) ) 
+
+
+#define IQuerySolution_GetQuery(This,ppQueryNode,ppMainType)	\
+    ( (This)->lpVtbl -> GetQuery(This,ppQueryNode,ppMainType) ) 
+
+#define IQuerySolution_GetErrors(This,riid,ppParseErrors)	\
+    ( (This)->lpVtbl -> GetErrors(This,riid,ppParseErrors) ) 
+
+#define IQuerySolution_GetLexicalData(This,ppszInputString,ppTokens,pLocale,ppWordBreaker)	\
+    ( (This)->lpVtbl -> GetLexicalData(This,ppszInputString,ppTokens,pLocale,ppWordBreaker) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IQuerySolution_INTERFACE_DEFINED__ */
+
+
+#ifndef __ICondition_INTERFACE_DEFINED__
+#define __ICondition_INTERFACE_DEFINED__
+
+/* interface ICondition */
+/* [unique][uuid][object] */ 
+
+
+EXTERN_C const IID IID_ICondition;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("0FC988D4-C935-4b97-A973-46282EA175C8")
+    ICondition : public IPersistStream
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetConditionType( 
+            /* [retval][out] */ __RPC__out CONDITION_TYPE *pNodeType) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetSubConditions( 
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **ppv) = 0;
+        
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE GetComparisonInfo( 
+            /* [out] */ 
+            __deref_opt_out  LPWSTR *ppszPropertyName,
+            /* [out] */ 
+            __out_opt  CONDITION_OPERATION *pOperation,
+            /* [out] */ 
+            __out_opt  PROPVARIANT *pValue) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetValueType( 
+            /* [retval][out] */ __RPC__deref_out_opt LPWSTR *ppszValueTypeName) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetValueNormalization( 
+            /* [retval][out] */ __RPC__deref_out_opt LPWSTR *ppszNormalization) = 0;
+        
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE GetInputTerms( 
+            /* [out] */ 
+            __out_opt  IRichChunk **ppPropertyTerm,
+            /* [out] */ 
+            __out_opt  IRichChunk **ppOperationTerm,
+            /* [out] */ 
+            __out_opt  IRichChunk **ppValueTerm) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE Clone( 
+            /* [retval][out] */ __RPC__deref_out_opt ICondition **ppc) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IConditionVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            ICondition * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            ICondition * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            ICondition * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetClassID )( 
+            ICondition * This,
+            /* [out] */ __RPC__out CLSID *pClassID);
+        
+        HRESULT ( STDMETHODCALLTYPE *IsDirty )( 
+            ICondition * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *Load )( 
+            ICondition * This,
+            /* [unique][in] */ __RPC__in_opt IStream *pStm);
+        
+        HRESULT ( STDMETHODCALLTYPE *Save )( 
+            ICondition * This,
+            /* [unique][in] */ __RPC__in_opt IStream *pStm,
+            /* [in] */ BOOL fClearDirty);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetSizeMax )( 
+            ICondition * This,
+            /* [out] */ __RPC__out ULARGE_INTEGER *pcbSize);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetConditionType )( 
+            ICondition * This,
+            /* [retval][out] */ __RPC__out CONDITION_TYPE *pNodeType);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetSubConditions )( 
+            ICondition * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **ppv);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *GetComparisonInfo )( 
+            ICondition * This,
+            /* [out] */ 
+            __deref_opt_out  LPWSTR *ppszPropertyName,
+            /* [out] */ 
+            __out_opt  CONDITION_OPERATION *pOperation,
+            /* [out] */ 
+            __out_opt  PROPVARIANT *pValue);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetValueType )( 
+            ICondition * This,
+            /* [retval][out] */ __RPC__deref_out_opt LPWSTR *ppszValueTypeName);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetValueNormalization )( 
+            ICondition * This,
+            /* [retval][out] */ __RPC__deref_out_opt LPWSTR *ppszNormalization);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *GetInputTerms )( 
+            ICondition * This,
+            /* [out] */ 
+            __out_opt  IRichChunk **ppPropertyTerm,
+            /* [out] */ 
+            __out_opt  IRichChunk **ppOperationTerm,
+            /* [out] */ 
+            __out_opt  IRichChunk **ppValueTerm);
+        
+        HRESULT ( STDMETHODCALLTYPE *Clone )( 
+            ICondition * This,
+            /* [retval][out] */ __RPC__deref_out_opt ICondition **ppc);
+        
+        END_INTERFACE
+    } IConditionVtbl;
+
+    interface ICondition
+    {
+        CONST_VTBL struct IConditionVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define ICondition_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define ICondition_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define ICondition_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define ICondition_GetClassID(This,pClassID)	\
+    ( (This)->lpVtbl -> GetClassID(This,pClassID) ) 
+
+
+#define ICondition_IsDirty(This)	\
+    ( (This)->lpVtbl -> IsDirty(This) ) 
+
+#define ICondition_Load(This,pStm)	\
+    ( (This)->lpVtbl -> Load(This,pStm) ) 
+
+#define ICondition_Save(This,pStm,fClearDirty)	\
+    ( (This)->lpVtbl -> Save(This,pStm,fClearDirty) ) 
+
+#define ICondition_GetSizeMax(This,pcbSize)	\
+    ( (This)->lpVtbl -> GetSizeMax(This,pcbSize) ) 
+
+
+#define ICondition_GetConditionType(This,pNodeType)	\
+    ( (This)->lpVtbl -> GetConditionType(This,pNodeType) ) 
+
+#define ICondition_GetSubConditions(This,riid,ppv)	\
+    ( (This)->lpVtbl -> GetSubConditions(This,riid,ppv) ) 
+
+#define ICondition_GetComparisonInfo(This,ppszPropertyName,pOperation,pValue)	\
+    ( (This)->lpVtbl -> GetComparisonInfo(This,ppszPropertyName,pOperation,pValue) ) 
+
+#define ICondition_GetValueType(This,ppszValueTypeName)	\
+    ( (This)->lpVtbl -> GetValueType(This,ppszValueTypeName) ) 
+
+#define ICondition_GetValueNormalization(This,ppszNormalization)	\
+    ( (This)->lpVtbl -> GetValueNormalization(This,ppszNormalization) ) 
+
+#define ICondition_GetInputTerms(This,ppPropertyTerm,ppOperationTerm,ppValueTerm)	\
+    ( (This)->lpVtbl -> GetInputTerms(This,ppPropertyTerm,ppOperationTerm,ppValueTerm) ) 
+
+#define ICondition_Clone(This,ppc)	\
+    ( (This)->lpVtbl -> Clone(This,ppc) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __ICondition_INTERFACE_DEFINED__ */
+
+
+#ifndef __IConditionGenerator_INTERFACE_DEFINED__
+#define __IConditionGenerator_INTERFACE_DEFINED__
+
+/* interface IConditionGenerator */
+/* [unique][uuid][object] */ 
+
+
+EXTERN_C const IID IID_IConditionGenerator;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("92D2CC58-4386-45a3-B98C-7E0CE64A4117")
+    IConditionGenerator : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE Initialize( 
+            /* [in] */ __RPC__in_opt ISchemaProvider *pSchemaProvider) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE RecognizeNamedEntities( 
+            /* [in] */ __RPC__in LPCWSTR pszInputString,
+            /* [in] */ LCID lcid,
+            /* [in] */ __RPC__in_opt ITokenCollection *pTokenCollection,
+            /* [out][in] */ __RPC__inout_opt INamedEntityCollector *pNamedEntities) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GenerateForLeaf( 
+            /* [in] */ __RPC__in_opt IConditionFactory *pConditionFactory,
+            /* [unique][in] */ __RPC__in_opt LPCWSTR pszPropertyName,
+            /* [in] */ CONDITION_OPERATION op,
+            /* [unique][in] */ __RPC__in_opt LPCWSTR pszValueType,
+            /* [in] */ __RPC__in LPCWSTR pszValue,
+            /* [unique][in] */ __RPC__in_opt LPCWSTR pszValue2,
+            /* [in] */ __RPC__in_opt IRichChunk *pPropertyNameTerm,
+            /* [in] */ __RPC__in_opt IRichChunk *pOperationTerm,
+            /* [in] */ __RPC__in_opt IRichChunk *pValueTerm,
+            /* [in] */ BOOL automaticWildcard,
+            /* [out] */ __RPC__out BOOL *pNoStringQuery,
+            /* [retval][out] */ __RPC__deref_out_opt ICondition **ppQueryExpression) = 0;
+        
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE DefaultPhrase( 
+            /* [unique][in] */ LPCWSTR pszValueType,
+            /* [in] */ const PROPVARIANT *ppropvar,
+            /* [in] */ BOOL fUseEnglish,
+            /* [retval][out] */ 
+            __deref_opt_out  LPWSTR *ppszPhrase) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IConditionGeneratorVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IConditionGenerator * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IConditionGenerator * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IConditionGenerator * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *Initialize )( 
+            IConditionGenerator * This,
+            /* [in] */ __RPC__in_opt ISchemaProvider *pSchemaProvider);
+        
+        HRESULT ( STDMETHODCALLTYPE *RecognizeNamedEntities )( 
+            IConditionGenerator * This,
+            /* [in] */ __RPC__in LPCWSTR pszInputString,
+            /* [in] */ LCID lcid,
+            /* [in] */ __RPC__in_opt ITokenCollection *pTokenCollection,
+            /* [out][in] */ __RPC__inout_opt INamedEntityCollector *pNamedEntities);
+        
+        HRESULT ( STDMETHODCALLTYPE *GenerateForLeaf )( 
+            IConditionGenerator * This,
+            /* [in] */ __RPC__in_opt IConditionFactory *pConditionFactory,
+            /* [unique][in] */ __RPC__in_opt LPCWSTR pszPropertyName,
+            /* [in] */ CONDITION_OPERATION op,
+            /* [unique][in] */ __RPC__in_opt LPCWSTR pszValueType,
+            /* [in] */ __RPC__in LPCWSTR pszValue,
+            /* [unique][in] */ __RPC__in_opt LPCWSTR pszValue2,
+            /* [in] */ __RPC__in_opt IRichChunk *pPropertyNameTerm,
+            /* [in] */ __RPC__in_opt IRichChunk *pOperationTerm,
+            /* [in] */ __RPC__in_opt IRichChunk *pValueTerm,
+            /* [in] */ BOOL automaticWildcard,
+            /* [out] */ __RPC__out BOOL *pNoStringQuery,
+            /* [retval][out] */ __RPC__deref_out_opt ICondition **ppQueryExpression);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *DefaultPhrase )( 
+            IConditionGenerator * This,
+            /* [unique][in] */ LPCWSTR pszValueType,
+            /* [in] */ const PROPVARIANT *ppropvar,
+            /* [in] */ BOOL fUseEnglish,
+            /* [retval][out] */ 
+            __deref_opt_out  LPWSTR *ppszPhrase);
+        
+        END_INTERFACE
+    } IConditionGeneratorVtbl;
+
+    interface IConditionGenerator
+    {
+        CONST_VTBL struct IConditionGeneratorVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IConditionGenerator_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IConditionGenerator_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IConditionGenerator_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IConditionGenerator_Initialize(This,pSchemaProvider)	\
+    ( (This)->lpVtbl -> Initialize(This,pSchemaProvider) ) 
+
+#define IConditionGenerator_RecognizeNamedEntities(This,pszInputString,lcid,pTokenCollection,pNamedEntities)	\
+    ( (This)->lpVtbl -> RecognizeNamedEntities(This,pszInputString,lcid,pTokenCollection,pNamedEntities) ) 
+
+#define IConditionGenerator_GenerateForLeaf(This,pConditionFactory,pszPropertyName,op,pszValueType,pszValue,pszValue2,pPropertyNameTerm,pOperationTerm,pValueTerm,automaticWildcard,pNoStringQuery,ppQueryExpression)	\
+    ( (This)->lpVtbl -> GenerateForLeaf(This,pConditionFactory,pszPropertyName,op,pszValueType,pszValue,pszValue2,pPropertyNameTerm,pOperationTerm,pValueTerm,automaticWildcard,pNoStringQuery,ppQueryExpression) ) 
+
+#define IConditionGenerator_DefaultPhrase(This,pszValueType,ppropvar,fUseEnglish,ppszPhrase)	\
+    ( (This)->lpVtbl -> DefaultPhrase(This,pszValueType,ppropvar,fUseEnglish,ppszPhrase) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IConditionGenerator_INTERFACE_DEFINED__ */
+
+
+#ifndef __IRichChunk_INTERFACE_DEFINED__
+#define __IRichChunk_INTERFACE_DEFINED__
+
+/* interface IRichChunk */
+/* [unique][uuid][object] */ 
+
+
+EXTERN_C const IID IID_IRichChunk;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("4FDEF69C-DBC9-454e-9910-B34F3C64B510")
+    IRichChunk : public IUnknown
+    {
+    public:
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE GetData( 
+            /* [out] */ 
+            __out_opt  ULONG *pFirstPos,
+            /* [out] */ 
+            __out_opt  ULONG *pLength,
+            /* [out] */ 
+            __deref_opt_out  LPWSTR *ppsz,
+            /* [out] */ 
+            __out_opt  PROPVARIANT *pValue) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IRichChunkVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IRichChunk * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IRichChunk * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IRichChunk * This);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *GetData )( 
+            IRichChunk * This,
+            /* [out] */ 
+            __out_opt  ULONG *pFirstPos,
+            /* [out] */ 
+            __out_opt  ULONG *pLength,
+            /* [out] */ 
+            __deref_opt_out  LPWSTR *ppsz,
+            /* [out] */ 
+            __out_opt  PROPVARIANT *pValue);
+        
+        END_INTERFACE
+    } IRichChunkVtbl;
+
+    interface IRichChunk
+    {
+        CONST_VTBL struct IRichChunkVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IRichChunk_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IRichChunk_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IRichChunk_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IRichChunk_GetData(This,pFirstPos,pLength,ppsz,pValue)	\
+    ( (This)->lpVtbl -> GetData(This,pFirstPos,pLength,ppsz,pValue) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IRichChunk_INTERFACE_DEFINED__ */
+
+
+#ifndef __IInterval_INTERFACE_DEFINED__
+#define __IInterval_INTERFACE_DEFINED__
+
+/* interface IInterval */
+/* [unique][uuid][object] */ 
+
+
+EXTERN_C const IID IID_IInterval;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("6BF0A714-3C18-430b-8B5D-83B1C234D3DB")
+    IInterval : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetLimits( 
+            /* [out] */ __RPC__out INTERVAL_LIMIT_KIND *pilkLower,
+            /* [out] */ __RPC__out PROPVARIANT *ppropvarLower,
+            /* [out] */ __RPC__out INTERVAL_LIMIT_KIND *pilkUpper,
+            /* [out] */ __RPC__out PROPVARIANT *ppropvarUpper) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IIntervalVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IInterval * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IInterval * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IInterval * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetLimits )( 
+            IInterval * This,
+            /* [out] */ __RPC__out INTERVAL_LIMIT_KIND *pilkLower,
+            /* [out] */ __RPC__out PROPVARIANT *ppropvarLower,
+            /* [out] */ __RPC__out INTERVAL_LIMIT_KIND *pilkUpper,
+            /* [out] */ __RPC__out PROPVARIANT *ppropvarUpper);
+        
+        END_INTERFACE
+    } IIntervalVtbl;
+
+    interface IInterval
+    {
+        CONST_VTBL struct IIntervalVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IInterval_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IInterval_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IInterval_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IInterval_GetLimits(This,pilkLower,ppropvarLower,pilkUpper,ppropvarUpper)	\
+    ( (This)->lpVtbl -> GetLimits(This,pilkLower,ppropvarLower,pilkUpper,ppropvarUpper) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IInterval_INTERFACE_DEFINED__ */
+
+
+#ifndef __IMetaData_INTERFACE_DEFINED__
+#define __IMetaData_INTERFACE_DEFINED__
+
+/* interface IMetaData */
+/* [unique][uuid][object][helpstring] */ 
+
+
+EXTERN_C const IID IID_IMetaData;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("780102B0-C43B-4876-BC7B-5E9BA5C88794")
+    IMetaData : public IUnknown
+    {
+    public:
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE GetData( 
+            /* [out] */ 
+            __deref_opt_out  LPWSTR *ppszKey,
+            /* [out] */ 
+            __deref_opt_out  LPWSTR *ppszValue) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IMetaDataVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IMetaData * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IMetaData * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IMetaData * This);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *GetData )( 
+            IMetaData * This,
+            /* [out] */ 
+            __deref_opt_out  LPWSTR *ppszKey,
+            /* [out] */ 
+            __deref_opt_out  LPWSTR *ppszValue);
+        
+        END_INTERFACE
+    } IMetaDataVtbl;
+
+    interface IMetaData
+    {
+        CONST_VTBL struct IMetaDataVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IMetaData_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IMetaData_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IMetaData_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IMetaData_GetData(This,ppszKey,ppszValue)	\
+    ( (This)->lpVtbl -> GetData(This,ppszKey,ppszValue) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IMetaData_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_structuredquery_0000_0008 */
+/* [local] */ 
+
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_structuredquery_0000_0008_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_structuredquery_0000_0008_v0_0_s_ifspec;
+
+#ifndef __IEntity_INTERFACE_DEFINED__
+#define __IEntity_INTERFACE_DEFINED__
+
+/* interface IEntity */
+/* [unique][object][uuid][helpstring] */ 
+
+
+EXTERN_C const IID IID_IEntity;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("24264891-E80B-4fd3-B7CE-4FF2FAE8931F")
+    IEntity : public IUnknown
+    {
+    public:
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE Name( 
+            /* [retval][out] */ 
+            __deref_opt_out  LPWSTR *ppszName) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE Base( 
+            /* [retval][out] */ __RPC__deref_out_opt IEntity **pBaseEntity) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE Relationships( 
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pRelationships) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetRelationship( 
+            /* [in] */ __RPC__in LPCWSTR pszRelationName,
+            /* [retval][out] */ __RPC__deref_out_opt IRelationship **pRelationship) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE MetaData( 
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pMetaData) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE NamedEntities( 
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pNamedEntities) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetNamedEntity( 
+            /* [in] */ __RPC__in LPCWSTR pszValue,
+            /* [retval][out] */ __RPC__deref_out_opt INamedEntity **ppNamedEntity) = 0;
+        
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE DefaultPhrase( 
+            /* [retval][out] */ 
+            __deref_opt_out  LPWSTR *ppszPhrase) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IEntityVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IEntity * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IEntity * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IEntity * This);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Name )( 
+            IEntity * This,
+            /* [retval][out] */ 
+            __deref_opt_out  LPWSTR *ppszName);
+        
+        HRESULT ( STDMETHODCALLTYPE *Base )( 
+            IEntity * This,
+            /* [retval][out] */ __RPC__deref_out_opt IEntity **pBaseEntity);
+        
+        HRESULT ( STDMETHODCALLTYPE *Relationships )( 
+            IEntity * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pRelationships);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetRelationship )( 
+            IEntity * This,
+            /* [in] */ __RPC__in LPCWSTR pszRelationName,
+            /* [retval][out] */ __RPC__deref_out_opt IRelationship **pRelationship);
+        
+        HRESULT ( STDMETHODCALLTYPE *MetaData )( 
+            IEntity * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pMetaData);
+        
+        HRESULT ( STDMETHODCALLTYPE *NamedEntities )( 
+            IEntity * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pNamedEntities);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetNamedEntity )( 
+            IEntity * This,
+            /* [in] */ __RPC__in LPCWSTR pszValue,
+            /* [retval][out] */ __RPC__deref_out_opt INamedEntity **ppNamedEntity);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *DefaultPhrase )( 
+            IEntity * This,
+            /* [retval][out] */ 
+            __deref_opt_out  LPWSTR *ppszPhrase);
+        
+        END_INTERFACE
+    } IEntityVtbl;
+
+    interface IEntity
+    {
+        CONST_VTBL struct IEntityVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IEntity_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IEntity_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IEntity_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IEntity_Name(This,ppszName)	\
+    ( (This)->lpVtbl -> Name(This,ppszName) ) 
+
+#define IEntity_Base(This,pBaseEntity)	\
+    ( (This)->lpVtbl -> Base(This,pBaseEntity) ) 
+
+#define IEntity_Relationships(This,riid,pRelationships)	\
+    ( (This)->lpVtbl -> Relationships(This,riid,pRelationships) ) 
+
+#define IEntity_GetRelationship(This,pszRelationName,pRelationship)	\
+    ( (This)->lpVtbl -> GetRelationship(This,pszRelationName,pRelationship) ) 
+
+#define IEntity_MetaData(This,riid,pMetaData)	\
+    ( (This)->lpVtbl -> MetaData(This,riid,pMetaData) ) 
+
+#define IEntity_NamedEntities(This,riid,pNamedEntities)	\
+    ( (This)->lpVtbl -> NamedEntities(This,riid,pNamedEntities) ) 
+
+#define IEntity_GetNamedEntity(This,pszValue,ppNamedEntity)	\
+    ( (This)->lpVtbl -> GetNamedEntity(This,pszValue,ppNamedEntity) ) 
+
+#define IEntity_DefaultPhrase(This,ppszPhrase)	\
+    ( (This)->lpVtbl -> DefaultPhrase(This,ppszPhrase) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IEntity_INTERFACE_DEFINED__ */
+
+
+#ifndef __IRelationship_INTERFACE_DEFINED__
+#define __IRelationship_INTERFACE_DEFINED__
+
+/* interface IRelationship */
+/* [unique][object][uuid][helpstring] */ 
+
+
+EXTERN_C const IID IID_IRelationship;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("2769280B-5108-498c-9C7F-A51239B63147")
+    IRelationship : public IUnknown
+    {
+    public:
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE Name( 
+            /* [retval][out] */ 
+            __deref_opt_out  LPWSTR *ppszName) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE IsReal( 
+            /* [retval][out] */ __RPC__out BOOL *pIsReal) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE Destination( 
+            /* [retval][out] */ __RPC__deref_out_opt IEntity **pDestinationEntity) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE MetaData( 
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pMetaData) = 0;
+        
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE DefaultPhrase( 
+            /* [retval][out] */ 
+            __deref_opt_out  LPWSTR *ppszPhrase) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IRelationshipVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IRelationship * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IRelationship * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IRelationship * This);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *Name )( 
+            IRelationship * This,
+            /* [retval][out] */ 
+            __deref_opt_out  LPWSTR *ppszName);
+        
+        HRESULT ( STDMETHODCALLTYPE *IsReal )( 
+            IRelationship * This,
+            /* [retval][out] */ __RPC__out BOOL *pIsReal);
+        
+        HRESULT ( STDMETHODCALLTYPE *Destination )( 
+            IRelationship * This,
+            /* [retval][out] */ __RPC__deref_out_opt IEntity **pDestinationEntity);
+        
+        HRESULT ( STDMETHODCALLTYPE *MetaData )( 
+            IRelationship * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pMetaData);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *DefaultPhrase )( 
+            IRelationship * This,
+            /* [retval][out] */ 
+            __deref_opt_out  LPWSTR *ppszPhrase);
+        
+        END_INTERFACE
+    } IRelationshipVtbl;
+
+    interface IRelationship
+    {
+        CONST_VTBL struct IRelationshipVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IRelationship_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IRelationship_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IRelationship_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IRelationship_Name(This,ppszName)	\
+    ( (This)->lpVtbl -> Name(This,ppszName) ) 
+
+#define IRelationship_IsReal(This,pIsReal)	\
+    ( (This)->lpVtbl -> IsReal(This,pIsReal) ) 
+
+#define IRelationship_Destination(This,pDestinationEntity)	\
+    ( (This)->lpVtbl -> Destination(This,pDestinationEntity) ) 
+
+#define IRelationship_MetaData(This,riid,pMetaData)	\
+    ( (This)->lpVtbl -> MetaData(This,riid,pMetaData) ) 
+
+#define IRelationship_DefaultPhrase(This,ppszPhrase)	\
+    ( (This)->lpVtbl -> DefaultPhrase(This,ppszPhrase) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IRelationship_INTERFACE_DEFINED__ */
+
+
+#ifndef __INamedEntity_INTERFACE_DEFINED__
+#define __INamedEntity_INTERFACE_DEFINED__
+
+/* interface INamedEntity */
+/* [unique][uuid][object][helpstring] */ 
+
+
+EXTERN_C const IID IID_INamedEntity;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("ABDBD0B1-7D54-49fb-AB5C-BFF4130004CD")
+    INamedEntity : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE GetValue( 
+            /* [retval][out] */ __RPC__deref_out_opt LPWSTR *ppszValue) = 0;
+        
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE DefaultPhrase( 
+            /* [retval][out] */ 
+            __deref_opt_out  LPWSTR *ppszPhrase) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct INamedEntityVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            INamedEntity * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            INamedEntity * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            INamedEntity * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetValue )( 
+            INamedEntity * This,
+            /* [retval][out] */ __RPC__deref_out_opt LPWSTR *ppszValue);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *DefaultPhrase )( 
+            INamedEntity * This,
+            /* [retval][out] */ 
+            __deref_opt_out  LPWSTR *ppszPhrase);
+        
+        END_INTERFACE
+    } INamedEntityVtbl;
+
+    interface INamedEntity
+    {
+        CONST_VTBL struct INamedEntityVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define INamedEntity_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define INamedEntity_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define INamedEntity_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define INamedEntity_GetValue(This,ppszValue)	\
+    ( (This)->lpVtbl -> GetValue(This,ppszValue) ) 
+
+#define INamedEntity_DefaultPhrase(This,ppszPhrase)	\
+    ( (This)->lpVtbl -> DefaultPhrase(This,ppszPhrase) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __INamedEntity_INTERFACE_DEFINED__ */
+
+
+#ifndef __ISchemaProvider_INTERFACE_DEFINED__
+#define __ISchemaProvider_INTERFACE_DEFINED__
+
+/* interface ISchemaProvider */
+/* [unique][object][uuid][helpstring] */ 
+
+
+EXTERN_C const IID IID_ISchemaProvider;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("8CF89BCB-394C-49b2-AE28-A59DD4ED7F68")
+    ISchemaProvider : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE Entities( 
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pEntities) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE RootEntity( 
+            /* [retval][out] */ __RPC__deref_out_opt IEntity **pRootEntity) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE GetEntity( 
+            /* [in] */ __RPC__in LPCWSTR pszEntityName,
+            /* [retval][out] */ __RPC__deref_out_opt IEntity **pEntity) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE MetaData( 
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pMetaData) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE Localize( 
+            /* [in] */ LCID lcid,
+            /* [in] */ __RPC__in_opt ISchemaLocalizerSupport *pSchemaLocalizerSupport) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE SaveBinary( 
+            /* [in] */ __RPC__in LPCWSTR pszSchemaBinaryPath) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE LookupAuthoredNamedEntity( 
+            /* [in] */ __RPC__in_opt IEntity *pEntity,
+            /* [in] */ __RPC__in LPCWSTR pszInputString,
+            /* [in] */ __RPC__in_opt ITokenCollection *pTokenCollection,
+            /* [in] */ ULONG cTokensBegin,
+            /* [out] */ __RPC__out ULONG *pcTokensLength,
+            /* [out] */ __RPC__deref_out_opt LPWSTR *ppszValue) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct ISchemaProviderVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            ISchemaProvider * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            ISchemaProvider * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            ISchemaProvider * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *Entities )( 
+            ISchemaProvider * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pEntities);
+        
+        HRESULT ( STDMETHODCALLTYPE *RootEntity )( 
+            ISchemaProvider * This,
+            /* [retval][out] */ __RPC__deref_out_opt IEntity **pRootEntity);
+        
+        HRESULT ( STDMETHODCALLTYPE *GetEntity )( 
+            ISchemaProvider * This,
+            /* [in] */ __RPC__in LPCWSTR pszEntityName,
+            /* [retval][out] */ __RPC__deref_out_opt IEntity **pEntity);
+        
+        HRESULT ( STDMETHODCALLTYPE *MetaData )( 
+            ISchemaProvider * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **pMetaData);
+        
+        HRESULT ( STDMETHODCALLTYPE *Localize )( 
+            ISchemaProvider * This,
+            /* [in] */ LCID lcid,
+            /* [in] */ __RPC__in_opt ISchemaLocalizerSupport *pSchemaLocalizerSupport);
+        
+        HRESULT ( STDMETHODCALLTYPE *SaveBinary )( 
+            ISchemaProvider * This,
+            /* [in] */ __RPC__in LPCWSTR pszSchemaBinaryPath);
+        
+        HRESULT ( STDMETHODCALLTYPE *LookupAuthoredNamedEntity )( 
+            ISchemaProvider * This,
+            /* [in] */ __RPC__in_opt IEntity *pEntity,
+            /* [in] */ __RPC__in LPCWSTR pszInputString,
+            /* [in] */ __RPC__in_opt ITokenCollection *pTokenCollection,
+            /* [in] */ ULONG cTokensBegin,
+            /* [out] */ __RPC__out ULONG *pcTokensLength,
+            /* [out] */ __RPC__deref_out_opt LPWSTR *ppszValue);
+        
+        END_INTERFACE
+    } ISchemaProviderVtbl;
+
+    interface ISchemaProvider
+    {
+        CONST_VTBL struct ISchemaProviderVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define ISchemaProvider_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define ISchemaProvider_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define ISchemaProvider_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define ISchemaProvider_Entities(This,riid,pEntities)	\
+    ( (This)->lpVtbl -> Entities(This,riid,pEntities) ) 
+
+#define ISchemaProvider_RootEntity(This,pRootEntity)	\
+    ( (This)->lpVtbl -> RootEntity(This,pRootEntity) ) 
+
+#define ISchemaProvider_GetEntity(This,pszEntityName,pEntity)	\
+    ( (This)->lpVtbl -> GetEntity(This,pszEntityName,pEntity) ) 
+
+#define ISchemaProvider_MetaData(This,riid,pMetaData)	\
+    ( (This)->lpVtbl -> MetaData(This,riid,pMetaData) ) 
+
+#define ISchemaProvider_Localize(This,lcid,pSchemaLocalizerSupport)	\
+    ( (This)->lpVtbl -> Localize(This,lcid,pSchemaLocalizerSupport) ) 
+
+#define ISchemaProvider_SaveBinary(This,pszSchemaBinaryPath)	\
+    ( (This)->lpVtbl -> SaveBinary(This,pszSchemaBinaryPath) ) 
+
+#define ISchemaProvider_LookupAuthoredNamedEntity(This,pEntity,pszInputString,pTokenCollection,cTokensBegin,pcTokensLength,ppszValue)	\
+    ( (This)->lpVtbl -> LookupAuthoredNamedEntity(This,pEntity,pszInputString,pTokenCollection,cTokensBegin,pcTokensLength,ppszValue) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __ISchemaProvider_INTERFACE_DEFINED__ */
+
+
+#ifndef __ITokenCollection_INTERFACE_DEFINED__
+#define __ITokenCollection_INTERFACE_DEFINED__
+
+/* interface ITokenCollection */
+/* [unique][object][uuid][helpstring] */ 
+
+
+EXTERN_C const IID IID_ITokenCollection;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("22D8B4F2-F577-4adb-A335-C2AE88416FAB")
+    ITokenCollection : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE NumberOfTokens( 
+            __RPC__in ULONG *pCount) = 0;
+        
+        virtual /* [local] */ HRESULT STDMETHODCALLTYPE GetToken( 
+            /* [in] */ ULONG i,
+            /* [out] */ 
+            __out_opt  ULONG *pBegin,
+            /* [out] */ 
+            __out_opt  ULONG *pLength,
+            /* [out] */ 
+            __deref_opt_out  LPWSTR *ppsz) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct ITokenCollectionVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            ITokenCollection * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            ITokenCollection * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            ITokenCollection * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *NumberOfTokens )( 
+            ITokenCollection * This,
+            __RPC__in ULONG *pCount);
+        
+        /* [local] */ HRESULT ( STDMETHODCALLTYPE *GetToken )( 
+            ITokenCollection * This,
+            /* [in] */ ULONG i,
+            /* [out] */ 
+            __out_opt  ULONG *pBegin,
+            /* [out] */ 
+            __out_opt  ULONG *pLength,
+            /* [out] */ 
+            __deref_opt_out  LPWSTR *ppsz);
+        
+        END_INTERFACE
+    } ITokenCollectionVtbl;
+
+    interface ITokenCollection
+    {
+        CONST_VTBL struct ITokenCollectionVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define ITokenCollection_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define ITokenCollection_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define ITokenCollection_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define ITokenCollection_NumberOfTokens(This,pCount)	\
+    ( (This)->lpVtbl -> NumberOfTokens(This,pCount) ) 
+
+#define ITokenCollection_GetToken(This,i,pBegin,pLength,ppsz)	\
+    ( (This)->lpVtbl -> GetToken(This,i,pBegin,pLength,ppsz) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __ITokenCollection_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_structuredquery_0000_0013 */
+/* [local] */ 
+
+typedef /* [public][public][v1_enum] */ 
+enum __MIDL___MIDL_itf_structuredquery_0000_0013_0001
+    {	NEC_LOW	= 0,
+	NEC_MEDIUM	= ( NEC_LOW + 1 ) ,
+	NEC_HIGH	= ( NEC_MEDIUM + 1 ) 
+    } 	NAMED_ENTITY_CERTAINTY;
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_structuredquery_0000_0013_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_structuredquery_0000_0013_v0_0_s_ifspec;
+
+#ifndef __INamedEntityCollector_INTERFACE_DEFINED__
+#define __INamedEntityCollector_INTERFACE_DEFINED__
+
+/* interface INamedEntityCollector */
+/* [unique][object][uuid][helpstring] */ 
+
+
+EXTERN_C const IID IID_INamedEntityCollector;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("AF2440F6-8AFC-47d0-9A7F-396A0ACFB43D")
+    INamedEntityCollector : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE Add( 
+            /* [in] */ ULONG beginSpan,
+            /* [in] */ ULONG endSpan,
+            /* [in] */ ULONG beginActual,
+            /* [in] */ ULONG endActual,
+            /* [in] */ __RPC__in_opt IEntity *pType,
+            /* [in] */ __RPC__in LPCWSTR pszValue,
+            /* [in] */ NAMED_ENTITY_CERTAINTY certainty) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct INamedEntityCollectorVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            INamedEntityCollector * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            INamedEntityCollector * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            INamedEntityCollector * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *Add )( 
+            INamedEntityCollector * This,
+            /* [in] */ ULONG beginSpan,
+            /* [in] */ ULONG endSpan,
+            /* [in] */ ULONG beginActual,
+            /* [in] */ ULONG endActual,
+            /* [in] */ __RPC__in_opt IEntity *pType,
+            /* [in] */ __RPC__in LPCWSTR pszValue,
+            /* [in] */ NAMED_ENTITY_CERTAINTY certainty);
+        
+        END_INTERFACE
+    } INamedEntityCollectorVtbl;
+
+    interface INamedEntityCollector
+    {
+        CONST_VTBL struct INamedEntityCollectorVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define INamedEntityCollector_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define INamedEntityCollector_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define INamedEntityCollector_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define INamedEntityCollector_Add(This,beginSpan,endSpan,beginActual,endActual,pType,pszValue,certainty)	\
+    ( (This)->lpVtbl -> Add(This,beginSpan,endSpan,beginActual,endActual,pType,pszValue,certainty) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __INamedEntityCollector_INTERFACE_DEFINED__ */
+
+
+#ifndef __ISchemaLocalizerSupport_INTERFACE_DEFINED__
+#define __ISchemaLocalizerSupport_INTERFACE_DEFINED__
+
+/* interface ISchemaLocalizerSupport */
+/* [unique][object][uuid] */ 
+
+
+EXTERN_C const IID IID_ISchemaLocalizerSupport;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("CA3FDCA2-BFBE-4eed-90D7-0CAEF0A1BDA1")
+    ISchemaLocalizerSupport : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE Localize( 
+            /* [in] */ __RPC__in LPCWSTR pszGlobalString,
+            /* [retval][out] */ __RPC__deref_out_opt LPWSTR *ppszLocalString) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct ISchemaLocalizerSupportVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            ISchemaLocalizerSupport * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            ISchemaLocalizerSupport * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            ISchemaLocalizerSupport * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *Localize )( 
+            ISchemaLocalizerSupport * This,
+            /* [in] */ __RPC__in LPCWSTR pszGlobalString,
+            /* [retval][out] */ __RPC__deref_out_opt LPWSTR *ppszLocalString);
+        
+        END_INTERFACE
+    } ISchemaLocalizerSupportVtbl;
+
+    interface ISchemaLocalizerSupport
+    {
+        CONST_VTBL struct ISchemaLocalizerSupportVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define ISchemaLocalizerSupport_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define ISchemaLocalizerSupport_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define ISchemaLocalizerSupport_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define ISchemaLocalizerSupport_Localize(This,pszGlobalString,ppszLocalString)	\
+    ( (This)->lpVtbl -> Localize(This,pszGlobalString,ppszLocalString) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __ISchemaLocalizerSupport_INTERFACE_DEFINED__ */
+
+
+#ifndef __IQueryParserManager_INTERFACE_DEFINED__
+#define __IQueryParserManager_INTERFACE_DEFINED__
+
+/* interface IQueryParserManager */
+/* [unique][object][uuid] */ 
+
+
+EXTERN_C const IID IID_IQueryParserManager;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("A879E3C4-AF77-44fb-8F37-EBD1487CF920")
+    IQueryParserManager : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE CreateLoadedParser( 
+            /* [in] */ __RPC__in LPCWSTR pszCatalog,
+            /* [in] */ LANGID langidForKeywords,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **ppQueryParser) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE InitializeOptions( 
+            /* [in] */ BOOL fUnderstandNQS,
+            /* [in] */ BOOL fAutoWildCard,
+            /* [in] */ __RPC__in_opt IQueryParser *pQueryParser) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE SetOption( 
+            /* [in] */ QUERY_PARSER_MANAGER_OPTION option,
+            /* [in] */ __RPC__in const PROPVARIANT *pOptionValue) = 0;
+        
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IQueryParserManagerVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
+            IQueryParserManager * This,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][out] */ 
+            __RPC__deref_out  void **ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE *AddRef )( 
+            IQueryParserManager * This);
+        
+        ULONG ( STDMETHODCALLTYPE *Release )( 
+            IQueryParserManager * This);
+        
+        HRESULT ( STDMETHODCALLTYPE *CreateLoadedParser )( 
+            IQueryParserManager * This,
+            /* [in] */ __RPC__in LPCWSTR pszCatalog,
+            /* [in] */ LANGID langidForKeywords,
+            /* [in] */ __RPC__in REFIID riid,
+            /* [iid_is][retval][out] */ __RPC__deref_out_opt void **ppQueryParser);
+        
+        HRESULT ( STDMETHODCALLTYPE *InitializeOptions )( 
+            IQueryParserManager * This,
+            /* [in] */ BOOL fUnderstandNQS,
+            /* [in] */ BOOL fAutoWildCard,
+            /* [in] */ __RPC__in_opt IQueryParser *pQueryParser);
+        
+        HRESULT ( STDMETHODCALLTYPE *SetOption )( 
+            IQueryParserManager * This,
+            /* [in] */ QUERY_PARSER_MANAGER_OPTION option,
+            /* [in] */ __RPC__in const PROPVARIANT *pOptionValue);
+        
+        END_INTERFACE
+    } IQueryParserManagerVtbl;
+
+    interface IQueryParserManager
+    {
+        CONST_VTBL struct IQueryParserManagerVtbl *lpVtbl;
+    };
+
+    
+
+#ifdef COBJMACROS
+
+
+#define IQueryParserManager_QueryInterface(This,riid,ppvObject)	\
+    ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
+
+#define IQueryParserManager_AddRef(This)	\
+    ( (This)->lpVtbl -> AddRef(This) ) 
+
+#define IQueryParserManager_Release(This)	\
+    ( (This)->lpVtbl -> Release(This) ) 
+
+
+#define IQueryParserManager_CreateLoadedParser(This,pszCatalog,langidForKeywords,riid,ppQueryParser)	\
+    ( (This)->lpVtbl -> CreateLoadedParser(This,pszCatalog,langidForKeywords,riid,ppQueryParser) ) 
+
+#define IQueryParserManager_InitializeOptions(This,fUnderstandNQS,fAutoWildCard,pQueryParser)	\
+    ( (This)->lpVtbl -> InitializeOptions(This,fUnderstandNQS,fAutoWildCard,pQueryParser) ) 
+
+#define IQueryParserManager_SetOption(This,option,pOptionValue)	\
+    ( (This)->lpVtbl -> SetOption(This,option,pOptionValue) ) 
+
+#endif /* COBJMACROS */
+
+
+#endif 	/* C style interface */
+
+
+
+
+#endif 	/* __IQueryParserManager_INTERFACE_DEFINED__ */
+
+
+
+#ifndef __StructuredQuery1_LIBRARY_DEFINED__
+#define __StructuredQuery1_LIBRARY_DEFINED__
+
+/* library StructuredQuery1 */
+/* [version][uuid] */ 
+
+
+EXTERN_C const IID LIBID_StructuredQuery1;
+
+EXTERN_C const CLSID CLSID_QueryParser;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("B72F8FD8-0FAB-4dd9-BDBF-245A6CE1485B")
+QueryParser;
+#endif
+
+EXTERN_C const CLSID CLSID_NegationCondition;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("8DE9C74C-605A-4acd-BEE3-2B222AA2D23D")
+NegationCondition;
+#endif
+
+EXTERN_C const CLSID CLSID_CompoundCondition;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("116F8D13-101E-4fa5-84D4-FF8279381935")
+CompoundCondition;
+#endif
+
+EXTERN_C const CLSID CLSID_LeafCondition;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("52F15C89-5A17-48e1-BBCD-46A3F89C7CC2")
+LeafCondition;
+#endif
+
+EXTERN_C const CLSID CLSID_ConditionFactory;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("E03E85B0-7BE3-4000-BA98-6C13DE9FA486")
+ConditionFactory;
+#endif
+
+EXTERN_C const CLSID CLSID_Interval;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("D957171F-4BF9-4de2-BCD5-C70A7CA55836")
+Interval;
+#endif
+
+EXTERN_C const CLSID CLSID_QueryParserManager;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("5088B39A-29B4-4d9d-8245-4EE289222F66")
+QueryParserManager;
+#endif
+#endif /* __StructuredQuery1_LIBRARY_DEFINED__ */
+
+/* Additional Prototypes for ALL interfaces */
+
+unsigned long             __RPC_USER  BSTR_UserSize(     unsigned long *, unsigned long            , BSTR * ); 
+unsigned char * __RPC_USER  BSTR_UserMarshal(  unsigned long *, unsigned char *, BSTR * ); 
+unsigned char * __RPC_USER  BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * ); 
+void                      __RPC_USER  BSTR_UserFree(     unsigned long *, BSTR * ); 
+
+unsigned long             __RPC_USER  LPSAFEARRAY_UserSize(     unsigned long *, unsigned long            , LPSAFEARRAY * ); 
+unsigned char * __RPC_USER  LPSAFEARRAY_UserMarshal(  unsigned long *, unsigned char *, LPSAFEARRAY * ); 
+unsigned char * __RPC_USER  LPSAFEARRAY_UserUnmarshal(unsigned long *, unsigned char *, LPSAFEARRAY * ); 
+void                      __RPC_USER  LPSAFEARRAY_UserFree(     unsigned long *, LPSAFEARRAY * ); 
+
+/* end of Additional Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
+
+ portaudio/src/os/win/pa_win_coinitialize.h view
@@ -0,0 +1,94 @@+/*
+ * Microsoft COM initialization routines
+ * Copyright (c) 1999-2011 Ross Bencina, Phil Burk
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * The text above constitutes the entire PortAudio license; however, 
+ * the PortAudio community also makes the following non-binding requests:
+ *
+ * Any person wishing to distribute modifications to the Software is
+ * requested to send the modifications to the original developer so that
+ * they can be incorporated into the canonical version. It is also 
+ * requested that these non-binding requests be included along with the 
+ * license above.
+ */
+
+/** @file
+ @ingroup win_src
+
+ @brief Microsoft COM initialization routines.
+*/
+
+#ifndef PA_WIN_COINITIALIZE_H
+#define PA_WIN_COINITIALIZE_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif /* __cplusplus */
+
+
+/**
+ @brief Data type used to hold the result of an attempt to initialize COM
+    using PaWinUtil_CoInitialize. Must be retained between a call to 
+    PaWinUtil_CoInitialize and a matching call to PaWinUtil_CoUninitialize.
+*/
+typedef struct PaWinUtilComInitializationResult{
+    int state;
+    int initializingThreadId;
+} PaWinUtilComInitializationResult;
+
+
+/**
+ @brief Initialize Microsoft COM subsystem on the current thread.
+
+ @param hostApiType the host API type id of the caller. Used for error reporting.
+
+ @param comInitializationResult An output parameter. The value pointed to by 
+        this parameter stores information required by PaWinUtil_CoUninitialize 
+        to correctly uninitialize COM. The value should be retained and later 
+        passed to PaWinUtil_CoUninitialize.
+
+ If PaWinUtil_CoInitialize returns paNoError, the caller must later call
+ PaWinUtil_CoUninitialize once.
+*/
+PaError PaWinUtil_CoInitialize( PaHostApiTypeId hostApiType, PaWinUtilComInitializationResult *comInitializationResult );
+
+
+/**
+ @brief Uninitialize the Microsoft COM subsystem on the current thread using 
+ the result of a previous call to PaWinUtil_CoInitialize. Must be called on the same
+ thread as PaWinUtil_CoInitialize.
+
+ @param hostApiType the host API type id of the caller. Used for error reporting.
+
+ @param comInitializationResult An input parameter. A pointer to a value previously
+ initialized by a call to PaWinUtil_CoInitialize.
+*/
+void PaWinUtil_CoUninitialize( PaHostApiTypeId hostApiType, PaWinUtilComInitializationResult *comInitializationResult );
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+#endif /* PA_WIN_COINITIALIZE_H */
+ portaudio/src/os/win/pa_win_wdmks_utils.h view
@@ -0,0 +1,65 @@+#ifndef PA_WIN_WDMKS_UTILS_H
+#define PA_WIN_WDMKS_UTILS_H
+
+/*
+ * PortAudio Portable Real-Time Audio Library
+ * Windows WDM KS utilities
+ *
+ * Copyright (c) 1999 - 2007 Ross Bencina, Andrew Baldwin
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * The text above constitutes the entire PortAudio license; however, 
+ * the PortAudio community also makes the following non-binding requests:
+ *
+ * Any person wishing to distribute modifications to the Software is
+ * requested to send the modifications to the original developer so that
+ * they can be incorporated into the canonical version. It is also 
+ * requested that these non-binding requests be included along with the 
+ * license above.
+ */
+
+/** @file
+ @brief Utilities for working with the Windows WDM KS API
+*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+    Query for the maximum number of channels supported by any pin of the
+    specified device. Returns 0 if the query fails for any reason.
+
+    @param wcharDevicePath A system level PnP interface path, supplied as a WCHAR unicode string.
+    Declard as void* to avoid introducing a dependency on wchar_t here.
+
+    @param isInput A flag specifying whether to query for input (non-zero) or output (zero) channels.
+*/
+int PaWin_WDMKS_QueryFilterMaximumChannelCount( void *wcharDevicePath, int isInput );
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* PA_WIN_WDMKS_UTILS_H */
+ portaudio/src/os/win/pa_x86_plain_converters.c view
@@ -0,0 +1,1218 @@+/*+ * Plain Intel IA32 assembly implementations of PortAudio sample converter functions.+ * Copyright (c) 1999-2002 Ross Bencina, Phil Burk+ *+ * Permission is hereby granted, free of charge, to any person obtaining+ * a copy of this software and associated documentation files+ * (the "Software"), to deal in the Software without restriction,+ * including without limitation the rights to use, copy, modify, merge,+ * publish, distribute, sublicense, and/or sell copies of the Software,+ * and to permit persons to whom the Software is furnished to do so,+ * subject to the following conditions:+ *+ * The above copyright notice and this permission notice shall be+ * included in all copies or substantial portions of the Software.+ *+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.+ */++/*+ * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests:+ *+ * Any person wishing to distribute modifications to the Software is+ * requested to send the modifications to the original developer so that+ * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above.+ */++/** @file+ @ingroup win_src+*/++#include "pa_x86_plain_converters.h"++#include "pa_converters.h"+#include "pa_dither.h"++/*+    the main reason these versions are faster than the equivalent C versions+    is that float -> int casting is expensive in C on x86 because the rounding+    mode needs to be changed for every cast. these versions only set+    the rounding mode once outside the loop.++    small additional speed gains are made by the way that clamping is+    implemented.++TODO:+    o- inline dither code+    o- implement Dither only (no-clip) versions+    o- implement int8 and uint8 versions+    o- test thouroughly++    o- the packed 24 bit functions could benefit from unrolling and avoiding+        byte and word sized register access.+*/++/* -------------------------------------------------------------------------- */++/*+#define PA_CLIP_( val, min, max )\+    { val = ((val) < (min)) ? (min) : (((val) > (max)) ? (max) : (val)); }+*/++/*+    the following notes were used to determine whether a floating point+    value should be saturated (ie >1 or <-1) by loading it into an integer+    register. these should be rewritten so that they make sense.++    an ieee floating point value++    1.xxxxxxxxxxxxxxxxxxxx?+++    is less than  or equal to 1 and greater than or equal to -1 either:++        if the mantissa is 0 and the unbiased exponent is 0++        OR++        if the unbiased exponent < 0++    this translates to:++        if the mantissa is 0 and the biased exponent is 7F++        or++        if the biased exponent is less than 7F+++    therefore the value is greater than 1 or less than -1 if++        the mantissa is not 0 and the biased exponent is 7F++        or++        if the biased exponent is greater than 7F+++    in other words, if we mask out the sign bit, the value is+    greater than 1 or less than -1 if its integer representation is greater than:++    0 01111111 0000 0000 0000 0000 0000 000++    0011 1111 1000 0000 0000 0000 0000 0000 => 0x3F800000+*/++#if defined(_WIN64) || defined(_WIN32_WCE)++/*+	-EMT64/AMD64 uses different asm+	-VC2005 doesnt allow _WIN64 with inline assembly either!+ */+void PaUtil_InitializeX86PlainConverters( void )+{+}++#else++/* -------------------------------------------------------------------------- */++static const short fpuControlWord_ = 0x033F; /*round to nearest, 64 bit precision, all exceptions masked*/+static const double int32Scaler_ = 0x7FFFFFFF;+static const double ditheredInt32Scaler_ = 0x7FFFFFFE;+static const double int24Scaler_ = 0x7FFFFF;+static const double ditheredInt24Scaler_ = 0x7FFFFE;+static const double int16Scaler_ = 0x7FFF;+static const double ditheredInt16Scaler_ = 0x7FFE;++#define PA_DITHER_BITS_   (15)+/* Multiply by PA_FLOAT_DITHER_SCALE_ to get a float between -2.0 and +1.99999 */+#define PA_FLOAT_DITHER_SCALE_  (1.0F / ((1<<PA_DITHER_BITS_)-1))+static const float const_float_dither_scale_ = PA_FLOAT_DITHER_SCALE_;+#define PA_DITHER_SHIFT_  ((32 - PA_DITHER_BITS_) + 1)++/* -------------------------------------------------------------------------- */++static void Float32_To_Int32(+    void *destinationBuffer, signed int destinationStride,+    void *sourceBuffer, signed int sourceStride,+    unsigned int count, PaUtilTriangularDitherGenerator *ditherGenerator )+{+/*+    float *src = (float*)sourceBuffer;+    signed long *dest =  (signed long*)destinationBuffer;+    (void)ditherGenerator; // unused parameter++    while( count-- )+    {+        // REVIEW+        double scaled = *src * 0x7FFFFFFF;+        *dest = (signed long) scaled;++        src += sourceStride;+        dest += destinationStride;+    }+*/++    short savedFpuControlWord;++    (void) ditherGenerator; /* unused parameter */+++    __asm{+        // esi -> source ptr+        // eax -> source byte stride+        // edi -> destination ptr+        // ebx -> destination byte stride+        // ecx -> source end ptr+        // edx -> temp++        mov     esi, sourceBuffer++        mov     edx, 4                  // sizeof float32 and int32+        mov     eax, sourceStride+        imul    eax, edx++        mov     ecx, count+        imul    ecx, eax+        add     ecx, esi+    +        mov     edi, destinationBuffer+        +        mov     ebx, destinationStride+        imul    ebx, edx++        fwait+        fstcw   savedFpuControlWord+        fldcw   fpuControlWord_++        fld     int32Scaler_             // stack:  (int)0x7FFFFFFF++    Float32_To_Int32_loop:++        // load unscaled value into st(0)+        fld     dword ptr [esi]         // stack:  value, (int)0x7FFFFFFF+        add     esi, eax                // increment source ptr+        //lea     esi, [esi+eax]+        fmul    st(0), st(1)            // st(0) *= st(1), stack:  value*0x7FFFFFFF, (int)0x7FFFFFFF+        /*+            note: we could store to a temporary qword here which would cause+            wraparound distortion instead of int indefinite 0x10. that would+            be more work, and given that not enabling clipping is only advisable+            when you know that your signal isn't going to clip it isn't worth it.+        */+        fistp   dword ptr [edi]         // pop st(0) into dest, stack:  (int)0x7FFFFFFF++        add     edi, ebx                // increment destination ptr+        //lea     edi, [edi+ebx]++        cmp     esi, ecx                // has src ptr reached end?+        jne     Float32_To_Int32_loop++        ffree   st(0)+        fincstp++        fwait+        fnclex+        fldcw   savedFpuControlWord+    }+}++/* -------------------------------------------------------------------------- */++static void Float32_To_Int32_Clip(+    void *destinationBuffer, signed int destinationStride,+    void *sourceBuffer, signed int sourceStride,+    unsigned int count, PaUtilTriangularDitherGenerator *ditherGenerator )+{+/*+    float *src = (float*)sourceBuffer;+    signed long *dest =  (signed long*)destinationBuffer;+    (void) ditherGenerator; // unused parameter++    while( count-- )+    {+        // REVIEW+        double scaled = *src * 0x7FFFFFFF;+        PA_CLIP_( scaled, -2147483648., 2147483647.  );+        *dest = (signed long) scaled;++        src += sourceStride;+        dest += destinationStride;+    }+*/++    short savedFpuControlWord;++    (void) ditherGenerator; /* unused parameter */++    __asm{+        // esi -> source ptr+        // eax -> source byte stride+        // edi -> destination ptr+        // ebx -> destination byte stride+        // ecx -> source end ptr+        // edx -> temp++        mov     esi, sourceBuffer++        mov     edx, 4                  // sizeof float32 and int32+        mov     eax, sourceStride+        imul    eax, edx++        mov     ecx, count+        imul    ecx, eax+        add     ecx, esi+    +        mov     edi, destinationBuffer+        +        mov     ebx, destinationStride+        imul    ebx, edx++        fwait+        fstcw   savedFpuControlWord+        fldcw   fpuControlWord_++        fld     int32Scaler_             // stack:  (int)0x7FFFFFFF++    Float32_To_Int32_Clip_loop:++        mov     edx, dword ptr [esi]    // load floating point value into integer register++        and     edx, 0x7FFFFFFF         // mask off sign+        cmp     edx, 0x3F800000         // greater than 1.0 or less than -1.0++        jg      Float32_To_Int32_Clip_clamp++        // load unscaled value into st(0)+        fld     dword ptr [esi]         // stack:  value, (int)0x7FFFFFFF+        add     esi, eax                // increment source ptr+        //lea     esi, [esi+eax]+        fmul    st(0), st(1)            // st(0) *= st(1), stack:  value*0x7FFFFFFF, (int)0x7FFFFFFF+        fistp   dword ptr [edi]         // pop st(0) into dest, stack:  (int)0x7FFFFFFF+        jmp     Float32_To_Int32_Clip_stored+    +    Float32_To_Int32_Clip_clamp:+        mov     edx, dword ptr [esi]    // load floating point value into integer register+        shr     edx, 31                 // move sign bit into bit 0+        add     esi, eax                // increment source ptr+        //lea     esi, [esi+eax]+        add     edx, 0x7FFFFFFF         // convert to maximum range integers+        mov     dword ptr [edi], edx++    Float32_To_Int32_Clip_stored:++        //add     edi, ebx                // increment destination ptr+        lea     edi, [edi+ebx]++        cmp     esi, ecx                // has src ptr reached end?+        jne     Float32_To_Int32_Clip_loop++        ffree   st(0)+        fincstp++        fwait+        fnclex+        fldcw   savedFpuControlWord+    }+}++/* -------------------------------------------------------------------------- */++static void Float32_To_Int32_DitherClip(+    void *destinationBuffer, signed int destinationStride,+    void *sourceBuffer, signed int sourceStride,+    unsigned int count, PaUtilTriangularDitherGenerator *ditherGenerator )+{+    /*+    float *src = (float*)sourceBuffer;+    signed long *dest =  (signed long*)destinationBuffer;++    while( count-- )+    {+        // REVIEW+        double dither  = PaUtil_GenerateFloatTriangularDither( ditherGenerator );+        // use smaller scaler to prevent overflow when we add the dither+        double dithered = ((double)*src * (2147483646.0)) + dither;+        PA_CLIP_( dithered, -2147483648., 2147483647.  );+        *dest = (signed long) dithered;+++        src += sourceStride;+        dest += destinationStride;+    }+    */++    short savedFpuControlWord;++    // spill storage:+    signed long sourceByteStride;+    signed long highpassedDither;++    // dither state:+    unsigned long ditherPrevious = ditherGenerator->previous;+    unsigned long ditherRandSeed1 = ditherGenerator->randSeed1;+    unsigned long ditherRandSeed2 = ditherGenerator->randSeed2;+                    +    __asm{+        // esi -> source ptr+        // eax -> source byte stride+        // edi -> destination ptr+        // ebx -> destination byte stride+        // ecx -> source end ptr+        // edx -> temp++        mov     esi, sourceBuffer++        mov     edx, 4                  // sizeof float32 and int32+        mov     eax, sourceStride+        imul    eax, edx++        mov     ecx, count+        imul    ecx, eax+        add     ecx, esi+    +        mov     edi, destinationBuffer+        +        mov     ebx, destinationStride+        imul    ebx, edx++        fwait+        fstcw   savedFpuControlWord+        fldcw   fpuControlWord_++        fld     ditheredInt32Scaler_    // stack:  int scaler++    Float32_To_Int32_DitherClip_loop:++        mov     edx, dword ptr [esi]    // load floating point value into integer register++        and     edx, 0x7FFFFFFF         // mask off sign+        cmp     edx, 0x3F800000         // greater than 1.0 or less than -1.0++        jg      Float32_To_Int32_DitherClip_clamp++        // load unscaled value into st(0)+        fld     dword ptr [esi]         // stack:  value, int scaler+        add     esi, eax                // increment source ptr+        //lea     esi, [esi+eax]+        fmul    st(0), st(1)            // st(0) *= st(1), stack:  value*(int scaler), int scaler++        /*+        // call PaUtil_GenerateFloatTriangularDither with C calling convention+        mov     sourceByteStride, eax   // save eax+        mov     sourceEnd, ecx          // save ecx+        push    ditherGenerator         // pass ditherGenerator parameter on stack+	    call    PaUtil_GenerateFloatTriangularDither  // stack:  dither, value*(int scaler), int scaler+	    pop     edx                     // clear parameter off stack+        mov     ecx, sourceEnd          // restore ecx+        mov     eax, sourceByteStride   // restore eax+        */++    // generate dither+        mov     sourceByteStride, eax   // save eax+        mov     edx, 196314165+        mov     eax, ditherRandSeed1+        mul     edx                     // eax:edx = eax * 196314165+        //add     eax, 907633515+        lea     eax, [eax+907633515]+        mov     ditherRandSeed1, eax+        mov     edx, 196314165+        mov     eax, ditherRandSeed2+        mul     edx                     // eax:edx = eax * 196314165+        //add     eax, 907633515+        lea     eax, [eax+907633515]+        mov     edx, ditherRandSeed1+        shr     edx, PA_DITHER_SHIFT_+        mov     ditherRandSeed2, eax+        shr     eax, PA_DITHER_SHIFT_+        //add     eax, edx                // eax -> current+        lea     eax, [eax+edx]+        mov     edx, ditherPrevious+        neg     edx+        lea     edx, [eax+edx]          // highpass = current - previous+        mov     highpassedDither, edx+        mov     ditherPrevious, eax     // previous = current+        mov     eax, sourceByteStride   // restore eax+        fild    highpassedDither+        fmul    const_float_dither_scale_+    // end generate dither, dither signal in st(0)+    +        faddp   st(1), st(0)            // stack: dither + value*(int scaler), int scaler+        fistp   dword ptr [edi]         // pop st(0) into dest, stack:  int scaler+        jmp     Float32_To_Int32_DitherClip_stored+    +    Float32_To_Int32_DitherClip_clamp:+        mov     edx, dword ptr [esi]    // load floating point value into integer register+        shr     edx, 31                 // move sign bit into bit 0+        add     esi, eax                // increment source ptr+        //lea     esi, [esi+eax]+        add     edx, 0x7FFFFFFF         // convert to maximum range integers+        mov     dword ptr [edi], edx++    Float32_To_Int32_DitherClip_stored:++        //add     edi, ebx              // increment destination ptr+        lea     edi, [edi+ebx]++        cmp     esi, ecx                // has src ptr reached end?+        jne     Float32_To_Int32_DitherClip_loop++        ffree   st(0)+        fincstp++        fwait+        fnclex+        fldcw   savedFpuControlWord+    }++    ditherGenerator->previous = ditherPrevious;+    ditherGenerator->randSeed1 = ditherRandSeed1;+    ditherGenerator->randSeed2 = ditherRandSeed2;+}++/* -------------------------------------------------------------------------- */++static void Float32_To_Int24(+    void *destinationBuffer, signed int destinationStride,+    void *sourceBuffer, signed int sourceStride,+    unsigned int count, PaUtilTriangularDitherGenerator *ditherGenerator )+{+/*+    float *src = (float*)sourceBuffer;+    unsigned char *dest = (unsigned char*)destinationBuffer;+    signed long temp;++    (void) ditherGenerator; // unused parameter+    +    while( count-- )+    {+        // convert to 32 bit and drop the low 8 bits+        double scaled = *src * 0x7FFFFFFF;+        temp = (signed long) scaled;++        dest[0] = (unsigned char)(temp >> 8);+        dest[1] = (unsigned char)(temp >> 16);+        dest[2] = (unsigned char)(temp >> 24);++        src += sourceStride;+        dest += destinationStride * 3;+    }+*/++    short savedFpuControlWord;+    +    signed long tempInt32;++    (void) ditherGenerator; /* unused parameter */+                 +    __asm{+        // esi -> source ptr+        // eax -> source byte stride+        // edi -> destination ptr+        // ebx -> destination byte stride+        // ecx -> source end ptr+        // edx -> temp++        mov     esi, sourceBuffer++        mov     edx, 4                  // sizeof float32+        mov     eax, sourceStride+        imul    eax, edx++        mov     ecx, count+        imul    ecx, eax+        add     ecx, esi++        mov     edi, destinationBuffer++        mov     edx, 3                  // sizeof int24+        mov     ebx, destinationStride+        imul    ebx, edx++        fwait+        fstcw   savedFpuControlWord+        fldcw   fpuControlWord_++        fld     int24Scaler_             // stack:  (int)0x7FFFFF++    Float32_To_Int24_loop:++        // load unscaled value into st(0)+        fld     dword ptr [esi]         // stack:  value, (int)0x7FFFFF+        add     esi, eax                // increment source ptr+        //lea     esi, [esi+eax]+        fmul    st(0), st(1)            // st(0) *= st(1), stack:  value*0x7FFFFF, (int)0x7FFFFF+        fistp   tempInt32               // pop st(0) into tempInt32, stack:  (int)0x7FFFFF+        mov     edx, tempInt32++        mov     byte ptr [edi], DL+        shr     edx, 8+        //mov     byte ptr [edi+1], DL+        //mov     byte ptr [edi+2], DH+        mov     word ptr [edi+1], DX++        //add     edi, ebx                // increment destination ptr+        lea     edi, [edi+ebx]++        cmp     esi, ecx                // has src ptr reached end?+        jne     Float32_To_Int24_loop++        ffree   st(0)+        fincstp++        fwait+        fnclex+        fldcw   savedFpuControlWord+    }+}++/* -------------------------------------------------------------------------- */++static void Float32_To_Int24_Clip(+    void *destinationBuffer, signed int destinationStride,+    void *sourceBuffer, signed int sourceStride,+    unsigned int count, PaUtilTriangularDitherGenerator *ditherGenerator )+{+/*+    float *src = (float*)sourceBuffer;+    unsigned char *dest = (unsigned char*)destinationBuffer;+    signed long temp;++    (void) ditherGenerator; // unused parameter+    +    while( count-- )+    {+        // convert to 32 bit and drop the low 8 bits+        double scaled = *src * 0x7FFFFFFF;+        PA_CLIP_( scaled, -2147483648., 2147483647.  );+        temp = (signed long) scaled;++        dest[0] = (unsigned char)(temp >> 8);+        dest[1] = (unsigned char)(temp >> 16);+        dest[2] = (unsigned char)(temp >> 24);++        src += sourceStride;+        dest += destinationStride * 3;+    }+*/++    short savedFpuControlWord;+    +    signed long tempInt32;++    (void) ditherGenerator; /* unused parameter */+                 +    __asm{+        // esi -> source ptr+        // eax -> source byte stride+        // edi -> destination ptr+        // ebx -> destination byte stride+        // ecx -> source end ptr+        // edx -> temp++        mov     esi, sourceBuffer++        mov     edx, 4                  // sizeof float32+        mov     eax, sourceStride+        imul    eax, edx++        mov     ecx, count+        imul    ecx, eax+        add     ecx, esi++        mov     edi, destinationBuffer++        mov     edx, 3                  // sizeof int24+        mov     ebx, destinationStride+        imul    ebx, edx++        fwait+        fstcw   savedFpuControlWord+        fldcw   fpuControlWord_++        fld     int24Scaler_             // stack:  (int)0x7FFFFF++    Float32_To_Int24_Clip_loop:++        mov     edx, dword ptr [esi]    // load floating point value into integer register++        and     edx, 0x7FFFFFFF         // mask off sign+        cmp     edx, 0x3F800000         // greater than 1.0 or less than -1.0++        jg      Float32_To_Int24_Clip_clamp++        // load unscaled value into st(0)+        fld     dword ptr [esi]         // stack:  value, (int)0x7FFFFF+        add     esi, eax                // increment source ptr+        //lea     esi, [esi+eax]+        fmul    st(0), st(1)            // st(0) *= st(1), stack:  value*0x7FFFFF, (int)0x7FFFFF+        fistp   tempInt32               // pop st(0) into tempInt32, stack:  (int)0x7FFFFF+        mov     edx, tempInt32+        jmp     Float32_To_Int24_Clip_store+    +    Float32_To_Int24_Clip_clamp:+        mov     edx, dword ptr [esi]    // load floating point value into integer register+        shr     edx, 31                 // move sign bit into bit 0+        add     esi, eax                // increment source ptr+        //lea     esi, [esi+eax]+        add     edx, 0x7FFFFF           // convert to maximum range integers++    Float32_To_Int24_Clip_store:++        mov     byte ptr [edi], DL+        shr     edx, 8+        //mov     byte ptr [edi+1], DL+        //mov     byte ptr [edi+2], DH+        mov     word ptr [edi+1], DX++        //add     edi, ebx                // increment destination ptr+        lea     edi, [edi+ebx]++        cmp     esi, ecx                // has src ptr reached end?+        jne     Float32_To_Int24_Clip_loop++        ffree   st(0)+        fincstp++        fwait+        fnclex+        fldcw   savedFpuControlWord+    }+}++/* -------------------------------------------------------------------------- */++static void Float32_To_Int24_DitherClip(+    void *destinationBuffer, signed int destinationStride,+    void *sourceBuffer, signed int sourceStride,+    unsigned int count, PaUtilTriangularDitherGenerator *ditherGenerator )+{+/*+    float *src = (float*)sourceBuffer;+    unsigned char *dest = (unsigned char*)destinationBuffer;+    signed long temp;+    +    while( count-- )+    {+        // convert to 32 bit and drop the low 8 bits++        // FIXME: the dither amplitude here appears to be too small by 8 bits+        double dither  = PaUtil_GenerateFloatTriangularDither( ditherGenerator );+        // use smaller scaler to prevent overflow when we add the dither+        double dithered = ((double)*src * (2147483646.0)) + dither;+        PA_CLIP_( dithered, -2147483648., 2147483647.  );+        +        temp = (signed long) dithered;++        dest[0] = (unsigned char)(temp >> 8);+        dest[1] = (unsigned char)(temp >> 16);+        dest[2] = (unsigned char)(temp >> 24);++        src += sourceStride;+        dest += destinationStride * 3;+    }+*/++    short savedFpuControlWord;++    // spill storage:+    signed long sourceByteStride;+    signed long highpassedDither;++    // dither state:+    unsigned long ditherPrevious = ditherGenerator->previous;+    unsigned long ditherRandSeed1 = ditherGenerator->randSeed1;+    unsigned long ditherRandSeed2 = ditherGenerator->randSeed2;+    +    signed long tempInt32;+                 +    __asm{+        // esi -> source ptr+        // eax -> source byte stride+        // edi -> destination ptr+        // ebx -> destination byte stride+        // ecx -> source end ptr+        // edx -> temp++        mov     esi, sourceBuffer++        mov     edx, 4                  // sizeof float32+        mov     eax, sourceStride+        imul    eax, edx++        mov     ecx, count+        imul    ecx, eax+        add     ecx, esi++        mov     edi, destinationBuffer++        mov     edx, 3                  // sizeof int24+        mov     ebx, destinationStride+        imul    ebx, edx++        fwait+        fstcw   savedFpuControlWord+        fldcw   fpuControlWord_++        fld     ditheredInt24Scaler_    // stack:  int scaler++    Float32_To_Int24_DitherClip_loop:++        mov     edx, dword ptr [esi]    // load floating point value into integer register++        and     edx, 0x7FFFFFFF         // mask off sign+        cmp     edx, 0x3F800000         // greater than 1.0 or less than -1.0++        jg      Float32_To_Int24_DitherClip_clamp++        // load unscaled value into st(0)+        fld     dword ptr [esi]         // stack:  value, int scaler+        add     esi, eax                // increment source ptr+        //lea     esi, [esi+eax]+        fmul    st(0), st(1)            // st(0) *= st(1), stack:  value*(int scaler), int scaler++    /*+        // call PaUtil_GenerateFloatTriangularDither with C calling convention+        mov     sourceByteStride, eax   // save eax+        mov     sourceEnd, ecx          // save ecx+        push    ditherGenerator         // pass ditherGenerator parameter on stack+	    call    PaUtil_GenerateFloatTriangularDither  // stack:  dither, value*(int scaler), int scaler+	    pop     edx                     // clear parameter off stack+        mov     ecx, sourceEnd          // restore ecx+        mov     eax, sourceByteStride   // restore eax+    */+    +    // generate dither+        mov     sourceByteStride, eax   // save eax+        mov     edx, 196314165+        mov     eax, ditherRandSeed1+        mul     edx                     // eax:edx = eax * 196314165+        //add     eax, 907633515+        lea     eax, [eax+907633515]+        mov     ditherRandSeed1, eax+        mov     edx, 196314165+        mov     eax, ditherRandSeed2+        mul     edx                     // eax:edx = eax * 196314165+        //add     eax, 907633515+        lea     eax, [eax+907633515]+        mov     edx, ditherRandSeed1+        shr     edx, PA_DITHER_SHIFT_+        mov     ditherRandSeed2, eax+        shr     eax, PA_DITHER_SHIFT_+        //add     eax, edx                // eax -> current+        lea     eax, [eax+edx]+        mov     edx, ditherPrevious+        neg     edx+        lea     edx, [eax+edx]          // highpass = current - previous+        mov     highpassedDither, edx+        mov     ditherPrevious, eax     // previous = current+        mov     eax, sourceByteStride   // restore eax+        fild    highpassedDither+        fmul    const_float_dither_scale_+    // end generate dither, dither signal in st(0)++        faddp   st(1), st(0)            // stack: dither * value*(int scaler), int scaler+        fistp   tempInt32               // pop st(0) into tempInt32, stack:  int scaler+        mov     edx, tempInt32+        jmp     Float32_To_Int24_DitherClip_store+    +    Float32_To_Int24_DitherClip_clamp:+        mov     edx, dword ptr [esi]    // load floating point value into integer register+        shr     edx, 31                 // move sign bit into bit 0+        add     esi, eax                // increment source ptr+        //lea     esi, [esi+eax]+        add     edx, 0x7FFFFF           // convert to maximum range integers++    Float32_To_Int24_DitherClip_store:++        mov     byte ptr [edi], DL+        shr     edx, 8+        //mov     byte ptr [edi+1], DL+        //mov     byte ptr [edi+2], DH+        mov     word ptr [edi+1], DX++        //add     edi, ebx                // increment destination ptr+        lea     edi, [edi+ebx]++        cmp     esi, ecx                // has src ptr reached end?+        jne     Float32_To_Int24_DitherClip_loop++        ffree   st(0)+        fincstp++        fwait+        fnclex+        fldcw   savedFpuControlWord+    }++    ditherGenerator->previous = ditherPrevious;+    ditherGenerator->randSeed1 = ditherRandSeed1;+    ditherGenerator->randSeed2 = ditherRandSeed2;+}++/* -------------------------------------------------------------------------- */++static void Float32_To_Int16(+    void *destinationBuffer, signed int destinationStride,+    void *sourceBuffer, signed int sourceStride,+    unsigned int count, PaUtilTriangularDitherGenerator *ditherGenerator )+{+/*+    float *src = (float*)sourceBuffer;+    signed short *dest =  (signed short*)destinationBuffer;+    (void)ditherGenerator; // unused parameter++    while( count-- )+    {++        short samp = (short) (*src * (32767.0f));+        *dest = samp;++        src += sourceStride;+        dest += destinationStride;+    }+*/++    short savedFpuControlWord;+   +    (void) ditherGenerator; /* unused parameter */++    __asm{+        // esi -> source ptr+        // eax -> source byte stride+        // edi -> destination ptr+        // ebx -> destination byte stride+        // ecx -> source end ptr+        // edx -> temp++        mov     esi, sourceBuffer++        mov     edx, 4                  // sizeof float32+        mov     eax, sourceStride+        imul    eax, edx                // source byte stride++        mov     ecx, count+        imul    ecx, eax+        add     ecx, esi                // source end ptr = count * source byte stride + source ptr++        mov     edi, destinationBuffer++        mov     edx, 2                  // sizeof int16+        mov     ebx, destinationStride+        imul    ebx, edx                // destination byte stride++        fwait+        fstcw   savedFpuControlWord+        fldcw   fpuControlWord_++        fld     int16Scaler_            // stack:  (int)0x7FFF++    Float32_To_Int16_loop:++        // load unscaled value into st(0)+        fld     dword ptr [esi]         // stack:  value, (int)0x7FFF+        add     esi, eax                // increment source ptr+        //lea     esi, [esi+eax]+        fmul    st(0), st(1)            // st(0) *= st(1), stack:  value*0x7FFF, (int)0x7FFF+        fistp   word ptr [edi]          // store scaled int into dest, stack:  (int)0x7FFF++        add     edi, ebx                // increment destination ptr+        //lea     edi, [edi+ebx]+        +        cmp     esi, ecx                // has src ptr reached end?+        jne     Float32_To_Int16_loop++        ffree   st(0)+        fincstp++        fwait+        fnclex+        fldcw   savedFpuControlWord+    }+}++/* -------------------------------------------------------------------------- */++static void Float32_To_Int16_Clip(+    void *destinationBuffer, signed int destinationStride,+    void *sourceBuffer, signed int sourceStride,+    unsigned int count, PaUtilTriangularDitherGenerator *ditherGenerator )+{+/*+    float *src = (float*)sourceBuffer;+    signed short *dest =  (signed short*)destinationBuffer;+    (void)ditherGenerator; // unused parameter++    while( count-- )+    {+        long samp = (signed long) (*src * (32767.0f));+        PA_CLIP_( samp, -0x8000, 0x7FFF );+        *dest = (signed short) samp;++        src += sourceStride;+        dest += destinationStride;+    }+*/++    short savedFpuControlWord;+   +    (void) ditherGenerator; /* unused parameter */++    __asm{+        // esi -> source ptr+        // eax -> source byte stride+        // edi -> destination ptr+        // ebx -> destination byte stride+        // ecx -> source end ptr+        // edx -> temp++        mov     esi, sourceBuffer++        mov     edx, 4                  // sizeof float32+        mov     eax, sourceStride+        imul    eax, edx                // source byte stride++        mov     ecx, count+        imul    ecx, eax+        add     ecx, esi                // source end ptr = count * source byte stride + source ptr++        mov     edi, destinationBuffer++        mov     edx, 2                  // sizeof int16+        mov     ebx, destinationStride+        imul    ebx, edx                // destination byte stride++        fwait+        fstcw   savedFpuControlWord+        fldcw   fpuControlWord_++        fld     int16Scaler_            // stack:  (int)0x7FFF++    Float32_To_Int16_Clip_loop:++        mov     edx, dword ptr [esi]    // load floating point value into integer register++        and     edx, 0x7FFFFFFF         // mask off sign+        cmp     edx, 0x3F800000         // greater than 1.0 or less than -1.0++        jg      Float32_To_Int16_Clip_clamp++        // load unscaled value into st(0)+        fld     dword ptr [esi]         // stack:  value, (int)0x7FFF+        add     esi, eax                // increment source ptr+        //lea     esi, [esi+eax]+        fmul    st(0), st(1)            // st(0) *= st(1), stack:  value*0x7FFF, (int)0x7FFF+        fistp   word ptr [edi]          // store scaled int into dest, stack:  (int)0x7FFF+        jmp     Float32_To_Int16_Clip_stored+    +    Float32_To_Int16_Clip_clamp:+        mov     edx, dword ptr [esi]    // load floating point value into integer register+        shr     edx, 31                 // move sign bit into bit 0+        add     esi, eax                // increment source ptr+        //lea     esi, [esi+eax]+        add     dx, 0x7FFF              // convert to maximum range integers+        mov     word ptr [edi], dx      // store clamped into into dest++    Float32_To_Int16_Clip_stored:++        add     edi, ebx                // increment destination ptr+        //lea     edi, [edi+ebx]+        +        cmp     esi, ecx                // has src ptr reached end?+        jne     Float32_To_Int16_Clip_loop++        ffree   st(0)+        fincstp++        fwait+        fnclex+        fldcw   savedFpuControlWord+    }+}++/* -------------------------------------------------------------------------- */++static void Float32_To_Int16_DitherClip(+    void *destinationBuffer, signed int destinationStride,+    void *sourceBuffer, signed int sourceStride,+    unsigned int count, PaUtilTriangularDitherGenerator *ditherGenerator )+{+/*+    float *src = (float*)sourceBuffer;+    signed short *dest =  (signed short*)destinationBuffer;+    (void)ditherGenerator; // unused parameter++    while( count-- )+    {++        float dither  = PaUtil_GenerateFloatTriangularDither( ditherGenerator );+        // use smaller scaler to prevent overflow when we add the dither +        float dithered = (*src * (32766.0f)) + dither;+        signed long samp = (signed long) dithered;+        PA_CLIP_( samp, -0x8000, 0x7FFF );+        *dest = (signed short) samp;++        src += sourceStride;+        dest += destinationStride;+    }+*/++    short savedFpuControlWord;++    // spill storage:+    signed long sourceByteStride;+    signed long highpassedDither;++    // dither state:+    unsigned long ditherPrevious = ditherGenerator->previous;+    unsigned long ditherRandSeed1 = ditherGenerator->randSeed1;+    unsigned long ditherRandSeed2 = ditherGenerator->randSeed2;++    __asm{+        // esi -> source ptr+        // eax -> source byte stride+        // edi -> destination ptr+        // ebx -> destination byte stride+        // ecx -> source end ptr+        // edx -> temp++        mov     esi, sourceBuffer++        mov     edx, 4                  // sizeof float32+        mov     eax, sourceStride+        imul    eax, edx                // source byte stride++        mov     ecx, count+        imul    ecx, eax+        add     ecx, esi                // source end ptr = count * source byte stride + source ptr++        mov     edi, destinationBuffer++        mov     edx, 2                  // sizeof int16+        mov     ebx, destinationStride+        imul    ebx, edx                // destination byte stride++        fwait+        fstcw   savedFpuControlWord+        fldcw   fpuControlWord_++        fld     ditheredInt16Scaler_    // stack:  int scaler++    Float32_To_Int16_DitherClip_loop:++        mov     edx, dword ptr [esi]    // load floating point value into integer register++        and     edx, 0x7FFFFFFF         // mask off sign+        cmp     edx, 0x3F800000         // greater than 1.0 or less than -1.0++        jg      Float32_To_Int16_DitherClip_clamp++        // load unscaled value into st(0)+        fld     dword ptr [esi]         // stack:  value, int scaler+        add     esi, eax                // increment source ptr+        //lea     esi, [esi+eax]+        fmul    st(0), st(1)            // st(0) *= st(1), stack:  value*(int scaler), int scaler++        /*+        // call PaUtil_GenerateFloatTriangularDither with C calling convention+        mov     sourceByteStride, eax   // save eax+        mov     sourceEnd, ecx          // save ecx+        push    ditherGenerator         // pass ditherGenerator parameter on stack+	    call    PaUtil_GenerateFloatTriangularDither  // stack:  dither, value*(int scaler), int scaler+	    pop     edx                     // clear parameter off stack+        mov     ecx, sourceEnd          // restore ecx+        mov     eax, sourceByteStride   // restore eax+        */++    // generate dither+        mov     sourceByteStride, eax   // save eax+        mov     edx, 196314165+        mov     eax, ditherRandSeed1+        mul     edx                     // eax:edx = eax * 196314165+        //add     eax, 907633515+        lea     eax, [eax+907633515]+        mov     ditherRandSeed1, eax+        mov     edx, 196314165+        mov     eax, ditherRandSeed2+        mul     edx                     // eax:edx = eax * 196314165+        //add     eax, 907633515+        lea     eax, [eax+907633515]+        mov     edx, ditherRandSeed1+        shr     edx, PA_DITHER_SHIFT_+        mov     ditherRandSeed2, eax+        shr     eax, PA_DITHER_SHIFT_+        //add     eax, edx                // eax -> current+        lea     eax, [eax+edx]            // current = randSeed1>>x + randSeed2>>x+        mov     edx, ditherPrevious+        neg     edx+        lea     edx, [eax+edx]          // highpass = current - previous+        mov     highpassedDither, edx+        mov     ditherPrevious, eax     // previous = current+        mov     eax, sourceByteStride   // restore eax+        fild    highpassedDither+        fmul    const_float_dither_scale_+    // end generate dither, dither signal in st(0)+        +        faddp   st(1), st(0)            // stack: dither * value*(int scaler), int scaler+        fistp   word ptr [edi]          // store scaled int into dest, stack:  int scaler+        jmp     Float32_To_Int16_DitherClip_stored+    +    Float32_To_Int16_DitherClip_clamp:+        mov     edx, dword ptr [esi]    // load floating point value into integer register+        shr     edx, 31                 // move sign bit into bit 0+        add     esi, eax                // increment source ptr+        //lea     esi, [esi+eax]+        add     dx, 0x7FFF              // convert to maximum range integers+        mov     word ptr [edi], dx      // store clamped into into dest++    Float32_To_Int16_DitherClip_stored:++        add     edi, ebx                // increment destination ptr+        //lea     edi, [edi+ebx]+        +        cmp     esi, ecx                // has src ptr reached end?+        jne     Float32_To_Int16_DitherClip_loop++        ffree   st(0)+        fincstp++        fwait+        fnclex+        fldcw   savedFpuControlWord+    }++    ditherGenerator->previous = ditherPrevious;+    ditherGenerator->randSeed1 = ditherRandSeed1;+    ditherGenerator->randSeed2 = ditherRandSeed2;+}++/* -------------------------------------------------------------------------- */++void PaUtil_InitializeX86PlainConverters( void )+{+    paConverters.Float32_To_Int32 = Float32_To_Int32;+    paConverters.Float32_To_Int32_Clip = Float32_To_Int32_Clip;+    paConverters.Float32_To_Int32_DitherClip = Float32_To_Int32_DitherClip;++    paConverters.Float32_To_Int24 = Float32_To_Int24;+    paConverters.Float32_To_Int24_Clip = Float32_To_Int24_Clip;+    paConverters.Float32_To_Int24_DitherClip = Float32_To_Int24_DitherClip;+    +    paConverters.Float32_To_Int16 = Float32_To_Int16;+    paConverters.Float32_To_Int16_Clip = Float32_To_Int16_Clip;+    paConverters.Float32_To_Int16_DitherClip = Float32_To_Int16_DitherClip;+}++#endif++/* -------------------------------------------------------------------------- */
+ portaudio/src/os/win/pa_x86_plain_converters.h view
@@ -0,0 +1,60 @@+/*+ * Plain Intel IA32 assembly implementations of PortAudio sample converter functions.+ * Copyright (c) 1999-2002 Ross Bencina, Phil Burk+ *+ * Permission is hereby granted, free of charge, to any person obtaining+ * a copy of this software and associated documentation files+ * (the "Software"), to deal in the Software without restriction,+ * including without limitation the rights to use, copy, modify, merge,+ * publish, distribute, sublicense, and/or sell copies of the Software,+ * and to permit persons to whom the Software is furnished to do so,+ * subject to the following conditions:+ *+ * The above copyright notice and this permission notice shall be+ * included in all copies or substantial portions of the Software.+ *+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.+ */++/*+ * The text above constitutes the entire PortAudio license; however, + * the PortAudio community also makes the following non-binding requests:+ *+ * Any person wishing to distribute modifications to the Software is+ * requested to send the modifications to the original developer so that+ * they can be incorporated into the canonical version. It is also + * requested that these non-binding requests be included along with the + * license above.+ */++/** @file+ @ingroup win_src+*/++#ifndef PA_X86_PLAIN_CONVERTERS_H+#define PA_X86_PLAIN_CONVERTERS_H++#ifdef __cplusplus+extern "C"+{+#endif /* __cplusplus */+++/**+ @brief Install optimized converter functions suitable for all IA32 processors++ It is recommended to call PaUtil_InitializeX86PlainConverters prior to calling Pa_Initialize+*/+void PaUtil_InitializeX86PlainConverters( void );+++#ifdef __cplusplus+}+#endif /* __cplusplus */+#endif /* PA_X86_PLAIN_CONVERTERS_H */