91 lines
1.8 KiB
C++
91 lines
1.8 KiB
C++
/*++
|
|
|
|
Copyright (C) 1996-2001 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
FASTPROX.CPP
|
|
|
|
Abstract:
|
|
|
|
Object Marshaling
|
|
|
|
History:
|
|
|
|
--*/
|
|
|
|
#include "precomp.h"
|
|
#include "fastprox.h"
|
|
|
|
ULONG CFastProxy::AddRef()
|
|
{
|
|
return (ULONG)InterlockedIncrement(&m_lRef);
|
|
}
|
|
|
|
ULONG CFastProxy::Release()
|
|
{
|
|
long lNewRef = InterlockedDecrement(&m_lRef);
|
|
if(lNewRef == 0)
|
|
{
|
|
delete this;
|
|
}
|
|
return lNewRef;
|
|
}
|
|
|
|
STDMETHODIMP CFastProxy::QueryInterface(REFIID riid, void** ppv)
|
|
{
|
|
if(riid == IID_IUnknown)
|
|
{
|
|
AddRef();
|
|
*ppv = (void*)(IUnknown*)(IMarshal*)this;
|
|
return S_OK;
|
|
}
|
|
if(riid == IID_IMarshal)
|
|
{
|
|
AddRef();
|
|
*ppv = (void*)(IMarshal*)this;
|
|
return S_OK;
|
|
}
|
|
else return E_NOINTERFACE;
|
|
}
|
|
|
|
STDMETHODIMP CFastProxy::GetUnmarshalClass(REFIID riid, void* pv,
|
|
DWORD dwDestContext, void* pvReserved, DWORD mshlFlags, CLSID* pClsid)
|
|
{
|
|
return E_UNEXPECTED;
|
|
}
|
|
|
|
STDMETHODIMP CFastProxy::GetMarshalSizeMax(REFIID riid, void* pv,
|
|
DWORD dwDestContext, void* pvReserved, DWORD mshlFlags, ULONG* plSize)
|
|
{
|
|
return E_UNEXPECTED;
|
|
}
|
|
|
|
STDMETHODIMP CFastProxy::MarshalInterface(IStream* pStream, REFIID riid,
|
|
void* pv, DWORD dwDestContext, void* pvReserved, DWORD mshlFlags)
|
|
{
|
|
return E_UNEXPECTED;
|
|
}
|
|
|
|
STDMETHODIMP CFastProxy::UnmarshalInterface(IStream* pStream, REFIID riid,
|
|
void** ppv)
|
|
{
|
|
CWbemObject* pObj = CWbemObject::CreateFromStream(pStream);
|
|
if(pObj == NULL)
|
|
return E_FAIL;
|
|
|
|
HRESULT hres = pObj->QueryInterface(riid, ppv);
|
|
pObj->Release();
|
|
return hres;
|
|
}
|
|
|
|
STDMETHODIMP CFastProxy::ReleaseMarshalData(IStream* pStream)
|
|
{
|
|
return S_OK;
|
|
}
|
|
|
|
STDMETHODIMP CFastProxy::DisconnectObject(DWORD dwReserved)
|
|
{
|
|
return S_OK;
|
|
}
|