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.
 
 
 
 
 
 

128 lines
3.6 KiB

/*
**++
**
** Copyright (c) 2002 Microsoft Corporation
**
**
** Module Name:
**
** main.cpp
**
**
** Abstract:
**
** Test program to to register a Writer with various properties
**
** Author:
**
** Reuven Lax [reuvenl] 04-June-2002
**
**
** Revision History:
**
**--
*/
///////////////////////////////////////////////////////////////////////////////
// Includes
#include "stdafx.h"
#include "main.h"
#include "swriter.h"
#include "writerconfig.h"
#include <string>
#include <sstream>
#include <utility>
#include <memory>
///////////////////////////////////////////////////////////////////////////////
// Declarations
HANDLE g_quitEvent = NULL;
using Utility::checkReturn;
///////////////////////////////////////////////////////////////////////////////
extern "C" __cdecl wmain(int argc, wchar_t ** argv)
try
{
if (argc != 2)
throw Utility::TestWriterException(L"Invalid number of arguments\n Format: vswriter.exe <config-file>");
HRESULT hr = ::CoInitializeEx(NULL, COINIT_MULTITHREADED );
checkReturn(hr, L"CoInitializeEx");
loadFile(argv[1]);
hr = ::CoInitializeSecurity(
NULL, // IN PSECURITY_DESCRIPTOR pSecDesc,
-1, // IN LONG cAuthSvc,
NULL, // IN SOLE_AUTHENTICATION_SERVICE *asAuthSvc,
NULL, // IN void *pReserved1,
RPC_C_AUTHN_LEVEL_PKT_PRIVACY, // IN DWORD dwAuthnLevel,
RPC_C_IMP_LEVEL_IDENTIFY, // IN DWORD dwImpLevel,
NULL, // IN void *pAuthList,
EOAC_NONE,
// IN DWORD dwCapabilities,
NULL // IN void *pReserved3
);
checkReturn(hr, L"CoInitializeSecurity");
g_quitEvent = ::CreateEvent(NULL, TRUE, FALSE, NULL);
if (g_quitEvent == NULL)
throw Utility::TestWriterException(L"Internal Error: could not create event\n");
// set a control handler that allows the writer to be shut down
if (!::SetConsoleCtrlHandler(handler, TRUE))
checkReturn(HRESULT_FROM_WIN32(::GetLastError()), L"SetConsoleCtrlHandler");
// We want the writer to go out of scope before the return statement
{
TestWriter writer;
hr = writer.Initialize();
checkReturn(hr, L"TestWriter::Initialize");
if(::WaitForSingleObject(g_quitEvent, INFINITE) != WAIT_OBJECT_0)
throw Utility::TestWriterException(L"internal Error: did not successfully wait on event\n");
}
return 0;
}
catch(const std::exception& error)
{
Utility::printStatus(error.what(), Utility::low);
exit(1);
}
catch(HRESULT error)
{
Utility::TestWriterException e(error);
Utility::printStatus(e.what(), Utility::low);
exit(1);
}
void loadFile(wchar_t* fileName)
{
CXMLDocument document;
if (!document.LoadFromFile(fileName))
Utility::parseError(document);
CComBSTR xmlString = document.SaveAsXML();
WriterConfiguration::instance()->loadFromXML((BSTR)xmlString);
return;
}
BOOL WINAPI handler(DWORD dwCtrlType)
{
// only print to console if it's safe
if ((dwCtrlType == CTRL_C_EVENT) ||
(dwCtrlType == CTRL_BREAK_EVENT))
Utility::printStatus(L"Terminating writer", Utility::low);
// we want to quit independent of what the control event was
::SetEvent(g_quitEvent);
return TRUE;
}