1 /* 2 * Copyright 2010 Vicente J. Botet Escriba 3 * Copyright 2015-2018 Andrey Semashev 4 * 5 * Distributed under the Boost Software License, Version 1.0. 6 * See http://www.boost.org/LICENSE_1_0.txt 7 */ 8 9 #ifndef BOOST_WINAPI_BASIC_TYPES_HPP_INCLUDED_ 10 #define BOOST_WINAPI_BASIC_TYPES_HPP_INCLUDED_ 11 12 #include <boost/winapi/config.hpp> 13 14 #ifdef BOOST_HAS_PRAGMA_ONCE 15 #pragma once 16 #endif 17 18 #if defined(BOOST_USE_WINDOWS_H) 19 # include <windows.h> 20 #elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) 21 # include <winerror.h> 22 # ifdef UNDER_CE 23 # ifndef WINAPI 24 # ifndef _WIN32_WCE_EMULATION 25 # define WINAPI __cdecl // Note this doesn't match the desktop definition 26 # else 27 # define WINAPI __stdcall 28 # endif 29 # endif 30 // Windows CE defines a few functions as inline functions in kfuncs.h 31 typedef int BOOL; 32 typedef unsigned long DWORD; 33 typedef void* HANDLE; 34 # include <kfuncs.h> 35 # endif // UNDER_CE 36 #else 37 # error "Win32 functions not available" 38 #endif 39 40 #if defined(_M_IX86) || defined(__i386__) 41 #define BOOST_WINAPI_DETAIL_STDCALL __stdcall 42 #else 43 // On architectures other than 32-bit x86 __stdcall is ignored. Clang also issues a warning. 44 #define BOOST_WINAPI_DETAIL_STDCALL 45 #endif 46 47 #if defined(WINAPI) 48 #define BOOST_WINAPI_WINAPI_CC WINAPI 49 #else 50 #define BOOST_WINAPI_WINAPI_CC BOOST_WINAPI_DETAIL_STDCALL 51 #endif 52 53 #if defined(CALLBACK) 54 #define BOOST_WINAPI_CALLBACK_CC CALLBACK 55 #else 56 #define BOOST_WINAPI_CALLBACK_CC BOOST_WINAPI_DETAIL_STDCALL 57 #endif 58 59 #if defined(NTAPI) 60 #define BOOST_WINAPI_NTAPI_CC NTAPI 61 #else 62 #define BOOST_WINAPI_NTAPI_CC BOOST_WINAPI_DETAIL_STDCALL 63 #endif 64 65 #ifndef NO_STRICT 66 #ifndef STRICT 67 #define STRICT 1 68 #endif 69 #endif 70 71 #if defined(STRICT) 72 #define BOOST_WINAPI_DETAIL_DECLARE_HANDLE(x) struct x##__; typedef struct x##__ *x 73 #else 74 #define BOOST_WINAPI_DETAIL_DECLARE_HANDLE(x) typedef void* x 75 #endif 76 77 #if !defined(BOOST_USE_WINDOWS_H) 78 extern "C" { 79 union _LARGE_INTEGER; 80 struct _SECURITY_ATTRIBUTES; 81 BOOST_WINAPI_DETAIL_DECLARE_HANDLE(HINSTANCE); 82 typedef HINSTANCE HMODULE; 83 } 84 #endif 85 86 #if defined(__GNUC__) 87 #define BOOST_WINAPI_DETAIL_EXTENSION __extension__ 88 #else 89 #define BOOST_WINAPI_DETAIL_EXTENSION 90 #endif 91 92 // MinGW64 gcc 4.8.2 fails to compile function declarations with boost::winapi::VOID_ arguments even though 93 // the typedef expands to void. In Windows SDK, VOID is a macro which unfolds to void. We use our own macro in such cases. 94 #define BOOST_WINAPI_DETAIL_VOID void 95 96 namespace boost { 97 namespace winapi { 98 #if defined(BOOST_USE_WINDOWS_H) 99 100 typedef ::BOOL BOOL_; 101 typedef ::PBOOL PBOOL_; 102 typedef ::LPBOOL LPBOOL_; 103 typedef ::BOOLEAN BOOLEAN_; 104 typedef ::PBOOLEAN PBOOLEAN_; 105 typedef ::BYTE BYTE_; 106 typedef ::PBYTE PBYTE_; 107 typedef ::LPBYTE LPBYTE_; 108 typedef ::UCHAR UCHAR_; 109 typedef ::PUCHAR PUCHAR_; 110 typedef ::WORD WORD_; 111 typedef ::PWORD PWORD_; 112 typedef ::LPWORD LPWORD_; 113 typedef ::DWORD DWORD_; 114 typedef ::PDWORD PDWORD_; 115 typedef ::LPDWORD LPDWORD_; 116 typedef ::HANDLE HANDLE_; 117 typedef ::PHANDLE PHANDLE_; 118 typedef ::SHORT SHORT_; 119 typedef ::PSHORT PSHORT_; 120 typedef ::USHORT USHORT_; 121 typedef ::PUSHORT PUSHORT_; 122 typedef ::INT INT_; 123 typedef ::PINT PINT_; 124 typedef ::LPINT LPINT_; 125 typedef ::UINT UINT_; 126 typedef ::PUINT PUINT_; 127 typedef ::LONG LONG_; 128 typedef ::PLONG PLONG_; 129 typedef ::LPLONG LPLONG_; 130 typedef ::ULONG ULONG_; 131 typedef ::PULONG PULONG_; 132 typedef ::LONGLONG ULONG64_; 133 typedef ::ULONGLONG PULONG64_; 134 typedef ::LONGLONG LONGLONG_; 135 typedef ::ULONGLONG ULONGLONG_; 136 typedef ::INT_PTR INT_PTR_; 137 typedef ::UINT_PTR UINT_PTR_; 138 typedef ::LONG_PTR LONG_PTR_; 139 typedef ::ULONG_PTR ULONG_PTR_; 140 typedef ::DWORD_PTR DWORD_PTR_; 141 typedef ::PDWORD_PTR PDWORD_PTR_; 142 typedef ::SIZE_T SIZE_T_; 143 typedef ::PSIZE_T PSIZE_T_; 144 typedef ::SSIZE_T SSIZE_T_; 145 typedef ::PSSIZE_T PSSIZE_T_; 146 typedef VOID VOID_; // VOID is a macro 147 typedef ::PVOID PVOID_; 148 typedef ::LPVOID LPVOID_; 149 typedef ::LPCVOID LPCVOID_; 150 typedef ::CHAR CHAR_; 151 typedef ::LPSTR LPSTR_; 152 typedef ::LPCSTR LPCSTR_; 153 typedef ::WCHAR WCHAR_; 154 typedef ::LPWSTR LPWSTR_; 155 typedef ::LPCWSTR LPCWSTR_; 156 157 #else // defined( BOOST_USE_WINDOWS_H ) 158 159 #if defined(__GNUC__) && !(defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC)) \ 160 && (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 161 #pragma GCC diagnostic push 162 // ISO C++ 1998 does not support 'long long' 163 #pragma GCC diagnostic ignored "-Wlong-long" 164 #endif 165 166 typedef int BOOL_; 167 typedef BOOL_* PBOOL_; 168 typedef BOOL_* LPBOOL_; 169 typedef unsigned char BYTE_; 170 typedef BYTE_* PBYTE_; 171 typedef BYTE_* LPBYTE_; 172 typedef unsigned char UCHAR_; 173 typedef UCHAR_* PUCHAR_; 174 typedef BYTE_ BOOLEAN_; 175 typedef BOOLEAN_* PBOOLEAN_; 176 typedef unsigned short WORD_; 177 typedef WORD_* PWORD_; 178 typedef WORD_* LPWORD_; 179 #if !defined(__LP64__) 180 typedef unsigned long DWORD_; 181 #else 182 typedef unsigned int DWORD_; 183 #endif 184 typedef DWORD_* PDWORD_; 185 typedef DWORD_* LPDWORD_; 186 typedef void* HANDLE_; 187 typedef void** PHANDLE_; 188 189 typedef short SHORT_; 190 typedef SHORT_* PSHORT_; 191 typedef unsigned short USHORT_; 192 typedef USHORT_* PUSHORT_; 193 typedef int INT_; 194 typedef INT_* PINT_; 195 typedef INT_* LPINT_; 196 typedef unsigned int UINT_; 197 typedef UINT_* PUINT_; 198 #if !defined(__LP64__) 199 typedef long LONG_; 200 typedef unsigned long ULONG_; 201 #else 202 typedef int LONG_; 203 typedef unsigned int ULONG_; 204 #endif 205 typedef LONG_* PLONG_; 206 typedef LONG_* LPLONG_; 207 typedef ULONG_* PULONG_; 208 #if defined(BOOST_HAS_MS_INT64) 209 BOOST_WINAPI_DETAIL_EXTENSION typedef __int64 LONGLONG_; 210 BOOST_WINAPI_DETAIL_EXTENSION typedef unsigned __int64 ULONGLONG_; 211 #else 212 BOOST_WINAPI_DETAIL_EXTENSION typedef long long LONGLONG_; 213 BOOST_WINAPI_DETAIL_EXTENSION typedef unsigned long long ULONGLONG_; 214 #endif 215 typedef LONGLONG_ LONG64_, *PLONG64_; 216 typedef ULONGLONG_ ULONG64_, *PULONG64_; 217 218 #if defined(_WIN64) 219 typedef LONGLONG_ INT_PTR_; 220 typedef ULONGLONG_ UINT_PTR_; 221 typedef LONGLONG_ LONG_PTR_; 222 typedef ULONGLONG_ ULONG_PTR_; 223 #else 224 typedef int INT_PTR_; 225 typedef unsigned int UINT_PTR_; 226 typedef long LONG_PTR_; 227 typedef unsigned long ULONG_PTR_; 228 #endif 229 230 typedef ULONG_PTR_ DWORD_PTR_, *PDWORD_PTR_; 231 typedef ULONG_PTR_ SIZE_T_, *PSIZE_T_; 232 typedef LONG_PTR_ SSIZE_T_, *PSSIZE_T_; 233 234 typedef void VOID_; 235 typedef void *PVOID_; 236 typedef void *LPVOID_; 237 typedef const void *LPCVOID_; 238 239 typedef char CHAR_; 240 typedef CHAR_ *LPSTR_; 241 typedef const CHAR_ *LPCSTR_; 242 243 typedef wchar_t WCHAR_; 244 typedef WCHAR_ *LPWSTR_; 245 typedef const WCHAR_ *LPCWSTR_; 246 247 #if defined(__GNUC__) && !(defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC)) \ 248 && (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 249 #pragma GCC diagnostic pop 250 #endif 251 252 #endif // defined( BOOST_USE_WINDOWS_H ) 253 254 // ::NTSTATUS is defined in ntdef.h, which is not included by windows.h by default, so alwaus use LONG_ 255 typedef LONG_ NTSTATUS_; 256 typedef NTSTATUS_ *PNTSTATUS_; 257 258 typedef ::HMODULE HMODULE_; 259 260 #ifdef BOOST_MSVC 261 #pragma warning(push) 262 #pragma warning(disable:4201) // nonstandard extension used : nameless struct/union 263 #endif 264 265 typedef union BOOST_MAY_ALIAS _LARGE_INTEGER { 266 BOOST_WINAPI_DETAIL_EXTENSION struct { 267 DWORD_ LowPart; 268 LONG_ HighPart; 269 }; 270 struct { 271 DWORD_ LowPart; 272 LONG_ HighPart; 273 } u; 274 LONGLONG_ QuadPart; 275 } LARGE_INTEGER_, *PLARGE_INTEGER_; 276 277 #ifdef BOOST_MSVC 278 #pragma warning(pop) 279 #endif 280 281 typedef struct BOOST_MAY_ALIAS _SECURITY_ATTRIBUTES { 282 DWORD_ nLength; 283 LPVOID_ lpSecurityDescriptor; 284 BOOL_ bInheritHandle; 285 } SECURITY_ATTRIBUTES_, *PSECURITY_ATTRIBUTES_, *LPSECURITY_ATTRIBUTES_; 286 287 } 288 } 289 290 #endif // BOOST_WINAPI_BASIC_TYPES_HPP_INCLUDED_ 291