Commit 061a29ee authored by Rob Shearman's avatar Rob Shearman Committed by Alexandre Julliard

ole32: Add a stubbed out implementation of IClientSecurity to the proxy manager.

parent 7e061e4f
...@@ -121,6 +121,7 @@ struct proxy_manager ...@@ -121,6 +121,7 @@ struct proxy_manager
{ {
const IMultiQIVtbl *lpVtbl; const IMultiQIVtbl *lpVtbl;
const IMarshalVtbl *lpVtblMarshal; const IMarshalVtbl *lpVtblMarshal;
const IClientSecurityVtbl *lpVtblCliSec;
struct apartment *parent; /* owning apartment (RO) */ struct apartment *parent; /* owning apartment (RO) */
struct list entry; /* entry in apartment (CS parent->cs) */ struct list entry; /* entry in apartment (CS parent->cs) */
OXID oxid; /* object exported ID (RO) */ OXID oxid; /* object exported ID (RO) */
......
...@@ -335,6 +335,13 @@ static const IMultiQIVtbl ClientIdentity_Vtbl = ...@@ -335,6 +335,13 @@ static const IMultiQIVtbl ClientIdentity_Vtbl =
ClientIdentity_QueryMultipleInterfaces ClientIdentity_QueryMultipleInterfaces
}; };
/* FIXME: remove these */
static HRESULT WINAPI StdMarshalImpl_GetUnmarshalClass(LPMARSHAL iface, REFIID riid, void* pv, DWORD dwDestContext, void* pvDestContext, DWORD mshlflags, CLSID* pCid);
static HRESULT WINAPI StdMarshalImpl_GetMarshalSizeMax(LPMARSHAL iface, REFIID riid, void* pv, DWORD dwDestContext, void* pvDestContext, DWORD mshlflags, DWORD* pSize);
static HRESULT WINAPI StdMarshalImpl_UnmarshalInterface(LPMARSHAL iface, IStream *pStm, REFIID riid, void **ppv);
static HRESULT WINAPI StdMarshalImpl_ReleaseMarshalData(LPMARSHAL iface, IStream *pStm);
static HRESULT WINAPI StdMarshalImpl_DisconnectObject(LPMARSHAL iface, DWORD dwReserved);
static HRESULT WINAPI Proxy_QueryInterface(IMarshal *iface, REFIID riid, void **ppvObject) static HRESULT WINAPI Proxy_QueryInterface(IMarshal *iface, REFIID riid, void **ppvObject)
{ {
ICOM_THIS_MULTI(struct proxy_manager, lpVtblMarshal, iface); ICOM_THIS_MULTI(struct proxy_manager, lpVtblMarshal, iface);
...@@ -347,13 +354,6 @@ static ULONG WINAPI Proxy_AddRef(IMarshal *iface) ...@@ -347,13 +354,6 @@ static ULONG WINAPI Proxy_AddRef(IMarshal *iface)
return IMultiQI_AddRef((IMultiQI *)&This->lpVtbl); return IMultiQI_AddRef((IMultiQI *)&This->lpVtbl);
} }
/* FIXME: remove these */
static HRESULT WINAPI StdMarshalImpl_GetUnmarshalClass(LPMARSHAL iface, REFIID riid, void* pv, DWORD dwDestContext, void* pvDestContext, DWORD mshlflags, CLSID* pCid);
static HRESULT WINAPI StdMarshalImpl_GetMarshalSizeMax(LPMARSHAL iface, REFIID riid, void* pv, DWORD dwDestContext, void* pvDestContext, DWORD mshlflags, DWORD* pSize);
static HRESULT WINAPI StdMarshalImpl_UnmarshalInterface(LPMARSHAL iface, IStream *pStm, REFIID riid, void **ppv);
static HRESULT WINAPI StdMarshalImpl_ReleaseMarshalData(LPMARSHAL iface, IStream *pStm);
static HRESULT WINAPI StdMarshalImpl_DisconnectObject(LPMARSHAL iface, DWORD dwReserved);
static ULONG WINAPI Proxy_Release(IMarshal *iface) static ULONG WINAPI Proxy_Release(IMarshal *iface)
{ {
ICOM_THIS_MULTI(struct proxy_manager, lpVtblMarshal, iface); ICOM_THIS_MULTI(struct proxy_manager, lpVtblMarshal, iface);
...@@ -473,6 +473,72 @@ static const IMarshalVtbl ProxyMarshal_Vtbl = ...@@ -473,6 +473,72 @@ static const IMarshalVtbl ProxyMarshal_Vtbl =
StdMarshalImpl_DisconnectObject StdMarshalImpl_DisconnectObject
}; };
static HRESULT WINAPI ProxyCliSec_QueryInterface(IClientSecurity *iface, REFIID riid, void **ppvObject)
{
ICOM_THIS_MULTI(struct proxy_manager, lpVtblCliSec, iface);
return IMultiQI_QueryInterface((IMultiQI *)&This->lpVtbl, riid, ppvObject);
}
static ULONG WINAPI ProxyCliSec_AddRef(IClientSecurity *iface)
{
ICOM_THIS_MULTI(struct proxy_manager, lpVtblCliSec, iface);
return IMultiQI_AddRef((IMultiQI *)&This->lpVtbl);
}
static ULONG WINAPI ProxyCliSec_Release(IClientSecurity *iface)
{
ICOM_THIS_MULTI(struct proxy_manager, lpVtblCliSec, iface);
return IMultiQI_Release((IMultiQI *)&This->lpVtbl);
}
static HRESULT WINAPI ProxyCliSec_QueryBlanket(IClientSecurity *iface,
IUnknown *pProxy,
DWORD *pAuthnSvc,
DWORD *pAuthzSvc,
OLECHAR **pServerPrincName,
DWORD *pAuthnLevel,
DWORD *pImpLevel,
void **pAuthInfo,
DWORD *pCapabilities)
{
FIXME("(%p, %p, %p, %p, %p, %p, %p, %p): stub\n", pProxy, pAuthnSvc,
pAuthzSvc, pServerPrincName, pAuthnLevel, pImpLevel, pAuthInfo,
pCapabilities);
return E_NOTIMPL;
}
static HRESULT WINAPI ProxyCliSec_SetBlanket(IClientSecurity *iface,
IUnknown *pProxy, DWORD AuthnSvc,
DWORD AuthzSvc,
OLECHAR *pServerPrincName,
DWORD AuthnLevel, DWORD ImpLevel,
void *pAuthInfo,
DWORD Capabilities)
{
FIXME("(%p, %d, %d, %s, %d, %d, %p, 0x%x): stub\n", pProxy, AuthnSvc,
AuthzSvc, debugstr_w(pServerPrincName), AuthnLevel, ImpLevel,
pAuthInfo, Capabilities);
return E_NOTIMPL;
}
static HRESULT WINAPI ProxyCliSec_CopyProxy(IClientSecurity *iface,
IUnknown *pProxy, IUnknown **ppCopy)
{
FIXME("(%p, %p): stub\n", pProxy, ppCopy);
*ppCopy = NULL;
return E_NOTIMPL;
}
static const IClientSecurityVtbl ProxyCliSec_Vtbl =
{
ProxyCliSec_QueryInterface,
ProxyCliSec_AddRef,
ProxyCliSec_Release,
ProxyCliSec_QueryBlanket,
ProxyCliSec_SetBlanket,
ProxyCliSec_CopyProxy
};
static HRESULT ifproxy_get_public_ref(struct ifproxy * This) static HRESULT ifproxy_get_public_ref(struct ifproxy * This)
{ {
HRESULT hr = S_OK; HRESULT hr = S_OK;
...@@ -599,6 +665,7 @@ static HRESULT proxy_manager_construct( ...@@ -599,6 +665,7 @@ static HRESULT proxy_manager_construct(
This->lpVtbl = &ClientIdentity_Vtbl; This->lpVtbl = &ClientIdentity_Vtbl;
This->lpVtblMarshal = &ProxyMarshal_Vtbl; This->lpVtblMarshal = &ProxyMarshal_Vtbl;
This->lpVtblCliSec = &ProxyCliSec_Vtbl;
list_init(&This->entry); list_init(&This->entry);
list_init(&This->interfaces); list_init(&This->interfaces);
...@@ -723,9 +790,9 @@ static HRESULT proxy_manager_query_local_interface(struct proxy_manager * This, ...@@ -723,9 +790,9 @@ static HRESULT proxy_manager_query_local_interface(struct proxy_manager * This,
} }
if (IsEqualIID(riid, &IID_IClientSecurity)) if (IsEqualIID(riid, &IID_IClientSecurity))
{ {
FIXME("requesting IClientSecurity, but it is unimplemented\n"); *ppv = (void *)&This->lpVtblCliSec;
*ppv = NULL; IUnknown_AddRef((IUnknown *)*ppv);
return E_NOINTERFACE; return S_OK;
} }
hr = proxy_manager_find_ifproxy(This, riid, &ifproxy); hr = proxy_manager_find_ifproxy(This, riid, &ifproxy);
......
...@@ -1405,7 +1405,7 @@ static void test_proxy_interfaces(void) ...@@ -1405,7 +1405,7 @@ static void test_proxy_interfaces(void)
if (hr == S_OK) IUnknown_Release(pOtherUnknown); if (hr == S_OK) IUnknown_Release(pOtherUnknown);
hr = IUnknown_QueryInterface(pProxy, &IID_IClientSecurity, (LPVOID*)&pOtherUnknown); hr = IUnknown_QueryInterface(pProxy, &IID_IClientSecurity, (LPVOID*)&pOtherUnknown);
todo_wine { ok_ole_success(hr, IUnknown_QueryInterface IID_IClientSecurity); } ok_ole_success(hr, IUnknown_QueryInterface IID_IClientSecurity);
if (hr == S_OK) IUnknown_Release(pOtherUnknown); if (hr == S_OK) IUnknown_Release(pOtherUnknown);
hr = IUnknown_QueryInterface(pProxy, &IID_IMultiQI, (LPVOID*)&pOtherUnknown); hr = IUnknown_QueryInterface(pProxy, &IID_IMultiQI, (LPVOID*)&pOtherUnknown);
......
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