wtypes.h (12298B)
1/** 2 * WinPR: Windows Portable Runtime 3 * Windows Data Types 4 * 5 * Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com> 6 * 7 * Licensed under the Apache License, Version 2.0 (the "License"); 8 * you may not use this file except in compliance with the License. 9 * You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 */ 19 20#ifndef WINPR_WTYPES_H 21#define WINPR_WTYPES_H 22 23/* Set by CMake during configuration */ 24#define WINPR_HAVE_STDINT_H 25#define WINPR_HAVE_STDBOOL_H 26 27#if !defined(_MSC_VER) || _MSC_VER >= 1900 28/* Microsoft's inttypes.h is broken before MSVC 2015 */ 29#define WINPR_HAVE_INTTYPES_H 30#endif 31 32/* MSDN: Windows Data Types - http://msdn.microsoft.com/en-us/library/aa383751/ */ 33/* [MS-DTYP]: Windows Data Types - http://msdn.microsoft.com/en-us/library/cc230273/ */ 34 35#include <wchar.h> 36#include <winpr/windows.h> 37 38#include <winpr/spec.h> 39 40#ifdef WINPR_HAVE_STDBOOL_H 41#include <stdbool.h> 42#endif 43 44#ifdef WINPR_HAVE_STDINT_H 45#include <stdint.h> 46#endif 47 48#ifdef WINPR_HAVE_INTTYPES_H 49#include <inttypes.h> 50#endif 51 52#include <limits.h> 53 54#ifdef _WIN32 55#include <wtypes.h> 56 57/* Handle missing ssize_t on Windows */ 58#ifdef _WIN64 59typedef long long LONG_PTR; 60#else 61typedef long LONG_PTR; 62#endif 63typedef LONG_PTR SSIZE_T; 64 65#endif 66 67#if defined(__OBJC__) && defined(__APPLE__) 68#include <objc/objc.h> 69#endif 70 71#ifndef CONST 72#define CONST const 73#endif 74 75#ifndef VOID 76#define VOID void 77#endif 78 79#ifndef _WIN32 80 81#define CALLBACK 82 83#define WINAPI 84#define CDECL 85 86#ifndef FAR 87#define FAR 88#endif 89 90#ifndef NEAR 91#define NEAR 92#endif 93 94#ifdef WINPR_HAVE_STDINT_H 95typedef int8_t __int8; 96typedef uint8_t __uint8; 97typedef int16_t __int16; 98typedef uint16_t __uint16; 99typedef int32_t __int32; 100typedef uint32_t __uint32; 101typedef int64_t __int64; 102typedef uint64_t __uint64; 103#else 104#if UCHAR_MAX == 0xFF 105typedef signed char __int8; 106typedef unsigned char __uint8; 107#else 108#error "8-bit type not configured" 109#endif 110#if USHRT_MAX == 0xFFFF 111typedef short __int16; 112typedef unsigned short __uint16; 113#elif UINT_MAX == 0xFFFF 114typedef int __int16; 115typedef unsigned int __uint16; 116#error "16-bit type not configured" 117#endif 118#if UINT_MAX == 0xFFFFFFFF 119typedef int __int32; 120typedef unsigned int __uint32; 121#elif ULONG_MAX == 0xFFFFFFFF 122typedef long __int32; 123typedef unsigned long __uint32; 124#else 125#error "32-bit type not configured" 126#endif 127#if ULONG_MAX == 0xFFFFFFFFFFFFFFFF 128typedef long __int64; 129typedef unsigned long __uint64; 130#elif ULLONG_MAX == 0xFFFFFFFFFFFFFFFF 131typedef long long __int64; 132typedef unsigned long long __uint64; 133#else 134#error "64-bit type not configured" 135#endif 136#endif /* WINPR_HAVE_STDINT_H */ 137 138#ifdef WINPR_HAVE_STDINT_H 139#if defined(__ILP64__) || defined(__LP64__) 140#define __int3264 int64_t 141#define __uint3264 uint64_t 142#else 143#define __int3264 int32_t 144#define __uint3264 uint32_t 145#endif 146#else 147#if defined(__ILP64__) || defined(__LP64__) 148#define __int3264 __int64 149#define __uint3264 __uint64 150#else 151#define __int3264 __int32 152#define __uint3264 __uint32 153#endif 154#endif /* WINPR_HAVE_STDINT_H */ 155 156 157typedef void* PVOID, *LPVOID, *PVOID64, *LPVOID64; 158 159#ifndef XMD_H /* X11/Xmd.h typedef collision with BOOL */ 160#ifndef __OBJC__ /* objc.h typedef collision with BOOL */ 161#ifndef __APPLE__ 162typedef __int32 BOOL; 163#else /* __APPLE__ */ 164#include <TargetConditionals.h> 165/* ensure compatibility with objc libraries */ 166#if (defined(TARGET_OS_IPHONE) && (TARGET_OS_IPHONE != 0) && defined(__LP64__)) || (defined(TARGET_OS_WATCH) && (TARGET_OS_WATCH != 0)) 167typedef bool BOOL; 168#else 169typedef signed char BOOL; 170#endif 171#endif /* __APPLE__ */ 172#endif /* __OBJC__ */ 173#endif /* XMD_H */ 174 175typedef BOOL* PBOOL, *LPBOOL; 176 177#ifndef FALSE 178#define FALSE 0 179#endif 180 181#ifndef TRUE 182#define TRUE 1 183#endif 184 185#ifndef XMD_H /* X11/Xmd.h typedef collision with BYTE */ 186typedef __uint8 BYTE; 187#endif /* XMD_H */ 188typedef BYTE byte, *PBYTE, *LPBYTE; 189typedef BYTE BOOLEAN, PBOOLEAN; 190 191#if CHAR_BIT == 8 192typedef char CHAR; 193typedef unsigned char UCHAR; 194#else 195typedef __int8 CHAR; 196typedef __uint8 UCHAR; 197#endif 198typedef CHAR CCHAR, *PCHAR, *LPCH, *PCH, *PSTR, *LPSTR; 199typedef const CHAR* LPCCH, *PCCH, *LPCSTR, *PCSTR; 200typedef UCHAR* PUCHAR; 201 202typedef __uint16 WCHAR; 203typedef WCHAR UNICODE, *PWCHAR, *LPWCH, *PWCH, *BSTR, *LMSTR, *LPWSTR, *PWSTR; 204typedef const WCHAR* LPCWCH, *PCWCH, *LMCSTR, *LPCWSTR, *PCWSTR; 205 206typedef __int16 SHORT, *PSHORT; 207typedef __int32 INT, *PINT, *LPINT; 208typedef __int32 LONG, *PLONG, *LPLONG; 209typedef __int64 LONGLONG, *PLONGLONG; 210 211typedef __uint32 UINT, *PUINT, *LPUINT; 212typedef __uint16 USHORT, *PUSHORT; 213typedef __uint32 ULONG, *PULONG; 214typedef __uint64 ULONGLONG, *PULONGLONG; 215 216#ifndef XMD_H /* X11/Xmd.h typedef collisions */ 217typedef __int8 INT8; 218typedef __int16 INT16; 219typedef __int32 INT32; 220typedef __int64 INT64; 221#endif 222typedef INT8* PINT8; 223typedef INT16* PINT16; 224typedef INT32* PINT32; 225typedef INT64* PINT64; 226 227typedef __int32 LONG32, *PLONG32; 228#ifndef LONG64 /* X11/Xmd.h uses/defines LONG64 */ 229typedef __int64 LONG64, *PLONG64; 230#endif 231 232typedef __uint8 UINT8, *PUINT8; 233typedef __uint16 UINT16, *PUINT16; 234typedef __uint32 UINT32, *PUINT32; 235typedef __uint64 UINT64, *PUINT64; 236typedef __uint64 ULONG64, *PULONG64; 237 238typedef __uint16 WORD, *PWORD, *LPWORD; 239typedef __uint32 DWORD, DWORD32, *PDWORD, *LPDWORD, *PDWORD32; 240typedef __uint64 DWORD64, DWORDLONG, QWORD, *PDWORD64, *PDWORDLONG, *PQWORD; 241 242typedef __int3264 INT_PTR, *PINT_PTR; 243typedef __uint3264 UINT_PTR, *PUINT_PTR; 244typedef __int3264 LONG_PTR, *PLONG_PTR; 245typedef __uint3264 ULONG_PTR, *PULONG_PTR; 246typedef __uint3264 DWORD_PTR, *PDWORD_PTR; 247 248typedef ULONG_PTR SIZE_T, *PSIZE_T; 249typedef LONG_PTR SSIZE_T, *PSSIZE_T; 250 251typedef float FLOAT; 252 253typedef double DOUBLE; 254 255typedef void* HANDLE, *PHANDLE, *LPHANDLE; 256typedef HANDLE HINSTANCE; 257typedef HANDLE HMODULE; 258typedef HANDLE HWND; 259typedef HANDLE HBITMAP; 260typedef HANDLE HICON; 261typedef HANDLE HCURSOR; 262typedef HANDLE HBRUSH; 263typedef HANDLE HMENU; 264 265typedef DWORD HCALL; 266 267typedef ULONG error_status_t; 268typedef LONG HRESULT; 269typedef LONG SCODE; 270typedef SCODE* PSCODE; 271 272typedef struct _POINTL /* ptl */ 273{ 274 LONG x; 275 LONG y; 276} POINTL, *PPOINTL; 277 278typedef struct tagSIZE 279{ 280 LONG cx; 281 LONG cy; 282} SIZE, *PSIZE, *LPSIZE; 283 284typedef SIZE SIZEL; 285 286typedef struct _GUID 287{ 288 UINT32 Data1; 289 UINT16 Data2; 290 UINT16 Data3; 291 BYTE Data4[8]; 292} GUID, UUID, *PGUID, *LPGUID, *LPCGUID; 293typedef GUID CLSID; 294 295typedef struct _LUID 296{ 297 DWORD LowPart; 298 LONG HighPart; 299} LUID, *PLUID; 300 301typedef GUID IID; 302typedef IID* REFIID; 303 304#ifdef UNICODE 305#define _T(x) L ## x 306#else 307#define _T(x) x 308#endif 309 310#ifdef UNICODE 311typedef LPWSTR PTSTR; 312typedef LPWSTR LPTCH; 313typedef LPWSTR LPTSTR; 314typedef LPCWSTR LPCTSTR; 315#else 316typedef LPSTR PTSTR; 317typedef LPSTR LPTCH; 318typedef LPSTR LPTSTR; 319typedef LPCSTR LPCTSTR; 320#endif 321 322typedef union _ULARGE_INTEGER 323{ 324 struct 325 { 326 DWORD LowPart; 327 DWORD HighPart; 328 } DUMMYSTRUCTNAME; 329 330 struct 331 { 332 DWORD LowPart; 333 DWORD HighPart; 334 } u; 335 336 ULONGLONG QuadPart; 337} ULARGE_INTEGER, *PULARGE_INTEGER; 338 339typedef union _LARGE_INTEGER 340{ 341 struct 342 { 343 DWORD LowPart; 344 LONG HighPart; 345 } DUMMYSTRUCTNAME; 346 347 struct 348 { 349 DWORD LowPart; 350 LONG HighPart; 351 } u; 352 353 LONGLONG QuadPart; 354} LARGE_INTEGER, *PLARGE_INTEGER; 355 356typedef struct _FILETIME 357{ 358 DWORD dwLowDateTime; 359 DWORD dwHighDateTime; 360} FILETIME, *PFILETIME, *LPFILETIME; 361 362typedef struct _SYSTEMTIME 363{ 364 WORD wYear; 365 WORD wMonth; 366 WORD wDayOfWeek; 367 WORD wDay; 368 WORD wHour; 369 WORD wMinute; 370 WORD wSecond; 371 WORD wMilliseconds; 372} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME; 373 374typedef struct _RPC_SID_IDENTIFIER_AUTHORITY 375{ 376 BYTE Value[6]; 377} RPC_SID_IDENTIFIER_AUTHORITY; 378 379typedef DWORD SECURITY_INFORMATION, *PSECURITY_INFORMATION; 380 381typedef struct _RPC_SID 382{ 383 UCHAR Revision; 384 UCHAR SubAuthorityCount; 385 RPC_SID_IDENTIFIER_AUTHORITY IdentifierAuthority; 386 ULONG SubAuthority[1]; 387} RPC_SID, *PRPC_SID, *PSID; 388 389typedef struct _ACL 390{ 391 UCHAR AclRevision; 392 UCHAR Sbz1; 393 USHORT AclSize; 394 USHORT AceCount; 395 USHORT Sbz2; 396} ACL, *PACL; 397 398typedef struct _SECURITY_DESCRIPTOR 399{ 400 UCHAR Revision; 401 UCHAR Sbz1; 402 USHORT Control; 403 PSID Owner; 404 PSID Group; 405 PACL Sacl; 406 PACL Dacl; 407} SECURITY_DESCRIPTOR, *PSECURITY_DESCRIPTOR; 408 409typedef WORD SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL; 410 411typedef struct _SECURITY_ATTRIBUTES 412{ 413 DWORD nLength; 414 LPVOID lpSecurityDescriptor; 415 BOOL bInheritHandle; 416} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES; 417 418typedef struct _PROCESS_INFORMATION 419{ 420 HANDLE hProcess; 421 HANDLE hThread; 422 DWORD dwProcessId; 423 DWORD dwThreadId; 424} PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION; 425 426typedef DWORD (*PTHREAD_START_ROUTINE)(LPVOID lpThreadParameter); 427typedef PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE; 428 429typedef void* FARPROC; 430 431typedef struct tagDEC 432{ 433 USHORT wReserved; 434 union 435 { 436 struct 437 { 438 BYTE scale; 439 BYTE sign; 440 } DUMMYSTRUCTNAME; 441 USHORT signscale; 442 } DUMMYUNIONNAME; 443 ULONG Hi32; 444 union 445 { 446 struct 447 { 448 ULONG Lo32; 449 ULONG Mid32; 450 } DUMMYSTRUCTNAME2; 451 ULONGLONG Lo64; 452 } DUMMYUNIONNAME2; 453} DECIMAL; 454 455typedef DECIMAL* LPDECIMAL; 456 457#define DECIMAL_NEG ((BYTE) 0x80) 458#define DECIMAL_SETZERO(dec) { (dec).Lo64 = 0; (dec).Hi32 = 0; (dec).signscale = 0; } 459 460typedef DWORD LCID; 461typedef PDWORD PLCID; 462typedef WORD LANGID; 463 464#endif /* _WIN32 not defined */ 465 466typedef void* PCONTEXT_HANDLE; 467typedef PCONTEXT_HANDLE* PPCONTEXT_HANDLE; 468 469#ifndef _NTDEF 470typedef LONG NTSTATUS; 471typedef NTSTATUS* PNTSTATUS; 472#endif 473 474#ifndef _LPCVOID_DEFINED 475#define _LPCVOID_DEFINED 476typedef const VOID* LPCVOID; 477#endif 478 479#ifndef _LPCBYTE_DEFINED 480#define _LPCBYTE_DEFINED 481typedef const BYTE* LPCBYTE; 482#endif 483 484/* integer format specifiers */ 485#ifndef WINPR_HAVE_INTTYPES_H 486#define PRId8 "hhd" 487#define PRIi8 "hhi" 488#define PRIu8 "hhu" 489#define PRIo8 "hho" 490#define PRIx8 "hhx" 491#define PRIX8 "hhX" 492#define PRId16 "hd" 493#define PRIi16 "hi" 494#define PRIu16 "hu" 495#define PRIo16 "ho" 496#define PRIx16 "hx" 497#define PRIX16 "hX" 498#if defined(_MSC_VER) 499#define PRId32 "I32d" 500#define PRIi32 "I32i" 501#define PRIu32 "I32u" 502#define PRIo32 "I32o" 503#define PRIx32 "I32x" 504#define PRIX32 "I32X" 505#define PRId64 "I64d" 506#define PRIi64 "I64i" 507#define PRIu64 "I64u" 508#define PRIo64 "I64o" 509#define PRIx64 "I64x" 510#define PRIX64 "I64X" 511#else 512#define PRId32 "d" 513#define PRIi32 "i" 514#define PRIu32 "u" 515#define PRIo32 "o" 516#define PRIx32 "x" 517#define PRIX32 "X" 518#if ULONG_MAX == 0xFFFFFFFFFFFFFFFF 519#define PRId64 "ld" 520#define PRIi64 "li" 521#define PRIu64 "lu" 522#define PRIo64 "lo" 523#define PRIx64 "lx" 524#define PRIX64 "lX" 525#else 526#define PRId64 "lld" 527#define PRIi64 "lli" 528#define PRIu64 "llu" 529#define PRIo64 "llo" 530#define PRIx64 "llx" 531#define PRIX64 "llX" 532#endif 533#endif /* _MSC_VER */ 534#endif /* WINPR_HAVE_INTTYPES_H not defined*/ 535 536#ifndef SSIZE_MAX 537#if defined(_POSIX_SSIZE_MAX) 538#define SSIZE_MAX _POSIX_SSIZE_MAX 539#elif defined(_WIN64) 540#define SSIZE_MAX _I64_MAX 541#elif defined(_WIN32) 542#define SSIZE_MAX LONG_MAX 543#else 544#define SSIZE_MAX LONG_MAX 545#endif 546#endif 547 548#if defined(_MSC_VER) && _MSC_VER < 1900 549/* %z not supported before MSVC 2015 */ 550#define PRIdz "Id" 551#define PRIiz "Ii" 552#define PRIuz "Iu" 553#define PRIoz "Io" 554#define PRIxz "Ix" 555#define PRIXz "IX" 556#else 557#define PRIdz "zd" 558#define PRIiz "zi" 559#define PRIuz "zu" 560#define PRIoz "zo" 561#define PRIxz "zx" 562#define PRIXz "zX" 563#endif 564 565 566#include <winpr/user.h> 567 568#ifndef _WIN32 569#define _fseeki64(fp, offset, origin) fseeko(fp, offset, origin) 570#define _ftelli64(fp) ftello(fp) 571#endif 572 573#endif /* WINPR_WTYPES_H */