You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.7 KiB
80 lines
2.7 KiB
#pragma once
|
|
|
|
class CStorage:
|
|
public CComObjectRoot,
|
|
public IMDSPStorage,
|
|
public IMDSPObject,
|
|
public IMDSPObjectInfo
|
|
{
|
|
public:
|
|
//
|
|
// Construction/Destruction
|
|
//
|
|
|
|
CStorage();
|
|
HRESULT Init( CE_FIND_DATA *pData, LPCWSTR szStartPath, BOOL fIsDeviceStorage, IMDSPDevice *pDevice );
|
|
void FinalRelease();
|
|
|
|
public:
|
|
BEGIN_COM_MAP(CStorage)
|
|
COM_INTERFACE_ENTRY(IMDSPStorage)
|
|
COM_INTERFACE_ENTRY(IMDSPObject)
|
|
COM_INTERFACE_ENTRY(IMDSPObjectInfo)
|
|
END_COM_MAP()
|
|
|
|
//
|
|
// IMDSPStorage
|
|
//
|
|
public:
|
|
STDMETHOD( GetStorageGlobals )( IMDSPStorageGlobals **ppStorageGlobals );
|
|
STDMETHOD( GetAttributes )( DWORD *pdwAttributes, _WAVEFORMATEX *pFormat );
|
|
STDMETHOD( SetAttributes )( DWORD dwAttributes, _WAVEFORMATEX *pFormat );
|
|
STDMETHOD( GetName )( LPWSTR pwszName, UINT nMaxChars );
|
|
STDMETHOD( GetDate )( PWMDMDATETIME pDateTimeUTC );
|
|
STDMETHOD( GetSize )( DWORD *pdwSizeLow, DWORD *pdwSizeHigh );
|
|
STDMETHOD( GetRights )( PWMDMRIGHTS *ppRights, UINT *pnRightsCount, BYTE abMac[ 20 ] );
|
|
STDMETHOD( CreateStorage )( DWORD dwAttributes, _WAVEFORMATEX *pFormat, LPWSTR pwszName, IMDSPStorage **ppNewStorage );
|
|
STDMETHOD( EnumStorage )( IMDSPEnumStorage * *ppEnumStorage );
|
|
STDMETHOD( SendOpaqueCommand )( OPAQUECOMMAND *pCommand );
|
|
|
|
//
|
|
// IMDSPObject
|
|
//
|
|
public:
|
|
STDMETHOD( Open )( UINT fuMode);
|
|
STDMETHOD( Read )( BYTE *pData, DWORD *pdwSize, BYTE abMac[ 20 ] );
|
|
STDMETHOD( Write )( BYTE *pData, DWORD *pdwSize, BYTE abMac[ 20 ] );
|
|
STDMETHOD( Delete )( UINT fuFlags, IWMDMProgress *pProgress );
|
|
STDMETHOD( Seek )( UINT fuFlags, DWORD dwOffset);
|
|
STDMETHOD( Rename )( LPWSTR pwszNewName, IWMDMProgress *pProgress );
|
|
STDMETHOD( Move )( UINT fuMode, IWMDMProgress *pProgress, IMDSPStorage *pTarget );
|
|
STDMETHOD( Close )( void );
|
|
|
|
//
|
|
// IMDSPObjectInfo
|
|
//
|
|
public:
|
|
STDMETHOD( GetPlayLength )( DWORD *pdwLength);
|
|
STDMETHOD( SetPlayLength )( DWORD dwLength);
|
|
STDMETHOD( GetPlayOffset )( DWORD *pdwOffset );
|
|
STDMETHOD( SetPlayOffset )( DWORD dwOffset );
|
|
STDMETHOD( GetTotalLength )( DWORD *pdwLength );
|
|
STDMETHOD( GetLastPlayPosition )( DWORD *pdwLastPos );
|
|
STDMETHOD( GetLongestPlayPosition )(DWORD *pdwLongestPos );
|
|
|
|
protected:
|
|
//
|
|
// Helper functions
|
|
//
|
|
HRESULT DeleteDirectory( LPCWSTR pszPath, BOOL bRecursive );
|
|
|
|
protected:
|
|
CE_FIND_DATA m_findData;
|
|
WCHAR m_szStartPath[MAX_PATH];
|
|
WCHAR m_szCompletePath[MAX_PATH];
|
|
CComPtr<IMDSPDevice> m_spDevice;
|
|
HANDLE m_hFile;
|
|
BOOL m_fRoot;
|
|
};
|
|
|
|
typedef CComObject<CStorage> CComStorage;
|