// // Microsoft Windows Media Technologies // Copyright (C) Microsoft Corporation, 1999 - 2001. All rights reserved. // import "unknwn.idl"; import "objidl.idl"; import "wtypes.idl"; typedef struct _tWAVEFORMATEX { WORD wFormatTag; /* format type */ WORD nChannels; /* number of channels (i.e. mono, stereo...) */ DWORD nSamplesPerSec; /* sample rate */ DWORD nAvgBytesPerSec; /* for buffer estimation */ WORD nBlockAlign; /* block size of data */ WORD wBitsPerSample; /* Number of bits per sample of mono data */ WORD cbSize; /* The count in bytes of the size of extra information (after cbSize) */ } _WAVEFORMATEX; typedef struct _tagBITMAPINFOHEADER { DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; } _BITMAPINFOHEADER; typedef struct _tagVIDEOINFOHEADER{ RECT rcSource; RECT rcTarget; DWORD dwBitRate; DWORD dwBitErrorRate; LONGLONG AvgTimePerFrame; _BITMAPINFOHEADER bmiHeader; } _VIDEOINFOHEADER; typedef struct _tagWMFILECAPABILITIES { LPWSTR pwszMimeType; // Mime type DWORD dwReserved; // Recerved for future use - Should be 0 for now. } WMFILECAPABILITIES; typedef struct __OPAQUECOMMAND { GUID guidCommand; DWORD dwDataLen; [size_is(dwDataLen)]BYTE *pData; BYTE abMAC[20]; } OPAQUECOMMAND; cpp_quote("#define WMDMID_LENGTH 128") #define WMDMID_LENGTH 128 typedef struct __WMDMID { UINT cbSize; DWORD dwVendorID; BYTE pID[WMDMID_LENGTH]; UINT SerialNumberLength; } WMDMID, *PWMDMID; typedef struct _WMDMDATETIME { WORD wYear; WORD wMonth; WORD wDay; WORD wHour; WORD wMinute; WORD wSecond; } WMDMDATETIME, *PWMDMDATETIME; typedef struct __WMDMRIGHTS { UINT cbSize; DWORD dwContentType; DWORD fuFlags; DWORD fuRights; DWORD dwAppSec; DWORD dwPlaybackCount; WMDMDATETIME ExpirationDate; } WMDMRIGHTS, *PWMDMRIGHTS; cpp_quote("#define WMDM_MAC_LENGTH 8") #define WMDM_MAC_LENGTH 8 cpp_quote("// WMDM HRESULTS") cpp_quote("#define WMDM_E_BUSY 0x80045000L") cpp_quote("#define WMDM_E_INTERFACEDEAD 0x80045001L") cpp_quote("#define WMDM_E_INVALIDTYPE 0x80045002L") cpp_quote("#define WMDM_E_PROCESSFAILED 0x80045003L") cpp_quote("#define WMDM_E_NOTSUPPORTED 0x80045004L") cpp_quote("#define WMDM_E_NOTCERTIFIED 0x80045005L") cpp_quote("#define WMDM_E_NORIGHTS 0x80045006L") cpp_quote("#define WMDM_E_CALL_OUT_OF_SEQUENCE 0x80045007L") cpp_quote("#define WMDM_E_BUFFERTOOSMALL 0x80045008L") cpp_quote("#define WMDM_E_MOREDATA 0x80045009L") cpp_quote("#define WMDM_E_MAC_CHECK_FAILED 0x8004500AL") cpp_quote("#define WMDM_E_USER_CANCELLED 0x8004500BL") cpp_quote("#define WMDM_E_SDMI_TRIGGER 0x8004500CL") cpp_quote("#define WMDM_E_SDMI_NOMORECOPIES 0x8004500DL") cpp_quote("#define WMDM_E_REVOKED 0x8004500EL") cpp_quote("// Revocation Flags") cpp_quote("#define WMDM_WMDM_REVOKED 0x00000001") cpp_quote("#define WMDM_APP_REVOKED 0x00000002") cpp_quote("#define WMDM_SP_REVOKED 0x00000004") cpp_quote("#define WMDM_SCP_REVOKED 0x00000008") cpp_quote("// GetFormatSupport2 Flags") cpp_quote("#define WMDM_GET_FORMAT_SUPPORT_AUDIO 0x00000001") cpp_quote("#define WMDM_GET_FORMAT_SUPPORT_VIDEO 0x00000002") cpp_quote("#define WMDM_GET_FORMAT_SUPPORT_FILE 0x00000004") cpp_quote("// MDMRIGHTS Flags") cpp_quote("#define WMDM_RIGHTS_PLAYBACKCOUNT 0x00000001") cpp_quote("#define WMDM_RIGHTS_EXPIRATIONDATE 0x00000002") cpp_quote("#define WMDM_RIGHTS_GROUPID 0x00000004") cpp_quote("#define WMDM_RIGHTS_FREESERIALIDS 0x00000008") cpp_quote("#define WMDM_RIGHTS_NAMEDSERIALIDS 0x00000010") cpp_quote("// Device Type Flags") cpp_quote("#define WMDM_DEVICE_TYPE_PLAYBACK 0x00000001") cpp_quote("#define WMDM_DEVICE_TYPE_RECORD 0x00000002") cpp_quote("#define WMDM_DEVICE_TYPE_DECODE 0x00000004") cpp_quote("#define WMDM_DEVICE_TYPE_ENCODE 0x00000008") cpp_quote("#define WMDM_DEVICE_TYPE_STORAGE 0x00000010") cpp_quote("#define WMDM_DEVICE_TYPE_VIRTUAL 0x00000020") cpp_quote("#define WMDM_DEVICE_TYPE_SDMI 0x00000040") cpp_quote("#define WMDM_DEVICE_TYPE_NONSDMI 0x00000080") cpp_quote("#define WMDM_DEVICE_TYPE_NONREENTRANT 0x00000100") cpp_quote("#define WMDM_DEVICE_TYPE_FILELISTRESYNC 0x00000200") cpp_quote("// Device Power Source Flags") cpp_quote("#define WMDM_POWER_CAP_BATTERY 0x00000001") cpp_quote("#define WMDM_POWER_CAP_EXTERNAL 0x00000002") cpp_quote("#define WMDM_POWER_IS_BATTERY 0x00000004") cpp_quote("#define WMDM_POWER_IS_EXTERNAL 0x00000008") cpp_quote("#define WMDM_POWER_PERCENT_AVAILABLE 0x00000010") cpp_quote("// Device Status Flags") cpp_quote("#define WMDM_STATUS_READY 0x00000001") cpp_quote("#define WMDM_STATUS_BUSY 0x00000002") cpp_quote("#define WMDM_STATUS_DEVICE_NOTPRESENT 0x00000004") cpp_quote("#define WMDM_STATUS_DEVICECONTROL_PLAYING 0x00000008") cpp_quote("#define WMDM_STATUS_DEVICECONTROL_RECORDING 0x00000010") cpp_quote("#define WMDM_STATUS_DEVICECONTROL_PAUSED 0x00000020") cpp_quote("#define WMDM_STATUS_DEVICECONTROL_REMOTE 0x00000040") cpp_quote("#define WMDM_STATUS_DEVICECONTROL_STREAM 0x00000080") cpp_quote("#define WMDM_STATUS_STORAGE_NOTPRESENT 0x00000100") cpp_quote("#define WMDM_STATUS_STORAGE_INITIALIZING 0x00000200") cpp_quote("#define WMDM_STATUS_STORAGE_BROKEN 0x00000400") cpp_quote("#define WMDM_STATUS_STORAGE_NOTSUPPORTED 0x00000800") cpp_quote("#define WMDM_STATUS_STORAGE_UNFORMATTED 0x00001000") cpp_quote("#define WMDM_STATUS_STORAGECONTROL_INSERTING 0x00002000") cpp_quote("#define WMDM_STATUS_STORAGECONTROL_DELETING 0x00004000") cpp_quote("#define WMDM_STATUS_STORAGECONTROL_APPENDING 0x00008000") cpp_quote("#define WMDM_STATUS_STORAGECONTROL_MOVING 0x00010000") cpp_quote("#define WMDM_STATUS_STORAGECONTROL_READING 0x00020000") cpp_quote("// Device Capabilities Flags") cpp_quote("#define WMDM_DEVICECAP_CANPLAY 0x00000001") cpp_quote("#define WMDM_DEVICECAP_CANSTREAMPLAY 0x00000002") cpp_quote("#define WMDM_DEVICECAP_CANRECORD 0x00000004") cpp_quote("#define WMDM_DEVICECAP_CANSTREAMRECORD 0x00000008") cpp_quote("#define WMDM_DEVICECAP_CANPAUSE 0x00000010") cpp_quote("#define WMDM_DEVICECAP_CANRESUME 0x00000020") cpp_quote("#define WMDM_DEVICECAP_CANSTOP 0x00000040") cpp_quote("#define WMDM_DEVICECAP_CANSEEK 0x00000080") cpp_quote("// WMDM Seek Flags") cpp_quote("#define WMDM_SEEK_REMOTECONTROL 0x00000001") cpp_quote("#define WMDM_SEEK_STREAMINGAUDIO 0x00000002") cpp_quote("// Storage Attributes Flags") cpp_quote("#define WMDM_STORAGE_ATTR_FILESYSTEM 0x00000001") cpp_quote("#define WMDM_STORAGE_ATTR_REMOVABLE 0x00000002") cpp_quote("#define WMDM_STORAGE_ATTR_NONREMOVABLE 0x00000004") cpp_quote("#define WMDM_FILE_ATTR_FOLDER 0x00000008") cpp_quote("#define WMDM_FILE_ATTR_LINK 0x00000010") cpp_quote("#define WMDM_FILE_ATTR_FILE 0x00000020") cpp_quote("#define WMDM_FILE_ATTR_VIDEO 0x00000040") cpp_quote("#define WMDM_STORAGE_ATTR_FOLDERS 0x00000100") // These flag are defined below but can be used with this group of flags also //cpp_quote("#define WMDM_STORAGECONTROL_INSERTBEFORE 0x00000200") //cpp_quote("#define WMDM_STORAGECONTROL_INSERTAFTER 0x00000400") //cpp_quote("#define WMDM_STORAGECONTROL_INSERTINTO 0x00000800") cpp_quote("#define WMDM_FILE_ATTR_AUDIO 0x00001000") cpp_quote("#define WMDM_FILE_ATTR_DATA 0x00002000") cpp_quote("#define WMDM_FILE_ATTR_CANPLAY 0x00004000") cpp_quote("#define WMDM_FILE_ATTR_CANDELETE 0x00008000") cpp_quote("#define WMDM_FILE_ATTR_CANMOVE 0x00010000") cpp_quote("#define WMDM_FILE_ATTR_CANRENAME 0x00020000") cpp_quote("#define WMDM_FILE_ATTR_CANREAD 0x00040000") cpp_quote("#define WMDM_FILE_ATTR_MUSIC 0x00080000") cpp_quote("#define WMDM_FILE_CREATE_OVERWRITE 0x00100000") cpp_quote("#define WMDM_FILE_ATTR_AUDIOBOOK 0x00200000") cpp_quote("#define WMDM_FILE_ATTR_HIDDEN 0x00400000") cpp_quote("#define WMDM_FILE_ATTR_SYSTEM 0x00800000") cpp_quote("#define WMDM_FILE_ATTR_READONLY 0x01000000") cpp_quote("#define WMDM_STORAGE_ATTR_HAS_FOLDERS 0x02000000") cpp_quote("#define WMDM_STORAGE_ATTR_HAS_FILES 0x04000000") cpp_quote("#define WMDM_STORAGE_IS_DEFAULT 0x08000000") cpp_quote("#define WMDM_STORAGE_CONTAINS_DEFAULT 0x10000000") cpp_quote("// Storage Capabilities Flags") cpp_quote("#define WMDM_STORAGECAP_FOLDERSINROOT 0x00000001") cpp_quote("#define WMDM_STORAGECAP_FILESINROOT 0x00000002") cpp_quote("#define WMDM_STORAGECAP_FOLDERSINFOLDERS 0x00000004") cpp_quote("#define WMDM_STORAGECAP_FILESINFOLDERS 0x00000008") cpp_quote("#define WMDM_STORAGECAP_FOLDERLIMITEXISTS 0x00000010") cpp_quote("#define WMDM_STORAGECAP_FILELIMITEXISTS 0x00000020") cpp_quote("// WMDM Mode Flags") cpp_quote("#define WMDM_MODE_BLOCK 0x00000001") cpp_quote("#define WMDM_MODE_THREAD 0x00000002") cpp_quote("#define WMDM_CONTENT_FILE 0x00000004") cpp_quote("#define WMDM_CONTENT_FOLDER 0x00000008") cpp_quote("#define WMDM_CONTENT_OPERATIONINTERFACE 0x00000010") cpp_quote("#define WMDM_MODE_QUERY 0x00000020") cpp_quote("#define WMDM_MODE_PROGRESS 0x00000040") cpp_quote("#define WMDM_MODE_TRANSFER_PROTECTED 0x00000080") cpp_quote("#define WMDM_MODE_TRANSFER_UNPROTECTED 0x00000100") cpp_quote("#define WMDM_STORAGECONTROL_INSERTBEFORE 0x00000200") cpp_quote("#define WMDM_STORAGECONTROL_INSERTAFTER 0x00000400") cpp_quote("#define WMDM_STORAGECONTROL_INSERTINTO 0x00000800") cpp_quote("#define WMDM_MODE_RECURSIVE 0x00001000") //cpp_quote("#define WMDM_FILE_CREATE_OVERWRITE 0x00100000") cpp_quote("// WMDM Rights Flags") cpp_quote("// NON_SDMI = !SDMI_PROTECTED") cpp_quote("// SDMI = SDMI_VALIDATED") cpp_quote("#define WMDM_RIGHTS_PLAY_ON_PC 0x00000001") cpp_quote("#define WMDM_RIGHTS_COPY_TO_NON_SDMI_DEVICE 0x00000002") cpp_quote("#define WMDM_RIGHTS_COPY_TO_CD 0x00000008") cpp_quote("#define WMDM_RIGHTS_COPY_TO_SDMI_DEVICE 0x00000010") cpp_quote("// WMDM Seek Flags") cpp_quote("#define WMDM_SEEK_BEGIN 0x00000001") cpp_quote("#define WMDM_SEEK_CURRENT 0x00000002") cpp_quote("#define WMDM_SEEK_END 0x00000008") interface IWMDMStorage; interface IWMDMStorage2; interface IWMDMProgress; interface IWMDMProgress2; interface IWMDMDevice; interface IWMDMDevice2; interface IWMDMEnumDevice; interface IWMDMEnumStorage; interface IWMDMRevoked; // IWMDeviceManager [ object, uuid(1DCB3A00-33ED-11d3-8470-00C04F79DBC0), pointer_default(unique) ] interface IWMDeviceManager : IUnknown { HRESULT GetRevision([out] DWORD *pdwRevision); HRESULT GetDeviceCount([out]DWORD *pdwCount); HRESULT EnumDevices([out] IWMDMEnumDevice **ppEnumDevice); }; // IWMDeviceManager2 [ object, uuid(923E5249-8731-4c5b-9B1C-B8B60B6E46AF), pointer_default(unique) ] interface IWMDeviceManager2 : IWMDeviceManager { HRESULT GetDeviceFromPnPName( [in, string] LPCWSTR pwszPnPName, [out] IWMDMDevice** ppDevice ); } // IWMDMStorageGlobals [ object, uuid(1DCB3A07-33ED-11d3-8470-00C04F79DBC0), pointer_default(unique) ] interface IWMDMStorageGlobals : IUnknown { HRESULT GetCapabilities([out] DWORD *pdwCapabilities); HRESULT GetSerialNumber([out] PWMDMID pSerialNum, [in, out] BYTE abMac[WMDM_MAC_LENGTH]); HRESULT GetTotalSize([out] DWORD *pdwTotalSizeLow, [out] DWORD *pdwTotalSizeHigh); HRESULT GetTotalFree([out] DWORD *pdwFreeLow, [out] DWORD *pdwFreeHigh); HRESULT GetTotalBad([out] DWORD *pdwBadLow, [out] DWORD *pdwBadHigh); HRESULT GetStatus([out] DWORD *pdwStatus); HRESULT Initialize([in] UINT fuMode, [in] IWMDMProgress *pProgress); }; // IWMDMStorage [ object, uuid(1DCB3A06-33ED-11d3-8470-00C04F79DBC0), pointer_default(unique) ] interface IWMDMStorage : IUnknown { HRESULT SetAttributes([in] DWORD dwAttributes, [in] _WAVEFORMATEX *pFormat); HRESULT GetStorageGlobals([out]IWMDMStorageGlobals **ppStorageGlobals); HRESULT GetAttributes([out] DWORD *pdwAttributes, [out] _WAVEFORMATEX *pFormat); HRESULT GetName([out,string,size_is(nMaxChars)] LPWSTR pwszName, [in] UINT nMaxChars); HRESULT GetDate([out] PWMDMDATETIME pDateTimeUTC); HRESULT GetSize([out] DWORD *pdwSizeLow, [out] DWORD *pdwSizeHigh); HRESULT GetRights([out, size_is(, *pnRightsCount)] PWMDMRIGHTS *ppRights, [out] UINT *pnRightsCount, [in, out] BYTE abMac[WMDM_MAC_LENGTH]); HRESULT EnumStorage([out] IWMDMEnumStorage **pEnumStorage); HRESULT SendOpaqueCommand([in,out] OPAQUECOMMAND *pCommand); }; // IWMDMStorage2 [ object, uuid(1ED5A144-5CD5-4683-9EFF-72CBDB2D9533), pointer_default(unique) ] interface IWMDMStorage2 : IWMDMStorage { HRESULT GetStorage([in, string] LPCWSTR pszStorageName, [out] IWMDMStorage** ppStorage ); HRESULT SetAttributes2( [in] DWORD dwAttributes, [in] DWORD dwAttributesEx, [in] _WAVEFORMATEX *pFormat, [in] _VIDEOINFOHEADER* pVideoFormat ); HRESULT GetAttributes2( [out] DWORD *pdwAttributes, [out] DWORD *pdwAttributesEx, [out] _WAVEFORMATEX *pAudioFormat, [out] _VIDEOINFOHEADER* pVideoFormat ); } // IWMDMOperation [ object, uuid(1DCB3A0B-33ED-11d3-8470-00C04F79DBC0), pointer_default(unique) ] interface IWMDMOperation : IUnknown { HRESULT BeginRead(); HRESULT BeginWrite(); HRESULT GetObjectName([out,string,size_is(nMaxChars)] LPWSTR pwszName, [in] UINT nMaxChars); HRESULT SetObjectName([in,string,size_is(nMaxChars)] LPWSTR pwszName, [in] UINT nMaxChars); HRESULT GetObjectAttributes([out] DWORD *pdwAttributes, [out] _WAVEFORMATEX *pFormat); HRESULT SetObjectAttributes([in] DWORD dwAttributes, [in] _WAVEFORMATEX *pFormat); HRESULT GetObjectTotalSize([out] DWORD *pdwSize, [out] DWORD *pdwSizeHigh); HRESULT SetObjectTotalSize([in] DWORD dwSize, [in] DWORD dwSizeHigh); HRESULT TransferObjectData([in,out,size_is(*pdwSize)] BYTE *pData, [in,out] DWORD *pdwSize, [in, out] BYTE abMac[WMDM_MAC_LENGTH]); HRESULT End([in] HRESULT *phCompletionCode, [in] IUnknown *pNewObject); }; // IWMDMOperation2 [ object, uuid(33445B48-7DF7-425c-AD8F-0FC6D82F9F75), pointer_default(unique) ] interface IWMDMOperation2 : IWMDMOperation { HRESULT SetObjectAttributes2( [in] DWORD dwAttributes, [in] DWORD dwAttributesEx, [in] _WAVEFORMATEX *pFormat, [in] _VIDEOINFOHEADER* pVideoFormat ); HRESULT GetObjectAttributes2( [out] DWORD *pdwAttributes, [out] DWORD *pdwAttributesEx, [out] _WAVEFORMATEX *pAudioFormat, [out] _VIDEOINFOHEADER* pVideoFormat ); }; // IWMDMProgress [ object, uuid(1DCB3A0C-33ED-11d3-8470-00C04F79DBC0), pointer_default(unique) ] interface IWMDMProgress : IUnknown { HRESULT Begin([in] DWORD dwEstimatedTicks); HRESULT Progress([in] DWORD dwTranspiredTicks); HRESULT End(); }; // IWMDMProgress2 [ object, uuid(3A43F550-B383-4e92-B04A-E6BBC660FEFC), pointer_default(unique) ] interface IWMDMProgress2 : IWMDMProgress { HRESULT End2([in] HRESULT hrCompletionCode ); }; // IWMDMDevice [ object, uuid(1DCB3A02-33ED-11d3-8470-00C04F79DBC0), pointer_default(unique) ] interface IWMDMDevice : IUnknown { HRESULT GetName([out,string,size_is(nMaxChars)] LPWSTR pwszName, [in] UINT nMaxChars); HRESULT GetManufacturer([out,string,size_is(nMaxChars)] LPWSTR pwszName, [in] UINT nMaxChars); HRESULT GetVersion([out] DWORD *pdwVersion); HRESULT GetType([out] DWORD *pdwType); HRESULT GetSerialNumber([out] PWMDMID pSerialNumber, [in, out] BYTE abMac[WMDM_MAC_LENGTH]); HRESULT GetPowerSource([out] DWORD *pdwPowerSource, [out] DWORD *pdwPercentRemaining); HRESULT GetStatus([out] DWORD *pdwStatus); HRESULT GetDeviceIcon([out] ULONG *hIcon); HRESULT EnumStorage([out] IWMDMEnumStorage **ppEnumStorage); HRESULT GetFormatSupport([out, size_is( , *pnFormatCount)] _WAVEFORMATEX **ppFormatEx, [out] UINT *pnFormatCount, [out, size_is( , *pnMimeTypeCount)] LPWSTR **pppwszMimeType, [out] UINT *pnMimeTypeCount); HRESULT SendOpaqueCommand([in,out] OPAQUECOMMAND *pCommand); }; // IWMDMDevice2 [ object, uuid(E34F3D37-9D67-4fc1-9252-62D28B2F8B55), pointer_default(unique) ] interface IWMDMDevice2 : IWMDMDevice { HRESULT GetStorage([in, string] LPCWSTR pszStorageName, [out] IWMDMStorage** ppStorage ); HRESULT GetFormatSupport2( [in] DWORD dwFlags, [out, size_is( , *pnAudioFormatCount)] _WAVEFORMATEX** ppAudioFormatEx, [out, ref] UINT *pnAudioFormatCount, [out, size_is( , *pnVideoFormatCount)] _VIDEOINFOHEADER** ppVideoFormatEx, [out, ref] UINT *pnVideoFormatCount, [out, size_is( , *pnFileTypeCount)] WMFILECAPABILITIES** ppFileType, [out, ref] UINT* pnFileTypeCount); HRESULT GetSpecifyPropertyPages([out, ref] ISpecifyPropertyPages** ppSpecifyPropPages, [out, ref, size_is(,*pcUnks)] IUnknown*** pppUnknowns, [out, ref] ULONG* pcUnks ); HRESULT GetPnPName([out, size_is(nMaxChars)] LPWSTR pwszPnPName, [in] UINT nMaxChars ); }; // IWMDMEnumDevice [ object, uuid(1DCB3A01-33ED-11d3-8470-00C04F79DBC0), pointer_default(unique) ] interface IWMDMEnumDevice : IUnknown { HRESULT Next([in]ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] IWMDMDevice **ppDevice, [out] ULONG *pceltFetched); HRESULT Skip([in] ULONG celt, [out] ULONG *pceltFetched); HRESULT Reset(); HRESULT Clone([out] IWMDMEnumDevice **ppEnumDevice); }; // IWMDMDeviceControl [ object, uuid(1DCB3A04-33ED-11d3-8470-00C04F79DBC0), pointer_default(unique) ] interface IWMDMDeviceControl : IUnknown { HRESULT GetStatus([out] DWORD *pdwStatus); HRESULT GetCapabilities([out] DWORD *pdwCapabilitiesMask); HRESULT Play(); HRESULT Record([in] _WAVEFORMATEX *pFormat); HRESULT Pause(); HRESULT Resume(); HRESULT Stop(); HRESULT Seek([in] UINT fuMode, [in] int nOffset); }; // IWMDMEnumStorage [ object, uuid(1DCB3A05-33ED-11d3-8470-00C04F79DBC0), pointer_default(unique) ] interface IWMDMEnumStorage : IUnknown { HRESULT Next([in]ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] IWMDMStorage **ppStorage, [out] ULONG *pceltFetched); HRESULT Skip([in] ULONG celt, [out] ULONG *pceltFetched); HRESULT Reset(); HRESULT Clone([out] IWMDMEnumStorage **ppEnumStorage); }; // IWMDMStorageControl [ object, uuid(1DCB3A08-33ED-11d3-8470-00C04F79DBC0), pointer_default(unique) ] interface IWMDMStorageControl : IUnknown { HRESULT Insert([in] UINT fuMode, [in,unique] LPWSTR pwszFile, [in] IWMDMOperation *pOperation, [in] IWMDMProgress *pProgress, [out] IWMDMStorage **ppNewObject); HRESULT Delete([in] UINT fuMode, [in] IWMDMProgress *pProgress); HRESULT Rename([in] UINT fuMode, [in] LPWSTR pwszNewName, [in] IWMDMProgress *pProgress); HRESULT Read([in] UINT fuMode, [in,unique] LPWSTR pwszFile, [in] IWMDMProgress *pProgress, [in] IWMDMOperation *pOperation); HRESULT Move([in] UINT fuMode, [in] IWMDMStorage *pTargetObject, [in] IWMDMProgress *pProgress); }; // IWMDMStorageControl2 [ object, uuid(972C2E88-BD6C-4125-8E09-84F837E637B6), pointer_default(unique) ] interface IWMDMStorageControl2 : IWMDMStorageControl { HRESULT Insert2([in] UINT fuMode, [in,unique] LPWSTR pwszFileSource, [in,unique] LPWSTR pwszFileDest, [in] IWMDMOperation *pOperation, [in] IWMDMProgress *pProgress, [in] IUnknown* pUnknown, [in,out,unique] IWMDMStorage **ppNewObject); }; // IWMDMObjectInfo [ object, uuid(1DCB3A09-33ED-11d3-8470-00C04F79DBC0), pointer_default(unique) ] interface IWMDMObjectInfo : IUnknown { HRESULT GetPlayLength([out] DWORD *pdwLength); HRESULT SetPlayLength([in] DWORD dwLength); HRESULT GetPlayOffset([out] DWORD *pdwOffset); HRESULT SetPlayOffset([in] DWORD dwOffset); HRESULT GetTotalLength([out] DWORD *pdwLength); HRESULT GetLastPlayPosition([out] DWORD *pdwLastPos); HRESULT GetLongestPlayPosition([out] DWORD *pdwLongestPos); }; // IWMDMRevoked [ object, uuid(EBECCEDB-88EE-4e55-B6A4-8D9F07D696AA), pointer_default(ref) ] interface IWMDMRevoked : IUnknown { HRESULT GetRevocationURL( [in,out, string, size_is(, *pdwBufferLen)] LPWSTR* ppwszRevocationURL, [in,out] DWORD* pdwBufferLen, [out] DWORD* pdwRevokedBitFlag ); };