Commit 59c7e197 authored by Dmitry Timoshkov's avatar Dmitry Timoshkov Committed by Alexandre Julliard

adsldp: Add IDirectoryObject stubs.

parent ba82c34b
......@@ -383,6 +383,7 @@ typedef struct
IADs IADs_iface;
IADsOpenDSObject IADsOpenDSObject_iface;
IDirectorySearch IDirectorySearch_iface;
IDirectoryObject IDirectoryObject_iface;
LONG ref;
LDAP *ld;
BSTR host;
......@@ -445,6 +446,13 @@ static HRESULT WINAPI ldapns_QueryInterface(IADs *iface, REFIID riid, void **obj
return S_OK;
}
if (IsEqualGUID(riid, &IID_IDirectoryObject))
{
IADs_AddRef(iface);
*obj = &ldap->IDirectoryObject_iface;
return S_OK;
}
FIXME("interface %s is not implemented\n", debugstr_guid(riid));
return E_NOINTERFACE;
}
......@@ -1558,6 +1566,86 @@ static const IDirectorySearchVtbl IDirectorySearch_vtbl =
search_CloseSearchHandle
};
static inline LDAP_namespace *impl_from_IDirectoryObject(IDirectoryObject *iface)
{
return CONTAINING_RECORD(iface, LDAP_namespace, IDirectoryObject_iface);
}
static HRESULT WINAPI dirobj_QueryInterface(IDirectoryObject *iface, REFIID riid, void **obj)
{
TRACE("%p,%s,%p\n", iface, debugstr_guid(riid), obj);
if (!riid || !obj) return E_INVALIDARG;
if (IsEqualGUID(riid, &IID_IDirectoryObject) ||
IsEqualGUID(riid, &IID_IUnknown))
{
IDirectoryObject_AddRef(iface);
*obj = iface;
return S_OK;
}
FIXME("interface %s is not implemented\n", debugstr_guid(riid));
return E_NOINTERFACE;
}
static ULONG WINAPI dirobj_AddRef(IDirectoryObject *iface)
{
LDAP_namespace *ldap = impl_from_IDirectoryObject(iface);
return IADs_AddRef(&ldap->IADs_iface);
}
static ULONG WINAPI dirobj_Release(IDirectoryObject *iface)
{
LDAP_namespace *ldap = impl_from_IDirectoryObject(iface);
return IADs_Release(&ldap->IADs_iface);
}
static HRESULT WINAPI dirobj_GetObjectInformation(IDirectoryObject *iface, PADS_OBJECT_INFO *info)
{
FIXME("%p,%p: stub\n", iface, info);
return E_NOTIMPL;
}
static HRESULT WINAPI dirobj_GetObjectAttributes(IDirectoryObject *iface, LPWSTR *names,
DWORD count, PADS_ATTR_INFO *attrs, DWORD *count_returned)
{
FIXME("%p,%p,%u,%p,%p: stub\n", iface, names, count, attrs, count_returned);
return E_NOTIMPL;
}
static HRESULT WINAPI dirobj_SetObjectAttributes(IDirectoryObject *iface, PADS_ATTR_INFO attrs,
DWORD count, DWORD *count_set)
{
FIXME("%p,%p,%u,%p: stub\n", iface, attrs, count, count_set);
return E_NOTIMPL;
}
static HRESULT WINAPI dirobj_CreateDSObject(IDirectoryObject *iface, LPWSTR name,
PADS_ATTR_INFO attrs, DWORD count, IDispatch **obj)
{
FIXME("%p,%s,%p,%u,%p: stub\n", iface, debugstr_w(name), attrs, count, obj);
return E_NOTIMPL;
}
static HRESULT WINAPI dirobj_DeleteDSObject(IDirectoryObject *iface, LPWSTR name)
{
FIXME("%p,%s: stub\n", iface, debugstr_w(name));
return E_NOTIMPL;
}
static const IDirectoryObjectVtbl IDirectoryObject_vtbl =
{
dirobj_QueryInterface,
dirobj_AddRef,
dirobj_Release,
dirobj_GetObjectInformation,
dirobj_GetObjectAttributes,
dirobj_SetObjectAttributes,
dirobj_CreateDSObject,
dirobj_DeleteDSObject
};
static HRESULT LDAPNamespace_create(REFIID riid, void **obj)
{
LDAP_namespace *ldap;
......@@ -1569,6 +1657,7 @@ static HRESULT LDAPNamespace_create(REFIID riid, void **obj)
ldap->IADs_iface.lpVtbl = &IADs_vtbl;
ldap->IADsOpenDSObject_iface.lpVtbl = &IADsOpenDSObject_vtbl;
ldap->IDirectorySearch_iface.lpVtbl = &IDirectorySearch_vtbl;
ldap->IDirectoryObject_iface.lpVtbl = &IDirectoryObject_vtbl;
ldap->ref = 1;
ldap->ld = NULL;
ldap->host = NULL;
......
......@@ -344,6 +344,24 @@ typedef struct ads_search_column
HANDLE hReserved;
} ADS_SEARCH_COLUMN, *PADS_SEARCH_COLUMN;
typedef struct _ads_object_info
{
LPWSTR pszRDN;
LPWSTR pszObjectDN;
LPWSTR pszParentDN;
LPWSTR pszSchemaDN;
LPWSTR pszClassName;
} ADS_OBJECT_INFO, *PADS_OBJECT_INFO;
typedef struct _ads_attr_info
{
LPWSTR pszAttrName;
DWORD dwControlCode;
ADSTYPE dwADsType;
PADSVALUE pADsValues;
DWORD dwNumValues;
} ADS_ATTR_INFO, *PADS_ATTR_INFO;
/*****************************************************************************
* IADsContainer interface
*/
......@@ -800,6 +818,23 @@ interface IDirectorySearch : IUnknown
}
/*****************************************************************************
* IDirectoryObject interface
*/
[
odl,
local,
uuid(e798de2c-22e4-11d0-84fe-00c04fd8d503)
]
interface IDirectoryObject : IUnknown
{
HRESULT GetObjectInformation(PADS_OBJECT_INFO *info);
HRESULT GetObjectAttributes(LPWSTR *names, DWORD count, PADS_ATTR_INFO *attrs, DWORD *count_returned);
HRESULT SetObjectAttributes(PADS_ATTR_INFO attrs, DWORD count, DWORD *count_set);
HRESULT CreateDSObject(LPWSTR name, PADS_ATTR_INFO attrs, DWORD count, IDispatch **obj);
HRESULT DeleteDSObject(LPWSTR name);
}
/*****************************************************************************
* IID_IADsOpenDSObject interface
*/
[
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment