wmvcore: Added WMCreateProfileManager implementation.

This commit is contained in:
Jacek Caban 2014-03-10 13:35:38 +01:00 committed by Alexandre Julliard
parent 430b7c9b91
commit c5b4c8e882
2 changed files with 137 additions and 1 deletions

View File

@ -8,7 +8,7 @@
@ stub WMCreateBackupRestorer @ stub WMCreateBackupRestorer
@ stdcall WMCreateEditor(ptr) @ stdcall WMCreateEditor(ptr)
@ stub WMCreateIndexer @ stub WMCreateIndexer
@ stub WMCreateProfileManager @ stdcall WMCreateProfileManager(ptr)
@ stdcall WMCreateReader(ptr long ptr) @ stdcall WMCreateReader(ptr long ptr)
@ stub WMCreateReaderPriv @ stub WMCreateReaderPriv
@ stdcall WMCreateSyncReader(ptr long ptr) @ stdcall WMCreateSyncReader(ptr long ptr)

View File

@ -20,13 +20,26 @@
#include <stdarg.h> #include <stdarg.h>
#define COBJMACROS
#include "windef.h" #include "windef.h"
#include "winbase.h" #include "winbase.h"
#include "initguid.h"
#include "wmsdkidl.h" #include "wmsdkidl.h"
#include "wine/debug.h" #include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(wmvcore); WINE_DEFAULT_DEBUG_CHANNEL(wmvcore);
static inline void *heap_alloc(size_t len)
{
return HeapAlloc(GetProcessHeap(), 0, len);
}
static inline BOOL heap_free(void *mem)
{
return HeapFree(GetProcessHeap(), 0, mem);
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{ {
TRACE("(0x%p, %d, %p)\n", hinstDLL, fdwReason, lpvReserved); TRACE("(0x%p, %d, %p)\n", hinstDLL, fdwReason, lpvReserved);
@ -76,3 +89,126 @@ HRESULT WINAPI WMCreateSyncReader(IUnknown *pcert, DWORD rights, IWMSyncReader *
return E_NOTIMPL; return E_NOTIMPL;
} }
typedef struct {
IWMProfileManager IWMProfileManager_iface;
LONG ref;
} WMProfileManager;
static inline WMProfileManager *impl_from_IWMProfileManager(IWMProfileManager *iface)
{
return CONTAINING_RECORD(iface, WMProfileManager, IWMProfileManager_iface);
}
static HRESULT WINAPI WMProfileManager_QueryInterface(IWMProfileManager *iface, REFIID riid, void **ppv)
{
WMProfileManager *This = impl_from_IWMProfileManager(iface);
if(IsEqualGUID(&IID_IUnknown, riid)) {
TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
*ppv = &This->IWMProfileManager_iface;
}else if(IsEqualGUID(&IID_IWMProfileManager, riid)) {
TRACE("(%p)->(IID_IWMProfileManager %p)\n", This, ppv);
*ppv = &This->IWMProfileManager_iface;
}else {
*ppv = NULL;
return E_NOINTERFACE;
}
IUnknown_AddRef((IUnknown*)*ppv);
return S_OK;
}
static ULONG WINAPI WMProfileManager_AddRef(IWMProfileManager *iface)
{
WMProfileManager *This = impl_from_IWMProfileManager(iface);
LONG ref = InterlockedIncrement(&This->ref);
TRACE("(%p) ref=%d\n", This, ref);
return ref;
}
static ULONG WINAPI WMProfileManager_Release(IWMProfileManager *iface)
{
WMProfileManager *This = impl_from_IWMProfileManager(iface);
LONG ref = InterlockedDecrement(&This->ref);
TRACE("(%p) ref=%d\n", This, ref);
if(!ref)
heap_free(This);
return ref;
}
static HRESULT WINAPI WMProfileManager_CreateEmptyProfile(IWMProfileManager *iface, WMT_VERSION version, IWMProfile **ret)
{
WMProfileManager *This = impl_from_IWMProfileManager(iface);
FIXME("(%p)->(%x %p)\n", This, version, ret);
return E_NOTIMPL;
}
static HRESULT WINAPI WMProfileManager_LoadProfileByID(IWMProfileManager *iface, REFGUID guid, IWMProfile **ret)
{
WMProfileManager *This = impl_from_IWMProfileManager(iface);
FIXME("(%p)->(%s %p)\n", This, debugstr_guid(guid), ret);
return E_NOTIMPL;
}
static HRESULT WINAPI WMProfileManager_LoadProfileByData(IWMProfileManager *iface, const WCHAR *profile, IWMProfile **ret)
{
WMProfileManager *This = impl_from_IWMProfileManager(iface);
FIXME("(%p)->(%s %p)\n", This, debugstr_w(profile), ret);
return E_NOTIMPL;
}
static HRESULT WINAPI WMProfileManager_SaveProfile(IWMProfileManager *iface, IWMProfile *profile, WCHAR *profile_str, DWORD *len)
{
WMProfileManager *This = impl_from_IWMProfileManager(iface);
FIXME("(%p)->(%p %p %p)\n", This, profile, profile_str, len);
return E_NOTIMPL;
}
static HRESULT WINAPI WMProfileManager_GetSystemProfileCount(IWMProfileManager *iface, DWORD *ret)
{
WMProfileManager *This = impl_from_IWMProfileManager(iface);
FIXME("(%p)->(%p)\n", This, ret);
return E_NOTIMPL;
}
static HRESULT WINAPI WMProfileManager_LoadSystemProfile(IWMProfileManager *iface, DWORD index, IWMProfile **ret)
{
WMProfileManager *This = impl_from_IWMProfileManager(iface);
FIXME("(%p)->(%d %p)\n", This, index, ret);
return E_NOTIMPL;
}
static const IWMProfileManagerVtbl WMProfileManagerVtbl = {
WMProfileManager_QueryInterface,
WMProfileManager_AddRef,
WMProfileManager_Release,
WMProfileManager_CreateEmptyProfile,
WMProfileManager_LoadProfileByID,
WMProfileManager_LoadProfileByData,
WMProfileManager_SaveProfile,
WMProfileManager_GetSystemProfileCount,
WMProfileManager_LoadSystemProfile
};
HRESULT WINAPI WMCreateProfileManager(IWMProfileManager **ret)
{
WMProfileManager *profile_mgr;
TRACE("(%p)\n", ret);
profile_mgr = heap_alloc(sizeof(*profile_mgr));
if(!profile_mgr)
return E_OUTOFMEMORY;
profile_mgr->IWMProfileManager_iface.lpVtbl = &WMProfileManagerVtbl;
profile_mgr->ref = 1;
*ret = &profile_mgr->IWMProfileManager_iface;
return S_OK;
}