text: 
  
  /* this ALWAYS GENERATED file contains the definitions for the interfaces */
  
  
   /* File created by MIDL compiler version 8.01.0622 */
  /* @@MIDL_FILE_HEADING(  ) */
  
  
  
  /* 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 __contentpartner_h__
  #define __contentpartner_h__
  
  #if defined(_MSC_VER) && (_MSC_VER >= 1020)
  #pragma once
  #endif
  
  /* Forward Declarations */ 
  
  #ifndef __IWMPContentContainer_FWD_DEFINED__
  #define __IWMPContentContainer_FWD_DEFINED__
  typedef interface IWMPContentContainer IWMPContentContainer;
  
  #endif 	/* __IWMPContentContainer_FWD_DEFINED__ */
  
  
  #ifndef __IWMPContentContainerList_FWD_DEFINED__
  #define __IWMPContentContainerList_FWD_DEFINED__
  typedef interface IWMPContentContainerList IWMPContentContainerList;
  
  #endif 	/* __IWMPContentContainerList_FWD_DEFINED__ */
  
  
  #ifndef __IWMPContentPartnerCallback_FWD_DEFINED__
  #define __IWMPContentPartnerCallback_FWD_DEFINED__
  typedef interface IWMPContentPartnerCallback IWMPContentPartnerCallback;
  
  #endif 	/* __IWMPContentPartnerCallback_FWD_DEFINED__ */
  
  
  #ifndef __IWMPContentPartner_FWD_DEFINED__
  #define __IWMPContentPartner_FWD_DEFINED__
  typedef interface IWMPContentPartner IWMPContentPartner;
  
  #endif 	/* __IWMPContentPartner_FWD_DEFINED__ */
  
  
  /* header files for imported files */
  #include "oaidl.h"
  #include "ocidl.h"
  
  #ifdef __cplusplus
  extern "C"{
  #endif 
  
  
  /* interface __MIDL_itf_contentpartner_0000_0000 */
  /* [local] */ 
  
  //=========================================================================
  //
  // Microsoft Windows Media Technologies
  // Copyright (C) Microsoft Corporation. All rights reserved.
  //
  //=========================================================================
  #include <winapifamily.h>
  #pragma region Desktop Family
  #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  // These constants are used in the IWMPContentPartner::GetContentPartnerInfo API for the bstrInfoName parameter.
  
  static const WCHAR g_szContentPartnerInfo_LoginState[]             = L"LoginState";
  
  // Synopsis: IWMPContentPartner::GetContentPartnerInfo
  //              /*out parameter*/   VARIANT *pData    -> Type must be VT_BOOL, indicates whether the user is logged into the services
  
  static const WCHAR g_szContentPartnerInfo_MediaPlayerAccountType[] = L"MediaPlayerAccountType";
  
  // Synopsis: IWMPContentPartner::GetContentPartnerInfo
  //              /*out parameter*/   VARIANT *pData    -> Type must be VT_UI4,  - Represents a WMPAccountType value, this value is interpreted by the media player
  
  static const WCHAR g_szContentPartnerInfo_AccountType[]            = L"AccountType";
  
  // Synopsis: IWMPContentPartner::GetContentPartnerInfo
  //              /*out parameter*/   VARIANT *pData    -> Type must be VT_BSTR,  - Represents subscriptions services account type as a string
  //                                                    -> This value is not interpreted by the media player, and may be shown to the user
  
  static const WCHAR g_szContentPartnerInfo_HasCachedCredentials[]   = L"HasCachedCredentials";   // VT_BOOL - Returns whether plugin has cached credentials
  
  // Synopsis: IWMPContentPartner::GetContentPartnerInfo
  //              /*out parameter*/   VARIANT *pData    -> Type must be VT_BOOL, indicates whether the pluggin has cached
  //                                                    -> credentials necessary to log in to the service
  
  static const WCHAR g_szContentPartnerInfo_LicenseRefreshAdvanceWarning[] = L"LicenseRefreshAdvanceWarning";
  
  // Synopsis: IWMPContentPartner::GetContentPartnerInfo
  //              /*out parameter*/   VARIANT *pData    -> Type must be VT_UI4, representing days  - This value is used by the player to pre-emptively refresh licenses that will expire soon.
  //                                                    -> For example, if the plugin can support refreshing a playback license 5 days before it expires, then pData->ulVal should be set to 5.
  //                                                    -> This value is a global setting, and cannot be different for different licenses, users, etc.
  
  static const WCHAR g_szContentPartnerInfo_PurchasedTrackRequiresReDownload[] = L"PurchasedTrackRequiresReDownload";
  //              /*out parameter*/   VARIANT *pData    -> Type must be VT_BOOL, represents whether a purchased track must be redownloaded if the content had been previously downloaded.
  
  static const WCHAR g_szContentPartnerInfo_MaximumTrackPurchasePerPurchase[]  = L"MaximumNumberOfTracksPerPurchase";
  //              /*out parameter*/   VARIANT *pData    -> Type must be VT_UI4, indicates the maximum number of tracks that can be handled in a single IWMPContentParnter::Buy call.
  //                                                       0 indicates no maximum.
  
  static const WCHAR g_szContentPartnerInfo_AccountBalance[]  = L"AccountBalance";
  //              /*out parameter*/   VARIANT *pData    -> Type must be VT_BSTR,  - Represents account balance as a string
  //                                                    -> This value is not interpreted by the media player, and may be shown to the user
  
  static const WCHAR g_szContentPartnerInfo_UserName[]  = L"UserName";
  //              /*out parameter*/   VARIANT *pData    -> Type must be VT_BSTR,  - Represents user's account friendly name as a string
  //                                                    -> This value is not interpreted by the media player, and may be shown to the user
  
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  // These constants are returned to the HTML templates hosted in the player (returned from IWMPContentPartner::GetTemplate
  // from the window.external.task API
  
  static const WCHAR g_szMediaPlayerTask_Burn[]                    = L"Burn";
  static const WCHAR g_szMediaPlayerTask_Browse[]                  = L"Browse";
  static const WCHAR g_szMediaPlayerTask_Sync[]                    = L"Sync";
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  // These constants are used in the IWMPContentPartner::GetItemInfo API for the bstrInfoName parameter
  
  static const WCHAR g_szItemInfo_PopupURL[]                       = L"Popup";
  
  // Synopsis: IWMPContentPartner::GetItemInfo
  //              /*input parameter*/ VARIANT *pContext -> Type is VT_I4, indicates index of popup URL to return
  //              /*out parameter*/   VARIANT *pData    -> Type must be VT_BSTR, indicates URL to host in HTML based dialog
  
  static const WCHAR g_szItemInfo_AuthenticationSuccessURL[]       = L"AuthenticationSuccessURL";
  
  // Synopsis: IWMPContentPartner::GetItemInfo
  //              /*input parameter*/ VARIANT *pContext -> Type is VT_I4, indicates index of Authentication URL to return
  //              /*out parameter*/   VARIANT *pData    -> Type must be VT_BSTR, indicates URL to navigate if authentication is successful
  
  static const WCHAR g_szItemInfo_LoginFailureURL[]                = L"LoginFailureURL";
  
  // Synopsis: IWMPContentPartner::GetItemInfo
  //              /*input parameter*/ VARIANT *pContext -> Type is VT_UI4, indicates index of LoginFailureURL to query.  This value was passed to the player via Notify( wmpcnLoginStateChange, <value
  //              /*out parameter*/   VARIANT *pData    -> Type must be VT_BSTR, indicates URL to navigate when loginstatechange 
  
  static const WCHAR g_szItemInfo_HTMLViewURL[]                = L"HTMLViewURL";
  
  // Synopsis: IWMPContentPartner::GetItemInfo
  //              /*input parameter*/ VARIANT *pContext -> Type is VT_BSTR, this is the string specified in the ASX file.  For example: <param name="HTMLFLINK" value="foo" \> 
  //              /*out parameter*/   VARIANT *pData    -> Type must be VT_BSTR, indicates URL to use for the HTMLView 
  
  static const WCHAR g_szItemInfo_PopupCaption[]                   = L"PopupCaption";
  
  // Synopsis: IWMPContentPartner::GetItemInfo
  //              /*input parameter*/ VARIANT *pContext -> Type is VT_I4, indicates index of popup URL to return
  //              /*out parameter*/   VARIANT *pData    -> Type must be VT_BSTR, indicates caption for the HTML based dialog
  
  static const WCHAR g_szItemInfo_ALTLoginURL[]              = L"ALTLoginURL";
  
  // Synopsis: IWMPContentPartner::GetItemInfo
  //              /*input parameter*/ VARIANT *pContext -> Type is VT_EMPTY, contains nothing
  //              /*out parameter*/   VARIANT *pData    -> Type must be VT_BSTR, indicates URL for the alternative login
  
  static const WCHAR g_szItemInfo_ALTLoginCaption[]              = L"ALTLoginCaption";
  
  // Synopsis: IWMPContentPartner::GetItemInfo
  //              /*input parameter*/ VARIANT *pContext -> Type is VT_EMPTY, contains nothing
  //              /*out parameter*/   VARIANT *pData    -> Type must be VT_BSTR, indicates caption for the alternative login
  
  static const WCHAR g_szItemInfo_ForgetPasswordURL[]              = L"ForgotPassword";
  
  // Synopsis: IWMPContentPartner::GetItemInfo
  //              /*input parameter*/ VARIANT *pContext -> Type is VT_EMPTY, contains nothing
  //              /*out parameter*/   VARIANT *pData    -> Type must be VT_BSTR, indicates URL to navigate the service plane
  //                                                    -> in the event the user has forgotten their password
  
  static const WCHAR g_szItemInfo_CreateAccountURL[]               = L"CreateAccount";
  
  // Synopsis: IWMPContentPartner::GetItemInfo
  //              /*input parameter*/ VARIANT *pContext -> Type is VT_EMPTY, contains nothing
  //              /*out parameter*/   VARIANT *pData    -> Type must be VT_BSTR, indicates URL to navigate the service plane
  //                                                    -> which the user can manage their account
  
  static const WCHAR g_szItemInfo_ArtistArtURL[]                   = L"ArtistArt";
  
  // Synopsis: IWMPContentPartner::GetItemInfo
  //              /*input parameter*/ VARIANT *pContext -> Type is VT_UI4, containing the aritst ID from the catalog
  //              /*out parameter*/   VARIANT *pData    -> Type must be VT_BSTR, indicates URL to retrieve artist art
  
  static const WCHAR g_szItemInfo_AlbumArtURL[]                    = L"AlbumArt";
  
  // Synopsis: IWMPContentPartner::GetItemInfo
  //              /*input parameter*/ VARIANT *pContext -> Type is VT_UI4, containing the album ID from the catalog
  //              /*out parameter*/   VARIANT *pData    -> Type must be VT_BSTR, indicates URL to retrieve album art
  
  static const WCHAR g_szItemInfo_ListArtURL[]                     = L"ListArt";
  
  // Synopsis: IWMPContentPartner::GetItemInfo
  //              /*input parameter*/ VARIANT *pContext -> Type is VT_UI4, containing the list ID from the catalog
  //              /*out parameter*/   VARIANT *pData    -> Type must be VT_BSTR, indicates URL to retrieve list art
  
  static const WCHAR g_szItemInfo_GenreArtURL[]                    = L"GenreArt";
  
  // Synopsis: IWMPContentPartner::GetItemInfo
  //              /*input parameter*/ VARIANT *pContext -> Type is VT_UI4, containing the genre ID from the catalog
  //              /*out parameter*/   VARIANT *pData    -> Type must be VT_BSTR, indicates URL to retrieve genre art
  
  static const WCHAR g_szItemInfo_SubGenreArtURL[]                 = L"SubGenreArt";
  
  // Synopsis: IWMPContentPartner::GetItemInfo
  //              /*input parameter*/ VARIANT *pContext -> Type is VT_UI4, containing the sub-genre ID from the catalog
  //              /*out parameter*/   VARIANT *pData    -> Type must be VT_BSTR, indicates URL to retrieve sub-genre art
  
  static const WCHAR g_szItemInfo_RadioArtURL[]                 = L"RadioArt";
  
  // Synopsis: IWMPContentPartner::GetItemInfo
  //              /*input parameter*/ VARIANT *pContext -> Type is VT_UI4, containing the radio ID from the catalog
  //              /*out parameter*/   VARIANT *pData    -> Type must be VT_BSTR, indicates URL to retrieve radio art
  
  static const WCHAR g_szItemInfo_TreeListIconURL[]                 = L"CPListIDIcon";
  
  // Synopsis: IWMPContentPartner::GetItemInfo
  //              /*input parameter*/ VARIANT *pContext -> Type is VT_UI4, containing the list ID from the catalog
  //              /*out parameter*/   VARIANT *pData    -> Type must be VT_BSTR, indicates URL to retrieve list icon art
  
  static const WCHAR g_szItemInfo_ErrorDescription[]                = L"CPErrorDescription";
  
  // Synopsis: IWMPContentPartner::GetItemInfo
  //              /*input parameter*/ VARIANT *pContext -> Type is VT_ERROR, containing the error code
  //              /*out parameter*/   VARIANT *pData    -> Type must be VT_BSTR, text describing the error.
  //                                                       Fail this call if you do not understand error code
  
  static const WCHAR g_szItemInfo_ErrorURL[]                        = L"CPErrorURL";
  
  // Synopsis: IWMPContentPartner::GetItemInfo
  //              /*input parameter*/ VARIANT *pContext -> Type is VT_ERROR, containing the error code
  //              /*out parameter*/   VARIANT *pData    -> Type must be VT_BSTR, url that the service pane will be navigated
  //                                                       to when then user clicks the resolve link
  
  static const WCHAR g_szItemInfo_ErrorURLLinkText[]                    = L"CPErrorURLLinkText";
  
  // Synopsis: IWMPContentPartner::GetItemInfo
  //              /*input parameter*/ VARIANT *pContext -> Type is VT_ERROR, containing the error code
  //              /*out parameter*/   VARIANT *pData    -> Type must be VT_BSTR, text that will be used for the hyperlink
  //                                                       text for the URL returned from g_szItemInfo_ErrorURL
  
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  // These constants are used in the all the IWMPContentPartner and IWMPContentPartnerCallback APIs
  // that deal with some sort of location or object type.
  
  static const WCHAR g_szUnknownLocation[]                         = L"UnknownLocation";
  
  // Passed when the media player cannot determine a valid location to pass to the plugin.
  // should rarely happen
  
  static const WCHAR g_szRootLocation[]                            = L"RootLocation";           // Passed when the user is on the 'root' tree node of the service
  
  // Passed when the action is taking place on the root content-partner node in the media player's lbrary tree
  
  static const WCHAR g_szFlyoutMenu[]                            = L"FlyoutMenu";                 // Passed when the user selects the flyout menu of the service
  
  // Passed when the user selects the flyout menu of the service
  
  static const WCHAR g_szOnlineStore[]                           = L"OnlineStore";               // Used to navigate the player to the online stores page in the call to IWMPContentPartnerCallback::ChangeView
  
  static const WCHAR g_szVideoRecent[]                           = L"VideoRecent";               // Used to navigate the player to the online stores page in the call to IWMPContentPartnerCallback::ChangeView
  
  static const WCHAR g_szVideoRoot[]                           = L"VideoRoot";               // Used to navigate the player to the online stores page in the call to IWMPContentPartnerCallback::ChangeView
  
  // These constants are used in the all the IWMPContentPartner and IWMPContentPartnerCallback APIs
  // They indicate either a location in the library (see IWMPContentPartner::GetTemplate) or
  // a type being returned via a callback (see IWMPContentPartner::GetListContents and
  // IWMPContentPartnerCallback::AddListContents
  
  static const WCHAR g_szCPListID[]                                   = L"CPListID"; 
  static const WCHAR g_szAllCPListIDs[]                               = L"AllCPListIDs"; 
  static const WCHAR g_szCPTrackID[]                                  = L"CPTrackID"; 
  static const WCHAR g_szAllCPTrackIDs[]                              = L"AllCPTrackIDs"; 
  static const WCHAR g_szCPArtistID[]                                 = L"CPArtistID"; 
  static const WCHAR g_szAllCPArtistIDs[]                             = L"AllCPArtistIDs"; 
  static const WCHAR g_szCPAlbumID[]                                  = L"CPAlbumID"; 
  static const WCHAR g_szAllCPAlbumIDs[]                              = L"AllCPAlbumIDs"; 
  static const WCHAR g_szCPGenreID[]                                  = L"CPGenreID"; 
  static const WCHAR g_szAllCPGenreIDs[]                              = L"AllCPGenreIDs"; 
  static const WCHAR g_szCPAlbumSubGenreID[]                          = L"CPAlbumSubGenreID"; 
  static const WCHAR g_szAllCPAlbumSubGenreIDs[]                      = L"AllCPAlbumSubGenreIDs"; 
  static const WCHAR g_szReleaseDateYear[]                            = L"ReleaseDateYear"; 
  static const WCHAR g_szAllReleaseDateYears[]                        = L"AllReleaseDateYears"; 
  static const WCHAR g_szCPRadioID[]                                  = L"CPRadioID"; 
  static const WCHAR g_szAllCPRadioIDs[]                              = L"AllCPRadioIDs"; 
  static const WCHAR g_szAuthor[]                                     = L"Author"; 
  static const WCHAR g_szAllAuthors[]                                 = L"AllAuthors"; 
  static const WCHAR g_szWMParentalRating[]                           = L"WMParentalRating"; 
  static const WCHAR g_szAllWMParentalRatings[]                       = L"AllWMParentalRatings"; 
  static const WCHAR g_szAllUserEffectiveRatingStarss[]               = L"AllUserEffectiveRatingStarss"; 
  static const WCHAR g_szUserEffectiveRatingStars[]                   = L"UserEffectiveRatingStars"; 
  static const WCHAR g_szUserPlaylist[]                               = L"UserPlaylist"; 
  static ULONG g_knReservedCPTrackID_NotFound                         = (DWORD)-1; 
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  // These constants are to be used by the window.external.changeViewOnlineList for the bstrViewMode parameter
  
  static const WCHAR g_szViewMode_Report[]                          = L"ViewModeReport";         // Display dynamic list contents in report mode
  static const WCHAR g_szViewMode_Details[]                         = L"ViewModeDetails";        // Display dynamic list contents in details mode
  static const WCHAR g_szViewMode_Icon[]                            = L"ViewModeIcon";           // Display dynamic list contents in icon mode
  static const WCHAR g_szViewMode_Tile[]                            = L"ViewModeTile";           // Display dynamic list contents in tile mode
  static const WCHAR g_szViewMode_OrderedList[]                     = L"ViewModeOrderedList";    // Display dynamic list contents in ordered list mode
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  // These constants are used in the IWMPContentContainer APIs for detecting fixed pricing
  
  static const WCHAR g_szContentPrice_Unknown[]                     = L"PriceUnknown";           // The price of the content is unknown
  static const WCHAR g_szContentPrice_CannotBuy[]                   = L"PriceCannotBuy";         // The content cannot be bought
  static const WCHAR g_szContentPrice_Free[]                        = L"PriceFree";              // The content is free
  //////////////////////////////////////////////////////////////////////
  //          SERVICE CAPABILITIES THAT APPLY TO CONTENT-PARTNER-PLUGINS
  //
  // NOTE: If SUBSCRIPTION_CAP_IS_CONTENTPARTNER is not present, the 
  // content partner plugin will NOT load
  //
  // These values are written in the registry as a DWORD value called 'Capabilities'
  // under HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MediaPlayer\Subscriptions\<ContentPartnerPluginKey>
  // See the MSDN section on Online Stores Programming Reference in the Windows Media SDK
  //////////////////////////////////////////////////////////////////////
  #ifndef SUBSCRIPTION_CAP_DEVICEAVAILABLE
  #define SUBSCRIPTION_CAP_DEVICEAVAILABLE        0x00000010
  #endif
  #ifndef SUBSCRIPTION_CAP_BACKGROUNDPROCESSING
  #define SUBSCRIPTION_CAP_BACKGROUNDPROCESSING   0x00000008
  #endif
  #ifndef SUBSCRIPTION_CAP_IS_CONTENTPARTNER
  #define SUBSCRIPTION_CAP_IS_CONTENTPARTNER      0x00000040
  #endif
  #ifndef SUBSCRIPTION_CAP_ALTLOGIN
  #define SUBSCRIPTION_CAP_ALTLOGIN      0x00000080
  #endif
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  
  // The WMPPartnerNotification enum values are passed to the IWMPContentPartner::Notify API
  
  // Synopsis - IWMPContentPartner::Notify( wmpsnBackgroundProcessingBegin 
  //                                           /*input*/ VARIANT *pContenxt, type must be VT_EMPTY
  // Remarks: the plugin can start background processing
  
  // Synopsis - IWMPContentPartner::Notify( wmpsnBackgroundProcessingEnd 
  //                                           /*input*/ VARIANT *pContenxt, type must be VT_EMPTY
  // Remarks: the plugin should stop background processing, this enables the player to use more CPU for playback
  
  // Synopsis - IWMPContentPartner::Notify( wmpsnCatalogDownloadFailure 
  //                                           /*input*/ VARIANT *pContenxt, type must be VT_ERROR
  // Remarks: indicates a failure while downloading the catalog
  
  // Synopsis - IWMPContentPartner::Notify( wmpsnCatalogDownloadComplete 
  //                                           /*input*/ VARIANT *pContenxt, type must be VT_EMPTY
  // Remarks: indicates the catalog was downloaded successfully
  
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  // These constants are used in the IWMPContentPartner::RefreshLicesnse APIs for the reason
  
  static const WCHAR g_szRefreshLicensePlay[]                     = L"RefreshForPlay";
  static const WCHAR g_szRefreshLicenseBurn[]                     = L"RefreshForBurn";
  static const WCHAR g_szRefreshLicenseSync[]                     = L"RefreshForSync";
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  // These constants are used in the IWMPContentPartner::VerifyPermission APIs
  
  static const WCHAR g_szVerifyPermissionSync[]                     = L"VerifyPermissionSync";
  #ifndef __WMPNotifySubscriptionPluginAddRemove
  #define __WMPNotifySubscriptionPluginAddRemove
  __inline BOOL WMPNotifySubscriptionPluginAddRemove()
  {
      BOOL fRet = FALSE;
      UINT  msg = RegisterWindowMessageA( "WMPlayer_PluginAddRemove" );
      if( 0 != msg ) 
       {
          fRet = PostMessage( HWND_BROADCAST, msg, 1, 0 );
       }
       return fRet;
  }
  #endif
  typedef /* [public] */ 
  enum WMPPartnerNotification
      {
          wmpsnBackgroundProcessingBegin	= 1,
          wmpsnBackgroundProcessingEnd	= 2,
          wmpsnCatalogDownloadFailure	= 3,
          wmpsnCatalogDownloadComplete	= 4
      } 	WMPPartnerNotification;
  
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  
  // The WMPCallbackNotification enum values are passed to the IWMPContentPartner::Notify API
  
  // Synopsis - IWMPContentPartnerCallback::Notify( wmpcnLoginStateChange 
  //                                           /*input*/ VARIANT *pContext, type must be VT_BOOL or VT_UI4
  // Remarks: indicates a new login state. VT_BOOL indicates a normal success or failure, while setting the type to VT_UI4 indicates
  // a special condition (expired or canceled account, etc) in which case the player will query the plugin via
  // GetItemInfo( g_szItemInfo_LoginFailureURL, <VT_UI4 value returned with wmpcnLoginStateChange>, <VARIANT * to receive the URL as VT_BSTR> )
  
  // Synopsis - IWMPContentPartnerCallback::Notify( wmpcnAuthResult 
  //                                           /*input*/ VARIANT *pContext, type must be VT_BOOL
  // Remarks: indicates a successful auth
  
  // Synopsis - IWMPContentPartnerCallback::Notify( wmpcnLicenseUpdated 
  //                                           /*input*/ VARIANT *pContext, type must be VT_UI4
  // Remarks: represents the content ID whose license has been update
  
  // Synopsis - IWMPContentPartnerCallback::Notify( wmpcnNewCatalogAvailable 
  //                                           /*input*/ VARIANT *pContext, type must be VT_EMPTY
  // Remarks: Instructs the player to download a new catalog
  
  // Synopsis - IWMPContentPartnerCallback::CallbackNotify( wmpcnNewPluginAvailable 
  //                                           /*input*/ VARIANT *pContext, type must be VT_BOOL
  // Remarks: Instructs the player to download a new plugin, if pContext is VARIANT_TRUE, this indicates
  //          that an upgrade is required
  
  // Synopsis - IWMPContentPartnerCallback::CallbackNotify( wmpcnDisableRadioSkipping 
  //                                           /*input*/ VARIANT *pContext, type must be VT_EMPTY
  // Remarks: Instructs the player to not allow any skipping of items in a radio playlist
  typedef /* [public] */ 
  enum WMPCallbackNotification
      {
          wmpcnLoginStateChange	= 1,
          wmpcnAuthResult	= 2,
          wmpcnLicenseUpdated	= 3,
          wmpcnNewCatalogAvailable	= 4,
          wmpcnNewPluginAvailable	= 5,
          wmpcnDisableRadioSkipping	= 6
      } 	WMPCallbackNotification;
  
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  
  // The WMPTaskType enum values are passed to the IWMPContentPartner::GetTemplate API
  
  // Synopsis - IWMPContentPartner::GetTemplate( wmpttBrowse 
  // Remarks: Indicates that the player is in the Library task
  
  // Synopsis - IWMPContentPartner::GetTemplate( wmpttSync 
  // Remarks: Indicates that the player is in the Sync task
  
  // Synopsis - IWMPContentPartner::GetTemplate( wmpttBurn 
  // Remarks: Indicates that the player is in the Burn task
  
  // Synopsis - IWMPContentPartner::GetTemplate( wmpttCurrent 
  // Remarks: Indicates that the player is in something other than the Library, Sync or Burn task
  
  typedef /* [public] */ 
  enum WMPTaskType
      {
          wmpttBrowse	= 1,
          wmpttSync	= 2,
          wmpttBurn	= 3,
          wmpttCurrent	= 4
      } 	WMPTaskType;
  
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  
  // The WMPContextMenuInfo is returned from the IWMPContentPartner::GetCommands API
  
  // Synopsis - struct WMPContextMenuInfo
  
  // Member - dwID -> Indicates the value for the command from the plugin. A value of zero will
  //                  cause the media player to insert a separator in the context menu
  
  // Member - bstrMenuText -> Indicates the text that will be show in the context menu
  
  // Member - bstrHelpText -> Indicates help text that could be shown when the user is
  //                           highlighting this menu option
  
  typedef /* [public] */ struct WMPContextMenuInfo
      {
      DWORD dwID;
      BSTR bstrMenuText;
      BSTR bstrHelpText;
      } 	WMPContextMenuInfo;
  
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  // These constants are to be used in the IWMPContentPartner::StationEvent
  
  static const WCHAR g_szStationEvent_Started[]                          = L"TrackStarted";  
  static const WCHAR g_szStationEvent_Complete[]                         = L"TrackComplete"; 
  static const WCHAR g_szStationEvent_Skipped[]                          = L"TrackSkipped";  
  
  
  extern RPC_IF_HANDLE __MIDL_itf_contentpartner_0000_0000_v0_0_c_ifspec;
  extern RPC_IF_HANDLE __MIDL_itf_contentpartner_0000_0000_v0_0_s_ifspec;
  
  #ifndef __IWMPContentContainer_INTERFACE_DEFINED__
  #define __IWMPContentContainer_INTERFACE_DEFINED__
  
  /* interface IWMPContentContainer */
  /* [unique][uuid][object] */ 
  
  
  // Synopsis - GetID-> This function returns the ID for this container
  
  
  // Synopsis - GetPrice-> This function returns the price for this container
  
  
  // Synopsis - GetType -> This returns the type of this container. Can return g_szCPAlbumID, g_szCPListID, or g_szUnknownLocation
  
  
  // Synopsis - GetContentCount -> Returns the content count held in this container.
  
  
  // Synopsis - GetContentPrice -> Returns the price for a piece of content.
  //               /*input*/ idxContent -> index of content to get price for. Should be less than value returned by GetContentCount
  //               /*output*/ pbstrPrice -> string content the price or g_szContentPrice_Unknown, g_szContentPrice_Free, or g_szContentPrice_CannotBuy
  
  
  // Synopsis - GetContentID-> Returns the identifier for a piece of content.
  //               /*input*/ idxContent -> index of content to indentifier for. Should be less than value returned by GetContentCount
  //               /*output*/ pContentID -> indentifier of the content
  
  
  EXTERN_C const IID IID_IWMPContentContainer;
  
  #if defined(__cplusplus) && !defined(CINTERFACE)
      
      MIDL_INTERFACE("ad7f4d9c-1a9f-4ed2-9815-ecc0b58cb616")
      IWMPContentContainer : public IUnknown
      {
      public:
          virtual HRESULT STDMETHODCALLTYPE GetID( 
              /* [out] */ __RPC__out ULONG *pContentID) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE GetPrice( 
              /* [out] */ __RPC__deref_out_opt BSTR *pbstrPrice) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE GetType( 
              /* [out] */ __RPC__deref_out_opt BSTR *pbstrType) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE GetContentCount( 
              /* [out] */ __RPC__out ULONG *pcContent) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE GetContentPrice( 
              /* [in] */ ULONG idxContent,
              /* [out] */ __RPC__deref_out_opt BSTR *pbstrPrice) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE GetContentID( 
              /* [in] */ ULONG idxContent,
              /* [out] */ __RPC__out ULONG *pContentID) = 0;
          
      };
      
      
  #else 	/* C style interface */
  
      typedef struct IWMPContentContainerVtbl
      {
          BEGIN_INTERFACE
          
          HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
              __RPC__in IWMPContentContainer * This,
              /* [in] */ __RPC__in REFIID riid,
              /* [annotation][iid_is][out] */ 
              _COM_Outptr_  void **ppvObject);
          
          ULONG ( STDMETHODCALLTYPE *AddRef )( 
              __RPC__in IWMPContentContainer * This);
          
          ULONG ( STDMETHODCALLTYPE *Release )( 
              __RPC__in IWMPContentContainer * This);
          
          HRESULT ( STDMETHODCALLTYPE *GetID )( 
              __RPC__in IWMPContentContainer * This,
              /* [out] */ __RPC__out ULONG *pContentID);
          
          HRESULT ( STDMETHODCALLTYPE *GetPrice )( 
              __RPC__in IWMPContentContainer * This,
              /* [out] */ __RPC__deref_out_opt BSTR *pbstrPrice);
          
          HRESULT ( STDMETHODCALLTYPE *GetType )( 
              __RPC__in IWMPContentContainer * This,
              /* [out] */ __RPC__deref_out_opt BSTR *pbstrType);
          
          HRESULT ( STDMETHODCALLTYPE *GetContentCount )( 
              __RPC__in IWMPContentContainer * This,
              /* [out] */ __RPC__out ULONG *pcContent);
          
          HRESULT ( STDMETHODCALLTYPE *GetContentPrice )( 
              __RPC__in IWMPContentContainer * This,
              /* [in] */ ULONG idxContent,
              /* [out] */ __RPC__deref_out_opt BSTR *pbstrPrice);
          
          HRESULT ( STDMETHODCALLTYPE *GetContentID )( 
              __RPC__in IWMPContentContainer * This,
              /* [in] */ ULONG idxContent,
              /* [out] */ __RPC__out ULONG *pContentID);
          
          END_INTERFACE
      } IWMPContentContainerVtbl;
  
      interface IWMPContentContainer
      {
          CONST_VTBL struct IWMPContentContainerVtbl *lpVtbl;
      };
  
      
  
  #ifdef COBJMACROS
  
  
  #define IWMPContentContainer_QueryInterface(This,riid,ppvObject)	\
      ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
  
  #define IWMPContentContainer_AddRef(This)	\
      ( (This)->lpVtbl -> AddRef(This) ) 
  
  #define IWMPContentContainer_Release(This)	\
      ( (This)->lpVtbl -> Release(This) ) 
  
  
  #define IWMPContentContainer_GetID(This,pContentID)	\
      ( (This)->lpVtbl -> GetID(This,pContentID) ) 
  
  #define IWMPContentContainer_GetPrice(This,pbstrPrice)	\
      ( (This)->lpVtbl -> GetPrice(This,pbstrPrice) ) 
  
  #define IWMPContentContainer_GetType(This,pbstrType)	\
      ( (This)->lpVtbl -> GetType(This,pbstrType) ) 
  
  #define IWMPContentContainer_GetContentCount(This,pcContent)	\
      ( (This)->lpVtbl -> GetContentCount(This,pcContent) ) 
  
  #define IWMPContentContainer_GetContentPrice(This,idxContent,pbstrPrice)	\
      ( (This)->lpVtbl -> GetContentPrice(This,idxContent,pbstrPrice) ) 
  
  #define IWMPContentContainer_GetContentID(This,idxContent,pContentID)	\
      ( (This)->lpVtbl -> GetContentID(This,idxContent,pContentID) ) 
  
  #endif /* COBJMACROS */
  
  
  #endif 	/* C style interface */
  
  
  
  
  #endif 	/* __IWMPContentContainer_INTERFACE_DEFINED__ */
  
  
  /* interface __MIDL_itf_contentpartner_0000_0001 */
  /* [local] */ 
  
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  
  // The WMPTransactionType enum values are passed to the IWMPContentContainerList::GetTransactionType API
  
  // Synopsis - wmpttNoTransaction
  // Remarks: Undefined transaction, not currently used
  
  // Synopsis - wmpttDownload
  // Remarks: Indicates that this IWMPContentContainerList is to be used for a download transaction
  
  // Synopsis - wmpttBuy
  // Remarks: Indicates that this IWMPContentContainerList is to be used for a buy transaction
  
  typedef /* [public] */ 
  enum WMPTransactionType
      {
          wmpttNoTransaction	= 0,
          wmpttDownload	= 1,
          wmpttBuy	= 2
      } 	WMPTransactionType;
  
  
  
  extern RPC_IF_HANDLE __MIDL_itf_contentpartner_0000_0001_v0_0_c_ifspec;
  extern RPC_IF_HANDLE __MIDL_itf_contentpartner_0000_0001_v0_0_s_ifspec;
  
  #ifndef __IWMPContentContainerList_INTERFACE_DEFINED__
  #define __IWMPContentContainerList_INTERFACE_DEFINED__
  
  /* interface IWMPContentContainerList */
  /* [unique][uuid][object] */ 
  
  
  // Synopsis - GetTransactionType-> Returns the transaction type.
  //               /*output*/ WMPTransactionType *pwmptt -> indicates whether this IWMPContentContainerList will be used to a buy or download
  
  
  // Synopsis - GetContainerCount-> Returns the number of IWMPContentContainer(s) present in this container list.
  //               /*output*/ ULONG *pcContainer -> returns the number of containers
  
  
  // Synopsis - GetContainer-> Returns the IWMPContentContainer given an index.
  //               /*input*/ ULONG idxContainer -> the index of the desired container, should be less than the number returned
  //                                               by IWMPContentContainerList::GetContainerCount
  //               /*output*/ IWMPContentContainer **ppContent -> will containe the requested IWMPContentContainer on success
  
  
  EXTERN_C const IID IID_IWMPContentContainerList;
  
  #if defined(__cplusplus) && !defined(CINTERFACE)
      
      MIDL_INTERFACE("a9937f78-0802-4af8-8b8d-e3f045bc8ab5")
      IWMPContentContainerList : public IUnknown
      {
      public:
          virtual HRESULT STDMETHODCALLTYPE GetTransactionType( 
              /* [out] */ __RPC__out WMPTransactionType *pwmptt) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE GetContainerCount( 
              /* [out] */ __RPC__out ULONG *pcContainer) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE GetContainer( 
              /* [in] */ ULONG idxContainer,
              /* [out] */ __RPC__deref_out_opt IWMPContentContainer **ppContent) = 0;
          
      };
      
      
  #else 	/* C style interface */
  
      typedef struct IWMPContentContainerListVtbl
      {
          BEGIN_INTERFACE
          
          HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
              __RPC__in IWMPContentContainerList * This,
              /* [in] */ __RPC__in REFIID riid,
              /* [annotation][iid_is][out] */ 
              _COM_Outptr_  void **ppvObject);
          
          ULONG ( STDMETHODCALLTYPE *AddRef )( 
              __RPC__in IWMPContentContainerList * This);
          
          ULONG ( STDMETHODCALLTYPE *Release )( 
              __RPC__in IWMPContentContainerList * This);
          
          HRESULT ( STDMETHODCALLTYPE *GetTransactionType )( 
              __RPC__in IWMPContentContainerList * This,
              /* [out] */ __RPC__out WMPTransactionType *pwmptt);
          
          HRESULT ( STDMETHODCALLTYPE *GetContainerCount )( 
              __RPC__in IWMPContentContainerList * This,
              /* [out] */ __RPC__out ULONG *pcContainer);
          
          HRESULT ( STDMETHODCALLTYPE *GetContainer )( 
              __RPC__in IWMPContentContainerList * This,
              /* [in] */ ULONG idxContainer,
              /* [out] */ __RPC__deref_out_opt IWMPContentContainer **ppContent);
          
          END_INTERFACE
      } IWMPContentContainerListVtbl;
  
      interface IWMPContentContainerList
      {
          CONST_VTBL struct IWMPContentContainerListVtbl *lpVtbl;
      };
  
      
  
  #ifdef COBJMACROS
  
  
  #define IWMPContentContainerList_QueryInterface(This,riid,ppvObject)	\
      ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
  
  #define IWMPContentContainerList_AddRef(This)	\
      ( (This)->lpVtbl -> AddRef(This) ) 
  
  #define IWMPContentContainerList_Release(This)	\
      ( (This)->lpVtbl -> Release(This) ) 
  
  
  #define IWMPContentContainerList_GetTransactionType(This,pwmptt)	\
      ( (This)->lpVtbl -> GetTransactionType(This,pwmptt) ) 
  
  #define IWMPContentContainerList_GetContainerCount(This,pcContainer)	\
      ( (This)->lpVtbl -> GetContainerCount(This,pcContainer) ) 
  
  #define IWMPContentContainerList_GetContainer(This,idxContainer,ppContent)	\
      ( (This)->lpVtbl -> GetContainer(This,idxContainer,ppContent) ) 
  
  #endif /* COBJMACROS */
  
  
  #endif 	/* C style interface */
  
  
  
  
  #endif 	/* __IWMPContentContainerList_INTERFACE_DEFINED__ */
  
  
  /* interface __MIDL_itf_contentpartner_0000_0002 */
  /* [local] */ 
  
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  
  // The WMPTemplateSize enum values are returned from the IWMPContentPartner::GetTemplate API
  
  // Synopsis - wmptsSmall
  // Remarks: indicates the media player will allocate 100 pixels in height for the template
  
  // Synopsis - wmptsMedium
  // Remarks: indicates the media player will allocate 250 pixels in height for the template
  
  // Synopsis - wmptsLarge
  // Remarks: indicates the media player will allocate all of the room expect for the necessary space
  //          for the list-control to display a small set of items for the template
  
  typedef /* [public] */ 
  enum WMPTemplateSize
      {
          wmptsSmall	= 0,
          wmptsMedium	= ( wmptsSmall + 1 ) ,
          wmptsLarge	= ( wmptsMedium + 1 ) 
      } 	WMPTemplateSize;
  
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  
  // The WMPStreamingType enum values are passed to the returned from the IWMPContentPartner::GetStreamingULR API
  
  // Synopsis - wmpstMusic
  // Remarks: indicates the plugin should return an URL for music content
  
  // Synopsis - wmpstVideo
  // Remarks: indicates the plugin should return an URL for video content
  
  // Synopsis - wmpstRadio
  // Remarks: indicates the plugin should return an URL for radio content
  
  typedef /* [public] */ 
  enum WMPStreamingType
      {
          wmpstUnknown	= 0,
          wmpstMusic	= 1,
          wmpstVideo	= 2,
          wmpstRadio	= 3
      } 	WMPStreamingType;
  
  
  ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  
  // The WMPAccountType enum values are returned from the IWMPContentPartner::GetPartnerInfo when API
  // the string is g_szContentPartnerInfo_MediaPlayerAccountType passed
  
  // Synopsis - wmpatBuyOnly
  // Remarks: indicates the user only has the option to buy content
  
  // Synopsis - wmpatSubscription
  // Remarks: indicates the user has a subcription account, which indicates buy is also required for sync to Janus device
  
  // Synopsis - wmpatJanus
  // Remarks: indicates the user has a subcirption account, and the ability to sync to Janus devices without having to buy
  
  typedef /* [public] */ 
  enum WMPAccountType
      {
          wmpatBuyOnly	= 1,
          wmpatSubscription	= 2,
          wmpatJanus	= 3
      } 	WMPAccountType;
  
  
  
  extern RPC_IF_HANDLE __MIDL_itf_contentpartner_0000_0002_v0_0_c_ifspec;
  extern RPC_IF_HANDLE __MIDL_itf_contentpartner_0000_0002_v0_0_s_ifspec;
  
  #ifndef __IWMPContentPartnerCallback_INTERFACE_DEFINED__
  #define __IWMPContentPartnerCallback_INTERFACE_DEFINED__
  
  /* interface IWMPContentPartnerCallback */
  /* [unique][helpstring][uuid][object] */ 
  
  
  // Synopsis - Notify-> This function is called to notify the media player of plugin events
  //            /*input*/  WMPCallbackNotification type - Event that the plugin is notifying the player of
  //            /*input*/  VARIANT * pContext - The context depends on the notification being sent. See
  //                           remakrs for WMPCallbackNotification
  
  
  // Synopsis - BuyComplete -> This function is called to notify the media player of that a purchase has completed
  //            /*input*/  HRESULT hrResult - The success or error code of the purchase operation.
  //            /*input*/  DWORD dwBuyCookie - The cookie passed to IWMPContentPartner::Buy.
  
  // Remarks: This method should ONLY be called on SUCCESS AFTER all licenses have been delivered.
  
  // Synopsis - DownloadTrack -> This function is called in response to a IWMPContentPartner::Download
  //            /*input*/  DWORD dwCookie - The cookie passed to IWMPContentPartner::Download.
  //            /*input*/  BSTR bstrTrackURL - The URL to download.
  //            /*input*/  DWORD dwServiceTrackID - The content identifier of the content to download.
  //            /*input*/  BSTR bstrDownloadParams - A string containing data to be passed to
  //                                    IWMPContentPartnerCallback::DownloadTrackComplete.
  //            /*input*/  HRESULT hrDownload - The success or error code of download operation.
  
  // Remarks: This method should ONLY be called on SUCCESS AFTER all licenses have been delivered.
  // Remarks: The tracks will NOT be download if hrDownload is not a success code.
  
  // Synopsis - GetCatalogVersion -> This function is called to retrieve the current catalog version.
  //            /*output*/  DWORD *pdwVersion- The major version of the catalog being used.
  //            /*output*/  DWORD *pdwSchemaVersion - The schema of the catalog being used.
  //            /*output*/  LCID *plcid- The language of the catalog being used.
  
  
  // Synopsis - UpdateDeviceComplete -> This function is called to indicate that IWMPContentPartner::UpdateDevice has completed.
  //            /*input*/  BSTR bstrDeviceName - The device name passed to IWMPContentPartner::UpdateDevice.
  
  
  // Synopsis - ChangeView-> This function is called to navigate the media player UI
  //            /*input*/  BSTR bstrType - a content partner string ID such as g_szCPArtistID, or g_szOnlineStore
  //            /*input*/  BSTR bstrID -   The identifier to navigate to
  //            /*input*/  BSTR bstrFilter - A filter to place in the 'word wheel' after navigating
  
  // Remarks: When using g_szOnlineStore for bstrType, the bstrID ss a full URL to navigate the browser to
  // Remarks: Use 'Back' or 'Forward' in bstrType to simulate pressing the applications back and forward navigation buttons
  // Remarks: Use g_szRootLocation in bstrType to navigate to the service's root node in the libary UI
  
  
  // Synopsis - AddListContents-> This function is called to add content identifiers to a list as a rsult of the 
  //                               IWMPContentPartner::GetListContents API being called
  //            /*input*/  DWORD dwListCookie - Cookie sent during IWMPContentParnter::GetListContents
  //            /*input*/  DWORD cItems - The number of content identifiers being passed in the prgItems parameter
  //            /*input*/  DWORD *prgItems - An array of content identifiers
  
  
  // Synopsis - ListContentsComplete-> This function is called to indicate that the plugin has completed a IWMPContentPartner::GetListContents call
  //            /*input*/  DWORD dwListCookie - Cookie sent during IWMPContentParnter::GetListContents 
  //            /*input*/  HRESULT hrSuccess - The success or error code of the GetListContents operation
  
  
  // Synopsis - SendMessageComplete-> This function is called to indicate that the plugin has completed a IWMPContentPartner::SendMessage call
  //            /*input*/  BSTR bstrMsg - Message text sent in IWMPContentPartner::SendMessage
  //            /*input*/  BSTR bstrParam - Parameter text sent in IWMPContentPartner::SendMessage
  //            /*input*/  BSTR bstrResult - Result text
  
  
  // Synopsis - GetContentIDsInLibrary-> This function is called to retrieve the content identifiers that are in the users
  //                                     library that have been purchased or downloaded.
  //            /*output*/  ULONG pcContentIDs - The number of content identifiers returned.
  //            /*output*/  ULONG **pprgIDs    - An array of ULONGs containing the content identifiers. Free this array with CoTaskMemFree.
  
  
  // Synopsis - RefreshLicenseComplete -> This function is called to indicate that a license refresh call has completed
  //            /*input*/   DWORD dwCookie - This should be the same cookie passed to IWMPContentPartner::RefreshLicense.
  //            /*input*/   ULOING contentID - This should be the same content identifier passed to IWMPContentPartner::RefreshLicense.
  //            /*input*/   HRESULT hrRefresh - The success or error code of the refresh operation.
  
  
  // Synopsis - ShowPopup -> This function is called to have the player show a popup dialog. Usually this happens 
  //                          as a result of IWMPContentPartner::InvokeCommand being called.
  //            /*input*/   long lIndex - The URL index to request from the IWMPContentPartner::GetItemInfo( g_szItemInfo_PopupURL, ... ) API.
  //            /*input*/   BSTR bstrParameters - The parameters that are concatenated onto the URL returned by IWMPContentPartner::GetItemInfo( g_szItemInfo_PopupURL, ... ) API
  
  
  // Synopsis - VerifyPermission-> This function is called to indicate that permission verification is complete
  //            /*input*/ BSTR bstrPermission - Indicates action for which permission was requested.
  //            /*input*/   VARIANT * pContext - If sync, this is the canonical name of the device. This is the same thing that was passed in as pContext in VerifyPermission.
  //            /*input*/   HRESULT hrPermission - Result of permission verification.
  
  
  EXTERN_C const IID IID_IWMPContentPartnerCallback;
  
  #if defined(__cplusplus) && !defined(CINTERFACE)
      
      MIDL_INTERFACE("9E8F7DA2-0695-403c-B697-DA10FAFAA676")
      IWMPContentPartnerCallback : public IUnknown
      {
      public:
          virtual HRESULT STDMETHODCALLTYPE Notify( 
              /* [in] */ WMPCallbackNotification type,
              /* [in] */ __RPC__in VARIANT *pContext) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE BuyComplete( 
              /* [in] */ HRESULT hrResult,
              /* [in] */ DWORD dwBuyCookie) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE DownloadTrack( 
              /* [in] */ DWORD cookie,
              /* [in] */ __RPC__in BSTR bstrTrackURL,
              /* [in] */ DWORD dwServiceTrackID,
              /* [in] */ __RPC__in BSTR bstrDownloadParams,
              /* [in] */ HRESULT hrDownload) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE GetCatalogVersion( 
              /* [out] */ __RPC__out DWORD *pdwVersion,
              /* [out] */ __RPC__out DWORD *pdwSchemaVersion,
              /* [out] */ __RPC__out LCID *plcid) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE UpdateDeviceComplete( 
              /* [in] */ __RPC__in BSTR bstrDeviceName) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE ChangeView( 
              /* [in] */ __RPC__in BSTR bstrType,
              /* [in] */ __RPC__in BSTR bstrID,
              /* [in] */ __RPC__in BSTR bstrFilter) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE AddListContents( 
              /* [in] */ DWORD dwListCookie,
              /* [in] */ DWORD cItems,
              /* [size_is][in] */ __RPC__in_ecount_full(cItems) DWORD *prgItems) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE ListContentsComplete( 
              /* [in] */ DWORD dwListCookie,
              /* [in] */ HRESULT hrSuccess) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE SendMessageComplete( 
              /* [in] */ __RPC__in BSTR bstrMsg,
              /* [in] */ __RPC__in BSTR bstrParam,
              /* [in] */ __RPC__in BSTR bstrResult) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE GetContentIDsInLibrary( 
              /* [out] */ __RPC__out ULONG *pcContentIDs,
              /* [size_is][size_is][out] */ __RPC__deref_out_ecount_full_opt(*pcContentIDs) ULONG **pprgIDs) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE RefreshLicenseComplete( 
              /* [in] */ DWORD dwCookie,
              /* [in] */ ULONG contentID,
              /* [in] */ HRESULT hrRefresh) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE ShowPopup( 
              /* [in] */ long lIndex,
              /* [in] */ __RPC__in BSTR bstrParameters) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE VerifyPermissionComplete( 
              /* [in] */ __RPC__in BSTR bstrPermission,
              /* [in] */ __RPC__in VARIANT *pContext,
              /* [in] */ HRESULT hrPermission) = 0;
          
      };
      
      
  #else 	/* C style interface */
  
      typedef struct IWMPContentPartnerCallbackVtbl
      {
          BEGIN_INTERFACE
          
          HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
              __RPC__in IWMPContentPartnerCallback * This,
              /* [in] */ __RPC__in REFIID riid,
              /* [annotation][iid_is][out] */ 
              _COM_Outptr_  void **ppvObject);
          
          ULONG ( STDMETHODCALLTYPE *AddRef )( 
              __RPC__in IWMPContentPartnerCallback * This);
          
          ULONG ( STDMETHODCALLTYPE *Release )( 
              __RPC__in IWMPContentPartnerCallback * This);
          
          HRESULT ( STDMETHODCALLTYPE *Notify )( 
              __RPC__in IWMPContentPartnerCallback * This,
              /* [in] */ WMPCallbackNotification type,
              /* [in] */ __RPC__in VARIANT *pContext);
          
          HRESULT ( STDMETHODCALLTYPE *BuyComplete )( 
              __RPC__in IWMPContentPartnerCallback * This,
              /* [in] */ HRESULT hrResult,
              /* [in] */ DWORD dwBuyCookie);
          
          HRESULT ( STDMETHODCALLTYPE *DownloadTrack )( 
              __RPC__in IWMPContentPartnerCallback * This,
              /* [in] */ DWORD cookie,
              /* [in] */ __RPC__in BSTR bstrTrackURL,
              /* [in] */ DWORD dwServiceTrackID,
              /* [in] */ __RPC__in BSTR bstrDownloadParams,
              /* [in] */ HRESULT hrDownload);
          
          HRESULT ( STDMETHODCALLTYPE *GetCatalogVersion )( 
              __RPC__in IWMPContentPartnerCallback * This,
              /* [out] */ __RPC__out DWORD *pdwVersion,
              /* [out] */ __RPC__out DWORD *pdwSchemaVersion,
              /* [out] */ __RPC__out LCID *plcid);
          
          HRESULT ( STDMETHODCALLTYPE *UpdateDeviceComplete )( 
              __RPC__in IWMPContentPartnerCallback * This,
              /* [in] */ __RPC__in BSTR bstrDeviceName);
          
          HRESULT ( STDMETHODCALLTYPE *ChangeView )( 
              __RPC__in IWMPContentPartnerCallback * This,
              /* [in] */ __RPC__in BSTR bstrType,
              /* [in] */ __RPC__in BSTR bstrID,
              /* [in] */ __RPC__in BSTR bstrFilter);
          
          HRESULT ( STDMETHODCALLTYPE *AddListContents )( 
              __RPC__in IWMPContentPartnerCallback * This,
              /* [in] */ DWORD dwListCookie,
              /* [in] */ DWORD cItems,
              /* [size_is][in] */ __RPC__in_ecount_full(cItems) DWORD *prgItems);
          
          HRESULT ( STDMETHODCALLTYPE *ListContentsComplete )( 
              __RPC__in IWMPContentPartnerCallback * This,
              /* [in] */ DWORD dwListCookie,
              /* [in] */ HRESULT hrSuccess);
          
          HRESULT ( STDMETHODCALLTYPE *SendMessageComplete )( 
              __RPC__in IWMPContentPartnerCallback * This,
              /* [in] */ __RPC__in BSTR bstrMsg,
              /* [in] */ __RPC__in BSTR bstrParam,
              /* [in] */ __RPC__in BSTR bstrResult);
          
          HRESULT ( STDMETHODCALLTYPE *GetContentIDsInLibrary )( 
              __RPC__in IWMPContentPartnerCallback * This,
              /* [out] */ __RPC__out ULONG *pcContentIDs,
              /* [size_is][size_is][out] */ __RPC__deref_out_ecount_full_opt(*pcContentIDs) ULONG **pprgIDs);
          
          HRESULT ( STDMETHODCALLTYPE *RefreshLicenseComplete )( 
              __RPC__in IWMPContentPartnerCallback * This,
              /* [in] */ DWORD dwCookie,
              /* [in] */ ULONG contentID,
              /* [in] */ HRESULT hrRefresh);
          
          HRESULT ( STDMETHODCALLTYPE *ShowPopup )( 
              __RPC__in IWMPContentPartnerCallback * This,
              /* [in] */ long lIndex,
              /* [in] */ __RPC__in BSTR bstrParameters);
          
          HRESULT ( STDMETHODCALLTYPE *VerifyPermissionComplete )( 
              __RPC__in IWMPContentPartnerCallback * This,
              /* [in] */ __RPC__in BSTR bstrPermission,
              /* [in] */ __RPC__in VARIANT *pContext,
              /* [in] */ HRESULT hrPermission);
          
          END_INTERFACE
      } IWMPContentPartnerCallbackVtbl;
  
      interface IWMPContentPartnerCallback
      {
          CONST_VTBL struct IWMPContentPartnerCallbackVtbl *lpVtbl;
      };
  
      
  
  #ifdef COBJMACROS
  
  
  #define IWMPContentPartnerCallback_QueryInterface(This,riid,ppvObject)	\
      ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
  
  #define IWMPContentPartnerCallback_AddRef(This)	\
      ( (This)->lpVtbl -> AddRef(This) ) 
  
  #define IWMPContentPartnerCallback_Release(This)	\
      ( (This)->lpVtbl -> Release(This) ) 
  
  
  #define IWMPContentPartnerCallback_Notify(This,type,pContext)	\
      ( (This)->lpVtbl -> Notify(This,type,pContext) ) 
  
  #define IWMPContentPartnerCallback_BuyComplete(This,hrResult,dwBuyCookie)	\
      ( (This)->lpVtbl -> BuyComplete(This,hrResult,dwBuyCookie) ) 
  
  #define IWMPContentPartnerCallback_DownloadTrack(This,cookie,bstrTrackURL,dwServiceTrackID,bstrDownloadParams,hrDownload)	\
      ( (This)->lpVtbl -> DownloadTrack(This,cookie,bstrTrackURL,dwServiceTrackID,bstrDownloadParams,hrDownload) ) 
  
  #define IWMPContentPartnerCallback_GetCatalogVersion(This,pdwVersion,pdwSchemaVersion,plcid)	\
      ( (This)->lpVtbl -> GetCatalogVersion(This,pdwVersion,pdwSchemaVersion,plcid) ) 
  
  #define IWMPContentPartnerCallback_UpdateDeviceComplete(This,bstrDeviceName)	\
      ( (This)->lpVtbl -> UpdateDeviceComplete(This,bstrDeviceName) ) 
  
  #define IWMPContentPartnerCallback_ChangeView(This,bstrType,bstrID,bstrFilter)	\
      ( (This)->lpVtbl -> ChangeView(This,bstrType,bstrID,bstrFilter) ) 
  
  #define IWMPContentPartnerCallback_AddListContents(This,dwListCookie,cItems,prgItems)	\
      ( (This)->lpVtbl -> AddListContents(This,dwListCookie,cItems,prgItems) ) 
  
  #define IWMPContentPartnerCallback_ListContentsComplete(This,dwListCookie,hrSuccess)	\
      ( (This)->lpVtbl -> ListContentsComplete(This,dwListCookie,hrSuccess) ) 
  
  #define IWMPContentPartnerCallback_SendMessageComplete(This,bstrMsg,bstrParam,bstrResult)	\
      ( (This)->lpVtbl -> SendMessageComplete(This,bstrMsg,bstrParam,bstrResult) ) 
  
  #define IWMPContentPartnerCallback_GetContentIDsInLibrary(This,pcContentIDs,pprgIDs)	\
      ( (This)->lpVtbl -> GetContentIDsInLibrary(This,pcContentIDs,pprgIDs) ) 
  
  #define IWMPContentPartnerCallback_RefreshLicenseComplete(This,dwCookie,contentID,hrRefresh)	\
      ( (This)->lpVtbl -> RefreshLicenseComplete(This,dwCookie,contentID,hrRefresh) ) 
  
  #define IWMPContentPartnerCallback_ShowPopup(This,lIndex,bstrParameters)	\
      ( (This)->lpVtbl -> ShowPopup(This,lIndex,bstrParameters) ) 
  
  #define IWMPContentPartnerCallback_VerifyPermissionComplete(This,bstrPermission,pContext,hrPermission)	\
      ( (This)->lpVtbl -> VerifyPermissionComplete(This,bstrPermission,pContext,hrPermission) ) 
  
  #endif /* COBJMACROS */
  
  
  #endif 	/* C style interface */
  
  
  
  
  #endif 	/* __IWMPContentPartnerCallback_INTERFACE_DEFINED__ */
  
  
  #ifndef __IWMPContentPartner_INTERFACE_DEFINED__
  #define __IWMPContentPartner_INTERFACE_DEFINED__
  
  /* interface IWMPContentPartner */
  /* [unique][helpstring][uuid][object] */ 
  
  
  // Synopsis - SetCallback-> This function allows gives the pugin the ability to store a callback pointer
  //                          that will be necessary to communicate with the player
  //             /*input*/ pCallback -> interface pointer to the media player's implementation of the IWMPContentPartnerCallback
  //
  // Remarks: The player will call this with a null value during its shutdown process. The plugin can use
  
  
  // Synopsis - Notify-> This function is called by the player to notify the plugin of certain events
  //            /*input*/ WMPPartnerNotification type - see comments for WMPPartnerNotification enum
  //            /*input*/ VARIANT *pContext - see comments for WMPPartnerNotification enum
  
  
  // Synopsis - GetItemInfo-> This function is called to retrieve different properties about content
  //            /*input*/ VARIANT *pContext - see comments above for the strings passed into this API
  //            /*out*/   VARIANT *pData - see comments abouve for the strings passed into this API
  
  
  // Synopsis - GetContentPartnerInfo-> This function is called to retrieve different properties about the content partner
  //            /*input*/ BSTR bstrInfoName - see comments above for the strings passed into this API 
  //            /*out*/   VARIANT *pData - see comments above for the strings passed into this API
  
  
  // Synopsis - GetCommands-> This function allows the plugin to return commands to be displayed in context menus
  //             /*input*/  BSTR location -> location in the library (such as g_szCPArtistID)
  //             /*input*/  VARIANT *pLocationContext -> location in the library (such as VT_UI4, 1231231)
  //             /*input*/  BSTR itemLocation -> item type selected in library (such as g_szCPTrackID)
  //             /*input*/  ULONG cItemIDs -> the number of selected items of type itemLocation
  //             /*input*/  ULONG prgItemIDs -> the array of content identifiers
  //             /*output*/ ULONG *pcItemIDs -> the number of context menu commands returned in pprgItems
  //             /*output*/ WMPContextMenuInfo **pprgItems -> Array of WMPContenxtMenuInfo items allocated by CoTaskMemAlloc
  
  //             Remarks: See comments for WMPContextMenuInfo for more information
  
  
  // Synopsis - InvokeCommand-> This function is called when the user selects an option fro a context menu command
  //                            returned by IWMPContentPartner::GetCommands
  //             /*input*/  DWORD dwCommandID -> Command ID from the select WMPContextMenuInfo
  //             /*input*/  The remaining parameters are the same as those passed to IWMPContentPartner::GetCommands
  
  //             Remarks: See comments for WMPContextMenuInfo and IWMPContentPartner::GetCommands for more information
  
  
  // Synopsis - GetCatalogURL -> This function is called by the player to retrieve the streaming URL
  //             /*input*/  WMPStreamingType -> indicates whether the streaming type is for radio\music\video
  //             /*input*/  VARIANT *pStreamContext -> VT_UI4, contains the content identifier
  //             /*ouptut*/ BSTR *pbstrURL-> recieves the streaming URL of the content
  
  //             Remarks: The streaming URL for Radio and Video must be contained in an ASX
  
  
  // Synopsis - GetCatalogURL -> This function is called by the player to retrieve the catalog download URL
  //             /*input*/  DWORD dwCatalogVersion -> current catalog version, or zero if none exists
  //             /*input*/  DWORD dwCatalogSchemaVesrion -> current catalog schema
  //             /*input*/  LCID catalogLCID -> current catalog version
  //             /*output*/ DWORD *pdwNewCatalogVersion -> version of catalog that URL represents
  //             /*ouptut*/ BSTR *pbstrCatalogURL-> recieves URL that the player will use to download catalog
  //             /*output*/ VARIANT *pExpirationData-> Must be of type VT_DATE. This is the date at which the player will
  //                           will call IWMPContentPartner::GetCatalogURL to retrieve a new catalog.
  
  
  // Synopsis - UpdateDevice -> This function is called during sync to allow the plugin to do device updates.
  //             /*input*/ BSTR bstrDeviceName-> name of device to update
  //
  // Remarks: This call should function asynchronously. Call IWMPContentPartnerCallback::UpdateDeviceComplete when finsihed.
  
  
  // Synopsis - Login-> This function indicates to the plugin to begin logging in to the service
  //             /*input*/ BLOB userInfo, an encrypted blob containing the user's login name
  //             /*input*/ BLOB pwdInfo,  an encrypted blob containing the user's login password
  //             /*input*/ VARIANT_BOOL fUsedCachedCreds, indicates to the plugin to attempt to use cached credentials
  //                                                       for login if present.
  //             /*input*/ VARIANT_BOOL fOkToCache, indicates that it is acceptable for the plugin to cache
  //                                                 the users credential.
  //
  // Remarks: The plugin is responsible for calling IWMPContentPartner::Notify to indicate login state change
  //
  // Remarks: To unencrypt the user and password name, use 
  //   CryptUnprotectData( blob, NULL, NULL, NULL, NULL, CRYPTPROTECT_UI_FORBIDDEN, &outBlob)
  
  
  // Synopsis - Authenticate-> This function indicates to the plugin to Authenticate the credentials with the service
  //             /*input*/ BLOB userInfo, an encrypted blob containing the user's login name
  //             /*input*/ BLOB pwdInfo,  an encrypted blob containing the user's login password
  //
  // Remarks: To unencrypt the user and password name, use 
  //   CryptUnprotectData( blob, NULL, NULL, NULL, NULL, CRYPTPROTECT_UI_FORBIDDEN, &outBlob)
  
  
  // Synopsis - Logout-> This function indicates to the plugin to begin logging out from the service
  // 
  // Remarks: The plugin is responsible for calling IWMPContentPartner::Notify to indicate login state change
  //
  // Remarks: The plugin should delete any cached credentials when this API is called
  
  
  // Synopsis - SendMessage -> This function allows HTML templates returned from IWMPContentPartner::GetTemplate
  //                          to communicate to the plugin
  //             /*input*/ bstrMsg -> value send directly from the template returned by IWMPContentPartner::GetTemplate
  //                               -> via the window.external.sendMessage API
  //             /*input*/ bstrParam -> parameter for the message, also sent from the window.external.sendMessage API
  //
  //Remarks: The plugin is reponsible for calling IWMPContentPartnerCallback::OnSendMessageComplete in order for
  //         the HTML template to know that processing of the message occurs. This will be sent to the template
  //         via the window.external.OnSendMessageComplete notificaiton
  
  
  // Synopsis - CompareContainerListPrices-> This function is called to preform a comparison operation on tow IWMPContentContainerLists
  //            /*input*/   IWMPContentContainerList *pListBase - 
  //            /*input*/   IWMPContentContainerList *pListCompare - 
  //            /*output*/  long *pResult* - Return less than 0 when pListBase is less than pListCompare, 0 for equal, and greather than 0 when pListBase is more than pListCompare
  
  
  // Synopsis - VerifyPermission-> This function is called to get permission to perform an action
  //            /*input*/ BSTR bstrPermission - Indicates action for which permission is requested
  //            /*input*/   VARIANT * pContext - If sync, this is the canonical name of the device. This needs to be returned in VerifyPermissionComplete.
  
  
  EXTERN_C const IID IID_IWMPContentPartner;
  
  #if defined(__cplusplus) && !defined(CINTERFACE)
      
      MIDL_INTERFACE("55455073-41B5-4e75-87B8-F13BDB291D08")
      IWMPContentPartner : public IUnknown
      {
      public:
          virtual HRESULT STDMETHODCALLTYPE SetCallback( 
              /* [in] */ __RPC__in_opt IWMPContentPartnerCallback *pCallback) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE Notify( 
              /* [in] */ WMPPartnerNotification type,
              /* [in] */ __RPC__in VARIANT *pContext) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE GetItemInfo( 
              /* [in] */ __RPC__in BSTR bstrInfoName,
              /* [in] */ __RPC__in VARIANT *pContext,
              /* [out] */ __RPC__out VARIANT *pData) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE GetContentPartnerInfo( 
              /* [in] */ __RPC__in BSTR bstrInfoName,
              /* [out] */ __RPC__out VARIANT *pData) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE GetCommands( 
              /* [in] */ __RPC__in BSTR location,
              /* [in] */ __RPC__in VARIANT *pLocationContext,
              /* [in] */ __RPC__in BSTR itemLocation,
              /* [in] */ ULONG cItemIDs,
              /* [size_is][in] */ __RPC__in_ecount_full(cItemIDs) ULONG *prgItemIDs,
              /* [out] */ __RPC__out ULONG *pcItemIDs,
              /* [size_is][size_is][out] */ __RPC__deref_out_ecount_full_opt(*pcItemIDs) WMPContextMenuInfo **pprgItems) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE InvokeCommand( 
              /* [in] */ DWORD dwCommandID,
              /* [in] */ __RPC__in BSTR location,
              /* [in] */ __RPC__in VARIANT *pLocationContext,
              /* [in] */ __RPC__in BSTR itemLocation,
              /* [in] */ ULONG cItemIDs,
              /* [size_is][in] */ __RPC__in_ecount_full(cItemIDs) ULONG *rgItemIDs) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE CanBuySilent( 
              /* [in] */ __RPC__in_opt IWMPContentContainerList *pInfo,
              /* [out] */ __RPC__deref_out_opt BSTR *pbstrTotalPrice,
              /* [out] */ __RPC__out VARIANT_BOOL *pSilentOK) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE Buy( 
              /* [in] */ __RPC__in_opt IWMPContentContainerList *pInfo,
              /* [in] */ DWORD cookie) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE GetStreamingURL( 
              /* [in] */ WMPStreamingType st,
              /* [in] */ __RPC__in VARIANT *pStreamContext,
              /* [out] */ __RPC__deref_out_opt BSTR *pbstrURL) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE Download( 
              /* [in] */ __RPC__in_opt IWMPContentContainerList *pInfo,
              /* [in] */ DWORD cookie) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE DownloadTrackComplete( 
              /* [in] */ HRESULT hrResult,
              /* [in] */ ULONG contentID,
              /* [in] */ __RPC__in BSTR downloadTrackParam) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE RefreshLicense( 
              /* [in] */ DWORD dwCookie,
              /* [in] */ VARIANT_BOOL fLocal,
              /* [unique][in] */ __RPC__in_opt BSTR bstrURL,
              /* [in] */ WMPStreamingType type,
              /* [in] */ ULONG contentID,
              /* [in] */ __RPC__in BSTR bstrRefreshReason,
              /* [in] */ __RPC__in VARIANT *pReasonContext) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE GetCatalogURL( 
              /* [in] */ DWORD dwCatalogVersion,
              /* [in] */ DWORD dwCatalogSchemaVersion,
              /* [in] */ LCID catalogLCID,
              /* [out] */ __RPC__out DWORD *pdwNewCatalogVersion,
              /* [out] */ __RPC__deref_out_opt BSTR *pbstrCatalogURL,
              /* [out] */ __RPC__out VARIANT *pExpirationDate) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE GetTemplate( 
              /* [in] */ WMPTaskType task,
              /* [in] */ __RPC__in BSTR location,
              /* [in] */ __RPC__in VARIANT *pContext,
              /* [in] */ __RPC__in BSTR clickLocation,
              /* [in] */ __RPC__in VARIANT *pClickContext,
              /* [in] */ __RPC__in BSTR bstrFilter,
              /* [in] */ __RPC__in BSTR bstrViewParams,
              /* [out] */ __RPC__deref_out_opt BSTR *pbstrTemplateURL,
              /* [out] */ __RPC__out WMPTemplateSize *pTemplateSize) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE UpdateDevice( 
              /* [in] */ __RPC__in BSTR bstrDeviceName) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE GetListContents( 
              /* [in] */ __RPC__in BSTR location,
              /* [in] */ __RPC__in VARIANT *pContext,
              /* [in] */ __RPC__in BSTR bstrListType,
              /* [in] */ __RPC__in BSTR bstrParams,
              /* [in] */ DWORD dwListCookie) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE Login( 
              /* [in] */ BLOB userInfo,
              /* [in] */ BLOB pwdInfo,
              /* [in] */ VARIANT_BOOL fUsedCachedCreds,
              /* [in] */ VARIANT_BOOL fOkToCache) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE Authenticate( 
              /* [in] */ BLOB userInfo,
              /* [in] */ BLOB pwdInfo) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE Logout( void) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE SendMessage( 
              /* [in] */ __RPC__in BSTR bstrMsg,
              /* [in] */ __RPC__in BSTR bstrParam) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE StationEvent( 
              /* [in] */ __RPC__in BSTR bstrStationEventType,
              /* [in] */ ULONG StationId,
              /* [in] */ ULONG PlaylistIndex,
              /* [in] */ ULONG TrackID,
              /* [in] */ __RPC__in BSTR TrackData,
              /* [in] */ DWORD dwSecondsPlayed) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE CompareContainerListPrices( 
              /* [in] */ __RPC__in_opt IWMPContentContainerList *pListBase,
              /* [in] */ __RPC__in_opt IWMPContentContainerList *pListCompare,
              /* [out] */ __RPC__out long *pResult) = 0;
          
          virtual HRESULT STDMETHODCALLTYPE VerifyPermission( 
              /* [in] */ __RPC__in BSTR bstrPermission,
              /* [in] */ __RPC__in VARIANT *pContext) = 0;
          
      };
      
      
  #else 	/* C style interface */
  
      typedef struct IWMPContentPartnerVtbl
      {
          BEGIN_INTERFACE
          
          HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 
              __RPC__in IWMPContentPartner * This,
              /* [in] */ __RPC__in REFIID riid,
              /* [annotation][iid_is][out] */ 
              _COM_Outptr_  void **ppvObject);
          
          ULONG ( STDMETHODCALLTYPE *AddRef )( 
              __RPC__in IWMPContentPartner * This);
          
          ULONG ( STDMETHODCALLTYPE *Release )( 
              __RPC__in IWMPContentPartner * This);
          
          HRESULT ( STDMETHODCALLTYPE *SetCallback )( 
              __RPC__in IWMPContentPartner * This,
              /* [in] */ __RPC__in_opt IWMPContentPartnerCallback *pCallback);
          
          HRESULT ( STDMETHODCALLTYPE *Notify )( 
              __RPC__in IWMPContentPartner * This,
              /* [in] */ WMPPartnerNotification type,
              /* [in] */ __RPC__in VARIANT *pContext);
          
          HRESULT ( STDMETHODCALLTYPE *GetItemInfo )( 
              __RPC__in IWMPContentPartner * This,
              /* [in] */ __RPC__in BSTR bstrInfoName,
              /* [in] */ __RPC__in VARIANT *pContext,
              /* [out] */ __RPC__out VARIANT *pData);
          
          HRESULT ( STDMETHODCALLTYPE *GetContentPartnerInfo )( 
              __RPC__in IWMPContentPartner * This,
              /* [in] */ __RPC__in BSTR bstrInfoName,
              /* [out] */ __RPC__out VARIANT *pData);
          
          HRESULT ( STDMETHODCALLTYPE *GetCommands )( 
              __RPC__in IWMPContentPartner * This,
              /* [in] */ __RPC__in BSTR location,
              /* [in] */ __RPC__in VARIANT *pLocationContext,
              /* [in] */ __RPC__in BSTR itemLocation,
              /* [in] */ ULONG cItemIDs,
              /* [size_is][in] */ __RPC__in_ecount_full(cItemIDs) ULONG *prgItemIDs,
              /* [out] */ __RPC__out ULONG *pcItemIDs,
              /* [size_is][size_is][out] */ __RPC__deref_out_ecount_full_opt(*pcItemIDs) WMPContextMenuInfo **pprgItems);
          
          HRESULT ( STDMETHODCALLTYPE *InvokeCommand )( 
              __RPC__in IWMPContentPartner * This,
              /* [in] */ DWORD dwCommandID,
              /* [in] */ __RPC__in BSTR location,
              /* [in] */ __RPC__in VARIANT *pLocationContext,
              /* [in] */ __RPC__in BSTR itemLocation,
              /* [in] */ ULONG cItemIDs,
              /* [size_is][in] */ __RPC__in_ecount_full(cItemIDs) ULONG *rgItemIDs);
          
          HRESULT ( STDMETHODCALLTYPE *CanBuySilent )( 
              __RPC__in IWMPContentPartner * This,
              /* [in] */ __RPC__in_opt IWMPContentContainerList *pInfo,
              /* [out] */ __RPC__deref_out_opt BSTR *pbstrTotalPrice,
              /* [out] */ __RPC__out VARIANT_BOOL *pSilentOK);
          
          HRESULT ( STDMETHODCALLTYPE *Buy )( 
              __RPC__in IWMPContentPartner * This,
              /* [in] */ __RPC__in_opt IWMPContentContainerList *pInfo,
              /* [in] */ DWORD cookie);
          
          HRESULT ( STDMETHODCALLTYPE *GetStreamingURL )( 
              __RPC__in IWMPContentPartner * This,
              /* [in] */ WMPStreamingType st,
              /* [in] */ __RPC__in VARIANT *pStreamContext,
              /* [out] */ __RPC__deref_out_opt BSTR *pbstrURL);
          
          HRESULT ( STDMETHODCALLTYPE *Download )( 
              __RPC__in IWMPContentPartner * This,
              /* [in] */ __RPC__in_opt IWMPContentContainerList *pInfo,
              /* [in] */ DWORD cookie);
          
          HRESULT ( STDMETHODCALLTYPE *DownloadTrackComplete )( 
              __RPC__in IWMPContentPartner * This,
              /* [in] */ HRESULT hrResult,
              /* [in] */ ULONG contentID,
              /* [in] */ __RPC__in BSTR downloadTrackParam);
          
          HRESULT ( STDMETHODCALLTYPE *RefreshLicense )( 
              __RPC__in IWMPContentPartner * This,
              /* [in] */ DWORD dwCookie,
              /* [in] */ VARIANT_BOOL fLocal,
              /* [unique][in] */ __RPC__in_opt BSTR bstrURL,
              /* [in] */ WMPStreamingType type,
              /* [in] */ ULONG contentID,
              /* [in] */ __RPC__in BSTR bstrRefreshReason,
              /* [in] */ __RPC__in VARIANT *pReasonContext);
          
          HRESULT ( STDMETHODCALLTYPE *GetCatalogURL )( 
              __RPC__in IWMPContentPartner * This,
              /* [in] */ DWORD dwCatalogVersion,
              /* [in] */ DWORD dwCatalogSchemaVersion,
              /* [in] */ LCID catalogLCID,
              /* [out] */ __RPC__out DWORD *pdwNewCatalogVersion,
              /* [out] */ __RPC__deref_out_opt BSTR *pbstrCatalogURL,
              /* [out] */ __RPC__out VARIANT *pExpirationDate);
          
          HRESULT ( STDMETHODCALLTYPE *GetTemplate )( 
              __RPC__in IWMPContentPartner * This,
              /* [in] */ WMPTaskType task,
              /* [in] */ __RPC__in BSTR location,
              /* [in] */ __RPC__in VARIANT *pContext,
              /* [in] */ __RPC__in BSTR clickLocation,
              /* [in] */ __RPC__in VARIANT *pClickContext,
              /* [in] */ __RPC__in BSTR bstrFilter,
              /* [in] */ __RPC__in BSTR bstrViewParams,
              /* [out] */ __RPC__deref_out_opt BSTR *pbstrTemplateURL,
              /* [out] */ __RPC__out WMPTemplateSize *pTemplateSize);
          
          HRESULT ( STDMETHODCALLTYPE *UpdateDevice )( 
              __RPC__in IWMPContentPartner * This,
              /* [in] */ __RPC__in BSTR bstrDeviceName);
          
          HRESULT ( STDMETHODCALLTYPE *GetListContents )( 
              __RPC__in IWMPContentPartner * This,
              /* [in] */ __RPC__in BSTR location,
              /* [in] */ __RPC__in VARIANT *pContext,
              /* [in] */ __RPC__in BSTR bstrListType,
              /* [in] */ __RPC__in BSTR bstrParams,
              /* [in] */ DWORD dwListCookie);
          
          HRESULT ( STDMETHODCALLTYPE *Login )( 
              __RPC__in IWMPContentPartner * This,
              /* [in] */ BLOB userInfo,
              /* [in] */ BLOB pwdInfo,
              /* [in] */ VARIANT_BOOL fUsedCachedCreds,
              /* [in] */ VARIANT_BOOL fOkToCache);
          
          HRESULT ( STDMETHODCALLTYPE *Authenticate )( 
              __RPC__in IWMPContentPartner * This,
              /* [in] */ BLOB userInfo,
              /* [in] */ BLOB pwdInfo);
          
          HRESULT ( STDMETHODCALLTYPE *Logout )( 
              __RPC__in IWMPContentPartner * This);
          
          HRESULT ( STDMETHODCALLTYPE *SendMessage )( 
              __RPC__in IWMPContentPartner * This,
              /* [in] */ __RPC__in BSTR bstrMsg,
              /* [in] */ __RPC__in BSTR bstrParam);
          
          HRESULT ( STDMETHODCALLTYPE *StationEvent )( 
              __RPC__in IWMPContentPartner * This,
              /* [in] */ __RPC__in BSTR bstrStationEventType,
              /* [in] */ ULONG StationId,
              /* [in] */ ULONG PlaylistIndex,
              /* [in] */ ULONG TrackID,
              /* [in] */ __RPC__in BSTR TrackData,
              /* [in] */ DWORD dwSecondsPlayed);
          
          HRESULT ( STDMETHODCALLTYPE *CompareContainerListPrices )( 
              __RPC__in IWMPContentPartner * This,
              /* [in] */ __RPC__in_opt IWMPContentContainerList *pListBase,
              /* [in] */ __RPC__in_opt IWMPContentContainerList *pListCompare,
              /* [out] */ __RPC__out long *pResult);
          
          HRESULT ( STDMETHODCALLTYPE *VerifyPermission )( 
              __RPC__in IWMPContentPartner * This,
              /* [in] */ __RPC__in BSTR bstrPermission,
              /* [in] */ __RPC__in VARIANT *pContext);
          
          END_INTERFACE
      } IWMPContentPartnerVtbl;
  
      interface IWMPContentPartner
      {
          CONST_VTBL struct IWMPContentPartnerVtbl *lpVtbl;
      };
  
      
  
  #ifdef COBJMACROS
  
  
  #define IWMPContentPartner_QueryInterface(This,riid,ppvObject)	\
      ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 
  
  #define IWMPContentPartner_AddRef(This)	\
      ( (This)->lpVtbl -> AddRef(This) ) 
  
  #define IWMPContentPartner_Release(This)	\
      ( (This)->lpVtbl -> Release(This) ) 
  
  
  #define IWMPContentPartner_SetCallback(This,pCallback)	\
      ( (This)->lpVtbl -> SetCallback(This,pCallback) ) 
  
  #define IWMPContentPartner_Notify(This,type,pContext)	\
      ( (This)->lpVtbl -> Notify(This,type,pContext) ) 
  
  #define IWMPContentPartner_GetItemInfo(This,bstrInfoName,pContext,pData)	\
      ( (This)->lpVtbl -> GetItemInfo(This,bstrInfoName,pContext,pData) ) 
  
  #define IWMPContentPartner_GetContentPartnerInfo(This,bstrInfoName,pData)	\
      ( (This)->lpVtbl -> GetContentPartnerInfo(This,bstrInfoName,pData) ) 
  
  #define IWMPContentPartner_GetCommands(This,location,pLocationContext,itemLocation,cItemIDs,prgItemIDs,pcItemIDs,pprgItems)	\
      ( (This)->lpVtbl -> GetCommands(This,location,pLocationContext,itemLocation,cItemIDs,prgItemIDs,pcItemIDs,pprgItems) ) 
  
  #define IWMPContentPartner_InvokeCommand(This,dwCommandID,location,pLocationContext,itemLocation,cItemIDs,rgItemIDs)	\
      ( (This)->lpVtbl -> InvokeCommand(This,dwCommandID,location,pLocationContext,itemLocation,cItemIDs,rgItemIDs) ) 
  
  #define IWMPContentPartner_CanBuySilent(This,pInfo,pbstrTotalPrice,pSilentOK)	\
      ( (This)->lpVtbl -> CanBuySilent(This,pInfo,pbstrTotalPrice,pSilentOK) ) 
  
  #define IWMPContentPartner_Buy(This,pInfo,cookie)	\
      ( (This)->lpVtbl -> Buy(This,pInfo,cookie) ) 
  
  #define IWMPContentPartner_GetStreamingURL(This,st,pStreamContext,pbstrURL)	\
      ( (This)->lpVtbl -> GetStreamingURL(This,st,pStreamContext,pbstrURL) ) 
  
  #define IWMPContentPartner_Download(This,pInfo,cookie)	\
      ( (This)->lpVtbl -> Download(This,pInfo,cookie) ) 
  
  #define IWMPContentPartner_DownloadTrackComplete(This,hrResult,contentID,downloadTrackParam)	\
      ( (This)->lpVtbl -> DownloadTrackComplete(This,hrResult,contentID,downloadTrackParam) ) 
  
  #define IWMPContentPartner_RefreshLicense(This,dwCookie,fLocal,bstrURL,type,contentID,bstrRefreshReason,pReasonContext)	\
      ( (This)->lpVtbl -> RefreshLicense(This,dwCookie,fLocal,bstrURL,type,contentID,bstrRefreshReason,pReasonContext) ) 
  
  #define IWMPContentPartner_GetCatalogURL(This,dwCatalogVersion,dwCatalogSchemaVersion,catalogLCID,pdwNewCatalogVersion,pbstrCatalogURL,pExpirationDate)	\
      ( (This)->lpVtbl -> GetCatalogURL(This,dwCatalogVersion,dwCatalogSchemaVersion,catalogLCID,pdwNewCatalogVersion,pbstrCatalogURL,pExpirationDate) ) 
  
  #define IWMPContentPartner_GetTemplate(This,task,location,pContext,clickLocation,pClickContext,bstrFilter,bstrViewParams,pbstrTemplateURL,pTemplateSize)	\
      ( (This)->lpVtbl -> GetTemplate(This,task,location,pContext,clickLocation,pClickContext,bstrFilter,bstrViewParams,pbstrTemplateURL,pTemplateSize) ) 
  
  #define IWMPContentPartner_UpdateDevice(This,bstrDeviceName)	\
      ( (This)->lpVtbl -> UpdateDevice(This,bstrDeviceName) ) 
  
  #define IWMPContentPartner_GetListContents(This,location,pContext,bstrListType,bstrParams,dwListCookie)	\
      ( (This)->lpVtbl -> GetListContents(This,location,pContext,bstrListType,bstrParams,dwListCookie) ) 
  
  #define IWMPContentPartner_Login(This,userInfo,pwdInfo,fUsedCachedCreds,fOkToCache)	\
      ( (This)->lpVtbl -> Login(This,userInfo,pwdInfo,fUsedCachedCreds,fOkToCache) ) 
  
  #define IWMPContentPartner_Authenticate(This,userInfo,pwdInfo)	\
      ( (This)->lpVtbl -> Authenticate(This,userInfo,pwdInfo) ) 
  
  #define IWMPContentPartner_Logout(This)	\
      ( (This)->lpVtbl -> Logout(This) ) 
  
  #define IWMPContentPartner_SendMessage(This,bstrMsg,bstrParam)	\
      ( (This)->lpVtbl -> SendMessage(This,bstrMsg,bstrParam) ) 
  
  #define IWMPContentPartner_StationEvent(This,bstrStationEventType,StationId,PlaylistIndex,TrackID,TrackData,dwSecondsPlayed)	\
      ( (This)->lpVtbl -> StationEvent(This,bstrStationEventType,StationId,PlaylistIndex,TrackID,TrackData,dwSecondsPlayed) ) 
  
  #define IWMPContentPartner_CompareContainerListPrices(This,pListBase,pListCompare,pResult)	\
      ( (This)->lpVtbl -> CompareContainerListPrices(This,pListBase,pListCompare,pResult) ) 
  
  #define IWMPContentPartner_VerifyPermission(This,bstrPermission,pContext)	\
      ( (This)->lpVtbl -> VerifyPermission(This,bstrPermission,pContext) ) 
  
  #endif /* COBJMACROS */
  
  
  #endif 	/* C style interface */
  
  
  
  
  #endif 	/* __IWMPContentPartner_INTERFACE_DEFINED__ */
  
  
  /* interface __MIDL_itf_contentpartner_0000_0004 */
  /* [local] */ 
  
  #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
  #pragma endregion
  
  
  extern RPC_IF_HANDLE __MIDL_itf_contentpartner_0000_0004_v0_0_c_ifspec;
  extern RPC_IF_HANDLE __MIDL_itf_contentpartner_0000_0004_v0_0_s_ifspec;
  
  /* Additional Prototypes for ALL interfaces */
  
  unsigned long             __RPC_USER  BSTR_UserSize(     __RPC__in unsigned long *, unsigned long            , __RPC__in BSTR * ); 
  unsigned char * __RPC_USER  BSTR_UserMarshal(  __RPC__in unsigned long *, __RPC__inout_xcount(0) unsigned char *, __RPC__in BSTR * ); 
  unsigned char * __RPC_USER  BSTR_UserUnmarshal(__RPC__in unsigned long *, __RPC__in_xcount(0) unsigned char *, __RPC__out BSTR * ); 
  void                      __RPC_USER  BSTR_UserFree(     __RPC__in unsigned long *, __RPC__in BSTR * ); 
  
  unsigned long             __RPC_USER  VARIANT_UserSize(     __RPC__in unsigned long *, unsigned long            , __RPC__in VARIANT * ); 
  unsigned char * __RPC_USER  VARIANT_UserMarshal(  __RPC__in unsigned long *, __RPC__inout_xcount(0) unsigned char *, __RPC__in VARIANT * ); 
  unsigned char * __RPC_USER  VARIANT_UserUnmarshal(__RPC__in unsigned long *, __RPC__in_xcount(0) unsigned char *, __RPC__out VARIANT * ); 
  void                      __RPC_USER  VARIANT_UserFree(     __RPC__in unsigned long *, __RPC__in VARIANT * ); 
  
  unsigned long             __RPC_USER  BSTR_UserSize64(     __RPC__in unsigned long *, unsigned long            , __RPC__in BSTR * ); 
  unsigned char * __RPC_USER  BSTR_UserMarshal64(  __RPC__in unsigned long *, __RPC__inout_xcount(0) unsigned char *, __RPC__in BSTR * ); 
  unsigned char * __RPC_USER  BSTR_UserUnmarshal64(__RPC__in unsigned long *, __RPC__in_xcount(0) unsigned char *, __RPC__out BSTR * ); 
  void                      __RPC_USER  BSTR_UserFree64(     __RPC__in unsigned long *, __RPC__in BSTR * ); 
  
  unsigned long             __RPC_USER  VARIANT_UserSize64(     __RPC__in unsigned long *, unsigned long            , __RPC__in VARIANT * ); 
  unsigned char * __RPC_USER  VARIANT_UserMarshal64(  __RPC__in unsigned long *, __RPC__inout_xcount(0) unsigned char *, __RPC__in VARIANT * ); 
  unsigned char * __RPC_USER  VARIANT_UserUnmarshal64(__RPC__in unsigned long *, __RPC__in_xcount(0) unsigned char *, __RPC__out VARIANT * ); 
  void                      __RPC_USER  VARIANT_UserFree64(     __RPC__in unsigned long *, __RPC__in VARIANT * ); 
  
  /* end of Additional Prototypes */
  
  #ifdef __cplusplus
  }
  #endif
  
  #endif
  
  
  