141 lines
4.1 KiB
C++
141 lines
4.1 KiB
C++
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
//
|
|
// Copyright (C) Microsoft Corporation, 2000
|
|
//
|
|
// File: auxml.cpp
|
|
//
|
|
// About: source file for AU related XML and schema data structure and functions
|
|
//--------------------------------------------------------------------------
|
|
#include "pch.h"
|
|
|
|
#if 0
|
|
HRESULT MYLoadXMLDoc(BSTR bstrXml, IXMLDOMDocument** ppDoc) //always offline
|
|
{
|
|
HRESULT hr;
|
|
VARIANT_BOOL fSuccess ;
|
|
|
|
// DEBUGMSG("MYLoadXMLDoc starts");
|
|
hr = CoCreateInstance(__uuidof(DOMDocument),
|
|
NULL,
|
|
CLSCTX_INPROC_SERVER,
|
|
__uuidof( IXMLDOMDocument),
|
|
(void **) ppDoc);
|
|
if (FAILED(hr))
|
|
{
|
|
DEBUGMSG("Warning: Fail to create DOM document with error %#lx", hr);
|
|
goto done;
|
|
}
|
|
if (FAILED(hr = (*ppDoc)->put_validateOnParse(VARIANT_FALSE)) ||
|
|
FAILED(hr = (*ppDoc)->put_resolveExternals(VARIANT_FALSE)) ||
|
|
FAILED(hr = (*ppDoc)->put_async(VARIANT_FALSE)))
|
|
{
|
|
DEBUGMSG("Warning: Fail to set document properties with error %#lx", hr);
|
|
SafeRelease(*ppDoc);
|
|
goto done;
|
|
}
|
|
|
|
//
|
|
// load the XML Doc from input string
|
|
//
|
|
if (S_OK != (hr = (*ppDoc)->loadXML(bstrXml, &fSuccess)))
|
|
{
|
|
DEBUGMSG("Warning: Fail to load document with error %#lx", hr);
|
|
SafeRelease(*ppDoc);
|
|
}
|
|
|
|
if (S_FALSE == hr)
|
|
{
|
|
hr = E_FAIL;
|
|
}
|
|
|
|
done:
|
|
// DEBUGMSG("MYLoadXMLDoc ends");
|
|
return hr;
|
|
|
|
}
|
|
#endif
|
|
|
|
|
|
#ifdef DBG
|
|
void LOGFILE(LPTSTR szFileName, BSTR bstrMessage)
|
|
{
|
|
// USES_CONVERSION;
|
|
TCHAR szLogFile[MAX_PATH] ;
|
|
AUASSERT(_T('\0') != g_szWUDir[0]);
|
|
if (FAILED(StringCchCopyEx(szLogFile, ARRAYSIZE(szLogFile), g_szWUDir, NULL, NULL, MISTSAFE_STRING_FLAGS)) ||
|
|
FAILED(StringCchCatEx(szLogFile, ARRAYSIZE(szLogFile), szFileName, NULL, NULL, MISTSAFE_STRING_FLAGS)))
|
|
{
|
|
DEBUGMSG("file name and path too long");
|
|
return;
|
|
}
|
|
HANDLE hFile = CreateFile(szLogFile, GENERIC_WRITE, NULL, NULL, CREATE_ALWAYS, NULL, NULL);
|
|
if (INVALID_HANDLE_VALUE == hFile)
|
|
{
|
|
DEBUGMSG("Fail to create file %S", T2W(szLogFile));
|
|
return;
|
|
}
|
|
|
|
DWORD dwBytesWritten;
|
|
BYTE bMagic1 = 0xff;
|
|
BYTE bMagic2 = 0xfe;
|
|
if (!WriteFile(hFile, &bMagic1, sizeof(bMagic1), &dwBytesWritten, NULL) ||
|
|
!WriteFile(hFile, &bMagic2, sizeof(bMagic2), &dwBytesWritten, NULL) ||
|
|
!WriteFile(hFile, bstrMessage, SysStringByteLen(bstrMessage), &dwBytesWritten, NULL))
|
|
{
|
|
DEBUGMSG("Fail to write to file %S with error %d", T2W(szLogFile), GetLastError());
|
|
}
|
|
CloseHandle(hFile);
|
|
return;
|
|
}
|
|
#endif
|
|
|
|
|
|
HRESULT LOGXMLFILE(LPCTSTR szFileName, BSTR bstrMessage)
|
|
{
|
|
IXMLDOMDocument *pxml;
|
|
HRESULT hr ;
|
|
TCHAR szLogFile[MAX_PATH] ;
|
|
|
|
if (NULL == szFileName)
|
|
{ //no logging needed
|
|
return E_INVALIDARG;
|
|
}
|
|
|
|
AUASSERT(_T('\0') != g_szWUDir[0]);
|
|
if (FAILED(hr = StringCchCopyEx(szLogFile, ARRAYSIZE(szLogFile), g_szWUDir, NULL, NULL, MISTSAFE_STRING_FLAGS)) ||
|
|
FAILED(hr = StringCchCatEx(szLogFile, ARRAYSIZE(szLogFile), szFileName, NULL, NULL, MISTSAFE_STRING_FLAGS)))
|
|
{
|
|
return hr;
|
|
}
|
|
|
|
CAU_BSTR aubsTmp;
|
|
if (!aubsTmp.append(T2W(szLogFile)))
|
|
{
|
|
return E_OUTOFMEMORY;
|
|
}
|
|
if (SUCCEEDED(hr = LoadXMLDoc(bstrMessage, &pxml)))
|
|
{
|
|
if (FAILED(hr = SaveDocument(pxml, aubsTmp)))
|
|
{
|
|
DEBUGMSG("Warning: Fail to save xml file %S", T2W(szLogFile));
|
|
}
|
|
pxml->Release();
|
|
}
|
|
else
|
|
{
|
|
DEBUGMSG("Warning: fail to load ill formated xml with error %#lx", hr);
|
|
#ifdef DBG
|
|
TCHAR szBadFileName[MAX_PATH+1];
|
|
if (SUCCEEDED(StringCchCopyEx(szBadFileName, ARRAYSIZE(szBadFileName), szFileName, NULL, NULL, MISTSAFE_STRING_FLAGS)) &&
|
|
SUCCEEDED(StringCchCatEx(szBadFileName, ARRAYSIZE(szBadFileName), _T(".xml"), NULL, NULL, MISTSAFE_STRING_FLAGS)))
|
|
{
|
|
LOGFILE(szBadFileName, bstrMessage);
|
|
}
|
|
#endif
|
|
}
|
|
return hr;
|
|
}
|
|
|