janwas
a915bdc1b6
. dbghelp is now pulled in by a separate external_libraries header . disable _SECURE_SCL (improves perf) . amd64: initial implementation of essential functions, not yet complete . manifest: disabled on ICC because its IPO module incorrectly interprets /manifestdependency . wdbg_sym: no longer support stack walks on non-ia32 win2k (avoids trouble due to mixing SEH and dtors) . winit and wstartup: had to remove forced symbol include - does not link otherwise on ICC (for reasons unknown). function pointers are actually included and called on x64 windows (compiling with MSC) This was SVN commit r5895.
292 lines
8.4 KiB
C
292 lines
8.4 KiB
C
/**
|
|
* =========================================================================
|
|
* File : win.h
|
|
* Project : 0 A.D.
|
|
* Description : bring in <windows.h> with compatibility fixes
|
|
* =========================================================================
|
|
*/
|
|
|
|
// license: GPL; see lib/license.txt
|
|
|
|
#ifndef INCLUDED_WIN
|
|
#define INCLUDED_WIN
|
|
|
|
#if !OS_WIN
|
|
#error "win.h: do not include if not compiling for Windows"
|
|
#endif
|
|
|
|
// Win32 socket declarations aren't portable (e.g. problems with socklen_t)
|
|
// => skip winsock.h; posix_sock.h should be used instead.
|
|
#define _WINSOCKAPI_
|
|
|
|
#define WIN32_LEAN_AND_MEAN
|
|
#define VC_EXTRALEAN
|
|
|
|
|
|
// other headers may have defined <windows.h>'s include guard to prevent
|
|
// external libraries from pulling it in (which would cause conflicts).
|
|
#undef _WINDOWS_
|
|
|
|
// set version; needed for EnumDisplayDevices
|
|
#define _WIN32_WINNT 0x0501
|
|
|
|
|
|
#define NOGDICAPMASKS // CC_*, LC_*, PC_*, CP_*, TC_*, RC_
|
|
//#define NOVIRTUALKEYCODES // VK_*
|
|
//#define NOWINMESSAGES // WM_*, EM_*, LB_*, CB_*
|
|
//#define NOWINSTYLES // WS_*, CS_*, ES_*, LBS_*, SBS_*, CBS_*
|
|
//#define NOSYSMETRICS // SM_*
|
|
#define NOMENUS // MF_*
|
|
//#define NOICONS // IDI_*
|
|
#define NOKEYSTATES // MK_*
|
|
//#define NOSYSCOMMANDS // SC_*
|
|
#define NORASTEROPS // Binary and Tertiary raster ops
|
|
//#define NOSHOWWINDOW // SW_*
|
|
#define OEMRESOURCE // OEM Resource values
|
|
#define NOATOM // Atom Manager routines
|
|
//#define NOCLIPBOARD // Clipboard routines
|
|
//#define NOCOLOR // Screen colors
|
|
//#define NOCTLMGR // Control and Dialog routines
|
|
#define NODRAWTEXT // DrawText() and DT_*
|
|
//#define NOGDI // All GDI defines and routines
|
|
//#define NOKERNEL // All KERNEL defines and routines
|
|
//#define NOUSER // All USER defines and routines
|
|
//#define NONLS // All NLS defines and routines
|
|
//#define NOMB // MB_* and MessageBox()
|
|
#define NOMEMMGR // GMEM_*, LMEM_*, GHND, LHND, associated routines
|
|
#define NOMETAFILE // typedef METAFILEPICT
|
|
#define NOMINMAX // Macros min(a,b) and max(a,b)
|
|
//#define NOMSG // typedef MSG and associated routines
|
|
#define NOOPENFILE // OpenFile(), OemToAnsi, AnsiToOem, and OF_*
|
|
#define NOSCROLL // SB_* and scrolling routines
|
|
//#define NOSERVICE // All Service Controller routines, SERVICE_ equates, etc.
|
|
//#define NOSOUND // Sound driver routines
|
|
#define NOTEXTMETRIC // typedef TEXTMETRIC and associated routines
|
|
//#define NOWH // SetWindowsHook and WH_*
|
|
//#define NOWINOFFSETS // GWL_*, GCL_*, associated routines
|
|
//#define NOCOMM // COMM driver routines
|
|
#define NOKANJI // Kanji support stuff.
|
|
#define NOHELP // Help engine interface.
|
|
#define NOPROFILER // Profiler interface.
|
|
#define NODEFERWINDOWPOS // DeferWindowPos routines
|
|
#define NOMCX // Modem Configuration Extensions
|
|
#include <windows.h>
|
|
|
|
#include <winreg.h>
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// powrprof.h (missing some parts in VC7)
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// MinGW headers are already correct; only change on VC
|
|
#if MSC_VERSION && MSC_VERSION < 1400
|
|
|
|
#ifndef NTSTATUS
|
|
#define NTSTATUS long
|
|
#endif
|
|
#ifndef STATUS_SUCCESS
|
|
#define STATUS_SUCCESS 0
|
|
#endif
|
|
|
|
#if WINVER < 0x500
|
|
|
|
typedef enum {
|
|
SystemPowerPolicyAc,
|
|
SystemPowerPolicyDc,
|
|
VerifySystemPolicyAc,
|
|
VerifySystemPolicyDc,
|
|
SystemPowerCapabilities,
|
|
SystemBatteryState,
|
|
SystemPowerStateHandler,
|
|
ProcessorStateHandler,
|
|
SystemPowerPolicyCurrent,
|
|
AdministratorPowerPolicy,
|
|
SystemReserveHiberFile,
|
|
ProcessorInformation,
|
|
SystemPowerInformation,
|
|
ProcessorStateHandler2,
|
|
LastWakeTime, // Compare with KeQueryInterruptTime()
|
|
LastSleepTime, // Compare with KeQueryInterruptTime()
|
|
SystemExecutionState,
|
|
SystemPowerStateNotifyHandler,
|
|
ProcessorPowerPolicyAc,
|
|
ProcessorPowerPolicyDc,
|
|
VerifyProcessorPowerPolicyAc,
|
|
VerifyProcessorPowerPolicyDc,
|
|
ProcessorPowerPolicyCurrent,
|
|
SystemPowerStateLogging,
|
|
SystemPowerLoggingEntry
|
|
} POWER_INFORMATION_LEVEL;
|
|
|
|
|
|
typedef struct {
|
|
DWORD Granularity;
|
|
DWORD Capacity;
|
|
} BATTERY_REPORTING_SCALE, *PBATTERY_REPORTING_SCALE;
|
|
|
|
typedef enum _SYSTEM_POWER_STATE {
|
|
PowerSystemUnspecified = 0,
|
|
PowerSystemWorking = 1,
|
|
PowerSystemSleeping1 = 2,
|
|
PowerSystemSleeping2 = 3,
|
|
PowerSystemSleeping3 = 4,
|
|
PowerSystemHibernate = 5,
|
|
PowerSystemShutdown = 6,
|
|
PowerSystemMaximum = 7
|
|
} SYSTEM_POWER_STATE, *PSYSTEM_POWER_STATE;
|
|
|
|
typedef struct {
|
|
// Misc supported system features
|
|
BOOLEAN PowerButtonPresent;
|
|
BOOLEAN SleepButtonPresent;
|
|
BOOLEAN LidPresent;
|
|
BOOLEAN SystemS1;
|
|
BOOLEAN SystemS2;
|
|
BOOLEAN SystemS3;
|
|
BOOLEAN SystemS4; // hibernate
|
|
BOOLEAN SystemS5; // off
|
|
BOOLEAN HiberFilePresent;
|
|
BOOLEAN FullWake;
|
|
BOOLEAN VideoDimPresent;
|
|
BOOLEAN ApmPresent;
|
|
BOOLEAN UpsPresent;
|
|
|
|
// Processors
|
|
BOOLEAN ThermalControl;
|
|
BOOLEAN ProcessorThrottle;
|
|
BYTE ProcessorMinThrottle;
|
|
BYTE ProcessorMaxThrottle;
|
|
BYTE spare2[4];
|
|
|
|
// Disk
|
|
BOOLEAN DiskSpinDown;
|
|
BYTE spare3[8];
|
|
|
|
// System Battery
|
|
BOOLEAN SystemBatteriesPresent;
|
|
BOOLEAN BatteriesAreShortTerm;
|
|
BATTERY_REPORTING_SCALE BatteryScale[3];
|
|
|
|
// Wake
|
|
SYSTEM_POWER_STATE AcOnLineWake;
|
|
SYSTEM_POWER_STATE SoftLidWake;
|
|
SYSTEM_POWER_STATE RtcWake;
|
|
SYSTEM_POWER_STATE MinDeviceWakeState; // note this may change on driver load
|
|
SYSTEM_POWER_STATE DefaultLowLatencyWake;
|
|
} SYSTEM_POWER_CAPABILITIES, *PSYSTEM_POWER_CAPABILITIES;
|
|
|
|
#endif // WINVER < 0x500
|
|
|
|
typedef struct _SYSTEM_POWER_INFORMATION
|
|
{
|
|
ULONG MaxIdlenessAllowed;
|
|
ULONG Idleness;
|
|
ULONG TimeRemaining;
|
|
UCHAR CoolingMode;
|
|
} SYSTEM_POWER_INFORMATION, *PSYSTEM_POWER_INFORMATION;
|
|
|
|
// SPI.CoolingMode
|
|
#define PO_TZ_INVALID_MODE 0 // The system does not support CPU throttling,
|
|
// or there is no thermal zone defined [..]
|
|
|
|
#endif // #if MSC_VERSION
|
|
|
|
// neither VC7.1 nor MinGW define this
|
|
typedef struct _PROCESSOR_POWER_INFORMATION
|
|
{
|
|
ULONG Number;
|
|
ULONG MaxMhz;
|
|
ULONG CurrentMhz;
|
|
ULONG MhzLimit;
|
|
ULONG MaxIdleState;
|
|
ULONG CurrentIdleState;
|
|
} PROCESSOR_POWER_INFORMATION, *PPROCESSOR_POWER_INFORMATION;
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// fixes for dbghelp.h 6.4
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// the macros defined "for those without specstrings.h" are incorrect -
|
|
// parameter definition is missing.
|
|
#ifndef __specstrings
|
|
# define __specstrings // prevent dbghelp from changing these
|
|
|
|
# define __in
|
|
# define __out
|
|
# define __inout
|
|
# define __in_opt
|
|
# define __out_opt
|
|
# define __inout_opt
|
|
# define __in_ecount(s)
|
|
# define __out_ecount(s)
|
|
# define __inout_ecount(s)
|
|
# define __in_bcount(s)
|
|
# define __out_bcount(s)
|
|
# define __inout_bcount(s)
|
|
# define __deref_opt_out
|
|
# define __deref_out
|
|
|
|
#endif
|
|
|
|
// (VC2005 defines __specstrings, but doesn't define (or use) __out_xcount,
|
|
// so this is not inside the above #ifndef section)
|
|
//
|
|
// missing from dbghelp's list
|
|
#ifndef __out_xcount
|
|
# define __out_xcount(s)
|
|
#endif
|
|
|
|
|
|
//
|
|
// not defined by dbghelp; these values are taken from DIA cvconst.h
|
|
//
|
|
|
|
enum BasicType
|
|
{
|
|
btNoType = 0,
|
|
btVoid = 1,
|
|
btChar = 2,
|
|
btWChar = 3,
|
|
btInt = 6,
|
|
btUInt = 7,
|
|
btFloat = 8,
|
|
btBCD = 9,
|
|
btBool = 10,
|
|
btLong = 13,
|
|
btULong = 14,
|
|
btCurrency = 25,
|
|
btDate = 26,
|
|
btVariant = 27,
|
|
btComplex = 28,
|
|
btBit = 29,
|
|
btBSTR = 30,
|
|
btHresult = 31
|
|
};
|
|
|
|
enum DataKind
|
|
{
|
|
DataIsUnknown,
|
|
DataIsLocal,
|
|
DataIsStaticLocal,
|
|
DataIsParam,
|
|
DataIsObjectPtr,
|
|
DataIsFileStatic,
|
|
DataIsGlobal,
|
|
DataIsMember,
|
|
DataIsStaticMember,
|
|
DataIsConstant
|
|
};
|
|
|
|
|
|
|
|
|
|
#if ARCH_IA32
|
|
// the official version causes pointer truncation warnings.
|
|
# undef InterlockedExchangePointer
|
|
# define InterlockedExchangePointer(Target, Value) (PVOID)(uintptr_t)InterlockedExchange((PLONG)(Target), (LONG)(uintptr_t)(Value))
|
|
#endif
|
|
|
|
#endif // #ifndef INCLUDED_WIN
|