// ModifyInstancePacket.cpp: implementation of the CModifyInstancePacket class.
//
//////////////////////////////////////////////////////////////////////
#include "XMLTransportClientHelper.h"
#include "XMLClientPacket.h"
#include "ModifyInstancePacket.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CModifyInstancePacket::CModifyInstancePacket(const WCHAR *pwszObjPath, const WCHAR *pwszNameSpace)
: CXMLClientPacket(pwszObjPath, pwszNameSpace, L"ModifyInstance")
{
m_ePathstyle = NOVAPATH; //assume nova path if this ctor is called.
}
//////////////////////////////////////////////////////////////////////
// Member functions
//////////////////////////////////////////////////////////////////////
HRESULT CModifyInstancePacket::GetBody(WCHAR **ppwszBody, DWORD *pdwLengthofPacket)
{
if(NULL == m_pWbemClassObject || m_ePathstyle == WHISTLERPATH)
return E_INVALIDARG;
HRESULT hr = S_OK;
IStream *pStream = NULL;
if(SUCCEEDED(hr = GetBodyTillLocalNamespacePathInStream(&pStream)))
{
WRITETOSTREAM(pStream, L"");
WCHAR pwszFlags[16];
pwszFlags[15] = '\0';
wsprintf(pwszFlags,L"%u",m_lFlags);
WRITETOSTREAM(pStream, pwszFlags);
WRITETOSTREAM(pStream, L"");
// This is a VALUE.NAMEDINSTANCE
WRITETOSTREAM(pStream, L"")
WRITETOSTREAM(pStream, L"");
if(SUCCEEDED(hr = GetKeyBindingsInStream(pStream)))
{
if(SUCCEEDED(hr = ConvertWbemObjectToXMLStream(pStream)))
{
WRITETOSTREAM(pStream, L"");
WRITETOSTREAM(pStream, L"");
hr = GetWStringFromStream(pStream,ppwszBody,pdwLengthofPacket);
}
}
pStream->Release();
}
return hr;
}
// This assumes that pwszXMLObj contains a valid VALUE.NAMEDINSTANCE element
HRESULT CModifyInstancePacket::GetBodyDirect(const WCHAR *pwszXMLObj,
DWORD dwLengthofObj,
WCHAR **ppwszBody,
DWORD *pdwLengthofPacket)
{
if(NULL == m_pWbemClassObject || m_ePathstyle == WHISTLERPATH)
return E_INVALIDARG;
HRESULT hr = S_OK;
IStream *pStream = NULL;
if(SUCCEEDED(hr = GetBodyTillLocalNamespacePathInStream(&pStream)))
{
WRITETOSTREAM(pStream, L"");
WCHAR pwszFlags[16];
pwszFlags[15] = '\0';
wsprintf(pwszFlags,L"%u",m_lFlags);
WRITETOSTREAM(pStream, pwszFlags);
WRITETOSTREAM(pStream, L"");
WRITETOSTREAM(pStream, L"");
pStream->Write(pwszXMLObj, dwLengthofObj*sizeof(WCHAR), NULL);
WRITETOSTREAM(pStream, L"");
hr = GetWStringFromStream(pStream,ppwszBody,pdwLengthofPacket);
pStream->Release();
}
return hr;
}