' ########################################################################################
' Microsoft Windows
' File: mswmdm.inc
' Copyright (c) 2011 Jos? Roca
' Portions Copyright (c) Microsoft Corporation.
' All Rights Reserved.
' THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
' EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
' MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
' ########################################################################################
' ########################################################################################
' Library name: MSWMDMLib
' Version: 1.0, Locale ID = 0
' Description: mswmdm 1.0 Type Library
' Path: C:\WINDOWS\system32\MSWMDM.dll
' Library GUID: {6EC6C744-355F-11D3-8470-00C04F79DBC0}
' ########################################################################################
#IF NOT %DEF(PBX_mswmdm_PBI)
#DEFINE PBX_mswmdm_PBI
%EQUATE `MSWMDM_INC = 1
'/* header files for imported files */
#INCLUDE ONCE "Legacy/COM/OAIdl.inc"
#INCLUDE ONCE "Legacy/COM/OCIdl.inc"
#INCLUDE ONCE "Legacy/System/PropIdl.inc"
#INCLUDE ONCE "Legacy/Media/amvideo.inc" ' for VIDEOINFOHEADER structure
$LIBID_MSWMDMLib = GUID$("{6EC6C744-355F-11D3-8470-00C04F79DBC0}")
' ========================================================================================
' ProgIDs (Program identifiers)
' ========================================================================================
' CLSID = {25BAAD81-3560-11D3-8471-00C04F79DBC0}
$PROGID_MediaDevMgr1 = "MediaDevMgr.MediaDevMgr.1"
' ========================================================================================
' Version independent ProgIDs
' ========================================================================================
' CLSID = {25BAAD81-3560-11D3-8471-00C04F79DBC0}
$PROGID_MediaDevMgr = "MediaDevMgr.MediaDevMgr"
' ========================================================================================
' ClsIDs (Class identifiers)
' ========================================================================================
$CLSID_MediaDevMgrClassFactory = GUID$("{50040C1D-BDBF-4924-B873-F14D6C5BFD66}")
$CLSID_WMDMDevice = GUID$("{807B3CDF-357A-11D3-8471-00C04F79DBC0}")
$CLSID_WMDMDeviceEnum = GUID$("{430E35AF-3971-11D3-8474-00C04F79DBC0}")
$CLSID_WMDMStorage = GUID$("{807B3CE0-357A-11D3-8471-00C04F79DBC0}")
$CLSID_WMDMStorageEnum = GUID$("{EB401A3B-3AF7-11D3-8474-00C04F79DBC0}")
$CLSID_WMDMStorageGlobal = GUID$("{807B3CE1-357A-11D3-8471-00C04F79DBC0}")
$CLSID_MediaDevMgr = GUID$("{25BAAD81-3560-11D3-8471-00C04F79DBC0}")
' ========================================================================================
' IIDs (Interface identifiers)
' ========================================================================================
$IID_IWMDeviceManager = GUID$("{1DCB3A00-33ED-11D3-8470-00C04F79DBC0}")
$IID_IWMDMDevice = GUID$("{1DCB3A02-33ED-11D3-8470-00C04F79DBC0}")
$IID_IWMDMEnumDevice = GUID$("{1DCB3A01-33ED-11D3-8470-00C04F79DBC0}")
$IID_IWMDMEnumStorage = GUID$("{1DCB3A05-33ED-11D3-8470-00C04F79DBC0}")
$IID_IWMDMProgress = GUID$("{1DCB3A0C-33ED-11D3-8470-00C04F79DBC0}")
$IID_IWMDMRevoked = GUID$("{EBECCEDB-88EE-4E55-B6A4-8D9F07D696AA}")
$IID_IWMDMStorage = GUID$("{1DCB3A06-33ED-11D3-8470-00C04F79DBC0}")
$IID_IWMDMStorageGlobals = GUID$("{1DCB3A07-33ED-11D3-8470-00C04F79DBC0}")
$IID_IWMDMMetaData = GUID$("{EC3B0663-0951-460A-9A80-0DCEED3C043C}")
$IID_IWMDeviceManager2 = GUID$("{923E5249-8731-4C5B-9B1C-B8B60B6E46AF}")
$IID_IWMDeviceManager3 = GUID$("{AF185C41-100D-46ED-BE2E-9CE8C44594EF}")
$IID_IWMDMStorage2 = GUID$("{1ED5A144-5CD5-4683-9EFF-72CBDB2D9533}")
$IID_IWMDMStorage3 = GUID$("{97717EEA-926A-464E-96A4-247B0216026E}")
$IID_IWMDMStorage4 = GUID$("{C225BAC5-A03A-40B8-9A23-91CF478C64A6}")
$IID_IWMDMOperation = GUID$("{1DCB3A0B-33ED-11D3-8470-00C04F79DBC0}")
$IID_IWMDMOperation2 = GUID$("{33445B48-7DF7-425C-AD8F-0FC6D82F9F75}")
$IID_IWMDMOperation3 = GUID$("{D1F9B46A-9CA8-46D8-9D0F-1EC9BAE54919}")
$IID_IWMDMProgress2 = GUID$("{3A43F550-B383-4E92-B04A-E6BBC660FEFC}")
$IID_IWMDMProgress3 = GUID$("{21DE01CB-3BB4-4929-B21A-17AF3F80F658}")
$IID_IWMDMDevice2 = GUID$("{E34F3D37-9D67-4FC1-9252-62D28B2F8B55}")
$IID_IWMDMDevice3 = GUID$("{6C03E4FE-05DB-4DDA-9E3C-06233A6D5D65}")
$IID_IWMDMDeviceSession = GUID$("{82AF0A65-9D96-412C-83E5-3C43E4B06CC7}")
$IID_IWMDMDeviceControl = GUID$("{1DCB3A04-33ED-11D3-8470-00C04F79DBC0}")
$IID_IWMDMStorageControl = GUID$("{1DCB3A08-33ED-11D3-8470-00C04F79DBC0}")
$IID_IWMDMStorageControl2 = GUID$("{972C2E88-BD6C-4125-8E09-84F837E637B6}")
$IID_IWMDMStorageControl3 = GUID$("{B3266365-D4F3-4696-8D53-BD27EC60993A}")
$IID_IWMDMObjectInfo = GUID$("{1DCB3A09-33ED-11D3-8470-00C04F79DBC0}")
$IID_IWMDMNotification = GUID$("{3F5E95C0-0F43-4ED4-93D2-C89A45D59B81}")
$IID_IMDServiceProvider = GUID$("{1DCB3A10-33ED-11D3-8470-00C04F79DBC0}")
$IID_IMDServiceProvider2 = GUID$("{B2FA24B7-CDA3-4694-9862-413AE1A34819}")
$IID_IMDServiceProvider3 = GUID$("{4ED13EF3-A971-4D19-9F51-0E1826B2DA57}")
$IID_IMDSPEnumDevice = GUID$("{1DCB3A11-33ED-11D3-8470-00C04F79DBC0}")
$IID_IMDSPDevice = GUID$("{1DCB3A12-33ED-11D3-8470-00C04F79DBC0}")
$IID_IMDSPDevice2 = GUID$("{420D16AD-C97D-4E00-82AA-00E9F4335DDD}")
$IID_IMDSPDevice3 = GUID$("{1A839845-FC55-487C-976F-EE38AC0E8C4E}")
$IID_IMDSPDeviceControl = GUID$("{1DCB3A14-33ED-11D3-8470-00C04F79DBC0}")
$IID_IMDSPEnumStorage = GUID$("{1DCB3A15-33ED-11D3-8470-00C04F79DBC0}")
$IID_IMDSPStorage = GUID$("{1DCB3A16-33ED-11D3-8470-00C04F79DBC0}")
$IID_IMDSPStorage2 = GUID$("{0A5E07A5-6454-4451-9C36-1C6AE7E2B1D6}")
$IID_IMDSPStorage3 = GUID$("{6C669867-97ED-4A67-9706-1C5529D2A414}")
$IID_IMDSPStorage4 = GUID$("{3133B2C4-515C-481B-B1CE-39327ECB4F74}")
$IID_IMDSPStorageGlobals = GUID$("{1DCB3A17-33ED-11D3-8470-00C04F79DBC0}")
$IID_IMDSPObjectInfo = GUID$("{1DCB3A19-33ED-11D3-8470-00C04F79DBC0}")
$IID_IMDSPObject = GUID$("{1DCB3A18-33ED-11D3-8470-00C04F79DBC0}")
$IID_IMDSPObject2 = GUID$("{3F34CD3E-5907-4341-9AF9-97F4187C3AA5}")
$IID_IMDSPDirectTransfer = GUID$("{C2FE57A8-9304-478C-9EE4-47E397B912D7}")
$IID_IMDSPRevoked = GUID$("{A4E8F2D4-3F31-464D-B53D-4FC335998184}")
$IID_ISCPSecureAuthenticate = GUID$("{1DCB3A0F-33ED-11D3-8470-00C04F79DBC0}")
$IID_ISCPSecureAuthenticate2 = GUID$("{B580CFAE-1672-47E2-ACAA-44BBECBCAE5B}")
$IID_ISCPSecureAuthenticate2 = GUID$("{B580CFAE-1672-47E2-ACAA-44BBECBCAE5B}")
$IID_ISCPSecureQuery = GUID$("{1DCB3A0D-33ED-11D3-8470-00C04F79DBC0}")
$IID_ISCPSecureQuery2 = GUID$("{EBE17E25-4FD7-4632-AF46-6D93D4FCC72E}")
$IID_ISCPSecureQuery3 = GUID$("{B7EDD1A2-4DAB-484B-B3C5-AD39B8B4C0B1}")
$IID_ISCPSecureExchange = GUID$("{1DCB3A0E-33ED-11D3-8470-00C04F79DBC0}")
$IID_ISCPSecureExchange2 = GUID$("{6C62FC7B-2690-483F-9D44-0A20CB35577C}")
$IID_ISCPSecureExchange3 = GUID$("{AB4E77E4-8908-4B17-BD2A-B1DBE6DD69E1}")
$IID_ISCPSession = GUID$("{88A3E6ED-EEE4-4619-BBB3-FD4FB62715D1}")
$IID_IComponentAuthenticate = GUID$("{A9889C00-6D2B-11D3-8496-00C04F79DBC0}")
#IF NOT %DEF(%DEFINE_WMDM_DEVICE_PROTOCOL_MTP)
%EQUATE `DEFINE_WMDM_DEVICE_PROTOCOL_MTP = 1
$WMDM_DEVICE_PROTOCOL_MTP = GUID$("{979E54E5-0AFC-4604-8D93-DC798A4BCF45}")
#ENDIF
#IF NOT %DEF(%DEFINE_WMDM_DEVICE_PROTOCOL_RAPI)
%EQUATE `DEFINE_WMDM_DEVICE_PROTOCOL_RAPI = 1
$WMDM_DEVICE_PROTOCOL_RAPI = GUID$("{2A11ED91-8C8F-41E4-82D1-8386E003561C}")
#ENDIF
#IF NOT %DEF(%DEFINE_WMDM_DEVICE_PROTOCOL_MSC)
%EQUATE `DEFINE_WMDM_DEVICE_PROTOCOL_MSC = 1
$WMDM_DEVICE_PROTOCOL_MSC = GUID$("{A4D2C26C-A881-44BB-BD5D-1F703C71F7A9}")
#ENDIF
#IF NOT %DEF(%DEFINE_WMDM_SERVICE_PROVIDER_VENDOR_MICROSOFT)
%EQUATE `DEFINE_WMDM_SERVICE_PROVIDER_VENDOR_MICROSOFT = 1
$WMDM_SERVICE_PROVIDER_VENDOR_MICROSOFT = GUID$("{7DE8686D-78EE-43EA-A496-C625AC91CC5D}")
#ENDIF
' ========================================================================================
' enum WMDM_TAG_DATATYPE
' ========================================================================================
%EQUATE `WMDM_TYPE_DWORD = 0
%EQUATE `WMDM_TYPE_STRING = 1
%EQUATE `WMDM_TYPE_BINARY = 2
%EQUATE `WMDM_TYPE_BOOL = 3
%EQUATE `WMDM_TYPE_QWORD = 4
%EQUATE `WMDM_TYPE_WORD = 5
%EQUATE `WMDM_TYPE_GUID = 6
%EQUATE `WMDM_TYPE_DATE = 7
' ========================================================================================
' enum WMDM_SESSION_TYPE
' ========================================================================================
%EQUATE `WMDM_SESSION_NONE = 0
%EQUATE `WMDM_SESSION_TRANSFER_TO_DEVICE = &H1
%EQUATE `WMDM_SESSION_TRANSFER_FROM_DEVICE = &H10
%EQUATE `WMDM_SESSION_DELETE = &H100
%EQUATE `WMDM_SESSION_CUSTOM = &H1000
' ========================================================================================
' WMFILECAPABILITIES structure
' ========================================================================================
' // Size = 8 bytes
TYPE WMFILECAPABILITIES DWORD
 pwszMimeType AS WSTRINGZ PTR
 dwReserved AS DWORD
END TYPE
' ========================================================================================
' OPAQUECOMMAND structure
' ========================================================================================
' // Size = 44 bytes
TYPE OPAQUECOMMAND DWORD
 guidCommand AS GUID ' GUID
 dwDataLen AS DWORD
 pData AS BYTE PTR ' BYTE *
 abMAC(19) AS BYTE ' BYTE[20]
END TYPE
%EQUATE `WMDMID_LENGTH = 128
' ========================================================================================
' WMDMID structure
' ========================================================================================
' // Size = 140 bytes
TYPE WMDMID DWORD
 cbSize AS DWORD ' UINT
 dwVendorID AS DWORD
 pID AS STRING * 128 ' BYTE - serial number
 SerialNumberLength AS DWORD ' UINT
END TYPE
' ========================================================================================
' WMDMDATETIME structure
' ========================================================================================
' // Size = 12 bytes
TYPE WMDMDATETIME WORD
 wYear AS WORD
 wMonth AS WORD
 wDay AS WORD
 wHour AS WORD
 wMinute AS WORD
 wSecond AS WORD
END TYPE
' ========================================================================================
' WMDMRIGHTS structure
' ========================================================================================
' // Size = 36 bytes
TYPE WMDMRIGHTS DWORD
 cbSize AS DWORD ' UINT
 dwContentType AS DWORD
 fuFlags AS DWORD
 fuRights AS DWORD
 dwAppSec AS DWORD
 dwPlaybackCount AS DWORD
 ExpirationDate AS WMDMDATETIME
END TYPE
' ========================================================================================
' WMDMMetadataView structure
' ========================================================================================
' // Size = 12 bytes
TYPE WMDMMetadataView DWORD
 pwszViewName AS WSTRINGZ PTR ' WCHAR *
 nDepth AS DWORD ' UINT
 ppwszTags AS DWORD ' WCHAR ** [array]
END TYPE
' ========================================================================================
' enum WMDM_STORAGE_ENUM_MODE
' ========================================================================================
%EQUATE `ENUM_MODE_RAW = 0
%EQUATE `ENUM_MODE_USE_DEVICE_PREF = %ENUM_MODE_RAW + 1
%EQUATE `ENUM_MODE_METADATA_VIEWS = %ENUM_MODE_USE_DEVICE_PREF + 1
' ========================================================================================
' enum WMDM_FORMATCODE
' ========================================================================================
%EQUATE `WMDM_FORMATCODE_NOTUSED = 0
%EQUATE `WMDM_FORMATCODE_ALLIMAGES = &Hffffffff
%EQUATE `WMDM_FORMATCODE_UNDEFINED = &H3000
%EQUATE `WMDM_FORMATCODE_ASSOCIATION = &H3001
%EQUATE `WMDM_FORMATCODE_SCRIPT = &H3002
%EQUATE `WMDM_FORMATCODE_EXECUTABLE = &H3003
%EQUATE `WMDM_FORMATCODE_TEXT = &H3004
%EQUATE `WMDM_FORMATCODE_HTML = &H3005
%EQUATE `WMDM_FORMATCODE_DPOF = &H3006
%EQUATE `WMDM_FORMATCODE_AIFF = &H3007
%EQUATE `WMDM_FORMATCODE_WAVE = &H3008
%EQUATE `WMDM_FORMATCODE_MP3 = &H3009
%EQUATE `WMDM_FORMATCODE_AVI = &H300a
%EQUATE `WMDM_FORMATCODE_MPEG = &H300b
%EQUATE `WMDM_FORMATCODE_ASF = &H300c
%EQUATE `WMDM_FORMATCODE_RESERVED_FIRST = &H300d
%EQUATE `WMDM_FORMATCODE_RESERVED_LAST = &H37ff
%EQUATE `WMDM_FORMATCODE_IMAGE_UNDEFINED = &H3800
%EQUATE `WMDM_FORMATCODE_IMAGE_EXIF = &H3801
%EQUATE `WMDM_FORMATCODE_IMAGE_TIFFEP = &H3802
%EQUATE `WMDM_FORMATCODE_IMAGE_FLASHPIX = &H3803
%EQUATE `WMDM_FORMATCODE_IMAGE_BMP = &H3804
%EQUATE `WMDM_FORMATCODE_IMAGE_CIFF = &H3805
%EQUATE `WMDM_FORMATCODE_IMAGE_GIF = &H3807
%EQUATE `WMDM_FORMATCODE_IMAGE_JFIF = &H3808
%EQUATE `WMDM_FORMATCODE_IMAGE_PCD = &H3809
%EQUATE `WMDM_FORMATCODE_IMAGE_PICT = &H380a
%EQUATE `WMDM_FORMATCODE_IMAGE_PNG = &H380b
%EQUATE `WMDM_FORMATCODE_IMAGE_TIFF = &H380d
%EQUATE `WMDM_FORMATCODE_IMAGE_TIFFIT = &H380e
%EQUATE `WMDM_FORMATCODE_IMAGE_JP2 = &H380f
%EQUATE `WMDM_FORMATCODE_IMAGE_JPX = &H3810
%EQUATE `WMDM_FORMATCODE_IMAGE_RESERVED_FIRST = &H3811
%EQUATE `WMDM_FORMATCODE_IMAGE_RESERVED_LAST = &H3fff
%EQUATE `WMDM_FORMATCODE_UNDEFINEDFIRMWARE = &Hb802
%EQUATE `WMDM_FORMATCODE_WINDOWSIMAGEFORMAT = &Hb881
%EQUATE `WMDM_FORMATCODE_UNDEFINEDAUDIO = &Hb900
%EQUATE `WMDM_FORMATCODE_WMA = &Hb901
%EQUATE `WMDM_FORMATCODE_OGG = &Hb902
%EQUATE `WMDM_FORMATCODE_AAC = &Hb903
%EQUATE `WMDM_FORMATCODE_AUDIBLE = &Hb904
%EQUATE `WMDM_FORMATCODE_FLAC = &Hb906
%EQUATE `WMDM_FORMATCODE_UNDEFINEDVIDEO = &Hb980
%EQUATE `WMDM_FORMATCODE_WMV = &Hb981
%EQUATE `WMDM_FORMATCODE_MP4 = &Hb982
%EQUATE `WMDM_FORMATCODE_MP2 = &Hb983
%EQUATE `WMDM_FORMATCODE_3GP = &Hb984
%EQUATE `WMDM_FORMATCODE_UNDEFINEDCOLLECTION = &Hba00
%EQUATE `WMDM_FORMATCODE_ABSTRACTMULTIMEDIAALBUM = &Hba01
%EQUATE `WMDM_FORMATCODE_ABSTRACTIMAGEALBUM = &Hba02
%EQUATE `WMDM_FORMATCODE_ABSTRACTAUDIOALBUM = &Hba03
%EQUATE `WMDM_FORMATCODE_ABSTRACTVIDEOALBUM = &Hba04
%EQUATE `WMDM_FORMATCODE_ABSTRACTAUDIOVIDEOPLAYLIST = &Hba05
%EQUATE `WMDM_FORMATCODE_ABSTRACTCONTACTGROUP = &Hba06
%EQUATE `WMDM_FORMATCODE_ABSTRACTMESSAGEFOLDER = &Hba07
%EQUATE `WMDM_FORMATCODE_ABSTRACTCHAPTEREDPRODUCTION = &Hba08
%EQUATE `WMDM_FORMATCODE_MEDIA_CAST = &Hba0b
%EQUATE `WMDM_FORMATCODE_WPLPLAYLIST = &Hba10
%EQUATE `WMDM_FORMATCODE_M3UPLAYLIST = &Hba11
%EQUATE `WMDM_FORMATCODE_MPLPLAYLIST = &Hba12
%EQUATE `WMDM_FORMATCODE_ASXPLAYLIST = &Hba13
%EQUATE `WMDM_FORMATCODE_PLSPLAYLIST = &Hba14
%EQUATE `WMDM_FORMATCODE_UNDEFINEDDOCUMENT = &Hba80
%EQUATE `WMDM_FORMATCODE_ABSTRACTDOCUMENT = &Hba81
%EQUATE `WMDM_FORMATCODE_XMLDOCUMENT = &Hba82
%EQUATE `WMDM_FORMATCODE_MICROSOFTWORDDOCUMENT = &Hba83
%EQUATE `WMDM_FORMATCODE_MHTCOMPILEDHTMLDOCUMENT = &Hba84
%EQUATE `WMDM_FORMATCODE_MICROSOFTEXCELSPREADSHEET = &Hba85
%EQUATE `WMDM_FORMATCODE_MICROSOFTPOWERPOINTDOCUMENT = &Hba86
%EQUATE `WMDM_FORMATCODE_UNDEFINEDMESSAGE = &Hbb00
%EQUATE `WMDM_FORMATCODE_ABSTRACTMESSAGE = &Hbb01
%EQUATE `WMDM_FORMATCODE_UNDEFINEDCONTACT = &Hbb80
%EQUATE `WMDM_FORMATCODE_ABSTRACTCONTACT = &Hbb81
%EQUATE `WMDM_FORMATCODE_VCARD2 = &Hbb82
%EQUATE `WMDM_FORMATCODE_VCARD3 = &Hbb83
%EQUATE `WMDM_FORMATCODE_UNDEFINEDCALENDARITEM = &Hbe00
%EQUATE `WMDM_FORMATCODE_ABSTRACTCALENDARITEM = &Hbe01
%EQUATE `WMDM_FORMATCODE_VCALENDAR1 = &Hbe02
%EQUATE `WMDM_FORMATCODE_VCALENDAR2 = &Hbe03
%EQUATE `WMDM_FORMATCODE_UNDEFINEDWINDOWSEXECUTABLE = &Hbe80
%EQUATE `WMDM_FORMATCODE_M4A = &H4d503441
%EQUATE `WMDM_FORMATCODE_3GPA = &H33475041
%EQUATE `WMDM_FORMATCODE_SECTION = &Hbe82
' ========================================================================================
' enum WMDM_ENUM_PROP_VALID_VALUES_FORM
' ========================================================================================
%EQUATE `WMDM_ENUM_PROP_VALID_VALUES_ANY = 0
%EQUATE `WMDM_ENUM_PROP_VALID_VALUES_RANGE = %WMDM_ENUM_PROP_VALID_VALUES_ANY + 1
%EQUATE `WMDM_ENUM_PROP_VALID_VALUES_ENUM = %WMDM_ENUM_PROP_VALID_VALUES_RANGE + 1
' ========================================================================================
' WMDM_PROP_VALUES_RANGE structure
' ========================================================================================
' // Size = 48 bytes
TYPE WMDM_PROP_VALUES_RANGE DWORD
 rangeMin AS PROPVARIANT
 rangeMax AS PROPVARIANT
 rangeStep AS PROPVARIANT
