Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

272 lines
6.5 KiB

/*
April 2000
xiaoyu
define XMLParserTestFactory and XMLParserTestFileStream
*/
#ifndef _XMLPARSERTEST_HXX
#define _XMLPARSERTEST_HXX
#pragma once
#include <windows.h>
#include <ole2.h>
#include <xmlparser.h>
#include "_unknown.hxx"
#include "core.hxx"
#include "sxsxmltree.h"
#include "xmlns.h"
HRESULT XMLParserTest(PCWSTR filename);
class XMLParserTestFactory : public _unknown<IXMLNodeFactory, &IID_IXMLNodeFactory>
{
public:
XMLParserTestFactory() : m_Tree(NULL), m_pNamespaceManager(NULL)
{
}
~XMLParserTestFactory(){
if (m_Tree)
{
FUSION_DELETE_SINGLETON(m_Tree);
m_Tree = NULL;
}
if (m_pNamespaceManager)
{
FUSION_DELETE_SINGLETON(m_pNamespaceManager);
m_pNamespaceManager = NULL;
}
}
HRESULT Initialize();
SXS_XMLTreeNode * GetTreeRoot()
{
return m_Tree->GetRoot();
}
HRESULT STDMETHODCALLTYPE NotifyEvent(
/* [in] */ IXMLNodeSource __RPC_FAR *pSource,
/* [in] */ XML_NODEFACTORY_EVENT iEvt);
HRESULT STDMETHODCALLTYPE BeginChildren(
/* [in] */ IXMLNodeSource __RPC_FAR *pSource,
/* [in] */ XML_NODE_INFO* __RPC_FAR pNodeInfo);
HRESULT STDMETHODCALLTYPE EndChildren(
/* [in] */ IXMLNodeSource __RPC_FAR *pSource,
/* [in] */ BOOL fEmptyNode,
/* [in] */ XML_NODE_INFO* __RPC_FAR pNodeInfo);
HRESULT STDMETHODCALLTYPE Error(
/* [in] */ IXMLNodeSource __RPC_FAR *pSource,
/* [in] */ HRESULT hrErrorCode,
/* [in] */ USHORT cNumRecs,
/* [in] */ XML_NODE_INFO* __RPC_FAR * __RPC_FAR apNodeInfo)
{
UNUSED(pSource);
UNUSED(hrErrorCode);
UNUSED(cNumRecs);
UNUSED(apNodeInfo);
return hrErrorCode;
}
HRESULT STDMETHODCALLTYPE CreateNode(
/* [in] */ IXMLNodeSource __RPC_FAR *pSource,
/* [in] */ PVOID pNodeParent,
/* [in] */ USHORT cNumRecs,
/* [in] */ XML_NODE_INFO* __RPC_FAR * __RPC_FAR apNodeInfo);
SXS_XMLDOMTree* m_Tree;
CXMLNamespaceManager* m_pNamespaceManager;
};
class XMLParserTestFileStream : public _unknown<IStream, &IID_IStream>
{
public:
XMLParserTestFileStream() : hFile(INVALID_HANDLE_VALUE), read(true)
{
}
~XMLParserTestFileStream()
{
if (hFile != INVALID_HANDLE_VALUE)
{
::CloseHandle(hFile);
hFile = INVALID_HANDLE_VALUE;
}
}
bool close()
{
if ( hFile != INVALID_HANDLE_VALUE)
{
::CloseHandle(hFile);
hFile = INVALID_HANDLE_VALUE;
}
return true;
}
bool open(PCWSTR name, bool read = true)
{
if ( ! name ) {
return false;
}
if (read)
{
hFile = ::CreateFileW(
name,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
}
else
{
hFile = ::CreateFileW(
name,
GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
}
return (hFile == INVALID_HANDLE_VALUE) ? false : true;
}
virtual /* [local] */ HRESULT STDMETHODCALLTYPE Read(
/* [out] */ void __RPC_FAR *pv,
/* [in] */ ULONG cb,
/* [out] */ ULONG __RPC_FAR *pcbRead)
{
if (!read) return E_FAIL;
if (cb > MAXDWORD) return E_INVALIDARG;
DWORD len;
BOOL rc = ReadFile(
hFile, // handle of file to read
pv, // address of buffer that receives data
cb, // number of bytes to read
&len, // address of number of bytes read
NULL // address of structure for data
);
if (pcbRead)
*pcbRead = len;
return (rc) ? S_OK : E_FAIL;
}
virtual /* [local] */ HRESULT STDMETHODCALLTYPE Write(
/* [size_is][in] */ const void __RPC_FAR *pv,
/* [in] */ ULONG cb,
/* [out] */ ULONG __RPC_FAR *pcbWritten)
{
if (read) return E_FAIL;
if (cb > MAXDWORD) return E_INVALIDARG;
DWORD dwWritten = 0;
BOOL rc = WriteFile(
hFile, // handle of file to write
pv, // address of buffer that contains data
cb, // number of bytes to write
&dwWritten, // address of number of bytes written
NULL // address of structure for overlapped I/O
);
*pcbWritten = dwWritten;
return (rc) ? S_OK : E_FAIL;
}
virtual /* [local] */ HRESULT STDMETHODCALLTYPE Seek(
/* [in] */ LARGE_INTEGER dlibMove,
/* [in] */ DWORD dwOrigin,
/* [out] */ ULARGE_INTEGER __RPC_FAR *plibNewPosition) {
UNUSED(dlibMove);
UNUSED(dwOrigin);
UNUSED(plibNewPosition);
return E_NOTIMPL;
}
virtual HRESULT STDMETHODCALLTYPE SetSize(
/* [in] */ ULARGE_INTEGER libNewSize) {
UNUSED(libNewSize);
return E_NOTIMPL; }
virtual /* [local] */ HRESULT STDMETHODCALLTYPE CopyTo(
/* [unique][in] */ IStream __RPC_FAR *pstm,
/* [in] */ ULARGE_INTEGER cb,
/* [out] */ ULARGE_INTEGER __RPC_FAR *pcbRead,
/* [out] */ ULARGE_INTEGER __RPC_FAR *pcbWritten) {
UNUSED(pstm);
UNUSED(cb);
UNUSED(pcbRead);
UNUSED(pcbWritten);
return E_NOTIMPL;
}
virtual HRESULT STDMETHODCALLTYPE Commit(
/* [in] */ DWORD grfCommitFlags) {
UNUSED(grfCommitFlags);
return E_NOTIMPL;
}
virtual HRESULT STDMETHODCALLTYPE Revert( void) { return E_NOTIMPL; }
virtual HRESULT STDMETHODCALLTYPE LockRegion(
/* [in] */ ULARGE_INTEGER libOffset,
/* [in] */ ULARGE_INTEGER cb,
/* [in] */ DWORD dwLockType) {
UNUSED(libOffset);
UNUSED(cb);
UNUSED(dwLockType);
return E_NOTIMPL;
}
virtual HRESULT STDMETHODCALLTYPE UnlockRegion(
/* [in] */ ULARGE_INTEGER libOffset,
/* [in] */ ULARGE_INTEGER cb,
/* [in] */ DWORD dwLockType) {
UNUSED(libOffset);
UNUSED(cb);
UNUSED(dwLockType);
return E_NOTIMPL;
}
virtual HRESULT STDMETHODCALLTYPE Stat(
/* [out] */ STATSTG __RPC_FAR *pstatstg,
/* [in] */ DWORD grfStatFlag) {
UNUSED(pstatstg);
UNUSED(grfStatFlag);
return E_NOTIMPL;
}
virtual HRESULT STDMETHODCALLTYPE Clone(
/* [out] */ IStream __RPC_FAR *__RPC_FAR *ppstm) {
UNUSED(ppstm);
return E_NOTIMPL;
}
private:
HANDLE hFile;
bool read;
};
#endif