xpmgr/BuildTools/Include/wmdrmsdk.idl

1200 lines
46 KiB
Plaintext

//*@@@+++@@@@******************************************************************
//
// Microsoft Windows Media Digital Rights Management
// Copyright (C) Microsoft Corporation. All rights reserved.
//
//*@@@---@@@@******************************************************************
import "oaidl.idl";
import "ocidl.idl";
import "mfobjects.idl";
import "mfidl.idl";
///////////////////////////////////////////////////////////////////////////////
//
// The following is the list of DRM actions available for applications
// Used by IWMDRMLicenseManagement::AcquireLicense, MonitorLicenseAcquisition,
// and CreateLicenseEnumeration among other things
//
///////////////////////////////////////////////////////////////////////////////
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_ACTIONLIST_TAG = L\"ACTIONLIST\";" )
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_ACTION_TAG = L\"ACTION\";" )
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_RIGHT_PLAYBACK = L\"Play\";" )
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_RIGHT_COPY = L\"Copy\";" )
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_RIGHT_PLAYLIST_BURN = L\"PlaylistBurn\";" )
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_RIGHT_CREATE_THUMBNAIL_IMAGE = L\"CreateThumbnailImage\";" )
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_RIGHT_COPY_TO_CD = L\"Print.redbook\";" )
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_RIGHT_COPY_TO_SDMI_DEVICE = L\"Transfer.SDMI\";" )
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_RIGHT_COPY_TO_NON_SDMI_DEVICE = L\"Transfer.NONSDMI\";" )
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_RIGHT_BACKUP = L\"Backup\";" )
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_RIGHT_COLLABORATIVE_PLAY = L\"CollaborativePlay\";" )
///////////////////////////////////////////////////////////////////////////////
//
// Actions for IWMDRMLicenseQuery::QueryActionAllowed
//
///////////////////////////////////////////////////////////////////////////////
// Prefix string
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_ActionAllowed = L\"ActionAllowed.\";" )
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_ActionAllowed_Playback = L\"ActionAllowed.Play\";" )
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_ActionAllowed_Copy = L\"ActionAllowed.Copy\";" )
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_ActionAllowed_PlaylistBurn = L\"ActionAllowed.PlaylistBurn\";" )
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_ActionAllowed_CreateThumbnailImage = L\"ActionAllowed.CreateThumbnailImage\";" )
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_ActionAllowed_CopyToCD = L\"ActionAllowed.Print.redbook\";" )
// Note: The following 4 constants are NOT supported by IWMDRMLicenseQuery::QueryActionAllowed
// They are defined in this file in order to maintain backward compatibility with the FSDK.
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_ActionAllowed_CopyToSDMIDevice = L\"ActionAllowed.Transfer.SDMI\";" )
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_ActionAllowed_CopyToNonSDMIDevice = L\"ActionAllowed.Transfer.NONSDMI\";" )
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_ActionAllowed_Backup = L\"ActionAllowed.Backup\";" )
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_ActionAllowed_CollaborativePlay = L\"ActionAllowed.CollaborativePlay\";" )
///////////////////////////////////////////////////////////////////////////////
//
// Actions for IWMDRMLicenseQuery::QueryLicenseState
//
///////////////////////////////////////////////////////////////////////////////
// Prefix string
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_LicenseState = L\"LicenseStateData.\";" )
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_LicenseState_Playback = L\"LicenseStateData.Play\";" )
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_LicenseState_Copy = L\"LicenseStateData.Copy\";" )
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_LicenseState_PlaylistBurn = L\"LicenseStateData.PlaylistBurn\";" )
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_LicenseState_CreateThumbnailImage = L\"LicenseStateData.CreateThumbnailImage\";" )
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_LicenseState_CopyToCD = L\"LicenseStateData.Print.redbook\";" )
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_LicenseState_CopyToSDMIDevice = L\"LicenseStateData.Transfer.SDMI\";" )
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_LicenseState_CopyToNonSDMIDevice = L\"LicenseStateData.Transfer.NONSDMI\";" )
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_LicenseState_Backup = L\"LicenseStateData.Backup\";" )
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_LicenseState_CollaborativePlay = L\"LicenseStateData.CollaborativePlay\";" )
///////////////////////////////////////////////////////////////////////////////
//
// WMDRMNET strings for IWMDRMLicense::GetLicenseProperty
//
///////////////////////////////////////////////////////////////////////////////
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRMNET_Revocation = L\"WMDRMNET_REVOCATION\";" )
///////////////////////////////////////////////////////////////////////////////
//
// SAP strings for IWMDRMLicense::GetLicenseProperty
//
///////////////////////////////////////////////////////////////////////////////
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_SAPLEVEL = L\"SAPLEVEL\";" )
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_SAPRequired = L\"SAPRequired\";" )
///////////////////////////////////////////////////////////////////////////////
//
// Misc strings for IWMDRMLicense::GetLicenseProperty
//
///////////////////////////////////////////////////////////////////////////////
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_SOURCEID = L\"SOURCEID\";" )
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_PRIORITY = L\"PRIORITY\";" )
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_ISSUEDATE = L\"ISSUEDATE\";" )
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_UplinkID = L\"UplinkID\";" )
cpp_quote( "EXTERN_C const DECLSPEC_SELECTANY WCHAR *g_wszWMDRM_REVINFOVERSION = L\"REVINFOVERSION\";" )
///////////////////////////////////////////////////////////////////////////////
//
// License state bit masks for DRM_LICENSE_STATE_DATA.dwVague
//
///////////////////////////////////////////////////////////////////////////////
cpp_quote( "#define DRM_LICENSE_STATE_DATA_VAGUE 1" )
cpp_quote( "#define DRM_LICENSE_STATE_DATA_OPL_PRESENT 2" )
cpp_quote( "#define DRM_LICENSE_STATE_DATA_SAP_PRESENT 4" )
///////////////////////////////////////////////////////////////////////////////
//
// Backup/restore flags for IWMDRMLicenseManagement::BackupLicenses and RestoreLicenses
//
///////////////////////////////////////////////////////////////////////////////
cpp_quote( "#define WMDRM_BACKUP_OVERWRITE ((DWORD) 0x00000001)" )
cpp_quote( "#define WMDRM_RESTORE_INDIVIDUALIZE ((DWORD) 0x00000002)" )
///////////////////////////////////////////////////////////////////////////////
//
// WMDRM Security Perform Flags for IWMDRMSecurity::PerformSecurityUpdate
//
///////////////////////////////////////////////////////////////////////////////
cpp_quote("#define WMDRM_SECURITY_PERFORM_INDIV 0x00000001L") // Indiv only if necessary
cpp_quote("#define WMDRM_SECURITY_PERFORM_REVOCATION_REFRESH 0x00000002L") // Refresh Revocation Data
cpp_quote("#define WMDRM_SECURITY_PERFORM_FORCE_INDIV 0x00000004L") // Force indiv
///////////////////////////////////////////////////////////////////////////////
//
// License type flags for IWMDRMLicense::GetLicense
//
///////////////////////////////////////////////////////////////////////////////
cpp_quote("#define WMDRM_LICENSE_TYPE_XML 0x00000001L")
cpp_quote("#define WMDRM_LICENSE_TYPE_XMR 0x00000002L")
///////////////////////////////////////////////////////////////////////////////
//
// Certificate type flags for IWMDRMSecurity::GetMachineCertificate
//
///////////////////////////////////////////////////////////////////////////////
cpp_quote("#define WMDRM_CERTIFICATE_TYPE_V1 0x00000001L")
cpp_quote("#define WMDRM_CERTIFICATE_TYPE_V2 0x00000002L")
///////////////////////////////////////////////////////////////////////////////
//
// License request type flags for IWMDRMLicenseManagement::AcquireLicense
//
///////////////////////////////////////////////////////////////////////////////
cpp_quote("#define WMDRM_ACQUIRE_LICENSE_SILENT 0x00000001L")
cpp_quote("#define WMDRM_ACQUIRE_LICENSE_NONSILENT 0x00000002L") // Just generate a challenge
cpp_quote("#define WMDRM_ACQUIRE_LICENSE_LEGACY_NONSILENT 0x00000004L") // Just generate a V1 challenge
///////////////////////////////////////////////////////////////////////////////
//
// DRM license deletion flags for IWMDRMLicenseManagement::DeleteLicense
//
///////////////////////////////////////////////////////////////////////////////
cpp_quote( "#define WMDRM_DELETE_LICENSE_IMMEDIATELY 0x00000001L" )
cpp_quote( "#define WMDRM_DELETE_LICENSE_MARK_FOR_PURGE 0x00000002L" )
///////////////////////////////////////////////////////////////////////////////
//
// DRM license store cleanup flags for IWMDRMLicenseManagement::CleanLicenseStore
//
///////////////////////////////////////////////////////////////////////////////
cpp_quote( "#define WMDRM_CLEAN_LICENSE_STORE_SYNC 0x00000001L" )
cpp_quote( "#define WMDRM_CLEAN_LICENSE_STORE_ASYNC 0x00000002L" )
///////////////////////////////////////////////////////////////////////////////
//
// Types of certificates for IWMDRMLicense::CreateSecureDecryptor (dwCertificateType)
//
///////////////////////////////////////////////////////////////////////////////
cpp_quote( "#define WMDRM_CERTIFICATE_TYPE_XML 1" )
///////////////////////////////////////////////////////////////////////////////
//
// Types of protection for IWMDRMLicense::CreateSecureDecryptor (dwFlags)
//
///////////////////////////////////////////////////////////////////////////////
cpp_quote( "#define WMDRM_PROTECTION_TYPE_RC4 1" )
///////////////////////////////////////////////////////////////////////////////
//
// Revocation Type GUIDs for various methods in IWMDRMSecurity
//
///////////////////////////////////////////////////////////////////////////////
cpp_quote( "EXTERN_GUID( WMDRM_REVOCATIONTYPE_APP, 0x90A37313, 0x0ECF, 0x4CAA, 0xA9, 0x06, 0xB1, 0x88, 0xF6, 0x12, 0x93, 0x00 );" )
cpp_quote( "EXTERN_GUID( WMDRM_REVOCATIONTYPE_DEVICE, 0x3129E375, 0xCEB0, 0x47D5, 0x9C, 0xCA, 0x9D, 0xB7, 0x4C, 0xFD, 0x43, 0x32 );" )
cpp_quote( "EXTERN_GUID( WMDRM_REVOCATIONTYPE_CARDEA, 0xCD75E604, 0x543D, 0x4A9C, 0x9F, 0x09, 0xFE, 0x6D, 0x24, 0xE8, 0xBF, 0x90 );" )
cpp_quote( "EXTERN_GUID( WMDRM_REVOCATIONTYPE_REVINFO, 0xCCDE5A55, 0xA688, 0x4405, 0xA8, 0x8B, 0xD1, 0x3F, 0x90, 0xD5, 0xBA, 0x3E );" )
cpp_quote( "EXTERN_GUID( WMDRM_REVOCATIONTYPE_GRL, 0xa2190240, 0xb2ca, 0x40b3, 0xb4, 0x8d, 0x9b, 0xc4, 0xc2, 0xdc, 0x42, 0x8d );" )
cpp_quote( "EXTERN_GUID( WMDRM_REVOCATIONTYPE_HDCP, 0xe627553a, 0x820f, 0x40fd, 0xb4, 0x65, 0xa4, 0x28, 0x30, 0xa5, 0x74, 0xc9 );" )
///////////////////////////////////////////////////////////////////////////////
//
// This enum indicates the type of crypto algorithm and paramters
// that will be passed to the DRM encrypt and decrypt functions
//
///////////////////////////////////////////////////////////////////////////////
typedef enum DRM_CRYPTO_TYPE
{
CRYPTO_TYPE_MCE = 0
} DRM_CRYPTO_TYPE;
cpp_quote( "#if !DRM_LICENSE_STATE_TYPES_DEFINED" )
cpp_quote( "#define DRM_LICENSE_STATE_TYPES_DEFINED 1" )
///////////////////////////////////////////////////////////////////////////////
//
// This enum indicates the category for each possible output string to be
// displayed. These are:
//
// 0 - Playback not permitted.
// 1 - Playback unlimited.
// 2 - Playback valid 5 times.
// 3 - Playback valid from 7/12/00.
// 4 - Playback valid until 7/12/00.
// 5 - Playback valid from 5/12 to 9/12.
// 6 - Playback valid 5 times from 7/12/00.
// 7 - Playback valid 5 times until 7/12/00.
// 8 - Playback valid 5 times from 5/12 to 9/12.
// 9 - Playback valid for 24 hours from first use.
//
///////////////////////////////////////////////////////////////////////////////
typedef enum DRM_LICENSE_STATE_CATEGORY
{
WM_DRM_LICENSE_STATE_NORIGHT = 0,
WM_DRM_LICENSE_STATE_UNLIM,
WM_DRM_LICENSE_STATE_COUNT,
WM_DRM_LICENSE_STATE_FROM,
WM_DRM_LICENSE_STATE_UNTIL,
WM_DRM_LICENSE_STATE_FROM_UNTIL,
WM_DRM_LICENSE_STATE_COUNT_FROM,
WM_DRM_LICENSE_STATE_COUNT_UNTIL,
WM_DRM_LICENSE_STATE_COUNT_FROM_UNTIL,
WM_DRM_LICENSE_STATE_EXPIRATION_AFTER_FIRSTUSE,
} DRM_LICENSE_STATE_CATEGORY;
///////////////////////////////////////////////////////////////////////////////
//
// Structure to hold license state data
//
///////////////////////////////////////////////////////////////////////////////
typedef struct _DRM_LICENSE_STATE_DATA
{
DWORD dwStreamId; // 0 -> All streams, != 0 -> A particular stream.
DRM_LICENSE_STATE_CATEGORY dwCategory; // Indicates the category of string to be displayed.
DWORD dwNumCounts; // Number of items supplied in dwCount.
DWORD dwCount[4]; // Up to 4 counts.
DWORD dwNumDates; // Number of items supplied in dwDate.
FILETIME datetime[4]; // Up to 4 dates.
DWORD dwVague; // Bit mask of DRM_LICENSE_STATE_DATA_VAGUE
// DRM_LICENSE_STATE_DATA_OPL_PRESENT
// DRM_LICENSE_STATE_DATA_SAP_PRESENT
} DRM_LICENSE_STATE_DATA;
cpp_quote( "#endif" )
///////////////////////////////////////////////////////////////////////////////
//
// This enum indicates the status of the state DRM is in
//
///////////////////////////////////////////////////////////////////////////////
typedef enum MSDRM_STATUS
{
DRM_ERROR = 0,
DRM_INFORMATION = 1,
DRM_BACKUPRESTORE_BEGIN = 2,
DRM_BACKUPRESTORE_END = 3,
DRM_BACKUPRESTORE_CONNECTING = 4,
DRM_BACKUPRESTORE_DISCONNECTING = 5,
DRM_ERROR_WITHURL = 6,
DRM_RESTRICTED_LICENSE = 7,
DRM_NEEDS_INDIVIDUALIZATION = 8,
DRM_PLAY_OPL_NOTIFICATION = 9,
DRM_COPY_OPL_NOTIFICATION = 10,
DRM_REFRESHCRL_COMPLETE = 11,
} MSDRM_STATUS;
///////////////////////////////////////////////////////////////////////////////
//
// This enum defines the different data types supported as attributes by DRM
//
///////////////////////////////////////////////////////////////////////////////
typedef enum DRM_ATTR_DATATYPE
{
DRM_TYPE_DWORD = 0,
DRM_TYPE_STRING = 1,
DRM_TYPE_BINARY = 2,
DRM_TYPE_BOOL = 3,
DRM_TYPE_QWORD = 4,
DRM_TYPE_WORD = 5,
DRM_TYPE_GUID = 6,
} DRM_ATTR_DATATYPE;
///////////////////////////////////////////////////////////////////////////////
//
// This enum contains the DRM http status states
//
///////////////////////////////////////////////////////////////////////////////
typedef enum DRM_HTTP_STATUS
{
HTTP_NOTINITIATED = 0,
HTTP_CONNECTING,
HTTP_REQUESTING,
HTTP_RECEIVING,
HTTP_COMPLETED,
} DRM_HTTP_STATUS;
///////////////////////////////////////////////////////////////////////////////
//
// This enum contains the DRM individualization status states
//
///////////////////////////////////////////////////////////////////////////////
typedef enum DRM_INDIVIDUALIZATION_STATUS
{
INDI_UNDEFINED = 0x0000,
INDI_BEGIN = 0x0001,
INDI_SUCCEED = 0x0002,
INDI_FAIL = 0x0004,
INDI_CANCEL = 0x0008,
INDI_DOWNLOAD = 0x0010,
INDI_INSTALL = 0x0020,
} DRM_INDIVIDUALIZATION_STATUS;
///////////////////////////////////////////////////////////////////////////////
//
// This enum contains the DRM IWMDRMLicenseQuery::QueryActionAllowed status states
//
///////////////////////////////////////////////////////////////////////////////
typedef enum _DRM_ACTION_ALLOWED_QUERY_RESULTS
{
DRM_ACTION_ALLOWED_QUERY_NOT_ENABLED = 0x00000001,
DRM_ACTION_ALLOWED_QUERY_NOT_ENABLED_NO_LICENSE = 0x00000002,
DRM_ACTION_ALLOWED_QUERY_NOT_ENABLED_NO_RIGHT = 0x00000004,
DRM_ACTION_ALLOWED_QUERY_NOT_ENABLED_EXHAUSTED = 0x00000008,
DRM_ACTION_ALLOWED_QUERY_NOT_ENABLED_EXPIRED = 0x00000010,
DRM_ACTION_ALLOWED_QUERY_NOT_ENABLED_NOT_STARTED = 0x00000020,
DRM_ACTION_ALLOWED_QUERY_NOT_ENABLED_APPSEC_TOO_LOW = 0x00000040,
DRM_ACTION_ALLOWED_QUERY_NOT_ENABLED_REQ_INDIV = 0x00000080,
DRM_ACTION_ALLOWED_QUERY_NOT_ENABLED_COPY_OPL_TOO_LOW = 0x00000100,
DRM_ACTION_ALLOWED_QUERY_NOT_ENABLED_COPY_OPL_EXCLUDED = 0x00000200,
DRM_ACTION_ALLOWED_QUERY_NOT_ENABLED_NO_CLOCK_SUPPORT = 0x00000400,
DRM_ACTION_ALLOWED_QUERY_NOT_ENABLED_NO_METERING_SUPPORT = 0x00000800,
DRM_ACTION_ALLOWED_QUERY_NOT_ENABLED_CHAIN_DEPTH_TOO_HIGH = 0x00001000,
} DRM_ACTION_ALLOWED_QUERY_RESULTS;
///////////////////////////////////////////////////////////////////////////////
//
// structure to hold crypto algorithm and associated data for DRM
// encrypt/decrypt functions
//
///////////////////////////////////////////////////////////////////////////////
typedef struct _WMDRMCryptoData
{
DRM_CRYPTO_TYPE cryptoType;
unsigned __int64 qwCounterID;
unsigned __int64 qwOffset;
} WMDRMCryptoData;
///////////////////////////////////////////////////////////////////////////////
//
// structure to hold DRM async individualization status information
//
///////////////////////////////////////////////////////////////////////////////
typedef struct _WMIndividualizeStatus
{
HRESULT hr;
DRM_INDIVIDUALIZATION_STATUS enIndiStatus;
LPSTR pszIndiRespUrl;
DWORD dwHTTPRequest;
DRM_HTTP_STATUS enHTTPStatus;
DWORD dwHTTPReadProgress;
DWORD dwHTTPReadTotal;
} WM_INDIVIDUALIZE_STATUS;
///////////////////////////////////////////////////////////////////////////////
//
// structure to hold Backup/Restore data
//
///////////////////////////////////////////////////////////////////////////////
typedef struct _WMBackupRestoreData
{
MSDRM_STATUS eStatus;
BSTR bstrError;
} WM_BACKUP_RESTORE_STATUS;
///////////////////////////////////////////////////////////////////////////////
//
// Conditionaly compiled Structures and definitions for
// DRM internal/legacy Output Protection Levels (OPL)
//
///////////////////////////////////////////////////////////////////////////////
cpp_quote( "#ifndef DRM_OPL_TYPES" )
cpp_quote( "#define DRM_OPL_TYPES 1")
cpp_quote( "#define WMDRM_OPL_PLAY ((DWORD) 0x00000001)" )
cpp_quote( "#define WMDRM_OPL_COPY ((DWORD) 0x00000002)" )
typedef struct __tagDRM_MINIMUM_OUTPUT_PROTECTION_LEVELS
{
WORD wCompressedDigitalVideo;
WORD wUncompressedDigitalVideo;
WORD wAnalogVideo;
WORD wCompressedDigitalAudio;
WORD wUncompressedDigitalAudio;
} DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS;
typedef struct __tagDRM_OPL_OUTPUT_IDS
{
WORD cIds;
GUID *rgIds;
} DRM_OPL_OUTPUT_IDS;
cpp_quote( "#define VER_DRM_PLAY_OPL_V1 1" )
cpp_quote( "#define VER_DRM_PLAY_OPL 2" )
cpp_quote( "#define VER_DRM_VIDEO_OUTPUT_PROTECTION 2" )
typedef struct __tagDRM_OUTPUT_PROTECTION
{
GUID guidId;
BYTE bConfigData;
} DRM_OUTPUT_PROTECTION;
typedef struct __tagDRM_OUTPUT_PROTECTION_EX
{
DWORD dwVersion;
GUID guidId;
DWORD dwConfigData;
} DRM_OUTPUT_PROTECTION_EX;
typedef DRM_OUTPUT_PROTECTION DRM_AUDIO_OUTPUT_PROTECTION;
typedef DRM_OUTPUT_PROTECTION DRM_VIDEO_OUTPUT_PROTECTION;
typedef DRM_OUTPUT_PROTECTION_EX DRM_AUDIO_OUTPUT_PROTECTION_EX;
typedef DRM_OUTPUT_PROTECTION_EX DRM_VIDEO_OUTPUT_PROTECTION_EX;
typedef struct __tagDRM_VIDEO_OUTPUT_PROTECTION_IDS
{
WORD cEntries;
DRM_VIDEO_OUTPUT_PROTECTION *rgVop;
} DRM_VIDEO_OUTPUT_PROTECTION_IDS;
typedef struct __tagDRM_VIDEO_OUTPUT_PROTECTION_IDS_EX
{
DWORD dwVersion;
WORD cEntries;
DRM_VIDEO_OUTPUT_PROTECTION_EX *rgVop;
} DRM_VIDEO_OUTPUT_PROTECTION_IDS_EX;
typedef struct __tagDRM_AUDIO_OUTPUT_PROTECTION_IDS
{
WORD cEntries;
DRM_AUDIO_OUTPUT_PROTECTION *rgAop;
} DRM_AUDIO_OUTPUT_PROTECTION_IDS;
typedef struct __tagDRM_AUDIO_OUTPUT_PROTECTION_IDS_EX
{
DWORD dwVersion;
WORD cEntries;
DRM_AUDIO_OUTPUT_PROTECTION_EX *rgAop;
} DRM_AUDIO_OUTPUT_PROTECTION_IDS_EX;
typedef struct __tagDRM_PLAY_OPL
{
DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS minOPL;
DRM_OPL_OUTPUT_IDS oplIdReserved;
DRM_VIDEO_OUTPUT_PROTECTION_IDS vopi;
} DRM_PLAY_OPL;
typedef struct __tagDRM_PLAY_OPL_EX
{
DWORD dwVersion;
DRM_MINIMUM_OUTPUT_PROTECTION_LEVELS minOPL;
DRM_OPL_OUTPUT_IDS oplIdReserved;
DRM_VIDEO_OUTPUT_PROTECTION_IDS_EX vopi;
} DRM_PLAY_OPL_EX;
typedef struct __tagDRM_COPY_OPL
{
WORD wMinimumCopyLevel;
DRM_OPL_OUTPUT_IDS oplIdIncludes;
DRM_OPL_OUTPUT_IDS oplIdExcludes;
} DRM_COPY_OPL;
cpp_quote( "#endif // DRM_OPL_TYPES" )
///////////////////////////////////////////////////////////////////////////////
//
// structure to hold consolidated DRM OPL values
//
///////////////////////////////////////////////////////////////////////////////
typedef struct _WMDRMOutputProtectionLevels
{
WORD wCompressedDigitalVideo;
WORD wUncompressedDigitalVideo;
WORD wAnalogVideo;
WORD wCompressedDigitalAudio;
WORD wUncompressedDigitalAudio;
WORD wMinimumCopyProtectionLevel;
} WMDRM_OUTPUT_PROTECTION_LEVELS;
///////////////////////////////////////////////////////////////////////////////
//
// structure to hold DRM Analog video Restrictions
//
///////////////////////////////////////////////////////////////////////////////
typedef struct _WMDRMAnalogVideoRestrictions
{
GUID guidRestrictionID;
DWORD dwRestrictionData;
} WMDRM_ANALOG_VIDEO_RESTRICTIONS;
typedef struct _WMDRMAnalogVideoRestrictionsEx
{
DWORD dwVersion;
GUID guidRestrictionID;
DWORD cbRestrictionData;
BYTE *pbRestrictionData;
} WMDRM_ANALOG_VIDEO_RESTRICTIONS_EX;
///////////////////////////////////////////////////////////////////////////////
//
// Structures for specifying policy for WMDRM-ND
//
///////////////////////////////////////////////////////////////////////////////
typedef enum _WMDRMNET_POLICY_TYPE
{
WMDRMNET_POLICY_TYPE_UNDEFINED = 0x0000,
WMDRMNET_POLICY_TYPE_TRANSCRYPTPLAY = 0x0001
} WMDRMNET_POLICY_TYPE;
typedef struct _tagWMDRMNET_POLICY
{
WMDRMNET_POLICY_TYPE ePolicyType;
BYTE *pbPolicy;
} WMDRMNET_POLICY;
typedef struct _WMDRMNET_POLICY_TRANSCRYPTPLAY
{
DWORD cbData;
BYTE *pbData; // This blob is opaque and should only be interpreted by the platform
} WMDRMNET_POLICY_TRANSCRYPTPLAY;
///////////////////////////////////////////////////////////////////////////////
//
// Structures for descrambling and encrypting DRM data
//
///////////////////////////////////////////////////////////////////////////////
typedef struct _WMDRM_ENCRYPT_SCATTER_INFO
{
DWORD dwStreamID;
DWORD dwSampleProtectionVersion;
DWORD cbProtectionInfo;
BYTE *pbProtectionInfo;
} WMDRM_ENCRYPT_SCATTER_INFO;
typedef struct WMDRM_ENCRYPT_SCATTER_BLOCK
{
DWORD dwStreamID;
DWORD cbBlock;
BYTE *pbBlock;
} WMDRM_ENCRYPT_SCATTER_BLOCK;
///////////////////////////////////////////////////////////////////////////////
//
// functions to init/shutdown WMDRMSDK.DLL
//
///////////////////////////////////////////////////////////////////////////////
cpp_quote ( "EXTERN_C HRESULT STDMETHODCALLTYPE WMDRMStartup( );" )
cpp_quote ( "EXTERN_C HRESULT STDMETHODCALLTYPE WMDRMShutdown( );" )
///////////////////////////////////////////////////////////////////////////////
//
// function to create a DRM Provider
//
///////////////////////////////////////////////////////////////////////////////
cpp_quote ( "EXTERN_C HRESULT STDMETHODCALLTYPE WMDRMCreateProvider( OUT IWMDRMProvider **ppDRMProvider );" )
cpp_quote ( "//" )
cpp_quote ( "// WMDRMCreateProtectedProvider is only available via a Microsoft issued WMDRMSDK stub library" )
cpp_quote ( "//" )
cpp_quote ( "EXTERN_C HRESULT STDMETHODCALLTYPE WMDRMCreateProtectedProvider( OUT IWMDRMProvider **ppDRMProvider );" )
///////////////////////////////////////////////////////////////////////////////
//
// Interface for DRM asynchronous callback status
//
///////////////////////////////////////////////////////////////////////////////
[
object,
uuid( 08548704-75B1-4982-9B26-FB385DEE741D ),
helpstring("IDRMStatusCallback Interface"),
pointer_default(unique),
local
]
interface IDRMStatusCallback : IUnknown
{
HRESULT OnStatus(
[in] MSDRM_STATUS Status,
[in] HRESULT hr,
[in] DRM_ATTR_DATATYPE dwType,
[in] BYTE *pValue,
[in] void *pvContext );
};
///////////////////////////////////////////////////////////////////////////////
//
// Interface for DRM event Generation. This is an extension of
// IMFMediaEventGenerator so that the operation can be canceled
// Before a final release of any interface that derives from
// IWMDRMEventGenerator the caller should issue a call to Shutdown to ensure
// any outstanding events or references are flushed and released.
///////////////////////////////////////////////////////////////////////////////
[
object,
uuid( CE11CC91-E615-4E0B-BE1F-09B5AEC033F2 ),
helpstring("IWMDRMEventGenerator Interface"),
pointer_default(unique),
local
]
interface IWMDRMEventGenerator : IMFMediaEventGenerator
{
HRESULT CancelAsyncOperation(
[in] IUnknown *punkCancelationCookie );
HRESULT Shutdown( );
};
///////////////////////////////////////////////////////////////////////////////
//
// Interface to provide WMDRMSDK objects based on Interface ID
//
///////////////////////////////////////////////////////////////////////////////
[
object,
uuid( 98DC8917-8640-4b1d-9F1E-A590D40357EE ),
helpstring("IWMDRMProvider Interface"),
pointer_default(unique),
local
]
interface IWMDRMProvider : IUnknown
{
HRESULT CreateObject(
[in] REFIID riid,
[out, iid_is(riid)] void **ppvObject );
}
///////////////////////////////////////////////////////////////////////////////
//
// Interface for performing, setting and extracting DRM Security Functionality
//
///////////////////////////////////////////////////////////////////////////////
[
object,
uuid( 70800F56-5239-4a0b-A8B8-D53C6BAE4171 ),
helpstring("IWMDRMSecurity Interface"),
pointer_default(unique),
local
]
interface IWMDRMSecurity : IWMDRMEventGenerator
{
HRESULT GetSecurityVersion(
[out] BSTR *pbstrVersion );
HRESULT GetMachineCertificate(
[in] DWORD dwCertificateType,
[out] BYTE rgbVersion[4],
[out,size_is( ,*pcbCertificate)] BYTE **ppbCertificate,
[out] DWORD *pcbCertificate );
HRESULT PerformSecurityUpdate(
[in] DWORD dwFlags, // exactly one of WMDRM Security Perform Flags defined above
[out] IUnknown **ppunkCancelationCookie );
HRESULT SetRevocationData(
[in] REFGUID guidRevocationType,
[in,size_is(cbCRL)] BYTE *pbCRL,
[in] DWORD cbCRL);
HRESULT GetRevocationData(
[in] REFGUID guidRevocationType,
[out,size_is(*pcbCRL)] BYTE *pbCRL,
[in, out] DWORD *pcbCRL);
HRESULT GetRevocationDataVersion(
[in] REFGUID guidRevocationType,
[out] ULONGLONG *pdwCRLVersion);
HRESULT CheckCertForRevocation(
[in] REFGUID rguidRevocationList,
[in,size_is(cbCert)] BYTE *pbCert,
[in] DWORD cbCert,
[out] BOOL *pfRevoked );
HRESULT GetContentEnablersForRevocations(
[in, size_is(cCerts)] BYTE **rgpbCerts,
[in, size_is(cCerts)] DWORD *rgpdwCertSizes,
[in, size_is(cCerts)] GUID **rgpguidCerts,
[in] DWORD cCerts,
[in] HRESULT hResultHint,
[out,size_is(*pcContentEnablers)] IMFContentEnabler **prgContentEnablers,
[in,out] DWORD *pcContentEnablers );
HRESULT GetContentEnablersFromHashes(
[in, size_is(cCerts)] BSTR *rgpbCertHashes,
[in] DWORD cCerts,
[in] HRESULT hResultHint,
[out,size_is(*pcContentEnablers)] IMFContentEnabler **prgContentEnablers,
[in,out] DWORD *pcContentEnablers );
};
///////////////////////////////////////////////////////////////////////////////
//
// Interface for encrypting DRM data
//
///////////////////////////////////////////////////////////////////////////////
[
object,
uuid( C9E0A5F4-DD22-4dc4-B795-88FA91F0516B ),
helpstring("IWMDRMEncrypt Interface"),
pointer_default(unique),
local
]
interface IWMDRMEncrypt : IUnknown
{
HRESULT Encrypt(
[in,out, size_is( cbData )] BYTE *pbData,
[in] DWORD cbData,
[in] WMDRMCryptoData *pWMCryptoData);
};
///////////////////////////////////////////////////////////////////////////////
//
// Interface for descrambling and encrypting DRM data
//
///////////////////////////////////////////////////////////////////////////////
[
object,
uuid( 2662fa39-4c62-481a-956c-7bfcb33c2888 ),
helpstring("IWMDRMEncryptScatter Interface"),
pointer_default(unique),
local
]
interface IWMDRMEncryptScatter : IUnknown
{
HRESULT InitEncryptScatter(
[in] DWORD cStreams,
[in, size_is( cStreams )] WMDRM_ENCRYPT_SCATTER_INFO *rgInfos );
HRESULT EncryptScatter(
[in] DWORD cBlocks,
[in, size_is( cBlocks )] WMDRM_ENCRYPT_SCATTER_BLOCK *rgBlocks,
[in] WMDRMCryptoData *pWMCryptoData,
[in] DWORD cbOutput,
[out, size_is( cbOutput )] BYTE *pbOutput );
};
///////////////////////////////////////////////////////////////////////////////
//
// Interface for decrypting DRM data
//
///////////////////////////////////////////////////////////////////////////////
[
object,
uuid( C9E0A5F5-DD22-4dc4-B795-88FA91F0516B ),
helpstring("IWMDRMDecrypt Interface"),
pointer_default(unique),
local
]
interface IWMDRMDecrypt : IUnknown
{
HRESULT Decrypt(
[in,out, size_is( cbData )] BYTE *pbData,
[in] DWORD cbData,
[in] WMDRMCryptoData *pWMCryptoData);
};
///////////////////////////////////////////////////////////////////////////////
//
// Interface for the WMDRM license
//
///////////////////////////////////////////////////////////////////////////////
[
object,
uuid( C9E0A5F3-DD22-4dc4-B795-88FA91F0516B ),
helpstring("IWMDRMLicense Interface"),
pointer_default(unique),
local
]
interface IWMDRMLicense : IUnknown
{
HRESULT ResetEnumeration( void );
HRESULT GetNext( void );
HRESULT GetLicense(
[out, size_is( ,*pcbLicense)] BYTE **ppbLicense,
[out] DWORD *pcbLicense,
[out] DWORD *pdwLicenseType );
HRESULT GetLicenseProperty(
[in] BSTR bstrName,
[out] PROPVARIANT *ppropVariant );
HRESULT CreateDecryptor(
[out] IWMDRMDecrypt **ppDecryptor ); // Not available if bstrKID was NULL
// requires stublib
HRESULT CreateSecureDecryptor(
[in,size_is(cbCertificate)] BYTE *pbCertificate,
[in] DWORD cbCertificate,
[in] DWORD dwCertificateType,
[in] DWORD dwFlags,
[out] BYTE *pbInitializationVector,
[out] DWORD *pcbInitializationVector,
[out] IWMDRMDecrypt **ppDecryptor ); // Not available if bstrKID was NULL
// requires stublib
HRESULT CreateEncryptor(
[out] IWMDRMEncrypt **ppEncryptor ); // Not available if bstrKID was NULL
// requires stublib
HRESULT PersistLicense( void );
//
// License OPL and Rights Extraction
//
HRESULT CanPersist(
[out] BOOL* pfCanPersist );
HRESULT GetAnalogVideoRestrictionLevels(
[out,size_is(*pcRestrictions)] WMDRM_ANALOG_VIDEO_RESTRICTIONS rgAnalogVideoRestrictions[],
[in, out] DWORD *pcRestrictions );
HRESULT GetOutputProtectionLevels(
[out] WMDRM_OUTPUT_PROTECTION_LEVELS* pOPLs );
//
// An array of GUIDs will be allocated an returned to the caller. This should be freed with CoTaskMemFree.
//
HRESULT GetInclusionList(
[out,size_is( ,*pcGuids)] GUID **ppGuids,
[out] DWORD *pcGuids );
HRESULT GetPolicy(
[out, size_is( ,*pcbPolicy)] BYTE **ppbPolicy,
[out] DWORD *pcbPolicy );
};
///////////////////////////////////////////////////////////////////////////////
//
// Interface for the WMDRM license querying
//
///////////////////////////////////////////////////////////////////////////////
[
object,
uuid(20B970DF-0A58-4d3c-817C-4E3CCBB253AC),
helpstring("IWMDRMLicenseQuery Interface"),
pointer_default(unique)
]
interface IWMDRMLicenseQuery : IUnknown
{
// all licenses with the given KID will be searched and evaluated. The result
// are aggregated into rgResultStateData[]
HRESULT QueryLicenseState(
[in] BSTR bstrKID,
[in] DWORD cActionsToQuery,
[in, size_is(cActionsToQuery)] BSTR rgbstrActionsToQuery[],
[out, size_is(cActionsToQuery)] DRM_LICENSE_STATE_DATA rgResultStateData[]);
// this function is called prior to calling QueryActionAllowed, if necessary
HRESULT SetActionAllowedQueryParams(
[in] BOOL fIsMF, // optional, default to TRUE for using MediaFoundation
[in] DWORD dwAppSecLevel, // optional, if fIsMF is FALSE, this is the security level of the app
[in] BOOL fHasSerialNumber, // optional, TRUE if the device has serial number for CanCopy query
[in] BSTR bstrDeviceCert); // optional, The Janus device cert for CanCopy queyr
// Licenses with the given KID are searched and evaluated until the
// requested actions can be determined satisfied or all licenses with
// the given KID are visited.
HRESULT QueryActionAllowed(
[in] BSTR bstrKID,
[in] BSTR bstrMinReqIndivVersion,
[in] DWORD cActionsToQuery,
[in, size_is(cActionsToQuery)] BSTR rgbstrActionsToQuery[],
[out, size_is(cActionsToQuery)] DWORD rgdwQueryResult[]);
};
///////////////////////////////////////////////////////////////////////////////
//
// Interface for the WMDRM license management, enumeration and backup/restore
//
///////////////////////////////////////////////////////////////////////////////
typedef struct WMDRM_LICENSE_FILTER
{
DWORD dwVersion; // Currently 0 is the only supported version
BSTR bstrKID; // Base64 encoded DRM Kid value
BSTR bstrRights; // List of rights to filter licenses on. This should be in the form of <ACTIONLIST><ACTION>Play</ACTION></ACTIONLIST>
BSTR bstrAllowedSourceIDs; // List of source IDs the application has been granted access to
} WMDRM_LICENSE_FILTER;
[
object,
uuid(F4828DC7-8945-4D05-AB05-667AB99D29EE),
helpstring("IWMDRMLicenseManagement Interface"),
pointer_default(unique)
]
interface IWMDRMLicenseManagement : IWMDRMEventGenerator
{
HRESULT CreateLicenseEnumeration(
[in] WMDRM_LICENSE_FILTER *pLicenseFilter,
[out] IWMDRMLicense **pEnumerator );
HRESULT DeleteLicense(
[in] BSTR bstrKID,
[in] DWORD dwFlags );
HRESULT CleanLicenseStore(
[in] DWORD dwFlags,
[out] IUnknown **ppunkCancelationCookie );
HRESULT StoreLicense(
[in] BSTR bstrLicenseResponse );
HRESULT AcquireLicense(
[in] BSTR bstrURL,
[in] BSTR bstrHeaderData, // If WMDRM_ACQUIRE_LICENSE_LEGACY_NONSILENT, this is just the KID. Otherwise, this is the entire header.
[in] BSTR bstrActions, // From list of DRM actions as XML string, e.g. <ACTIONLIST><ACTION>Play</ACTION></ACTIONLIST>
[in] DWORD dwFlags, // Exactly one of the License request type flags indicating Silent vs Non-silent request. If non-silent an event will be delivered with the LICACQ info.
[out] IUnknown **ppunkCancelationCookie);
HRESULT MonitorLicenseAcquisition(
[in] BSTR bstrKID,
[in] BSTR bstrHeader,
[in] BSTR bstrActions, // From list of DRM actions as XML string, e.g. <ACTIONLIST><ACTION>Play</ACTION></ACTIONLIST>
[out] IUnknown **ppunkCancelationCookie);
HRESULT BackupLicenses(
[in] BSTR bstrBackupDirectory,
[in] DWORD dwFlags,
[out] IUnknown **ppunkCancelationCookie);
HRESULT RestoreLicenses(
[in] BSTR bstrBackupDirectory,
[in] DWORD dwFlags,
[out] IUnknown **ppunkCancelationCookie);
HRESULT CreateLicenseRevocationChallenge(
[in, size_is( cbMachineID ) ] BYTE *pbMachineID,
[in] DWORD cbMachineID,
[in, size_is( cbChallenge )] BYTE *pbChallenge,
[in] DWORD cbChallenge,
[out, size_is( ,*pcbChallengeOutput )] BYTE **ppbChallengeOutput,
[out] DWORD *pcbChallengeOutput );
HRESULT ProcessLicenseRevocationResponse(
[in, size_is( cbSignedLRB )] BYTE *pbSignedLRB,
[in] DWORD cbSignedLRB,
[out, size_is( ,*pcbSignedACK )] BYTE **ppbSignedACK,
[out] DWORD *pcbSignedACK );
HRESULT ProcessLicenseDeletionMessage(
[in] BSTR bstrDeletionMessage );
};
///////////////////////////////////////////////////////////////////////////////
//
// Interfaces for the WMDRM Net Receiver
//
///////////////////////////////////////////////////////////////////////////////
[
object,
uuid( F9C074A4-15D6-44C0-8A6D-2446ACC109AE ),
helpstring("IWMDRMNetReceiver Interface"),
pointer_default(unique),
local
]
interface IWMDRMNetReceiver : IWMDRMEventGenerator
{
HRESULT GetRegistrationChallenge(
[out, size_is( ,*pcbRegistrationChallenge ) ] BYTE **ppbRegistrationChallenge,
[out] DWORD *pcbRegistrationChallenge );
HRESULT ProcessRegistrationResponse(
[in, size_is( cbRegistrationResponse ) ] BYTE *pbRegistrationResponse,
[in] DWORD cbRegistrationResponse,
[out] IUnknown **ppunkCancellationCookie );
HRESULT GetLicenseChallenge(
[in] BSTR bstrAction,
[out, size_is( ,*pcbLicenseChallenge ) ] BYTE **ppbLicenseChallenge,
[out] DWORD *pcbLicenseChallenge );
HRESULT ProcessLicenseResponse(
[in, size_is( cbLicenseResponse ) ] BYTE *pbLicenseResponse,
[in] DWORD cbLicenseResponse,
[out, size_is( ,*pcbWMDRMNetLicenseRepresentation )] BYTE **ppbWMDRMNetLicenseRepresentation,
[out] DWORD *pcbWMDRMNetLicenseRepresentation );
};
[
object,
uuid( 7B97237F-4B5D-442d-86C7-4F88961AF76B ),
helpstring("IWMDRMNetReceiver2 Interface"),
pointer_default(unique),
local
]
interface IWMDRMNetReceiver2 : IWMDRMNetReceiver
{
HRESULT ProcessRegistrationResponseEx(
[in, size_is( cbRegistrationResponse ) ] BYTE *pbRegistrationResponse,
[in] DWORD cbRegistrationResponse,
[in] DWORD dwLocalIPv6ScopeID,
[out] IUnknown **ppunkCancellationCookie );
HRESULT ProcessLicenseUpdate(
[in, size_is( cbLicenseUpdate ) ] BYTE *pbLicenseUpdate,
[in] DWORD cbLicenseUpdate,
[out] IWMDRMLicense **ppLicense );
};
///////////////////////////////////////////////////////////////////////////////
//
// Interfaces for the WMDRM Net Transmitter
//
///////////////////////////////////////////////////////////////////////////////
[
object,
uuid( F040C12B-4415-4F20-93F0-453EB519A756 ),
helpstring("IWMDRMNetTransmitter Interface"),
pointer_default(unique),
local
]
interface IWMDRMNetTransmitter : IUnknown
{
HRESULT SetLicenseChallenge(
[in, size_is( cbLicenseChallenge )] BYTE *pbLicenseChallenge,
[in] DWORD cbLicenseChallenge );
HRESULT GetRootLicenseResponse(
[in] BSTR bstrKID,
[out, size_is(,*pcbLicenseResponse)] BYTE **ppbLicenseResponse,
[out] DWORD *pcbLicenseResponse );
HRESULT GetLeafLicenseResponse(
[in] BSTR bstrKID,
[in] WMDRMNET_POLICY *pPolicy,
[out] IWMDRMEncrypt **ppIWMDRMEncrypt,
[out, size_is(,*pcbLicenseResponse)] BYTE **ppbLicenseResponse,
[out] DWORD *pcbLicenseResponse );
};
[
object,
uuid( 26BCB422-30C0-48b4-A641-D9FB1E656265 ),
helpstring("IWMDRMNetTransmitter2 Interface"),
pointer_default(unique),
local
]
interface IWMDRMNetTransmitter2 : IWMDRMNetTransmitter
{
HRESULT GetSimpleLicenseResponse(
[in] BSTR bstrKID,
[in] WMDRMNET_POLICY *pPolicy,
[out] IWMDRMEncrypt **ppIWMDRMEncrypt,
[out, size_is(,*pcbLicenseResponse)] BYTE **ppbLicenseResponse,
[out] DWORD *pcbLicenseResponse );
};
///////////////////////////////////////////////////////////////////////////////
//
// Interface for the status on WMDRM Inidividualization
//
///////////////////////////////////////////////////////////////////////////////
[
object,
uuid( 7DB091BD-DB6A-4FA4-BCBF-0783E256C78C ),
helpstring("IWMDRMIndividualizationStatus Interface"),
pointer_default(unique),
local
]
interface IWMDRMIndividualizationStatus : IUnknown
{
HRESULT GetStatus(
[out] WM_INDIVIDUALIZE_STATUS *pStatus );
};
///////////////////////////////////////////////////////////////////////////////
//
// Interface for the status on WMDRM Backup/Restore
//
///////////////////////////////////////////////////////////////////////////////
[
object,
uuid( F653C5A2-0EB3-4503-9D88-C200552D0D55 ),
helpstring("IWMDRMLicenseBackupRestoreStatus Interface"),
pointer_default(unique),
local
]
interface IWMDRMLicenseBackupRestoreStatus : IUnknown
{
HRESULT GetStatus(
[out] WM_BACKUP_RESTORE_STATUS *pStatus );
};
///////////////////////////////////////////////////////////////////////////////
//
// Interface for getting information on WMDRM non silent license aquisition
//
///////////////////////////////////////////////////////////////////////////////
[
object,
uuid( 8AE059DD-BE6B-481A-863A-59056B50B748 ),
helpstring("IWMDRMNonSilentLicenseAquisition Interface"),
pointer_default(unique),
local
]
interface IWMDRMNonSilentLicenseAquisition : IUnknown
{
HRESULT GetURL(
[out] BSTR *pbstrURL );
HRESULT GetChallenge(
[out] BSTR *pbstrChallenge );
};
//
// CoClasses
//
[
uuid(82435be0-f7c1-4df9-8103-eeabebf3d6e1),
version(1.0)
]
library WMDRMContentEnablerLib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");
[
uuid( 82435bdf-f7c1-4df9-8103-eeabebf3d6e1 )
]
coclass WMDRMContentEnablerActivate
{
[default] interface IPersistStream;
};
};