END TYPE
' ========================================================================================
' WMDM_PROP_VALUES_ENUM structure
' ========================================================================================
' // Size = 8 bytes
TYPE WMDM_PROP_VALUES_ENUM DWORD
 cEnumValues AS DWORD ' UINT
 pValues AS PROPVARIANT PTR ' PROPVARIANT*
END TYPE
' ========================================================================================
' WMDM_PROP_DESC structure
' ========================================================================================
'typedef struct _WMDM_PROP_DESC
' {
' LPWSTR pwszPropName;
' WMDM_ENUM_PROP_VALID_VALUES_FORM ValidValuesForm;
' union
' {
' /* Empty union arm */
' WMDM_PROP_VALUES_RANGE ValidValuesRange;
' WMDM_PROP_VALUES_ENUM EnumeratedValidValues;
' } ValidValues;
' } WMDM_PROP_DESC;
' // Size = 48 bytes
UNION WMDM_PROP_DESC_UNION DWORD
 ValidValuesRange AS WMDM_PROP_VALUES_RANGE
 EnumeratedValidValues AS WMDM_PROP_VALUES_ENUM
END UNION
' // Size = 56 bytes
TYPE WMDM_PROP_DESC DWORD
 pwszPropName AS WSTRINGZ PTR
 ValidValuesForm AS LONG ' WMDM_ENUM_PROP_VALID_VALUES_FORM
 ValidValues AS WMDM_PROP_DESC_UNION
END TYPE
' ========================================================================================
' WMDM_PROP_CONFIG structure
' ========================================================================================
' // Size = 12 bytes
TYPE WMDM_PROP_CONFIG DWORD
 nPreference AS DWORD ' UINT
 nPropDesc AS DWORD ' UINT
 pPropDesc AS WMDM_PROP_DESC PTR ' WMDM_PROP_DESC*
END TYPE
' ========================================================================================
' WMDM_FORMAT_CAPABILITY structure
' ========================================================================================
' // Size = 8 bytes
TYPE WMDM_FORMAT_CAPABILITY DWORD
 nPropConfig AS DWORD ' UINT
 pConfigs AS WMDM_PROP_CONFIG PTR ' WMDM_PROP_CONFIG*
