msident: Added IUserIdentityManager::EnumIdentities implementation.
This commit is contained in:
parent
06a9f864e8
commit
7b6498314c
|
@ -27,8 +27,120 @@
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(msident);
|
WINE_DEFAULT_DEBUG_CHANNEL(msident);
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
static HINSTANCE msident_instance;
|
static HINSTANCE msident_instance;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
IEnumUserIdentity IEnumUserIdentity_iface;
|
||||||
|
LONG ref;
|
||||||
|
} EnumUserIdentity;
|
||||||
|
|
||||||
|
static inline EnumUserIdentity *impl_from_IEnumUserIdentity(IEnumUserIdentity *iface)
|
||||||
|
{
|
||||||
|
return CONTAINING_RECORD(iface, EnumUserIdentity, IEnumUserIdentity_iface);
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI EnumUserIdentity_QueryInterface(IEnumUserIdentity *iface, REFIID riid, void **ppv)
|
||||||
|
{
|
||||||
|
EnumUserIdentity *This = impl_from_IEnumUserIdentity(iface);
|
||||||
|
|
||||||
|
if(IsEqualGUID(&IID_IUnknown, riid)) {
|
||||||
|
TRACE("(IID_IUnknown %p)\n", ppv);
|
||||||
|
*ppv = &This->IEnumUserIdentity_iface;
|
||||||
|
}else if(IsEqualGUID(&IID_IEnumUserIdentity, riid)) {
|
||||||
|
TRACE("(IID_IEnumUserIdentity %p)\n", ppv);
|
||||||
|
*ppv = &This->IEnumUserIdentity_iface;
|
||||||
|
}else {
|
||||||
|
WARN("(%s %p)\n", debugstr_guid(riid), ppv);
|
||||||
|
*ppv = NULL;
|
||||||
|
return E_NOINTERFACE;
|
||||||
|
}
|
||||||
|
|
||||||
|
IUnknown_AddRef((IUnknown*)*ppv);
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI EnumUserIdentity_AddRef(IEnumUserIdentity *iface)
|
||||||
|
{
|
||||||
|
EnumUserIdentity *This = impl_from_IEnumUserIdentity(iface);
|
||||||
|
LONG ref = InterlockedIncrement(&This->ref);
|
||||||
|
|
||||||
|
TRACE("(%p) ref=%d\n", This, ref);
|
||||||
|
|
||||||
|
return ref;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ULONG WINAPI EnumUserIdentity_Release(IEnumUserIdentity *iface)
|
||||||
|
{
|
||||||
|
EnumUserIdentity *This = impl_from_IEnumUserIdentity(iface);
|
||||||
|
LONG ref = InterlockedDecrement(&This->ref);
|
||||||
|
|
||||||
|
TRACE("(%p) ref=%d\n", This, ref);
|
||||||
|
|
||||||
|
if(!ref)
|
||||||
|
heap_free(This);
|
||||||
|
|
||||||
|
return ref;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI EnumUserIdentity_Next(IEnumUserIdentity *iface, ULONG celt, IUnknown **rgelt, ULONG *pceltFetched)
|
||||||
|
{
|
||||||
|
EnumUserIdentity *This = impl_from_IEnumUserIdentity(iface);
|
||||||
|
FIXME("(%p)->(%u %p %p)\n", This, celt, rgelt, pceltFetched);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI EnumUserIdentity_Skip(IEnumUserIdentity *iface, ULONG celt)
|
||||||
|
{
|
||||||
|
EnumUserIdentity *This = impl_from_IEnumUserIdentity(iface);
|
||||||
|
FIXME("(%p)->(%u)\n", This, celt);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI EnumUserIdentity_Reset(IEnumUserIdentity *iface)
|
||||||
|
{
|
||||||
|
EnumUserIdentity *This = impl_from_IEnumUserIdentity(iface);
|
||||||
|
FIXME("(%p)->()\n", This);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI EnumUserIdentity_Clone(IEnumUserIdentity *iface, IEnumUserIdentity **ppenum)
|
||||||
|
{
|
||||||
|
EnumUserIdentity *This = impl_from_IEnumUserIdentity(iface);
|
||||||
|
FIXME("(%p)->(%p)\n", This, ppenum);
|
||||||
|
return E_NOTIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI EnumUserIdentity_GetCount(IEnumUserIdentity *iface, ULONG *pnCount)
|
||||||
|
{
|
||||||
|
EnumUserIdentity *This = impl_from_IEnumUserIdentity(iface);
|
||||||
|
|
||||||
|
FIXME("(%p)->(%p)\n", This, pnCount);
|
||||||
|
|
||||||
|
*pnCount = 0;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const IEnumUserIdentityVtbl EnumUserIdentityVtbl = {
|
||||||
|
EnumUserIdentity_QueryInterface,
|
||||||
|
EnumUserIdentity_AddRef,
|
||||||
|
EnumUserIdentity_Release,
|
||||||
|
EnumUserIdentity_Next,
|
||||||
|
EnumUserIdentity_Skip,
|
||||||
|
EnumUserIdentity_Reset,
|
||||||
|
EnumUserIdentity_Clone,
|
||||||
|
EnumUserIdentity_GetCount
|
||||||
|
};
|
||||||
|
|
||||||
static HRESULT WINAPI UserIdentityManager_QueryInterface(IUserIdentityManager *iface, REFIID riid, void **ppv)
|
static HRESULT WINAPI UserIdentityManager_QueryInterface(IUserIdentityManager *iface, REFIID riid, void **ppv)
|
||||||
{
|
{
|
||||||
if(IsEqualGUID(&IID_IUnknown, riid)) {
|
if(IsEqualGUID(&IID_IUnknown, riid)) {
|
||||||
|
@ -61,8 +173,19 @@ static ULONG WINAPI UserIdentityManager_Release(IUserIdentityManager *iface)
|
||||||
|
|
||||||
static HRESULT WINAPI UserIdentityManager_EnumIdentities(IUserIdentityManager *iface, IEnumUserIdentity **ppEnumUser)
|
static HRESULT WINAPI UserIdentityManager_EnumIdentities(IUserIdentityManager *iface, IEnumUserIdentity **ppEnumUser)
|
||||||
{
|
{
|
||||||
FIXME("(%p)\n", ppEnumUser);
|
EnumUserIdentity *ret;
|
||||||
return E_NOTIMPL;
|
|
||||||
|
TRACE("(%p)\n", ppEnumUser);
|
||||||
|
|
||||||
|
ret = heap_alloc(sizeof(*ret));
|
||||||
|
if(!ret)
|
||||||
|
return E_OUTOFMEMORY;
|
||||||
|
|
||||||
|
ret->IEnumUserIdentity_iface.lpVtbl = &EnumUserIdentityVtbl;
|
||||||
|
ret->ref = 1;
|
||||||
|
|
||||||
|
*ppEnumUser = &ret->IEnumUserIdentity_iface;
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI UserIdentityManager_ManageIdentities(IUserIdentityManager *iface, HWND hwndParent, DWORD dwFlags)
|
static HRESULT WINAPI UserIdentityManager_ManageIdentities(IUserIdentityManager *iface, HWND hwndParent, DWORD dwFlags)
|
||||||
|
|
Loading…
Reference in New Issue