Platform SDK data types
Windows Data Types
The data types supported by Microsoft® Windows® are used to define function return values, function and message parameters, and structure members. They define the size and meaning of these elements. For more information about the underlying C/C++ data types, see Data Type Ranges.
The following table contains the following types: character, integer, Boolean, pointer, and handle. The character, integer, and Boolean types are common to most C compilers. Most of the pointer-type names begin with a prefix of P or LP. Handles refer to a resource that has been loaded into memory.
For more information about handling 64-bit integers, see Large Integers.
Term | Description |
---|---|
ATOM | Atom. For more information, see This type is declared in WinDef.h as follows:
typedef WORD ATOM; |
BOOL | Boolean variable (should be TRUE or FALSE).
This type is declared in WinDef.h as follows:
typedef int BOOL; |
BOOLEAN | Boolean variable (should be TRUE or FALSE).
This type is declared in WinNT.h as follows:
typedef BYTE BOOLEAN; |
BYTE | Byte (8 bits).
This type is declared in WinDef.h as follows:
typedef unsigned char BYTE; |
CALLBACK | Calling convention for callback functions.
This type is declared in WinDef.h as follows:
#define CALLBACK __stdcall |
CHAR | 8-bit Windows (ANSI) character. For more information, see This type is declared in WinNT.h as follows:
typedef char CHAR; |
COLORREF | Red, green, blue (RGB) color value (32 bits). See This type is declared in WinDef.h as follows:
typedef DWORD COLORREF; |
CONST | Variable whose value is to remain constant during execution.
This type is declared in WinDef.h as follows:
#define CONST const |
DWORD | 32-bit unsigned integer.
This type is declared in WinDef.h as follows:
typedef unsigned long DWORD; |
DWORDLONG | 64-bit unsigned integer.
This type is declared in WinNT.h as follows:
typedef ULONGLONG DWORDLONG; |
DWORD_PTR | Unsigned long type for pointer precision. Use when casting a pointer to a long type to perform pointer arithmetic. (Also commonly used for general 32-bit parameters that have been extended to 64 bits in 64-bit Windows. )
This type is declared in BaseTsd.h as follows:
typedef ULONG_PTR DWORD_PTR; |
DWORD32 | 32-bit unsigned integer.
This type is declared in BaseTsd.h as follows:
typedef unsigned int DWORD32; |
DWORD64 | 64-bit unsigned integer.
This type is declared in BaseTsd.h as follows:
typedef unsigned __int64 DWORD64; |
FLOAT | Floating-point variable.
This type is declared in WinDef.h as follows:
typedef float FLOAT; |
HACCEL | Handle to an This type is declared in WinDef.h as follows:
typedef HANDLE HACCEL; |
HALF_PTR | Half the size of a pointer. Use within a structure that contains a pointer and two small fields.
This type is declared in Basetsd.h as follows:
#ifdef _WIN64 typedef int HALF_PTR; #else typedef short HALF_PTR; #endif |
HANDLE | Handle to an object.
This type is declared in WinNT.h as follows:
typedef PVOID HANDLE; |
HBITMAP | Handle to a This type is declared in WinDef.h as follows:
typedef HANDLE HBITMAP; |
HBRUSH | Handle to a This type is declared in WinDef.h as follows:
typedef HANDLE HBRUSH; |
HCOLORSPACE | Handle to a This type is declared in WinDef.h as follows:
#if(WINVER >= 0x0400) typedef HANDLE HCOLORSPACE; #endif |
HCONV | Handle to a dynamic data exchange (DDE) conversation.
This type is declared in Ddeml.h as follows:
typedef HANDLE HCONV; |
HCONVLIST | Handle to a DDE conversation list.
This type is declared in Ddeml.h as follows:
typedef HANDLE HCONVLIST; |
HCURSOR | Handle to a This type is declared in WinDef.h as follows:
typedef HICON HCURSOR; |
HDC | Handle to a This type is declared in WinDef.h as follows:
typedef HANDLE HDC; |
HDDEDATA | Handle to DDE data.
This type is declared in Ddeml.h as follows:
typedef HANDLE HDDEDATA; |
HDESK | Handle to a This type is declared in WinDef.h as follows:
typedef HANDLE HDESK; |
HDROP | Handle to an internal drop structure.
This type is declared in ShellApi.h as follows:
typedef HANDLE HDROP; |
HDWP | Handle to a deferred window position structure.
This type is declared in WinUser.h as follows:
typedef HANDLE HDWP; |
HENHMETAFILE | Handle to an This type is declared in WinDef.h as follows:
typedef HANDLE HENHMETAFILE; |
HFILE | Handle to a file opened by This type is declared in WinDef.h as follows:
typedef int HFILE; |
HFONT | Handle to a This type is declared in WinDef.h as follows:
typedef HANDLE HFONT; |
HGDIOBJ | Handle to a GDI object.
This type is declared in WinDef.h as follows:
typedef HANDLE HGDIOBJ; |
HGLOBAL | Handle to a global memory block.
This type is declared in WinDef.h as follows:
typedef HANDLE HGLOBAL; |
HHOOK | Handle to a This type is declared in WinDef.h as follows:
typedef HANDLE HHOOK; |
HICON | Handle to an This type is declared in WinDef.h as follows:
typedef HANDLE HICON; |
HINSTANCE | Handle to an instance.
This type is declared in WinDef.h as follows:
typedef HANDLE HINSTANCE; |
HKEY | Handle to a registry key.
This type is declared in WinDef.h as follows:
typedef HANDLE HKEY; |
HKL | Input locale identifier.
This type is declared in WinDef.h as follows:
typedef HANDLE HKL; |
HLOCAL | Handle to a local memory block.
This type is declared in WinDef.h as follows:
typedef HANDLE HLOCAL; |
HMENU | Handle to a This type is declared in WinDef.h as follows:
typedef HANDLE HMENU; |
HMETAFILE | Handle to a This type is declared in WinDef.h as follows:
typedef HANDLE HMETAFILE; |
HMODULE | Handle to a module. The value is the base address of the module.
This type is declared in WinDef.h as follows:
typedef HINSTANCE HMODULE; |
HMONITOR | Handle to a display monitor.
This type is declared in WinDef.h as follows:
if(WINVER >= 0x0500) typedef HANDLE HMONITOR; |
HPALETTE | Handle to a This type is declared in WinDef.h as follows:
typedef HANDLE HPALETTE; |
HPEN | Handle to a This type is declared in WinDef.h as follows:
typedef HANDLE HPEN; |
HRESULT | Return code used by interfaces. It is zero upon success and nonzero to represent an error code or status information.
This type is declared in WinNT.h as follows:
typedef LONG HRESULT; |
HRGN | Handle to a This type is declared in WinDef.h as follows:
typedef HANDLE HRGN; |
HRSRC | Handle to a resource.
This type is declared in WinDef.h as follows:
typedef HANDLE HRSRC; |
HSZ | Handle to a DDE string.
This type is declared in Ddeml.h as follows:
typedef HANDLE HSZ; |
HWINSTA | Handle to a This type is declared in WinDef.h as follows:
typedef HANDLE WINSTA; |
HWND | Handle to a This type is declared in WinDef.h as follows:
typedef HANDLE HWND; |
INT | 32-bit signed integer.
This type is declared in WinDef.h as follows:
typedef int INT; |
INT_PTR | Signed integer type for pointer precision. Use when casting a pointer to an integer to perform pointer arithmetic.
This type is declared in BaseTsd.h as follows:
#if defined(_WIN64) typedef __int64 INT_PTR; #else typedef int INT_PTR; #endif |
INT32 | 32-bit signed integer.
This type is declared in BaseTsd.h as follows:
typedef signed int INT32; |
INT64 | 64-bit signed integer.
This type is declared in BaseTsd.h as follows:
typedef signed __int64 INT64; |
LANGID | Language identifier. For more information, see This type is declared in WinNT.h as follows:
typedef WORD LANGID; |
LCID | Locale identifier. For more information, see This type is declared in WinNT.h as follows:
typedef DWORD LCID; |
LCTYPE | Locale information type. For a list, see This type is declared in WinNls.h as follows:
typedef DWORD LCTYPE; |
LGRPID | Language group identifier. For a list, see This type is declared in WinNls.h as follows:
typedef DWORD LGRPID; |
LONG | 32-bit signed integer.
This type is declared in WinNT.h as follows:
typedef long LONG; |
LONGLONG | 64-bit signed integer.
This type is declared in WinNT.h as follows:
#if !defined(_M_IX86) typedef __int64 LONGLONG; #else typedef double LONGLONG; #endif |
LONG_PTR | Signed long type for pointer precision. Use when casting a pointer to a long to perform pointer arithmetic.
This type is declared in BaseTsd.h as follows:
#if defined(_WIN64) typedef __int64 LONG_PTR; #else typedef long LONG_PTR; #endif |
LONG32 | 32-bit signed integer.
This type is declared in BaseTsd.h as follows:
typedef signed int LONG32; |
LONG64 | 64-bit signed integer.
This type is declared in BaseTsd.h as follows:
typedef __int64 LONG64; |
LPARAM | Message parameter.
This type is declared in WinDef.h as follows:
typedef LONG_PTR LPARAM; |
LPBOOL | Pointer to a BOOL.
This type is declared in WinDef.h as follows:
typedef BOOL far *LPBOOL; |
LPBYTE | Pointer to a BYTE.
This type is declared in WinDef.h as follows:
typedef BYTE far *LPBYTE; |
LPCOLORREF | Pointer to a COLORREF value.
This type is declared in WinDef.h as follows:
typedef DWORD *LPCOLORREF; |
LPCSTR | Pointer to a constant null-terminated string of 8-bit Windows (ANSI) characters. For more information, see This type is declared in WinNT.h as follows:
typedef __nullterminated CONST CHAR *LPCSTR; |
LPCTSTR | An LPCWSTR if This type is declared in WinNT.h as follows:
#ifdef UNICODE typedef LPCWSTR LPCTSTR; #else typedef LPCSTR LPCTSTR; #endif |
LPCVOID | Pointer to a constant of any type.
This type is declared in WinDef.h as follows:
typedef CONST void *LPCVOID; |
LPCWSTR | Pointer to a constant null-terminated string of 16-bit Unicode characters. For more information, see This type is declared in WinNT.h as follows:
typedef CONST WCHAR *LPCWSTR; |
LPDWORD | Pointer to a DWORD.
This type is declared in WinDef.h as follows:
typedef DWORD *LPDWORD; |
LPHANDLE | Pointer to a HANDLE.
This type is declared in WinDef.h as follows:
typedef HANDLE *LPHANDLE; |
LPINT | Pointer to an INT.
This type is declared in WinDef.h as follows:
typedef int *LPINT; |
LPLONG | Pointer to a LONG.
This type is declared in WinDef.h as follows:
typedef long *LPLONG; |
LPSTR | Pointer to a null-terminated string of 8-bit Windows (ANSI) characters. For more information, see This type is declared in WinNT.h as follows:
typedef CHAR *LPSTR; |
LPTSTR | An LPWSTR if This type is declared in WinNT.h as follows:
#ifdef UNICODE typedef LPWSTR LPTSTR; #else typedef LPSTR LPTSTR; #endif |
LPVOID | Pointer to any type.
This type is declared in WinDef.h as follows:
typedef void *LPVOID; |
LPWORD | Pointer to a WORD.
This type is declared in WinDef.h as follows:
typedef WORD *LPWORD; |
LPWSTR | Pointer to a null-terminated string of 16-bit Unicode characters. For more information, see This type is declared in WinNT.h as follows:
typedef WCHAR *LPWSTR; |
LRESULT | Signed result of message processing.
This type is declared in WinDef.h as follows:
typedef LONG_PTR LRESULT; |
PBOOL | Pointer to a BOOL.
This type is declared in WinDef.h as follows:
typedef BOOL *PBOOL; |
PBOOLEAN | Pointer to a BOOL.
This type is declared in WinNT.h as follows:
typedef BOOLEAN *PBOOLEAN; |
PBYTE | Pointer to a BYTE.
This type is declared in WinDef.h as follows:
typedef BYTE *PBYTE; |
PCHAR | Pointer to a CHAR.
This type is declared in WinNT.h as follows:
typedef CHAR *PCHAR; |
PCSTR | Pointer to a constant null-terminated string of 8-bit Windows (ANSI) characters. For more information, see This type is declared in WinNT.h as follows:
typedef CONST CHAR *PCSTR; |
PCTSTR | A PCWSTR if This type is declared in WinNT.h as follows:
#ifdef UNICODE typedef LPCWSTR PCTSTR; #else typedef LPCSTR PCTSTR; #endif |
PCWSTR | Pointer to a constant null-terminated string of 16-bit Unicode characters. For more information, see This type is declared in WinNT.h as follows:
typedef CONST WCHAR *PCWSTR; |
PDWORD | Pointer to a DWORD.
This type is declared in WinDef.h as follows:
typedef DWORD *PDWORD; |
PDWORDLONG | Pointer to a DWORDLONG.
This type is declared in WinNT.h as follows:
typedef DWORDLONG *PDWORDLONG; |
PDWORD_PTR | Pointer to a DWORD_PTR.
This type is declared in BaseTsd.h as follows:
typedef DWORD_PTR *PDWORD_PTR; |
PDWORD32 | Pointer to a DWORD32.
This type is declared in BaseTsd.h as follows:
typedef DWORD32 *PDWORD32; |
PDWORD64 | Pointer to a DWORD64.
This type is declared in BaseTsd.h as follows:
typedef DWORD64 *PDWORD64; |
PFLOAT | Pointer to a FLOAT.
This type is declared in WinDef.h as follows:
typedef FLOAT *PFLOAT; |
PHALF_PTR | Pointer to a HALF_PTR.
This type is declared in Basetsd.h as follows:
#ifdef _WIN64 typedef HALF_PTR *PHALF_PTR; #else typedef HALF_PTR *PHALF_PTR; #endif |
PHANDLE | Pointer to a HANDLE.
This type is declared in WinNT.h as follows:
typedef HANDLE *PHANDLE; |
PHKEY | Pointer to an HKEY.
This type is declared in WinDef.h as follows:
typedef HKEY *PHKEY; |
PINT | Pointer to an INT.
This type is declared in WinDef.h as follows:
typedef int *PINT; |
PINT_PTR | Pointer to an INT_PTR.
This type is declared in BaseTsd.h as follows:
typedef INT_PTR *PINT_PTR; |
PINT32 | Pointer to an INT32.
This type is declared in BaseTsd.h as follows:
typedef INT32 *PINT32; |
PINT64 | Pointer to an INT64.
This type is declared in BaseTsd.h as follows:
typedef INT64 *PINT64; |
PLCID | Pointer to an LCID.
This type is declared in WinNT.h as follows:
typedef PDWORD PLCID; |
PLONG | Pointer to a LONG.
This type is declared in WinNT.h as follows:
typedef LONG *PLONG; |
PLONGLONG | Pointer to a LONGLONG.
This type is declared in WinNT.h as follows:
typedef LONGLONG *PLONGLONG; |
PLONG_PTR | Pointer to a LONG_PTR.
This type is declared in BaseTsd.h as follows:
typedef LONG_PTR *PLONG_PTR; |
PLONG32 | Pointer to a LONG32.
This type is declared in BaseTsd.h as follows:
typedef LONG32 *PLONG32; |
PLONG64 | Pointer to a LONG64.
This type is declared in BaseTsd.h as follows:
typedef LONG64 *PLONG64; |
POINTER_32 | 32-bit pointer. On a 32-bit system, this is a native pointer. On a 64-bit system, this is a truncated 64-bit pointer.
This type is declared in BaseTsd.h as follows:
#if defined(_WIN64) #define POINTER_32 __ptr32 #else #define POINTER32 #endif |
POINTER_64 | 64-bit pointer. On a 64-bit system, this is a native pointer. On a 32-bit system, this is a sign-extended 32-bit pointer.
Note that it is not safe to assume the state of the high pointer bit. This type is declared in BaseTsd.h as follows:
#define POINTER_64 __ptr64 |
PSHORT | Pointer to a SHORT.
This type is declared in WinNT.h as follows:
typedef SHORT *PSHORT; |
PSIZE_T | Pointer to a SIZE_T.
This type is declared in BaseTsd.h as follows:
typedef SIZE_T *PSIZE_T; |
PSSIZE_T | Pointer to a SSIZE_T.
This type is declared in BaseTsd.h as follows:
typedef SSIZE_T *PSSIZE_T; |
PSTR | Pointer to a null-terminated string of 8-bit Windows (ANSI) characters. For more information, see This type is declared in WinNT.h as follows:
typedef CHAR *PSTR; |
PTBYTE | Pointer to a TBYTE.
This type is declared in WinNT.h as follows:
typedef TBYTE *PTBYTE; |
PTCHAR | Pointer to a TCHAR.
This type is declared in WinNT.h as follows:
typedef TCHAR *PTCHAR; |
PTSTR | A PWSTR if This type is declared in WinNT.h as follows:
#ifdef UNICODE typedef LPWSTR PTSTR; #else typedef LPSTR PTSTR; #endif |
PUCHAR | Pointer to a UCHAR.
This type is declared in WinDef.h as follows:
typedef UCHAR *PUCHAR; |
PUHALF_PTR | Pointer to a UHALF_PTR.
This type is declared in Basetsd.h as follows:
#ifdef _WIN64 typedef UHALF_PTR *PUHALF_PTR; #else typedef UHALF_PTR *PUHALF_PTR; #endif |
PUINT | Pointer to a UINT.
This type is declared in WinDef.h as follows:
typedef UINT *PUINT; |
PUINT_PTR | Pointer to a UINT_PTR.
This type is declared in BaseTsd.h as follows:
typedef UINT_PTR *PUINT_PTR; |
PUINT32 | Pointer to a UINT32.
This type is declared in BaseTsd.h as follows:
typedef UINT32 *PUINT32; |
PUINT64 | Pointer to a UINT64.
This type is declared in BaseTsd.h as follows:
typedef UINT64 *PUINT64; |
PULONG | Pointer to a ULONG.
This type is declared in WinDef.h as follows:
typedef ULONG *PULONG; |
PULONGLONG | Pointer to a ULONGLONG.
This type is declared in WinDef.h as follows:
typedef ULONGLONG *PULONGLONG; |
PULONG_PTR | Pointer to a ULONG_PTR.
This type is declared in BaseTsd.h as follows:
typedef ULONG_PTR *PULONG_PTR; |
PULONG32 | Pointer to a ULONG32.
This type is declared in BaseTsd.h as follows:
typedef ULONG32 *PULONG32; |
PULONG64 | Pointer to a ULONG64.
This type is declared in BaseTsd.h as follows:
typedef ULONG64 *PULONG64; |
PUSHORT | Pointer to a USHORT.
This type is declared in WinDef.h as follows:
typedef USHORT *PUSHORT; |
PVOID | Pointer to any type.
This type is declared in WinNT.h as follows:
typedef void *PVOID; |
PWCHAR | Pointer to a WCHAR.
This type is declared in WinNT.h as follows:
typedef WCHAR *PWCHAR; |
PWORD | Pointer to a WORD.
This type is declared in WinDef.h as follows:
typedef WORD *PWORD; |
PWSTR | Pointer to a null- terminated string of 16-bit Unicode characters. For more information, see This type is declared in WinNT.h as follows:
typedef WCHAR *PWSTR; |
SC_HANDLE | Handle to a service control manager database. For more information, see This type is declared in WinSvc.h as follows:
typedef HANDLE SC_HANDLE; |
SC_LOCK | Lock to a service control manager database. For more information, see This type is declared in WinSvc.h as follows:
typedef LPVOID SC_LOCK; |
SERVICE_STATUS_HANDLE | Handle to a service status value. For more information, see This type is declared in WinSvc.h as follows:
typedef HANDLE SERVICE_STATUS_HANDLE; |
SHORT | Short integer (16 bits).
This type is declared in WinNT.h as follows:
typedef short SHORT; |
SIZE_T | The maximum number of bytes to which a pointer can point. Use for a count that must span the full range of a pointer.
This type is declared in BaseTsd.h as follows:
typedef ULONG_PTR SIZE_T; |
SSIZE_T | Signed SIZE_T.
This type is declared in BaseTsd.h as follows:
typedef LONG_PTR SSIZE_T; |
TBYTE | A WCHAR if This type is declared in WinNT.h as follows:
#ifdef UNICODE typedef WCHAR TBYTE; #else typedef unsigned char TBYTE; #endif |
TCHAR | A WCHAR if This type is declared in WinNT.h as follows:
#ifdef UNICODE typedef WCHAR TCHAR; #else typedef char TCHAR; #endif |
UCHAR | Unsigned CHAR.
This type is declared in WinDef.h as follows:
typedef unsigned char UCHAR; |
UHALF_PTR | Unsigned HALF_PTR. Use within a structure that contains a pointer and two small fields.
This type is declared in Basetsd.h as follows:
#ifdef _WIN64 typedef unsigned int UHALF_PTR; #else typedef unsigned short UHALF_PTR; #endif |
UINT | Unsigned INT.
This type is declared in WinDef.h as follows:
typedef unsigned int UINT; |
UINT_PTR | Unsigned INT_PTR.
This type is declared in BaseTsd.h as follows:
#if defined(_WIN64) typedef unsigned __int64 UINT_PTR; #else typedef unsigned int UINT_PTR; #endif |
UINT32 | Unsigned INT32.
This type is declared in BaseTsd.h as follows:
typedef unsigned int UINT32; |
UINT64 | Unsigned INT64.
This type is declared in BaseTsd.h as follows:
typedef usigned __int 64 UINT64; |
ULONG | Unsigned LONG.
This type is declared in WinDef.h as follows:
typedef unsigned long ULONG; |
ULONGLONG | 64-bit unsigned integer.
This type is declared in WinNT.h as follows:
#if !defined(_M_IX86) typedef unsigned __int64 ULONGLONG; #else typedef double ULONGLONG #endif |
ULONG_PTR | Unsigned LONG_PTR.
This type is declared in BaseTsd.h as follows:
#if defined(_WIN64) typedef unsigned __int64 ULONG_PTR; #else typedef unsigned long ULONG_PTR; #endif |
ULONG32 | Unsigned LONG32.
This type is declared in BaseTsd.h as follows:
typedef unsigned int ULONG32; |
ULONG64 | Unsigned LONG64.
This type is declared in BaseTsd.h as follows:
typedef unsigned __int64 ULONG64; |
USHORT | Unsigned SHORT.
This type is declared in WinDef.h as follows:
typedef unsigned short USHORT; |
USN | Update sequence number (USN).
This type is declared in WinNT.h as follows:
typedef LONGLONG USN; |
VOID | Any type.
This type is declared in WinNT.h as follows:
#define VOID void |
WCHAR | 16-bit Unicode character. For more information, see This type is declared in WinNT.h as follows:
typedef wchar_t WCHAR; |
WINAPI | Calling convention for system functions.
This type is declared in WinDef.h as follows:
#define WINAPI __stdcall |
WORD | 16-bit unsigned integer.
This type is declared in WinDef.h as follows:
typedef unsigned short WORD; |
WPARAM | Message parameter.
This type is declared in WinDef.h as follows:
typedef UINT_PTR WPARAM; |