END TYPE
%EQUATE `WMDM_MAC_LENGTH = 8
' ========================================================================================
' enum WMDM_FIND_SCOPE
' ========================================================================================
%EQUATE `WMDM_FIND_SCOPE_GLOBAL = 0
%EQUATE `WMDM_FIND_SCOPE_IMMEDIATE_CHILDREN = %WMDM_FIND_SCOPE_GLOBAL + 1
' ========================================================================================
' WMDM HRESULTS
' ========================================================================================
'//
'//Success codes
'//
%EQUATE `WMDM_S_NOT_ALL_PROPERTIES_APPLIED = &H00045001&
%EQUATE `WMDM_S_NOT_ALL_PROPERTIES_RETRIEVED = &H00045002&
'//
'//Error codes
'//
%EQUATE `WMDM_E_BUSY = &H80045000&
%EQUATE `WMDM_E_INTERFACEDEAD = &H80045001&
%EQUATE `WMDM_E_INVALIDTYPE = &H80045002&
%EQUATE `WMDM_E_PROCESSFAILED = &H80045003&
%EQUATE `WMDM_E_NOTSUPPORTED = &H80045004&
%EQUATE `WMDM_E_NOTCERTIFIED = &H80045005&
%EQUATE `WMDM_E_NORIGHTS = &H80045006&
%EQUATE `WMDM_E_CALL_OUT_OF_SEQUENCE = &H80045007&
%EQUATE `WMDM_E_BUFFERTOOSMALL = &H80045008&
%EQUATE `WMDM_E_MOREDATA = &H80045009&
%EQUATE `WMDM_E_MAC_CHECK_FAILED = &H8004500A&
%EQUATE `WMDM_E_USER_CANCELLED = &H8004500B&
%EQUATE `WMDM_E_SDMI_TRIGGER = &H8004500C&
%EQUATE `WMDM_E_SDMI_NOMORECOPIES = &H8004500D&
%EQUATE `WMDM_E_REVOKED = &H8004500E&
%EQUATE `WMDM_E_LICENSE_NOTEXIST = &H8004500F&
%EQUATE `WMDM_E_INCORRECT_APPSEC = &H80045010&
%EQUATE `WMDM_E_INCORRECT_RIGHTS = &H80045011&
%EQUATE `WMDM_E_LICENSE_EXPIRED = &H80045012&
%EQUATE `WMDM_E_CANTOPEN_PMSN_SERVICE_PIPE = &H80045013&
%EQUATE `WMDM_E_TOO_MANY_SESSIONS = &H80045013&
'// Revocation Flags
%EQUATE `WMDM_WMDM_REVOKED = &H00000001
%EQUATE `WMDM_APP_REVOKED = &H00000002
%EQUATE `WMDM_SP_REVOKED = &H00000004
%EQUATE `WMDM_SCP_REVOKED = &H00000008
'// GetFormatSupport2 Flags
%EQUATE `WMDM_GET_FORMAT_SUPPORT_AUDIO = &H00000001
%EQUATE `WMDM_GET_FORMAT_SUPPORT_VIDEO = &H00000002
%EQUATE `WMDM_GET_FORMAT_SUPPORT_FILE = &H00000004
'// MDMRIGHTS Flags
%EQUATE `WMDM_RIGHTS_PLAYBACKCOUNT = &H00000001
%EQUATE `WMDM_RIGHTS_EXPIRATIONDATE = &H00000002
%EQUATE `WMDM_RIGHTS_GROUPID = &H00000004
%EQUATE `WMDM_RIGHTS_FREESERIALIDS = &H00000008
%EQUATE `WMDM_RIGHTS_NAMEDSERIALIDS = &H00000010
'// Device Type Flags
%EQUATE `WMDM_DEVICE_TYPE_PLAYBACK = &H00000001
%EQUATE `WMDM_DEVICE_TYPE_RECORD = &H00000002
%EQUATE `WMDM_DEVICE_TYPE_DECODE = &H00000004
%EQUATE `WMDM_DEVICE_TYPE_ENCODE = &H00000008
%EQUATE `WMDM_DEVICE_TYPE_STORAGE = &H00000010
%EQUATE `WMDM_DEVICE_TYPE_VIRTUAL = &H00000020
%EQUATE `WMDM_DEVICE_TYPE_SDMI = &H00000040
%EQUATE `WMDM_DEVICE_TYPE_NONSDMI = &H00000080
%EQUATE `WMDM_DEVICE_TYPE_NONREENTRANT = &H00000100
%EQUATE `WMDM_DEVICE_TYPE_FILELISTRESYNC = &H00000200
%EQUATE `WMDM_DEVICE_TYPE_VIEW_PREF_METADATAVIEW = &H00000400
'// Device Power Source Flags
%EQUATE `WMDM_POWER_CAP_BATTERY = &H00000001
%EQUATE `WMDM_POWER_CAP_EXTERNAL = &H00000002
%EQUATE `WMDM_POWER_IS_BATTERY = &H00000004
%EQUATE `WMDM_POWER_IS_EXTERNAL = &H00000008
%EQUATE `WMDM_POWER_PERCENT_AVAILABLE = &H00000010
'// Device Status Flags
%EQUATE `WMDM_STATUS_READY = &H00000001
%EQUATE `WMDM_STATUS_BUSY = &H00000002
%EQUATE `WMDM_STATUS_DEVICE_NOTPRESENT = &H00000004
%EQUATE `WMDM_STATUS_DEVICECONTROL_PLAYING = &H00000008
%EQUATE `WMDM_STATUS_DEVICECONTROL_RECORDING = &H00000010
%EQUATE `WMDM_STATUS_DEVICECONTROL_PAUSED = &H00000020
%EQUATE `WMDM_STATUS_DEVICECONTROL_REMOTE = &H00000040
%EQUATE `WMDM_STATUS_DEVICECONTROL_STREAM = &H00000080
%EQUATE `WMDM_STATUS_STORAGE_NOTPRESENT = &H00000100
%EQUATE `WMDM_STATUS_STORAGE_INITIALIZING = &H00000200
%EQUATE `WMDM_STATUS_STORAGE_BROKEN = &H00000400
%EQUATE `WMDM_STATUS_STORAGE_NOTSUPPORTED = &H00000800
%EQUATE `WMDM_STATUS_STORAGE_UNFORMATTED = &H00001000
%EQUATE `WMDM_STATUS_STORAGECONTROL_INSERTING = &H00002000
%EQUATE `WMDM_STATUS_STORAGECONTROL_DELETING = &H00004000
%EQUATE `WMDM_STATUS_STORAGECONTROL_APPENDING = &H00008000
%EQUATE `WMDM_STATUS_STORAGECONTROL_MOVING = &H00010000
%EQUATE `WMDM_STATUS_STORAGECONTROL_READING = &H00020000
'// Device Capabilities Flags
%EQUATE `WMDM_DEVICECAP_CANPLAY = &H00000001
%EQUATE `WMDM_DEVICECAP_CANSTREAMPLAY = &H00000002
%EQUATE `WMDM_DEVICECAP_CANRECORD = &H00000004
%EQUATE `WMDM_DEVICECAP_CANSTREAMRECORD = &H00000008
%EQUATE `WMDM_DEVICECAP_CANPAUSE = &H00000010
%EQUATE `WMDM_DEVICECAP_CANRESUME = &H00000020
%EQUATE `WMDM_DEVICECAP_CANSTOP = &H00000040
%EQUATE `WMDM_DEVICECAP_CANSEEK = &H00000080
%EQUATE `WMDM_DEVICECAP_HASSECURECLOCK = &H00000100
'// WMDM Seek Flags
%EQUATE `WMDM_SEEK_REMOTECONTROL = &H00000001
%EQUATE `WMDM_SEEK_STREAMINGAUDIO = &H00000002
'// Storage Attributes Flags
%EQUATE `WMDM_STORAGE_ATTR_FILESYSTEM = &H00000001
%EQUATE `WMDM_STORAGE_ATTR_REMOVABLE = &H00000002
%EQUATE `WMDM_STORAGE_ATTR_NONREMOVABLE = &H00000004
%EQUATE `WMDM_FILE_ATTR_FOLDER = &H00000008
%EQUATE `WMDM_FILE_ATTR_LINK = &H00000010
%EQUATE `WMDM_FILE_ATTR_FILE = &H00000020
%EQUATE `WMDM_FILE_ATTR_VIDEO = &H00000040
%EQUATE `WMDM_STORAGE_ATTR_CANEDITMETADATA = &H00000080
%EQUATE `WMDM_STORAGE_ATTR_FOLDERS = &H00000100
%EQUATE `WMDM_FILE_ATTR_AUDIO = &H00001000
%EQUATE `WMDM_FILE_ATTR_DATA = &H00002000
%EQUATE `WMDM_FILE_ATTR_CANPLAY = &H00004000
%EQUATE `WMDM_FILE_ATTR_CANDELETE = &H00008000
%EQUATE `WMDM_FILE_ATTR_CANMOVE = &H00010000
%EQUATE `WMDM_FILE_ATTR_CANRENAME = &H00020000
%EQUATE `WMDM_FILE_ATTR_CANREAD = &H00040000
%EQUATE `WMDM_FILE_ATTR_MUSIC = &H00080000
%EQUATE `WMDM_FILE_CREATE_OVERWRITE = &H00100000
%EQUATE `WMDM_FILE_ATTR_AUDIOBOOK = &H00200000
%EQUATE `WMDM_FILE_ATTR_HIDDEN = &H00400000
%EQUATE `WMDM_FILE_ATTR_SYSTEM = &H00800000
%EQUATE `WMDM_FILE_ATTR_READONLY = &H01000000
%EQUATE `WMDM_STORAGE_ATTR_HAS_FOLDERS = &H02000000
%EQUATE `WMDM_STORAGE_ATTR_HAS_FILES = &H04000000
%EQUATE `WMDM_STORAGE_IS_DEFAULT = &H08000000
%EQUATE `WMDM_STORAGE_CONTAINS_DEFAULT = &H10000000
%EQUATE `WMDM_STORAGE_ATTR_VIRTUAL = &H20000000
'// Storage Capabilities Flags
%EQUATE `WMDM_STORAGECAP_FOLDERSINROOT = &H00000001
%EQUATE `WMDM_STORAGECAP_FILESINROOT = &H00000002
%EQUATE `WMDM_STORAGECAP_FOLDERSINFOLDERS = &H00000004
%EQUATE `WMDM_STORAGECAP_FILESINFOLDERS = &H00000008
%EQUATE `WMDM_STORAGECAP_FOLDERLIMITEXISTS = &H00000010
%EQUATE `WMDM_STORAGECAP_FILELIMITEXISTS = &H00000020
%EQUATE `WMDM_STORAGECAP_NOT_INITIALIZABLE = &H00000040
'// WMDM Mode Flags
%EQUATE `WMDM_MODE_BLOCK = &H00000001
%EQUATE `WMDM_MODE_THREAD = &H00000002
%EQUATE `WMDM_CONTENT_FILE = &H00000004
%EQUATE `WMDM_CONTENT_FOLDER = &H00000008
%EQUATE `WMDM_CONTENT_OPERATIONINTERFACE = &H00000010
%EQUATE `WMDM_MODE_QUERY = &H00000020
%EQUATE `WMDM_MODE_PROGRESS = &H00000040
%EQUATE `WMDM_MODE_TRANSFER_PROTECTED = &H00000080
%EQUATE `WMDM_MODE_TRANSFER_UNPROTECTED = &H00000100
%EQUATE `WMDM_STORAGECONTROL_INSERTBEFORE = &H00000200
%EQUATE `WMDM_STORAGECONTROL_INSERTAFTER = &H00000400
%EQUATE `WMDM_STORAGECONTROL_INSERTINTO = &H00000800
%EQUATE `WMDM_MODE_RECURSIVE = &H00001000
'// WMDM Rights Flags
'// NON_SDMI = !SDMI_PROTECTED
'// SDMI = SDMI_VALIDATED
%EQUATE `WMDM_RIGHTS_PLAY_ON_PC = &H00000001
%EQUATE `WMDM_RIGHTS_COPY_TO_NON_SDMI_DEVICE = &H00000002
%EQUATE `WMDM_RIGHTS_COPY_TO_CD = &H00000008
%EQUATE `WMDM_RIGHTS_COPY_TO_SDMI_DEVICE = &H00000010
'// WMDM Seek Flags
%EQUATE `WMDM_SEEK_BEGIN = &H00000001
%EQUATE `WMDM_SEEK_CURRENT = &H00000002
%EQUATE `WMDM_SEEK_END = &H00000008
'// WMDM Device Enumeration Flags
%EQUATE `DO_NOT_VIRTUALIZE_STORAGES_AS_DEVICES = &H00000001
%EQUATE `ALLOW_OUTOFBAND_NOTIFICATION = &H00000002
' ========================================================================================
' enum WMDMMessage
' ========================================================================================
%EQUATE `WMDM_MSG_DEVICE_ARRIVAL = 0
%EQUATE `WMDM_MSG_DEVICE_REMOVAL = %WMDM_MSG_DEVICE_ARRIVAL + 1
%EQUATE `WMDM_MSG_MEDIA_ARRIVAL = %WMDM_MSG_DEVICE_REMOVAL + 1
%EQUATE `WMDM_MSG_MEDIA_REMOVAL = %WMDM_MSG_MEDIA_ARRIVAL + 1
' ########################################################################################
' Interface name = IWMDMMetaData
' IID = {EC3B0663-0951-460A-9A80-0DCEED3C043C}
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IWMDMMetaData_INTERFACE_DEFINED)
 %IWMDMMetaData_INTERFACE_DEFINED = 1
INTERFACE IWMDMMetaData $IID_IWMDMMetaData
 INHERIT IUnknown
 ' =====================================================================================
 METHOD AddItem ( ' VTable offset = 12
 BYVAL Type AS LONG
 , BYREF pwszTagName AS WSTRINGZ
 , BYVAL pValue AS BYTE PTR
 , BYVAL iLength AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD QueryByName ( ' VTable offset = 16
 BYREF pwszTagName AS WSTRINGZ
 , BYREF Type AS LONG
 , BYREF pValue AS DWORD
 , BYREF pcbLength AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD QueryByIndex ( ' VTable offset = 20
 BYVAL iIndex AS DWORD
 , BYREF ppwszName AS DWORD
 , BYREF pType AS LONG
 , BYREF ppValue AS DWORD
 , BYREF pcbLength AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetItemCount ( ' VTable offset = 24
 BYREF iCount AS DWORD
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IWMDMMetaData_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IWMDeviceManager
' IID = {1DCB3A00-33ED-11D3-8470-00C04F79DBC0}
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IWMDeviceManager_INTERFACE_DEFINED)
 %IWMDeviceManager_INTERFACE_DEFINED = 1
INTERFACE IWMDeviceManager $IID_IWMDeviceManager
 INHERIT IUnknown
 ' =====================================================================================
 METHOD GetRevision ( ' VTable offset = 12
 BYREF pdwRevision AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetDeviceCount ( ' VTable offset = 16
 BYREF pdwCount AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD EnumDevices ( ' VTable offset = 20
 BYREF ppEnumDevice AS IWMDMEnumDevice
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IWMDeviceManager_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IWMDeviceManager2
' IID = {923E5249-8731-4C5B-9B1C-B8B60B6E46AF}
' Inherited interface = IWMDeviceManager
' ########################################################################################
#IF NOT %DEF(%IWMDeviceManager2_INTERFACE_DEFINED)
 %IWMDeviceManager2_INTERFACE_DEFINED = 1
INTERFACE IWMDeviceManager2 $IID_IWMDeviceManager2
 INHERIT IUnknown
 ' =====================================================================================
 ' IWMDeviceManager Methods
 ' =====================================================================================
 METHOD GetRevision ( ' VTable offset = 12
 BYREF pdwRevision AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetDeviceCount ( ' VTable offset = 16
 BYREF pdwCount AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD EnumDevices ( ' VTable offset = 20
 BYREF ppEnumDevice AS IWMDMEnumDevice
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IWMDeviceManager2 Methods
 ' =====================================================================================
 METHOD GetDeviceFromCanonicalName ( ' VTable offset = 24
 BYREF pwszCanonicalName AS WSTRINGZ
 , BYREF ppDevice AS IWMDMDevice
 ) AS LONG
 ' =====================================================================================
 METHOD EnumDevices2 ( ' VTable offset = 28
 BYREF ppEnumDevice AS IWMDMEnumDevice
 ) AS LONG
 ' =====================================================================================
 METHOD Reinitialize ( ' VTable offset = 32
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IWMDeviceManager2_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IWMDeviceManager3
' IID = {AF185C41-100D-46ED-BE2E-9CE8C44594EF}
' Inherited interface = IWMDeviceManager2
' ########################################################################################
#IF NOT %DEF(%IWMDeviceManager3_INTERFACE_DEFINED)
 %IWMDeviceManager3_INTERFACE_DEFINED = 1
INTERFACE IWMDeviceManager3 $IID_IWMDeviceManager3
 INHERIT IUnknown
 ' =====================================================================================
 ' IWMDeviceManager Methods
 ' =====================================================================================
 METHOD GetRevision ( ' VTable offset = 12
 BYREF pdwRevision AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetDeviceCount ( ' VTable offset = 16
 BYREF pdwCount AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD EnumDevices ( ' VTable offset = 20
 BYREF ppEnumDevice AS IWMDMEnumDevice
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IWMDeviceManager2 Methods
 ' =====================================================================================
 METHOD GetDeviceFromCanonicalName ( ' VTable offset = 24
 BYREF pwszCanonicalName AS WSTRINGZ
 , BYREF ppDevice AS IWMDMDevice
 ) AS LONG
 ' =====================================================================================
 METHOD EnumDevices2 ( ' VTable offset = 28
 BYREF ppEnumDevice AS IWMDMEnumDevice
 ) AS LONG
 ' =====================================================================================
 METHOD Reinitialize ( ' VTable offset = 32
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IWMDeviceManager3 Methods
 ' =====================================================================================
 METHOD SetDeviceEnumPreference ( ' VTable offset = 36
 BYVAL dwEnumPref AS DWORD
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IWMDeviceManager3_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IWMDMStorageGlobals
' IID = {1DCB3A07-33ED-11D3-8470-00C04F79DBC0}
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IWMDMStorageGlobals_INTERFACE_DEFINED)
 %IWMDMStorageGlobals_INTERFACE_DEFINED = 1
INTERFACE IWMDMStorageGlobals $IID_IWMDMStorageGlobals
 INHERIT IUnknown
 ' =====================================================================================
 METHOD GetCapabilities ( ' VTable offset = 12
 BYREF pdwCapabilities AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetSerialNumber ( ' VTable offset = 16
 BYREF pSerialNum AS WMDMID
 , BYREF abMac AS BYTE
 ) AS LONG
 ' =====================================================================================
 METHOD GetTotalSize ( ' VTable offset = 20
 BYREF pdwTotalSizeLow AS DWORD
 , BYREF pdwTotalSizeHigh AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetTotalFree ( ' VTable offset = 24
 BYREF pdwFreeLow AS DWORD
 , BYREF pdwFreeHigh AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetTotalBad ( ' VTable offset = 28
 BYREF pdwBadLow AS DWORD
 , BYREF pdwBadHigh AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetStatus ( ' VTable offset = 32
 BYREF pdwStatus AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD Initialize ( ' VTable offset = 36
 BYVAL fuMode AS DWORD
 , BYVAL pProgress AS IWMDMProgress
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IWMDMStorageGlobals_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IWMDMStorage
' IID = {1DCB3A06-33ED-11D3-8470-00C04F79DBC0}
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IWMDMStorage_INTERFACE_DEFINED)
 %IWMDMStorage_INTERFACE_DEFINED = 1
INTERFACE IWMDMStorage $IID_IWMDMStorage
 INHERIT IUnknown
 ' =====================================================================================
 METHOD SetAttributes ( ' VTable offset = 12
 BYVAL dwAttributes AS DWORD
 , BYREF pFormat AS WAVEFORMATEX
 ) AS LONG
 ' =====================================================================================
 METHOD GetStorageGlobals ( ' VTable offset = 16
 BYREF ppStorageGlobals AS IWMDMStorageGlobals
 ) AS LONG
 ' =====================================================================================
 METHOD GetAttributes ( ' VTable offset = 20
 BYREF pdwAttributes AS DWORD
 , BYREF pFormat AS WAVEFORMATEX
 ) AS LONG
 ' =====================================================================================
 METHOD GetName ( ' VTable offset = 24
 BYREF pwszName AS WSTRINGZ
 , BYVAL nMaxChars AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetDate ( ' VTable offset = 28
 BYREF pDateTimeUTC AS WMDMDATETIME
 ) AS LONG
 ' =====================================================================================
 METHOD GetSize ( ' VTable offset = 32
 BYREF pdwSizeLow AS DWORD
 , BYREF pdwSizeHigh AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetRights ( ' VTable offset = 36
 BYREF ppRights AS WMDMRIGHTS
 , BYREF pnRightsCount AS DWORD
 , BYREF abMac AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD EnumStorage ( ' VTable offset = 40
 BYREF pEnumStorage AS IWMDMEnumStorage
 ) AS LONG
 ' =====================================================================================
 METHOD SendOpaqueCommand ( ' VTable offset = 44
 BYREF pCommand AS OPAQUECOMMAND
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IWMDMStorage_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IWMDMStorage2
' IID = {1ED5A144-5CD5-4683-9EFF-72CBDB2D9533}
' Inherited interface = IWMDMStorage
' ########################################################################################
#IF NOT %DEF(%IWMDMStorage2_INTERFACE_DEFINED)
 %IWMDMStorage2_INTERFACE_DEFINED = 1
INTERFACE IWMDMStorage2 $IID_IWMDMStorage2
 INHERIT IUnknown
 ' =====================================================================================
 ' IWMDMStorage Methods
 ' =====================================================================================
 METHOD SetAttributes ( ' VTable offset = 12
 BYVAL dwAttributes AS DWORD
 , BYREF pFormat AS WAVEFORMATEX
 ) AS LONG
 ' =====================================================================================
 METHOD GetStorageGlobals ( ' VTable offset = 16
 BYREF ppStorageGlobals AS IWMDMStorageGlobals
 ) AS LONG
 ' =====================================================================================
 METHOD GetAttributes ( ' VTable offset = 20
 BYREF pdwAttributes AS DWORD
 , BYREF pFormat AS WAVEFORMATEX
 ) AS LONG
 ' =====================================================================================
 METHOD GetName ( ' VTable offset = 24
 BYREF pwszName AS WSTRINGZ
 , BYVAL nMaxChars AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetDate ( ' VTable offset = 28
 BYREF pDateTimeUTC AS WMDMDATETIME
 ) AS LONG
 ' =====================================================================================
 METHOD GetSize ( ' VTable offset = 32
 BYREF pdwSizeLow AS DWORD
 , BYREF pdwSizeHigh AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetRights ( ' VTable offset = 36
 BYREF ppRights AS WMDMRIGHTS
 , BYREF pnRightsCount AS DWORD
 , BYREF abMac AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD EnumStorage ( ' VTable offset = 40
 BYREF pEnumStorage AS IWMDMEnumStorage
 ) AS LONG
 ' =====================================================================================
 METHOD SendOpaqueCommand ( ' VTable offset = 44
 BYREF pCommand AS OPAQUECOMMAND
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IWMDMStorage2 Methods
 ' =====================================================================================
 METHOD GetStorage ( ' VTable offset = 48
 BYREF pszStorageName AS WSTRINGZ
 , BYREF ppStorage AS IWMDMStorage
 ) AS LONG
 ' =====================================================================================
 METHOD SetAttributes2 ( ' VTable offset = 52
 BYVAL dwAttributes AS DWORD
 , BYVAL dwAttributesEx AS DWORD
 , BYREF pFormat AS WAVEFORMATEX
 , BYREF pVideoFormat AS VIDEOINFOHEADER
 ) AS LONG
 ' =====================================================================================
 METHOD GetAttributes2 ( ' VTable offset = 56
 BYREF pdwAttributes AS DWORD
 , BYREF pdwAttributesEx AS DWORD
 , BYREF pAudioFormat AS WAVEFORMATEX
 , BYREF pVideoFormat AS VIDEOINFOHEADER
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IWMDMStorage2_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IWMDMStorage3
' IID = {97717EEA-926A-464E-96A4-247B0216026E}
' Inherited interface = IWMDMStorage2
' ########################################################################################
#IF NOT %DEF(%IWMDMStorage3_INTERFACE_DEFINED)
 %IWMDMStorage3_INTERFACE_DEFINED = 1
INTERFACE IWMDMStorage3 $IID_IWMDMStorage3
 INHERIT IUnknown
 ' =====================================================================================
 ' IWMDMStorage Methods
 ' =====================================================================================
 METHOD SetAttributes ( ' VTable offset = 12
 BYVAL dwAttributes AS DWORD
 , BYREF pFormat AS WAVEFORMATEX
 ) AS LONG
 ' =====================================================================================
 METHOD GetStorageGlobals ( ' VTable offset = 16
 BYREF ppStorageGlobals AS IWMDMStorageGlobals
 ) AS LONG
 ' =====================================================================================
 METHOD GetAttributes ( ' VTable offset = 20
 BYREF pdwAttributes AS DWORD
 , BYREF pFormat AS WAVEFORMATEX
 ) AS LONG
 ' =====================================================================================
 METHOD GetName ( ' VTable offset = 24
 BYREF pwszName AS WSTRINGZ
 , BYVAL nMaxChars AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetDate ( ' VTable offset = 28
 BYREF pDateTimeUTC AS WMDMDATETIME
 ) AS LONG
 ' =====================================================================================
 METHOD GetSize ( ' VTable offset = 32
 BYREF pdwSizeLow AS DWORD
 , BYREF pdwSizeHigh AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetRights ( ' VTable offset = 36
 BYREF ppRights AS WMDMRIGHTS
 , BYREF pnRightsCount AS DWORD
 , BYREF abMac AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD EnumStorage ( ' VTable offset = 40
 BYREF pEnumStorage AS IWMDMEnumStorage
 ) AS LONG
 ' =====================================================================================
 METHOD SendOpaqueCommand ( ' VTable offset = 44
 BYREF pCommand AS OPAQUECOMMAND
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IWMDMStorage2 Methods
 ' =====================================================================================
 METHOD GetStorage ( ' VTable offset = 48
 BYREF pszStorageName AS WSTRINGZ
 , BYREF ppStorage AS IWMDMStorage
 ) AS LONG
 ' =====================================================================================
 METHOD SetAttributes2 ( ' VTable offset = 52
 BYVAL dwAttributes AS DWORD
 , BYVAL dwAttributesEx AS DWORD
 , BYREF pFormat AS WAVEFORMATEX
 , BYREF pVideoFormat AS VIDEOINFOHEADER
 ) AS LONG
 ' =====================================================================================
 METHOD GetAttributes2 ( ' VTable offset = 56
 BYREF pdwAttributes AS DWORD
 , BYREF pdwAttributesEx AS DWORD
 , BYREF pAudioFormat AS WAVEFORMATEX
 , BYREF pVideoFormat AS VIDEOINFOHEADER
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IWMDMStorage3 Methods
 ' =====================================================================================
 METHOD GetMetadata ( ' VTable offset = 60
 BYREF ppMetadata AS IWMDMMetaData
 ) AS LONG
 ' =====================================================================================
 METHOD SetMetadata ( ' VTable offset = 64
 BYVAL pMetadata AS IWMDMMetaData
 ) AS LONG
 ' =====================================================================================
 METHOD CreateEmptyMetadataObject ( ' VTable offset = 68
 BYREF ppMetadata AS IWMDMMetaData
 ) AS LONG
 ' =====================================================================================
 METHOD SetEnumPreference ( ' VTable offset = 72
 BYREF pMode AS LONG
 , BYVAL nViews AS DWORD
 , BYVAL pViews AS WMDMMetadataView
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IWMDMStorage3_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IWMDMStorage4
' IID = {C225BAC5-A03A-40B8-9A23-91CF478C64A6}
' Inherited interface = IWMDMStorage3
' ########################################################################################
#IF NOT %DEF(%IWMDMStorage4_INTERFACE_DEFINED)
 %IWMDMStorage4_INTERFACE_DEFINED = 1
INTERFACE IWMDMStorage4 $IID_IWMDMStorage4
 INHERIT IUnknown
 ' =====================================================================================
 ' IWMDMStorage Methods
 ' =====================================================================================
 METHOD SetAttributes ( ' VTable offset = 12
 BYVAL dwAttributes AS DWORD
 , BYREF pFormat AS WAVEFORMATEX
 ) AS LONG
 ' =====================================================================================
 METHOD GetStorageGlobals ( ' VTable offset = 16
 BYREF ppStorageGlobals AS IWMDMStorageGlobals
 ) AS LONG
 ' =====================================================================================
 METHOD GetAttributes ( ' VTable offset = 20
 BYREF pdwAttributes AS DWORD
 , BYREF pFormat AS WAVEFORMATEX
 ) AS LONG
 ' =====================================================================================
 METHOD GetName ( ' VTable offset = 24
 BYREF pwszName AS WSTRINGZ
 , BYVAL nMaxChars AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetDate ( ' VTable offset = 28
 BYREF pDateTimeUTC AS WMDMDATETIME
 ) AS LONG
 ' =====================================================================================
 METHOD GetSize ( ' VTable offset = 32
 BYREF pdwSizeLow AS DWORD
 , BYREF pdwSizeHigh AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetRights ( ' VTable offset = 36
 BYREF ppRights AS WMDMRIGHTS
 , BYREF pnRightsCount AS DWORD
 , BYREF abMac AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD EnumStorage ( ' VTable offset = 40
 BYREF pEnumStorage AS IWMDMEnumStorage
 ) AS LONG
 ' =====================================================================================
 METHOD SendOpaqueCommand ( ' VTable offset = 44
 BYREF pCommand AS OPAQUECOMMAND
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IWMDMStorage2 Methods
 ' =====================================================================================
 METHOD GetStorage ( ' VTable offset = 48
 BYREF pszStorageName AS WSTRINGZ
 , BYREF ppStorage AS IWMDMStorage
 ) AS LONG
 ' =====================================================================================
 METHOD SetAttributes2 ( ' VTable offset = 52
 BYVAL dwAttributes AS DWORD
 , BYVAL dwAttributesEx AS DWORD
 , BYREF pFormat AS WAVEFORMATEX
 , BYREF pVideoFormat AS VIDEOINFOHEADER
 ) AS LONG
 ' =====================================================================================
 METHOD GetAttributes2 ( ' VTable offset = 56
 BYREF pdwAttributes AS DWORD
 , BYREF pdwAttributesEx AS DWORD
 , BYREF pAudioFormat AS WAVEFORMATEX
 , BYREF pVideoFormat AS VIDEOINFOHEADER
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IWMDMStorage3 Methods
 ' =====================================================================================
 METHOD GetMetadata ( ' VTable offset = 60
 BYREF ppMetadata AS IWMDMMetaData
 ) AS LONG
 ' =====================================================================================
 METHOD SetMetadata ( ' VTable offset = 64
 BYVAL pMetadata AS IWMDMMetaData
 ) AS LONG
 ' =====================================================================================
 METHOD CreateEmptyMetadataObject ( ' VTable offset = 68
 BYREF ppMetadata AS IWMDMMetaData
 ) AS LONG
 ' =====================================================================================
 METHOD SetEnumPreference ( ' VTable offset = 72
 BYREF pMode AS LONG
 , BYVAL nViews AS DWORD
 , BYVAL pViews AS WMDMMetadataView
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IWMDMStorage4 Methods
 ' =====================================================================================
 METHOD SetReferences ( ' VTable offset = 76
 BYVAL dwRefs AS DWORD
 , BYREF ppIWMDMStorage AS IWMDMStorage
 ) AS LONG
 ' =====================================================================================
 METHOD GetReferences ( ' VTable offset = 80
 BYREF pdwRefs AS DWORD
 , BYREF pppIWMDMStorage AS IWMDMStorage
 ) AS LONG
 ' =====================================================================================
 METHOD GetRightsWithProgress ( ' VTable offset = 84
 BYVAL pIProgressCallback AS IWMDMProgress3
 , BYREF ppRights AS WMDMRIGHTS
 , BYREF pnRightsCount AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetSpecifiedMetadata ( ' VTable offset = 88
 BYVAL cProperties AS DWORD
 , BYREF ppwszPropNames AS WSTRINGZ
 , BYREF ppMetadata AS IWMDMMetaData
 ) AS LONG
 ' =====================================================================================
 METHOD FindStorage ( ' VTable offset = 92
 BYVAL findScope AS LONG
 , BYREF pwszUniqueID AS WSTRINGZ
 , BYREF ppStorage AS IWMDMStorage
 ) AS LONG
 ' =====================================================================================
 METHOD GetParent ( ' VTable offset = 96
 BYREF ppStorage AS IWMDMStorage
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IWMDMStorage4_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IWMDMOperation
' IID = {1DCB3A0B-33ED-11D3-8470-00C04F79DBC0}
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IWMDMOperation_INTERFACE_DEFINED)
 %IWMDMOperation_INTERFACE_DEFINED = 1
INTERFACE IWMDMOperation $IID_IWMDMOperation
 INHERIT IUnknown
 ' =====================================================================================
 METHOD BeginRead ( ' VTable offset = 12
 ) AS LONG
 ' =====================================================================================
 METHOD BeginWrite ( ' VTable offset = 16
 ) AS LONG
 ' =====================================================================================
 METHOD GetObjectName ( ' VTable offset = 20
 BYREF pwszName AS WSTRINGZ
 , BYVAL nMaxChars AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD SetObjectName ( ' VTable offset = 24
 BYREF pwszName AS WSTRINGZ
 , BYVAL nMaxChars AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetObjectAttributes ( ' VTable offset = 28
 BYREF pdwAttributes AS DWORD
 , BYREF pFormat AS WAVEFORMATEX
 ) AS LONG
 ' =====================================================================================
 METHOD SetObjectAttributes ( ' VTable offset = 32
 BYVAL dwAttributes AS DWORD
 , BYREF pFormat AS WAVEFORMATEX
 ) AS LONG
 ' =====================================================================================
 METHOD GetObjectTotalSize ( ' VTable offset = 36
 BYREF pdwSize AS DWORD
 , BYREF pdwSizeHigh AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD SetObjectTotalSize ( ' VTable offset = 40
 BYVAL dwSize AS DWORD
 , BYVAL dwSizeHigh AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD TransferObjectData ( ' VTable offset = 44
 BYREF pData AS DWORD
 , BYREF pdwSize AS DWORD
 , BYREF abMac AS BYTE
 ) AS LONG
 ' =====================================================================================
 METHOD End ( ' VTable offset = 48
 BYVAL phCompletionCode AS LONG
 , BYVAL pNewObject AS IUnknown
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IWMDMOperation_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IWMDMOperation2
' IID = {33445B48-7DF7-425C-AD8F-0FC6D82F9F75}
' Inherited interface = IWMDMOperation
' ########################################################################################
#IF NOT %DEF(%IWMDMOperation2_INTERFACE_DEFINED)
 %IWMDMOperation2_INTERFACE_DEFINED = 1
INTERFACE IWMDMOperation2 $IID_IWMDMOperation2
 INHERIT IUnknown
 ' =====================================================================================
 ' IWMDMOperation Methods
 ' =====================================================================================
 METHOD BeginRead ( ' VTable offset = 12
 ) AS LONG
 ' =====================================================================================
 METHOD BeginWrite ( ' VTable offset = 16
 ) AS LONG
 ' =====================================================================================
 METHOD GetObjectName ( ' VTable offset = 20
 BYREF pwszName AS WSTRINGZ
 , BYVAL nMaxChars AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD SetObjectName ( ' VTable offset = 24
 BYREF pwszName AS WSTRINGZ
 , BYVAL nMaxChars AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetObjectAttributes ( ' VTable offset = 28
 BYREF pdwAttributes AS DWORD
 , BYREF pFormat AS WAVEFORMATEX
 ) AS LONG
 ' =====================================================================================
 METHOD SetObjectAttributes ( ' VTable offset = 32
 BYVAL dwAttributes AS DWORD
 , BYREF pFormat AS WAVEFORMATEX
 ) AS LONG
 ' =====================================================================================
 METHOD GetObjectTotalSize ( ' VTable offset = 36
 BYREF pdwSize AS DWORD
 , BYREF pdwSizeHigh AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD SetObjectTotalSize ( ' VTable offset = 40
 BYVAL dwSize AS DWORD
 , BYVAL dwSizeHigh AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD TransferObjectData ( ' VTable offset = 44
 BYREF pData AS DWORD
 , BYREF pdwSize AS DWORD
 , BYREF abMac AS BYTE
 ) AS LONG
 ' =====================================================================================
 METHOD End ( ' VTable offset = 48
 BYVAL phCompletionCode AS LONG
 , BYVAL pNewObject AS IUnknown
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IWMDMOperation2 Methods
 ' =====================================================================================
 METHOD SetObjectAttributes2 ( ' VTable offset = 52
 BYVAL dwAttributes AS DWORD
 , BYVAL dwAttributesEx AS DWORD
 , BYREF pFormat AS WAVEFORMATEX
 , BYREF pVideoFormat AS VIDEOINFOHEADER
 ) AS LONG
 ' =====================================================================================
 METHOD GetObjectAttributes2 ( ' VTable offset = 56
 BYREF pdwAttributes AS DWORD
 , BYREF pdwAttributesEx AS DWORD
 , BYREF pAudioFormat AS WAVEFORMATEX
 , BYREF pVideoFormat AS VIDEOINFOHEADER
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IWMDMOperation2_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IWMDMOperation3
' IID = {D1F9B46A-9CA8-46D8-9D0F-1EC9BAE54919}
' Inherited interface = IWMDMOperation2
' ########################################################################################
#IF NOT %DEF(%IWMDMOperation3_INTERFACE_DEFINED)
 %IWMDMOperation3_INTERFACE_DEFINED = 1
INTERFACE IWMDMOperation3 $IID_IWMDMOperation3
 INHERIT IUnknown
 ' =====================================================================================
 ' IWMDMOperation Methods
 ' =====================================================================================
 METHOD BeginRead ( ' VTable offset = 12
 ) AS LONG
 ' =====================================================================================
 METHOD BeginWrite ( ' VTable offset = 16
 ) AS LONG
 ' =====================================================================================
 METHOD GetObjectName ( ' VTable offset = 20
 BYREF pwszName AS WSTRINGZ
 , BYVAL nMaxChars AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD SetObjectName ( ' VTable offset = 24
 BYREF pwszName AS WSTRINGZ
 , BYVAL nMaxChars AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetObjectAttributes ( ' VTable offset = 28
 BYREF pdwAttributes AS DWORD
 , BYREF pFormat AS WAVEFORMATEX
 ) AS LONG
 ' =====================================================================================
 METHOD SetObjectAttributes ( ' VTable offset = 32
 BYVAL dwAttributes AS DWORD
 , BYREF pFormat AS WAVEFORMATEX
 ) AS LONG
 ' =====================================================================================
 METHOD GetObjectTotalSize ( ' VTable offset = 36
 BYREF pdwSize AS DWORD
 , BYREF pdwSizeHigh AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD SetObjectTotalSize ( ' VTable offset = 40
 BYVAL dwSize AS DWORD
 , BYVAL dwSizeHigh AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD TransferObjectData ( ' VTable offset = 44
 BYREF pData AS DWORD
 , BYREF pdwSize AS DWORD
 , BYREF abMac AS BYTE
 ) AS LONG
 ' =====================================================================================
 METHOD End ( ' VTable offset = 48
 BYVAL phCompletionCode AS LONG
 , BYVAL pNewObject AS IUnknown
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IWMDMOperation2 Methods
 ' =====================================================================================
 METHOD SetObjectAttributes2 ( ' VTable offset = 52
 BYVAL dwAttributes AS DWORD
 , BYVAL dwAttributesEx AS DWORD
 , BYREF pFormat AS WAVEFORMATEX
 , BYREF pVideoFormat AS VIDEOINFOHEADER
 ) AS LONG
 ' =====================================================================================
 METHOD GetObjectAttributes2 ( ' VTable offset = 56
 BYREF pdwAttributes AS DWORD
 , BYREF pdwAttributesEx AS DWORD
 , BYREF pAudioFormat AS WAVEFORMATEX
 , BYREF pVideoFormat AS VIDEOINFOHEADER
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IWMDMOperation3 Methods
 ' =====================================================================================
 METHOD TransferObjectDataOnClearChannel ( ' VTable offset = 60
 BYREF pData AS DWORD
 , BYREF pdwSize AS DWORD
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IWMDMOperation3_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IWMDMProgress
' IID = {1DCB3A0C-33ED-11D3-8470-00C04F79DBC0}
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IWMDMProgress_INTERFACE_DEFINED)
 %IWMDMProgress_INTERFACE_DEFINED = 1
INTERFACE IWMDMProgress $IID_IWMDMProgress
 INHERIT IUnknown
 ' =====================================================================================
 METHOD Begin ( ' VTable offset = 12
 BYVAL dwEstimatedTicks AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD Progress ( ' VTable offset = 16
 BYVAL dwTranspiredTicks AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD End ( ' VTable offset = 20
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IWMDMProgress_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IWMDMProgress2
' IID = {3A43F550-B383-4E92-B04A-E6BBC660FEFC}
' Inherited interface = IWMDMProgress
' ########################################################################################
#IF NOT %DEF(%IWMDMProgress2_INTERFACE_DEFINED)
 %IWMDMProgress2_INTERFACE_DEFINED = 1
INTERFACE IWMDMProgress2 $IID_IWMDMProgress2
 INHERIT IUnknown
 ' =====================================================================================
 ' IWMDMProgress Methods
 ' =====================================================================================
 METHOD Begin ( ' VTable offset = 12
 BYVAL dwEstimatedTicks AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD Progress ( ' VTable offset = 16
 BYVAL dwTranspiredTicks AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD End ( ' VTable offset = 20
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IWMDMProgress2 Methods
 ' =====================================================================================
 METHOD End2 ( ' VTable offset = 24
 BYVAL hrCompletionCode AS LONG
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IWMDMProgress2_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IWMDMProgress3
' IID = {3A43F550-B383-4E92-B04A-E6BBC660FEFC}
' Inherited interface = IWMDMProgress2
' ########################################################################################
#IF NOT %DEF(%IWMDMProgress3_INTERFACE_DEFINED)
 %IWMDMProgress3_INTERFACE_DEFINED = 1
INTERFACE IWMDMProgress3 $IID_IWMDMProgress3
 INHERIT IUnknown
 ' =====================================================================================
 ' IWMDMProgress Methods
 ' =====================================================================================
 METHOD Begin ( ' VTable offset = 12
 BYVAL dwEstimatedTicks AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD Progress ( ' VTable offset = 16
 BYVAL dwTranspiredTicks AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD End ( ' VTable offset = 20
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IWMDMProgress2 Methods
 ' =====================================================================================
 METHOD End2 ( ' VTable offset = 24
 BYVAL hrCompletionCode AS LONG
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IWMDMProgress3 Methods
 ' =====================================================================================
 METHOD Begin3 ( ' VTable offset = 28
 BYVAL EventId AS GUID
 , BYVAL dwEstimatedTicks AS DWORD
 , BYREF pContext AS OPAQUECOMMAND
 ) AS LONG
 ' =====================================================================================
 METHOD Progress3 ( ' VTable offset = 32
 BYVAL EventId AS GUID
 , BYVAL dwTranspiredTicks AS DWORD
 , BYREF pContext AS OPAQUECOMMAND
 ) AS LONG
 ' =====================================================================================
 METHOD End3 ( ' VTable offset = 36
 BYVAL EventId AS GUID
 , BYVAL hrCompletionCode AS LONG
 , BYREF pContext AS OPAQUECOMMAND
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IWMDMProgress3_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IWMDMDevice
' IID = {1DCB3A02-33ED-11D3-8470-00C04F79DBC0}
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IWMDMDevice_INTERFACE_DEFINED)
 %IWMDMDevice_INTERFACE_DEFINED = 1
INTERFACE IWMDMDevice $IID_IWMDMDevice
 INHERIT IUnknown
 ' =====================================================================================
 METHOD GetName ( ' VTable offset = 12
 BYREF pwszName AS WSTRINGZ
 , BYVAL nMaxChars AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetManufacturer ( ' VTable offset = 16
 BYREF pwszName AS WSTRINGZ
 , BYVAL nMaxChars AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetVersion ( ' VTable offset = 20
 BYREF pdwVersion AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetType ( ' VTable offset = 24
 BYREF pdwType AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetSerialNumber ( ' VTable offset = 28
 BYREF pSerialNumber AS WMDMID
 , BYREF abMac AS BYTE
 ) AS LONG
 ' =====================================================================================
 METHOD GetPowerSource ( ' VTable offset = 32
 BYREF pdwPowerSource AS DWORD
 , BYREF pdwPercentRemaining AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetStatus ( ' VTable offset = 36
 BYREF pdwStatus AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetDeviceIcon ( ' VTable offset = 40
 BYREF hIcon AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD EnumStorage ( ' VTable offset = 44
 BYREF ppEnumStorage AS IWMDMEnumStorage
 ) AS LONG
 ' =====================================================================================
 METHOD GetFormatSupport ( ' VTable offset = 48
 BYREF ppFormatEx AS WAVEFORMATEX
 , BYREF pnFormatCount AS DWORD
 , BYREF pppwszMimeType AS DWORD
 , BYREF pnMimeTypeCount AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD SendOpaqueCommand ( ' VTable offset = 52
 BYREF pCommand AS OPAQUECOMMAND
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IWMDMDevice_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IWMDMDevice2
' IID = {E34F3D37-9D67-4FC1-9252-62D28B2F8B55}
' Inherited interface = IWMDMDevice
' ########################################################################################
#IF NOT %DEF(%IWMDMDevice2_INTERFACE_DEFINED)
 %IWMDMDevice2_INTERFACE_DEFINED = 1
INTERFACE IWMDMDevice2 $IID_IWMDMDevice2
 INHERIT IUnknown
 ' =====================================================================================
 ' IWMDMDevice Methods
 ' =====================================================================================
 METHOD GetName ( ' VTable offset = 12
 BYREF pwszName AS WSTRINGZ
 , BYVAL nMaxChars AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetManufacturer ( ' VTable offset = 16
 BYREF pwszName AS WSTRINGZ
 , BYVAL nMaxChars AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetVersion ( ' VTable offset = 20
 BYREF pdwVersion AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetType ( ' VTable offset = 24
 BYREF pdwType AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetSerialNumber ( ' VTable offset = 28
 BYREF pSerialNumber AS WMDMID
 , BYREF abMac AS BYTE
 ) AS LONG
 ' =====================================================================================
 METHOD GetPowerSource ( ' VTable offset = 32
 BYREF pdwPowerSource AS DWORD
 , BYREF pdwPercentRemaining AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetStatus ( ' VTable offset = 36
 BYREF pdwStatus AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetDeviceIcon ( ' VTable offset = 40
 BYREF hIcon AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD EnumStorage ( ' VTable offset = 44
 BYREF ppEnumStorage AS IWMDMEnumStorage
 ) AS LONG
 ' =====================================================================================
 METHOD GetFormatSupport ( ' VTable offset = 48
 BYREF ppFormatEx AS WAVEFORMATEX
 , BYREF pnFormatCount AS DWORD
 , BYREF pppwszMimeType AS DWORD
 , BYREF pnMimeTypeCount AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD SendOpaqueCommand ( ' VTable offset = 52
 BYREF pCommand AS OPAQUECOMMAND
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IWMDMDevice2 Methods
 ' =====================================================================================
 METHOD GetStorage ( ' VTable offset = 56
 BYREF pszStorageName AS WSTRINGZ
 , BYREF ppStorage AS IWMDMStorage
 ) AS LONG
 ' =====================================================================================
 METHOD GetFormatSupport2 ( ' VTable offset = 60
 BYVAL dwFlags AS DWORD
 , BYREF ppAudioFormatEx AS WAVEFORMATEX
 , BYREF pnAudioFormatCount AS DWORD
 , BYREF ppVideoFormatEx AS VIDEOINFOHEADER
 , BYREF pnVideoFormatCount AS DWORD
 , BYREF ppFileType AS WMFILECAPABILITIES
 , BYREF pnFileTypeCount AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetSpecifyPropertyPages ( ' VTable offset = 64
 BYREF ppSpecifyPropPages AS ISpecifyPropertyPages
 , BYREF pppUnknowns AS IUnknown
 , BYREF pcUnks AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetCanonicalName ( ' VTable offset = 68
 BYREF pwszPnPName AS WSTRINGZ
 , BYVAL nMaxChars AS DWORD
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IWMDMDevice2_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IWMDMDevice3
' IID = {6C03E4FE-05DB-4DDA-9E3C-06233A6D5D65}
' Inherited interface = IWMDMDevice2
' ########################################################################################
#IF NOT %DEF(%IWMDMDevice3_INTERFACE_DEFINED)
 %IWMDMDevice3_INTERFACE_DEFINED = 1
INTERFACE IWMDMDevice3 $IID_IWMDMDevice3
 INHERIT IUnknown
 ' =====================================================================================
 ' IWMDMDevice Methods
 ' =====================================================================================
 METHOD GetName ( ' VTable offset = 12
 BYREF pwszName AS WSTRINGZ
 , BYVAL nMaxChars AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetManufacturer ( ' VTable offset = 16
 BYREF pwszName AS WSTRINGZ
 , BYVAL nMaxChars AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetVersion ( ' VTable offset = 20
 BYREF pdwVersion AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetType ( ' VTable offset = 24
 BYREF pdwType AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetSerialNumber ( ' VTable offset = 28
 BYREF pSerialNumber AS WMDMID
 , BYREF abMac AS BYTE
 ) AS LONG
 ' =====================================================================================
 METHOD GetPowerSource ( ' VTable offset = 32
 BYREF pdwPowerSource AS DWORD
 , BYREF pdwPercentRemaining AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetStatus ( ' VTable offset = 36
 BYREF pdwStatus AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetDeviceIcon ( ' VTable offset = 40
 BYREF hIcon AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD EnumStorage ( ' VTable offset = 44
 BYREF ppEnumStorage AS IWMDMEnumStorage
 ) AS LONG
 ' =====================================================================================
 METHOD GetFormatSupport ( ' VTable offset = 48
 BYREF ppFormatEx AS WAVEFORMATEX
 , BYREF pnFormatCount AS DWORD
 , BYREF pppwszMimeType AS DWORD
 , BYREF pnMimeTypeCount AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD SendOpaqueCommand ( ' VTable offset = 52
 BYREF pCommand AS OPAQUECOMMAND
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IWMDMDevice2 Methods
 ' =====================================================================================
 METHOD GetStorage ( ' VTable offset = 56
 BYREF pszStorageName AS WSTRINGZ
 , BYREF ppStorage AS IWMDMStorage
 ) AS LONG
 ' =====================================================================================
 METHOD GetFormatSupport2 ( ' VTable offset = 60
 BYVAL dwFlags AS DWORD
 , BYREF ppAudioFormatEx AS WAVEFORMATEX
 , BYREF pnAudioFormatCount AS DWORD
 , BYREF ppVideoFormatEx AS VIDEOINFOHEADER
 , BYREF pnVideoFormatCount AS DWORD
 , BYREF ppFileType AS WMFILECAPABILITIES
 , BYREF pnFileTypeCount AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetSpecifyPropertyPages ( ' VTable offset = 64
 BYREF ppSpecifyPropPages AS ISpecifyPropertyPages
 , BYREF pppUnknowns AS IUnknown
 , BYREF pcUnks AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetCanonicalName ( ' VTable offset = 68
 BYREF pwszPnPName AS WSTRINGZ
 , BYVAL nMaxChars AS DWORD
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IWMDMDevice3 Methods
 ' =====================================================================================
 METHOD GetProperty ( ' VTable offset = 72
 BYREF pwszPropName AS WSTRINGZ
 , BYREF pValue AS PROPVARIANT
 ) AS LONG
 ' =====================================================================================
 METHOD SetProperty ( ' VTable offset = 76
 BYREF pwszPropName AS WSTRINGZ
 , BYREF pValue AS PROPVARIANT
 ) AS LONG
 ' =====================================================================================
 METHOD GetFormatCapability ( ' VTable offset = 80
 BYVAL format AS DWORD
 , BYREF pFormatSupport AS WMDM_FORMAT_CAPABILITY
 ) AS LONG
 ' =====================================================================================
 METHOD DeviceIoControl ( ' VTable offset = 84
 BYVAL dwIoControlCode AS DWORD
 , BYVAL lpInBuffer AS BYTE PTR
 , BYVAL nInBufferSize AS DWORD
 , BYREF lpOutBuffer AS DWORD
 , BYREF pnOutBufferSize AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD FindStorage ( ' VTable offset = 88
 BYVAL findScope AS LONG
 , BYREF pwszUniqueID AS WSTRINGZ
 , BYREF ppStorage AS IWMDMStorage
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IWMDMDevice3_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IWMDMDeviceSession
' IID = {82AF0A65-9D96-412C-83E5-3C43E4B06CC7}
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IWMDMDeviceSession_INTERFACE_DEFINED)
 %IWMDMDeviceSession_INTERFACE_DEFINED = 1
INTERFACE IWMDMDeviceSession $IID_IWMDMDeviceSession
 INHERIT IUnknown
 ' =====================================================================================
 METHOD BeginSession ( ' VTable offset = 12
 BYVAL type AS DWORD
 , BYVAL pCtx AS BYTE PTR
 , BYVAL dwSizeCtx AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD EndSession ( ' VTable offset = 16
 BYVAL type AS DWORD
 , BYVAL pCtx AS BYTE PTR
 , BYVAL dwSizeCtx AS DWORD
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IWMDMDeviceSession_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IWMDMEnumDevice
' IID = {1DCB3A01-33ED-11D3-8470-00C04F79DBC0}
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IWMDMEnumDevice_INTERFACE_DEFINED)
 %IWMDMEnumDevice_INTERFACE_DEFINED = 1
INTERFACE IWMDMEnumDevice $IID_IWMDMEnumDevice
 INHERIT IUnknown
 ' =====================================================================================
 METHOD Next ( ' VTable offset = 12
 BYVAL celt AS DWORD
 , BYREF ppDevice AS IWMDMDevice
 , BYREF pceltFetched AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD Skip ( ' VTable offset = 16
 BYVAL celt AS DWORD
 , BYREF pceltFetched AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD Reset ( ' VTable offset = 20
 ) AS LONG
 ' =====================================================================================
 METHOD Clone ( ' VTable offset = 24
 BYREF ppEnumDevice AS IWMDMEnumDevice
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IWMDMEnumDevice_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IWMDMDeviceControl
' IID = {1DCB3A04-33ED-11D3-8470-00C04F79DBC0}
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IWMDMDeviceControl_INTERFACE_DEFINED)
 %IWMDMDeviceControl_INTERFACE_DEFINED = 1
INTERFACE IWMDMDeviceControl $IID_IWMDMDeviceControl
 INHERIT IUnknown
 ' =====================================================================================
 METHOD GetStatus ( ' VTable offset = 12
 BYREF pdwStatus AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetCapabilities ( ' VTable offset = 16
 BYREF pdwCapabilitiesMask AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD Play ( ' VTable offset = 20
 ) AS LONG
 ' =====================================================================================
 METHOD Record ( ' VTable offset = 24
 BYREF pFormat AS WAVEFORMATEX
 ) AS LONG
 ' =====================================================================================
 METHOD Pause ( ' VTable offset = 28
 ) AS LONG
 ' =====================================================================================
 METHOD Resume ( ' VTable offset = 32
 ) AS LONG
 ' =====================================================================================
 METHOD Stop ( ' VTable offset = 32
 ) AS LONG
 ' =====================================================================================
 METHOD Seek ( ' VTable offset = 36
 BYVAL fuMode AS DWORD
 , BYVAL nOffset AS LONG
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IWMDMDeviceControl_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IWMDMEnumStorage
' IID = {1DCB3A05-33ED-11D3-8470-00C04F79DBC0}
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IWMDMEnumStorage_INTERFACE_DEFINED)
 %IWMDMEnumStorage_INTERFACE_DEFINED = 1
INTERFACE IWMDMEnumStorage $IID_IWMDMEnumStorage
 INHERIT IUnknown
 ' =====================================================================================
 METHOD Next ( ' VTable offset = 12
 BYVAL celt AS DWORD
 , BYREF ppStorage AS IWMDMStorage
 , BYREF pceltFetched AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD Skip ( ' VTable offset = 16
 BYVAL celt AS DWORD
 , BYREF pceltFetched AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD Reset ( ' VTable offset = 20
 ) AS LONG
 ' =====================================================================================
 METHOD Clone ( ' VTable offset = 24
 BYREF ppEnumStorage AS IWMDMEnumStorage
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IWMDMEnumStorage_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IWMDMStorageControl
' IID = {1DCB3A08-33ED-11D3-8470-00C04F79DBC0}
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IWMDMStorageControl_INTERFACE_DEFINED)
 %IWMDMStorageControl_INTERFACE_DEFINED = 1
INTERFACE IWMDMStorageControl $IID_IWMDMStorageControl
 INHERIT IUnknown
 ' =====================================================================================
 METHOD Insert ( ' VTable offset = 12
 BYVAL fuMode AS DWORD
 , BYREF pwszFile AS WSTRINGZ
 , BYVAL pOperation AS IWMDMOperation
 , BYVAL pProgress AS IWMDMProgress
 , BYREF ppNewObject AS IWMDMStorage
 ) AS LONG
 ' =====================================================================================
 METHOD Delete ( ' VTable offset = 16
 BYVAL fuMode AS DWORD
 , BYVAL pProgress AS IWMDMProgress
 ) AS LONG
 ' =====================================================================================
 METHOD Rename ( ' VTable offset = 20
 BYVAL fuMode AS DWORD
 , BYREF pwszNewName AS WSTRINGZ
 , BYVAL pProgress AS IWMDMProgress
 ) AS LONG
 ' =====================================================================================
 METHOD Read ( ' VTable offset = 24
 BYVAL fuMode AS DWORD
 , BYREF pwszFile AS WSTRINGZ
 , BYVAL pProgress AS IWMDMProgress
 , BYVAL pOperation AS IWMDMOperation
 ) AS LONG
 ' =====================================================================================
 METHOD Move ( ' VTable offset = 28
 BYVAL fuMode AS DWORD
 , BYVAL pTargetObject AS IWMDMStorage
 , BYVAL pProgress AS IWMDMProgress
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IWMDMStorageControl_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IWMDMStorageControl2
' IID = {1DCB3A08-33ED-11D3-8470-00C04F79DBC0}
' Inherited interface = IWMDMStorageControl
' ########################################################################################
#IF NOT %DEF(%IWMDMStorageControl2_INTERFACE_DEFINED)
 %IWMDMStorageControl2_INTERFACE_DEFINED = 1
INTERFACE IWMDMStorageControl2 $IID_IWMDMStorageControl2
 INHERIT IUnknown
 ' =====================================================================================
 ' IWMDMStorageControl Methods
 ' =====================================================================================
 METHOD Insert ( ' VTable offset = 12
 BYVAL fuMode AS DWORD
 , BYREF pwszFile AS WSTRINGZ
 , BYVAL pOperation AS IWMDMOperation
 , BYVAL pProgress AS IWMDMProgress
 , BYREF ppNewObject AS IWMDMStorage
 ) AS LONG
 ' =====================================================================================
 METHOD Delete ( ' VTable offset = 16
 BYVAL fuMode AS DWORD
 , BYVAL pProgress AS IWMDMProgress
 ) AS LONG
 ' =====================================================================================
 METHOD Rename ( ' VTable offset = 20
 BYVAL fuMode AS DWORD
 , BYREF pwszNewName AS WSTRINGZ
 , BYVAL pProgress AS IWMDMProgress
 ) AS LONG
 ' =====================================================================================
 METHOD Read ( ' VTable offset = 24
 BYVAL fuMode AS DWORD
 , BYREF pwszFile AS WSTRINGZ
 , BYVAL pProgress AS IWMDMProgress
 , BYVAL pOperation AS IWMDMOperation
 ) AS LONG
 ' =====================================================================================
 METHOD Move ( ' VTable offset = 28
 BYVAL fuMode AS DWORD
 , BYVAL pTargetObject AS IWMDMStorage
 , BYVAL pProgress AS IWMDMProgress
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IWMDMStorageControl2 Methods
 ' =====================================================================================
 METHOD Insert2 ( ' VTable offset = 32
 BYVAL fuMode AS DWORD
 , BYREF pwszFileSource AS WSTRINGZ
 , BYREF pwszFileDest AS WSTRINGZ
 , BYVAL pOperation AS IWMDMOperation
 , BYVAL pProgress AS IWMDMProgress
 , BYVAL pUnknown AS IUnknown
 , BYREF ppNewObject AS IWMDMStorage
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IWMDMStorageControl2_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IWMDMStorageControl3
' IID = {B3266365-D4F3-4696-8D53-BD27EC60993A}
' Inherited interface = IWMDMStorageControl2
' ########################################################################################
#IF NOT %DEF(%IWMDMStorageControl3_INTERFACE_DEFINED)
 %IWMDMStorageControl3_INTERFACE_DEFINED = 1
INTERFACE IWMDMStorageControl3 $IID_IWMDMStorageControl3
 INHERIT IUnknown
 ' =====================================================================================
 ' IWMDMStorageControl Methods
 ' =====================================================================================
 METHOD Insert ( ' VTable offset = 12
 BYVAL fuMode AS DWORD
 , BYREF pwszFile AS WSTRINGZ
 , BYVAL pOperation AS IWMDMOperation
 , BYVAL pProgress AS IWMDMProgress
 , BYREF ppNewObject AS IWMDMStorage
 ) AS LONG
 ' =====================================================================================
 METHOD Delete ( ' VTable offset = 16
 BYVAL fuMode AS DWORD
 , BYVAL pProgress AS IWMDMProgress
 ) AS LONG
 ' =====================================================================================
 METHOD Rename ( ' VTable offset = 20
 BYVAL fuMode AS DWORD
 , BYREF pwszNewName AS WSTRINGZ
 , BYVAL pProgress AS IWMDMProgress
 ) AS LONG
 ' =====================================================================================
 METHOD Read ( ' VTable offset = 24
 BYVAL fuMode AS DWORD
 , BYREF pwszFile AS WSTRINGZ
 , BYVAL pProgress AS IWMDMProgress
 , BYVAL pOperation AS IWMDMOperation
 ) AS LONG
 ' =====================================================================================
 METHOD Move ( ' VTable offset = 28
 BYVAL fuMode AS DWORD
 , BYVAL pTargetObject AS IWMDMStorage
 , BYVAL pProgress AS IWMDMProgress
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IWMDMStorageControl2 Methods
 ' =====================================================================================
 METHOD Insert2 ( ' VTable offset = 32
 BYVAL fuMode AS DWORD
 , BYREF pwszFileSource AS WSTRINGZ
 , BYREF pwszFileDest AS WSTRINGZ
 , BYVAL pOperation AS IWMDMOperation
 , BYVAL pProgress AS IWMDMProgress
 , BYVAL pUnknown AS IUnknown
 , BYREF ppNewObject AS IWMDMStorage
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IWMDMStorageControl3 Methods
 ' =====================================================================================
 METHOD Insert3 ( ' VTable offset = 36
 BYVAL fuMode AS DWORD
 , BYVAL fuType AS DWORD
 , BYREF pwszFileSource AS WSTRINGZ
 , BYREF pwszFileDest AS WSTRINGZ
 , BYVAL pOperation AS IWMDMOperation
 , BYVAL pProgress AS IWMDMProgress
 , BYVAL pMetaData AS IWMDMMetaData
 , BYVAL pUnknown AS IUnknown
 , BYREF ppNewObject AS IWMDMStorage
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IWMDMStorageControl3_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IWMDMObjectInfo
' IID = {1DCB3A09-33ED-11D3-8470-00C04F79DBC0}
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IWMDMObjectInfo_INTERFACE_DEFINED)
 %IWMDMObjectInfo_INTERFACE_DEFINED = 1
INTERFACE IWMDMObjectInfo $IID_IWMDMObjectInfo
 INHERIT IUnknown
 ' =====================================================================================
 METHOD GetPlayLength ( ' VTable offset = 12
 BYREF pdwLength AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD SetPlayLength ( ' VTable offset = 16
 BYVAL dwLength AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetPlayOffset ( ' VTable offset = 20
 BYREF pdwOffset AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD SetPlayOffset ( ' VTable offset = 24
 BYVAL dwOffset AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetTotalLength ( ' VTable offset = 28
 BYREF pdwLength AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetLastPlayPosition ( ' VTable offset = 32
 BYREF pdwLastPos AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetLongestPlayPosition ( ' VTable offset = 36
 BYREF pdwLongestPos AS DWORD
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IWMDMObjectInfo_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IWMDMRevoked
' IID = {EBECCEDB-88EE-4E55-B6A4-8D9F07D696AA}
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IWMDMRevoked_INTERFACE_DEFINED)
 %IWMDMRevoked_INTERFACE_DEFINED = 1
INTERFACE IWMDMRevoked $IID_IWMDMRevoked
 INHERIT IUnknown
 ' =====================================================================================
 METHOD GetRevocationURL ( ' VTable offset = 12
 BYREF ppwszRevocationURL AS DWORD
 , BYREF pdwBufferLen AS DWORD
 , BYREF pdwRevokedBitFlag AS DWORD
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IWMDMRevoked_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IWMDMNotification
' IID = {EBECCEDB-88EE-4E55-B6A4-8D9F07D696AA}
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IWMDMNotification_INTERFACE_DEFINED)
 %IWMDMNotification_INTERFACE_DEFINED = 1
INTERFACE IWMDMNotification $IID_IWMDMNotification
 INHERIT IUnknown
 ' =====================================================================================
 METHOD WMDMMessage ( ' VTable offset = 12
 BYVAL dwMessageType AS DWORD
 , BYREF pwszCanonicalName AS WSTRINGZ
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IWMDMNotification_INTERFACE_DEFINED__ */
' // WMDM constants for wellknown meta-data tags
' //Type: LPCWSTR, WMDM_TAG_DATATYPE: WMDM_TYPE_STRING
'static const WCHAR *g_wszWMDMFileName = L"WMDM/FileName";
$$g_wszWMDMFileName = "WMDM/FileName"$$
' //Type: DWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_DWORD
'static const WCHAR *g_wszWMDMFormatCode = L"WMDM/FormatCode";
$$g_wszWMDMFormatCode = "WMDM/FormatCode"$$
' //Type: WMDMDATETIME, WMDM_TAG_DATATYPE: WMDM_TYPE_DATETIME
'static const WCHAR *g_wszWMDMLastModifiedDate = L"WMDM/LastModifiedDate";
$$g_wszWMDMLastModifiedDate = "WMDM/LastModifiedDate"$$
' //Type: WMDMDATETIME, WMDM_TAG_DATATYPE: WMDM_TYPE_DATETIME
'static const WCHAR *g_wszWMDMFileCreationDate = L"WMDM/FileCreationDate";
$$g_wszWMDMFileCreationDate = "WMDM/FileCreationDate"$$
' //Type: QWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_QWORD
'static const WCHAR *g_wszWMDMFileSize = L"WMDM/FileSize";
$$g_wszWMDMFileSize = "WMDM/FileSize"$$
' //Type: QWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_QWORD
'static const WCHAR *g_wszWMDMFileAttributes = L"WMDM/FileAttributes";
$$g_wszWMDMFileAttributes = "WMDM/FileAttributes"$$
' //Format code: WAVE Format
' //Type: DWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_DWORD
'static const WCHAR *g_wszAudioWAVECodec = L"WMDM/AudioWAVECodec";
$$g_wszAudioWAVECodec = "WMDM/AudioWAVECodec"$$
' //Format code: FOURCC code
' //Type: DWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_DWORD
'static const WCHAR *g_wszVideoFourCCCodec = L"WMDM/VideoFourCCCodec";
$$g_wszVideoFourCCCodec = "WMDM/VideoFourCCCodec"$$
' //Type: LPCWSTR, WMDM_TAG_DATATYPE: WMDM_TYPE_STRING
'static const WCHAR *g_wszWMDMTitle = L"WMDM/Title";
$$g_wszWMDMTitle = "WMDM/Title"$$
' //Type: LPCWSTR, WMDM_TAG_DATATYPE: WMDM_TYPE_STRING
'static const WCHAR *g_wszWMDMAuthor = L"WMDM/Author";
$$g_wszWMDMAuthor = "WMDM/Author"$$
' //Type: LPCWSTR, WMDM_TAG_DATATYPE: WMDM_TYPE_STRING
'static const WCHAR *g_wszWMDMDescription = L"WMDM/Description";
$$g_wszWMDMDescription = "WMDM/Description"$$
' //Type: BOOL, WMDM_TAG_DATATYPE: WMDM_TYPE_BOOL
'static const WCHAR *g_wszWMDMIsProtected = L"WMDM/IsProtected";
$$g_wszWMDMIsProtected = "WMDM/IsProtected"$$
' //Type: LPCWSTR, WMDM_TAG_DATATYPE: WMDM_TYPE_STRING
'static const WCHAR *g_wszWMDMAlbumTitle = L"WMDM/AlbumTitle";
$$g_wszWMDMAlbumTitle = "WMDM/AlbumTitle"$$
' //Type: LPCWSTR, WMDM_TAG_DATATYPE: WMDM_TYPE_STRING
'static const WCHAR *g_wszWMDMAlbumArtist = L"WMDM/AlbumArtist";
$$g_wszWMDMAlbumArtist = "WMDM/AlbumArtist"$$
' //Type: DWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_DWORD
'static const WCHAR *g_wszWMDMTrack = L"WMDM/Track";
$$g_wszWMDMTrack = "WMDM/Track"$$
' //Type: LPCWSTR, WMDM_TAG_DATATYPE: WMDM_TYPE_STRING
'static const WCHAR *g_wszWMDMGenre = L"WMDM/Genre";
$$g_wszWMDMGenre = "WMDM/Genre"$$
' //Type: LPCWSTR, WMDM_TAG_DATATYPE: WMDM_TYPE_STRING
'static const WCHAR *g_wszWMDMTrackMood = L"WMDM/TrackMood";
$$g_wszWMDMTrackMood = "WMDM/TrackMood"$$
' //Type: DWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_DWORD
'static const WCHAR *g_wszWMDMAlbumCoverFormat = L"WMDM/AlbumCoverFormat";
$$g_wszWMDMAlbumCoverFormat = "WMDM/AlbumCoverFormat"$$
' //Type: DWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_DWORD
'static const WCHAR *g_wszWMDMAlbumCoverSize = L"WMDM/AlbumCoverSize";
$$g_wszWMDMAlbumCoverSize = "WMDM/AlbumCoverSize"$$
' //Type: DWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_DWORD
'static const WCHAR *g_wszWMDMAlbumCoverHeight = L"WMDM/AlbumCoverHeight";
$$g_wszWMDMAlbumCoverHeight = "WMDM/AlbumCoverHeight"$$
' //Type: DWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_DWORD
'static const WCHAR *g_wszWMDMAlbumCoverWidth = L"WMDM/AlbumCoverWidth";
$$g_wszWMDMAlbumCoverWidth = "WMDM/AlbumCoverWidth"$$
' //Type: DWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_DWORD
'static const WCHAR *g_wszWMDMAlbumCoverDuration = L"WMDM/AlbumCoverDuration";
$$g_wszWMDMAlbumCoverDuration = "WMDM/AlbumCoverDuration"$$
' //Type: BYTE*, WMDM_TAG_DATATYPE: WMDM_TYPE_BINARY
'static const WCHAR *g_wszWMDMAlbumCoverData = L"WMDM/AlbumCoverData";
$$g_wszWMDMAlbumCoverData = "WMDM/AlbumCoverData"$$
' //Type: LPCWSTR, WMDM_TAG_DATATYPE: WMDM_TYPE_STRING
'static const WCHAR *g_wszWMDMYear = L"WMDM/Year";
$$g_wszWMDMYear = "WMDM/Year"$$
' //Type: LPCWSTR, WMDM_TAG_DATATYPE: WMDM_TYPE_STRING
'static const WCHAR *g_wszWMDMComposer = L"WMDM/Composer";
$$g_wszWMDMComposer = "WMDM/Composer"$$
' //Type: LPCWSTR, WMDM_TAG_DATATYPE: WMDM_TYPE_STRING
'static const WCHAR *g_wszWMDMCodec = L"WMDM/Codec";
$$g_wszWMDMCodec = "WMDM/Codec"$$
'static const WCHAR *g_wszWMDMDRMId = L"WMDM/DRMId";
$$g_wszWMDMDRMId = "WMDM/DRMId"$$
' //Type: DWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_DWORD
'static const WCHAR *g_wszWMDMBitrate = L"WMDM/Bitrate";
$$g_wszWMDMBitrate = "WMDM/Bitrate"$$
' //Type: DWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_DWORD
'static const WCHAR *g_wszWMDMBitRateType = L"WMDM/BitRateType";
$$g_wszWMDMBitRateType = "WMDM/BitRateType"$$
' //Type: DWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_DWORD
'static const WCHAR *g_wszWMDMSampleRate = L"WMDM/SampleRate";
$$g_wszWMDMSampleRate = "WMDM/SampleRate"$$
' //Type: DWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_DWORD
'static const WCHAR *g_wszWMDMNumChannels = L"WMDM/NumChannels";
$$g_wszWMDMNumChannels = "WMDM/NumChannels"$$
' //Type: DWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_DWORD
'static const WCHAR *g_wszWMDMBlockAlignment = L"WMDM/BlockAlignment";
$$g_wszWMDMBlockAlignment = "WMDM/BlockAlignment"$$
' //Type: DWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_DWORD
'static const WCHAR *g_wszWMDMAudioBitDepth = L"WMDM/AudioBitDepth";
$$g_wszWMDMAudioBitDepth = "WMDM/AudioBitDepth"$$
' //Type: DWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_DWORD
'static const WCHAR *g_wszWMDMTotalBitrate = L"WMDM/TotalBitrate";
$$g_wszWMDMTotalBitrate = "WMDM/TotalBitrate"$$
' //Type: DWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_DWORD
'static const WCHAR *g_wszWMDMVideoBitrate = L"WMDM/VideoBitrate";
$$g_wszWMDMVideoBitrate = "WMDM/VideoBitrate"$$
' //Type: DWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_DWORD
'static const WCHAR *g_wszWMDMFrameRate = L"WMDM/FrameRate";
$$g_wszWMDMFrameRate = "WMDM/FrameRate"$$
' //Type: DWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_DWORD
'static const WCHAR *g_wszWMDMScanType = L"WMDM/ScanType";
$$g_wszWMDMScanType = "WMDM/ScanType"$$
' //Type: DWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_DWORD
'static const WCHAR *g_wszWMDMKeyFrameDistance = L"WMDM/KeyFrameDistance";
$$g_wszWMDMKeyFrameDistance = "WMDM/KeyFrameDistance"$$
' //Type: DWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_DWORD
'static const WCHAR *g_wszWMDMBufferSize = L"WMDM/BufferSize";
$$g_wszWMDMBufferSize = "WMDM/BufferSize"$$
' //Type: QWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_QWORD
'static const WCHAR *g_wszWMDMQualitySetting = L"WMDM/QualitySetting";
$$g_wszWMDMQualitySetting = "WMDM/QualitySetting"$$
' //Type: LPCWSTR, WMDM_TAG_DATATYPE: WMDM_TYPE_STRING
'static const WCHAR *g_wszWMDMEncodingProfile = L"WMDM/EncodingProfile";
$$g_wszWMDMEncodingProfile = "WMDM/EncodingProfile"$$
' //Type: QWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_QWORD
'static const WCHAR *g_wszWMDMDuration = L"WMDM/Duration";
$$g_wszWMDMDuration = "WMDM/Duration"$$
' //Type: LPCWSTR, WMDM_TAG_DATATYPE: WMDM_TYPE_STRING
'static const WCHAR *g_wszWMDMAlbumArt = L"WMDM/AlbumArt";
$$g_wszWMDMAlbumArt = "WMDM/AlbumArt"$$
' //Type: BOOL, WMDM_TAG_DATATYPE: WMDM_TYPE_BOOL
'static const WCHAR *g_wszWMDMBuyNow = L"WMDM/BuyNow";
$$g_wszWMDMBuyNow = "WMDM/BuyNow"$$
' //Type: BOOL, WMDM_TAG_DATATYPE: WMDM_TYPE_BOOL
'static const WCHAR *g_wszWMDMNonConsumable = L"WMDM/NonConsumable";
$$g_wszWMDMNonConsumable = "WMDM/NonConsumable"$$
' //Type: LPCWSTR, WMDM_TAG_DATATYPE: WMDM_TYPE_STRING
'static const WCHAR *g_wszWMDMediaClassPrimaryID = L"WMDM/MediaClassPrimaryID";
$$g_wszWMDMediaClassPrimaryID = "WMDM/MediaClassPrimaryID"$$
' //Type: LPCWSTR, WMDM_TAG_DATATYPE: WMDM_TYPE_STRING
'static const WCHAR *g_wszWMDMMediaClassSecondaryID = L"WMDM/MediaClassSecondaryID";
$$g_wszWMDMMediaClassSecondaryID = "WMDM/MediaClassSecondaryID"$$
' //Type: DWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_DWORD
'static const WCHAR *g_wszWMDMUserEffectiveRating = L"WMDM/UserEffectiveRating";
$$g_wszWMDMUserEffectiveRating = "WMDM/UserEffectiveRating"$$
' //Type: DWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_DWORD
'static const WCHAR *g_wszWMDMUserRating = L"WMDM/UserRating";
$$g_wszWMDMUserRating = "WMDM/UserRating"$$
' //Type: DWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_DWORD
'static const WCHAR *g_wszWMDMUserRatingOnDevice = L"WMDM/UserRatingOnDevice";
$$g_wszWMDMUserRatingOnDevice = "WMDM/UserRatingOnDevice"$$
' //Type: DWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_DWORD
'static const WCHAR *g_wszWMDMPlayCount = L"WMDM/PlayCount";
$$g_wszWMDMPlayCount = "WMDM/PlayCount"$$
' //Type: DWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_DWORD
'static const WCHAR *g_wszWMDMDevicePlayCount = L"WMDM/DevicePlayCount";
$$g_wszWMDMDevicePlayCount = "WMDM/DevicePlayCount"$$
' //Type: WMDMDATETIME, WMDM_TAG_DATATYPE: WMDM_TYPE_DATETIME
'static const WCHAR *g_wszWMDMAuthorDate = L"WMDM/AuthorDate";
$$g_wszWMDMAuthorDate = "WMDM/AuthorDate"$$
' //Type: WMDMDATETIME, WMDM_TAG_DATATYPE: WMDM_TYPE_DATETIME
'static const WCHAR *g_wszWMDMUserLastPlayTime = L"WMDM/UserLastPlayTime";
$$g_wszWMDMUserLastPlayTime = "WMDM/UserLastPlayTime"$$
' //Type: LPCWSTR, WMDM_TAG_DATATYPE: WMDM_TYPE_STRING
'static const WCHAR *g_wszWMDMSubTitle = L"WMDM/SubTitle";
$$g_wszWMDMSubTitle = "WMDM/SubTitle"$$
' //Type: LPCWSTR, WMDM_TAG_DATATYPE: WMDM_TYPE_STRING
'static const WCHAR *g_wszWMDMSubTitleDescription = L"WMDM/SubTitleDescription";
$$g_wszWMDMSubTitleDescription = "WMDM/SubTitleDescription"$$
' //Type: LPCWSTR, WMDM_TAG_DATATYPE: WMDM_TYPE_STRING
'static const WCHAR *g_wszWMDMMediaCredits = L"WMDM/MediaCredits";
$$g_wszWMDMMediaCredits = "WMDM/MediaCredits"$$
' //Type: LPCWSTR, WMDM_TAG_DATATYPE: WMDM_TYPE_STRING
'static const WCHAR *g_wszWMDMMediaStationName = L"WMDM/MediaStationName";
$$g_wszWMDMMediaStationName = "WMDM/MediaStationName"$$
' //Type: LPCWSTR, WMDM_TAG_DATATYPE: WMDM_TYPE_STRING
'static const WCHAR *g_wszWMDMMediaOriginalChannel = L"WMDM/MediaOriginalChannel";
$$g_wszWMDMMediaOriginalChannel = "WMDM/MediaOriginalChannel"$$
' //Type: WMDMDATETIME, WMDM_TAG_DATATYPE: WMDM_TYPE_DATETIME
'static const WCHAR *g_wszWMDMMediaOriginalBroadcastDateTime = L"WMDM/MediaOriginalBroadcastDateTime";
$$g_wszWMDMMediaOriginalBroadcastDateTime = "WMDM/MediaOriginalBroadcastDateTime"$$
' //Type: LPCWSTR, WMDM_TAG_DATATYPE: WMDM_TYPE_STRING
'static const WCHAR *g_wszWMDMProviderCopyright = L"WMDM/ProviderCopyright";
$$g_wszWMDMProviderCopyright = "WMDM/ProviderCopyright"$$
' //Type: LPCWSTR, WMDM_TAG_DATATYPE: WMDM_TYPE_STRING
'static const WCHAR *g_wszWMDMSyncID = L"WMDM/SyncID";
$$g_wszWMDMSyncID = "WMDM/SyncID"$$
' //Type: GUID, WMDM_TAG_DATATYPE: WMDM_TYPE_GUID
'static const WCHAR *g_wszWMDMPersistentUniqueID = L"WMDM/PersistentUniqueID";
$$g_wszWMDMPersistentUniqueID = "WMDM/PersistentUniqueID"$$
' //Type: DWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_DWORD
'static const WCHAR *g_wszWMDMWidth = L"WMDM/Width";
$$g_wszWMDMWidth = "WMDM/Width"$$
' //Type: DWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_DWORD
'static const WCHAR *g_wszWMDMHeight = L"WMDM/Height";
$$g_wszWMDMHeight = "WMDM/Height"$$
' //Type: WMDMDATETIME, WMDM_TAG_DATATYPE: WMDM_TYPE_DATETIME
'static const WCHAR *g_wszWMDMSyncTime = L"WMDM/SyncTime";
$$g_wszWMDMSyncTime = "WMDM/SyncTime"$$
' //Type: LPCWSTR, WMDM_TAG_DATATYPE: WMDM_TYPE_STRING
'static const WCHAR *g_wszWMDMParentalRating = L"WMDM/ParentalRating";
$$g_wszWMDMParentalRating = "WMDM/ParentalRating"$$
' //Type: LPCWSTR, WMDM_TAG_DATATYPE: WMDM_TYPE_STRING
'static const WCHAR *g_wszWMDMMetaGenre = L"WMDM/MetaGenre";
$$g_wszWMDMMetaGenre = "WMDM/MetaGenre"$$
' //Type: BOOL, WMDM_TAG_DATATYPE: WMDM_TYPE_BOOL
'static const WCHAR *g_wszWMDMIsRepeat = L"WMDM/IsRepeat";
$$g_wszWMDMIsRepeat = "WMDM/IsRepeat"$$
' // Device properties
' //PROPVARIANT vt = VT_BSTR | VT_ARRAY
'static const WCHAR *g_wszWMDMSupportedDeviceProperties = L"WMDM/SupportedDeviceProperties";
$$g_wszWMDMSupportedDeviceProperties = "WMDM/SupportedDeviceProperties"$$
' //PROPVARIANT vt = VT_BSTR
'static const WCHAR *g_wszWMDMDeviceFriendlyName = L"WMDM/DeviceFriendlyName";
$$g_wszWMDMDeviceFriendlyName = "WMDM/DeviceFriendlyName"$$
' //PROPVARIANT vt = VT_UI4 | VT_ARRAY
'static const WCHAR *g_wszWMDMFormatsSupported = L"WMDM/FormatsSupported";
$$g_wszWMDMFormatsSupported = "WMDM/FormatsSupported"$$
' //PROPVARIANT vt = VT_BOOL
'static const WCHAR *g_wszWMDMFormatsSupportedAreOrdered = L"WMDM/FormatsSupportedAreOrdered";
$$g_wszWMDMFormatsSupportedAreOrdered = "WMDM/FormatsSupportedAreOrdered"$$
' //PROPVARIANT vt = VT_BSTR
'static const WCHAR *g_wszWMDMSyncRelationshipID = L"WMDM/SyncRelationshipID";
$$g_wszWMDMSyncRelationshipID = "WMDM/SyncRelationshipID"$$
' //PROPVARIANT vt = VT_BSTR
'static const WCHAR *g_wszWMDMDeviceModelName = L"WMDM/DeviceModelName";
$$g_wszWMDMDeviceModelName = "WMDM/DeviceModelName"$$
' //PROPVARIANT vt = VT_BSTR
'static const WCHAR *g_wszWMDMDeviceFirmwareVersion = L"WMDM/DeviceFirmwareVersion";
$$g_wszWMDMDeviceFirmwareVersion = "WMDM/DeviceFirmwareVersion"$$
' //PROPVARIANT vt = VT_BSTR
'static const WCHAR *g_wszWMDMDeviceVendorExtension = L"WMDM/DeviceVendorExtension";
$$g_wszWMDMDeviceVendorExtension = "WMDM/DeviceVendorExtension"$$
' //PROPVARIANT vt = VT_CLSID
'static const WCHAR *g_wszWMDMDeviceProtocol = L"WMDM/DeviceProtocol";
$$g_wszWMDMDeviceProtocol = "WMDM/DeviceProtocol"$$
' //PROPVARIANT vt = VT_CLSID
'static const WCHAR *g_wszWMDMDeviceServiceProviderVendor = L"WMDM/DeviceServiceProviderVendor";
$$g_wszWMDMDeviceServiceProviderVendor = "WMDM/DeviceServiceProviderVendor"$$
' //PROPVARIANT vt = VT_BSTR
'static const WCHAR *g_wszWMDMDeviceRevocationInfo = L"WMDM/DeviceRevocationInfo";
$$g_wszWMDMDeviceRevocationInfo = "WMDM/DeviceRevocationInfo"$$
' //PROPVARIANT vt = VT_BSTR
'static const WCHAR *g_wszWMDMCollectionID = L"WMDM/CollectionID";
$$g_wszWMDMCollectionID = "WMDM/CollectionID"$$
' //Type: LPCWSTR, WMDM_TAG_DATATYPE: WMDM_TYPE_STRING
'static const WCHAR *g_wszWMDMOwner = L"WMDM/Owner";
$$g_wszWMDMOwner = "WMDM/Owner"$$
' //Type: LPCWSTR, WMDM_TAG_DATATYPE: WMDM_TYPE_STRING
'static const WCHAR *g_wszWMDMEditor = L"WMDM/Editor";
$$g_wszWMDMEditor = "WMDM/Editor"$$
' //Type: LPCWSTR, WMDM_TAG_DATATYPE: WMDM_TYPE_STRING
'static const WCHAR *g_wszWMDMWebmaster = L"WMDM/Webmaster";
$$g_wszWMDMWebmaster = "WMDM/Webmaster"$$
' //Type: LPCWSTR, WMDM_TAG_DATATYPE: WMDM_TYPE_STRING
'static const WCHAR *g_wszWMDMSourceURL = L"WMDM/SourceURL";
$$g_wszWMDMSourceURL = "WMDM/SourceURL"$$
' //Type: LPCWSTR, WMDM_TAG_DATATYPE: WMDM_TYPE_STRING
'static const WCHAR *g_wszWMDMDestinationURL = L"WMDM/DestinationURL";
$$g_wszWMDMDestinationURL = "WMDM/DestinationURL"$$
' //Type: LPCWSTR, WMDM_TAG_DATATYPE: WMDM_TYPE_STRING
'static const WCHAR *g_wszWMDMCategory = L"WMDM/Category";
$$g_wszWMDMCategory = "WMDM/Category"$$
' //Type: QWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_QWORD
'static const WCHAR *g_wszWMDMTimeBookmark = L"WMDM/TimeBookmark";
$$g_wszWMDMTimeBookmark = "WMDM/TimeBookmark"$$
' //Type: LPCWSTR, WMDM_TAG_DATATYPE: WMDM_TYPE_STRING
'static const WCHAR *g_wszWMDMObjectBookmark = L"WMDM/ObjectBookmark";
$$g_wszWMDMObjectBookmark = "WMDM/ObjectBookmark"$$
' //Type: QWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_QWORD
'static const WCHAR *g_wszWMDMByteBookmark = L"WMDM/ByteBookmark";
$$g_wszWMDMByteBookmark = "WMDM/ByteBookmark"$$
' //Type: QWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_QWORD
'static const WCHAR *g_wszWMDMDataOffset = L"WMDM/DataOffset";
$$g_wszWMDMDataOffset = "WMDM/DataOffset"$$
' //Type: QWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_QWORD
'static const WCHAR *g_wszWMDMDataLength = L"WMDM/DataLength";
$$g_wszWMDMDataLength = "WMDM/DataLength"$$
' //Type: DWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_DWORD
'static const WCHAR *g_wszWMDMDataUnits = L"WMDM/DataUnits";
$$g_wszWMDMDataUnits = "WMDM/DataUnits"$$
' //Type: QWORD, WMDM_TAG_DATATYPE: WMDM_TYPE_QWORD
'static const WCHAR *g_wszWMDMTimeToLive = L"WMDM/TimeToLive";
$$g_wszWMDMTimeToLive = "WMDM/TimeToLive"$$
' //Type: LPCWSTR, WMDM_TAG_DATATYPE: WMDM_TYPE_STRING
'static const WCHAR *g_wszWMDMMediaGuid = L"WMDM/MediaGuid";
$$g_wszWMDMMediaGuid = "WMDM/MediaGuid"$$
' //Type: BYTE*, WMDM_TAG_DATATYPE: WMDM_TYPE_BINARY
'static const WCHAR *g_wszWPDPassthroughPropertyValues = L"WPD/PassthroughPropertyValues";
$$g_wszWPDPassthroughPropertyValues = "WPD/PassthroughPropertyValues"$$
'#define CCH_WMDM_PROPNAME(sz) (sizeof(sz)/sizeof(sz[0]))
'union WMDMDetermineMaxPropStringLen {
'WCHAR sz001[CCH_WMDM_PROPNAME(L"WMDM/DeviceFirmwareVersion")];
'WCHAR sz002[CCH_WMDM_PROPNAME(L"WMDM/SupportedDeviceProperties")];
'WCHAR sz003[CCH_WMDM_PROPNAME(L"WMDM/FileName")];
'WCHAR sz004[CCH_WMDM_PROPNAME(L"WMDM/FormatCode")];
'WCHAR sz005[CCH_WMDM_PROPNAME(L"WMDM/LastModifiedDate")];
'WCHAR sz006[CCH_WMDM_PROPNAME(L"WMDM/FileSize")];
'WCHAR sz007[CCH_WMDM_PROPNAME(L"WMDM/FileAttributes")];
'WCHAR sz008[CCH_WMDM_PROPNAME(L"WMDM/AudioWAVECodec")];
'WCHAR sz009[CCH_WMDM_PROPNAME(L"WMDM/VideoFourCCCodec")];
'WCHAR sz010[CCH_WMDM_PROPNAME(L"WMDM/Title")];
'WCHAR sz011[CCH_WMDM_PROPNAME(L"WMDM/Author")];
'WCHAR sz012[CCH_WMDM_PROPNAME(L"WMDM/Description")];
'WCHAR sz013[CCH_WMDM_PROPNAME(L"WMDM/IsProtected")];
'WCHAR sz014[CCH_WMDM_PROPNAME(L"WMDM/AlbumTitle")];
'WCHAR sz015[CCH_WMDM_PROPNAME(L"WMDM/AlbumArtist")];
'WCHAR sz016[CCH_WMDM_PROPNAME(L"WMDM/Track")];
'WCHAR sz017[CCH_WMDM_PROPNAME(L"WMDM/Genre")];
'WCHAR sz018[CCH_WMDM_PROPNAME(L"WMDM/TrackMood")];
'WCHAR sz019[CCH_WMDM_PROPNAME(L"WMDM/AlbumCoverFormat")];
'WCHAR sz020[CCH_WMDM_PROPNAME(L"WMDM/AlbumCoverSize")];
'WCHAR sz021[CCH_WMDM_PROPNAME(L"WMDM/AlbumCoverHeight")];
'WCHAR sz022[CCH_WMDM_PROPNAME(L"WMDM/AlbumCoverWidth")];
'WCHAR sz023[CCH_WMDM_PROPNAME(L"WMDM/AlbumCoverDuration")];
'WCHAR sz024[CCH_WMDM_PROPNAME(L"WMDM/AlbumCoverData")];
'WCHAR sz025[CCH_WMDM_PROPNAME(L"WMDM/Year")];
'WCHAR sz026[CCH_WMDM_PROPNAME(L"WMDM/Composer")];
'WCHAR sz027[CCH_WMDM_PROPNAME(L"WMDM/Codec")];
'WCHAR sz028[CCH_WMDM_PROPNAME(L"WMDM/DRMId")];
'WCHAR sz029[CCH_WMDM_PROPNAME(L"WMDM/Bitrate")];
'WCHAR sz030[CCH_WMDM_PROPNAME(L"WMDM/BitRateType")];
'WCHAR sz031[CCH_WMDM_PROPNAME(L"WMDM/SampleRate")];
'WCHAR sz032[CCH_WMDM_PROPNAME(L"WMDM/NumChannels")];
'WCHAR sz033[CCH_WMDM_PROPNAME(L"WMDM/BlockAlignment")];
'WCHAR sz034[CCH_WMDM_PROPNAME(L"WMDM/AudioBitDepth")];
'WCHAR sz035[CCH_WMDM_PROPNAME(L"WMDM/TotalBitrate")];
'WCHAR sz036[CCH_WMDM_PROPNAME(L"WMDM/VideoBitrate")];
'WCHAR sz037[CCH_WMDM_PROPNAME(L"WMDM/FrameRate")];
'WCHAR sz041[CCH_WMDM_PROPNAME(L"WMDM/ScanType")];
'WCHAR sz043[CCH_WMDM_PROPNAME(L"WMDM/KeyFrameDistance")];
'WCHAR sz044[CCH_WMDM_PROPNAME(L"WMDM/BufferSize")];
'WCHAR sz045[CCH_WMDM_PROPNAME(L"WMDM/QualitySetting")];
'WCHAR sz046[CCH_WMDM_PROPNAME(L"WMDM/Duration")];
'WCHAR sz047[CCH_WMDM_PROPNAME(L"WMDM/AlbumArt")];
'WCHAR sz048[CCH_WMDM_PROPNAME(L"WMDM/BuyNow")];
'WCHAR sz049[CCH_WMDM_PROPNAME(L"WMDM/MediaClassPrimaryID")];
'WCHAR sz050[CCH_WMDM_PROPNAME(L"WMDM/MediaClassSecondayID")];
'WCHAR sz051[CCH_WMDM_PROPNAME(L"WMDM/UserEffectiveRating")];
'WCHAR sz052[CCH_WMDM_PROPNAME(L"WMDM/UserRating")];
'WCHAR sz053[CCH_WMDM_PROPNAME(L"WMDM/UserRatingOnDevice")];
'WCHAR sz054[CCH_WMDM_PROPNAME(L"WMDM/PlayCount")];
'WCHAR sz055[CCH_WMDM_PROPNAME(L"WMDM/DevicePlayCount")];
'WCHAR sz056[CCH_WMDM_PROPNAME(L"WMDM/AuthorDate")];
'WCHAR sz057[CCH_WMDM_PROPNAME(L"WMDM/UserLastPlayTime")];
'WCHAR sz058[CCH_WMDM_PROPNAME(L"WMDM/SubTitle")];
'WCHAR sz059[CCH_WMDM_PROPNAME(L"WMDM/SubTitleDescription")];
'WCHAR sz060[CCH_WMDM_PROPNAME(L"WMDM/MediaCredits")];
'WCHAR sz061[CCH_WMDM_PROPNAME(L"WMDM/MediaStationName")];
'WCHAR sz062[CCH_WMDM_PROPNAME(L"WMDM/MediaOriginalChannel")];
'WCHAR sz063[CCH_WMDM_PROPNAME(L"WMDM/MediaOriginalBroadcastDateTime")];
'WCHAR sz064[CCH_WMDM_PROPNAME(L"WMDM/ProviderCopyright")];
'WCHAR sz065[CCH_WMDM_PROPNAME(L"WMDM/SyncID")];
'WCHAR sz066[CCH_WMDM_PROPNAME(L"WMDM/PersistentUniqueID")];
'WCHAR sz067[CCH_WMDM_PROPNAME(L"WMDM/Width")];
'WCHAR sz068[CCH_WMDM_PROPNAME(L"WMDM/Height")];
'WCHAR sz069[CCH_WMDM_PROPNAME(L"WMDM/SyncTime")];
'WCHAR sz070[CCH_WMDM_PROPNAME(L"WMDM/ParentalRating")];
'WCHAR sz071[CCH_WMDM_PROPNAME(L"WMDM/MetaGenre")];
'WCHAR sz072[CCH_WMDM_PROPNAME(L"WMDM/IsRepeat")];
'WCHAR sz073[CCH_WMDM_PROPNAME(L"WMDM/SupportedDeviceProperties")];
'WCHAR sz074[CCH_WMDM_PROPNAME(L"WMDM/DeviceFriendlyName")];
'WCHAR sz075[CCH_WMDM_PROPNAME(L"WMDM/FormatsSupported")];
'WCHAR sz076[CCH_WMDM_PROPNAME(L"WMDM/SyncRelationshipID")];
'WCHAR sz077[CCH_WMDM_PROPNAME(L"WMDM/DeviceModelName")];
'WCHAR sz078[CCH_WMDM_PROPNAME(L"WMDM/DeviceFirmwareVersion")];
'WCHAR sz079[CCH_WMDM_PROPNAME(L"WMDM/DeviceVendorExtension")];
'WCHAR sz080[CCH_WMDM_PROPNAME(L"WMDM/DeviceProtocol")];
'WCHAR sz081[CCH_WMDM_PROPNAME(L"WMDM/DeviceServiceProviderVendor")];
'WCHAR sz082[CCH_WMDM_PROPNAME(L"WMDM/EncodingProfile")];
'WCHAR sz083[CCH_WMDM_PROPNAME(L"WMDM/FormatsSupportedAreOrdered")];
'WCHAR sz084[CCH_WMDM_PROPNAME(L"WMDM/DeviceRevocationInfo")];
'WCHAR sz085[CCH_WMDM_PROPNAME(L"WMDM/CollectionID")];
'WCHAR sz086[CCH_WMDM_PROPNAME(L"WPD/PassthroughPropertyValues")];
'};
'#define WMDM_MAXLEN_PROPERTYNAME (sizeof(WMDMDetermineMaxPropStringLen)/sizeof(WCHAR))
' // Open Mode Flags
%EQUATE `MDSP_READ = &H00000001
%EQUATE `MDSP_WRITE = &H00000002
' // Seek Flags
%EQUATE `MDSP_SEEK_BOF = &H00000001
%EQUATE `MDSP_SEEK_CUR = &H00000002
%EQUATE `MDSP_SEEK_EOF = &H00000004
' ########################################################################################
' Interface name = IMDServiceProvider
' IID = {1DCB3A10-33ED-11D3-8470-00C04F79DBC0}
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IMDServiceProvider_INTERFACE_DEFINED)
 %IMDServiceProvider_INTERFACE_DEFINED = 1
