| // Copyright (c) 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // This file contains defines and typedefs that allow popular Windows types to |
| // be used without the overhead of including windows.h. |
| |
| #ifndef BASE_WIN_WINDOWS_TYPES_H |
| #define BASE_WIN_WINDOWS_TYPES_H |
| |
| // Needed for function prototypes. |
| #include <concurrencysal.h> |
| #include <sal.h> |
| #include <specstrings.h> |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| // typedef and define the most commonly used Windows integer types. |
| |
| typedef unsigned long DWORD; |
| typedef long LONG; |
| typedef __int64 LONGLONG; |
| typedef unsigned __int64 ULONGLONG; |
| |
| #define VOID void |
| typedef char CHAR; |
| typedef short SHORT; |
| typedef long LONG; |
| typedef int INT; |
| typedef unsigned int UINT; |
| typedef unsigned int* PUINT; |
| typedef void* LPVOID; |
| typedef void* PVOID; |
| typedef void* HANDLE; |
| typedef int BOOL; |
| typedef unsigned char BYTE; |
| typedef BYTE BOOLEAN; |
| typedef DWORD ULONG; |
| typedef unsigned short WORD; |
| typedef WORD UWORD; |
| typedef WORD ATOM; |
| |
| #if defined(_WIN64) |
| typedef __int64 INT_PTR, *PINT_PTR; |
| typedef unsigned __int64 UINT_PTR, *PUINT_PTR; |
| |
| typedef __int64 LONG_PTR, *PLONG_PTR; |
| typedef unsigned __int64 ULONG_PTR, *PULONG_PTR; |
| #else |
| typedef __w64 int INT_PTR, *PINT_PTR; |
| typedef __w64 unsigned int UINT_PTR, *PUINT_PTR; |
| |
| typedef __w64 long LONG_PTR, *PLONG_PTR; |
| typedef __w64 unsigned long ULONG_PTR, *PULONG_PTR; |
| #endif |
| |
| typedef UINT_PTR WPARAM; |
| typedef LONG_PTR LPARAM; |
| typedef LONG_PTR LRESULT; |
| #define LRESULT LONG_PTR |
| typedef _Return_type_success_(return >= 0) long HRESULT; |
| |
| typedef ULONG_PTR SIZE_T, *PSIZE_T; |
| typedef LONG_PTR SSIZE_T, *PSSIZE_T; |
| |
| typedef DWORD ACCESS_MASK; |
| typedef ACCESS_MASK REGSAM; |
| |
| // Forward declare Windows compatible handles. |
| |
| #define CHROME_DECLARE_HANDLE(name) \ |
| struct name##__; \ |
| typedef struct name##__* name |
| CHROME_DECLARE_HANDLE(HGLRC); |
| CHROME_DECLARE_HANDLE(HICON); |
| CHROME_DECLARE_HANDLE(HINSTANCE); |
| CHROME_DECLARE_HANDLE(HKEY); |
| CHROME_DECLARE_HANDLE(HKL); |
| CHROME_DECLARE_HANDLE(HMENU); |
| CHROME_DECLARE_HANDLE(HWND); |
| typedef HINSTANCE HMODULE; |
| #undef CHROME_DECLARE_HANDLE |
| |
| // Forward declare some Windows struct/typedef sets. |
| |
| typedef struct _OVERLAPPED OVERLAPPED; |
| typedef struct tagMSG MSG, *PMSG, *NPMSG, *LPMSG; |
| |
| typedef struct _RTL_SRWLOCK RTL_SRWLOCK; |
| typedef RTL_SRWLOCK SRWLOCK, *PSRWLOCK; |
| |
| typedef struct _GUID GUID; |
| typedef GUID CLSID; |
| |
| typedef struct tagLOGFONTW LOGFONTW, *PLOGFONTW, *NPLOGFONTW, *LPLOGFONTW; |
| typedef LOGFONTW LOGFONT; |
| |
| typedef struct _FILETIME FILETIME; |
| |
| typedef struct tagMENUITEMINFOW MENUITEMINFOW, MENUITEMINFO; |
| |
| typedef struct tagNMHDR NMHDR; |
| |
| // Declare Chrome versions of some Windows structures. These are needed for |
| // when we need a concrete type but don't want to pull in Windows.h. We can't |
| // declare the Windows types so we declare our types and cast to the Windows |
| // types in a few places. |
| |
| struct CHROME_SRWLOCK { |
| PVOID Ptr; |
| }; |
| |
| struct CHROME_CONDITION_VARIABLE { |
| PVOID Ptr; |
| }; |
| |
| // Define some commonly used Windows constants. Note that the layout of these |
| // macros - including internal spacing - must be 100% consistent with windows.h. |
| |
| // clang-format off |
| |
| #ifndef INVALID_HANDLE_VALUE |
| // Work around there being two slightly different definitions in the SDK. |
| #define INVALID_HANDLE_VALUE ((HANDLE)(LONG_PTR)-1) |
| #endif |
| #define TLS_OUT_OF_INDEXES ((DWORD)0xFFFFFFFF) |
| #define HTNOWHERE 0 |
| #define MAX_PATH 260 |
| #define CS_GLOBALCLASS 0x4000 |
| |
| #define ERROR_SUCCESS 0L |
| #define ERROR_FILE_NOT_FOUND 2L |
| #define ERROR_ACCESS_DENIED 5L |
| #define ERROR_INVALID_HANDLE 6L |
| #define ERROR_SHARING_VIOLATION 32L |
| #define ERROR_LOCK_VIOLATION 33L |
| #define REG_BINARY ( 3ul ) |
| |
| #define STATUS_PENDING ((DWORD )0x00000103L) |
| #define STILL_ACTIVE STATUS_PENDING |
| #define SUCCEEDED(hr) (((HRESULT)(hr)) >= 0) |
| #define FAILED(hr) (((HRESULT)(hr)) < 0) |
| |
| #define HKEY_CLASSES_ROOT (( HKEY ) (ULONG_PTR)((LONG)0x80000000) ) |
| #define HKEY_LOCAL_MACHINE (( HKEY ) (ULONG_PTR)((LONG)0x80000002) ) |
| #define HKEY_CURRENT_USER (( HKEY ) (ULONG_PTR)((LONG)0x80000001) ) |
| #define KEY_QUERY_VALUE (0x0001) |
| #define KEY_SET_VALUE (0x0002) |
| #define KEY_CREATE_SUB_KEY (0x0004) |
| #define KEY_ENUMERATE_SUB_KEYS (0x0008) |
| #define KEY_NOTIFY (0x0010) |
| #define KEY_CREATE_LINK (0x0020) |
| #define KEY_WOW64_32KEY (0x0200) |
| #define KEY_WOW64_64KEY (0x0100) |
| #define KEY_WOW64_RES (0x0300) |
| |
| #define READ_CONTROL (0x00020000L) |
| #define SYNCHRONIZE (0x00100000L) |
| |
| #define STANDARD_RIGHTS_READ (READ_CONTROL) |
| #define STANDARD_RIGHTS_WRITE (READ_CONTROL) |
| #define STANDARD_RIGHTS_ALL (0x001F0000L) |
| |
| #define KEY_READ ((STANDARD_RIGHTS_READ |\ |
| KEY_QUERY_VALUE |\ |
| KEY_ENUMERATE_SUB_KEYS |\ |
| KEY_NOTIFY) \ |
| & \ |
| (~SYNCHRONIZE)) |
| |
| |
| #define KEY_WRITE ((STANDARD_RIGHTS_WRITE |\ |
| KEY_SET_VALUE |\ |
| KEY_CREATE_SUB_KEY) \ |
| & \ |
| (~SYNCHRONIZE)) |
| |
| #define KEY_ALL_ACCESS ((STANDARD_RIGHTS_ALL |\ |
| KEY_QUERY_VALUE |\ |
| KEY_SET_VALUE |\ |
| KEY_CREATE_SUB_KEY |\ |
| KEY_ENUMERATE_SUB_KEYS |\ |
| KEY_NOTIFY |\ |
| KEY_CREATE_LINK) \ |
| & \ |
| (~SYNCHRONIZE)) |
| |
| // Define some macros needed when prototyping Windows functions. |
| |
| #define DECLSPEC_IMPORT __declspec(dllimport) |
| #define WINBASEAPI DECLSPEC_IMPORT |
| #define WINUSERAPI DECLSPEC_IMPORT |
| #define WINAPI __stdcall |
| #define CALLBACK __stdcall |
| |
| // clang-format on |
| |
| // Needed for optimal lock performance. |
| WINBASEAPI _Releases_exclusive_lock_(*SRWLock) VOID WINAPI |
| ReleaseSRWLockExclusive(_Inout_ PSRWLOCK SRWLock); |
| |
| // Needed to support protobuf's GetMessage macro magic. |
| WINUSERAPI BOOL WINAPI GetMessageW(_Out_ LPMSG lpMsg, |
| _In_opt_ HWND hWnd, |
| _In_ UINT wMsgFilterMin, |
| _In_ UINT wMsgFilterMax); |
| |
| // Needed for thread_local_storage.h |
| WINBASEAPI LPVOID WINAPI TlsGetValue(_In_ DWORD dwTlsIndex); |
| |
| // Needed for scoped_handle.h |
| WINBASEAPI _Check_return_ _Post_equals_last_error_ DWORD WINAPI |
| GetLastError(VOID); |
| |
| WINBASEAPI VOID WINAPI SetLastError(_In_ DWORD dwErrCode); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| // These macros are all defined by windows.h and are also used as the names of |
| // functions in the Chromium code base. Add to this list as needed whenever |
| // there is a Windows macro which causes a function call to be renamed. This |
| // ensures that the same renaming will happen everywhere. Includes of this file |
| // can be added wherever needed to ensure this consistent renaming. |
| |
| #define CopyFile CopyFileW |
| #define CreateDirectory CreateDirectoryW |
| #define CreateEvent CreateEventW |
| #define CreateFile CreateFileW |
| #define CreateService CreateServiceW |
| #define DeleteFile DeleteFileW |
| #define DispatchMessage DispatchMessageW |
| #define DrawText DrawTextW |
| #define GetComputerName GetComputerNameW |
| #define GetCurrentDirectory GetCurrentDirectoryW |
| #define GetCurrentTime() GetTickCount() |
| #define GetFileAttributes GetFileAttributesW |
| #define GetMessage GetMessageW |
| #define GetUserName GetUserNameW |
| #define LoadIcon LoadIconW |
| #define LoadImage LoadImageW |
| #define PostMessage PostMessageW |
| #define ReplaceFile ReplaceFileW |
| #define ReportEvent ReportEventW |
| #define SendMessage SendMessageW |
| #define SendMessageCallback SendMessageCallbackW |
| #define SetCurrentDirectory SetCurrentDirectoryW |
| #define StartService StartServiceW |
| #define StrCat StrCatW |
| |
| #endif // BASE_WIN_WINDOWS_TYPES_H |