windows-nt/Source/XPSP1/NT/base/ntsetup/opktools/buildhive/buildhive.h
2020-09-26 16:20:57 +08:00

125 lines
2.1 KiB
C++

/*++
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 <windows.h>
#include <setupapi.h>
#include <stdio.h>
#include <iostream>
#include <list>
#include <tchar.h>
#include <string>
#include <setupapi.hpp>
//
// Macros
//
#define ELEMENT_COUNT(x) (sizeof(x)/sizeof((x)[0]))
//
// forward declarations
//
class File;
//
// Types
//
typedef std::list<PCTSTR> StringList;
typedef std::list<File*> FileList;
typedef std::list<HINF> 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;
}
}
};