INTERFACE IMDServiceProvider $IID_IMDServiceProvider
 INHERIT IUnknown
 ' =====================================================================================
 METHOD GetDeviceCount ( ' VTable offset = 12
 BYREF pdwCount AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD EnumDevices ( ' VTable offset = 16
 BYREF ppEnumDevice AS IMDSPEnumDevice
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IMDServiceProvider_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IMDServiceProvider2
' IID = {B2FA24B7-CDA3-4694-9862-413AE1A34819}
' Inherited interface = IMDServiceProvider
' ########################################################################################
#IF NOT %DEF(%IMDServiceProvider2_INTERFACE_DEFINED)
 %IMDServiceProvider2_INTERFACE_DEFINED = 1
INTERFACE IMDServiceProvider2 $IID_IMDServiceProvider2
 INHERIT IUnknown
 ' =====================================================================================
 ' IMDServiceProvider Methods
 ' =====================================================================================
 METHOD GetDeviceCount ( ' VTable offset = 12
 BYREF pdwCount AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD EnumDevices ( ' VTable offset = 16
 BYREF ppEnumDevice AS IMDSPEnumDevice
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IMDServiceProvider2 Methods
 ' =====================================================================================
 METHOD CreateDevice ( ' VTable offset = 20
 BYREF pwszDevicePath AS WSTRINGZ
 , BYREF pdwCount AS DWORD
 , BYREF pppDeviceArray AS IMDSPDevice
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IMDServiceProvider2_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IMDServiceProvider3
' IID = {4ED13EF3-A971-4D19-9F51-0E1826B2DA57}
' Inherited interface = IMDServiceProvider2
' ########################################################################################
#IF NOT %DEF(%IMDServiceProvider3_INTERFACE_DEFINED)
 %IMDServiceProvider3_INTERFACE_DEFINED = 1
INTERFACE IMDServiceProvider3 $IID_IMDServiceProvider3
 INHERIT IUnknown
 ' =====================================================================================
 ' IMDServiceProvider Methods
 ' =====================================================================================
 METHOD GetDeviceCount ( ' VTable offset = 12
 BYREF pdwCount AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD EnumDevices ( ' VTable offset = 16
 BYREF ppEnumDevice AS IMDSPEnumDevice
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IMDServiceProvider2 Methods
 ' =====================================================================================
 METHOD CreateDevice ( ' VTable offset = 20
 BYREF pwszDevicePath AS WSTRINGZ
 , BYREF pdwCount AS DWORD
 , BYREF pppDeviceArray AS IMDSPDevice
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IMDServiceProvider3 Methods
 ' =====================================================================================
 METHOD SetDeviceEnumPreference ( ' VTable offset = 24
 BYVAL dwEnumPref AS DWORD
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IMDServiceProvider3_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IMDSPEnumDevice
' IID = {1DCB3A11-33ED-11D3-8470-00C04F79DBC0}
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IMDSPEnumDevice_INTERFACE_DEFINED)
 %IMDSPEnumDevice_INTERFACE_DEFINED = 1
INTERFACE IMDSPEnumDevice $IID_IMDSPEnumDevice
 INHERIT IUnknown
 ' =====================================================================================
 METHOD Next ( ' VTable offset = 12
 BYVAL celt AS DWORD
 , BYREF ppDevice AS IMDSPDevice
 , BYREF pceltFetched AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD Skip ( ' VTable offset = 16
 BYVAL celt AS DWORD
 , BYREF pceltFetched AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD Reset ( ' VTable offset = 20
 ) AS LONG
 ' =====================================================================================
 METHOD Clone ( ' VTable offset = 24
 BYREF ppEnumDevice AS IMDSPEnumDevice
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IMDSPEnumDevice_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IMDSPDevice
' IID = {1DCB3A12-33ED-11D3-8470-00C04F79DBC0}
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IMDSPDevice_INTERFACE_DEFINED)
 %IMDSPDevice_INTERFACE_DEFINED = 1
INTERFACE IMDSPDevice $IID_IMDSPDevice
 INHERIT IUnknown
 ' =====================================================================================
 METHOD GetName ( ' VTable offset = 12
 BYREF pwszName AS WSTRINGZ
 , BYVAL nMaxChars AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetManufacturer ( ' VTable offset = 16
 BYREF pwszName AS WSTRINGZ
 , BYVAL nMaxChars AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetVersion ( ' VTable offset = 20
 BYREF pdwVersion AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetType ( ' VTable offset = 24
 BYREF pdwType AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetSerialNumber ( ' VTable offset = 28
 BYREF pSerialNumber AS WMDMID
 , BYREF abMac AS BYTE
 ) AS LONG
 ' =====================================================================================
 METHOD GetPowerSource ( ' VTable offset = 32
 BYREF pdwPowerSource AS DWORD
 , BYREF pdwPercentRemaining AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetStatus ( ' VTable offset = 36
 BYREF pdwStatus AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetDeviceIcon ( ' VTable offset = 40
 BYREF hIcon AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD EnumStorage ( ' VTable offset = 44
 BYREF ppEnumStorage AS IMDSPEnumStorage
 ) AS LONG
 ' =====================================================================================
 METHOD GetFormatSupport ( ' VTable offset = 48
 BYREF pFormatEx AS WAVEFORMATEX
 , BYREF pnFormatCount AS DWORD
 , BYREF pppwszMimeType AS DWORD
 , BYREF pnMimeTypeCount AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD SendOpaqueCommand ( ' VTable offset = 52
 BYREF pCommand AS OPAQUECOMMAND
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IMDSPDevice_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IMDSPDevice2
' IID = {420D16AD-C97D-4E00-82AA-00E9F4335DDD}
' Inherited interface = IMDSPDevice
' ########################################################################################
#IF NOT %DEF(%IMDSPDevice2_INTERFACE_DEFINED)
 %IMDSPDevice2_INTERFACE_DEFINED = 1
INTERFACE IMDSPDevice2 $IID_IMDSPDevice2
 INHERIT IUnknown
 ' =====================================================================================
 ' IMDSPDevice Methods
 ' =====================================================================================
 METHOD GetName ( ' VTable offset = 12
 BYREF pwszName AS WSTRINGZ
 , BYVAL nMaxChars AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetManufacturer ( ' VTable offset = 16
 BYREF pwszName AS WSTRINGZ
 , BYVAL nMaxChars AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetVersion ( ' VTable offset = 20
 BYREF pdwVersion AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetType ( ' VTable offset = 24
 BYREF pdwType AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetSerialNumber ( ' VTable offset = 28
 BYREF pSerialNumber AS WMDMID
 , BYREF abMac AS BYTE
 ) AS LONG
 ' =====================================================================================
 METHOD GetPowerSource ( ' VTable offset = 32
 BYREF pdwPowerSource AS DWORD
 , BYREF pdwPercentRemaining AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetStatus ( ' VTable offset = 36
 BYREF pdwStatus AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetDeviceIcon ( ' VTable offset = 40
 BYREF hIcon AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD EnumStorage ( ' VTable offset = 44
 BYREF ppEnumStorage AS IMDSPEnumStorage
 ) AS LONG
 ' =====================================================================================
 METHOD GetFormatSupport ( ' VTable offset = 48
 BYREF pFormatEx AS WAVEFORMATEX
 , BYREF pnFormatCount AS DWORD
 , BYREF pppwszMimeType AS DWORD
 , BYREF pnMimeTypeCount AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD SendOpaqueCommand ( ' VTable offset = 52
 BYREF pCommand AS OPAQUECOMMAND
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IMDSPDevice2 Methods
 ' =====================================================================================
 METHOD GetStorage ( ' VTable offset = 56
 BYREF pszStorageName AS WSTRINGZ
 , BYREF ppStorage AS IMDSPStorage
 ) AS LONG
 ' =====================================================================================
 METHOD GetFormatSupport2 ( ' VTable offset = 60
 BYVAL dwFlags AS DWORD
 , BYREF ppAudioFormatEx AS WAVEFORMATEX
 , BYREF pnAudioFormatCount AS DWORD
 , BYREF ppVideoFormatEx AS VIDEOINFOHEADER
 , BYREF pnVideoFormatCount AS DWORD
 , BYREF ppFileType AS WMFILECAPABILITIES
 , BYREF pnFileTypeCount AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetSpecifyPropertyPages ( ' VTable offset = 64
 BYREF ppSpecifyPropPages AS ISpecifyPropertyPages
 , BYREF pppUnknowns AS IUnknown
 , BYREF pcUnks AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetCanonicalName ( ' VTable offset = 68
 BYREF pwszPnPName AS WSTRINGZ
 , BYVAL nMaxChars AS DWORD
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IMDSPDevice2_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IMDSPDevice3
' IID = {1A839845-FC55-487C-976F-EE38AC0E8C4E}
' Inherited interface = IMDSPDevice2
' ########################################################################################
#IF NOT %DEF(%IMDSPDevice3_INTERFACE_DEFINED)
 %IMDSPDevice3_INTERFACE_DEFINED = 1
INTERFACE IMDSPDevice3 $IID_IMDSPDevice3
 INHERIT IUnknown
 ' =====================================================================================
 ' IMDSPDevice Methods
 ' =====================================================================================
 METHOD GetName ( ' VTable offset = 12
 BYREF pwszName AS WSTRINGZ
 , BYVAL nMaxChars AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetManufacturer ( ' VTable offset = 16
 BYREF pwszName AS WSTRINGZ
 , BYVAL nMaxChars AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetVersion ( ' VTable offset = 20
 BYREF pdwVersion AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetType ( ' VTable offset = 24
 BYREF pdwType AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetSerialNumber ( ' VTable offset = 28
 BYREF pSerialNumber AS WMDMID
 , BYREF abMac AS BYTE
 ) AS LONG
 ' =====================================================================================
 METHOD GetPowerSource ( ' VTable offset = 32
 BYREF pdwPowerSource AS DWORD
 , BYREF pdwPercentRemaining AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetStatus ( ' VTable offset = 36
 BYREF pdwStatus AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetDeviceIcon ( ' VTable offset = 40
 BYREF hIcon AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD EnumStorage ( ' VTable offset = 44
 BYREF ppEnumStorage AS IMDSPEnumStorage
 ) AS LONG
 ' =====================================================================================
 METHOD GetFormatSupport ( ' VTable offset = 48
 BYREF pFormatEx AS WAVEFORMATEX
 , BYREF pnFormatCount AS DWORD
 , BYREF pppwszMimeType AS DWORD
 , BYREF pnMimeTypeCount AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD SendOpaqueCommand ( ' VTable offset = 52
 BYREF pCommand AS OPAQUECOMMAND
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IMDSPDevice2 Methods
 ' =====================================================================================
 METHOD GetStorage ( ' VTable offset = 56
 BYREF pszStorageName AS WSTRINGZ
 , BYREF ppStorage AS IMDSPStorage
 ) AS LONG
 ' =====================================================================================
 METHOD GetFormatSupport2 ( ' VTable offset = 60
 BYVAL dwFlags AS DWORD
 , BYREF ppAudioFormatEx AS WAVEFORMATEX
 , BYREF pnAudioFormatCount AS DWORD
 , BYREF ppVideoFormatEx AS VIDEOINFOHEADER
 , BYREF pnVideoFormatCount AS DWORD
 , BYREF ppFileType AS WMFILECAPABILITIES
 , BYREF pnFileTypeCount AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetSpecifyPropertyPages ( ' VTable offset = 64
 BYREF ppSpecifyPropPages AS ISpecifyPropertyPages
 , BYREF pppUnknowns AS IUnknown
 , BYREF pcUnks AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetCanonicalName ( ' VTable offset = 68
 BYREF pwszPnPName AS WSTRINGZ
 , BYVAL nMaxChars AS DWORD
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IMDSPDevice3 Methods
 ' =====================================================================================
 METHOD GetProperty ( ' VTable offset = 72
 BYREF pwszPropName AS WSTRINGZ
 , BYREF pValue AS PROPVARIANT
 ) AS LONG
 ' =====================================================================================
 METHOD SetProperty ( ' VTable offset = 76
 BYREF pwszPropName AS WSTRINGZ
 , BYREF pValue AS PROPVARIANT
 ) AS LONG
 ' =====================================================================================
 METHOD GetFormatCapability ( ' VTable offset = 80
 BYVAL format AS DWORD
 , BYREF pFormatSupport AS WMDM_FORMAT_CAPABILITY
 ) AS LONG
 ' =====================================================================================
 METHOD DeviceIoControl ( ' VTable offset = 84
 BYVAL dwIoControlCode AS DWORD
 , BYVAL lpInBuffer AS BYTE PTR
 , BYVAL nInBufferSize AS DWORD
 , BYREF lpOutBuffer AS DWORD
 , BYREF pnOutBufferSize AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD FindStorage ( ' VTable offset = 88
 BYVAL findScope AS LONG
 , BYREF pwszUniqueID AS WSTRINGZ
 , BYREF ppStorage AS IMDSPStorage
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IMDSPDevice3_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IMDSPDeviceControl
' IID = {1DCB3A14-33ED-11D3-8470-00C04F79DBC0}
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IMDSPDeviceControl_INTERFACE_DEFINED)
 %IMDSPDeviceControl_INTERFACE_DEFINED = 1
INTERFACE IMDSPDeviceControl $IID_IMDSPDeviceControl
 INHERIT IUnknown
 ' =====================================================================================
 METHOD GetDCStatus ( ' VTable offset = 12
 BYREF pdwStatus AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetCapabilities ( ' VTable offset = 16
 BYREF pdwCapabilitiesMask AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD Play ( ' VTable offset = 20
 ) AS LONG
 ' =====================================================================================
 METHOD Record ( ' VTable offset = 24
 BYREF pFormat AS WAVEFORMATEX
 ) AS LONG
 ' =====================================================================================
 METHOD Pause ( ' VTable offset = 28
 ) AS LONG
 ' =====================================================================================
 METHOD Resume ( ' VTable offset = 32
 ) AS LONG
 ' =====================================================================================
 METHOD Stop ( ' VTable offset = 36
 ) AS LONG
 ' =====================================================================================
 METHOD Seek ( ' VTable offset = 40
 BYVAL fuMode AS DWORD
 , BYVAL nOffset AS LONG
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IMDSPDeviceControl_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IMDSPEnumStorage
' IID = {1DCB3A15-33ED-11D3-8470-00C04F79DBC0}
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IMDSPEnumStorage_INTERFACE_DEFINED)
 %IMDSPEnumStorage_INTERFACE_DEFINED = 1
INTERFACE IMDSPEnumStorage $IID_IMDSPEnumStorage
 INHERIT IUnknown
 ' =====================================================================================
 METHOD Next ( ' VTable offset = 12
 BYVAL celt AS DWORD
 , BYREF ppStorage AS IMDSPStorage
 , BYREF pceltFetched AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD Skip ( ' VTable offset = 16
 BYVAL celt AS DWORD
 , BYREF pceltFetched AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD Reset ( ' VTable offset = 20
 ) AS LONG
 ' =====================================================================================
 METHOD Clone ( ' VTable offset = 24
 BYREF ppEnumStorage AS IMDSPEnumStorage
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IMDSPEnumStorage_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IMDSPStorage
' IID = {1DCB3A15-33ED-11D3-8470-00C04F79DBC0}
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IMDSPStorage_INTERFACE_DEFINED)
 %IMDSPStorage_INTERFACE_DEFINED = 1
INTERFACE IMDSPStorage $IID_IMDSPStorage
 INHERIT IUnknown
 ' =====================================================================================
 METHOD SetAttributes ( ' VTable offset = 12
 BYVAL dwAttributes AS DWORD
 , BYREF pFormat AS WAVEFORMATEX
 ) AS LONG
 ' =====================================================================================
 METHOD GetStorageGlobals ( ' VTable offset = 16
 BYREF ppStorageGlobals AS IMDSPStorageGlobals
 ) AS LONG
 ' =====================================================================================
 METHOD GetAttributes ( ' VTable offset = 20
 BYREF pdwAttributes AS DWORD
 , BYREF pFormat AS WAVEFORMATEX
 ) AS LONG
 ' =====================================================================================
 METHOD GetName ( ' VTable offset = 24
 BYREF pwszName AS WSTRINGZ
 , BYVAL nMaxChars AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetDate ( ' VTable offset = 28
 BYREF pDateTimeUTC AS WMDMDATETIME
 ) AS LONG
 ' =====================================================================================
 METHOD GetSize ( ' VTable offset = 32
 BYREF pdwSizeLow AS DWORD
 , BYREF pdwSizeHigh AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetRights ( ' VTable offset = 36
 BYREF ppRights AS WMDMRIGHTS
 , BYREF pnRightsCount AS DWORD
 , BYREF abMac AS BYTE
 ) AS LONG
 ' =====================================================================================
 METHOD CreateStorage ( ' VTable offset = 40
 BYVAL dwAttributes AS DWORD
 , BYREF pFormat AS WAVEFORMATEX
 , BYREF pwszName AS WSTRINGZ
 , BYREF ppNewStorage AS IMDSPStorage
 ) AS LONG
 ' =====================================================================================
 METHOD EnumStorage ( ' VTable offset = 44
 BYREF ppEnumStorage AS IMDSPEnumStorage
 ) AS LONG
 ' =====================================================================================
 METHOD SendOpaqueCommand ( ' VTable offset = 48
 BYREF pCommand AS OPAQUECOMMAND
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IMDSPStorage_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IMDSPStorage2
' IID = {0A5E07A5-6454-4451-9C36-1C6AE7E2B1D6}
' Inherited interface = IMDSPStorage
' ########################################################################################
#IF NOT %DEF(%IMDSPStorage2_INTERFACE_DEFINED)
 %IMDSPStorage2_INTERFACE_DEFINED = 1
INTERFACE IMDSPStorage2 $IID_IMDSPStorage2
 INHERIT IUnknown
 ' =====================================================================================
 ' IMDSPStorage Methods
 ' =====================================================================================
 METHOD SetAttributes ( ' VTable offset = 12
 BYVAL dwAttributes AS DWORD
 , BYREF pFormat AS WAVEFORMATEX
 ) AS LONG
 ' =====================================================================================
 METHOD GetStorageGlobals ( ' VTable offset = 16
 BYREF ppStorageGlobals AS IMDSPStorageGlobals
 ) AS LONG
 ' =====================================================================================
 METHOD GetAttributes ( ' VTable offset = 20
 BYREF pdwAttributes AS DWORD
 , BYREF pFormat AS WAVEFORMATEX
 ) AS LONG
 ' =====================================================================================
 METHOD GetName ( ' VTable offset = 24
 BYREF pwszName AS WSTRINGZ
 , BYVAL nMaxChars AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetDate ( ' VTable offset = 28
 BYREF pDateTimeUTC AS WMDMDATETIME
 ) AS LONG
 ' =====================================================================================
 METHOD GetSize ( ' VTable offset = 32
 BYREF pdwSizeLow AS DWORD
 , BYREF pdwSizeHigh AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetRights ( ' VTable offset = 36
 BYREF ppRights AS WMDMRIGHTS
 , BYREF pnRightsCount AS DWORD
 , BYREF abMac AS BYTE
 ) AS LONG
 ' =====================================================================================
 METHOD CreateStorage ( ' VTable offset = 40
 BYVAL dwAttributes AS DWORD
 , BYREF pFormat AS WAVEFORMATEX
 , BYREF pwszName AS WSTRINGZ
 , BYREF ppNewStorage AS IMDSPStorage
 ) AS LONG
 ' =====================================================================================
 METHOD EnumStorage ( ' VTable offset = 44
 BYREF ppEnumStorage AS IMDSPEnumStorage
 ) AS LONG
 ' =====================================================================================
 METHOD SendOpaqueCommand ( ' VTable offset = 48
 BYREF pCommand AS OPAQUECOMMAND
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IMDSPStorage2 Methods
 ' =====================================================================================
 METHOD GetStorage ( ' VTable offset = 52
 BYREF pszStorageName AS WSTRINGZ
 , BYREF ppStorage AS IMDSPStorage
 ) AS LONG
 ' =====================================================================================
 METHOD CreateStorage2 ( ' VTable offset = 56
 BYVAL dwAttributes AS DWORD
 , BYVAL dwAttributesEx AS DWORD
 , BYREF pAudioFormat AS WAVEFORMATEX
 , BYREF pVideoFormat AS VIDEOINFOHEADER
 , BYREF pwszName AS WSTRINGZ
 , BYVAL qwFileSize AS QUAD
 , BYREF ppNewStorage AS IMDSPStorage
 ) AS LONG
 ' =====================================================================================
 METHOD SetAttributes2 ( ' VTable offset = 60
 BYVAL dwAttributes AS DWORD
 , BYVAL dwAttributesEx AS DWORD
 , BYREF pAudioFormat AS WAVEFORMATEX
 , BYREF pVideoFormat AS VIDEOINFOHEADER
 ) AS LONG
 ' =====================================================================================
 METHOD GetAttributes2 ( ' VTable offset = 64
 BYREF pdwAttributes AS DWORD
 , BYREF pdwAttributesEx AS DWORD
 , BYREF pAudioFormat AS WAVEFORMATEX
 , BYREF pVideoFormat AS VIDEOINFOHEADER
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IMDSPStorage2_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IMDSPStorage3
' IID = {6C669867-97ED-4A67-9706-1C5529D2A414}
' Inherited interface = IMDSPStorage2
' ########################################################################################
#IF NOT %DEF(%IMDSPStorage3_INTERFACE_DEFINED)
 %IMDSPStorage3_INTERFACE_DEFINED = 1
INTERFACE IMDSPStorage3 $IID_IMDSPStorage3
 INHERIT IUnknown
 ' =====================================================================================
 ' IMDSPStorage Methods
 ' =====================================================================================
 METHOD SetAttributes ( ' VTable offset = 12
 BYVAL dwAttributes AS DWORD
 , BYREF pFormat AS WAVEFORMATEX
 ) AS LONG
 ' =====================================================================================
 METHOD GetStorageGlobals ( ' VTable offset = 16
 BYREF ppStorageGlobals AS IMDSPStorageGlobals
 ) AS LONG
 ' =====================================================================================
 METHOD GetAttributes ( ' VTable offset = 20
 BYREF pdwAttributes AS DWORD
 , BYREF pFormat AS WAVEFORMATEX
 ) AS LONG
 ' =====================================================================================
 METHOD GetName ( ' VTable offset = 24
 BYREF pwszName AS WSTRINGZ
 , BYVAL nMaxChars AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetDate ( ' VTable offset = 28
 BYREF pDateTimeUTC AS WMDMDATETIME
 ) AS LONG
 ' =====================================================================================
 METHOD GetSize ( ' VTable offset = 32
 BYREF pdwSizeLow AS DWORD
 , BYREF pdwSizeHigh AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetRights ( ' VTable offset = 36
 BYREF ppRights AS WMDMRIGHTS
 , BYREF pnRightsCount AS DWORD
 , BYREF abMac AS BYTE
 ) AS LONG
 ' =====================================================================================
 METHOD CreateStorage ( ' VTable offset = 40
 BYVAL dwAttributes AS DWORD
 , BYREF pFormat AS WAVEFORMATEX
 , BYREF pwszName AS WSTRINGZ
 , BYREF ppNewStorage AS IMDSPStorage
 ) AS LONG
 ' =====================================================================================
 METHOD EnumStorage ( ' VTable offset = 44
 BYREF ppEnumStorage AS IMDSPEnumStorage
 ) AS LONG
 ' =====================================================================================
 METHOD SendOpaqueCommand ( ' VTable offset = 48
 BYREF pCommand AS OPAQUECOMMAND
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IMDSPStorage2 Methods
 ' =====================================================================================
 METHOD GetStorage ( ' VTable offset = 52
 BYREF pszStorageName AS WSTRINGZ
 , BYREF ppStorage AS IMDSPStorage
 ) AS LONG
 ' =====================================================================================
 METHOD CreateStorage2 ( ' VTable offset = 56
 BYVAL dwAttributes AS DWORD
 , BYVAL dwAttributesEx AS DWORD
 , BYREF pAudioFormat AS WAVEFORMATEX
 , BYREF pVideoFormat AS VIDEOINFOHEADER
 , BYREF pwszName AS WSTRINGZ
 , BYVAL qwFileSize AS QUAD
 , BYREF ppNewStorage AS IMDSPStorage
 ) AS LONG
 ' =====================================================================================
 METHOD SetAttributes2 ( ' VTable offset = 60
 BYVAL dwAttributes AS DWORD
 , BYVAL dwAttributesEx AS DWORD
 , BYREF pAudioFormat AS WAVEFORMATEX
 , BYREF pVideoFormat AS VIDEOINFOHEADER
 ) AS LONG
 ' =====================================================================================
 METHOD GetAttributes2 ( ' VTable offset = 64
 BYREF pdwAttributes AS DWORD
 , BYREF pdwAttributesEx AS DWORD
 , BYREF pAudioFormat AS WAVEFORMATEX
 , BYREF pVideoFormat AS VIDEOINFOHEADER
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IMDSPStorage3 Methods
 ' =====================================================================================
 METHOD GetMetadata ( ' VTable offset = 68
 BYVAL pMetadata AS IWMDMMetaData
 ) AS LONG
 ' =====================================================================================
 METHOD SetMetadata ( ' VTable offset = 72
 BYVAL pMetadata AS IWMDMMetaData
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IMDSPStorage3_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IMDSPStorage4
' IID = {3133B2C4-515C-481B-B1CE-39327ECB4F74}
' Inherited interface = IMDSPStorage3
' ########################################################################################
#IF NOT %DEF(%IMDSPStorage4_INTERFACE_DEFINED)
 %IMDSPStorage4_INTERFACE_DEFINED = 1
INTERFACE IMDSPStorage4 $IID_IMDSPStorage4
 INHERIT IUnknown
 ' =====================================================================================
 ' IMDSPStorage Methods
 ' =====================================================================================
 METHOD SetAttributes ( ' VTable offset = 12
 BYVAL dwAttributes AS DWORD
 , BYREF pFormat AS WAVEFORMATEX
 ) AS LONG
 ' =====================================================================================
 METHOD GetStorageGlobals ( ' VTable offset = 16
 BYREF ppStorageGlobals AS IMDSPStorageGlobals
 ) AS LONG
 ' =====================================================================================
 METHOD GetAttributes ( ' VTable offset = 20
 BYREF pdwAttributes AS DWORD
 , BYREF pFormat AS WAVEFORMATEX
 ) AS LONG
 ' =====================================================================================
 METHOD GetName ( ' VTable offset = 24
 BYREF pwszName AS WSTRINGZ
 , BYVAL nMaxChars AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetDate ( ' VTable offset = 28
 BYREF pDateTimeUTC AS WMDMDATETIME
 ) AS LONG
 ' =====================================================================================
 METHOD GetSize ( ' VTable offset = 32
 BYREF pdwSizeLow AS DWORD
 , BYREF pdwSizeHigh AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetRights ( ' VTable offset = 36
 BYREF ppRights AS WMDMRIGHTS
 , BYREF pnRightsCount AS DWORD
 , BYREF abMac AS BYTE
 ) AS LONG
 ' =====================================================================================
 METHOD CreateStorage ( ' VTable offset = 40
 BYVAL dwAttributes AS DWORD
 , BYREF pFormat AS WAVEFORMATEX
 , BYREF pwszName AS WSTRINGZ
 , BYREF ppNewStorage AS IMDSPStorage
 ) AS LONG
 ' =====================================================================================
 METHOD EnumStorage ( ' VTable offset = 44
 BYREF ppEnumStorage AS IMDSPEnumStorage
 ) AS LONG
 ' =====================================================================================
 METHOD SendOpaqueCommand ( ' VTable offset = 48
 BYREF pCommand AS OPAQUECOMMAND
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IMDSPStorage2 Methods
 ' =====================================================================================
 METHOD GetStorage ( ' VTable offset = 52
 BYREF pszStorageName AS WSTRINGZ
 , BYREF ppStorage AS IMDSPStorage
 ) AS LONG
 ' =====================================================================================
 METHOD CreateStorage2 ( ' VTable offset = 56
 BYVAL dwAttributes AS DWORD
 , BYVAL dwAttributesEx AS DWORD
 , BYREF pAudioFormat AS WAVEFORMATEX
 , BYREF pVideoFormat AS VIDEOINFOHEADER
 , BYREF pwszName AS WSTRINGZ
 , BYVAL qwFileSize AS QUAD
 , BYREF ppNewStorage AS IMDSPStorage
 ) AS LONG
 ' =====================================================================================
 METHOD SetAttributes2 ( ' VTable offset = 60
 BYVAL dwAttributes AS DWORD
 , BYVAL dwAttributesEx AS DWORD
 , BYREF pAudioFormat AS WAVEFORMATEX
 , BYREF pVideoFormat AS VIDEOINFOHEADER
 ) AS LONG
 ' =====================================================================================
 METHOD GetAttributes2 ( ' VTable offset = 64
 BYREF pdwAttributes AS DWORD
 , BYREF pdwAttributesEx AS DWORD
 , BYREF pAudioFormat AS WAVEFORMATEX
 , BYREF pVideoFormat AS VIDEOINFOHEADER
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IMDSPStorage3 Methods
 ' =====================================================================================
 METHOD GetMetadata ( ' VTable offset = 68
 BYVAL pMetadata AS IWMDMMetaData
 ) AS LONG
 ' =====================================================================================
 METHOD SetMetadata ( ' VTable offset = 72
 BYVAL pMetadata AS IWMDMMetaData
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IMDSPStorage4 Methods
 ' =====================================================================================
 METHOD SetReferences ( ' VTable offset = 76
 BYVAL dwRefs AS DWORD
 , BYVAL ppISPStorage AS IMDSPStorage
 ) AS LONG
 ' =====================================================================================
 METHOD GetReferences ( ' VTable offset = 80
 BYREF pdwRefs AS DWORD
 , BYREF pppISPStorage AS IMDSPStorage
 ) AS LONG
 ' =====================================================================================
 METHOD CreateStorageWithMetadata ( ' VTable offset = 84
 BYVAL dwAttributes AS DWORD
 , BYREF pwszName AS WSTRINGZ
 , BYVAL pMetadata AS IWMDMMetaData
 , BYVAL qwFileSize AS QUAD
 , BYREF ppNewStorage AS IMDSPStorage
 ) AS LONG
 ' =====================================================================================
 METHOD GetSpecifiedMetadata ( ' VTable offset = 88
 BYVAL cProperties AS DWORD
 , BYREF ppwszPropNames AS WSTRINGZ
 , BYVAL pMetadata AS IWMDMMetaData
 ) AS LONG
 ' =====================================================================================
 METHOD FindStorage ( ' VTable offset = 92
 BYVAL findScope AS LONG
 , BYREF pwszUniqueID AS WSTRINGZ
 , BYREF ppStorage AS IMDSPStorage
 ) AS LONG
 ' =====================================================================================
 METHOD GetParent ( ' VTable offset = 96
 BYREF ppStorage AS IMDSPStorage
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IMDSPStorage4_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IMDSPStorageGlobals
' IID = {1DCB3A17-33ED-11D3-8470-00C04F79DBC0}
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IMDSPStorageGlobals_INTERFACE_DEFINED)
 %IMDSPStorageGlobals_INTERFACE_DEFINED = 1
INTERFACE IMDSPStorageGlobals $IID_IMDSPStorageGlobals
 INHERIT IUnknown
 ' =====================================================================================
 METHOD GetCapabilities ( ' VTable offset = 12
 BYREF pdwCapabilities AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetSerialNumber ( ' VTable offset = 16
 BYREF pSerialNum AS WMDMID
 , BYREF abMac AS BYTE
 ) AS LONG
 ' =====================================================================================
 METHOD GetTotalSize ( ' VTable offset = 20
 BYREF pdwTotalSizeLow AS DWORD
 , BYREF pdwTotalSizeHigh AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetTotalFree ( ' VTable offset = 24
 BYREF pdwFreeLow AS DWORD
 , BYREF pdwFreeHigh AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetTotalBad ( ' VTable offset = 28
 BYREF pdwBadLow AS DWORD
 , BYREF pdwBadHigh AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetStatus ( ' VTable offset = 32
 BYREF pdwStatus AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD Initialize ( ' VTable offset = 36
 BYVAL fuMode AS DWORD
 , BYVAL pProgress AS IWMDMProgress
 ) AS LONG
 ' =====================================================================================
 METHOD GetDevice ( ' VTable offset = 40
 BYREF ppDevice AS IMDSPDevice
 ) AS LONG
 ' =====================================================================================
 METHOD GetRootStorage ( ' VTable offset = 44
 BYREF ppRoot AS IMDSPStorage
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IMDSPStorageGlobals_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IMDSPObjectInfo
' IID = {1DCB3A19-33ED-11D3-8470-00C04F79DBC0}
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IMDSPObjectInfo_INTERFACE_DEFINED)
 %IMDSPObjectInfo_INTERFACE_DEFINED = 1
INTERFACE IMDSPObjectInfo $IID_IMDSPObjectInfo
 INHERIT IUnknown
 ' =====================================================================================
 METHOD GetPlayLength ( ' VTable offset = 12
 BYREF pdwLength AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD SetPlayLength ( ' VTable offset = 16
 BYVAL dwLength AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetPlayOffset ( ' VTable offset = 20
 BYREF pdwOffset AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD SetPlayOffset ( ' VTable offset = 24
 BYVAL dwOffset AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetTotalLength ( ' VTable offset = 24
 BYREF pdwLength AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetLastPlayPosition ( ' VTable offset = 28
 BYREF pdwLastPos AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetLongestPlayPosition ( ' VTable offset = 32
 BYREF pdwLongestPos AS DWORD
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IMDSPObjectInfo_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IMDSPObject
' IID = {1DCB3A18-33ED-11D3-8470-00C04F79DBC0}
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IMDSPObject_INTERFACE_DEFINED)
 %IMDSPObject_INTERFACE_DEFINED = 1
INTERFACE IMDSPObject $IID_IMDSPObject
 INHERIT IUnknown
 ' =====================================================================================
 METHOD Open ( ' VTable offset = 12
 BYVAL fuMode AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD Read ( ' VTable offset = 16
 BYREF pData AS DWORD
 , BYREF pdwSize AS DWORD
 , BYREF abMac AS BYTE
 ) AS LONG
 ' =====================================================================================
 METHOD Write ( ' VTable offset = 20
 BYVAL pData AS BYTE PTR
 , BYREF pdwSize AS DWORD
 , BYREF abMac AS BYTE
 ) AS LONG
 ' =====================================================================================
 METHOD Delete ( ' VTable offset = 24
 BYVAL fuMode AS DWORD
 , BYVAL pProgress AS IWMDMProgress
 ) AS LONG
 ' =====================================================================================
 METHOD Seek ( ' VTable offset = 28
 BYVAL fuFlags AS DWORD
 , BYVAL dwOffset AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD Rename ( ' VTable offset = 32
 BYREF pwszNewName AS WSTRINGZ
 , BYVAL pProgress AS IWMDMProgress
 ) AS LONG
 ' =====================================================================================
 METHOD Move ( ' VTable offset = 36
 BYVAL fuMode AS DWORD
 , BYVAL pProgress AS IWMDMProgress
 , BYVAL pTarget AS IMDSPStorage
 ) AS LONG
 ' =====================================================================================
 METHOD Close ( ' VTable offset = 40
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IMDSPObject_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IMDSPObject2
' IID = {3F34CD3E-5907-4341-9AF9-97F4187C3AA5}
' Inherited interface = IMDSPObject
' ########################################################################################
#IF NOT %DEF(%IMDSPObject2_INTERFACE_DEFINED)
 %IMDSPObject2_INTERFACE_DEFINED = 1
INTERFACE IMDSPObject2 $IID_IMDSPObject2
 INHERIT IUnknown
 ' =====================================================================================
 ' IMDSPObject Methods
 ' =====================================================================================
 METHOD Open ( ' VTable offset = 12
 BYVAL fuMode AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD Read ( ' VTable offset = 16
 BYREF pData AS DWORD
 , BYREF pdwSize AS DWORD
 , BYREF abMac AS BYTE
 ) AS LONG
 ' =====================================================================================
 METHOD Write ( ' VTable offset = 20
 BYVAL pData AS BYTE PTR
 , BYREF pdwSize AS DWORD
 , BYREF abMac AS BYTE
 ) AS LONG
 ' =====================================================================================
 METHOD Delete ( ' VTable offset = 24
 BYVAL fuMode AS DWORD
 , BYVAL pProgress AS IWMDMProgress
 ) AS LONG
 ' =====================================================================================
 METHOD Seek ( ' VTable offset = 28
 BYVAL fuFlags AS DWORD
 , BYVAL dwOffset AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD Rename ( ' VTable offset = 32
 BYREF pwszNewName AS WSTRINGZ
 , BYVAL pProgress AS IWMDMProgress
 ) AS LONG
 ' =====================================================================================
 METHOD Move ( ' VTable offset = 36
 BYVAL fuMode AS DWORD
 , BYVAL pProgress AS IWMDMProgress
 , BYVAL pTarget AS IMDSPStorage
 ) AS LONG
 ' =====================================================================================
 METHOD Close ( ' VTable offset = 40
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' IMDSPObject2 Methods
 ' =====================================================================================
 METHOD ReadOnClearChannel ( ' VTable offset = 44
 BYREF pData AS DWORD
 , BYREF pdwSize AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD WriteOnClearChannel ( ' VTable offset = 48
 BYVAL pData AS BYTE PTR
 , BYREF pdwSize AS DWORD
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IMDSPObject2_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IMDSPDirectTransfer
' IID = {C2FE57A8-9304-478C-9EE4-47E397B912D7}
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IMDSPDirectTransfer_INTERFACE_DEFINED)
 %IMDSPDirectTransfer_INTERFACE_DEFINED = 1
INTERFACE IMDSPDirectTransfer $IID_IMDSPDirectTransfer
 INHERIT IUnknown
 ' =====================================================================================
 METHOD TransferToDevice ( ' VTable offset = 12
 BYREF pwszSourceFilePath AS WSTRINGZ
 , BYVAL pSourceOperation AS IWMDMOperation
 , BYVAL fuFlags AS DWORD
 , BYREF pwszDestinationName AS WSTRINGZ
 , BYVAL pSourceMetaData AS IWMDMMetaData
 , BYVAL pTransferProgress AS IWMDMProgress
 , BYREF ppNewObject AS IMDSPStorage
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IMDSPDirectTransfer_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = IMDSPRevoked
' IID = {A4E8F2D4-3F31-464D-B53D-4FC335998184}
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IMDSPRevoked_INTERFACE_DEFINED)
 %IMDSPRevoked_INTERFACE_DEFINED = 1
INTERFACE IMDSPRevoked $IID_IMDSPRevoked
 INHERIT IUnknown
 ' =====================================================================================
 METHOD GetRevocationURL ( ' VTable offset = 12
 BYREF ppwszRevocationURL AS DWORD
 , BYREF pdwBufferLen AS DWORD
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IMDSPRevoked_INTERFACE_DEFINED__ */
'// SCP Data Flags
%EQUATE `WMDM_SCP_EXAMINE_EXTENSION = &H00000001&
%EQUATE `WMDM_SCP_EXAMINE_DATA = &H00000002&
%EQUATE `WMDM_SCP_DECIDE_DATA = &H00000008&
%EQUATE `WMDM_SCP_PROTECTED_OUTPUT = &H00000010&
%EQUATE `WMDM_SCP_UNPROTECTED_OUTPUT = &H00000020&
%EQUATE `WMDM_SCP_RIGHTS_DATA = &H00000040&
'// SCP Transfer Flags
%EQUATE `WMDM_SCP_TRANSFER_OBJECTDATA = &H00000020&
%EQUATE `WMDM_SCP_NO_MORE_CHANGES = &H00000040&
'// SCP DRMINFO Flags
%EQUATE `WMDM_SCP_DRMINFO_NOT_DRMPROTECTED = &H00000000&
%EQUATE `WMDM_SCP_DRMINFO_V1HEADER = &H00000001&
%EQUATE `WMDM_SCP_DRMINFO_V2HEADER = &H00000002&
#IF NOT %DEF(%DEFINE_SCP_EVENTID)
%EQUATE `DEFINE_SCP_EVENTID = 1
'// this event ID is used when SCP is acquiring secure clock from server
$SCP_EVENTID_ACQSECURECLOCK = GUID$("{86248CC9-4A59-43E2-9146-48A7F3F4140C}")
$SCP_EVENTID_NEEDTOINDIV = GUID$("{87A507C7-B469-4386-B976-D5D1CE538A6F}")
'// this event ID is used to notify the player the version DRM header found in the content
$SCP_EVENTID_DRMINFO = GUID$("{213DD287-41D2-432B-9E3F-3B4F7B3581DD}")
'// this parameter ID is used when notifying SCP_EVENTID_DRMINFO message
$SCP_PARAMID_DRMVERSION = GUID$("{41D0155D-7CC7-4217-ADA9-005074624DA4}")
#ENDIF
' ########################################################################################
' Interface name = ISCPSecureAuthenticate
' IID = {1DCB3A0F-33ED-11D3-8470-00C04F79DBC0}
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%ISCPSecureAuthenticate_INTERFACE_DEFINED)
 %ISCPSecureAuthenticate_INTERFACE_DEFINED = 1
INTERFACE ISCPSecureAuthenticate $IID_ISCPSecureAuthenticate
 INHERIT IUnknown
 ' =====================================================================================
 METHOD GetSecureQuery ( ' VTable offset = 12
 BYREF ppSecureQuery AS ISCPSecureQuery
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __ISCPSecureAuthenticate_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = ISCPSecureAuthenticate2
' IID = {B580CFAE-1672-47E2-ACAA-44BBECBCAE5B}
' Inherited interface = ISCPSecureAuthenticate
' ########################################################################################
#IF NOT %DEF(%ISCPSecureAuthenticate2_INTERFACE_DEFINED)
 %ISCPSecureAuthenticate2_INTERFACE_DEFINED = 1
INTERFACE ISCPSecureAuthenticate2 $IID_ISCPSecureAuthenticate2
 INHERIT IUnknown
 ' =====================================================================================
 ' ISCPSecureAuthenticate Methods
 ' =====================================================================================
 METHOD GetSecureQuery ( ' VTable offset = 12
 BYREF ppSecureQuery AS ISCPSecureQuery
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' ISCPSecureAuthenticate2 Methods
 ' =====================================================================================
 METHOD GetSCPSession ( ' VTable offset = 16
 BYREF ppSCPSession AS ISCPSession
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __ISCPSecureAuthenticate2_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = ISCPSecureQuery
' IID = {1DCB3A0D-33ED-11D3-8470-00C04F79DBC0}
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%ISCPSecureQuery_INTERFACE_DEFINED)
 %ISCPSecureQuery_INTERFACE_DEFINED = 1
INTERFACE ISCPSecureQuery $IID_ISCPSecureQuery
 INHERIT IUnknown
 ' =====================================================================================
 METHOD GetDataDemands ( ' VTable offset = 12
 BYREF pfuFlags AS DWORD
 , BYREF pdwMinRightsData AS DWORD
 , BYREF pdwMinExamineData AS DWORD
 , BYREF pdwMinDecideData AS DWORD
 , BYREF abMac AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD ExamineData ( ' VTable offset = 16
 BYVAL fuFlags AS DWORD
 , BYREF pwszExtension AS WSTRINGZ
 , BYVAL pData AS BYTE PTR
 , BYVAL dwSize AS DWORD
 , BYREF abMac AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD MakeDecision ( ' VTable offset = 20
 BYVAL fuFlags AS DWORD
 , BYVAL pData AS BYTE PTR
 , BYVAL dwSize AS DWORD
 , BYVAL dwAppSec AS DWORD
 , BYVAL pbSPSessionKey AS BYTE PTR
 , BYVAL dwSessionKeyLen AS DWORD
 , BYVAL pStorageGlobals AS IMDSPStorageGlobals
 , BYVAL ppExchange AS ISCPSecureExchange
 , BYREF abMac AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetRights ( ' VTable offset = 24
 BYVAL pData AS BYTE PTR
 , BYVAL dwSize AS DWORD
 , BYVAL pbSPSessionKey AS BYTE PTR
 , BYVAL dwSessionKeyLen AS DWORD
 , BYVAL pStgGlobals AS IMDSPStorageGlobals
 , BYREF ppRights AS WMDMRIGHTS
 , BYREF pnRightsCount AS DWORD
 , BYREF abMac AS DWORD
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __ISCPSecureQuery_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = ISCPSecureQuery2
' IID = {EBE17E25-4FD7-4632-AF46-6D93D4FCC72E}
' Inherited interface = ISCPSecureQuery
' ########################################################################################
#IF NOT %DEF(%ISCPSecureQuery2_INTERFACE_DEFINED)
 %ISCPSecureQuery2_INTERFACE_DEFINED = 1
INTERFACE ISCPSecureQuery2 $IID_ISCPSecureQuery2
 INHERIT IUnknown
 ' =====================================================================================
 ' ISCPSecureQuery Methods
 ' =====================================================================================
 METHOD GetDataDemands ( ' VTable offset = 12
 BYREF pfuFlags AS DWORD
 , BYREF pdwMinRightsData AS DWORD
 , BYREF pdwMinExamineData AS DWORD
 , BYREF pdwMinDecideData AS DWORD
 , BYREF abMac AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD ExamineData ( ' VTable offset = 16
 BYVAL fuFlags AS DWORD
 , BYREF pwszExtension AS WSTRINGZ
 , BYVAL pData AS BYTE PTR
 , BYVAL dwSize AS DWORD
 , BYREF abMac AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD MakeDecision ( ' VTable offset = 20
 BYVAL fuFlags AS DWORD
 , BYVAL pData AS BYTE PTR
 , BYVAL dwSize AS DWORD
 , BYVAL dwAppSec AS DWORD
 , BYVAL pbSPSessionKey AS BYTE PTR
 , BYVAL dwSessionKeyLen AS DWORD
 , BYVAL pStorageGlobals AS IMDSPStorageGlobals
 , BYVAL ppExchange AS ISCPSecureExchange
 , BYREF abMac AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetRights ( ' VTable offset = 24
 BYVAL pData AS BYTE PTR
 , BYVAL dwSize AS DWORD
 , BYVAL pbSPSessionKey AS BYTE PTR
 , BYVAL dwSessionKeyLen AS DWORD
 , BYVAL pStgGlobals AS IMDSPStorageGlobals
 , BYREF ppRights AS WMDMRIGHTS
 , BYREF pnRightsCount AS DWORD
 , BYREF abMac AS DWORD
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' ISCPSecureQuery2 Methods
 ' =====================================================================================
 METHOD MakeDecision2 ( ' VTable offset = 28
 BYVAL fuFlags AS DWORD
 , BYVAL pData AS BYTE PTR
 , BYVAL dwSize AS DWORD
 , BYVAL dwAppSec AS DWORD
 , BYVAL pbSPSessionKey AS BYTE PTR
 , BYVAL dwSessionKeyLen AS DWORD
 , BYVAL pStorageGlobals AS IMDSPStorageGlobals
 , BYVAL pAppCertApp AS BYTE PTR
 , BYVAL dwAppCertAppLen AS DWORD
 , BYVAL pAppCertSP AS BYTE PTR
 , BYVAL dwAppCertSPLen AS DWORD
 , BYREF pszRevocationURL AS DWORD
 , BYREF pdwRevocationURLLen AS DWORD
 , BYREF pdwRevocationBitFlag AS DWORD
 , BYREF pqwFileSize AS QUAD
 , BYVAL pUnknown AS IUnknown
 , BYREF ppExchange AS ISCPSecureExchange
 , BYREF abMac AS DWORD
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __ISCPSecureQuery2_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = ISCPSecureExchange
' IID = {1DCB3A0E-33ED-11D3-8470-00C04F79DBC0}
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%ISCPSecureExchange_INTERFACE_DEFINED)
 %ISCPSecureExchange_INTERFACE_DEFINED = 1
INTERFACE ISCPSecureExchange $IID_ISCPSecureExchange
 INHERIT IUnknown
 ' =====================================================================================
 METHOD TransferContainerData ( ' VTable offset = 12
 BYVAL pData AS BYTE PTR
 , BYVAL dwSize AS DWORD
 , BYREF pfuReadyFlags AS DWORD
 , BYREF abMac AS BYTE
 ) AS LONG
 ' =====================================================================================
 METHOD ObjectData ( ' VTable offset = 16
 BYREF pData AS DWORD
 , BYREF pdwSize AS DWORD
 , BYREF abMac AS BYTE
 ) AS LONG
 ' =====================================================================================
 METHOD TransferComplete ( ' VTable offset = 20
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __ISCPSecureExchange_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = ISCPSecureExchange2
' IID = {6C62FC7B-2690-483F-9D44-0A20CB35577C}
' Inherited interface = ISCPSecureExchange
' ########################################################################################
#IF NOT %DEF(%ISCPSecureExchange2_INTERFACE_DEFINED)
 %ISCPSecureExchange2_INTERFACE_DEFINED = 1
INTERFACE ISCPSecureExchange2 $IID_ISCPSecureExchange2
 INHERIT IUnknown
 ' =====================================================================================
 ' ISCPSecureExchange Methods
 ' =====================================================================================
 METHOD TransferContainerData ( ' VTable offset = 12
 BYVAL pData AS BYTE PTR
 , BYVAL dwSize AS DWORD
 , BYREF pfuReadyFlags AS DWORD
 , BYREF abMac AS BYTE
 ) AS LONG
 ' =====================================================================================
 METHOD ObjectData ( ' VTable offset = 16
 BYREF pData AS DWORD
 , BYREF pdwSize AS DWORD
 , BYREF abMac AS BYTE
 ) AS LONG
 ' =====================================================================================
 METHOD TransferComplete ( ' VTable offset = 20
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' ISCPSecureExchange2 Methods
 ' =====================================================================================
 METHOD TransferContainerData2 ( ' VTable offset = 24
 BYVAL pData AS BYTE PTR
 , BYVAL dwSize AS DWORD
 , BYVAL pProgressCallback AS IWMDMProgress3
 , BYREF pfuReadyFlags AS DWORD
 , BYREF abMac AS BYTE
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __ISCPSecureExchange2_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = ISCPSecureExchange3
' IID = {AB4E77E4-8908-4B17-BD2A-B1DBE6DD69E1}
' Inherited interface = ISCPSecureExchange2
' ########################################################################################
#IF NOT %DEF(%ISCPSecureExchange3_INTERFACE_DEFINED)
 %ISCPSecureExchange3_INTERFACE_DEFINED = 1
INTERFACE ISCPSecureExchange3 $IID_ISCPSecureExchange3
 INHERIT IUnknown
 ' =====================================================================================
 ' ISCPSecureExchange Methods
 ' =====================================================================================
 METHOD TransferContainerData ( ' VTable offset = 12
 BYVAL pData AS BYTE PTR
 , BYVAL dwSize AS DWORD
 , BYREF pfuReadyFlags AS DWORD
 , BYREF abMac AS BYTE
 ) AS LONG
 ' =====================================================================================
 METHOD ObjectData ( ' VTable offset = 16
 BYREF pData AS DWORD
 , BYREF pdwSize AS DWORD
 , BYREF abMac AS BYTE
 ) AS LONG
 ' =====================================================================================
 METHOD TransferComplete ( ' VTable offset = 20
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' ISCPSecureExchange2 Methods
 ' =====================================================================================
 METHOD TransferContainerData2 ( ' VTable offset = 24
 BYVAL pData AS BYTE PTR
 , BYVAL dwSize AS DWORD
 , BYVAL pProgressCallback AS IWMDMProgress3
 , BYREF pfuReadyFlags AS DWORD
 , BYREF abMac AS BYTE
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' ISCPSecureExchange3 Methods
 ' =====================================================================================
 METHOD TransferContainerDataOnClearChannel ( ' VTable offset = 28
 BYVAL pDevice AS IMDSPDevice
 , BYVAL pData AS BYTE PTR
 , BYVAL dwSize AS DWORD
 , BYVAL pProgressCallback AS IWMDMProgress3
 , BYREF pfuReadyFlags AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetObjectDataOnClearChannel ( ' VTable offset = 32
 BYVAL pDevice AS IMDSPDevice
 , BYREF pData AS DWORD
 , BYREF pdwSize AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD TransferCompleteForDevice ( ' VTable offset = 36
 BYVAL pDevice AS IMDSPDevice
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __ISCPSecureExchange3_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = ISCPSession
' IID = {88A3E6ED-EEE4-4619-BBB3-FD4FB62715D1}
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%ISCPSession_INTERFACE_DEFINED)
 %ISCPSession_INTERFACE_DEFINED = 1
INTERFACE ISCPSession $IID_ISCPSession
 INHERIT IUnknown
 ' =====================================================================================
 METHOD BeginSession ( ' VTable offset = 12
 BYVAL pIDevice AS IMDSPDevice
 , BYVAL pCtx AS BYTE PTR
 , BYVAL dwSizeCtx AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD EndSession ( ' VTable offset = 16
 BYVAL pCtx AS BYTE PTR
 , BYVAL dwSizeCtx AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetSecureQuery ( ' VTable offset = 20
 BYREF ppSecureQuery AS ISCPSecureQuery
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __ISCPSession_INTERFACE_DEFINED__ */
' ########################################################################################
' Interface name = ISCPSecureQuery3
' IID = {B7EDD1A2-4DAB-484B-B3C5-AD39B8B4C0B1}
' Inherited interface = ISCPSecureQuery2
' ########################################################################################
#IF NOT %DEF(%ISCPSecureQuery3_INTERFACE_DEFINED)
 %ISCPSecureQuery3_INTERFACE_DEFINED = 1
INTERFACE ISCPSecureQuery3 $IID_ISCPSecureQuery3
 INHERIT IUnknown
 ' =====================================================================================
 ' ISCPSecureQuery Methods
 ' =====================================================================================
 METHOD GetDataDemands ( ' VTable offset = 12
 BYREF pfuFlags AS DWORD
 , BYREF pdwMinRightsData AS DWORD
 , BYREF pdwMinExamineData AS DWORD
 , BYREF pdwMinDecideData AS DWORD
 , BYREF abMac AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD ExamineData ( ' VTable offset = 16
 BYVAL fuFlags AS DWORD
 , BYREF pwszExtension AS WSTRINGZ
 , BYVAL pData AS BYTE PTR
 , BYVAL dwSize AS DWORD
 , BYREF abMac AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD MakeDecision ( ' VTable offset = 20
 BYVAL fuFlags AS DWORD
 , BYVAL pData AS BYTE PTR
 , BYVAL dwSize AS DWORD
 , BYVAL dwAppSec AS DWORD
 , BYVAL pbSPSessionKey AS BYTE PTR
 , BYVAL dwSessionKeyLen AS DWORD
 , BYVAL pStorageGlobals AS IMDSPStorageGlobals
 , BYVAL ppExchange AS ISCPSecureExchange
 , BYREF abMac AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD GetRights ( ' VTable offset = 24
 BYVAL pData AS BYTE PTR
 , BYVAL dwSize AS DWORD
 , BYVAL pbSPSessionKey AS BYTE PTR
 , BYVAL dwSessionKeyLen AS DWORD
 , BYVAL pStgGlobals AS IMDSPStorageGlobals
 , BYREF ppRights AS WMDMRIGHTS
 , BYREF pnRightsCount AS DWORD
 , BYREF abMac AS DWORD
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' ISCPSecureQuery2 Methods
 ' =====================================================================================
 METHOD MakeDecision2 ( ' VTable offset = 28
 BYVAL fuFlags AS DWORD
 , BYVAL pData AS BYTE PTR
 , BYVAL dwSize AS DWORD
 , BYVAL dwAppSec AS DWORD
 , BYVAL pbSPSessionKey AS BYTE PTR
 , BYVAL dwSessionKeyLen AS DWORD
 , BYVAL pStorageGlobals AS IMDSPStorageGlobals
 , BYVAL pAppCertApp AS BYTE PTR
 , BYVAL dwAppCertAppLen AS DWORD
 , BYVAL pAppCertSP AS BYTE PTR
 , BYVAL dwAppCertSPLen AS DWORD
 , BYREF pszRevocationURL AS DWORD
 , BYREF pdwRevocationURLLen AS DWORD
 , BYREF pdwRevocationBitFlag AS DWORD
 , BYREF pqwFileSize AS QUAD
 , BYVAL pUnknown AS IUnknown
 , BYREF ppExchange AS ISCPSecureExchange
 , BYREF abMac AS DWORD
 ) AS LONG
 ' =====================================================================================
 ' =====================================================================================
 ' ISCPSecureQuery3 Methods
 ' =====================================================================================
 METHOD GetRightsOnClearChannel ( ' VTable offset = 32
 BYVAL pData AS BYTE PTR
 , BYVAL dwSize AS DWORD
 , BYVAL pbSPSessionKey AS BYTE PTR
 , BYVAL dwSessionKeyLen AS DWORD
 , BYVAL pStgGlobals AS IMDSPStorageGlobals
 , BYVAL pProgressCallback AS IWMDMProgress3
 , BYREF ppRights AS WMDMRIGHTS
 , BYREF pnRightsCount AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD MakeDecisionOnClearChannel ( ' VTable offset = 36
 BYVAL fuFlags AS DWORD
 , BYVAL pData AS BYTE PTR
 , BYVAL dwSize AS DWORD
 , BYVAL dwAppSec AS DWORD
 , BYVAL pbSPSessionKey AS BYTE PTR
 , BYVAL dwSessionKeyLen AS DWORD
 , BYVAL pStgGlobals AS IMDSPStorageGlobals
 , BYVAL pProgressCallback AS IWMDMProgress3
 , BYVAL pAppCertApp AS BYTE PTR
 , BYVAL dwAppCertAppLen AS DWORD
 , BYVAL pAppCertSP AS BYTE PTR
 , BYVAL dwAppCertSPLen AS DWORD
 , BYREF pszRevocationURL AS DWORD
 , BYREF pdwRevocationURLLen AS DWORD
 , BYREF pdwRevocationBitFlag AS DWORD
 , BYREF pqwFileSize AS QUAD
 , BYVAL pUnknown AS IUnknown
 , BYREF ppExchange AS ISCPSecureExchange
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __ISCPSecureQuery3_INTERFACE_DEFINED__ */
%EQUATE `SAC_MAC_LEN = 8
' ########################################################################################
' Interface name = IComponentAuthenticate
' IID = {A9889C00-6D2B-11D3-8496-00C04F79DBC0}
' Inherited interface = IUnknown
' ########################################################################################
#IF NOT %DEF(%IComponentAuthenticate_INTERFACE_DEFINED)
 %IComponentAuthenticate_INTERFACE_DEFINED = 1
INTERFACE IComponentAuthenticate $IID_IComponentAuthenticate
 INHERIT IUnknown
 ' =====================================================================================
 METHOD SACAuth ( ' VTable offset = 12
 BYVAL dwProtocolID AS DWORD
 , BYVAL dwPass AS DWORD
 , BYVAL pbDataIn AS BYTE PTR
 , BYVAL dwDataInLen AS DWORD
 , BYREF ppbDataOut AS DWORD
 , BYREF pdwDataOutLen AS DWORD
 ) AS LONG
 ' =====================================================================================
 METHOD SACGetProtocols ( ' VTable offset = 16
 BYREF ppdwProtocols AS DWORD
 , BYREF pdwProtocolCount AS DWORD
 ) AS LONG
 ' =====================================================================================
END INTERFACE
#ENDIF ' /* __IComponentAuthenticate_INTERFACE_DEFINED__ */
#ENDIF
