/*++ Copyright (c) 2000 Microsoft Corporation Module Name: buildhive.h Abstract: Contains macros, type and function declarations used by buildhive.cpp Author: Mike Cirello Vijay Jayaseelan (vijayj) Revision History: 03 March 2001 : Rewamp the whole source to make it more maintainable (particularly readable) --*/ #pragma once #include #include #include #include #include #include #include #include // // Macros // #define ELEMENT_COUNT(x) (sizeof(x)/sizeof((x)[0])) // // forward declarations // class File; // // Types // typedef std::list StringList; typedef std::list FileList; typedef std::list HandleList; // // constants // const DWORD errFILE_LOCKED = 10000001; const DWORD errBAD_FLAGS = 10000002; const DWORD errFILE_NOT_FOUND= 10000003; const DWORD errGENERAL_ERROR = 10000004; const DWORD errOUT_OF_MEMORY = 10000005; // // Prototypes // PCTSTR Error( VOID ); BOOL SetPrivilege( IN HANDLE hToken, IN LPCTSTR PriviledgeName, IN BOOL Set); INT ShowProgramUsage( VOID ); // // Exceptions // struct ProgramException : public std::exception { virtual void Dump(std::ostream &os) = 0; }; // // Abstracts a Win32 error // struct W32Error : public ProgramException { DWORD ErrorCode; W32Error(DWORD ErrCode = GetLastError()) : ErrorCode(ErrCode){} void Dump(std::ostream &os) { WCHAR MsgBuffer[4096]; MsgBuffer[0] = UNICODE_NULL; DWORD CharCount = FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM, NULL, ErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), MsgBuffer, sizeof(MsgBuffer)/sizeof(WCHAR), NULL); if (CharCount) { std::wstring Msg(MsgBuffer); os << Msg; } else { os << std::hex << ErrorCode; } } };