this might be helpful to some.
It was to me. so enjoy.

but why LONG. when there is a signed int?they are the same
in 32 bits.

Code:

Data Types
Value Meaning 
BOOL A 32-bit field that is set to 1 to indicate TRUE, or 0 to indicate FALSE.
 
BOOLEAN An 8-bit field that is set to 1 to indicate TRUE, or 0 to indicate FALSE.
 
BYTE An 8-bit block of data.
 
CHAR An 8-bit block of data that typically contains a Windows (ANSI) character. 

DWORD A 32-bit unsigned integer (range: 0 through 4294967295 decimal). Because 
a DWORD is unsigned, its first (most significant) bit is not reserved for signing.

 
GUID A globally unique identifier. This data type exposes the GUID structure 

(documented in the Platform SDK), which contains the following:

DWORD: Contains the first eight hexadecimal digits of the GUID identifier.
 
WORD: Contains the first group of four hexadecimal digits of the GUID identifier.
 
WORD: Contains the second group of four hexadecimal digits of the GUID identifier. 

BYTE[]: An array whose first two bytes specify the third group of four
 hexadecimal digits, and whose remaining six bytes contain the 
final 12 hexadecimal digits of the GUID identifier. 
 
INT A 32-bit signed integer (range: -2147483648 through 2147483647 decimal).
 
LARGE_INTEGER A 64-bit signed integer (range: -2305843009213693952
 through 2305843009213693952 decimal).
 
LONG A 32-bit signed integer (range: -2147483648 through 2147483647 decimal). 
 
LONGLONG A 64-bit signed integer (range: -2305843009213693952 
through 2305843009213693952 decimal).
 
LONG_PTR A 32-bit signed LONG for pointer precision.
 Use when casting a pointer to a LONG to perform pointer arithmetic.
 
LPBYTE A 32-bit pointer to a BYTE. 

LPCSTR A 32-bit pointer to a null-terminated 
string of 8-bit Windows (ANSI) characters.
 
LPCWSTR A 32-bit pointer to a null-terminated string of 
16-bit Unicode characters. 

LPDWORD A 32-bit pointer to a DWORD. 

LPSTR A 32-bit pointer to a null-terminated string of 8-bit Windows (ANSI) characters. 

LPWSTR A 32-bit pointer to a null-terminated string of 16-bit Unicode characters.
 
OLD_LARGE_INTEGER A data type that exposes an OLD_LARGER_INTEGER structure, which contains the following:

ULONG: The lower four bytes.
 
LONG: The upper four bytes. 
 
PWSTR A 32-bit pointer to a null-terminated string of 16-bit Unicode characters. 

PUCHAR A 32-bit pointer to an unsigned CHAR.
 
PULONG A 32-bit pointer to a ULONG.
 
SHORT A 16-bit integer (range: -32768 through 32767 decimal).
 The first (most significant) bit is the signing bit.
 
TCHAR A character that is a WCHAR if Unicode is defined, or a CHAR otherwise.
 
TIME A 128-bit integer that represents an absolute time or a time interval.
 Times are specified in units of 100 milliseconds. This data type exposes the TIME structure, which contains the following:

ULONG: The lower four bytes. 


LONG: The upper four bytes. 
A positive value expresses an absolute time, where the base time is
 the beginning of the year 1601 A.D. in the Gregorian calendar.
 A negative value expresses a time interval relative to some base time,
 typically the current time.

 
UCHAR An 8-bit integer block of data (range: 0 through 255 decimal).
 Because a UCHAR is unsigned, its first (most significant) bit is 
not reserved for signing.

 
ULONG A 32-bit unsigned integer (range: 0 through 4294967296 decimal).
 Because a ULONG is unsigned, its first (most significant) bit is
 not reserved for signing.
 

ULONGLONG A 64-bit unsigned integer (range: 0 through to 18446744073709551616 decimal).
 Because a ULONGLONG is unsigned, its first (most significant) 
bit is not reserved for signing. 


ULONG_PTR A 32-bit pointer to a ULONG.
 
UNICODE_STRING A complex data type (documented in the Platform SDK) that consists of the following:

USHORT: The length of the wide-character string in bytes.
 
USHORT: The total size, in bytes, of memory allocated for
 the wide-character string buffer.
 
PWSTR: Pointer to a wide-character string buffer. 

 
USHORT A 16-bit unsigned integer (range: 0 through 65536 decimal).
 Because a USHORT is unsigned, its first (most significant) bit
 is not reserved for signing.

 
UTIME A 64-bit unsigned integer that represents the number of seconds
 since January 1, 1970, 00:00:00. For example, noon on January 1,
 1970, is represented as 43200. 

UUID A universally unique identifier. This data type exposes the UUID structure
 
(documented in the Platform SDK), which contains the following:

LONG: Contains the first eight hexadecimal digits of the UUID.

 
SHORT: Contains the first group of four hexadecimal digits of the UUID.
 
SHORT: Contains the second group of four hexadecimal digits of the UUID.
 
CHAR[]: An array whose first two bytes specify the third group of four hexadecimal digits, and whose remaining six bytes contain the final 12 hexadecimal digits of the UUID. 
 
VARIANT An Automation data type (documented in the Platform SDK)
 that contains any other automation data type. 

WCHAR A 16-bit Unicode character. 

wchar_t A 16-bit Unicode character for use with the MIDL compiler.
 
WORD A 16-bit unsigned integer (range: 0 through 65535 decimal). Because a WORD is unsigned, its first (most significant) bit is not reserved for signing
cheers!