-
-
Save 0x410c/6fa85b00f1133fae16e4f9c86ef4c664 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#pragma once | |
// This allows windows.h to be included first, overriding this header file, but be careful | |
// not to do this everywhere as compile-times suffer. | |
#ifndef _WINDOWS_ | |
#define _WIN32_WINNT 0x0601 // _WIN32_WINNT_WIN7 | |
#include <basetsd.h> | |
// Force-prevent any Windows headers from being included | |
#define _WINDOWS_ | |
#define _INC_WINDOWS | |
#define _OBJBASE_H_ | |
#define RPC_NO_WINDOWS_H | |
#define COM_NO_WINDOWS_H | |
#define __RPC_H__ | |
#define __RPCNDR_H__ | |
#define __oaidl_h__ | |
#define __ocidl_h__ | |
#define __wtypesbase_h__ | |
#define __wtypes_h__ | |
#define __unknwn_h__ | |
#ifdef __cplusplus | |
#define EXTERN_C extern "C" | |
#else | |
#define EXTERN_C extern | |
#endif | |
// From sdkddkver.h | |
#define OSVERSION_MASK 0xFFFF0000 | |
#define OSVER(Version) ((Version) & OSVERSION_MASK) | |
#define OSVER(Version) ((Version) & OSVERSION_MASK) | |
// corecrt.h | |
#ifndef _STATIC_ASSERT | |
#define _STATIC_ASSERT(expr) typedef char __static_assert_t[(expr) != 0] | |
#endif | |
#ifdef __cplusplus | |
extern "C" | |
{ | |
#endif | |
#if (defined(_M_IX86) || defined(_M_IA64) || defined(_M_AMD64)) && !defined(MIDL_PASS) | |
#define DECLSPEC_IMPORT __declspec(dllimport) | |
#else | |
#define DECLSPEC_IMPORT | |
#endif | |
#ifndef DECLSPEC_NORETURN | |
#if (_MSC_VER >= 1200) && !defined(MIDL_PASS) | |
#define DECLSPEC_NORETURN __declspec(noreturn) | |
#else | |
#define DECLSPEC_NORETURN | |
#endif | |
#endif | |
#if defined(_M_MRX000) && !(defined(MIDL_PASS) || defined(RC_INVOKED)) && defined(ENABLE_RESTRICTED) | |
#define RESTRICTED_POINTER __restrict | |
#else | |
#define RESTRICTED_POINTER | |
#endif | |
#define COM_DECLSPEC_NOTHROW | |
#define CALLBACK __stdcall | |
#define WINAPI __stdcall | |
#define WINAPIV __cdecl | |
#define APIENTRY WINAPI | |
#define APIPRIVATE __stdcall | |
#define PASCAL __stdcall | |
#define WINUSERAPI DECLSPEC_IMPORT | |
#define WINBASEAPI DECLSPEC_IMPORT | |
#define WINGDIAPI DECLSPEC_IMPORT | |
#define WINMMAPI DECLSPEC_IMPORT | |
#define NTAPI __stdcall | |
#define WINADVAPI DECLSPEC_IMPORT | |
#define FAR | |
#define IN | |
#define OUT | |
#define OPTIONAL | |
// Introduced in winnt.h somewhere with Windows SDK 10. | |
// As I'm not using it, just disable. | |
#define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) | |
#define FORCEINLINE __forceinline | |
// ============================================================================================== | |
// Basic Windows API types | |
// ============================================================================================== | |
#define CONST const | |
#define VOID void | |
#define FALSE 0 | |
#define TRUE 1 | |
// The __unaligned keyword is only valid on 64-bit platforms | |
#if defined(_M_IA64) || defined(_M_AMD64) | |
#define UNALIGNED __unaligned | |
#else | |
#define UNALIGNED | |
#endif | |
#ifndef __cplusplus | |
#ifndef _WCHAR_T_DEFINED | |
typedef unsigned short wchar_t; | |
#define _WCHAR_T_DEFINED | |
#endif | |
#endif | |
// Numeric types | |
typedef int BOOL; | |
typedef char CHAR; | |
typedef wchar_t WCHAR; | |
typedef unsigned char UCHAR; | |
typedef unsigned char BYTE; | |
typedef short SHORT; | |
typedef unsigned short USHORT; | |
typedef unsigned short WORD; | |
typedef WORD ATOM; | |
typedef int INT; | |
typedef unsigned int UINT; | |
typedef long LONG; | |
typedef LONG HRESULT; | |
typedef unsigned long DWORD; | |
typedef unsigned long ULONG; | |
typedef __int64 LONGLONG; | |
typedef unsigned __int64 ULONGLONG; | |
typedef float FLOAT; | |
typedef BYTE BOOLEAN; | |
// Pointer types | |
typedef void* PVOID; | |
typedef void* LPVOID; | |
typedef CONST void* LPCVOID; | |
typedef BOOL* PBOOL; | |
typedef BOOL* LPBOOL; | |
typedef char* PSZ; | |
typedef UCHAR* PUCHAR; | |
typedef BYTE* PBYTE; | |
typedef BYTE* LPBYTE; | |
typedef SHORT* PSHORT; | |
typedef USHORT* PUSHORT; | |
typedef WORD* PWORD; | |
typedef WORD* LPWORD; | |
typedef int* PINT; | |
typedef int* LPINT; | |
typedef unsigned int* PUINT; | |
typedef LONG* PLONG; | |
typedef long* LPLONG; | |
typedef ULONG* PULONG; | |
typedef DWORD* PDWORD; | |
typedef DWORD* LPDWORD; | |
typedef LONGLONG* PLONGLONG; | |
typedef ULONGLONG* PULONGLONG; | |
typedef FLOAT* PFLOAT; | |
typedef ULONGLONG DWORDLONG; | |
typedef DWORDLONG* PDWORDLONG; | |
typedef void * POINTER_64 PVOID64; | |
// Ansi, multi-byte character types | |
typedef CHAR *PCHAR, *LPCH, *PCH; | |
typedef CONST CHAR *LPCCH, *PCCH; | |
typedef CHAR *NPSTR, *LPSTR, *PSTR; | |
typedef PSTR *PZPSTR; | |
typedef CONST PSTR *PCZPSTR; | |
typedef CONST CHAR *LPCSTR, *PCSTR; | |
typedef PCSTR *PZPCSTR; | |
// Unicode, wide character types | |
typedef WCHAR *PWCHAR, *LPWCH, *PWCH; | |
typedef CONST WCHAR *LPCWCH, *PCWCH; | |
typedef WCHAR *NWPSTR, *LPWSTR, *PWSTR; | |
typedef PWSTR *PZPWSTR; | |
typedef CONST PWSTR *PCZPWSTR; | |
typedef WCHAR UNALIGNED *LPUWSTR, *PUWSTR; | |
typedef CONST WCHAR *LPCWSTR, *PCWSTR; | |
typedef PCWSTR *PZPCWSTR; | |
typedef CONST WCHAR UNALIGNED *LPCUWSTR, *PCUWSTR; | |
// Some type manipulators | |
#define MAKEWORD(a, b) ((WORD)(((BYTE)((DWORD_PTR)(a) & 0xff)) | ((WORD)((BYTE)((DWORD_PTR)(b) & 0xff))) << 8)) | |
#define MAKELONG(a, b) ((LONG)(((WORD)((DWORD_PTR)(a) & 0xffff)) | ((DWORD)((WORD)((DWORD_PTR)(b) & 0xffff))) << 16)) | |
#define LOWORD(l) ((WORD)((DWORD_PTR)(l) & 0xffff)) | |
#define HIWORD(l) ((WORD)((DWORD_PTR)(l) >> 16)) | |
#define LOBYTE(w) ((BYTE)((DWORD_PTR)(w) & 0xff)) | |
#define HIBYTE(w) ((BYTE)((DWORD_PTR)(w) >> 8)) | |
// Windows 64-bit integer | |
typedef union _LARGE_INTEGER { | |
struct { | |
DWORD LowPart; | |
LONG HighPart; | |
}; | |
struct { | |
DWORD LowPart; | |
LONG HighPart; | |
} u; | |
LONGLONG QuadPart; | |
} LARGE_INTEGER; | |
typedef LARGE_INTEGER *PLARGE_INTEGER; | |
// A locally unique identifier | |
typedef struct _LUID { | |
DWORD LowPart; | |
LONG HighPart; | |
} LUID, *PLUID; | |
// Windows point | |
typedef struct tagPOINT | |
{ | |
LONG x; | |
LONG y; | |
} POINT, *PPOINT, *NPPOINT, *LPPOINT; | |
typedef struct tagSIZE | |
{ | |
LONG cx; | |
LONG cy; | |
} SIZE, *PSIZE, *LPSIZE; | |
// Windows rectangle | |
typedef struct tagRECT | |
{ | |
LONG left; | |
LONG top; | |
LONG right; | |
LONG bottom; | |
} RECT, *PRECT, *NPRECT, *LPRECT; | |
typedef const RECT* LPCRECT; | |
// Window region data | |
typedef struct _RGNDATAHEADER { | |
DWORD dwSize; | |
DWORD iType; | |
DWORD nCount; | |
DWORD nRgnSize; | |
RECT rcBound; | |
} RGNDATAHEADER, *PRGNDATAHEADER; | |
typedef struct _RGNDATA { | |
RGNDATAHEADER rdh; | |
char Buffer[1]; | |
} RGNDATA, *PRGNDATA, *NPRGNDATA, *LPRGNDATA; | |
// Windows palette entry | |
typedef struct tagPALETTEENTRY { | |
BYTE peRed; | |
BYTE peGreen; | |
BYTE peBlue; | |
BYTE peFlags; | |
} PALETTEENTRY, *PPALETTEENTRY, *LPPALETTEENTRY; | |
// ============================================================================================== | |
// COM Support | |
// ============================================================================================== | |
// The typical GUID structure | |
typedef struct _GUID { | |
unsigned long Data1; | |
unsigned short Data2; | |
unsigned short Data3; | |
unsigned char Data4[8]; | |
} GUID; | |
// Interface and class IDs | |
typedef GUID IID; | |
typedef GUID CLSID; | |
typedef GUID *LPGUID; | |
// Stop GUIDs being further defined and introduce selectany to store only one copy of | |
// a GUID in an executable | |
#define GUID_DEFINED | |
#define DECLSPEC_SELECTANY __declspec(selectany) | |
#ifdef __midl_proxy | |
#define __MIDL_CONST | |
#else | |
#define __MIDL_CONST const | |
#endif | |
#ifdef __cplusplus | |
#define REFIID const IID & | |
#else | |
#define REFIID const IID * __MIDL_CONST | |
#endif | |
#ifdef __cplusplus | |
#define REFGUID const GUID & | |
#else | |
#define REFGUID const GUID * __MIDL_CONST | |
#endif | |
// Declares and defines a GUID | |
#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ | |
EXTERN_C const GUID DECLSPEC_SELECTANY name \ | |
= { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } | |
#define STDMETHODCALLTYPE __stdcall | |
#define STDMETHODVCALLTYPE __cdecl | |
#define DECLSPEC_UUID(x) | |
#define DECLSPEC_NOVTABLE __declspec(novtable) | |
#define MIDL_INTERFACE(x) struct DECLSPEC_UUID(x) DECLSPEC_NOVTABLE | |
#define BEGIN_INTERFACE | |
#define END_INTERFACE | |
#define __RPC_FAR | |
#ifdef __cplusplus | |
// Interface creation | |
#define interface struct | |
#define DECLARE_INTERFACE(iface) interface DECLSPEC_NOVTABLE iface | |
#define DECLARE_INTERFACE_(iface, baseiface) interface DECLSPEC_NOVTABLE iface : public baseiface | |
// Interface method declaration | |
#define STDMETHOD(method) virtual HRESULT STDMETHODCALLTYPE method | |
#define STDMETHOD_(type,method) virtual type STDMETHODCALLTYPE method | |
#define STDMETHODV(method) virtual HRESULT STDMETHODVCALLTYPE method | |
#define STDMETHODV_(type,method) virtual type STDMETHODVCALLTYPE method | |
#define THIS_ | |
#define THIS void | |
#define PURE = 0 | |
#else | |
#define interface struct | |
#define DECLARE_INTERFACE(iface) typedef interface iface { \ | |
struct iface##Vtbl FAR* lpVtbl; \ | |
} iface; \ | |
typedef struct iface##Vtbl iface##Vtbl; \ | |
struct iface##Vtbl | |
#define DECLARE_INTERFACE_(iface, baseiface) DECLARE_INTERFACE(iface) | |
#define STDMETHOD(method) HRESULT (STDMETHODCALLTYPE * method) | |
#define STDMETHOD_(type,method) type (STDMETHODCALLTYPE * method) | |
#define STDMETHODV(method) HRESULT (STDMETHODVCALLTYPE * method) | |
#define STDMETHODV_(type,method) type (STDMETHODVCALLTYPE * method) | |
#define PURE | |
#define THIS_ INTERFACE FAR* This, | |
#define THIS INTERFACE FAR* This | |
#endif | |
#define S_OK ((HRESULT)0x00000000L) | |
#define S_FALSE ((HRESULT)0x00000001L) | |
#ifdef __cplusplus | |
#define EXTERN_C extern "C" | |
#else | |
#define EXTERN_C extern | |
#endif | |
typedef void __RPC_FAR* RPC_IF_HANDLE; | |
typedef LONG NTSTATUS; | |
#ifdef __cplusplus | |
} | |
#endif | |
#define CONST_VTBL | |
#define __RPC__deref_out | |
typedef interface IUnknown IUnknown; | |
#ifdef __cplusplus | |
// IUnknown interface | |
MIDL_INTERFACE("00000000-0000-0000-C000-000000000046") | |
IUnknown | |
{ | |
public: | |
BEGIN_INTERFACE | |
virtual HRESULT STDMETHODCALLTYPE QueryInterface( | |
/* [in] */ REFIID riid, | |
/* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject) = 0; | |
virtual ULONG STDMETHODCALLTYPE AddRef(void) = 0; | |
virtual ULONG STDMETHODCALLTYPE Release(void) = 0; | |
template<class Q> | |
HRESULT STDMETHODCALLTYPE QueryInterface(Q** pp) | |
{ | |
return QueryInterface(__uuidof(Q), (void **)pp); | |
} | |
END_INTERFACE | |
}; | |
#else /* C style interface */ | |
typedef struct IUnknownVtbl | |
{ | |
BEGIN_INTERFACE | |
HRESULT(STDMETHODCALLTYPE *QueryInterface)( | |
IUnknown * This, | |
/* [in] */ REFIID riid, | |
/* [annotation][iid_is][out] */ | |
__RPC__deref_out void **ppvObject); | |
ULONG(STDMETHODCALLTYPE *AddRef)( | |
IUnknown * This); | |
ULONG(STDMETHODCALLTYPE *Release)( | |
IUnknown * This); | |
END_INTERFACE | |
} IUnknownVtbl; | |
interface IUnknown | |
{ | |
CONST_VTBL struct IUnknownVtbl *lpVtbl; | |
}; | |
#endif | |
#ifdef __cplusplus | |
extern "C" | |
{ | |
#endif | |
// ============================================================================================== | |
// Handles | |
// ============================================================================================== | |
#ifdef STRICT | |
typedef void *HANDLE; | |
#define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name | |
#else | |
typedef PVOID HANDLE; | |
#define DECLARE_HANDLE(name) typedef HANDLE name | |
#endif | |
typedef HANDLE *PHANDLE; | |
typedef HANDLE *LPHANDLE; | |
DECLARE_HANDLE(HINSTANCE); | |
DECLARE_HANDLE(HMODULE); | |
DECLARE_HANDLE(HWND); | |
DECLARE_HANDLE(HDC); | |
DECLARE_HANDLE(HICON); | |
DECLARE_HANDLE(HBITMAP); | |
DECLARE_HANDLE(HBRUSH); | |
DECLARE_HANDLE(HMENU); | |
DECLARE_HANDLE(HPALETTE); | |
DECLARE_HANDLE(HGDIOBJ); | |
typedef int HFILE; | |
typedef HICON HCURSOR; /* HICONs & HCURSORs are polymorphic */ | |
// ============================================================================================== | |
// Windowing | |
// ============================================================================================== | |
// Some basic colours | |
#define COLOR_SCROLLBAR 0 | |
#define COLOR_BACKGROUND 1 | |
#define COLOR_ACTIVECAPTION 2 | |
#define COLOR_INACTIVECAPTION 3 | |
#define COLOR_MENU 4 | |
#define COLOR_WINDOW 5 | |
#define COLOR_WINDOWFRAME 6 | |
#define COLOR_MENUTEXT 7 | |
#define COLOR_WINDOWTEXT 8 | |
#define COLOR_CAPTIONTEXT 9 | |
#define COLOR_ACTIVEBORDER 10 | |
#define COLOR_INACTIVEBORDER 11 | |
#define COLOR_APPWORKSPACE 12 | |
#define COLOR_HIGHLIGHT 13 | |
#define COLOR_HIGHLIGHTTEXT 14 | |
#define COLOR_BTNFACE 15 | |
#define COLOR_BTNSHADOW 16 | |
#define COLOR_GRAYTEXT 17 | |
#define COLOR_BTNTEXT 18 | |
#define COLOR_INACTIVECAPTIONTEXT 19 | |
#define COLOR_BTNHIGHLIGHT 20 | |
// Stock Logical Objects | |
#define WHITE_BRUSH 0 | |
#define LTGRAY_BRUSH 1 | |
#define GRAY_BRUSH 2 | |
#define DKGRAY_BRUSH 3 | |
#define BLACK_BRUSH 4 | |
#define NULL_BRUSH 5 | |
#define HOLLOW_BRUSH NULL_BRUSH | |
#define WHITE_PEN 6 | |
#define BLACK_PEN 7 | |
#define NULL_PEN 8 | |
#define OEM_FIXED_FONT 10 | |
#define ANSI_FIXED_FONT 11 | |
#define ANSI_VAR_FONT 12 | |
#define SYSTEM_FONT 13 | |
#define DEVICE_DEFAULT_FONT 14 | |
#define DEFAULT_PALETTE 15 | |
#define SYSTEM_FIXED_FONT 16 | |
// Standard cursor IDs | |
#define MAKEINTRESOURCE(i) ((LPSTR)((ULONG_PTR)((WORD)(i)))) | |
#define IDC_ARROW MAKEINTRESOURCE(32512) | |
#define IDC_IBEAM MAKEINTRESOURCE(32513) | |
#define IDC_WAIT MAKEINTRESOURCE(32514) | |
#define IDC_CROSS MAKEINTRESOURCE(32515) | |
#define IDC_UPARROW MAKEINTRESOURCE(32516) | |
#define IDC_SIZE MAKEINTRESOURCE(32640) /* OBSOLETE: use IDC_SIZEALL */ | |
#define IDC_ICON MAKEINTRESOURCE(32641) /* OBSOLETE: use IDC_ARROW */ | |
#define IDC_SIZENWSE MAKEINTRESOURCE(32642) | |
#define IDC_SIZENESW MAKEINTRESOURCE(32643) | |
#define IDC_SIZEWE MAKEINTRESOURCE(32644) | |
#define IDC_SIZENS MAKEINTRESOURCE(32645) | |
#define IDC_SIZEALL MAKEINTRESOURCE(32646) | |
#define IDC_NO MAKEINTRESOURCE(32648) /*not in win3.1 */ | |
#define IDC_HAND MAKEINTRESOURCE(32649) | |
#define IDC_APPSTARTING MAKEINTRESOURCE(32650) /*not in win3.1 */ | |
#define IDC_HELP MAKEINTRESOURCE(32651) | |
// Standard icon IDs | |
#define IDI_APPLICATION MAKEINTRESOURCE(32512) | |
#define IDI_HAND MAKEINTRESOURCE(32513) | |
#define IDI_QUESTION MAKEINTRESOURCE(32514) | |
#define IDI_EXCLAMATION MAKEINTRESOURCE(32515) | |
#define IDI_ASTERISK MAKEINTRESOURCE(32516) | |
#define IDI_WINLOGO MAKEINTRESOURCE(32517) | |
#define IDI_WARNING IDI_EXCLAMATION | |
#define IDI_ERROR IDI_HAND | |
#define IDI_INFORMATION IDI_ASTERISK | |
// Some useful window messages | |
#define WM_NULL 0x0000 | |
#define WM_CREATE 0x0001 | |
#define WM_DESTROY 0x0002 | |
#define WM_MOVE 0x0003 | |
#define WM_SIZE 0x0005 | |
#define WM_ACTIVATE 0x0006 | |
#define WM_SETFOCUS 0x0007 | |
#define WM_KILLFOCUS 0x0008 | |
#define WM_ENABLE 0x000A | |
#define WM_SETREDRAW 0x000B | |
#define WM_SETTEXT 0x000C | |
#define WM_GETTEXT 0x000D | |
#define WM_GETTEXTLENGTH 0x000E | |
#define WM_PAINT 0x000F | |
#define WM_CLOSE 0x0010 | |
#define WM_QUERYENDSESSION 0x0011 | |
#define WM_QUERYOPEN 0x0013 | |
#define WM_ENDSESSION 0x0016 | |
#define WM_QUIT 0x0012 | |
#define WM_ERASEBKGND 0x0014 | |
#define WM_SYSCOLORCHANGE 0x0015 | |
#define WM_SHOWWINDOW 0x0018 | |
#define WM_WININICHANGE 0x001A | |
#define WM_WINDOWPOSCHANGED 0x0047 | |
#define WM_EXITSIZEMOVE 0x0232 | |
#define WM_SYSCOMMAND 0x0112 | |
#define WM_SETCURSOR 0x0020 | |
// WM_SYSCOMMAND wParam parameters | |
#define SC_CLOSE 0xF060 | |
#define SC_CONTEXTHELP 0xF180 | |
#define SC_DEFAULT 0xF160 | |
#define SC_HOTKEY 0xF150 | |
#define SC_HSCROLL 0xF080 | |
#define SCF_ISSECURE 0x00000001 | |
#define SC_KEYMENU 0xF100 | |
#define SC_MAXIMIZE 0xF030 | |
#define SC_MINIMIZE 0xF020 | |
#define SC_MONITORPOWER 0xF170 | |
#define SC_MOUSEMENU 0xF090 | |
#define SC_MOVE 0xF010 | |
#define SC_NEXTWINDOW 0xF040 | |
#define SC_PREVWINDOW 0xF050 | |
#define SC_RESTORE 0xF120 | |
#define SC_SCREENSAVE 0xF140 | |
#define SC_SIZE 0xF000 | |
#define SC_TASKLIST 0xF130 | |
#define SC_VSCROLL 0xF070 | |
// Window styles | |
#define WS_OVERLAPPED 0x00000000L | |
#define WS_POPUP 0x80000000L | |
#define WS_CHILD 0x40000000L | |
#define WS_MINIMIZE 0x20000000L | |
#define WS_VISIBLE 0x10000000L | |
#define WS_DISABLED 0x08000000L | |
#define WS_CLIPSIBLINGS 0x04000000L | |
#define WS_CLIPCHILDREN 0x02000000L | |
#define WS_MAXIMIZE 0x01000000L | |
#define WS_CAPTION 0x00C00000L /* WS_BORDER | WS_DLGFRAME */ | |
#define WS_BORDER 0x00800000L | |
#define WS_DLGFRAME 0x00400000L | |
#define WS_VSCROLL 0x00200000L | |
#define WS_HSCROLL 0x00100000L | |
#define WS_SYSMENU 0x00080000L | |
#define WS_THICKFRAME 0x00040000L | |
#define WS_GROUP 0x00020000L | |
#define WS_TABSTOP 0x00010000L | |
#define WS_MINIMIZEBOX 0x00020000L | |
#define WS_MAXIMIZEBOX 0x00010000L | |
#define WS_TILED WS_OVERLAPPED | |
#define WS_ICONIC WS_MINIMIZE | |
#define WS_SIZEBOX WS_THICKFRAME | |
#define WS_TILEDWINDOW WS_OVERLAPPEDWINDOW | |
#define WS_OVERLAPPEDWINDOW (WS_OVERLAPPED | \ | |
WS_CAPTION | \ | |
WS_SYSMENU | \ | |
WS_THICKFRAME | \ | |
WS_MINIMIZEBOX | \ | |
WS_MAXIMIZEBOX) | |
#define WS_POPUPWINDOW (WS_POPUP | \ | |
WS_BORDER | \ | |
WS_SYSMENU) | |
#define WS_CHILDWINDOW (WS_CHILD) | |
// PeekMessage options | |
#define PM_NOREMOVE 0x0000 | |
#define PM_REMOVE 0x0001 | |
#define PM_NOYIELD 0x0002 | |
// ShowWindow flags | |
#define SW_HIDE 0 | |
#define SW_SHOWNORMAL 1 | |
#define SW_NORMAL 1 | |
#define SW_SHOWMINIMIZED 2 | |
#define SW_SHOWMAXIMIZED 3 | |
#define SW_MAXIMIZE 3 | |
#define SW_SHOWNOACTIVATE 4 | |
#define SW_SHOW 5 | |
#define SW_MINIMIZE 6 | |
#define SW_SHOWMINNOACTIVE 7 | |
#define SW_SHOWNA 8 | |
#define SW_RESTORE 9 | |
#define SW_SHOWDEFAULT 10 | |
#define SW_FORCEMINIMIZE 11 | |
#define SW_MAX 11 | |
// MessageBox() Flags | |
#define MB_OK 0x00000000L | |
#define MB_OKCANCEL 0x00000001L | |
#define MB_ABORTRETRYIGNORE 0x00000002L | |
#define MB_YESNOCANCEL 0x00000003L | |
#define MB_YESNO 0x00000004L | |
#define MB_RETRYCANCEL 0x00000005L | |
#define MB_CANCELTRYCONTINUE 0x00000006L | |
#define MB_ICONHAND 0x00000010L | |
#define MB_ICONQUESTION 0x00000020L | |
#define MB_ICONEXCLAMATION 0x00000030L | |
#define MB_ICONASTERISK 0x00000040L | |
#define MB_USERICON 0x00000080L | |
#define MB_ICONWARNING MB_ICONEXCLAMATION | |
#define MB_ICONERROR MB_ICONHAND | |
#define MB_ICONINFORMATION MB_ICONASTERISK | |
#define MB_ICONSTOP MB_ICONHAND | |
#define MB_DEFBUTTON1 0x00000000L | |
#define MB_DEFBUTTON2 0x00000100L | |
#define MB_DEFBUTTON3 0x00000200L | |
#define MB_DEFBUTTON4 0x00000300L | |
#define MB_APPLMODAL 0x00000000L | |
#define MB_SYSTEMMODAL 0x00001000L | |
#define MB_TASKMODAL 0x00002000L | |
#define MB_HELP 0x00004000L // Help Button | |
#define MB_NOFOCUS 0x00008000L | |
#define MB_SETFOREGROUND 0x00010000L | |
#define MB_DEFAULT_DESKTOP_ONLY 0x00020000L | |
#define MB_TOPMOST 0x00040000L | |
#define MB_RIGHT 0x00080000L | |
#define MB_RTLREADING 0x00100000L | |
// Dialog Box Command IDs | |
#define IDOK 1 | |
#define IDCANCEL 2 | |
#define IDABORT 3 | |
#define IDRETRY 4 | |
#define IDIGNORE 5 | |
#define IDYES 6 | |
#define IDNO 7 | |
#define IDCLOSE 8 | |
#define IDHELP 9 | |
#define IDTRYAGAIN 10 | |
#define IDCONTINUE 11 | |
#define IDTIMEOUT 32000 | |
// SetWindowPos z-order | |
#define HWND_BOTTOM (HWND)1 | |
#define HWND_NOTOPMOST (HWND)-2 | |
#define HWND_TOP (HWND)0 | |
#define HWND_TOPMOST (HWND)-1 | |
// SetWindowPos flags | |
#define SWP_ASYNCWINDOWPOS 0x4000 | |
#define SWP_DEFERERASE 0x2000 | |
#define SWP_DRAWFRAME 0x0020 | |
#define SWP_FRAMECHANGED 0x0020 | |
#define SWP_HIDEWINDOW 0x0080 | |
#define SWP_NOACTIVATE 0x0010 | |
#define SWP_NOCOPYBITS 0x0100 | |
#define SWP_NOMOVE 0x0002 | |
#define SWP_NOOWNERZORDER 0x0200 | |
#define SWP_NOREDRAW 0x0008 | |
#define SWP_NOREPOSITION 0x0200 | |
#define SWP_NOSENDCHANGING 0x0400 | |
#define SWP_NOSIZE 0x0001 | |
#define SWP_NOZORDER 0x0004 | |
#define SWP_SHOWWINDOW 0x0040 | |
// SetWindowLong indices | |
#define GWL_WNDPROC (-4) | |
#define GWL_HINSTANCE (-6) | |
#define GWL_HWNDPARENT (-8) | |
#define GWL_STYLE (-16) | |
#define GWL_EXSTYLE (-20) | |
#define GWL_USERDATA (-21) | |
#define GWL_ID (-12) | |
// SetWindowLongPtr indices | |
#define GWLP_WNDPROC (-4) | |
#define GWLP_HINSTANCE (-6) | |
#define GWLP_HWNDPARENT (-8) | |
#define GWLP_USERDATA (-21) | |
#define GWLP_ID (-12) | |
// Types for passing & returning polymorphic values | |
typedef UINT_PTR WPARAM; | |
typedef LONG_PTR LPARAM; | |
typedef LONG_PTR LRESULT; | |
typedef LRESULT(CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM); | |
typedef BOOL(CALLBACK* WNDENUMPROC)(HWND, LPARAM); | |
// Extended window class description | |
typedef struct tagWNDCLASSEX { | |
UINT cbSize; | |
/* Win 3.x */ | |
UINT style; | |
WNDPROC lpfnWndProc; | |
int cbClsExtra; | |
int cbWndExtra; | |
HINSTANCE hInstance; | |
HICON hIcon; | |
HCURSOR hCursor; | |
HBRUSH hbrBackground; | |
LPCSTR lpszMenuName; | |
LPCSTR lpszClassName; | |
/* Win 4.0 */ | |
HICON hIconSm; | |
} WNDCLASSEX, *PWNDCLASSEX, *NPWNDCLASSEX, *LPWNDCLASSEX; | |
// Window message structure | |
typedef struct tagMSG { | |
HWND hwnd; | |
UINT message; | |
WPARAM wParam; | |
LPARAM lParam; | |
DWORD time; | |
POINT pt; | |
} MSG, *PMSG, *NPMSG, *LPMSG; | |
// Window management functions | |
WINUSERAPI VOID WINAPI PostQuitMessage(int nExitCode); | |
LRESULT WINAPI DefWindowProcA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); | |
WINUSERAPI HCURSOR WINAPI LoadCursorA(HINSTANCE hInstance, LPCSTR lpCursorName); | |
WINUSERAPI HICON WINAPI LoadIconA(HINSTANCE hInstance, LPCSTR lpIconName); | |
WINUSERAPI ATOM WINAPI RegisterClassExA(CONST WNDCLASSEX *); | |
WINUSERAPI HWND WINAPI CreateWindowExA(DWORD dwExStyle, LPCSTR lpClassName, LPCSTR lpWindowName, DWORD dwStyle, int X, int Y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam); | |
WINUSERAPI BOOL WINAPI ShowWindow(HWND hWnd, int nCmdShow); | |
WINUSERAPI BOOL WINAPI UpdateWindow(HWND hWnd); | |
WINUSERAPI BOOL WINAPI PeekMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg); | |
WINUSERAPI BOOL WINAPI TranslateMessage(CONST MSG *lpMsg); | |
WINUSERAPI LRESULT WINAPI DispatchMessageA(CONST MSG *lpMsg); | |
WINUSERAPI BOOL WINAPI GetWindowRect(HWND hWnd, LPRECT lpRect); | |
WINUSERAPI BOOL WINAPI AdjustWindowRect(LPRECT lpRect, DWORD dwStyle, BOOL bMenu); | |
WINUSERAPI BOOL WINAPI GetClientRect(HWND hWnd, LPRECT lpRect); | |
WINUSERAPI BOOL WINAPI ScreenToClient(HWND hWnd, LPPOINT lpPoint); | |
WINUSERAPI BOOL WINAPI ClientToScreen(HWND hWnd, LPPOINT lpPoint); | |
WINUSERAPI BOOL WINAPI DestroyWindow(HWND hWnd); | |
WINUSERAPI int WINAPI MessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType); | |
WINUSERAPI HWND WINAPI GetForegroundWindow(void); | |
WINUSERAPI int WINAPI GetWindowTextA(HWND hWnd, LPSTR lpString, int nMaxCount); | |
WINUSERAPI int WINAPI GetClassNameA(HWND hWnd, LPSTR lpClassName, int nMaxCount); | |
WINUSERAPI BOOL WINAPI SetWindowPos(HWND hWnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags); | |
WINUSERAPI BOOL WINAPI EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam); | |
WINUSERAPI LONG_PTR WINAPI SetWindowLongPtrA(HWND hWnd, int nIndex, LONG_PTR dwNewLong); | |
WINUSERAPI LONG_PTR WINAPI GetWindowLongPtrA(HWND hWnd, int nIndex); | |
WINUSERAPI LONG WINAPI SetWindowLongA(HWND hWnd, int nIndex, LONG dwNewLong); | |
WINUSERAPI LONG WINAPI GetWindowLongA(HWND hWnd, int nIndex); | |
WINUSERAPI BOOL WINAPI WaitMessage(VOID); | |
WINUSERAPI HDC WINAPI GetDC(HWND hWnd); | |
WINUSERAPI int WINAPI ReleaseDC(HWND hWnd, HDC hDC); | |
WINGDIAPI BOOL WINAPI RectVisible(HDC hdc, CONST RECT * lprect); | |
WINGDIAPI HGDIOBJ WINAPI GetStockObject(int i); | |
// ============================================================================================== | |
// DLLs | |
// ============================================================================================== | |
// DllMain flags | |
#define DLL_PROCESS_DETACH 0 | |
#define DLL_PROCESS_ATTACH 1 | |
#define DLL_THREAD_ATTACH 2 | |
#define DLL_THREAD_DETACH 3 | |
#define DLL_PROCESS_VERIFIER 4 | |
// Function pointer types | |
typedef int (WINAPI *FARPROC)(); | |
typedef int (WINAPI *NEARPROC)(); | |
typedef int (WINAPI *PROC)(); | |
WINBASEAPI HMODULE WINAPI LoadLibraryA(LPCSTR lpLibFileName); | |
WINBASEAPI BOOL WINAPI FreeLibrary(HMODULE hLibModule); | |
WINBASEAPI FARPROC WINAPI GetProcAddress(HMODULE hModule, LPCSTR lpProcName); | |
WINGDIAPI PROC WINAPI wglGetProcAddress(LPCSTR); | |
WINBASEAPI DWORD WINAPI GetModuleFileNameA(HMODULE hModule, LPCH lpFilename, DWORD nSize); | |
// ============================================================================================== | |
// Raw Input | |
// ============================================================================================== | |
// Device registration flags | |
#define RIDEV_REMOVE 0x00000001 | |
#define RIDEV_EXCLUDE 0x00000010 | |
#define RIDEV_PAGEONLY 0x00000020 | |
#define RIDEV_NOLEGACY 0x00000030 | |
#define RIDEV_INPUTSINK 0x00000100 | |
#define RIDEV_CAPTUREMOUSE 0x00000200 // effective when mouse nolegacy is specified, otherwise it would be an error | |
#define RIDEV_NOHOTKEYS 0x00000200 // effective for keyboard. | |
#define RIDEV_APPKEYS 0x00000400 // effective for keyboard. | |
#define RIDEV_EXMODEMASK 0x000000F0 | |
#define RIDEV_EXMODE(mode) ((mode) & RIDEV_EXMODEMASK) | |
// Input received via this windows message | |
#define WM_INPUT 0x00FF | |
// Flags for GetRawInputData | |
#define RID_INPUT 0x10000003 | |
#define RID_HEADER 0x10000005 | |
// Type of the raw input | |
#define RIM_TYPEMOUSE 0 | |
#define RIM_TYPEKEYBOARD 1 | |
#define RIM_TYPEHID 2 | |
// Define the mouse button state indicators. | |
#define RI_MOUSE_LEFT_BUTTON_DOWN 0x0001 // Left Button changed to down. | |
#define RI_MOUSE_LEFT_BUTTON_UP 0x0002 // Left Button changed to up. | |
#define RI_MOUSE_RIGHT_BUTTON_DOWN 0x0004 // Right Button changed to down. | |
#define RI_MOUSE_RIGHT_BUTTON_UP 0x0008 // Right Button changed to up. | |
#define RI_MOUSE_MIDDLE_BUTTON_DOWN 0x0010 // Middle Button changed to down. | |
#define RI_MOUSE_MIDDLE_BUTTON_UP 0x0020 // Middle Button changed to up. | |
#define RI_MOUSE_BUTTON_1_DOWN RI_MOUSE_LEFT_BUTTON_DOWN | |
#define RI_MOUSE_BUTTON_1_UP RI_MOUSE_LEFT_BUTTON_UP | |
#define RI_MOUSE_BUTTON_2_DOWN RI_MOUSE_RIGHT_BUTTON_DOWN | |
#define RI_MOUSE_BUTTON_2_UP RI_MOUSE_RIGHT_BUTTON_UP | |
#define RI_MOUSE_BUTTON_3_DOWN RI_MOUSE_MIDDLE_BUTTON_DOWN | |
#define RI_MOUSE_BUTTON_3_UP RI_MOUSE_MIDDLE_BUTTON_UP | |
#define RI_MOUSE_BUTTON_4_DOWN 0x0040 | |
#define RI_MOUSE_BUTTON_4_UP 0x0080 | |
#define RI_MOUSE_BUTTON_5_DOWN 0x0100 | |
#define RI_MOUSE_BUTTON_5_UP 0x0200 | |
// If usButtonFlags has RI_MOUSE_WHEEL, the wheel delta is stored in usButtonData. | |
// Take it as a signed value. | |
#define RI_MOUSE_WHEEL 0x0400 | |
#define WHEEL_DELTA 120 | |
// Mouse indicator flags. | |
#define MOUSE_MOVE_RELATIVE 0 | |
#define MOUSE_MOVE_ABSOLUTE 1 | |
#define MOUSE_VIRTUAL_DESKTOP 0x02 // the coordinates are mapped to the virtual desktop | |
#define MOUSE_ATTRIBUTES_CHANGED 0x04 // requery for mouse attributes | |
// Keyboard overrun MakeCode. | |
#define KEYBOARD_OVERRUN_MAKE_CODE 0xFF | |
// Keyboard input data Flags. | |
#define RI_KEY_MAKE 0 | |
#define RI_KEY_BREAK 1 | |
#define RI_KEY_E0 2 | |
#define RI_KEY_E1 4 | |
#define RI_KEY_TERMSRV_SET_LED 8 | |
#define RI_KEY_TERMSRV_SHADOW 0x10 | |
// Device registration info | |
typedef struct tagRAWINPUTDEVICE { | |
USHORT usUsagePage; // Toplevel collection UsagePage | |
USHORT usUsage; // Toplevel collection Usage | |
DWORD dwFlags; | |
HWND hwndTarget; // Target hwnd. NULL = follows keyboard focus | |
} RAWINPUTDEVICE, *PRAWINPUTDEVICE, *LPRAWINPUTDEVICE; | |
typedef CONST RAWINPUTDEVICE* PCRAWINPUTDEVICE; | |
DECLARE_HANDLE(HRAWINPUT); | |
// Raw Input data header | |
typedef struct tagRAWINPUTHEADER { | |
DWORD dwType; | |
DWORD dwSize; | |
HANDLE hDevice; | |
WPARAM wParam; | |
} RAWINPUTHEADER, *PRAWINPUTHEADER, *LPRAWINPUTHEADER; | |
// Raw format of the mouse input | |
typedef struct tagRAWMOUSE { | |
// Indicator flags. | |
USHORT usFlags; | |
// The transition state of the mouse buttons. | |
union { | |
ULONG ulButtons; | |
struct { | |
USHORT usButtonFlags; | |
USHORT usButtonData; | |
}; | |
}; | |
// The raw state of the mouse buttons. | |
ULONG ulRawButtons; | |
// The signed relative or absolute motion in the X direction. | |
LONG lLastX; | |
// The signed relative or absolute motion in the Y direction. | |
LONG lLastY; | |
// Device-specific additional information for the event. | |
ULONG ulExtraInformation; | |
} RAWMOUSE, *PRAWMOUSE, *LPRAWMOUSE; | |
// Raw format of the keyboard input | |
typedef struct tagRAWKEYBOARD { | |
// The "make" scan code (key depression). | |
USHORT MakeCode; | |
// The flags field indicates a "break" (key release) and other | |
// miscellaneous scan code information defined in ntddkbd.h. | |
USHORT Flags; | |
USHORT Reserved; | |
// Windows message compatible information | |
USHORT VKey; | |
UINT Message; | |
// Device-specific additional information for the event. | |
ULONG ExtraInformation; | |
} RAWKEYBOARD, *PRAWKEYBOARD, *LPRAWKEYBOARD; | |
// Raw format of the input from Human Input Devices | |
typedef struct tagRAWHID { | |
DWORD dwSizeHid; // byte size of each report | |
DWORD dwCount; // number of input packed | |
BYTE bRawData[1]; | |
} RAWHID, *PRAWHID, *LPRAWHID; | |
// RAWINPUT data structure. | |
typedef struct tagRAWINPUT { | |
RAWINPUTHEADER header; | |
union { | |
RAWMOUSE mouse; | |
RAWKEYBOARD keyboard; | |
RAWHID hid; | |
} data; | |
} RAWINPUT, *PRAWINPUT, *LPRAWINPUT; | |
WINUSERAPI BOOL WINAPI RegisterRawInputDevices(PCRAWINPUTDEVICE pRawInputDevices, UINT uiNumDevices, UINT cbSize); | |
WINUSERAPI UINT WINAPI GetRawInputData(HRAWINPUT hRawInput, UINT uiCommand, LPVOID pData, PUINT pcbSize, UINT cbSizeHeader); | |
WINUSERAPI BOOL WINAPI ClipCursor(CONST RECT *lpRect); | |
WINUSERAPI BOOL WINAPI GetClipCursor(LPRECT lpRect); | |
WINUSERAPI int WINAPI ShowCursor(BOOL bShow); | |
WINUSERAPI HCURSOR WINAPI SetCursor(HCURSOR hCursor); | |
WINUSERAPI BOOL WINAPI GetCursorPos(LPPOINT lpPoint); | |
WINUSERAPI BOOL WINAPI SetCursorPos(int X, int Y); | |
WINUSERAPI HWND WINAPI SetCapture(HWND hWnd); | |
WINUSERAPI BOOL WINAPI ReleaseCapture(VOID); | |
// ============================================================================================== | |
// Virtual key API | |
// ============================================================================================== | |
// Virtual Keys, Standard Set | |
// VK_0 - VK_9 are the same as ASCII '0' - '9' (0x30 - 0x39) | |
// VK_A - VK_Z are the same as ASCII 'A' - 'Z' (0x41 - 0x5A) | |
#define VK_LBUTTON 0x01 | |
#define VK_RBUTTON 0x02 | |
#define VK_CANCEL 0x03 | |
#define VK_MBUTTON 0x04 /* NOT contiguous with L & RBUTTON */ | |
#define VK_BACK 0x08 | |
#define VK_TAB 0x09 | |
#define VK_CLEAR 0x0C | |
#define VK_RETURN 0x0D | |
#define VK_SHIFT 0x10 | |
#define VK_CONTROL 0x11 | |
#define VK_MENU 0x12 | |
#define VK_PAUSE 0x13 | |
#define VK_CAPITAL 0x14 | |
#define VK_KANA 0x15 | |
#define VK_HANGEUL 0x15 /* old name - should be here for compatibility */ | |
#define VK_HANGUL 0x15 | |
#define VK_JUNJA 0x17 | |
#define VK_FINAL 0x18 | |
#define VK_HANJA 0x19 | |
#define VK_KANJI 0x19 | |
#define VK_ESCAPE 0x1B | |
#define VK_CONVERT 0x1C | |
#define VK_NONCONVERT 0x1D | |
#define VK_ACCEPT 0x1E | |
#define VK_MODECHANGE 0x1F | |
#define VK_SPACE 0x20 | |
#define VK_PRIOR 0x21 | |
#define VK_NEXT 0x22 | |
#define VK_END 0x23 | |
#define VK_HOME 0x24 | |
#define VK_LEFT 0x25 | |
#define VK_UP 0x26 | |
#define VK_RIGHT 0x27 | |
#define VK_DOWN 0x28 | |
#define VK_SELECT 0x29 | |
#define VK_PRINT 0x2A | |
#define VK_EXECUTE 0x2B | |
#define VK_SNAPSHOT 0x2C | |
#define VK_INSERT 0x2D | |
#define VK_DELETE 0x2E | |
#define VK_HELP 0x2F | |
#define VK_LWIN 0x5B | |
#define VK_RWIN 0x5C | |
#define VK_APPS 0x5D | |
#define VK_SLEEP 0x5F | |
#define VK_NUMPAD0 0x60 | |
#define VK_NUMPAD1 0x61 | |
#define VK_NUMPAD2 0x62 | |
#define VK_NUMPAD3 0x63 | |
#define VK_NUMPAD4 0x64 | |
#define VK_NUMPAD5 0x65 | |
#define VK_NUMPAD6 0x66 | |
#define VK_NUMPAD7 0x67 | |
#define VK_NUMPAD8 0x68 | |
#define VK_NUMPAD9 0x69 | |
#define VK_MULTIPLY 0x6A | |
#define VK_ADD 0x6B | |
#define VK_SEPARATOR 0x6C | |
#define VK_SUBTRACT 0x6D | |
#define VK_DECIMAL 0x6E | |
#define VK_DIVIDE 0x6F | |
#define VK_F1 0x70 | |
#define VK_F2 0x71 | |
#define VK_F3 0x72 | |
#define VK_F4 0x73 | |
#define VK_F5 0x74 | |
#define VK_F6 0x75 | |
#define VK_F7 0x76 | |
#define VK_F8 0x77 | |
#define VK_F9 0x78 | |
#define VK_F10 0x79 | |
#define VK_F11 0x7A | |
#define VK_F12 0x7B | |
#define VK_F13 0x7C | |
#define VK_F14 0x7D | |
#define VK_F15 0x7E | |
#define VK_F16 0x7F | |
#define VK_F17 0x80 | |
#define VK_F18 0x81 | |
#define VK_F19 0x82 | |
#define VK_F20 0x83 | |
#define VK_F21 0x84 | |
#define VK_F22 0x85 | |
#define VK_F23 0x86 | |
#define VK_F24 0x87 | |
#define VK_NUMLOCK 0x90 | |
#define VK_SCROLL 0x91 | |
#define VK_OEM_1 0xBA // ';:' for US | |
#define VK_OEM_PLUS 0xBB // '+' any country | |
#define VK_OEM_COMMA 0xBC // ',' any country | |
#define VK_OEM_MINUS 0xBD // '-' any country | |
#define VK_OEM_PERIOD 0xBE // '.' any country | |
#define VK_OEM_2 0xBF // '/?' for US | |
#define VK_OEM_3 0xC0 // '`~' for US | |
#define VK_OEM_4 0xDB // '[{' for US | |
#define VK_OEM_5 0xDC // '\|' for US | |
#define VK_OEM_6 0xDD // ']}' for US | |
#define VK_OEM_7 0xDE // ''"' for US | |
#define VK_OEM_8 0xDF | |
#define MAPVK_VK_TO_VSC (0) | |
#define MAPVK_VSC_TO_VK (1) | |
#define MAPVK_VK_TO_CHAR (2) | |
#define MAPVK_VSC_TO_VK_EX (3) | |
#define MAPVK_VK_TO_VSC_EX (4) | |
WINUSERAPI UINT WINAPI MapVirtualKeyA(UINT uCode, UINT uMapType); | |
WINUSERAPI BOOL WINAPI GetKeyboardState(PBYTE lpKeyState); | |
WINUSERAPI int WINAPI ToAscii(UINT uVirtKey, UINT uScanCode, CONST BYTE *lpKeyState, LPWORD lpChar, UINT uFlags); | |
//WINUSERAPI int WINAPI ToAsciiEx(UINT uVirtKey, UINT uScanCode, CONST BYTE *lpKeyState, LPWORD lpChar, UINT uFlags, HKL dwhkl); | |
WINUSERAPI int WINAPI ToUnicode(UINT wVirtKey, UINT wScanCode, CONST BYTE *lpKeyState, LPWSTR pwszBuff, int cchBuff, UINT wFlags); | |
// ============================================================================================== | |
// Memory heap access | |
// ============================================================================================== | |
#define HEAP_NO_SERIALIZE 0x00000001 | |
#define HEAP_GROWABLE 0x00000002 | |
#define HEAP_GENERATE_EXCEPTIONS 0x00000004 | |
#define HEAP_ZERO_MEMORY 0x00000008 | |
#define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010 | |
#define HEAP_TAIL_CHECKING_ENABLED 0x00000020 | |
#define HEAP_FREE_CHECKING_ENABLED 0x00000040 | |
#define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080 | |
#define HEAP_CREATE_ALIGN_16 0x00010000 | |
#define HEAP_CREATE_ENABLE_TRACING 0x00020000 | |
#define HEAP_CREATE_ENABLE_EXECUTE 0x00040000 | |
#define HEAP_MAXIMUM_TAG 0x0FFF | |
#define HEAP_PSEUDO_TAG_FLAG 0x8000 | |
#define HEAP_TAG_SHIFT 18 | |
#define HEAP_MAKE_TAG_FLAGS( b, o ) ((DWORD)((b) + ((o) << 18))) | |
#define PAGE_NOACCESS 0x01 | |
#define PAGE_READONLY 0x02 | |
#define PAGE_READWRITE 0x04 | |
#define PAGE_WRITECOPY 0x08 | |
#define PAGE_EXECUTE 0x10 | |
#define PAGE_EXECUTE_READ 0x20 | |
#define PAGE_EXECUTE_READWRITE 0x40 | |
#define PAGE_EXECUTE_WRITECOPY 0x80 | |
#define PAGE_GUARD 0x100 | |
#define PAGE_NOCACHE 0x200 | |
#define PAGE_WRITECOMBINE 0x400 | |
#define MEM_COMMIT 0x1000 | |
#define MEM_RESERVE 0x2000 | |
#define MEM_DECOMMIT 0x4000 | |
#define MEM_RELEASE 0x8000 | |
#define MEM_FREE 0x10000 | |
#define MEM_PRIVATE 0x20000 | |
#define MEM_MAPPED 0x40000 | |
#define MEM_RESET 0x80000 | |
#define MEM_TOP_DOWN 0x100000 | |
#define MEM_WRITE_WATCH 0x200000 | |
#define MEM_PHYSICAL 0x400000 | |
#define MEM_ROTATE 0x800000 | |
#define MEM_LARGE_PAGES 0x20000000 | |
#define MEM_4MB_PAGES 0x80000000 | |
WINBASEAPI LPVOID WINAPI HeapAlloc(HANDLE hHeap, DWORD dwFlags, SIZE_T dwBytes); | |
WINBASEAPI BOOL WINAPI HeapFree(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem); | |
WINBASEAPI HANDLE WINAPI GetProcessHeap(VOID); | |
WINBASEAPI LPVOID WINAPI HeapReAlloc(HANDLE hHeap, DWORD dwFlags, LPVOID lpMem, SIZE_T dwBytes); | |
WINBASEAPI SIZE_T WINAPI HeapSize(HANDLE hHeap, DWORD dwFlags, LPCVOID lpMem); | |
#if _MSC_VER < 1900 | |
#define DECLSPEC_ALLOCATOR | |
#else | |
#define DECLSPEC_ALLOCATOR __declspec(allocator) | |
#endif | |
typedef HANDLE HLOCAL; | |
/* Local Memory Flags */ | |
#define LMEM_FIXED 0x0000 | |
#define LMEM_MOVEABLE 0x0002 | |
#define LMEM_NOCOMPACT 0x0010 | |
#define LMEM_NODISCARD 0x0020 | |
#define LMEM_ZEROINIT 0x0040 | |
#define LMEM_MODIFY 0x0080 | |
#define LMEM_DISCARDABLE 0x0F00 | |
#define LMEM_VALID_FLAGS 0x0F72 | |
#define LMEM_INVALID_HANDLE 0x8000 | |
WINBASEAPI DECLSPEC_ALLOCATOR HLOCAL WINAPI LocalAlloc(UINT uFlags, SIZE_T uBytes); | |
WINBASEAPI DECLSPEC_ALLOCATOR HLOCAL WINAPI LocalReAlloc(HLOCAL hMem, UINT uFlags, SIZE_T uBytes); | |
WINBASEAPI HLOCAL WINAPI LocalFree(HLOCAL hMem); | |
WINBASEAPI LPVOID WINAPI VirtualAlloc(LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect); | |
WINBASEAPI BOOL WINAPI VirtualFree(LPVOID lpAddress, SIZE_T dwSize, DWORD dwFreeType); | |
WINBASEAPI BOOL WINAPI VirtualProtect(LPVOID lpAddress, SIZE_T dwSize, DWORD flNewProtect, PDWORD lpflOldProtect); | |
typedef struct _MEMORYSTATUSEX { | |
DWORD dwLength; | |
DWORD dwMemoryLoad; | |
DWORDLONG ullTotalPhys; | |
DWORDLONG ullAvailPhys; | |
DWORDLONG ullTotalPageFile; | |
DWORDLONG ullAvailPageFile; | |
DWORDLONG ullTotalVirtual; | |
DWORDLONG ullAvailVirtual; | |
DWORDLONG ullAvailExtendedVirtual; | |
} MEMORYSTATUSEX, *LPMEMORYSTATUSEX; | |
WINBASEAPI BOOL WINAPI GlobalMemoryStatusEx(LPMEMORYSTATUSEX lpBuffer); | |
// ============================================================================================== | |
// File system | |
// ============================================================================================== | |
// Standard system handles | |
#define STD_INPUT_HANDLE ((DWORD)-10) | |
#define STD_OUTPUT_HANDLE ((DWORD)-11) | |
#define STD_ERROR_HANDLE ((DWORD)-12) | |
// OpenFile access flags | |
#define GENERIC_READ (0x80000000L) | |
#define GENERIC_WRITE (0x40000000L) | |
#define GENERIC_EXECUTE (0x20000000L) | |
#define GENERIC_ALL (0x10000000L) | |
// OpenFile behaviour flags | |
#define CREATE_NEW 1 | |
#define CREATE_ALWAYS 2 | |
#define OPEN_EXISTING 3 | |
#define OPEN_ALWAYS 4 | |
#define TRUNCATE_EXISTING 5 | |
// File creation flags must start at the high end since they | |
// are combined with the attributes | |
#define FILE_FLAG_WRITE_THROUGH 0x80000000 | |
#define FILE_FLAG_OVERLAPPED 0x40000000 | |
#define FILE_FLAG_NO_BUFFERING 0x20000000 | |
#define FILE_FLAG_RANDOM_ACCESS 0x10000000 | |
#define FILE_FLAG_SEQUENTIAL_SCAN 0x08000000 | |
#define FILE_FLAG_DELETE_ON_CLOSE 0x04000000 | |
#define FILE_FLAG_BACKUP_SEMANTICS 0x02000000 | |
#define FILE_FLAG_POSIX_SEMANTICS 0x01000000 | |
#define FILE_FLAG_OPEN_REPARSE_POINT 0x00200000 | |
#define FILE_FLAG_OPEN_NO_RECALL 0x00100000 | |
#define FILE_FLAG_FIRST_PIPE_INSTANCE 0x00080000 | |
// CreateFile sharing flags | |
#define FILE_SHARE_READ 0x00000001 | |
#define FILE_SHARE_WRITE 0x00000002 | |
#define FILE_SHARE_DELETE 0x00000004 | |
// Return value errors | |
#define INVALID_HANDLE_VALUE ((HANDLE)(LONG_PTR)-1) | |
#define INVALID_FILE_SIZE ((DWORD)0xFFFFFFFF) | |
#define INVALID_SET_FILE_POINTER ((DWORD)-1) | |
#define INVALID_FILE_ATTRIBUTES ((DWORD)-1) | |
// Seek constants | |
#define FILE_BEGIN 0 | |
#define FILE_CURRENT 1 | |
#define FILE_END 2 | |
#define MAX_PATH 260 | |
// Used by file map creation | |
#define PAGE_NOACCESS 0x01 | |
#define PAGE_READONLY 0x02 | |
#define PAGE_READWRITE 0x04 | |
#define PAGE_WRITECOPY 0x08 | |
// Used for file map views | |
#define STANDARD_RIGHTS_REQUIRED (0x000F0000L) | |
#define SECTION_QUERY 0x0001 | |
#define SECTION_MAP_WRITE 0x0002 | |
#define SECTION_MAP_READ 0x0004 | |
#define SECTION_MAP_EXECUTE 0x0008 | |
#define SECTION_EXTEND_SIZE 0x0010 | |
#define SECTION_MAP_EXECUTE_EXPLICIT 0x0020 // not included in SECTION_ALL_ACCESS | |
#define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SECTION_QUERY|\ | |
SECTION_MAP_WRITE | \ | |
SECTION_MAP_READ | \ | |
SECTION_MAP_EXECUTE | \ | |
SECTION_EXTEND_SIZE) | |
#define FILE_MAP_COPY SECTION_QUERY | |
#define FILE_MAP_WRITE SECTION_MAP_WRITE | |
#define FILE_MAP_READ SECTION_MAP_READ | |
#define FILE_MAP_ALL_ACCESS SECTION_ALL_ACCESS | |
#define FILE_MAP_EXECUTE SECTION_MAP_EXECUTE_EXPLICIT // not included in FILE_MAP_ALL_ACCESS | |
#define FILE_READ_ATTRIBUTES ( 0x0080 ) // all | |
// File Attribute Constants | |
#define FILE_ATTRIBUTE_ARCHIVE 0x20 | |
#define FILE_ATTRIBUTE_COMPRESSED 0x800 | |
#define FILE_ATTRIBUTE_DEVICE 0x40 | |
#define FILE_ATTRIBUTE_DIRECTORY 0x10 | |
#define FILE_ATTRIBUTE_ENCRYPTED 0x4000 | |
#define FILE_ATTRIBUTE_HIDDEN 0x02 | |
#define FILE_ATTRIBUTE_INTEGRITY_STREAM 0x8000 | |
#define FILE_ATTRIBUTE_NORMAL 0x80 | |
#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x2000 | |
#define FILE_ATTRIBUTE_NO_SCRUB_DAT 0x20000 | |
#define FILE_ATTRIBUTE_OFFLINE 0x1000 | |
#define FILE_ATTRIBUTE_READONLY 0x01 | |
#define FILE_ATTRIBUTE_REPARSE_POINT 0x400 | |
#define FILE_ATTRIBUTE_SPARSE_FILE 0x200 | |
#define FILE_ATTRIBUTE_SYSTEM 0x04 | |
#define FILE_ATTRIBUTE_TEMPORARY 0x100 | |
#define FILE_ATTRIBUTE_VIRTUAL 0x10000 | |
#define FILE_LIST_DIRECTORY ( 0x0001 ) // directory | |
#define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001 | |
#define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002 | |
#define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004 | |
#define FILE_NOTIFY_CHANGE_SIZE 0x00000008 | |
#define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010 | |
#define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020 | |
#define FILE_NOTIFY_CHANGE_CREATION 0x00000040 | |
#define FILE_NOTIFY_CHANGE_SECURITY 0x00000100 | |
#define STATUS_PENDING ((DWORD )0x00000103L) | |
#define HasOverlappedIoCompleted(lpOverlapped) (((DWORD)(lpOverlapped)->Internal) != STATUS_PENDING) | |
#define MOVEFILE_REPLACE_EXISTING 0x01 | |
#define MOVEFILE_COPY_ALLOWED 0x02 | |
#define MOVEFILE_DELAY_UNTIL_REBOOT 0x04 | |
#define MOVEFILE_WRITE_THROUGH 0x08 | |
#define MOVEFILE_CREATE_HARDLINK 0x10 | |
#define MOVEFILE_FAIL_IF_NOT_TRACKABLE 0x20 | |
#define FILE_TYPE_UNKNOWN 0x0000 | |
#define FILE_TYPE_DISK 0x0001 | |
#define FILE_TYPE_CHAR 0x0002 | |
#define FILE_TYPE_PIPE 0x0003 | |
#define FILE_TYPE_REMOTE 0x8000 | |
#define FILE_VOLUME_IS_COMPRESSED 0x00008000 | |
#define FILE_SUPPORTS_OBJECT_IDS 0x00010000 | |
#define FILE_SUPPORTS_ENCRYPTION 0x00020000 | |
#define FILE_NAMED_STREAMS 0x00040000 | |
#define FILE_READ_ONLY_VOLUME 0x00080000 | |
#define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000 | |
#define FILE_SUPPORTS_TRANSACTIONS 0x00200000 | |
#define FILE_SUPPORTS_HARD_LINKS 0x00400000 | |
#define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000 | |
#define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000 | |
#define FILE_SUPPORTS_USN_JOURNAL 0x02000000 | |
#define FILE_SUPPORTS_INTEGRITY_STREAMS 0x04000000 | |
#define FILE_SUPPORTS_BLOCK_REFCOUNTING 0x08000000 | |
#define FILE_SUPPORTS_SPARSE_VDL 0x10000000 | |
#define FILE_DAX_VOLUME 0x20000000 | |
#define FILE_SUPPORTS_GHOSTING 0x40000000 | |
#define VOLUME_NAME_DOS 0x0 //default | |
#define VOLUME_NAME_GUID 0x1 | |
#define VOLUME_NAME_NT 0x2 | |
#define VOLUME_NAME_NONE 0x4 | |
#define FILE_NAME_NORMALIZED 0x0 //default | |
#define FILE_NAME_OPENED 0x8 | |
#define DRIVE_UNKNOWN 0 | |
#define DRIVE_NO_ROOT_DIR 1 | |
#define DRIVE_REMOVABLE 2 | |
#define DRIVE_FIXED 3 | |
#define DRIVE_REMOTE 4 | |
#define DRIVE_CDROM 5 | |
#define DRIVE_RAMDISK 6 | |
#define REMOTE_PROTOCOL_INFO_FLAG_LOOPBACK 0x00000001 | |
#define REMOTE_PROTOCOL_INFO_FLAG_OFFLINE 0x00000002 | |
#define LOCKFILE_FAIL_IMMEDIATELY 0x00000001 | |
#define LOCKFILE_EXCLUSIVE_LOCK 0x00000002 | |
typedef enum _FILE_INFO_BY_HANDLE_CLASS { | |
FileBasicInfo, | |
FileStandardInfo, | |
FileNameInfo, | |
FileRenameInfo, | |
FileDispositionInfo, | |
FileAllocationInfo, | |
FileEndOfFileInfo, | |
FileStreamInfo, | |
FileCompressionInfo, | |
FileAttributeTagInfo, | |
FileIdBothDirectoryInfo, | |
FileIdBothDirectoryRestartInfo, | |
FileIoPriorityHintInfo, | |
FileRemoteProtocolInfo, | |
FileFullDirectoryInfo, | |
FileFullDirectoryRestartInfo, | |
FileStorageInfo, | |
FileAlignmentInfo, | |
FileIdInfo, | |
FileIdExtdDirectoryInfo, | |
FileIdExtdDirectoryRestartInfo, | |
FileDispositionInfoEx, | |
FileRenameInfoEx, | |
FileCaseSensitiveInfo, | |
FileNormalizedNameInfo, | |
MaximumFileInfoByHandleClass | |
} FILE_INFO_BY_HANDLE_CLASS, *PFILE_INFO_BY_HANDLE_CLASS; | |
typedef struct _IO_STATUS_BLOCK { | |
union { | |
NTSTATUS Status; | |
PVOID Pointer; | |
} DUMMYUNIONNAME; | |
ULONG_PTR Information; | |
} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; | |
typedef struct _OVERLAPPED { | |
ULONG_PTR Internal; | |
ULONG_PTR InternalHigh; | |
union { | |
struct { | |
DWORD Offset; | |
DWORD OffsetHigh; | |
}; | |
PVOID Pointer; | |
}; | |
HANDLE hEvent; | |
} OVERLAPPED, *LPOVERLAPPED; | |
typedef struct _SECURITY_ATTRIBUTES { | |
DWORD nLength; | |
LPVOID lpSecurityDescriptor; | |
BOOL bInheritHandle; | |
} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES; | |
typedef struct _FILETIME | |
{ | |
DWORD dwLowDateTime; | |
DWORD dwHighDateTime; | |
} FILETIME, *LPFILETIME; | |
typedef struct _WIN32_FIND_DATAA { | |
DWORD dwFileAttributes; | |
FILETIME ftCreationTime; | |
FILETIME ftLastAccessTime; | |
FILETIME ftLastWriteTime; | |
DWORD nFileSizeHigh; | |
DWORD nFileSizeLow; | |
DWORD dwReserved0; | |
DWORD dwReserved1; | |
CHAR cFileName[MAX_PATH]; | |
CHAR cAlternateFileName[14]; | |
#ifdef _MAC | |
DWORD dwFileType; | |
DWORD dwCreatorType; | |
WORD wFinderFlags; | |
#endif | |
} WIN32_FIND_DATAA, *PWIN32_FIND_DATAA, *LPWIN32_FIND_DATAA; | |
typedef enum _GET_FILEEX_INFO_LEVELS { | |
GetFileExInfoStandard, | |
GetFileExMaxInfoLevel | |
} GET_FILEEX_INFO_LEVELS; | |
typedef struct _WIN32_FILE_ATTRIBUTE_DATA { | |
DWORD dwFileAttributes; | |
FILETIME ftCreationTime; | |
FILETIME ftLastAccessTime; | |
FILETIME ftLastWriteTime; | |
DWORD nFileSizeHigh; | |
DWORD nFileSizeLow; | |
} WIN32_FILE_ATTRIBUTE_DATA, *LPWIN32_FILE_ATTRIBUTE_DATA; | |
typedef VOID(WINAPI *LPOVERLAPPED_COMPLETION_ROUTINE)(DWORD dwErrorCode, DWORD dwNumberOfBytesTransfered, LPOVERLAPPED lpOverlapped); | |
typedef struct _FILE_NOTIFY_INFORMATION { | |
DWORD NextEntryOffset; | |
DWORD Action; | |
DWORD FileNameLength; | |
WCHAR FileName[1]; | |
} FILE_NOTIFY_INFORMATION, *PFILE_NOTIFY_INFORMATION; | |
typedef struct _BY_HANDLE_FILE_INFORMATION { | |
DWORD dwFileAttributes; | |
FILETIME ftCreationTime; | |
FILETIME ftLastAccessTime; | |
FILETIME ftLastWriteTime; | |
DWORD dwVolumeSerialNumber; | |
DWORD nFileSizeHigh; | |
DWORD nFileSizeLow; | |
DWORD nNumberOfLinks; | |
DWORD nFileIndexHigh; | |
DWORD nFileIndexLow; | |
} BY_HANDLE_FILE_INFORMATION, *PBY_HANDLE_FILE_INFORMATION, *LPBY_HANDLE_FILE_INFORMATION; | |
typedef struct _FILE_END_OF_FILE_INFO { | |
LARGE_INTEGER EndOfFile; | |
} FILE_END_OF_FILE_INFO, *PFILE_END_OF_FILE_INFO; | |
typedef struct _FILE_REMOTE_PROTOCOL_INFO | |
{ | |
// Structure Version | |
USHORT StructureVersion; // 1 for Win7, 2 for Win8 SMB3, 3 for Blue SMB3. | |
USHORT StructureSize; // sizeof(FILE_REMOTE_PROTOCOL_INFO) | |
ULONG Protocol; // Protocol (WNNC_NET_*) defined in winnetwk.h or ntifs.h. | |
// Protocol Version & Type | |
USHORT ProtocolMajorVersion; | |
USHORT ProtocolMinorVersion; | |
USHORT ProtocolRevision; | |
USHORT Reserved; | |
// Protocol-Generic Information | |
ULONG Flags; | |
struct { | |
ULONG Reserved[8]; | |
} GenericReserved; | |
// Protocol specific information | |
#if (_WIN32_WINNT < _WIN32_WINNT_WIN8) | |
struct { | |
ULONG Reserved[16]; | |
} ProtocolSpecificReserved; | |
#endif | |
#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) | |
union { | |
struct { | |
struct { | |
ULONG Capabilities; | |
} Server; | |
struct { | |
ULONG Capabilities; | |
ULONG CachingFlags; | |
} Share; | |
} Smb2; | |
ULONG Reserved[16]; | |
} ProtocolSpecific; | |
#endif | |
} FILE_REMOTE_PROTOCOL_INFO, *PFILE_REMOTE_PROTOCOL_INFO; | |
#define CreateFileMapping CreateFileMappingA | |
WINBASEAPI HANDLE WINAPI GetStdHandle(DWORD nStdHandle); | |
WINBASEAPI HANDLE WINAPI CreateFileA(LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile); | |
WINBASEAPI HANDLE WINAPI CreateFileW(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile); | |
WINBASEAPI BOOL WINAPI CloseHandle(HANDLE hObject); | |
WINBASEAPI DWORD WINAPI SetFilePointer(HANDLE hFile, LONG lDistanceToMove, PLONG lpDistanceToMoveHigh, DWORD dwMoveMethod); | |
WINBASEAPI BOOL WINAPI SetFilePointerEx(HANDLE hFile, LARGE_INTEGER liDistanceToMove, PLARGE_INTEGER lpNewFilePointer, DWORD dwMoveMethod); | |
WINBASEAPI BOOL WINAPI SetEndOfFile(HANDLE hFile); | |
WINBASEAPI BOOL WINAPI ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped); | |
WINBASEAPI BOOL WINAPI WriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped); | |
WINBASEAPI DWORD WINAPI GetCurrentDirectoryA(DWORD nBufferLength, LPSTR lpBuffer); | |
WINBASEAPI BOOL WINAPI CreateDirectoryA(LPCSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes); | |
WINBASEAPI BOOL WINAPI CreateDirectoryW(LPCWSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes); | |
WINBASEAPI HANDLE WINAPI FindFirstFileA(LPCSTR lpFileName, LPWIN32_FIND_DATAA lpFindFileData); | |
WINBASEAPI BOOL WINAPI FindNextFileA(HANDLE hFindFile, LPWIN32_FIND_DATAA lpFindFileData); | |
WINBASEAPI BOOL WINAPI FindClose(HANDLE hFindFile); | |
WINBASEAPI BOOL WINAPI DeleteFileA(LPCSTR lpFileName); | |
WINBASEAPI BOOL WINAPI DeleteFileW(LPCWSTR lpFileName); | |
WINBASEAPI BOOL WINAPI RemoveDirectoryA(LPCSTR lpPathName); | |
WINBASEAPI BOOL WINAPI GetFileTime(HANDLE hFile, LPFILETIME lpCreationTime, LPFILETIME lpLastAccessTime, LPFILETIME lpLastWriteTime); | |
WINBASEAPI BOOL WINAPI SetFileAttributesW(LPCWSTR lpFileName, DWORD dwFileAttributes); | |
WINBASEAPI DWORD WINAPI GetFileAttributesA(LPCSTR lpFileName); | |
WINBASEAPI BOOL WINAPI GetFileAttributesExA(LPCSTR lpFileName, GET_FILEEX_INFO_LEVELS fInfoLevelId, LPVOID lpFileInformation); | |
WINBASEAPI DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName); | |
WINBASEAPI DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh); | |
WINBASEAPI BOOL WINAPI GetFileSizeEx(HANDLE hFile, PLARGE_INTEGER lpFileSize); | |
WINBASEAPI HANDLE WINAPI CreateFileMappingA(HANDLE hFile, LPSECURITY_ATTRIBUTES lpFileMappingAttributes, DWORD flProtect, DWORD dwMaximumSizeHigh, DWORD dwMaximumSizeLow, LPCSTR lpName); | |
WINBASEAPI HANDLE WINAPI CreateFileMappingW(HANDLE hFile, LPSECURITY_ATTRIBUTES lpFileMappingAttributes, DWORD flProtect, DWORD dwMaximumSizeHigh, DWORD dwMaximumSizeLow, LPCWSTR lpName); | |
WINBASEAPI LPVOID WINAPI MapViewOfFile(HANDLE hFileMappingObject, DWORD dwDesiredAccess, DWORD dwFileOffsetHigh, DWORD dwFileOffsetLow, SIZE_T dwNumberOfBytesToMap); | |
WINBASEAPI LPVOID WINAPI MapViewOfFileEx(HANDLE hFileMappingObject, DWORD dwDesiredAccess, DWORD dwFileOffsetHigh, DWORD dwFileOffsetLow, SIZE_T dwNumberOfBytesToMap, LPVOID lpBaseAddress); | |
WINBASEAPI HANDLE WINAPI OpenFileMappingA(DWORD dwDesiredAccess, BOOL bInheritHandle, LPCSTR lpName); | |
WINBASEAPI BOOL WINAPI UnmapViewOfFile(LPCVOID lpBaseAddress); | |
WINBASEAPI BOOL WINAPI FlushViewOfFile(LPCVOID lpBaseAddress, SIZE_T dwNumberOfBytesToFlush); | |
WINBASEAPI BOOL WINAPI FlushFileBuffers(HANDLE hFile); | |
WINBASEAPI BOOL WINAPI CopyFileA(LPCSTR lpExistingFileName, LPCSTR lpNewFileName, BOOL bFailIfExists); | |
WINBASEAPI BOOL WINAPI MoveFileA(LPCSTR lpExistingFileName, LPCSTR lpNewFileName); | |
WINBASEAPI BOOL WINAPI MoveFileExA(LPCSTR lpExistingFileName, LPCSTR lpNewFileName, DWORD dwFlags); | |
WINBASEAPI BOOL WINAPI ReadDirectoryChangesW(HANDLE hDirectory, LPVOID lpBuffer, DWORD nBufferLength, BOOL bWatchSubtree, DWORD dwNotifyFilter, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped, LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine); | |
WINBASEAPI BOOL WINAPI CancelIo(HANDLE hFile); | |
WINBASEAPI BOOL WINAPI GetOverlappedResult(HANDLE hFile, LPOVERLAPPED lpOverlapped, LPDWORD lpNumberOfBytesTransferred, BOOL bWait); | |
WINBASEAPI BOOL WINAPI GetFileInformationByHandle(HANDLE hFile, LPBY_HANDLE_FILE_INFORMATION lpFileInformation); | |
WINBASEAPI DWORD WINAPI GetFileType(HANDLE hFile); | |
WINBASEAPI UINT WINAPI GetDriveTypeW(LPCWSTR lpRootPathName); | |
WINBASEAPI BOOL WINAPI LockFile(HANDLE hFile, DWORD dwFileOffsetLow, DWORD dwFileOffsetHigh, DWORD nNumberOfBytesToLockLow, DWORD nNumberOfBytesToLockHigh); | |
WINBASEAPI BOOL WINAPI LockFileEx(HANDLE hFile, DWORD dwFlags, DWORD dwReserved, DWORD nNumberOfBytesToLockLow, DWORD nNumberOfBytesToLockHigh, LPOVERLAPPED lpOverlapped); | |
WINBASEAPI BOOL WINAPI UnlockFile(HANDLE hFile, DWORD dwFileOffsetLow, DWORD dwFileOffsetHigh, DWORD nNumberOfBytesToUnlockLow, DWORD nNumberOfBytesToUnlockHigh); | |
// ============================================================================================== | |
// Process startup/management | |
// ============================================================================================== | |
// Startup info flags | |
#define STARTF_USESHOWWINDOW 0x00000001 | |
#define STARTF_USESIZE 0x00000002 | |
#define STARTF_USEPOSITION 0x00000004 | |
#define STARTF_USECOUNTCHARS 0x00000008 | |
#define STARTF_USEFILLATTRIBUTE 0x00000010 | |
#define STARTF_RUNFULLSCREEN 0x00000020 // ignored for non-x86 platforms | |
#define STARTF_FORCEONFEEDBACK 0x00000040 | |
#define STARTF_FORCEOFFFEEDBACK 0x00000080 | |
#define STARTF_USESTDHANDLES 0x00000100 | |
// WaitForSingleObject return values | |
#define STATUS_WAIT_0 ((DWORD )0x00000000L) | |
#define STATUS_ABANDONED_WAIT_0 ((DWORD )0x00000080L) | |
#define STATUS_USER_APC ((DWORD )0x000000C0L) | |
#define WAIT_FAILED ((DWORD)0xFFFFFFFF) | |
#define WAIT_OBJECT_0 ((STATUS_WAIT_0 ) + 0 ) | |
#define WAIT_ABANDONED ((STATUS_ABANDONED_WAIT_0 ) + 0 ) | |
#define WAIT_ABANDONED_0 ((STATUS_ABANDONED_WAIT_0 ) + 0 ) | |
#define WAIT_IO_COMPLETION STATUS_USER_APC | |
#define WAIT_TIMEOUT 258L // dderror | |
// Flags for OpenProcess | |
#define DELETE (0x00010000L) | |
#define READ_CONTROL (0x00020000L) | |
#define WRITE_DAC (0x00040000L) | |
#define WRITE_OWNER (0x00080000L) | |
#define SYNCHRONIZE (0x00100000L) | |
#define PROCESS_TERMINATE (0x0001) | |
#define PROCESS_CREATE_THREAD (0x0002) | |
#define PROCESS_SET_SESSIONID (0x0004) | |
#define PROCESS_VM_OPERATION (0x0008) | |
#define PROCESS_VM_READ (0x0010) | |
#define PROCESS_VM_WRITE (0x0020) | |
#define PROCESS_DUP_HANDLE (0x0040) | |
#define PROCESS_CREATE_PROCESS (0x0080) | |
#define PROCESS_SET_QUOTA (0x0100) | |
#define PROCESS_SET_INFORMATION (0x0200) | |
#define PROCESS_QUERY_INFORMATION (0x0400) | |
#define PROCESS_SUSPEND_RESUME (0x0800) | |
#define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF) | |
#define STILL_ACTIVE (259) | |
// Queue status flags for GetQueueStatus() and MsgWaitForMultipleObjects() | |
#define QS_KEY 0x0001 | |
#define QS_MOUSEMOVE 0x0002 | |
#define QS_MOUSEBUTTON 0x0004 | |
#define QS_POSTMESSAGE 0x0008 | |
#define QS_TIMER 0x0010 | |
#define QS_PAINT 0x0020 | |
#define QS_SENDMESSAGE 0x0040 | |
#define QS_HOTKEY 0x0080 | |
#define QS_ALLPOSTMESSAGE 0x0100 | |
#if(_WIN32_WINNT >= 0x0501) | |
#define QS_RAWINPUT 0x0400 | |
#endif /* _WIN32_WINNT >= 0x0501 */ | |
#define QS_MOUSE (QS_MOUSEMOVE | \ | |
QS_MOUSEBUTTON) | |
#if (_WIN32_WINNT >= 0x0501) | |
#define QS_INPUT (QS_MOUSE | \ | |
QS_KEY | \ | |
QS_RAWINPUT) | |
#else | |
#define QS_INPUT (QS_MOUSE | \ | |
QS_KEY) | |
#endif // (_WIN32_WINNT >= 0x0501) | |
#define QS_ALLEVENTS (QS_INPUT | \ | |
QS_POSTMESSAGE | \ | |
QS_TIMER | \ | |
QS_PAINT | \ | |
QS_HOTKEY) | |
#define QS_ALLINPUT (QS_INPUT | \ | |
QS_POSTMESSAGE | \ | |
QS_TIMER | \ | |
QS_PAINT | \ | |
QS_HOTKEY | \ | |
QS_SENDMESSAGE) | |
#define MWMO_ALTERTABLE 0x0002 | |
#define MWMO_INPUTAVAILABLE 0x0004 | |
#define MWMO_WAITALL 0x0001 | |
typedef struct _STARTUPINFOA { | |
DWORD cb; | |
LPSTR lpReserved; | |
LPSTR lpDesktop; | |
LPSTR lpTitle; | |
DWORD dwX; | |
DWORD dwY; | |
DWORD dwXSize; | |
DWORD dwYSize; | |
DWORD dwXCountChars; | |
DWORD dwYCountChars; | |
DWORD dwFillAttribute; | |
DWORD dwFlags; | |
WORD wShowWindow; | |
WORD cbReserved2; | |
LPBYTE lpReserved2; | |
HANDLE hStdInput; | |
HANDLE hStdOutput; | |
HANDLE hStdError; | |
} STARTUPINFOA, *LPSTARTUPINFOA; | |
typedef STARTUPINFOA STARTUPINFO; | |
typedef LPSTARTUPINFOA LPSTARTUPINFO; | |
typedef struct _PROCESS_INFORMATION { | |
HANDLE hProcess; | |
HANDLE hThread; | |
DWORD dwProcessId; | |
DWORD dwThreadId; | |
} PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION; | |
#define CreateMutex CreateMutexA | |
WINBASEAPI LPSTR WINAPI GetCommandLineA(VOID); | |
WINBASEAPI VOID WINAPI GetStartupInfoA(LPSTARTUPINFO lpStartupInfo); | |
WINBASEAPI DECLSPEC_NORETURN VOID WINAPI ExitProcess(UINT uExitCode); | |
WINBASEAPI HMODULE WINAPI GetModuleHandleA(LPCSTR lpModuleName); | |
WINBASEAPI HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName); | |
WINBASEAPI BOOL WINAPI CreateProcessA(LPCSTR lpApplicationName, LPSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCSTR lpCurrentDirectory, LPSTARTUPINFOA lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation); | |
WINBASEAPI HANDLE WINAPI CreateMutexA(LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, LPCSTR lpName); | |
WINBASEAPI HANDLE WINAPI CreateMutexW(LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, LPCWSTR lpName); | |
WINBASEAPI HANDLE WINAPI OpenMutexA(DWORD dwDesiredAccess, BOOL bInheritHandle, LPCSTR lpName); | |
WINBASEAPI BOOL WINAPI ReleaseMutex(HANDLE hMutex); | |
WINBASEAPI DWORD WINAPI WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds); | |
WINUSERAPI DWORD WINAPI MsgWaitForMultipleObjectsEx(DWORD nCount, CONST HANDLE *pHandles, DWORD dwMilliseconds, DWORD dwWakeMask, DWORD dwFlags); | |
WINBASEAPI DWORD WINAPI SignalObjectAndWait(HANDLE hObjectToSignal, HANDLE hObjectToWaitOn, DWORD dwMilliseconds, BOOL bAlertable); | |
WINBASEAPI BOOL WINAPI EnumProcesses(DWORD* lpidProcess, DWORD cb, DWORD* cbNeeded); | |
WINBASEAPI HANDLE WINAPI OpenProcess(DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwProcessId); | |
WINBASEAPI BOOL WINAPI EnumProcessModules(HANDLE hProcess, HMODULE* lphModule, DWORD cb, LPDWORD lpcbNeeded); | |
WINBASEAPI DWORD WINAPI GetModuleBaseNameA(HANDLE hProcess, HMODULE hModule, LPSTR lpBaseName, DWORD nSize); | |
WINBASEAPI DWORD WINAPI GetCurrentProcessId(VOID); | |
WINBASEAPI BOOL WINAPI TerminateProcess(HANDLE hProcess, UINT uExitCode); | |
WINBASEAPI HANDLE WINAPI GetCurrentProcess(void); | |
WINBASEAPI BOOL WINAPI DuplicateHandle(HANDLE hSourceProcessHandle, HANDLE hSourceHandle, HANDLE hTargetProcessHandle, LPHANDLE lpTargetHandle, DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwOptions); | |
WINBASEAPI BOOL WINAPI GetExitCodeProcess(HANDLE hProcess, LPDWORD lpExitCode); | |
WINBASEAPI BOOL WINAPI GetExitCodeThread(HANDLE hThread, LPDWORD lpExitCode); | |
WINBASEAPI BOOL WINAPI CreatePipe(PHANDLE hReadPipe, PHANDLE hWritePipe, LPSECURITY_ATTRIBUTES lpPipeAttributes, DWORD nSize); | |
WINBASEAPI VOID WINAPI FatalExit(int ExitCode); | |
// ============================================================================================== | |
// Time | |
// ============================================================================================== | |
#define TIMERR_BASE 96 | |
#define TIMERR_NOERROR (0) /* no error */ | |
#define TIMERR_NOCANDO (TIMERR_BASE+1) /* request not completed */ | |
#define TIMERR_STRUCT (TIMERR_BASE+33) /* time struct size */ | |
#ifndef _SYSTEMTIME_ | |
#define _SYSTEMTIME_ | |
typedef struct _SYSTEMTIME | |
{ | |
WORD wYear; | |
WORD wMonth; | |
WORD wDayOfWeek; | |
WORD wDay; | |
WORD wHour; | |
WORD wMinute; | |
WORD wSecond; | |
WORD wMilliseconds; | |
} SYSTEMTIME; | |
typedef struct _TIME_ZONE_INFORMATION | |
{ | |
LONG Bias; | |
WCHAR StandardName[32]; | |
SYSTEMTIME StandardDate; | |
LONG StandardBias; | |
WCHAR DaylightName[32]; | |
SYSTEMTIME DaylightDate; | |
LONG DaylightBias; | |
} TIME_ZONE_INFORMATION, *PTIME_ZONE_INFORMATION, *LPTIME_ZONE_INFORMATION; | |
typedef struct _SYSTEMTIME *PSYSTEMTIME; | |
typedef struct _SYSTEMTIME *LPSYSTEMTIME; | |
#endif // !_SYSTEMTIME | |
typedef VOID(APIENTRY *PTIMERAPCROUTINE)(LPVOID lpArgToCompletionRoutine, DWORD dwTimerLowValue, DWORD dwTimerHighValue); | |
typedef UINT MMRESULT; /* error return code, 0 means no error */ | |
WINBASEAPI VOID WINAPI GetSystemTime(LPSYSTEMTIME lpSystemTime); | |
WINBASEAPI VOID WINAPI GetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime); | |
WINBASEAPI VOID WINAPI GetSystemTimePreciseAsFileTime(LPFILETIME lpSystemTimeAsFileTime); | |
WINBASEAPI BOOL WINAPI SystemTimeToFileTime(const SYSTEMTIME *lpSystemTime, LPFILETIME lpFileTime); | |
WINBASEAPI VOID WINAPI Sleep(DWORD dwMilliseconds); | |
WINBASEAPI DWORD WINAPI SleepEx(DWORD dwMilliseconds, BOOL bAlertable); | |
WINBASEAPI DWORD WINAPI GetTickCount(VOID); | |
WINBASEAPI BOOL WINAPI FileTimeToSystemTime(CONST FILETIME *lpFileTime, LPSYSTEMTIME lpSystemTime); | |
WINBASEAPI BOOL WINAPI QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount); | |
WINBASEAPI BOOL WINAPI QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency); | |
WINBASEAPI HANDLE WINAPI CreateWaitableTimerA(LPSECURITY_ATTRIBUTES lpTimerAttributes, BOOL bManualReset, LPCSTR lpTimerName); | |
WINBASEAPI BOOL WINAPI SetWaitableTimer(HANDLE hTimer, const LARGE_INTEGER *lpDueTime, LONG lPeriod, PTIMERAPCROUTINE pfnCompletionRoutine, LPVOID lpArgToCompletionRoutine, BOOL fResume); | |
WINBASEAPI HANDLE WINAPI CreateSemaphoreA(LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitialCount, LONG lMaximumCount, LPCSTR lpName); | |
WINBASEAPI BOOL WINAPI ReleaseSemaphore(HANDLE hSemaphore, LONG lReleaseCount, LPLONG lpPreviousCount); | |
WINMMAPI MMRESULT WINAPI timeBeginPeriod(UINT uPeriod); | |
WINMMAPI MMRESULT WINAPI timeEndPeriod(UINT uPeriod); | |
// ============================================================================================== | |
// Minimal Winsock for headers only | |
// ============================================================================================== | |
#define INVALID_SOCKET (SOCKET)(~0) | |
typedef UINT_PTR SOCKET; | |
// ============================================================================================== | |
// Network | |
// ============================================================================================== | |
#define MAX_ADAPTER_DESCRIPTION_LENGTH 128 | |
#define MAX_ADAPTER_NAME_LENGTH 256 | |
#define MAX_ADAPTER_ADDRESS_LENGTH 8 | |
#define NO_ERROR 0L // dderror | |
#define ERROR_BUFFER_OVERFLOW 111L | |
#define MIB_IF_TYPE_ETHERNET 6 | |
#define MIB_IF_TYPE_PPP 23 | |
#define IF_TYPE_IEEE80211 71 // Radio spread spectrum | |
typedef struct { | |
char String[4 * 4]; | |
} IP_ADDRESS_STRING, *PIP_ADDRESS_STRING, IP_MASK_STRING, *PIP_MASK_STRING; | |
typedef struct _IP_ADDR_STRING { | |
struct _IP_ADDR_STRING* Next; | |
IP_ADDRESS_STRING IpAddress; | |
IP_MASK_STRING IpMask; | |
DWORD Context; | |
} IP_ADDR_STRING, *PIP_ADDR_STRING; | |
typedef struct _IP_ADAPTER_INFO | |
{ | |
struct _IP_ADAPTER_INFO* Next; | |
DWORD ComboIndex; | |
char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4]; | |
char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]; | |
UINT AddressLength; | |
BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH]; | |
DWORD Index; | |
UINT Type; | |
UINT DhcpEnabled; | |
PIP_ADDR_STRING CurrentIpAddress; | |
IP_ADDR_STRING IpAddressList; | |
IP_ADDR_STRING GatewayList; | |
IP_ADDR_STRING DhcpServer; | |
BOOL HaveWins; | |
IP_ADDR_STRING PrimaryWinsServer; | |
IP_ADDR_STRING SecondaryWinsServer; | |
__int64 LeaseObtained; | |
__int64 LeaseExpires; | |
} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO; | |
ULONG WINAPI GetAdaptersInfo(PIP_ADAPTER_INFO AdapterInfo, PULONG SizePointer); | |
// ============================================================================================== | |
// Error handling | |
// ============================================================================================== | |
#define ERROR_SUCCESS 0L | |
#define ERROR_INVALID_FUNCTION 1L | |
#define ERROR_FILE_NOT_FOUND 2L | |
#define ERROR_PATH_NOT_FOUND 3L | |
#define ERROR_TOO_MANY_OPEN_FILES 4L | |
#define ERROR_ACCESS_DENIED 5L | |
#define ERROR_INVALID_HANDLE 6L | |
#define ERROR_NOT_ENOUGH_MEMORY 8L | |
#define ERROR_BAD_FORMAT 11L | |
#define ERROR_INVALID_ACCESS 12L | |
#define ERROR_INVALID_DATA 13L | |
#define ERROR_OUTOFMEMORY 14L | |
#define ERROR_NOT_SAME_DEVICE 17L | |
#define ERROR_NO_MORE_FILES 18L | |
#define ERROR_WRITE_PROTECT 19L | |
#define ERROR_BAD_LENGTH 24L | |
#define ERROR_SEEK 25L | |
#define ERROR_WRITE_FAULT 29L | |
#define ERROR_READ_FAULT 30L | |
#define ERROR_GEN_FAILURE 31L | |
#define ERROR_SHARING_VIOLATION 32L | |
#define ERROR_LOCK_VIOLATION 33L | |
#define ERROR_HANDLE_EOF 38L | |
#define ERROR_HANDLE_DISK_FULL 39L | |
#define ERROR_NOT_SUPPORTED 50L | |
#define ERROR_DEV_NOT_EXIST 55L | |
#define ERROR_FILE_EXISTS 80L | |
#define ERROR_CANNOT_MAKE 82L | |
#define ERROR_INVALID_PARAMETER 87L | |
#define ERROR_INVALID_NAME 123L | |
#define ERROR_PROC_NOT_FOUND 127L | |
#define ERROR_DIR_NOT_EMPTY 145L | |
#define ERROR_NOT_LOCKED 158L | |
#define ERROR_ALREADY_EXISTS 183L | |
#define ERROR_BAD_EXE_FORMAT 193L | |
#define ERROR_FILENAME_EXCED_RANGE 206L | |
#define ERROR_DIRECTORY 267L | |
#define ERROR_ABANDONED_WAIT_0 735L | |
#define ERROR_USER_APC 737L | |
#define ERROR_NOT_CAPABLE 775L | |
#define ERROR_IO_PENDING 997L | |
#define ERROR_CANCELLED 1223L | |
#define ERROR_CLASS_ALREADY_EXISTS 1410L | |
#define ERROR_TIMEOUT 1460L | |
#define ERROR_CANT_RESOLVE_FILENAME 1921L | |
#define ERROR_FILE_OFFLINE 4350L | |
#define ERROR_REMOTE_STORAGE_MEDIA_ERROR 4352L | |
#define ERROR_ENCRYPTION_FAILED 6000L | |
#define ERROR_FILE_READ_ONLY 6009L | |
WINBASEAPI DWORD WINAPI GetLastError(VOID); | |
WINBASEAPI VOID WINAPI SetLastError(DWORD dwErrCode); | |
// ============================================================================================== | |
// Threading | |
// ============================================================================================== | |
#define IGNORE 0 // Ignore signal | |
#define INFINITE 0xFFFFFFFF // Infinite timeout | |
#define SRWLOCK_INIT RTL_SRWLOCK_INIT | |
#define MAXIMUM_SUPPORTED_EXTENSION 512 | |
#define CONTEXT_i386 0x00010000 // this assumes that i386 and | |
#define CONTEXT_i486 0x00010000 // i486 have identical context records | |
#define CONTEXT_CONTROL (CONTEXT_i386 | 0x00000001L) // SS:SP, CS:IP, FLAGS, BP | |
#define CONTEXT_INTEGER (CONTEXT_i386 | 0x00000002L) // AX, BX, CX, DX, SI, DI | |
#define CONTEXT_SEGMENTS (CONTEXT_i386 | 0x00000004L) // DS, ES, FS, GS | |
#define CONTEXT_FLOATING_POINT (CONTEXT_i386 | 0x00000008L) // 387 state | |
#define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | 0x00000010L) // DB 0-3,6,7 | |
#define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386 | 0x00000020L) // cpu specific extensions | |
#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS) | |
#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \ | |
CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | \ | |
CONTEXT_EXTENDED_REGISTERS) | |
#define CONTEXT_XSTATE (CONTEXT_i386 | 0x00000040L) | |
// Allow kernel mode requests | |
#define CONTEXT_EXCEPTION_ACTIVE 0x08000000L | |
#define CONTEXT_SERVICE_ACTIVE 0x10000000L | |
#define CONTEXT_EXCEPTION_REQUEST 0x40000000L | |
#define CONTEXT_EXCEPTION_REPORTING 0x80000000L | |
#define TLS_OUT_OF_INDEXES ((DWORD)0xFFFFFFFF) | |
#define THREAD_TERMINATE (0x0001) | |
#define THREAD_SUSPEND_RESUME (0x0002) | |
#define THREAD_GET_CONTEXT (0x0008) | |
#define THREAD_SET_CONTEXT (0x0010) | |
#define THREAD_QUERY_INFORMATION (0x0040) | |
#define THREAD_SET_INFORMATION (0x0020) | |
#define THREAD_SET_THREAD_TOKEN (0x0080) | |
#define THREAD_IMPERSONATE (0x0100) | |
#define THREAD_DIRECT_IMPERSONATION (0x0200) | |
// begin_wdm | |
#define THREAD_SET_LIMITED_INFORMATION (0x0400) // winnt | |
#define THREAD_QUERY_LIMITED_INFORMATION (0x0800) // winnt | |
#define THREAD_RESUME (0x1000) // winnt | |
#define CREATE_SUSPENDED 0x00000004 | |
VOID _mm_pause (VOID); | |
#pragma intrinsic(_mm_pause) | |
#define YieldProcessor _mm_pause | |
inline VOID MemoryBarrier(VOID) | |
{ | |
LONG Barrier; | |
__asm { | |
xchg Barrier, eax | |
} | |
} | |
#define CreateEvent CreateEventA | |
typedef struct tagTHREADENTRY32 | |
{ | |
DWORD dwSize; | |
DWORD cntUsage; | |
DWORD th32ThreadID; // this thread | |
DWORD th32OwnerProcessID; // Process this thread is associated with | |
LONG tpBasePri; | |
LONG tpDeltaPri; | |
DWORD dwFlags; | |
} THREADENTRY32; | |
typedef THREADENTRY32 * PTHREADENTRY32; | |
typedef THREADENTRY32 * LPTHREADENTRY32; | |
typedef struct _FLOATING_SAVE_AREA | |
{ | |
ULONG ControlWord; | |
ULONG StatusWord; | |
ULONG TagWord; | |
ULONG ErrorOffset; | |
ULONG ErrorSelector; | |
ULONG DataOffset; | |
ULONG DataSelector; | |
UCHAR RegisterArea[80]; | |
ULONG Cr0NpxState; | |
} FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA; | |
// | |
// Context Frame | |
// | |
// This frame has a several purposes: 1) it is used as an argument to | |
// NtContinue, 2) is is used to constuct a call frame for APC delivery, | |
// and 3) it is used in the user level thread creation routines. | |
// | |
// The layout of the record conforms to a standard call frame. | |
// | |
typedef struct _CONTEXT { | |
// | |
// The flags values within this flag control the contents of | |
// a CONTEXT record. | |
// | |
// If the context record is used as an input parameter, then | |
// for each portion of the context record controlled by a flag | |
// whose value is set, it is assumed that that portion of the | |
// context record contains valid context. If the context record | |
// is being used to modify a threads context, then only that | |
// portion of the threads context will be modified. | |
// | |
// If the context record is used as an IN OUT parameter to capture | |
// the context of a thread, then only those portions of the thread's | |
// context corresponding to set flags will be returned. | |
// | |
// The context record is never used as an OUT only parameter. | |
// | |
DWORD ContextFlags; | |
// | |
// This section is specified/returned if CONTEXT_DEBUG_REGISTERS is | |
// set in ContextFlags. Note that CONTEXT_DEBUG_REGISTERS is NOT | |
// included in CONTEXT_FULL. | |
// | |
DWORD Dr0; | |
DWORD Dr1; | |
DWORD Dr2; | |
DWORD Dr3; | |
DWORD Dr6; | |
DWORD Dr7; | |
// | |
// This section is specified/returned if the | |
// ContextFlags word contians the flag CONTEXT_FLOATING_POINT. | |
// | |
FLOATING_SAVE_AREA FloatSave; | |
// | |
// This section is specified/returned if the | |
// ContextFlags word contians the flag CONTEXT_SEGMENTS. | |
// | |
DWORD SegGs; | |
DWORD SegFs; | |
DWORD SegEs; | |
DWORD SegDs; | |
// | |
// This section is specified/returned if the | |
// ContextFlags word contians the flag CONTEXT_INTEGER. | |
// | |
DWORD Edi; | |
DWORD Esi; | |
DWORD Ebx; | |
DWORD Edx; | |
DWORD Ecx; | |
DWORD Eax; | |
// | |
// This section is specified/returned if the | |
// ContextFlags word contians the flag CONTEXT_CONTROL. | |
// | |
DWORD Ebp; | |
DWORD Eip; | |
DWORD SegCs; // MUST BE SANITIZED | |
DWORD EFlags; // MUST BE SANITIZED | |
DWORD Esp; | |
DWORD SegSs; | |
// | |
// This section is specified/returned if the ContextFlags word | |
// contains the flag CONTEXT_EXTENDED_REGISTERS. | |
// The format and contexts are processor specific | |
// | |
BYTE ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION]; | |
} CONTEXT, *LPCONTEXT; | |
typedef struct _LIST_ENTRY { | |
struct _LIST_ENTRY *Flink; | |
struct _LIST_ENTRY *Blink; | |
} LIST_ENTRY, *PLIST_ENTRY, *RESTRICTED_POINTER PRLIST_ENTRY; | |
typedef struct _RTL_CRITICAL_SECTION_DEBUG { | |
WORD Type; | |
WORD CreatorBackTraceIndex; | |
struct _RTL_CRITICAL_SECTION *CriticalSection; | |
LIST_ENTRY ProcessLocksList; | |
DWORD EntryCount; | |
DWORD ContentionCount; | |
DWORD Spare[2]; | |
} RTL_CRITICAL_SECTION_DEBUG, *PRTL_CRITICAL_SECTION_DEBUG, RTL_RESOURCE_DEBUG, *PRTL_RESOURCE_DEBUG; | |
typedef struct _RTL_CRITICAL_SECTION { | |
PRTL_CRITICAL_SECTION_DEBUG DebugInfo; | |
// | |
// The following three fields control entering and exiting the critical | |
// section for the resource | |
// | |
LONG LockCount; | |
LONG RecursionCount; | |
HANDLE OwningThread; // from the thread's ClientId->UniqueThread | |
HANDLE LockSemaphore; | |
ULONG_PTR SpinCount; // force size on 64-bit systems when packed | |
} RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION; | |
typedef RTL_CRITICAL_SECTION CRITICAL_SECTION; | |
typedef PRTL_CRITICAL_SECTION PCRITICAL_SECTION; | |
typedef RTL_CRITICAL_SECTION* LPCRITICAL_SECTION; | |
typedef struct _RTL_SRWLOCK | |
{ | |
void* Ptr; | |
} RTL_SRWLOCK, *PRTL_SRWLOCK; | |
typedef RTL_SRWLOCK SRWLOCK, *PSRWLOCK; | |
typedef struct _RTL_CONDITION_VARIABLE { | |
PVOID Ptr; | |
} RTL_CONDITION_VARIABLE, *PRTL_CONDITION_VARIABLE; | |
typedef RTL_CONDITION_VARIABLE CONDITION_VARIABLE, *PCONDITION_VARIABLE; | |
typedef DWORD(WINAPI *PTHREAD_START_ROUTINE)(LPVOID lpThreadParameter); | |
typedef PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE; | |
typedef VOID (WINAPI *PFIBER_START_ROUTINE)(LPVOID lpFiberParameter); | |
typedef PFIBER_START_ROUTINE LPFIBER_START_ROUTINE; | |
typedef VOID (NTAPI *PIMAGE_TLS_CALLBACK) (PVOID DllHandle, DWORD Reason, PVOID Reserved); | |
WINBASEAPI VOID WINAPI InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection); | |
WINBASEAPI VOID WINAPI DeleteCriticalSection(LPCRITICAL_SECTION lpCriticalSection); | |
WINBASEAPI VOID WINAPI EnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection); | |
WINBASEAPI BOOL WINAPI TryEnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection); | |
WINBASEAPI VOID WINAPI LeaveCriticalSection(LPCRITICAL_SECTION lpCriticalSection); | |
WINBASEAPI VOID WINAPI InitializeConditionVariable(PCONDITION_VARIABLE ConditionVariable); | |
WINBASEAPI VOID WINAPI WakeConditionVariable(PCONDITION_VARIABLE ConditionVariable); | |
WINBASEAPI VOID WINAPI WakeAllConditionVariable(PCONDITION_VARIABLE ConditionVariable); | |
WINBASEAPI BOOL WINAPI SleepConditionVariableCS(PCONDITION_VARIABLE ConditionVariable, PCRITICAL_SECTION CriticalSection, DWORD dwMilliseconds); | |
WINBASEAPI BOOL WINAPI SleepConditionVariableSRW(PCONDITION_VARIABLE ConditionVariable, PSRWLOCK SRWLock, DWORD dwMilliseconds, ULONG Flags); | |
WINBASEAPI HANDLE WINAPI CreateEventA(LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset, BOOL bInitialState, LPCSTR lpName); | |
WINBASEAPI HANDLE WINAPI CreateEventW(LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset, BOOL bInitialState, LPCWSTR lpName); | |
WINBASEAPI BOOL WINAPI SetEvent(HANDLE hEvent); | |
WINBASEAPI DWORD WINAPI WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds); | |
WINBASEAPI DWORD WINAPI WaitForMultipleObjects(DWORD nCount, CONST HANDLE *lpHandles, BOOL bWaitAll, DWORD dwMilliseconds); | |
WINBASEAPI VOID WINAPI InitializeSRWLock(PSRWLOCK SRWLock); | |
WINBASEAPI VOID WINAPI ReleaseSRWLockExclusive(PSRWLOCK SRWLock); | |
WINBASEAPI VOID WINAPI ReleaseSRWLockShared(PSRWLOCK SRWLock); | |
WINBASEAPI VOID WINAPI AcquireSRWLockExclusive(PSRWLOCK SRWLock); | |
WINBASEAPI VOID WINAPI AcquireSRWLockShared(PSRWLOCK SRWLock); | |
WINBASEAPI BOOLEAN WINAPI TryAcquireSRWLockExclusive(PSRWLOCK SRWLock); | |
WINBASEAPI BOOLEAN WINAPI TryAcquireSRWLockShared(PSRWLOCK SRWLock); | |
WINBASEAPI HANDLE WINAPI CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId); | |
WINBASEAPI HANDLE WINAPI CreateRemoteThread(HANDLE hProcess, LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId); | |
WINBASEAPI HANDLE WINAPI OpenThread(DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwThreadId); | |
WINBASEAPI HANDLE WINAPI GetCurrentThread(VOID); | |
WINBASEAPI DWORD WINAPI GetCurrentThreadId(VOID); | |
WINBASEAPI DWORD WINAPI GetCurrentProcessorNumber(VOID); | |
WINBASEAPI BOOL WINAPI GetThreadContext(HANDLE hThread, LPCONTEXT lpContext); | |
WINBASEAPI BOOL WINAPI SetThreadContext(HANDLE hThread, CONST CONTEXT *lpContext); | |
WINBASEAPI DWORD WINAPI SuspendThread(HANDLE hThread); | |
WINBASEAPI DWORD WINAPI ResumeThread(HANDLE hThread); | |
WINBASEAPI DWORD WINAPI TlsAlloc(void); | |
WINBASEAPI BOOL WINAPI TlsFree(DWORD dwTlsIndex); | |
WINBASEAPI BOOL WINAPI TlsSetValue(DWORD dwTlsIndex, LPVOID lpTlsValue); | |
WINBASEAPI LPVOID WINAPI TlsGetValue(DWORD dwTlsIndex); | |
WINBASEAPI VOID WINAPI SwitchToFiber(LPVOID lpFiber); | |
WINBASEAPI LPVOID WINAPI CreateFiber(SIZE_T dwStackSize, LPFIBER_START_ROUTINE lpStartAddress, LPVOID lpParameter); | |
WINBASEAPI LPVOID WINAPI ConvertThreadToFiber(LPVOID lpParameter); | |
WINBASEAPI BOOL WINAPI ConvertFiberToThread(); | |
WINBASEAPI VOID WINAPI DeleteFiber(LPVOID lpFiber); | |
WINBASEAPI BOOL WINAPI SwitchToThread(VOID); | |
// ============================================================================================== | |
// Exceptions | |
// ============================================================================================== | |
#define EXCEPTION_NONCONTINUABLE 0x1 // Noncontinuable exception | |
#define EXCEPTION_MAXIMUM_PARAMETERS 15 // maximum number of exception parameters | |
// Keywords and intrinsics for SEH | |
#define GetExceptionCode _exception_code | |
#define exception_code _exception_code | |
#define GetExceptionInformation (struct _EXCEPTION_POINTERS *)_exception_info | |
#define exception_info (struct _EXCEPTION_POINTERS *)_exception_info | |
#define AbnormalTermination _abnormal_termination | |
#define abnormal_termination _abnormal_termination | |
unsigned long __cdecl _exception_code(void); | |
void * __cdecl _exception_info(void); | |
int __cdecl _abnormal_termination(void); | |
#pragma intrinsic(_abnormal_termination) | |
// Exception disposition return values. | |
typedef enum _EXCEPTION_DISPOSITION | |
{ | |
ExceptionContinueExecution, | |
ExceptionContinueSearch, | |
ExceptionNestedException, | |
ExceptionCollidedUnwind | |
} EXCEPTION_DISPOSITION; | |
typedef struct _EXCEPTION_RECORD | |
{ | |
DWORD ExceptionCode; | |
DWORD ExceptionFlags; | |
struct _EXCEPTION_RECORD *ExceptionRecord; | |
PVOID ExceptionAddress; | |
DWORD NumberParameters; | |
ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]; | |
} EXCEPTION_RECORD; | |
WINBASEAPI VOID WINAPI RaiseException(DWORD dwExceptionCode, DWORD dwExceptionFlags, DWORD nNumberOfArguments, CONST ULONG_PTR *lpArguments); | |
// ============================================================================================== | |
// winnt.h | |
// ============================================================================================== | |
#define SEC_RESERVE 0x04000000 | |
#define SECURITY_DESCRIPTOR_REVISION (1) | |
#define SECURITY_DESCRIPTOR_REVISION1 (1) | |
#define ANYSIZE_ARRAY 1 | |
typedef LONGLONG USN; | |
typedef DWORD ACCESS_MASK; | |
typedef ACCESS_MASK *PACCESS_MASK; | |
typedef WORD SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL; | |
typedef PVOID PSID; | |
typedef PVOID PSECURITY_DESCRIPTOR; | |
typedef struct _SID_IDENTIFIER_AUTHORITY { | |
BYTE Value[6]; | |
} SID_IDENTIFIER_AUTHORITY, *PSID_IDENTIFIER_AUTHORITY; | |
typedef struct _SID { | |
BYTE Revision; | |
BYTE SubAuthorityCount; | |
SID_IDENTIFIER_AUTHORITY IdentifierAuthority; | |
DWORD SubAuthority[ANYSIZE_ARRAY]; | |
} SID, *PISID; | |
typedef struct _FILE_ID_128 { | |
BYTE Identifier[16]; | |
} FILE_ID_128, *PFILE_ID_128; | |
typedef struct _ACL { | |
BYTE AclRevision; | |
BYTE Sbz1; | |
WORD AclSize; | |
WORD AceCount; | |
WORD Sbz2; | |
} ACL; | |
typedef ACL *PACL; | |
typedef struct _SECURITY_DESCRIPTOR | |
{ | |
UCHAR Revision; | |
UCHAR Sbz1; | |
SECURITY_DESCRIPTOR_CONTROL Control; | |
PSID Owner; | |
PSID Group; | |
PACL Sacl; | |
PACL Dacl; | |
} SECURITY_DESCRIPTOR; | |
WINADVAPI BOOL WINAPI InitializeSecurityDescriptor(PSECURITY_DESCRIPTOR pSecurityDescriptor, DWORD dwRevision); | |
WINADVAPI BOOL WINAPI SetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR pSecurityDescriptor, BOOL bDaclPresent, PACL pDacl, BOOL bDaclDefaulted); | |
// ============================================================================================== | |
// Internal Windows headers | |
// Don't call these directly | |
// Unfortunately libmdbx does... | |
// ============================================================================================== | |
#define NT_SUCCESS(Status) (((NTSTATUS)(Status)) >= 0) | |
typedef enum _SYSTEM_INFORMATION_CLASS { | |
SystemBasicInformation = 0, | |
SystemPerformanceInformation = 2, | |
SystemTimeOfDayInformation = 3, | |
SystemProcessInformation = 5, | |
SystemProcessorPerformanceInformation = 8, | |
SystemInterruptInformation = 23, | |
SystemExceptionInformation = 33, | |
SystemRegistryQuotaInformation = 37, | |
SystemLookasideInformation = 45, | |
SystemPolicyInformation = 134, | |
} SYSTEM_INFORMATION_CLASS; | |
typedef struct _UNICODE_STRING { | |
USHORT Length; | |
USHORT MaximumLength; | |
PWSTR Buffer; | |
} UNICODE_STRING; | |
typedef UNICODE_STRING *PUNICODE_STRING; | |
typedef const UNICODE_STRING *PCUNICODE_STRING; | |
typedef struct _OBJECT_ATTRIBUTES { | |
ULONG Length; | |
HANDLE RootDirectory; | |
PUNICODE_STRING ObjectName; | |
ULONG Attributes; | |
PVOID SecurityDescriptor; | |
PVOID SecurityQualityOfService; | |
} OBJECT_ATTRIBUTES; | |
typedef OBJECT_ATTRIBUTES *POBJECT_ATTRIBUTES; | |
typedef struct _SYSTEM_TIMEOFDAY_INFORMATION { | |
BYTE Reserved1[48]; | |
} SYSTEM_TIMEOFDAY_INFORMATION, *PSYSTEM_TIMEOFDAY_INFORMATION; | |
NTSTATUS NTAPI NtQuerySystemInformation (IN SYSTEM_INFORMATION_CLASS SystemInformationClass, OUT PVOID SystemInformation, IN ULONG SystemInformationLength, OUT PULONG ReturnLength OPTIONAL); | |
// ============================================================================================== | |
// Registry | |
// ============================================================================================== | |
typedef void *HKEY; | |
typedef LONG LSTATUS; | |
#define HKEY_CLASSES_ROOT (( HKEY ) (ULONG_PTR)((LONG)0x80000000) ) | |
#define HKEY_CURRENT_USER (( HKEY ) (ULONG_PTR)((LONG)0x80000001) ) | |
#define HKEY_LOCAL_MACHINE (( HKEY ) (ULONG_PTR)((LONG)0x80000002) ) | |
#define HKEY_USERS (( HKEY ) (ULONG_PTR)((LONG)0x80000003) ) | |
#define HKEY_PERFORMANCE_DATA (( HKEY ) (ULONG_PTR)((LONG)0x80000004) ) | |
#define HKEY_PERFORMANCE_TEXT (( HKEY ) (ULONG_PTR)((LONG)0x80000050) ) | |
#define HKEY_PERFORMANCE_NLSTEXT (( HKEY ) (ULONG_PTR)((LONG)0x80000060) ) | |
#define RRF_RT_REG_NONE 0x00000001 // restrict type to REG_NONE (other data types will not return ERROR_SUCCESS) | |
#define RRF_RT_REG_SZ 0x00000002 // restrict type to REG_SZ (other data types will not return ERROR_SUCCESS) (automatically converts REG_EXPAND_SZ to REG_SZ unless RRF_NOEXPAND is specified) | |
#define RRF_RT_REG_EXPAND_SZ 0x00000004 // restrict type to REG_EXPAND_SZ (other data types will not return ERROR_SUCCESS) (must specify RRF_NOEXPAND or RegGetValue will fail with ERROR_INVALID_PARAMETER) | |
#define RRF_RT_REG_BINARY 0x00000008 // restrict type to REG_BINARY (other data types will not return ERROR_SUCCESS) | |
#define RRF_RT_REG_DWORD 0x00000010 // restrict type to REG_DWORD (other data types will not return ERROR_SUCCESS) | |
#define RRF_RT_REG_MULTI_SZ 0x00000020 // restrict type to REG_MULTI_SZ (other data types will not return ERROR_SUCCESS) | |
#define RRF_RT_REG_QWORD 0x00000040 // restrict type to REG_QWORD (other data types will not return ERROR_SUCCESS) | |
#define RRF_RT_DWORD (RRF_RT_REG_BINARY | RRF_RT_REG_DWORD) // restrict type to *32-bit* RRF_RT_REG_BINARY or RRF_RT_REG_DWORD (other data types will not return ERROR_SUCCESS) | |
#define RRF_RT_QWORD (RRF_RT_REG_BINARY | RRF_RT_REG_QWORD) // restrict type to *64-bit* RRF_RT_REG_BINARY or RRF_RT_REG_DWORD (other data types will not return ERROR_SUCCESS) | |
#define RRF_RT_ANY 0x0000ffff // no type restriction | |
WINADVAPI LSTATUS APIENTRY RegGetValueA(HKEY hkey, LPCSTR lpSubKey, LPCSTR lpValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData); | |
// ============================================================================================== | |
// Unsorted | |
// ============================================================================================== | |
#define CP_UTF7 65000 // UTF-7 translation | |
#define CP_UTF8 65001 // UTF-8 translation | |
typedef struct _SYSTEM_INFO { | |
union { | |
DWORD dwOemId; // Obsolete field...do not use | |
struct { | |
WORD wProcessorArchitecture; | |
WORD wReserved; | |
} DUMMYSTRUCTNAME; | |
} DUMMYUNIONNAME; | |
DWORD dwPageSize; | |
LPVOID lpMinimumApplicationAddress; | |
LPVOID lpMaximumApplicationAddress; | |
DWORD_PTR dwActiveProcessorMask; | |
DWORD dwNumberOfProcessors; | |
DWORD dwProcessorType; | |
DWORD dwAllocationGranularity; | |
WORD wProcessorLevel; | |
WORD wProcessorRevision; | |
} SYSTEM_INFO, *LPSYSTEM_INFO; | |
#define FORMAT_MESSAGE_ALLOCATE_BUFFER 0x00000100 | |
#define FORMAT_MESSAGE_IGNORE_INSERTS 0x00000200 | |
#define FORMAT_MESSAGE_FROM_STRING 0x00000400 | |
#define FORMAT_MESSAGE_FROM_HMODULE 0x00000800 | |
#define FORMAT_MESSAGE_FROM_SYSTEM 0x00001000 | |
#define FORMAT_MESSAGE_ARGUMENT_ARRAY 0x00002000 | |
#define FORMAT_MESSAGE_MAX_WIDTH_MASK 0x000000FF | |
#define MAKELANGID(p, s) ((((WORD )(s)) << 10) | (WORD )(p)) | |
#define PRIMARYLANGID(lgid) ((WORD )(lgid) & 0x3ff) | |
#define SUBLANGID(lgid) ((WORD )(lgid) >> 10) | |
#define LANG_NEUTRAL 0x00 | |
#define SUBLANG_NEUTRAL 0x00 // language neutral | |
#define SUBLANG_DEFAULT 0x01 // user default | |
#define CP_ACP 0 // default to ANSI code page | |
#define CP_OEMCP 1 // default to OEM code page | |
#define CP_MACCP 2 // default to MAC code page | |
#define CP_THREAD_ACP 3 // current thread's ANSI code page | |
#define CP_SYMBOL 42 // SYMBOL translations | |
#define CP_UTF7 65000 // UTF-7 translation | |
#define CP_UTF8 65001 // UTF-8 translation | |
typedef char * va_list; | |
WINBASEAPI DWORD WINAPI FormatMessageA(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPSTR lpBuffer, DWORD nSize, va_list *Arguments); | |
WINUSERAPI BOOL WINAPI CharToOemBuffA(LPCSTR lpszSrc, LPSTR lpszDst, DWORD cchDstLength); | |
WINBASEAPI VOID WINAPI GetSystemInfo(LPSYSTEM_INFO lpSystemInfo); | |
WINBASEAPI BOOL WINAPI IsDebuggerPresent(VOID); | |
WINBASEAPI DWORD WINAPI GetEnvironmentVariableA(LPCSTR lpName, LPSTR lpBuffer, DWORD nSize); | |
WINBASEAPI BOOL WINAPI SetEnvironmentVariableA(LPCSTR lpName, LPCSTR lpValue); | |
WINBASEAPI VOID WINAPI OutputDebugStringA(LPCSTR lpOutputString); | |
WINBASEAPI VOID WINAPI DebugBreak(VOID); | |
WINBASEAPI BOOL WINAPI DebugActiveProcess(DWORD dwProcessId); | |
WINBASEAPI VOID WINAPI OutputDebugStringA(LPCSTR lpOutputString); | |
WINBASEAPI DWORD WINAPI GetVersion(VOID); | |
WINBASEAPI int WINAPI MultiByteToWideChar(UINT CodePage, DWORD dwFlags, LPCCH lpMultiByteStr, int cbMultiByte, LPWSTR lpWideCharStr, int cchWideChar); | |
WINBASEAPI int WINAPI WideCharToMultiByte(UINT CodePage, DWORD dwFlags, LPCWCH lpWideCharStr, int cchWideChar, | |
LPSTR lpMultiByteStr, int cbMultiByte, LPCCH lpDefaultChar, | |
LPBOOL lpUsedDefaultChar); | |
#define TH32CS_SNAPHEAPLIST 0x00000001 | |
#define TH32CS_SNAPPROCESS 0x00000002 | |
#define TH32CS_SNAPTHREAD 0x00000004 | |
#define TH32CS_SNAPMODULE 0x00000008 | |
#define TH32CS_SNAPMODULE32 0x00000010 | |
#define TH32CS_SNAPALL (TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE) | |
#define TH32CS_INHERIT 0x80000000 | |
#define MAX_MODULE_NAME32 255 | |
typedef struct tagMODULEENTRY32 | |
{ | |
DWORD dwSize; | |
DWORD th32ModuleID; // This module | |
DWORD th32ProcessID; // owning process | |
DWORD GlblcntUsage; // Global usage count on the module | |
DWORD ProccntUsage; // Module usage count in th32ProcessID's context | |
BYTE* modBaseAddr; // Base address of module in th32ProcessID's context | |
DWORD modBaseSize; // Size in bytes of module starting at modBaseAddr | |
HMODULE hModule; // The hModule of this module in th32ProcessID's context | |
char szModule[MAX_MODULE_NAME32 + 1]; | |
char szExePath[MAX_PATH]; | |
} MODULEENTRY32; | |
typedef MODULEENTRY32* PMODULEENTRY32; | |
typedef MODULEENTRY32* LPMODULEENTRY32; | |
WINBASEAPI HANDLE WINAPI CreateToolhelp32Snapshot(DWORD dwFlags, DWORD th32ProcessID); | |
WINBASEAPI BOOL WINAPI Thread32First(HANDLE hSnapshot, LPTHREADENTRY32 lpte); | |
WINBASEAPI BOOL WINAPI Thread32Next(HANDLE hSnapshot, LPTHREADENTRY32 lpte); | |
WINBASEAPI BOOL WINAPI Module32First(HANDLE hSnapshot, LPMODULEENTRY32 lpme); | |
WINBASEAPI BOOL WINAPI Module32Next(HANDLE hSnapshot, LPMODULEENTRY32 lpme); | |
typedef DWORD COLORREF; | |
#define LF_FACESIZE 32 | |
typedef struct tagLOGFONTW | |
{ | |
LONG lfHeight; | |
LONG lfWidth; | |
LONG lfEscapement; | |
LONG lfOrientation; | |
LONG lfWeight; | |
BYTE lfItalic; | |
BYTE lfUnderline; | |
BYTE lfStrikeOut; | |
BYTE lfCharSet; | |
BYTE lfOutPrecision; | |
BYTE lfClipPrecision; | |
BYTE lfQuality; | |
BYTE lfPitchAndFamily; | |
WCHAR lfFaceName[LF_FACESIZE]; | |
} LOGFONTW, *PLOGFONTW; | |
#ifdef __cplusplus | |
} | |
#endif | |
#endif // _WINDOWS_ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment