update for HEAD-2003091401
[reactos.git] / include / structs.h
index 56e0947..9c1b1dc 100644 (file)
@@ -33,6 +33,7 @@
 #ifndef _GNU_H_WINDOWS32_STRUCTURES
 #define _GNU_H_WINDOWS32_STRUCTURES
 
+#include <base.h>
 #include <ntos/security.h>
 #include <ntos/time.h>
 #include <ntdll/rtl.h>
 #include <ntos/ps.h>
 #include <ntos/disk.h>
 #include <ntos/gditypes.h>
-/*
-typedef struct _VALENT
-{
-   LPTSTR ve_valuename;
-   DWORD ve_valuelen;
-   DWORD ve_valueptr;
-   DWORD ve_type;
-} VALENT, *PVALENT;
- */
+
+/* NOTE - _DISABLE_TIDENTS exists to keep ReactOS's source from
+   accidentally utilitizing ANSI/UNICODE-generic structs, defines
+   or functions. */
+#ifndef _DISABLE_TIDENTS
+#  ifdef UNICODE
+#    define typedef_tident(ident) typedef ident##W ident;
+#  else
+#    define typedef_tident(ident) typedef ident##A ident;
+#  endif
+#else
+#  define typedef_tident(ident)
+#endif
+
 typedef struct _VALENT_A {
    LPSTR ve_valuename;
    DWORD ve_valuelen;
@@ -67,13 +73,8 @@ typedef struct _VALENT_W {
    DWORD  ve_type;
 } VALENTW, *PVALENTW;
 
-#ifdef UNICODE
-typedef VALENTW VALENT;
-typedef PVALENTW PVALENT;
-#else
-typedef VALENTA VALENT;
-typedef PVALENTA PVALENT;
-#endif
+typedef_tident(VALENT)
+typedef_tident(PVALENT)
 
 #ifndef WIN32_LEAN_AND_MEAN
 
@@ -141,10 +142,17 @@ typedef struct _ADAPTER_STATUS {
   WORD    name_count;
 } ADAPTER_STATUS;
 
-typedef struct _ADDJOB_INFO_1 {
-  LPTSTR  Path;
+typedef struct _ADDJOB_INFO_1A {
+  LPSTR   Path;
+  DWORD   JobId;
+} ADDJOB_INFO_1A;
+
+typedef struct _ADDJOB_INFO_1W {
+  LPWSTR  Path;
   DWORD   JobId;
-} ADDJOB_INFO_1;
+} ADDJOB_INFO_1W;
+
+typedef_tident(ADDJOB_INFO_1)
 
 typedef struct tagANIMATIONINFO {
   UINT cbSize;
@@ -156,14 +164,22 @@ typedef struct _RECT {
   LONG top;
   LONG right;
   LONG bottom;
-} RECT, *LPRECT, *LPCRECT, *PRECT;
+} RECT, *LPRECT, *LPCRECT, *PRECT,
+RECTL, *LPRECTL, *LPCRECTL, *PRECTL;
 
+typedef struct _PATRECT {
+       RECT r;
+       HBRUSH hBrush;
+} PATRECT, * PPATRECT;
+
+#if 0
 typedef struct _RECTL {
   LONG left;
   LONG top;
   LONG right;
   LONG bottom;
 } RECTL, *LPRECTL, *LPCRECTL, *PRECTL;
+#endif
 
 typedef struct _AppBarData {
   DWORD  cbSize;
@@ -210,7 +226,7 @@ typedef struct tagBITMAPFILEHEADER {
   WORD    bfReserved1;
   WORD    bfReserved2;
   DWORD   bfOffBits;
-} BITMAPFILEHEADER __attribute__((packed));
+} PACKED BITMAPFILEHEADER;
 
 typedef struct tagBITMAPINFOHEADER {
   DWORD  biSize;
@@ -231,7 +247,7 @@ typedef struct tagRGBQUAD {
   BYTE    rgbGreen;
   BYTE    rgbRed;
   BYTE    rgbReserved;
-} RGBQUAD;
+} RGBQUAD, *PRGBQUAD, *LPRGBQUAD;
 
 typedef struct tagBITMAPINFO {
   BITMAPINFOHEADER bmiHeader;
@@ -279,8 +295,8 @@ typedef struct {
   DWORD        bV4GammaBlue;
 } BITMAPV4HEADER,   *LPBITMAPV4HEADER, *PBITMAPV4HEADER;
 
-#ifndef _BLOB_DEFINED
-#define _BLOB_DEFINED
+#ifndef __BLOB_T_DEFINED
+#define __BLOB_T_DEFINED
 typedef struct _BLOB {
   ULONG   cbSize;
   BYTE    *pBlobData;
@@ -347,6 +363,22 @@ typedef struct tagPOINTS {
   SHORT y;
 } POINTS;
 
+typedef struct {
+       ULONG State[4];
+       ULONG Unknown[2];
+} MD4_CONTEXT, *PMD4_CONTEXT;
+
+typedef struct {
+       ULONG Unknown[2];
+       ULONG State[4];
+} MD5_CONTEXT, *PMD5_CONTEXT;
+
+typedef struct {
+       ULONG Unknown1[6];
+       ULONG State[5];
+       ULONG Unknown2[2];
+} SHA_CONTEXT, *PSHA_CONTEXT;
+
 typedef struct _tagCANDIDATEFORM {
   DWORD  dwIndex;
   DWORD  dwStyle;
@@ -364,21 +396,6 @@ typedef struct _tagCANDIDATELIST {
   DWORD  dwOffset[1];
 } CANDIDATELIST, *LPCANDIDATELIST;
 
-typedef struct tagCREATESTRUCT {
-  LPVOID    lpCreateParams;
-  HINSTANCE hInstance;
-  HMENU     hMenu;
-  HWND      hwndParent;
-  int       cy;
-  int       cx;
-  int       y;
-  int       x;
-  LONG      style;
-  LPCTSTR   lpszName;
-  LPCTSTR   lpszClass;
-  DWORD     dwExStyle;
-} CREATESTRUCT, *LPCREATESTRUCT;
-
 typedef struct tagCREATESTRUCTA {
   LPVOID    lpCreateParams;
   HINSTANCE hInstance;
@@ -409,10 +426,113 @@ typedef struct tagCREATESTRUCTW {
   DWORD     dwExStyle;
 } CREATESTRUCTW, *LPCREATESTRUCTW;
 
-typedef struct tagCBT_CREATEWND {
-  LPCREATESTRUCT lpcs;
-  HWND           hwndInsertAfter;
-} CBT_CREATEWND;
+typedef_tident(CREATESTRUCT)
+typedef_tident(LPCREATESTRUCT)
+
+typedef struct tagHW_PROFILE_INFOA {
+    DWORD  dwDockInfo;
+    CHAR   szHwProfileGuid[HW_PROFILE_GUIDLEN];
+    CHAR   szHwProfileName[MAX_PROFILE_LEN];
+} HW_PROFILE_INFOA, *LPHW_PROFILE_INFOA;
+typedef struct tagHW_PROFILE_INFOW {
+    DWORD  dwDockInfo;
+    WCHAR  szHwProfileGuid[HW_PROFILE_GUIDLEN];
+    WCHAR  szHwProfileName[MAX_PROFILE_LEN];
+} HW_PROFILE_INFOW, *LPHW_PROFILE_INFOW;
+
+typedef_tident(HW_PROFILE_INFO)
+typedef_tident(LPHW_PROFILE_INFO)
+typedef struct _tagDATETIME {
+    WORD    year;
+    WORD    month;
+    WORD    day;
+    WORD    hour;
+    WORD    min;
+    WORD    sec;
+} DATETIME;
+
+typedef struct _tagIMEPROA {
+    HWND        hWnd;
+    DATETIME    InstDate;
+    UINT        wVersion;
+    BYTE        szDescription[50];
+    BYTE        szName[80];
+    BYTE        szOptions[30];
+} IMEPROA,*PIMEPROA,*NPIMEPROA,FAR *LPIMEPROA;
+typedef struct _tagIMEPROW {
+    HWND        hWnd;
+    DATETIME    InstDate;
+    UINT        wVersion;
+    WCHAR       szDescription[50];
+    WCHAR       szName[80];
+    WCHAR       szOptions[30];
+} IMEPROW,*PIMEPROW,*NPIMEPROW,FAR *LPIMEPROW;
+typedef_tident(IMEPRO)
+typedef_tident(NPIMEPRO)
+typedef_tident(LPIMEPRO)
+typedef_tident(PIMEPRO)
+
+typedef struct _cpinfoexA {
+    UINT    MaxCharSize;
+    BYTE    DefaultChar[MAX_DEFAULTCHAR];
+    BYTE    LeadByte[MAX_LEADBYTES];
+    WCHAR   UnicodeDefaultChar;
+    UINT    CodePage;
+    CHAR    CodePageName[MAX_PATH];
+} CPINFOEXA, *LPCPINFOEXA;
+typedef struct _cpinfoexW {
+    UINT    MaxCharSize;
+    BYTE    DefaultChar[MAX_DEFAULTCHAR];
+    BYTE    LeadByte[MAX_LEADBYTES];
+    WCHAR   UnicodeDefaultChar;
+    UINT    CodePage;
+    WCHAR   CodePageName[MAX_PATH];
+} CPINFOEXW, *LPCPINFOEXW;
+
+typedef_tident(CPINFOEX)
+typedef_tident(LPCPINFOEX)
+
+typedef struct _RTL_RANGE_LIST {
+    LIST_ENTRY ListHead;
+    ULONG Flags;
+    ULONG Count;
+    ULONG Stamp;
+} RTL_RANGE_LIST, *PRTL_RANGE_LIST;
+
+typedef struct _RTL_RANGE {
+    ULONGLONG Start;
+    ULONGLONG End;
+    PVOID UserData;
+    PVOID Owner;
+    UCHAR Attributes;
+    UCHAR Flags;
+} RTL_RANGE, *PRTL_RANGE;
+
+typedef
+BOOLEAN
+(CALLBACK *PRTL_CONFLICT_RANGE_CALLBACK) (
+PVOID Context,
+PRTL_RANGE Range
+    );
+
+typedef struct _RANGE_LIST_ITERATOR {
+    PLIST_ENTRY RangeListHead;
+    PLIST_ENTRY MergedHead;
+    PVOID Current;
+    ULONG Stamp;
+} RTL_RANGE_LIST_ITERATOR, *PRTL_RANGE_LIST_ITERATOR;
+
+typedef struct tagCBT_CREATEWNDA {
+  LPCREATESTRUCTA lpcs;
+  HWND            hwndInsertAfter;
+} CBT_CREATEWNDA;
+
+typedef struct tagCBT_CREATEWNDW {
+  LPCREATESTRUCTW lpcs;
+  HWND            hwndInsertAfter;
+} CBT_CREATEWNDW;
+
+typedef_tident(CBT_CREATEWND)
 
 typedef struct tagCBTACTIVATESTRUCT {
   WINBOOL fMouse;
@@ -427,7 +547,19 @@ typedef struct _CHAR_INFO {
   WORD Attributes;
 } CHAR_INFO, *PCHAR_INFO;
 
-typedef struct _charformat {
+typedef struct _charformatA {
+  UINT     cbSize;
+  DWORD    dwMask;
+  DWORD    dwEffects;
+  LONG     yHeight;
+  LONG     yOffset;
+  COLORREF crTextColor;
+  BYTE     bCharSet;
+  BYTE     bPitchAndFamily;
+  CHAR     szFaceName[LF_FACESIZE];
+} CHARFORMATA;
+
+typedef struct _charformatW {
   UINT     cbSize;
   DWORD    dwMask;
   DWORD    dwEffects;
@@ -436,8 +568,10 @@ typedef struct _charformat {
   COLORREF crTextColor;
   BYTE     bCharSet;
   BYTE     bPitchAndFamily;
-  TCHAR    szFaceName[LF_FACESIZE];
-} CHARFORMAT;
+  WCHAR    szFaceName[LF_FACESIZE];
+} CHARFORMATW;
+
+typedef_tident(CHARFORMAT)
 
 typedef struct _charrange {
   LONG cpMin;
@@ -460,6 +594,33 @@ typedef struct {
   FONTSIGNATURE fs;
 } CHARSETINFO, *LPCHARSETINFO;
 
+typedef struct tagWCRANGE
+{
+    WCHAR  wcLow;
+    USHORT cGlyphs;
+} WCRANGE, *PWCRANGE,FAR *LPWCRANGE;
+
+typedef struct tagGLYPHSET
+{
+    DWORD    cbThis;
+    DWORD    flAccel;
+    DWORD    cGlyphsSupported;
+    DWORD    cRanges;
+    WCRANGE  ranges[1];
+} GLYPHSET, *PGLYPHSET, FAR *LPGLYPHSET;
+
+typedef struct {
+  DWORD        lStructSize;
+  HWND         hwndOwner;
+  HWND         hInstance;
+  COLORREF     rgbResult;
+  COLORREF*    lpCustColors;
+  DWORD        Flags;
+  LPARAM       lCustData;
+  LPCCHOOKPROC lpfnHook;
+  LPCSTR       lpTemplateName;
+} CHOOSECOLORA, *LPCHOOSECOLORA;
+
 typedef struct {
   DWORD        lStructSize;
   HWND         hwndOwner;
@@ -469,10 +630,19 @@ typedef struct {
   DWORD        Flags;
   LPARAM       lCustData;
   LPCCHOOKPROC lpfnHook;
-  LPCTSTR      lpTemplateName;
-} CHOOSECOLOR, *LPCHOOSECOLOR;
+  LPCWSTR      lpTemplateName;
+} CHOOSECOLORW, *LPCHOOSECOLORW;
 
-typedef struct tagLOGFONT {
+typedef_tident(CHOOSECOLOR)
+typedef_tident(LPCHOOSECOLOR)
+
+typedef struct _OBJECT_TYPE_LIST {
+    WORD   Level;
+    WORD   Sbz;
+    GUID *ObjectType;
+} OBJECT_TYPE_LIST, *POBJECT_TYPE_LIST;
+
+typedef struct tagLOGFONTA {
   LONG lfHeight;
   LONG lfWidth;
   LONG lfEscapement;
@@ -486,8 +656,8 @@ typedef struct tagLOGFONT {
   BYTE lfClipPrecision;
   BYTE lfQuality;
   BYTE lfPitchAndFamily;
-  TCHAR lfFaceName[LF_FACESIZE];
-} LOGFONT, *LPLOGFONT, *PLOGFONT;
+  CHAR lfFaceName[LF_FACESIZE];
+} LOGFONTA, *LPLOGFONTA, *PLOGFONTA;
 
 typedef struct tagLOGFONTW {
   LONG lfHeight;
@@ -503,27 +673,113 @@ typedef struct tagLOGFONTW {
   BYTE lfClipPrecision;
   BYTE lfQuality;
   BYTE lfPitchAndFamily;
-  LPWSTR lfFaceName;
+  WCHAR lfFaceName[LF_FACESIZE];
 } LOGFONTW, *LPLOGFONTW, *PLOGFONTW;
 
-typedef struct {
+typedef_tident(LOGFONT)
+typedef_tident(LPLOGFONT)
+typedef_tident(PLOGFONT)
+
+typedef struct tagRAWINPUTHEADER {
+    DWORD dwType;
+    DWORD dwSize;
+    HANDLE hDevice;
+    WPARAM wParam;
+} RAWINPUTHEADER, *PRAWINPUTHEADER, *LPRAWINPUTHEADER;
+
+typedef struct tagRAWINPUTDEVICELIST {
+    HANDLE hDevice;
+    DWORD dwType;
+} RAWINPUTDEVICELIST, *PRAWINPUTDEVICELIST;
+
+typedef struct tagRAWINPUTDEVICE {
+    USHORT usUsagePage;
+    USHORT usUsage;
+    DWORD dwFlags;
+    HWND hwndTarget;
+} RAWINPUTDEVICE, *PRAWINPUTDEVICE, *LPRAWINPUTDEVICE;
+
+typedef CONST RAWINPUTDEVICE* PCRAWINPUTDEVICE;
+
+typedef struct tagRAWMOUSE {
+    USHORT usFlags;
+    union {
+        ULONG ulButtons;
+        struct  {
+            USHORT  usButtonFlags;
+            USHORT  usButtonData;
+        };
+    };
+    ULONG ulRawButtons;
+    LONG lLastX;
+    LONG lLastY;
+    ULONG ulExtraInformation;
+} RAWMOUSE, *PRAWMOUSE, *LPRAWMOUSE;
+
+typedef struct tagRAWKEYBOARD {
+    USHORT MakeCode;
+    USHORT Flags;
+    USHORT Reserved;
+    USHORT VKey;
+    UINT   Message;
+    ULONG ExtraInformation;
+} RAWKEYBOARD, *PRAWKEYBOARD, *LPRAWKEYBOARD;
+
+typedef struct tagRAWHID {
+    DWORD dwSizeHid;
+    DWORD dwCount;
+    BYTE bRawData[1];
+} RAWHID, *PRAWHID, *LPRAWHID;
+
+typedef struct tagRAWINPUT {
+    RAWINPUTHEADER header;
+    union {
+        RAWMOUSE    mouse;
+        RAWKEYBOARD keyboard;
+        RAWHID      hid;
+    } data;
+} RAWINPUT, *PRAWINPUT, *LPRAWINPUT;
+
+typedef struct tagCHOOSEFONTA {
+  DWORD        lStructSize;
+  HWND         hwndOwner;
+  HDC          hDC;
+  LPLOGFONTA   lpLogFont;
+  INT          iPointSize;
+  DWORD        Flags;
+  DWORD        rgbColors;
+  LPARAM       lCustData;
+  LPCFHOOKPROC lpfnHook;
+  LPCSTR       lpTemplateName;
+  HINSTANCE    hInstance;
+  LPSTR        lpszStyle;
+  WORD         nFontType;
+  WORD         ___MISSING_ALIGNMENT__;
+  INT          nSizeMin;
+  INT          nSizeMax;
+} CHOOSEFONTA, *LPCHOOSEFONTA;
+
+typedef struct tagCHOOSEFONTW {
   DWORD        lStructSize;
   HWND         hwndOwner;
   HDC          hDC;
-  LPLOGFONT    lpLogFont;
+  LPLOGFONTW   lpLogFont;
   INT          iPointSize;
   DWORD        Flags;
   DWORD        rgbColors;
   LPARAM       lCustData;
   LPCFHOOKPROC lpfnHook;
-  LPCTSTR      lpTemplateName;
+  LPCWSTR      lpTemplateName;
   HINSTANCE    hInstance;
-  LPTSTR       lpszStyle;
+  LPWSTR        lpszStyle;
   WORD         nFontType;
   WORD         ___MISSING_ALIGNMENT__;
   INT          nSizeMin;
   INT          nSizeMax;
-} CHOOSEFONT, *LPCHOOSEFONT;
+} CHOOSEFONTW, *LPCHOOSEFONTW;
+
+typedef_tident(CHOOSEFONT)
+typedef_tident(LPCHOOSEFONT)
 
 typedef struct _IDA {
   UINT cidl;
@@ -641,14 +897,16 @@ typedef struct _COMMTIMEOUTS {
 } COMMTIMEOUTS,*LPCOMMTIMEOUTS;
 
 typedef struct tagCOMPAREITEMSTRUCT {
-  UINT  CtlType;
-  UINT  CtlID;
-  HWND  hwndItem;
-  UINT  itemID1;
-  DWORD itemData1;
-  UINT  itemID2;
-  DWORD itemData2;
-} COMPAREITEMSTRUCT;
+       UINT    CtlType;
+       UINT    CtlID;
+       HWND    hwndItem;
+       UINT    itemID1;
+       DWORD   itemData1;
+       UINT    itemID2;
+       DWORD   itemData2;
+       DWORD   dwLocaleId;
+} COMPAREITEMSTRUCT,*LPCOMPAREITEMSTRUCT;
+
 
 typedef struct {
   COLORREF crText;
@@ -712,6 +970,39 @@ typedef struct tagCOPYDATASTRUCT {
   PVOID lpData;
 } COPYDATASTRUCT;
 
+typedef struct tagACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA {
+    PVOID lpInformation;
+    PVOID lpSectionBase;
+    ULONG ulSectionLength;
+    PVOID lpSectionGlobalDataBase;
+    ULONG ulSectionGlobalDataLength;
+} ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA, *PACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA;
+typedef const ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA *PCACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA;
+
+typedef struct tagACTCTX_SECTION_KEYED_DATA {
+    ULONG cbSize;
+    ULONG ulDataFormatVersion;
+    PVOID lpData;
+    ULONG ulLength;
+    PVOID lpSectionGlobalData;
+    ULONG ulSectionGlobalDataLength;
+    PVOID lpSectionBase;
+    ULONG ulSectionTotalLength;
+    HANDLE hActCtx;
+    ULONG ulAssemblyRosterIndex;
+// 2600 stops here
+    ULONG ulFlags;
+    ACTCTX_SECTION_KEYED_DATA_ASSEMBLY_METADATA AssemblyMetadata;
+} ACTCTX_SECTION_KEYED_DATA, *PACTCTX_SECTION_KEYED_DATA;
+typedef const ACTCTX_SECTION_KEYED_DATA * PCACTCTX_SECTION_KEYED_DATA;
+
+typedef struct tagRTL_BITMAP_RUN {
+    ULONG StartOfRun;
+    ULONG SizeOfRun;
+} RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
+
+typedef const RTL_BITMAP *PCRTL_BITMAP;
+
 typedef struct _cpinfo {
   UINT MaxCharSize;
   BYTE DefaultChar[MAX_DEFAULTCHAR];
@@ -761,16 +1052,133 @@ typedef struct _CSADDR_INFO {
 } CSADDR_INFO;
 */
 
-typedef struct _currencyfmt {
+typedef struct {
+    UINT cbSize;
+    HDESK hdesk;
+    HWND hwnd;
+    LUID luid;
+} BSMINFO, *PBSMINFO;
+
+typedef struct _currencyfmtA {
+  UINT      NumDigits;
+  UINT      LeadingZero;
+  UINT      Grouping;
+  LPSTR     lpDecimalSep;
+  LPSTR     lpThousandSep;
+  UINT      NegativeOrder;
+  UINT      PositiveOrder;
+  LPSTR     lpCurrencySymbol;
+} CURRENCYFMTA;
+
+typedef struct _currencyfmtW {
   UINT      NumDigits;
   UINT      LeadingZero;
   UINT      Grouping;
-  LPTSTR    lpDecimalSep;
-  LPTSTR    lpThousandSep;
+  LPWSTR    lpDecimalSep;
+  LPWSTR    lpThousandSep;
   UINT      NegativeOrder;
   UINT      PositiveOrder;
-  LPTSTR    lpCurrencySymbol;
-} CURRENCYFMT;
+  LPWSTR    lpCurrencySymbol;
+} CURRENCYFMTW;
+
+typedef_tident(CURRENCYFMT)
+
+typedef struct _SERVICE_DESCRIPTIONA {
+    LPSTR       lpDescription;
+} SERVICE_DESCRIPTIONA, *LPSERVICE_DESCRIPTIONA;
+typedef struct _SERVICE_DESCRIPTIONW {
+    LPWSTR      lpDescription;
+} SERVICE_DESCRIPTIONW, *LPSERVICE_DESCRIPTIONW;
+typedef_tident(SERVICE_DESCRIPTION)
+typedef_tident(LPSERVICE_DESCRIPTION)
+
+typedef enum _SC_ACTION_TYPE {
+    SC_ACTION_NONE = 0,
+    SC_ACTION_RESTART = 1,
+    SC_ACTION_REBOOT = 2,
+    SC_ACTION_RUN_COMMAND = 3
+} SC_ACTION_TYPE;
+
+typedef struct _SC_ACTION {
+    SC_ACTION_TYPE  Type;
+    DWORD           Delay;
+} SC_ACTION, *LPSC_ACTION;
+
+typedef struct _SERVICE_FAILURE_ACTIONSA {
+    DWORD       dwResetPeriod;
+    LPSTR       lpRebootMsg;
+    LPSTR       lpCommand;
+    DWORD       cActions;
+    SC_ACTION * lpsaActions;
+} SERVICE_FAILURE_ACTIONSA, *LPSERVICE_FAILURE_ACTIONSA;
+
+typedef struct _SERVICE_FAILURE_ACTIONSW {
+    DWORD       dwResetPeriod;
+    LPWSTR      lpRebootMsg;
+    LPWSTR      lpCommand;
+    DWORD       cActions;
+    SC_ACTION * lpsaActions;
+} SERVICE_FAILURE_ACTIONSW, *LPSERVICE_FAILURE_ACTIONSW;
+
+typedef_tident(SERVICE_FAILURE_ACTIONS)
+typedef_tident(LPSERVICE_FAILURE_ACTIONS)
+
+typedef struct tagACTCTXA {
+    ULONG       cbSize;
+    DWORD       dwFlags;
+    LPCSTR      lpSource;
+    USHORT      wProcessorArchitecture;
+    LANGID      wLangId;
+    LPCSTR      lpAssemblyDirectory;
+    LPCSTR      lpResourceName;
+    LPCSTR      lpApplicationName;
+    HMODULE     hModule;
+} ACTCTXA, *PACTCTXA;
+
+typedef struct tagACTCTXW {
+    ULONG       cbSize;
+    DWORD       dwFlags;
+    LPCWSTR     lpSource;
+    USHORT      wProcessorArchitecture;
+    LANGID      wLangId;
+    LPCWSTR     lpAssemblyDirectory;
+    LPCWSTR     lpResourceName;
+    LPCWSTR     lpApplicationName;
+    HMODULE     hModule;
+} ACTCTXW, *PACTCTXW;
+
+typedef struct _JOB_SET_ARRAY {
+    HANDLE JobHandle;
+    DWORD MemberLevel;
+    DWORD Flags;
+} JOB_SET_ARRAY, *PJOB_SET_ARRAY;
+
+typedef struct _MEMORYSTATUSEX {
+    DWORD dwLength;
+    DWORD dwMemoryLoad;
+    DWORDLONG ullTotalPhys;
+    DWORDLONG ullAvailPhys;
+    DWORDLONG ullTotalPageFile;
+    DWORDLONG ullAvailPageFile;
+    DWORDLONG ullTotalVirtual;
+    DWORDLONG ullAvailVirtual;
+    DWORDLONG ullAvailExtendedVirtual;
+} MEMORYSTATUSEX, *LPMEMORYSTATUSEX;
+
+typedef const ACTCTXA *PCACTCTXA;
+typedef const ACTCTXW *PCACTCTXW;
+typedef_tident(ACTCTX)
+typedef_tident(PACTCTX)
+
+typedef struct _TRIVERTEX
+{
+    LONG    x;
+    LONG    y;
+    COLOR16 Red;
+    COLOR16 Green;
+    COLOR16 Blue;
+    COLOR16 Alpha;
+}TRIVERTEX,*PTRIVERTEX,*LPTRIVERTEX;
 
 typedef struct tagCURSORSHAPE {
   int     xHotSpot;
@@ -797,9 +1205,15 @@ typedef struct tagCWPSTRUCT {
   HWND    hwnd;
 } CWPSTRUCT;
 
-typedef struct _DATATYPES_INFO_1 {
-  LPTSTR pName;
-} DATATYPES_INFO_1;
+typedef struct _DATATYPES_INFO_1A {
+  LPSTR  pName;
+} DATATYPES_INFO_1A;
+
+typedef struct _DATATYPES_INFO_1W {
+  LPWSTR pName;
+} DATATYPES_INFO_1W;
+
+typedef_tident(DATATYPES_INFO_1)
 
 typedef struct {
   unsigned short bAppReturnCode:8,
@@ -1000,7 +1414,7 @@ typedef struct {
   short cx;
   short cy;
   WORD  id;
-} DLGITEMTEMPLATE PACKED;
+} PACKED DLGITEMTEMPLATE;
 
 typedef DLGITEMTEMPLATE *LPDLGITEMTEMPLATE;
 typedef DLGITEMTEMPLATE *PDLGITEMTEMPLATE;
@@ -1013,32 +1427,61 @@ typedef struct {
   short y;
   short cx;
   short cy;
-} DLGTEMPLATE PACKED;
+} PACKED DLGTEMPLATE;
 
 typedef DLGTEMPLATE *LPDLGTEMPLATE;
 typedef const DLGTEMPLATE *LPCDLGTEMPLATE;
 
-typedef struct _DOC_INFO_1 {
-  LPTSTR pDocName;
-  LPTSTR pOutputFile;
-  LPTSTR pDatatype;
-} DOC_INFO_1;
+typedef struct _DOC_INFO_1A {
+  LPSTR  pDocName;
+  LPSTR  pOutputFile;
+  LPSTR  pDatatype;
+} DOC_INFO_1A;
+
+typedef struct _DOC_INFO_1W {
+  LPWSTR pDocName;
+  LPWSTR pOutputFile;
+  LPWSTR pDatatype;
+} DOC_INFO_1W;
+
+typedef_tident(DOC_INFO_1)
 
-typedef struct _DOC_INFO_2 {
-  LPTSTR pDocName;
-  LPTSTR pOutputFile;
-  LPTSTR pDatatype;
+typedef struct _DOC_INFO_2A {
+  LPSTR  pDocName;
+  LPSTR  pOutputFile;
+  LPSTR  pDatatype;
   DWORD  dwMode;
   DWORD  JobId;
-} DOC_INFO_2;
+} DOC_INFO_2A;
+
+typedef struct _DOC_INFO_2W {
+  LPWSTR pDocName;
+  LPWSTR pOutputFile;
+  LPWSTR pDatatype;
+  DWORD  dwMode;
+  DWORD  JobId;
+} DOC_INFO_2W;
+
+typedef_tident(DOC_INFO_2)
+
+typedef struct {
+  int     cbSize;
+  LPCSTR  lpszDocName;
+  LPCSTR  lpszOutput;
+  LPCSTR  lpszDatatype;
+  DWORD   fwType;
+} DOCINFOA, *PDOCINFOA;
 
 typedef struct {
   int     cbSize;
-  LPCTSTR lpszDocName;
-  LPCTSTR lpszOutput;
-  LPCTSTR lpszDatatype;
+  LPCWSTR lpszDocName;
+  LPCWSTR lpszOutput;
+  LPCWSTR lpszDatatype;
   DWORD   fwType;
-} DOCINFO, *PDOCINFO;
+} DOCINFOW, *PDOCINFOW;
+
+typedef_tident(DOCINFO)
+typedef_tident(PDOCINFO)
 
 typedef struct {
   UINT uNotification;
@@ -1068,31 +1511,93 @@ typedef struct {
 
 
 
-typedef struct _DRIVER_INFO_1 {
-  LPTSTR pName;
-} DRIVER_INFO_1;
+typedef struct _EXTTEXTMETRIC
+    {
+    short   emSize;
+    short   emPointSize;
+    short   emOrientation;
+    short   emMasterHeight;
+    short   emMinScale;
+    short   emMaxScale;
+    short   emMasterUnits;
+    short   emCapHeight;
+    short   emXHeight;
+    short   emLowerCaseAscent;
+    short   emLowerCaseDescent;
+    short   emSlant;
+    short   emSuperScript;
+    short   emSubScript;
+    short   emSuperScriptSize;
+    short   emSubScriptSize;
+    short   emUnderlineOffset;
+    short   emUnderlineWidth;
+    short   emDoubleUpperUnderlineOffset;
+    short   emDoubleLowerUnderlineOffset;
+    short   emDoubleUpperUnderlineWidth;
+    short   emDoubleLowerUnderlineWidth;
+    short   emStrikeOutOffset;
+    short   emStrikeOutWidth;
+    WORD    emKernPairs;
+    WORD    emKernTracks;
+} EXTTEXTMETRIC, *PEXTTEXTMETRIC;
+
+typedef struct _DRIVER_INFO_1A {
+  LPSTR  pName;
+} DRIVER_INFO_1A;
+
+typedef struct _DRIVER_INFO_1W {
+  LPWSTR pName;
+} DRIVER_INFO_1W;
+
+typedef_tident(DRIVER_INFO_1)
+
+typedef struct _DRIVER_INFO_2A {
+  DWORD  cVersion;
+  LPSTR  pName;
+  LPSTR  pEnvironment;
+  LPSTR  pDriverPath;
+  LPSTR  pDataFile;
+  LPSTR  pConfigFile;
+} DRIVER_INFO_2A;
+
+typedef struct _DRIVER_INFO_2W {
+  DWORD  cVersion;
+  LPWSTR pName;
+  LPWSTR pEnvironment;
+  LPWSTR pDriverPath;
+  LPWSTR pDataFile;
+  LPWSTR pConfigFile;
+} DRIVER_INFO_2W;
+
+typedef_tident(DRIVER_INFO_2)
 
-typedef struct _DRIVER_INFO_2 {
+typedef struct _DRIVER_INFO_3A {
   DWORD  cVersion;
-  LPTSTR pName;
-  LPTSTR pEnvironment;
-  LPTSTR pDriverPath;
-  LPTSTR pDataFile;
-  LPTSTR pConfigFile;
-} DRIVER_INFO_2;
-
-typedef struct _DRIVER_INFO_3 {
+  LPSTR  pName;
+  LPSTR  pEnvironment;
+  LPSTR  pDriverPath;
+  LPSTR  pDataFile;
+  LPSTR  pConfigFile;
+  LPSTR  pHelpFile;
+  LPSTR  pDependentFiles;
+  LPSTR  pMonitorName;
+  LPSTR  pDefaultDataType;
+} DRIVER_INFO_3A;
+
+typedef struct _DRIVER_INFO_3W {
   DWORD  cVersion;
-  LPTSTR pName;
-  LPTSTR pEnvironment;
-  LPTSTR pDriverPath;
-  LPTSTR pDataFile;
-  LPTSTR pConfigFile;
-  LPTSTR pHelpFile;
-  LPTSTR pDependentFiles;
-  LPTSTR pMonitorName;
-  LPTSTR pDefaultDataType;
-} DRIVER_INFO_3;
+  LPWSTR pName;
+  LPWSTR pEnvironment;
+  LPWSTR pDriverPath;
+  LPWSTR pDataFile;
+  LPWSTR pConfigFile;
+  LPWSTR pHelpFile;
+  LPWSTR pDependentFiles;
+  LPWSTR pMonitorName;
+  LPWSTR pDefaultDataType;
+} DRIVER_INFO_3W;
+
+typedef_tident(DRIVER_INFO_3)
 
 typedef struct _editstream {
   DWORD dwCookie;
@@ -1171,7 +1676,21 @@ typedef struct tagEMRCREATEBRUSHINDIRECT
 typedef LONG LCSCSTYPE;
 typedef LONG LCSGAMUTMATCH;
 
-typedef struct tagLOGCOLORSPACE {
+typedef struct tagLOGCOLORSPACEA {
+  DWORD         lcsSignature;
+  DWORD         lcsVersion;
+  DWORD         lcsSize;
+
+  LCSCSTYPE     lcsCSType;
+  LCSGAMUTMATCH lcsIntent;
+  CIEXYZTRIPLE  lcsEndpoints;
+  DWORD         lcsGammaRed;
+  DWORD         lcsGammaGreen;
+  DWORD         lcsGammaBlue;
+  CHAR          lcsFilename[MAX_PATH];
+} LOGCOLORSPACEA, *LPLOGCOLORSPACEA;
+
+typedef struct tagLOGCOLORSPACEW {
   DWORD         lcsSignature;
   DWORD         lcsVersion;
   DWORD         lcsSize;
@@ -1182,15 +1701,27 @@ typedef struct tagLOGCOLORSPACE {
   DWORD         lcsGammaRed;
   DWORD         lcsGammaGreen;
   DWORD         lcsGammaBlue;
-  TCHAR         lcsFilename[MAX_PATH];
-} LOGCOLORSPACE, *LPLOGCOLORSPACE;
+  WCHAR         lcsFilename[MAX_PATH];
+} LOGCOLORSPACEW, *LPLOGCOLORSPACEW;
 
-typedef struct tagEMRCREATECOLORSPACE
+typedef_tident(LOGCOLORSPACE)
+
+typedef struct tagEMRCREATECOLORSPACEA
+{
+  EMR            emr;
+  DWORD          ihCS;
+  LOGCOLORSPACEA lcs;
+} EMRCREATECOLORSPACEA, *PEMRCREATECOLORSPACEA;
+
+typedef struct tagEMRCREATECOLORSPACEW
 {
-  EMR           emr;
-  DWORD         ihCS;
-  LOGCOLORSPACE lcs;
-} EMRCREATECOLORSPACE, *PEMRCREATECOLORSPACE;
+  EMR            emr;
+  DWORD          ihCS;
+  LOGCOLORSPACEW lcs;
+} EMRCREATECOLORSPACEW, *PEMRCREATECOLORSPACEW;
+
+typedef_tident(EMRCREATECOLORSPACE)
+typedef_tident(PEMRCREATECOLORSPACE)
 
 typedef struct tagEMRCREATEDIBPATTERNBRUSHPT
 {
@@ -1283,24 +1814,40 @@ typedef struct tagPANOSE {
   BYTE bXHeight;
 } PANOSE;
 
-typedef struct tagEXTLOGFONT {
-    LOGFONT elfLogFont;
-    BCHAR    elfFullName[LF_FULLFACESIZE];
-    BCHAR    elfStyle[LF_FACESIZE];
-    DWORD   elfVersion;
-    DWORD   elfStyleSize;
-    DWORD   elfMatch;
-    DWORD   elfReserved;
-    BYTE    elfVendorId[ELF_VENDOR_SIZE];
-    DWORD   elfCulture;
-    PANOSE  elfPanose;
-} EXTLOGFONT;
+typedef struct tagEXTLOGFONTA {
+    LOGFONTA elfLogFont;
+    CHAR     elfFullName[LF_FULLFACESIZE];
+    CHAR     elfStyle[LF_FACESIZE];
+    DWORD    elfVersion;
+    DWORD    elfStyleSize;
+    DWORD    elfMatch;
+    DWORD    elfReserved;
+    BYTE     elfVendorId[ELF_VENDOR_SIZE];
+    DWORD    elfCulture;
+    PANOSE   elfPanose;
+} EXTLOGFONTA, *LPEXTLOGFONTA;
+
+typedef struct tagEXTLOGFONTW {
+    LOGFONTW elfLogFont;
+    WCHAR    elfFullName[LF_FULLFACESIZE];
+    WCHAR    elfStyle[LF_FACESIZE];
+    DWORD    elfVersion;
+    DWORD    elfStyleSize;
+    DWORD    elfMatch;
+    DWORD    elfReserved;
+    BYTE     elfVendorId[ELF_VENDOR_SIZE];
+    DWORD    elfCulture;
+    PANOSE   elfPanose;
+} EXTLOGFONTW, *LPEXTLOGFONTW;
+
+typedef_tident(EXTLOGFONT)
+typedef_tident(LPEXTLOGFONT)
 
 typedef struct tagEMREXTCREATEFONTINDIRECTW
 {
   EMR         emr;
   DWORD       ihFont;
-  EXTLOGFONT  elfw;
+  EXTLOGFONTW elfw;
 } EMREXTCREATEFONTINDIRECTW,
     PEMREXTCREATEFONTINDIRECTW;
 
@@ -1818,6 +2365,10 @@ typedef struct tagENHMETAHEADER {
   DWORD nPalEntries;
   SIZEL szlDevice;
   SIZEL szlMillimeters;
+  DWORD cbPixelFormat;
+  DWORD offPixelFormat;
+  DWORD bOpenGL;
+  SIZEL szlMicrometers;
 } ENHMETAHEADER, *LPENHMETAHEADER;
 
 typedef struct tagENHMETARECORD {
@@ -1844,6 +2395,18 @@ typedef struct _SERVICE_STATUS {
   DWORD dwWaitHint;
 } SERVICE_STATUS, *LPSERVICE_STATUS;
 
+typedef struct _SERVICE_STATUS_PROCESS {
+    DWORD   dwServiceType;
+    DWORD   dwCurrentState;
+    DWORD   dwControlsAccepted;
+    DWORD   dwWin32ExitCode;
+    DWORD   dwServiceSpecificExitCode;
+    DWORD   dwCheckPoint;
+    DWORD   dwWaitHint;
+    DWORD   dwProcessId;
+    DWORD   dwServiceFlags;
+} SERVICE_STATUS_PROCESS, *LPSERVICE_STATUS_PROCESS;
+
 typedef struct _ENUM_SERVICE_STATUSA {
   LPSTR lpServiceName;
   LPSTR lpDisplayName;
@@ -1856,26 +2419,77 @@ typedef struct _ENUM_SERVICE_STATUSW {
   SERVICE_STATUS ServiceStatus;
 } ENUM_SERVICE_STATUSW, *LPENUM_SERVICE_STATUSW;
 
-#ifdef UNICODE
-#define ENUM_SERVICE_STATUS ENUM_SERVICE_STATUSW
-#define LPENUM_SERVICE_STATUS LPENUM_SERVICE_STATUSW
-#else
-#define ENUM_SERVICE_STATUS ENUM_SERVICE_STATUSA
-#define LPENUM_SERVICE_STATUS LPENUM_SERVICE_STATUSA
-#endif
+typedef_tident(ENUM_SERVICE_STATUS)
+typedef_tident(LPENUM_SERVICE_STATUS)
+
+typedef struct _ENUM_SERVICE_STATUS_PROCESSA {
+    LPSTR                     lpServiceName;
+    LPSTR                     lpDisplayName;
+    SERVICE_STATUS_PROCESS    ServiceStatusProcess;
+} ENUM_SERVICE_STATUS_PROCESSA, *LPENUM_SERVICE_STATUS_PROCESSA;
+
+typedef struct _ENUM_SERVICE_STATUS_PROCESSW {
+    LPWSTR                    lpServiceName;
+    LPWSTR                    lpDisplayName;
+    SERVICE_STATUS_PROCESS    ServiceStatusProcess;
+} ENUM_SERVICE_STATUS_PROCESSW, *LPENUM_SERVICE_STATUS_PROCESSW;
+
+typedef_tident(ENUM_SERVICE_STATUS_PROCESS)
+typedef_tident(LPENUM_SERVICE_STATUS_PROCESS)
+
+typedef struct tagENUMLOGFONTA {
+  LOGFONTA elfLogFont;
+  CHAR     elfFullName[LF_FULLFACESIZE];
+  CHAR     elfStyle[LF_FACESIZE];
+} ENUMLOGFONTA, *LPENUMLOGFONTA;
+
+typedef struct tagENUMLOGFONTW {
+  LOGFONTW elfLogFont;
+  WCHAR    elfFullName[LF_FULLFACESIZE];
+  WCHAR    elfStyle[LF_FACESIZE];
+} ENUMLOGFONTW, *LPENUMLOGFONTW;
+
+typedef_tident(ENUMLOGFONT)
+typedef_tident(LPENUMLOGFONT)
+
+typedef struct tagENUMLOGFONTEXA {
+  LOGFONTA elfLogFont;
+  CHAR     elfFullName[LF_FULLFACESIZE];
+  CHAR     elfStyle[LF_FACESIZE];
+  CHAR     elfScript[LF_FACESIZE];
+} ENUMLOGFONTEXA, *LPENUMLOGFONTEXA;
+
+typedef struct tagENUMLOGFONTEXW {
+  LOGFONTW elfLogFont;
+  WCHAR    elfFullName[LF_FULLFACESIZE];
+  WCHAR    elfStyle[LF_FACESIZE];
+  WCHAR    elfScript[LF_FACESIZE];
+} ENUMLOGFONTEXW, *LPENUMLOGFONTEXW;
+
+typedef_tident(ENUMLOGFONTEX)
+typedef_tident(LPENUMLOGFONTEX)
+
+typedef struct tagDESIGNVECTOR
+{
+    DWORD  dvReserved;
+    DWORD  dvNumAxes;
+    LONG   dvValues[MM_MAX_NUMAXES];
+} DESIGNVECTOR, *PDESIGNVECTOR, FAR *LPDESIGNVECTOR;
 
-typedef struct tagENUMLOGFONT {
-  LOGFONT elfLogFont;
-  BCHAR    elfFullName[LF_FULLFACESIZE];
-  BCHAR    elfStyle[LF_FACESIZE];
-} ENUMLOGFONT;
+typedef struct tagENUMLOGFONTEXDVA
+{
+    ENUMLOGFONTEXA elfEnumLogfontEx;
+    DESIGNVECTOR   elfDesignVector;
+} ENUMLOGFONTEXDVA, *PENUMLOGFONTEXDVA, FAR *LPENUMLOGFONTEXDVA;
+typedef struct tagENUMLOGFONTEXDVW
+{
+    ENUMLOGFONTEXW elfEnumLogfontEx;
+    DESIGNVECTOR   elfDesignVector;
+} ENUMLOGFONTEXDVW, *PENUMLOGFONTEXDVW, FAR *LPENUMLOGFONTEXDVW;
 
-typedef struct tagENUMLOGFONTEX {
-  LOGFONT  elfLogFont;
-  BCHAR  elfFullName[LF_FULLFACESIZE];
-  BCHAR  elfStyle[LF_FACESIZE];
-  BCHAR  elfScript[LF_FACESIZE];
-} ENUMLOGFONTEX;
+typedef_tident(ENUMLOGFONTEXDV)
+typedef_tident(PENUMLOGFONTEXDV)
+typedef_tident(LPENUMLOGFONTEXDV)
 
 typedef struct _EVENTLOGRECORD {
   DWORD  Length;
@@ -1971,14 +2585,31 @@ typedef struct {
   HWND         hwndOwner;
   HINSTANCE    hInstance;
   DWORD        Flags;
-  LPTSTR        lpstrFindWhat;
-  LPTSTR        lpstrReplaceWith;
+  LPSTR        lpstrFindWhat;
+  LPSTR        lpstrReplaceWith;
+  WORD         wFindWhatLen;
+  WORD         wReplaceWithLen;
+  LPARAM       lCustData;
+  LPFRHOOKPROC lpfnHook;
+  LPCSTR       lpTemplateName;
+} FINDREPLACEA, *LPFINDREPLACEA;
+
+typedef struct {
+  DWORD        lStructSize;
+  HWND         hwndOwner;
+  HINSTANCE    hInstance;
+  DWORD        Flags;
+  LPWSTR       lpstrFindWhat;
+  LPWSTR       lpstrReplaceWith;
   WORD         wFindWhatLen;
   WORD         wReplaceWithLen;
-  LPARAM        lCustData;
+  LPARAM       lCustData;
   LPFRHOOKPROC lpfnHook;
-  LPCTSTR       lpTemplateName;
-} FINDREPLACE, *LPFINDREPLACE;
+  LPCWSTR      lpTemplateName;
+} FINDREPLACEW, *LPFINDREPLACEW;
+
+typedef_tident(FINDREPLACE)
+typedef_tident(LPFINDREPLACE)
 
 typedef struct _findtext {
   CHARRANGE chrg;
@@ -1991,27 +2622,55 @@ typedef struct _findtextex {
   CHARRANGE chrgText;
 } FINDTEXTEX;
 
-typedef struct _FMS_GETDRIVEINFO {
+typedef struct _FMS_GETDRIVEINFOA {
+  DWORD dwTotalSpace;
+  DWORD dwFreeSpace;
+  CHAR   szPath[260];
+  CHAR   szVolume[14];
+  CHAR   szShare[128];
+} FMS_GETDRIVEINFOA;
+
+typedef struct _FMS_GETDRIVEINFOW {
   DWORD dwTotalSpace;
   DWORD dwFreeSpace;
-  TCHAR  szPath[260];
-  TCHAR  szVolume[14];
-  TCHAR  szShare[128];
-} FMS_GETDRIVEINFO;
+  WCHAR  szPath[260];
+  WCHAR  szVolume[14];
+  WCHAR  szShare[128];
+} FMS_GETDRIVEINFOW;
+
+typedef_tident(FMS_GETDRIVEINFO)
+
+typedef struct _FMS_GETFILESELA {
+  FILETIME ftTime;
+  DWORD    dwSize;
+  BYTE     bAttr;
+  CHAR     szName[260];
+} FMS_GETFILESELA;
 
-typedef struct _FMS_GETFILESEL {
+typedef struct _FMS_GETFILESELW {
   FILETIME ftTime;
   DWORD    dwSize;
   BYTE     bAttr;
-  TCHAR     szName[260];
-} FMS_GETFILESEL;
+  WCHAR     szName[260];
+} FMS_GETFILESELW;
+
+typedef_tident(FMS_GETFILESEL)
+
+typedef struct _FMS_LOADA {
+  DWORD dwSize;
+  CHAR  szMenuName[MENU_TEXT_LEN];
+  HMENU hMenu;
+  UINT  wMenuDelta;
+} FMS_LOADA;
 
-typedef struct _FMS_LOAD {
+typedef struct _FMS_LOADW {
   DWORD dwSize;
-  TCHAR  szMenuName[MENU_TEXT_LEN];
+  WCHAR  szMenuName[MENU_TEXT_LEN];
   HMENU hMenu;
   UINT  wMenuDelta;
-} FMS_LOAD;
+} FMS_LOADW;
+
+typedef_tident(FMS_LOAD)
 
 typedef struct _FMS_TOOLBARLOAD {
   DWORD        dwSize;
@@ -2023,12 +2682,21 @@ typedef struct _FMS_TOOLBARLOAD {
 } FMS_TOOLBARLOAD;
 
 
-typedef struct _FORM_INFO_1 {
-  DWORD Flags;
-  LPTSTR pName;
+typedef struct _FORM_INFO_1A {
+  DWORD  Flags;
+  LPSTR  pName;
+  SIZEL  Size;
+  RECTL  ImageableArea;
+} FORM_INFO_1A;
+
+typedef struct _FORM_INFO_1W {
+  DWORD  Flags;
+  LPWSTR pName;
   SIZEL  Size;
   RECTL  ImageableArea;
-} FORM_INFO_1;
+} FORM_INFO_1W;
+
+typedef_tident(FORM_INFO_1)
 
 typedef struct _FORMAT_PARAMETERS {
   MEDIA_TYPE MediaType;
@@ -2046,17 +2714,31 @@ typedef struct _formatrange {
   CHARRANGE chrg;
 } FORMATRANGE;
 
-typedef struct tagGCP_RESULTS {
+typedef struct tagGCP_RESULTSA {
+  DWORD  lStructSize;
+  LPSTR  lpOutString;
+  UINT  *lpOrder;
+  INT  *lpDx;
+  INT  *lpCaretPos;
+  LPSTR lpClass;
+  UINT  *lpGlyphs;
+  UINT  nGlyphs;
+  UINT  nMaxFit;
+} GCP_RESULTSA, *LPGCP_RESULTSA;
+
+typedef struct tagGCP_RESULTSW {
   DWORD  lStructSize;
-  LPTSTR  lpOutString;
+  LPWSTR  lpOutString;
   UINT  *lpOrder;
   INT  *lpDx;
   INT  *lpCaretPos;
-  LPTSTR lpClass;
+  LPWSTR lpClass;
   UINT  *lpGlyphs;
   UINT  nGlyphs;
   UINT  nMaxFit;
-} GCP_RESULTS, *LPGCP_RESULTS;
+} GCP_RESULTSW, *LPGCP_RESULTSW;
+
+typedef_tident(GCP_RESULTS)
 
 
 typedef struct _GLYPHMETRICS {
@@ -2077,15 +2759,27 @@ typedef struct _HD_HITTESTINFO {
   int iItem;
 } HD_HITTESTINFO;
 
-typedef struct _HD_ITEM {
+typedef struct _HD_ITEMA {
+  UINT    mask;
+  int     cxy;
+  LPSTR   pszText;
+  HBITMAP hbm;
+  int     cchTextMax;
+  int     fmt;
+  LPARAM  lParam;
+} HD_ITEMA;
+
+typedef struct _HD_ITEMW {
   UINT    mask;
   int     cxy;
-  LPTSTR   pszText;
+  LPWSTR  pszText;
   HBITMAP hbm;
   int     cchTextMax;
   int     fmt;
   LPARAM  lParam;
-} HD_ITEM;
+} HD_ITEMW;
+
+typedef_tident(HD_ITEM)
 
 typedef struct _WINDOWPOS {
   HWND hwnd;
@@ -2102,12 +2796,21 @@ typedef struct _HD_LAYOUT {
   WINDOWPOS  * pwpos;
 } HD_LAYOUT;
 
-typedef struct _HD_NOTIFY {
-  NMHDR   hdr;
-  int     iItem;
-  int     iButton;
-  HD_ITEM  * pitem;
-} HD_NOTIFY;
+typedef struct _HD_NOTIFYA {
+  NMHDR     hdr;
+  int       iItem;
+  int       iButton;
+  HD_ITEMA *pitem;
+} HD_NOTIFYA;
+
+typedef struct _HD_NOTIFYW {
+  NMHDR     hdr;
+  int       iItem;
+  int       iButton;
+  HD_ITEMW *pitem;
+} HD_NOTIFYW;
+
+typedef_tident(HD_NOTIFY)
 
 typedef  struct  tagHELPINFO {
   UINT   cbSize;
@@ -2118,27 +2821,21 @@ typedef  struct  tagHELPINFO {
   POINT  MousePos;
 } HELPINFO,   *LPHELPINFO;
 
-typedef struct {
+typedef struct tagMULTIKEYHELPA {
     DWORD   mkSize;
     CHAR    mkKeyList;
     CHAR    szKeyphrase[1];
 } MULTIKEYHELPA, *PMULTIKEYHELPA, *LPMULTIKEYHELPA;
 
-typedef struct {
+typedef struct tagMULTIKEYHELPW {
     DWORD   mkSize;
     WCHAR   mkKeyList;
     WCHAR   szKeyphrase[1];
 } MULTIKEYHELPW, *PMULTIKEYHELPW, *LPMULTIKEYHELPW;
 
-typedef struct {
-  int   wStructSize;
-  int   x;
-  int   y;
-  int   dx;
-  int   dy;
-  int   wMax;
-  TCHAR rgchMember[2];
-} HELPWININFO;
+typedef_tident(MULTIKEYHELP)
+typedef_tident(PMULTIKEYHELP)
+typedef_tident(LPMULTIKEYHELP)
 
 typedef struct {
        int wStructSize;
@@ -2160,12 +2857,24 @@ typedef struct {
        WCHAR rgchMember[2];
 } HELPWININFOW, *PHELPWININFOW, *LPHELPWININFOW;
 
+typedef_tident(HELPWININFO)
+typedef_tident(PHELPWININFO)
+typedef_tident(LPHELPWININFO)
+
+typedef struct tagHIGHCONTRASTA {
+  UINT cbSize;
+  DWORD dwFlags;
+  LPSTR lpszDefaultScheme;
+} HIGHCONTRASTA, *LPHIGHCONTRASTA;
 
-typedef struct tagHIGHCONTRAST {
+typedef struct tagHIGHCONTRASTW {
   UINT cbSize;
   DWORD dwFlags;
-  LPTSTR lpszDefaultScheme;
-} HIGHCONTRAST,  * LPHIGHCONTRAST;
+  LPWSTR lpszDefaultScheme;
+} HIGHCONTRASTW, *LPHIGHCONTRASTW;
+
+typedef_tident(HIGHCONTRAST)
+typedef_tident(LPHIGHCONTRAST)
 
 typedef struct tagHSZPAIR {
   HSZ hszSvc;
@@ -2180,13 +2889,24 @@ typedef struct _ICONINFO {
   HBITMAP hbmColor;
 } ICONINFO, *PICONINFO;
 
-typedef struct tagICONMETRICS {
-  UINT    cbSize;
-  int     iHorzSpacing;
-  int     iVertSpacing;
-  int     iTitleWrap;
-  LOGFONT lfFont;
-} ICONMETRICS,   *LPICONMETRICS;
+typedef struct tagICONMETRICSA {
+  UINT     cbSize;
+  int      iHorzSpacing;
+  int      iVertSpacing;
+  int      iTitleWrap;
+  LOGFONTA lfFont;
+} ICONMETRICSA, *LPICONMETRICSA;
+
+typedef struct tagICONMETRICSW {
+  UINT     cbSize;
+  int      iHorzSpacing;
+  int      iVertSpacing;
+  int      iTitleWrap;
+  LOGFONTW lfFont;
+} ICONMETRICSW, *LPICONMETRICSW;
+
+typedef_tident(ICONMETRICS)
+typedef_tident(LPICONMETRICS)
 
 typedef struct _IMAGEINFO {
   HBITMAP hbmImage;
@@ -2196,36 +2916,54 @@ typedef struct _IMAGEINFO {
   RECT    rcImage;
 } IMAGEINFO;
 
-typedef struct _JOB_INFO_1 {
+typedef struct _JOB_INFO_1A {
+  DWORD  JobId;
+  LPSTR  pPrinterName;
+  LPSTR  pMachineName;
+  LPSTR  pUserName;
+  LPSTR  pDocument;
+  LPSTR  pDatatype;
+  LPSTR  pStatus;
+  DWORD  Status;
+  DWORD  Priority;
+  DWORD  Position;
+  DWORD  TotalPages;
+  DWORD  PagesPrinted;
+  SYSTEMTIME Submitted;
+} JOB_INFO_1A;
+
+typedef struct _JOB_INFO_1W {
   DWORD  JobId;
-  LPTSTR pPrinterName;
-  LPTSTR pMachineName;
-  LPTSTR pUserName;
-  LPTSTR pDocument;
-  LPTSTR pDatatype;
-  LPTSTR pStatus;
+  LPWSTR pPrinterName;
+  LPWSTR pMachineName;
+  LPWSTR pUserName;
+  LPWSTR pDocument;
+  LPWSTR pDatatype;
+  LPWSTR pStatus;
   DWORD  Status;
   DWORD  Priority;
   DWORD  Position;
   DWORD  TotalPages;
   DWORD  PagesPrinted;
   SYSTEMTIME Submitted;
-} JOB_INFO_1;
+} JOB_INFO_1W;
+
+typedef_tident(JOB_INFO_1)
 
 #if 0
-typedef struct _JOB_INFO_2 {
+typedef struct _JOB_INFO_2A {
   DWORD      JobId;
-  LPTSTR     pPrinterName;
-  LPTSTR     pMachineName;
-  LPTSTR     pUserName;
-  LPTSTR     pDocument;
-  LPTSTR     pNotifyName;
-  LPTSTR     pDatatype;
-  LPTSTR     pPrintProcessor;
-  LPTSTR     pParameters;
-  LPTSTR     pDriverName;
+  LPSTR      pPrinterName;
+  LPSTR      pMachineName;
+  LPSTR      pUserName;
+  LPSTR      pDocument;
+  LPSTR      pNotifyName;
+  LPSTR      pDatatype;
+  LPSTR      pPrintProcessor;
+  LPSTR      pParameters;
+  LPSTR      pDriverName;
   LPDEVMODE  pDevMode;
-  LPTSTR     pStatus;
+  LPSTR      pStatus;
   PSECURITY_DESCRIPTOR pSecurityDescriptor;
   DWORD      Status;
   DWORD      Priority;
@@ -2237,8 +2975,36 @@ typedef struct _JOB_INFO_2 {
   SYSTEMTIME Submitted;
   DWORD      Time;
   DWORD      PagesPrinted ;
-} JOB_INFO_2;
-#endif
+} JOB_INFO_2A;
+
+typedef struct _JOB_INFO_2W {
+  DWORD      JobId;
+  LPWSTR     pPrinterName;
+  LPWSTR     pMachineName;
+  LPWSTR     pUserName;
+  LPWSTR     pDocument;
+  LPWSTR     pNotifyName;
+  LPWSTR     pDatatype;
+  LPWSTR     pPrintProcessor;
+  LPWSTR     pParameters;
+  LPWSTR     pDriverName;
+  LPDEVMODE  pDevMode;
+  LPWSTR     pStatus;
+  PSECURITY_DESCRIPTOR pSecurityDescriptor;
+  DWORD      Status;
+  DWORD      Priority;
+  DWORD      Position;
+  DWORD      StartTime;
+  DWORD      UntilTime;
+  DWORD      TotalPages;
+  DWORD      Size;
+  SYSTEMTIME Submitted;
+  DWORD      Time;
+  DWORD      PagesPrinted ;
+} JOB_INFO_2W;
+
+typedef_tident(JOB_INFO_2)
+#endif/*0*/
 
 typedef struct tagKERNINGPAIR {
   WORD wFirst;
@@ -2251,30 +3017,6 @@ typedef struct _LANA_ENUM {
   UCHAR lana[MAX_LANA];
 } LANA_ENUM;
 
-typedef struct _LDT_ENTRY {
-  WORD LimitLow;
-  WORD BaseLow;
-  union {
-    struct {
-      BYTE BaseMid;
-      BYTE Flags1;
-      BYTE Flags2;
-      BYTE BaseHi;
-    } Bytes;
-    struct {
-      DWORD BaseMid : 8;
-      DWORD Type : 5;
-      DWORD Dpl : 2;
-      DWORD Pres : 1;
-      DWORD LimitHi : 4;
-      DWORD Sys : 1;
-      DWORD Reserved_0 : 1;
-      DWORD Default_Big : 1;
-      DWORD Granularity : 1;
-      DWORD BaseHi : 8;
-    } Bits;
-  } HighWord;
-} LDT_ENTRY, *PLDT_ENTRY, *LPLDT_ENTRY;
 
 typedef struct tagLOCALESIGNATURE {
   DWORD  lsUsb[4];
@@ -2299,39 +3041,81 @@ typedef long FXPT16DOT16,  * LPFXPT16DOT16;
 typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
 typedef LUID_AND_ATTRIBUTES_ARRAY *PLUID_AND_ATTRIBUTES_ARRAY;
 
-typedef struct _LV_COLUMN {
+typedef struct _LV_COLUMNA {
+  UINT mask;
+  int fmt;
+  int cx;
+  LPSTR pszText;
+  int cchTextMax;
+  int iSubItem;
+} LV_COLUMNA;
+
+typedef struct _LV_COLUMNW {
   UINT mask;
   int fmt;
   int cx;
-  LPTSTR pszText;
+  LPWSTR pszText;
   int cchTextMax;
   int iSubItem;
-} LV_COLUMN;
+} LV_COLUMNW;
+
+typedef_tident(LV_COLUMN)
+
+typedef struct _LV_ITEMA {
+  UINT   mask;
+  int    iItem;
+  int    iSubItem;
+  UINT   state;
+  UINT   stateMask;
+  LPSTR  pszText;
+  int    cchTextMax;
+  int    iImage;
+  LPARAM lParam;
+} LV_ITEMA;
 
-typedef struct _LV_ITEM {
+typedef struct _LV_ITEMW {
   UINT   mask;
   int    iItem;
   int    iSubItem;
   UINT   state;
   UINT   stateMask;
-  LPTSTR  pszText;
+  LPWSTR  pszText;
   int    cchTextMax;
   int    iImage;
   LPARAM lParam;
-} LV_ITEM;
+} LV_ITEMW;
+
+typedef_tident(LV_ITEM)
 
-typedef struct tagLV_DISPINFO {
-  NMHDR   hdr;
-  LV_ITEM item;
-} LV_DISPINFO;
+typedef struct tagLV_DISPINFOA {
+  NMHDR    hdr;
+  LV_ITEMA item;
+} LV_DISPINFOA;
+
+typedef struct tagLV_DISPINFOW {
+  NMHDR    hdr;
+  LV_ITEMW item;
+} LV_DISPINFOW;
+
+typedef_tident(LV_DISPINFO)
+
+typedef struct _LV_FINDINFOA {
+  UINT flags;
+  LPCSTR psz;
+  LPARAM lParam;
+  POINT pt;
+  UINT vkDirection;
+} LV_FINDINFOA;
 
-typedef struct _LV_FINDINFO {
+typedef struct _LV_FINDINFOW {
   UINT flags;
-  LPCTSTR psz;
+  LPCWSTR psz;
   LPARAM lParam;
   POINT pt;
   UINT vkDirection;
-} LV_FINDINFO;
+} LV_FINDINFOW;
+
+typedef_tident(LV_FINDINFO)
 
 typedef struct _LV_HITTESTINFO {
   POINT pt;
@@ -2352,9 +3136,9 @@ typedef struct _MAT2 {
   FIXED eM22;
 } MAT2, *LPMAT2;
 
-typedef struct tagMDICREATESTRUCT {
-  LPCTSTR szClass;
-  LPCTSTR szTitle;
+typedef struct tagMDICREATESTRUCTA {
+  LPCSTR  szClass;
+  LPCSTR  szTitle;
   HANDLE  hOwner;
   int     x;
   int     y;
@@ -2362,15 +3146,28 @@ typedef struct tagMDICREATESTRUCT {
   int     cy;
   DWORD   style;
   LPARAM  lParam;
-} MDICREATESTRUCT;
+} MDICREATESTRUCTA, *LPMDICREATESTRUCTA;
 
-typedef MDICREATESTRUCT *LPMDICREATESTRUCT;
-
-typedef struct tagMEASUREITEMSTRUCT {
-  UINT  CtlType;
-  UINT  CtlID;
-  UINT  itemID;
-  UINT  itemWidth;
+typedef struct tagMDICREATESTRUCTW {
+  LPCWSTR szClass;
+  LPCWSTR szTitle;
+  HANDLE  hOwner;
+  int     x;
+  int     y;
+  int     cx;
+  int     cy;
+  DWORD   style;
+  LPARAM  lParam;
+} MDICREATESTRUCTW, *LPMDICREATESTRUCTW;
+
+typedef_tident(MDICREATESTRUCT)
+typedef_tident(LPMDICREATESTRUCT)
+
+typedef struct tagMEASUREITEMSTRUCT {
+  UINT  CtlType;
+  UINT  CtlID;
+  UINT  itemID;
+  UINT  itemWidth;
   UINT  itemHeight;
   DWORD itemData;
 } MEASUREITEMSTRUCT, *LPMEASUREITEMSTRUCT;
@@ -2401,7 +3198,24 @@ typedef struct {
   DWORD dwHelpId;
 } MENUEX_TEMPLATE_ITEM;
 
-typedef struct tagMENUITEMINFO {
+
+typedef struct tagMENUITEMINFOA {
+  UINT    cbSize;
+  UINT    fMask;
+  UINT    fType;
+  UINT    fState;
+  UINT    wID;
+  HMENU   hSubMenu;
+  HBITMAP hbmpChecked;
+  HBITMAP hbmpUnchecked;
+  DWORD   dwItemData;
+  LPSTR   dwTypeData;
+  UINT    cch;
+  HBITMAP  hbmpItem;
+} MENUITEMINFOA, *LPMENUITEMINFOA;
+typedef CONST MENUITEMINFOA* LPCMENUITEMINFOA;
+
+typedef struct tagMENUITEMINFOW {
   UINT    cbSize;
   UINT    fMask;
   UINT    fType;
@@ -2411,10 +3225,15 @@ typedef struct tagMENUITEMINFO {
   HBITMAP hbmpChecked;
   HBITMAP hbmpUnchecked;
   DWORD   dwItemData;
-  LPTSTR  dwTypeData;
+  LPWSTR  dwTypeData;
   UINT    cch;
-} MENUITEMINFO, *LPMENUITEMINFO;
-typedef MENUITEMINFO CONST *LPCMENUITEMINFO;
+  HBITMAP  hbmpItem;
+} MENUITEMINFOW, *LPMENUITEMINFOW;
+typedef CONST MENUITEMINFOW* LPCMENUITEMINFOW;
+
+typedef_tident(MENUITEMINFO)
+typedef_tident(LPMENUITEMINFO)
+typedef_tident(LPCMENUITEMINFO)
 
 typedef struct {
   WORD mtOption;
@@ -2429,12 +3248,10 @@ typedef struct {
 typedef VOID MENUTEMPLATE, *LPMENUTEMPLATE;
 
 typedef struct tagMETAFILEPICT {
-#if 0
   LONG      mm;
   LONG      xExt;
   LONG      yExt;
   HMETAFILE hMF;
-#endif
 } METAFILEPICT, *PMETAFILEPICT, *LPMETAFILEPICT;
 
 typedef struct tagMETAHEADER {
@@ -2445,7 +3262,7 @@ typedef struct tagMETAHEADER {
   WORD  mtNoObjects;
   DWORD mtMaxRecord;
   WORD  mtNoParameters;
-} METAHEADER PACKED;
+} PACKED METAHEADER;
 
 typedef struct tagMETARECORD {
   DWORD rdSize;
@@ -2549,24 +3366,49 @@ typedef struct tagMONERRSTRUCT {
   HANDLE hTask;
 } MONERRSTRUCT;
 
-typedef struct tagMONHSZSTRUCT {
+typedef struct tagMONHSZSTRUCTA {
+  UINT   cb;
+  WINBOOL   fsAction;
+  DWORD  dwTime;
+  HSZ    hsz;
+  HANDLE hTask;
+  CHAR   str[1];
+} MONHSZSTRUCTA;
+
+typedef struct tagMONHSZSTRUCTW {
   UINT   cb;
   WINBOOL   fsAction;
   DWORD  dwTime;
   HSZ    hsz;
   HANDLE hTask;
-  TCHAR   str[1];
-} MONHSZSTRUCT;
+  WCHAR   str[1];
+} MONHSZSTRUCTW;
+
+typedef_tident(MONHSZSTRUCT)
+
+typedef struct _MONITOR_INFO_1A {
+  LPSTR  pName;
+} MONITOR_INFO_1A;
+
+typedef struct _MONITOR_INFO_1W {
+  LPWSTR pName;
+} MONITOR_INFO_1W;
+
+typedef_tident(MONITOR_INFO_1)
+
+typedef struct _MONITOR_INFO_2A {
+  LPSTR  pName;
+  LPSTR  pEnvironment ;
+  LPSTR  pDLLName ;
+} MONITOR_INFO_2A;
 
-typedef struct _MONITOR_INFO_1 {
-  LPTSTR pName;
-} MONITOR_INFO_1;
+typedef struct _MONITOR_INFO_2W {
+  LPWSTR pName;
+  LPWSTR pEnvironment ;
+  LPWSTR pDLLName ;
+} MONITOR_INFO_2W;
 
-typedef struct _MONITOR_INFO_2 {
-  LPTSTR pName;
-  LPTSTR pEnvironment ;
-  LPTSTR pDLLName ;
-} MONITOR_INFO_2;
+typedef_tident(MONITOR_INFO_2)
 
 typedef struct tagMONLINKSTRUCT {
   UINT   cb;
@@ -2642,12 +3484,6 @@ typedef struct _msgfilter {
   LPARAM lParam;
 } MSGFILTER;
 
-typedef struct tagMULTIKEYHELP {
-  DWORD  mkSize;
-  TCHAR  mkKeylist;
-  TCHAR  szKeyphrase[1];
-} MULTIKEYHELP;
-
 typedef struct _NAME_BUFFER {
   UCHAR name[NCBNAMSZ];
   UCHAR name_num;
@@ -2677,43 +3513,86 @@ typedef struct _NCCALCSIZE_PARAMS {
   PWINDOWPOS  lppos;
 } NCCALCSIZE_PARAMS;
 
-typedef struct _NDDESHAREINFO {
+typedef struct _NDDESHAREINFOA {
+  LONG   lRevision;
+  LPSTR  lpszShareName;
+  LONG   lShareType;
+  LPSTR  lpszAppTopicList;
+  LONG   fSharedFlag;
+  LONG   fService;
+  LONG   fStartAppFlag;
+  LONG   nCmdShow;
+  LONG   qModifyId[2];
+  LONG   cNumItems;
+  LPSTR  lpszItemList;
+}NDDESHAREINFOA;
+
+typedef struct _NDDESHAREINFOW {
   LONG   lRevision;
-  LPTSTR lpszShareName;
+  LPWSTR lpszShareName;
   LONG   lShareType;
-  LPTSTR lpszAppTopicList;
+  LPWSTR lpszAppTopicList;
   LONG   fSharedFlag;
   LONG   fService;
   LONG   fStartAppFlag;
   LONG   nCmdShow;
   LONG   qModifyId[2];
   LONG   cNumItems;
-  LPTSTR lpszItemList;
-}NDDESHAREINFO;
+  LPWSTR lpszItemList;
+}NDDESHAREINFOW;
+
+typedef_tident(NDDESHAREINFO)
+
+typedef struct _NETRESOURCEA {
+  DWORD  dwScope;
+  DWORD  dwType;
+  DWORD  dwDisplayType;
+  DWORD  dwUsage;
+  LPSTR  lpLocalName;
+  LPSTR  lpRemoteName;
+  LPSTR  lpComment;
+  LPSTR  lpProvider;
+} NETRESOURCEA, *LPNETRESOURCEA;
 
-typedef struct _NETRESOURCE {
+typedef struct _NETRESOURCEW {
   DWORD  dwScope;
   DWORD  dwType;
   DWORD  dwDisplayType;
   DWORD  dwUsage;
-  LPTSTR lpLocalName;
-  LPTSTR lpRemoteName;
-  LPTSTR lpComment;
-  LPTSTR lpProvider;
-} NETRESOURCE, *LPNETRESOURCE;
+  LPWSTR lpLocalName;
+  LPWSTR lpRemoteName;
+  LPWSTR lpComment;
+  LPWSTR lpProvider;
+} NETRESOURCEW, *LPNETRESOURCEW;
 
-typedef struct tagNEWCPLINFO {
+typedef_tident(NETRESOURCE)
+typedef_tident(LPNETRESOURCE)
+
+typedef struct tagNEWCPLINFOA {
+  DWORD dwSize;
+  DWORD dwFlags;
+  DWORD dwHelpContext;
+  LONG  lData;
+  HICON hIcon;
+  CHAR  szName[32];
+  CHAR  szInfo[64];
+  CHAR  szHelpFile[128];
+} NEWCPLINFOA;
+
+typedef struct tagNEWCPLINFOW {
   DWORD dwSize;
   DWORD dwFlags;
   DWORD dwHelpContext;
   LONG  lData;
   HICON hIcon;
-  TCHAR  szName[32];
-  TCHAR  szInfo[64];
-  TCHAR  szHelpFile[128];
-} NEWCPLINFO;
+  WCHAR  szName[32];
+  WCHAR  szInfo[64];
+  WCHAR  szHelpFile[128];
+} NEWCPLINFOW;
+
+typedef_tident(NEWCPLINFO)
 
-typedef struct tagNEWTEXTMETRIC {
+typedef struct tagNEWTEXTMETRICA {
   LONG   tmHeight;
   LONG   tmAscent;
   LONG   tmDescent;
@@ -2725,10 +3604,10 @@ typedef struct tagNEWTEXTMETRIC {
   LONG   tmOverhang;
   LONG   tmDigitizedAspectX;
   LONG   tmDigitizedAspectY;
-  BCHAR  tmFirstChar;
-  BCHAR  tmLastChar;
-  BCHAR  tmDefaultChar;
-  BCHAR  tmBreakChar;
+  CHAR   tmFirstChar;
+  CHAR   tmLastChar;
+  CHAR   tmDefaultChar;
+  CHAR   tmBreakChar;
   BYTE   tmItalic;
   BYTE   tmUnderlined;
   BYTE   tmStruckOut;
@@ -2738,13 +3617,48 @@ typedef struct tagNEWTEXTMETRIC {
   UINT   ntmSizeEM;
   UINT   ntmCellHeight;
   UINT   ntmAvgWidth;
-} NEWTEXTMETRIC;
+} NEWTEXTMETRICA;
 
+typedef struct tagNEWTEXTMETRICW {
+  LONG   tmHeight;
+  LONG   tmAscent;
+  LONG   tmDescent;
+  LONG   tmInternalLeading;
+  LONG   tmExternalLeading;
+  LONG   tmAveCharWidth;
+  LONG   tmMaxCharWidth;
+  LONG   tmWeight;
+  LONG   tmOverhang;
+  LONG   tmDigitizedAspectX;
+  LONG   tmDigitizedAspectY;
+  WCHAR  tmFirstChar;
+  WCHAR  tmLastChar;
+  WCHAR  tmDefaultChar;
+  WCHAR  tmBreakChar;
+  BYTE   tmItalic;
+  BYTE   tmUnderlined;
+  BYTE   tmStruckOut;
+  BYTE   tmPitchAndFamily;
+  BYTE   tmCharSet;
+  DWORD  ntmFlags;
+  UINT   ntmSizeEM;
+  UINT   ntmCellHeight;
+  UINT   ntmAvgWidth;
+} NEWTEXTMETRICW;
 
-typedef struct tagNEWTEXTMETRICEX {
-  NEWTEXTMETRIC  ntmentm;
+typedef_tident(NEWTEXTMETRIC)
+
+typedef struct tagNEWTEXTMETRICEXA {
+  NEWTEXTMETRICA ntmentm;
+  FONTSIGNATURE  ntmeFontSignature;
+} NEWTEXTMETRICEXA;
+
+typedef struct tagNEWTEXTMETRICEXW {
+  NEWTEXTMETRICW ntmentm;
   FONTSIGNATURE  ntmeFontSignature;
-} NEWTEXTMETRICEX;
+} NEWTEXTMETRICEXW;
+
+typedef_tident(NEWTEXTMETRICEX)
 
 typedef struct tagNM_LISTVIEW {
   NMHDR hdr;
@@ -2759,27 +3673,54 @@ typedef struct tagNM_LISTVIEW {
 
 typedef struct _TREEITEM *HTREEITEM;
 
-typedef struct _TV_ITEM {
+typedef struct _TV_ITEMA {
+  UINT       mask;
+  HTREEITEM  hItem;
+  UINT       state;
+  UINT       stateMask;
+  LPSTR      pszText;
+  int        cchTextMax;
+  int        iImage;
+  int        iSelectedImage;
+  int        cChildren;
+  LPARAM     lParam;
+} TV_ITEMA,   *LPTV_ITEMA;
+
+typedef struct _TV_ITEMW {
   UINT       mask;
   HTREEITEM  hItem;
   UINT       state;
   UINT       stateMask;
-  LPTSTR     pszText;
+  LPWSTR     pszText;
   int        cchTextMax;
   int        iImage;
   int        iSelectedImage;
   int        cChildren;
   LPARAM     lParam;
-} TV_ITEM,   *LPTV_ITEM;
+} TV_ITEMW,   *LPTV_ITEMW;
+
+typedef_tident(TV_ITEM)
+typedef_tident(LPTV_ITEM)
+
+typedef struct _NM_TREEVIEWA {
+  NMHDR    hdr;
+  UINT     action;
+  TV_ITEMA itemOld;
+  TV_ITEMA itemNew;
+  POINT    ptDrag;
+} NM_TREEVIEWA, *LPNM_TREEVIEWA;
 
-typedef struct _NM_TREEVIEW {
+typedef struct _NM_TREEVIEWW {
   NMHDR    hdr;
   UINT     action;
-  TV_ITEM  itemOld;
-  TV_ITEM  itemNew;
+  TV_ITEMW itemOld;
+  TV_ITEMW itemNew;
   POINT    ptDrag;
-} NM_TREEVIEW;
-typedef NM_TREEVIEW   *LPNM_TREEVIEW;
+} NM_TREEVIEWW, *LPNM_TREEVIEWW;
+
+typedef_tident(NM_TREEVIEW)
+typedef_tident(LPNM_TREEVIEW)
+
 
 typedef struct _NM_UPDOWN {
   NMHDR    hdr;
@@ -2787,23 +3728,44 @@ typedef struct _NM_UPDOWN {
   int  iDelta;
 } NM_UPDOWNW;
 
-typedef struct tagNONCLIENTMETRICS {
-  UINT    cbSize;
-  int     iBorderWidth;
-  int     iScrollWidth;
-  int     iScrollHeight;
-  int     iCaptionWidth;
-  int     iCaptionHeight;
-  LOGFONT lfCaptionFont;
-  int     iSmCaptionWidth;
-  int     iSmCaptionHeight;
-  LOGFONT lfSmCaptionFont;
-  int     iMenuWidth;
-  int     iMenuHeight;
-  LOGFONT lfMenuFont;
-  LOGFONT lfStatusFont;
-  LOGFONT lfMessageFont;
-} NONCLIENTMETRICS,  * LPNONCLIENTMETRICS;
+typedef struct tagNONCLIENTMETRICSA {
+  UINT     cbSize;
+  int      iBorderWidth;
+  int      iScrollWidth;
+  int      iScrollHeight;
+  int      iCaptionWidth;
+  int      iCaptionHeight;
+  LOGFONTA lfCaptionFont;
+  int      iSmCaptionWidth;
+  int      iSmCaptionHeight;
+  LOGFONTA lfSmCaptionFont;
+  int      iMenuWidth;
+  int      iMenuHeight;
+  LOGFONTA lfMenuFont;
+  LOGFONTA lfStatusFont;
+  LOGFONTA lfMessageFont;
+} NONCLIENTMETRICSA, *LPNONCLIENTMETRICSA;
+
+typedef struct tagNONCLIENTMETRICSW {
+  UINT     cbSize;
+  int      iBorderWidth;
+  int      iScrollWidth;
+  int      iScrollHeight;
+  int      iCaptionWidth;
+  int      iCaptionHeight;
+  LOGFONTW lfCaptionFont;
+  int      iSmCaptionWidth;
+  int      iSmCaptionHeight;
+  LOGFONTW lfSmCaptionFont;
+  int      iMenuWidth;
+  int      iMenuHeight;
+  LOGFONTW lfMenuFont;
+  LOGFONTW lfStatusFont;
+  LOGFONTW lfMessageFont;
+} NONCLIENTMETRICSW, *LPNONCLIENTMETRICSW;
+
+typedef_tident(NONCLIENTMETRICS)
+typedef_tident(LPNONCLIENTMETRICS)
 
 typedef struct _SERVICE_ADDRESS {
   DWORD   dwAddressType;
@@ -2831,32 +3793,66 @@ typedef struct _GUID
 typedef GUID CLSID, *LPCLSID;
 #endif
 
-typedef struct _SERVICE_INFO {
+typedef struct _SERVICE_INFOA {
   LPGUID   lpServiceType;
-  LPTSTR   lpServiceName;
-  LPTSTR   lpComment;
-  LPTSTR   lpLocale;
+  LPSTR    lpServiceName;
+  LPSTR    lpComment;
+  LPSTR    lpLocale;
   DWORD    dwDisplayHint;
   DWORD    dwVersion;
   DWORD    dwTime;
-  LPTSTR   lpMachineName;
+  LPSTR    lpMachineName;
   LPSERVICE_ADDRESSES lpServiceAddress;
   BLOB ServiceSpecificInfo;
-} SERVICE_INFO;
+} SERVICE_INFOA, *LPSERVICE_INFOA;
 
-typedef struct _NS_SERVICE_INFO {
-  DWORD   dwNameSpace;
-  SERVICE_INFO ServiceInfo;
-} NS_SERVICE_INFO;
+typedef struct _SERVICE_INFOW {
+  LPGUID   lpServiceType;
+  LPWSTR   lpServiceName;
+  LPWSTR   lpComment;
+  LPWSTR   lpLocale;
+  DWORD    dwDisplayHint;
+  DWORD    dwVersion;
+  DWORD    dwTime;
+  LPWSTR   lpMachineName;
+  LPSERVICE_ADDRESSES lpServiceAddress;
+  BLOB ServiceSpecificInfo;
+} SERVICE_INFOW, *LPSERVICE_INFOW;
+
+typedef_tident(SERVICE_INFO);
+typedef_tident(LPSERVICE_INFO);
+
+typedef struct _NS_SERVICE_INFOA {
+  DWORD         dwNameSpace;
+  SERVICE_INFOA ServiceInfo;
+} NS_SERVICE_INFOA;
+
+typedef struct _NS_SERVICE_INFOW {
+  DWORD         dwNameSpace;
+  SERVICE_INFOW ServiceInfo;
+} NS_SERVICE_INFOW;
+
+typedef_tident(NS_SERVICE_INFO);
+
+typedef struct _numberfmtA {
+  UINT      NumDigits;
+  UINT      LeadingZero;
+  UINT      Grouping;
+  LPSTR     lpDecimalSep;
+  LPSTR     lpThousandSep;
+  UINT      NegativeOrder;
+} NUMBERFMTA;
 
-typedef struct _numberfmt {
+typedef struct _numberfmtW {
   UINT      NumDigits;
   UINT      LeadingZero;
   UINT      Grouping;
-  LPTSTR    lpDecimalSep;
-  LPTSTR    lpThousandSep;
+  LPWSTR    lpDecimalSep;
+  LPWSTR    lpThousandSep;
   UINT      NegativeOrder;
-} NUMBERFMT;
+} NUMBERFMTW;
+
+typedef_tident(NUMBERFMT)
 
 typedef struct _OFSTRUCT {
   BYTE cBytes;
@@ -2867,45 +3863,139 @@ typedef struct _OFSTRUCT {
   CHAR szPathName[OFS_MAXPATHNAME];
 } OFSTRUCT, *LPOFSTRUCT;
 
-typedef struct tagOFN {
+typedef struct tagOFNA {
+  DWORD         lStructSize;
+  HWND          hwndOwner;
+  HINSTANCE     hInstance;
+  LPCSTR        lpstrFilter;
+  LPSTR         lpstrCustomFilter;
+  DWORD         nMaxCustFilter;
+  DWORD         nFilterIndex;
+  LPSTR         lpstrFile;
+  DWORD         nMaxFile;
+  LPSTR         lpstrFileTitle;
+  DWORD         nMaxFileTitle;
+  LPCSTR        lpstrInitialDir;
+  LPCSTR        lpstrTitle;
+  DWORD         Flags;
+  WORD          nFileOffset;
+  WORD          nFileExtension;
+  LPCSTR        lpstrDefExt;
+  DWORD         lCustData;
+  LPOFNHOOKPROC lpfnHook;
+  LPCSTR        lpTemplateName;
+} OPENFILENAMEA, *LPOPENFILENAMEA;
+
+typedef struct tagOFNW {
   DWORD         lStructSize;
   HWND          hwndOwner;
   HINSTANCE     hInstance;
-  LPCTSTR       lpstrFilter;
-  LPTSTR        lpstrCustomFilter;
+  LPCWSTR       lpstrFilter;
+  LPWSTR        lpstrCustomFilter;
   DWORD         nMaxCustFilter;
   DWORD         nFilterIndex;
-  LPTSTR        lpstrFile;
+  LPWSTR        lpstrFile;
   DWORD         nMaxFile;
-  LPTSTR        lpstrFileTitle;
+  LPWSTR        lpstrFileTitle;
   DWORD         nMaxFileTitle;
-  LPCTSTR       lpstrInitialDir;
-  LPCTSTR       lpstrTitle;
+  LPCWSTR       lpstrInitialDir;
+  LPCWSTR       lpstrTitle;
   DWORD         Flags;
   WORD          nFileOffset;
   WORD          nFileExtension;
-  LPCTSTR       lpstrDefExt;
+  LPCWSTR       lpstrDefExt;
   DWORD         lCustData;
   LPOFNHOOKPROC lpfnHook;
-  LPCTSTR       lpTemplateName;
-} OPENFILENAME, *LPOPENFILENAME;
+  LPCWSTR       lpTemplateName;
+} OPENFILENAMEW, *LPOPENFILENAMEW;
+
+typedef_tident(OPENFILENAME)
+typedef_tident(LPOPENFILENAME)
+
+typedef struct _OFNOTIFYA {
+  NMHDR           hdr;
+  LPOPENFILENAMEA lpOFN;
+  LPSTR           pszFile;
+} OFNOTIFYA, *LPOFNOTIFYA;
 
-typedef struct _OFNOTIFY {
-  NMHDR          hdr;
-  LPOPENFILENAME lpOFN;
-  LPTSTR         pszFile;
-} OFNOTIFY, *LPOFNOTIFY;
+typedef struct _OFNOTIFYW {
+  NMHDR           hdr;
+  LPOPENFILENAMEW lpOFN;
+  LPWSTR          pszFile;
+} OFNOTIFYW, *LPOFNOTIFYW;
+
+typedef_tident(OFNOTIFY)
+typedef_tident(LPOFNOTIFY)
+
+typedef struct _OSVERSIONINFOA {
+  DWORD dwOSVersionInfoSize;
+  DWORD dwMajorVersion;
+  DWORD dwMinorVersion;
+  DWORD dwBuildNumber;
+  DWORD dwPlatformId;
+  CHAR szCSDVersion[ 128 ];
+} OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA;
 
-typedef struct _OSVERSIONINFO {
+typedef struct _OSVERSIONINFOW {
   DWORD dwOSVersionInfoSize;
   DWORD dwMajorVersion;
   DWORD dwMinorVersion;
   DWORD dwBuildNumber;
   DWORD dwPlatformId;
-  TCHAR szCSDVersion[ 128 ];
-} OSVERSIONINFO, *POSVERSIONINFO, *LPOSVERSIONINFO;
+  WCHAR szCSDVersion[ 128 ];
+} OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW, RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW;
+
+typedef_tident(OSVERSIONINFO)
+
+typedef struct _OSVERSIONINFOEXA
+#if defined(__cplusplus)
+: public OSVERSIONINFOA
+{
+#elif 0
+{
+ OSVERSIONINFOA;
+#else
+{
+ DWORD dwOSVersionInfoSize;
+ DWORD dwMajorVersion;
+ DWORD dwMinorVersion;
+ DWORD dwBuildNumber;
+ DWORD dwPlatformId;
+ CHAR szCSDVersion[ 128 ];
+#endif
+ WORD wServicePackMajor;
+ WORD wServicePackMinor;
+ WORD wSuiteMask;
+ BYTE wProductType;
+ BYTE wReserved;
+} OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
+
+typedef struct _OSVERSIONINFOEXW
+#if defined(__cplusplus)
+: public OSVERSIONINFOW
+{
+#elif 0
+{
+ OSVERSIONINFOW;
+#else
+{
+ DWORD dwOSVersionInfoSize;
+ DWORD dwMajorVersion;
+ DWORD dwMinorVersion;
+ DWORD dwBuildNumber;
+ DWORD dwPlatformId;
+ WCHAR szCSDVersion[ 128 ];
+#endif
+ WORD wServicePackMajor;
+ WORD wServicePackMinor;
+ WORD wSuiteMask;
+ BYTE wProductType;
+ BYTE wReserved;
+} OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW, RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW;
+
+typedef_tident(OSVERSIONINFOEX)
 
-typedef struct tagTEXTMETRIC {
+typedef struct tagTEXTMETRICA {
   LONG tmHeight;
   LONG tmAscent;
   LONG tmDescent;
@@ -2917,20 +4007,81 @@ typedef struct tagTEXTMETRIC {
   LONG tmOverhang;
   LONG tmDigitizedAspectX;
   LONG tmDigitizedAspectY;
-  BCHAR tmFirstChar;
-  BCHAR tmLastChar;
-  BCHAR tmDefaultChar;
-  BCHAR tmBreakChar;
+  CHAR tmFirstChar;
+  CHAR tmLastChar;
+  CHAR tmDefaultChar;
+  CHAR tmBreakChar;
   BYTE tmItalic;
   BYTE tmUnderlined;
   BYTE tmStruckOut;
   BYTE tmPitchAndFamily;
   BYTE tmCharSet;
-} TEXTMETRIC, *LPTEXTMETRIC;
+} TEXTMETRICA, *LPTEXTMETRICA;
+
+typedef struct tagTEXTMETRICW {
+  LONG tmHeight;
+  LONG tmAscent;
+  LONG tmDescent;
+  LONG tmInternalLeading;
+  LONG tmExternalLeading;
+  LONG tmAveCharWidth;
+  LONG tmMaxCharWidth;
+  LONG tmWeight;
+  LONG tmOverhang;
+  LONG tmDigitizedAspectX;
+  LONG tmDigitizedAspectY;
+  WCHAR tmFirstChar;
+  WCHAR tmLastChar;
+  WCHAR tmDefaultChar;
+  WCHAR tmBreakChar;
+  BYTE tmItalic;
+  BYTE tmUnderlined;
+  BYTE tmStruckOut;
+  BYTE tmPitchAndFamily;
+  BYTE tmCharSet;
+} TEXTMETRICW, *LPTEXTMETRICW;
+
+typedef_tident(TEXTMETRIC)
+typedef_tident(LPTEXTMETRIC)
+
+typedef struct _OUTLINETEXTMETRICA {
+  UINT   otmSize;
+  TEXTMETRICA otmTextMetrics;
+  BYTE   otmFiller;
+  PANOSE otmPanoseNumber;
+  UINT   otmfsSelection;
+  UINT   otmfsType;
+  int    otmsCharSlopeRise;
+  int    otmsCharSlopeRun;
+  int    otmItalicAngle;
+  UINT   otmEMSquare;
+  int    otmAscent;
+  int    otmDescent;
+  UINT   otmLineGap;
+  UINT   otmsCapEmHeight;
+  UINT   otmsXHeight;
+  RECT   otmrcFontBox;
+  int    otmMacAscent;
+  int    otmMacDescent;
+  UINT   otmMacLineGap;
+  UINT   otmusMinimumPPEM;
+  POINT  otmptSubscriptSize;
+  POINT  otmptSubscriptOffset;
+  POINT  otmptSuperscriptSize;
+  POINT  otmptSuperscriptOffset;
+  UINT   otmsStrikeoutSize;
+  int    otmsStrikeoutPosition;
+  int    otmsUnderscoreSize;
+  int    otmsUnderscorePosition;
+  PSTR   otmpFamilyName;
+  PSTR   otmpFaceName;
+  PSTR   otmpStyleName;
+  PSTR   otmpFullName;
+} OUTLINETEXTMETRICA, *LPOUTLINETEXTMETRICA;
 
-typedef struct _OUTLINETEXTMETRIC {
+typedef struct _OUTLINETEXTMETRICW {
   UINT   otmSize;
-  TEXTMETRIC otmTextMetrics;
+  TEXTMETRICW otmTextMetrics;
   BYTE   otmFiller;
   PANOSE otmPanoseNumber;
   UINT   otmfsSelection;
@@ -2961,7 +4112,10 @@ typedef struct _OUTLINETEXTMETRIC {
   PSTR   otmpFaceName;
   PSTR   otmpStyleName;
   PSTR   otmpFullName;
-} OUTLINETEXTMETRIC, *LPOUTLINETEXTMETRIC;
+} OUTLINETEXTMETRICW, *LPOUTLINETEXTMETRICW;
+
+typedef_tident(OUTLINETEXTMETRIC)
+typedef_tident(LPOUTLINETEXTMETRIC)
 
 typedef struct _OVERLAPPED {
   DWORD  Internal;
@@ -2971,7 +4125,24 @@ typedef struct _OVERLAPPED {
   HANDLE hEvent;
 } OVERLAPPED, *LPOVERLAPPED;
 
-typedef struct tagPSD {
+typedef struct tagPSDA {
+    DWORD           lStructSize;
+    HWND            hwndOwner;
+    HGLOBAL         hDevMode;
+    HGLOBAL         hDevNames;
+    DWORD           Flags;
+    POINT           ptPaperSize;
+    RECT            rtMinMargin;
+    RECT            rtMargin;
+    HINSTANCE       hInstance;
+    LPARAM          lCustData;
+    LPPAGESETUPHOOK lpfnPageSetupHook;
+    LPPAGEPAINTHOOK lpfnPagePaintHook;
+    LPCSTR          lpPageSetupTemplateName;
+    HGLOBAL         hPageSetupTemplate;
+} PAGESETUPDLGA, *LPPAGESETUPDLGA;
+
+typedef struct tagPSDW {
     DWORD           lStructSize;
     HWND            hwndOwner;
     HGLOBAL         hDevMode;
@@ -2984,9 +4155,12 @@ typedef struct tagPSD {
     LPARAM          lCustData;
     LPPAGESETUPHOOK lpfnPageSetupHook;
     LPPAGEPAINTHOOK lpfnPagePaintHook;
-    LPCTSTR         lpPageSetupTemplateName;
+    LPCWSTR         lpPageSetupTemplateName;
     HGLOBAL         hPageSetupTemplate;
-} PAGESETUPDLG, *LPPAGESETUPDLG;
+} PAGESETUPDLGW, *LPPAGESETUPDLGW;
+
+typedef_tident(PAGESETUPDLG)
+typedef_tident(LPPAGESETUPDLG)
 
 typedef struct tagPAINTSTRUCT {
   HDC  hdc;
@@ -3070,33 +4244,62 @@ typedef struct _PERF_OBJECT_TYPE {
   LARGE_INTEGER PerfFreq;
 } PERF_OBJECT_TYPE;
 
-typedef struct _POLYTEXT {
+typedef struct _POLYTEXTA {
+  int     x;
+  int     y;
+  UINT    n;
+  LPCSTR  lpstr;
+  UINT    uiFlags;
+  RECT    rcl;
+  int     *pdx;
+} POLYTEXTA, *LPPOLYTEXTA;
+
+typedef struct _POLYTEXTW {
   int     x;
   int     y;
   UINT    n;
-  LPCTSTR lpstr;
+  LPCWSTR lpstr;
   UINT    uiFlags;
   RECT    rcl;
   int     *pdx;
-} POLYTEXT, *LPPOLYTEXT;
+} POLYTEXTW, *LPPOLYTEXTW;
+
+typedef_tident(POLYTEXT)
+typedef_tident(LPPOLYTEXT)
+
+typedef struct _PORT_INFO_1A {
+  LPSTR  pName;
+} PORT_INFO_1A;
+
+typedef struct _PORT_INFO_1W {
+  LPWSTR pName;
+} PORT_INFO_1W;
 
-typedef struct _PORT_INFO_1 {
-  LPTSTR pName;
-} PORT_INFO_1;
+typedef_tident(PORT_INFO_1)
+
+typedef struct _PORT_INFO_2A {
+  LPSTR  pPortName;
+  LPSTR  pMonitorName;
+  LPSTR  pDescription;
+  DWORD  fPortType;
+  DWORD  Reserved;
+} PORT_INFO_2A;
+
+typedef struct _PORT_INFO_2W {
+  LPWSTR pPortName;
+  LPWSTR pMonitorName;
+  LPWSTR pDescription;
+  DWORD  fPortType;
+  DWORD  Reserved;
+} PORT_INFO_2W;
 
-typedef struct _PORT_INFO_2 {
-  LPSTR pPortName;
-  LPSTR pMonitorName;
-  LPSTR pDescription;
-  DWORD fPortType;
-  DWORD Reserved;
-} PORT_INFO_2;
+typedef_tident(PORT_INFO_2)
 
 typedef struct _PREVENT_MEDIA_REMOVAL {
   BOOLEAN PreventMediaRemoval;
 } PREVENT_MEDIA_REMOVAL ;
 
-typedef struct tagPD {
+typedef struct tagPDA {
   DWORD     lStructSize;
   HWND      hwndOwner;
   HANDLE    hDevMode;
@@ -3112,77 +4315,160 @@ typedef struct tagPD {
   DWORD     lCustData;
   LPPRINTHOOKPROC lpfnPrintHook;
   LPSETUPHOOKPROC lpfnSetupHook;
-  LPCTSTR    lpPrintTemplateName;
-  LPCTSTR    lpSetupTemplateName;
+  LPCSTR    lpPrintTemplateName;
+  LPCSTR    lpSetupTemplateName;
   HANDLE    hPrintTemplate;
   HANDLE    hSetupTemplate;
-} PRINTDLG PACKED, *LPPRINTDLG PACKED;
+} PACKED PRINTDLGA, *LPPRINTDLGA;
+
+typedef struct tagPDW {
+  DWORD     lStructSize;
+  HWND      hwndOwner;
+  HANDLE    hDevMode;
+  HANDLE    hDevNames;
+  HDC       hDC;
+  DWORD     Flags;
+  WORD      nFromPage;
+  WORD      nToPage;
+  WORD      nMinPage;
+  WORD      nMaxPage;
+  WORD      nCopies;
+  HINSTANCE hInstance;
+  DWORD     lCustData;
+  LPPRINTHOOKPROC lpfnPrintHook;
+  LPSETUPHOOKPROC lpfnSetupHook;
+  LPCWSTR   lpPrintTemplateName;
+  LPCWSTR   lpSetupTemplateName;
+  HANDLE    hPrintTemplate;
+  HANDLE    hSetupTemplate;
+} PACKED PRINTDLGW, *LPPRINTDLGW;
+
+typedef_tident(PRINTDLG)
+typedef_tident(LPPRINTDLG)
 
 typedef struct _PRINTER_DEFAULTSA
 {
-  LPTSTR      pDatatype;
-  LPDEVMODEA   pDevMode;
+  LPSTR       pDatatype;
+  LPDEVMODEA  pDevMode;
   ACCESS_MASK DesiredAccess;
 } PRINTER_DEFAULTSA, *PPRINTER_DEFAULTSA, *LPPRINTER_DEFAULTSA;
 
 typedef struct _PRINTER_DEFAULTSW
 {
-  LPTSTR      pDatatype;
-  LPDEVMODE  pDevMode;
+  LPWSTR      pDatatype;
+  LPDEVMODEW  pDevMode;
   ACCESS_MASK DesiredAccess;
 } PRINTER_DEFAULTSW, *PPRINTER_DEFAULTSW, *LPPRINTER_DEFAULTSW;
 
-typedef struct _PRINTER_INFO_1 {
+typedef_tident(PRINTER_DEFAULTS)
+typedef_tident(PPRINTER_DEFAULTS)
+typedef_tident(LPPRINTER_DEFAULTS)
+
+typedef struct _PRINTER_INFO_1A {
   DWORD  Flags;
-  LPTSTR pDescription;
-  LPTSTR pName;
-  LPTSTR pComment;
-} PRINTER_INFO_1, *PPRINTER_INFO_1, *LPPRINTER_INFO_1;
+  LPSTR  pDescription;
+  LPSTR  pName;
+  LPSTR  pComment;
+} PRINTER_INFO_1A, *PPRINTER_INFO_1A, *LPPRINTER_INFO_1A;
 
-   #if 0
-typedef struct _PRINTER_INFO_2 {
-  LPTSTR    pServerName;
-  LPTSTR    pPrinterName;
-  LPTSTR    pShareName;
-  LPTSTR    pPortName;
-  LPTSTR    pDriverName;
-  LPTSTR    pComment;
-  LPTSTR    pLocation;
-  LPDEVMODE pDevMode;
-  LPTSTR    pSepFile;
-  LPTSTR    pPrintProcessor;
-  LPTSTR    pDatatype;
-  LPTSTR    pParameters;
+typedef struct _PRINTER_INFO_1W {
+  DWORD  Flags;
+  LPWSTR pDescription;
+  LPWSTR pName;
+  LPWSTR pComment;
+} PRINTER_INFO_1W, *PPRINTER_INFO_1W, *LPPRINTER_INFO_1W;
+
+typedef_tident(PRINTER_INFO_1)
+typedef_tident(PPRINTER_INFO_1)
+typedef_tident(LPPRINTER_INFO_1)
+
+#if 0
+typedef struct _PRINTER_INFO_2A {
+  LPSTR      pServerName;
+  LPSTR      pPrinterName;
+  LPSTR      pShareName;
+  LPSTR      pPortName;
+  LPSTR      pDriverName;
+  LPSTR      pComment;
+  LPSTR      pLocation;
+  LPDEVMODEA pDevMode;
+  LPSTR      pSepFile;
+  LPSTR      pPrintProcessor;
+  LPSTR      pDatatype;
+  LPSTR      pParameters;
   PSECURITY_DESCRIPTOR pSecurityDescriptor;
-  DWORD     Attributes;
-  DWORD     Priority;
-  DWORD     DefaultPriority;
-  DWORD     StartTime;
-  DWORD     UntilTime;
-  DWORD     Status;
-  DWORD     cJobs;
-  DWORD     AveragePPM;
-} PRINTER_INFO_2;
+  DWORD      Attributes;
+  DWORD      Priority;
+  DWORD      DefaultPriority;
+  DWORD      StartTime;
+  DWORD      UntilTime;
+  DWORD      Status;
+  DWORD      cJobs;
+  DWORD      AveragePPM;
+} PRINTER_INFO_2A;
+
+typedef struct _PRINTER_INFO_2W {
+  LPWSTR     pServerName;
+  LPWSTR     pPrinterName;
+  LPWSTR     pShareName;
+  LPWSTR     pPortName;
+  LPWSTR     pDriverName;
+  LPWSTR     pComment;
+  LPWSTR     pLocation;
+  LPDEVMODEW pDevMode;
+  LPWSTR     pSepFile;
+  LPWSTR     pPrintProcessor;
+  LPWSTR     pDatatype;
+  LPWSTR     pParameters;
+  PSECURITY_DESCRIPTOR pSecurityDescriptor;
+  DWORD      Attributes;
+  DWORD      Priority;
+  DWORD      DefaultPriority;
+  DWORD      StartTime;
+  DWORD      UntilTime;
+  DWORD      Status;
+  DWORD      cJobs;
+  DWORD      AveragePPM;
+} PRINTER_INFO_2W;
 
+typedef_tident(PRINTER_INFO_2)
 
 typedef struct _PRINTER_INFO_3 {
   PSECURITY_DESCRIPTOR pSecurityDescriptor;
 } PRINTER_INFO_3;
- #endif
+#endif
+
+typedef struct _PRINTER_INFO_4A {
+  LPSTR  pPrinterName;
+  LPSTR  pServerName;
+  DWORD  Attributes;
+} PRINTER_INFO_4A;
 
-typedef struct _PRINTER_INFO_4 {
-  LPTSTR  pPrinterName;
-  LPTSTR  pServerName;
+typedef struct _PRINTER_INFO_4W {
+  LPWSTR pPrinterName;
+  LPWSTR pServerName;
   DWORD  Attributes;
-} PRINTER_INFO_4;
+} PRINTER_INFO_4W;
+
+typedef_tident(PRINTER_INFO_4)
 
-typedef struct _PRINTER_INFO_5 {
-  LPTSTR    pPrinterName;
-  LPTSTR    pPortName;
+typedef struct _PRINTER_INFO_5A {
+  LPSTR     pPrinterName;
+  LPSTR     pPortName;
   DWORD     Attributes;
   DWORD     DeviceNotSelectedTimeout;
   DWORD     TransmissionRetryTimeout;
-} PRINTER_INFO_5;
+} PRINTER_INFO_5A;
+
+typedef struct _PRINTER_INFO_5W {
+  LPWSTR    pPrinterName;
+  LPWSTR    pPortName;
+  DWORD     Attributes;
+  DWORD     DeviceNotSelectedTimeout;
+  DWORD     TransmissionRetryTimeout;
+} PRINTER_INFO_5W;
+
+typedef_tident(PRINTER_INFO_5)
 
 typedef struct _PRINTER_NOTIFY_INFO_DATA {
   WORD   Type;
@@ -3221,10 +4507,15 @@ typedef struct _PRINTER_NOTIFY_OPTIONS {
   PPRINTER_NOTIFY_OPTIONS_TYPE  pTypes;
 } PRINTER_NOTIFY_OPTIONS;
 
-typedef struct _PRINTPROCESSOR_INFO_1 {
-  LPTSTR pName;
-} PRINTPROCESSOR_INFO_1;
+typedef struct _PRINTPROCESSOR_INFO_1A {
+  LPSTR  pName;
+} PRINTPROCESSOR_INFO_1A;
+
+typedef struct _PRINTPROCESSOR_INFO_1W {
+  LPWSTR pName;
+} PRINTPROCESSOR_INFO_1W;
 
+typedef_tident(PRINTPROCESSOR_INFO_1)
 
 typedef struct _PROCESS_HEAP_ENTRY {
   PVOID lpData;
@@ -3248,49 +4539,101 @@ typedef struct _PROCESS_INFORMATION {
 
 typedef UINT CALLBACK (*LPFNPSPCALLBACK) (HWND, UINT, LPVOID);
 
-typedef struct _PROPSHEETPAGE {
+typedef struct _PROPSHEETPAGEA {
+  DWORD     dwSize;
+  DWORD     dwFlags;
+  HINSTANCE hInstance;
+  union {
+    LPCSTR         pszTemplate;
+    LPCDLGTEMPLATE pResource;
+  } u1;
+  union {
+    HICON   hIcon;
+    LPCSTR  pszIcon;
+  } u2;
+  LPCSTR  pszTitle;
+  DLGPROC pfnDlgProc;
+  LPARAM  lParam;
+  LPFNPSPCALLBACK pfnCallback;
+  UINT   * pcRefParent;
+} PROPSHEETPAGEA, *LPPROPSHEETPAGEA;
+typedef const PROPSHEETPAGEA* LPCPROPSHEETPAGEA;
+
+typedef struct _PROPSHEETPAGEW {
   DWORD     dwSize;
   DWORD     dwFlags;
   HINSTANCE hInstance;
   union {
-    LPCTSTR        pszTemplate;
+    LPCWSTR        pszTemplate;
     LPCDLGTEMPLATE pResource;
   } u1;
   union {
-    HICON  hIcon;
-    LPCTSTR pszIcon;
+    HICON   hIcon;
+    LPCWSTR pszIcon;
   } u2;
-  LPCTSTR pszTitle;
+  LPCWSTR pszTitle;
   DLGPROC pfnDlgProc;
   LPARAM  lParam;
   LPFNPSPCALLBACK pfnCallback;
   UINT   * pcRefParent;
-} PROPSHEETPAGE,   *LPPROPSHEETPAGE;
-typedef const PROPSHEETPAGE   *LPCPROPSHEETPAGE;
+} PROPSHEETPAGEW, *LPPROPSHEETPAGEW;
+typedef const PROPSHEETPAGEW* LPCPROPSHEETPAGEW;
+
+typedef_tident(PROPSHEETPAGE)
+typedef_tident(LPPROPSHEETPAGE)
+typedef_tident(LPCPROPSHEETPAGE)
 
 typedef struct _PSP *HPROPSHEETPAGE;
-typedef struct _PROPSHEETHEADER {
+
+typedef struct _PROPSHEETHEADERA {
+  DWORD      dwSize;
+  DWORD      dwFlags;
+  HWND       hwndParent;
+  HINSTANCE  hInstance;
+  union {
+    HICON   hIcon;
+    LPCSTR  pszIcon;
+  } u1;
+  LPCSTR     pszCaption;
+  UINT       nPages;
+  union {
+    UINT    nStartPage;
+    LPCSTR  pStartPage;
+  } u2;
+  union {
+    LPCPROPSHEETPAGEA  ppsp;
+    HPROPSHEETPAGE    *phpage;
+  } u3;
+  PFNPROPSHEETCALLBACK pfnCallback;
+} PROPSHEETHEADERA, *LPPROPSHEETHEADERA;
+typedef const PROPSHEETHEADERA *LPCPROPSHEETHEADERA;
+
+typedef struct _PROPSHEETHEADERW {
   DWORD      dwSize;
   DWORD      dwFlags;
   HWND       hwndParent;
   HINSTANCE  hInstance;
   union {
-    HICON  hIcon;
-    LPCTSTR pszIcon;
+    HICON   hIcon;
+    LPCWSTR pszIcon;
   } u1;
-  LPCTSTR     pszCaption;
+  LPCWSTR    pszCaption;
   UINT       nPages;
   union {
-    UINT  nStartPage;
-    LPCTSTR pStartPage;
+    UINT    nStartPage;
+    LPCWSTR pStartPage;
   } u2;
   union {
-    LPCPROPSHEETPAGE    ppsp;
-    HPROPSHEETPAGE   *phpage;
+    LPCPROPSHEETPAGEW  ppsp;
+    HPROPSHEETPAGE    *phpage;
   } u3;
   PFNPROPSHEETCALLBACK pfnCallback;
-} PROPSHEETHEADER,   *LPPROPSHEETHEADER;
-typedef const PROPSHEETHEADER   *LPCPROPSHEETHEADER;
+} PROPSHEETHEADERW, *LPPROPSHEETHEADERW;
+typedef const PROPSHEETHEADERW *LPCPROPSHEETHEADERW;
+
+typedef_tident(PROPSHEETHEADER)
+typedef_tident(LPPROPSHEETHEADER)
+typedef_tident(LPCPROPSHEETHEADER)
 
 /* PropertySheet callbacks */
 typedef WINBOOL CALLBACK (*LPFNADDPROPSHEETPAGE) (HPROPSHEETPAGE, LPARAM);
@@ -3298,7 +4641,18 @@ typedef WINBOOL CALLBACK (*LPFNADDPROPSHEETPAGES) (LPVOID,
                                                   LPFNADDPROPSHEETPAGE,
                                                   LPARAM);
 
-typedef  struct _PROTOCOL_INFO {
+typedef  struct _PROTOCOL_INFOA {
+  DWORD  dwServiceFlags;
+  INT  iAddressFamily;
+  INT  iMaxSockAddr;
+  INT  iMinSockAddr;
+  INT  iSocketType;
+  INT  iProtocol;
+  DWORD  dwMessageSize;
+  LPSTR  lpProtocol;
+} PROTOCOL_INFOA;
+
+typedef  struct _PROTOCOL_INFOW {
   DWORD  dwServiceFlags;
   INT  iAddressFamily;
   INT  iMaxSockAddr;
@@ -3306,24 +4660,41 @@ typedef  struct _PROTOCOL_INFO {
   INT  iSocketType;
   INT  iProtocol;
   DWORD  dwMessageSize;
-  LPTSTR  lpProtocol;
-} PROTOCOL_INFO;
+  LPWSTR  lpProtocol;
+} PROTOCOL_INFOW;
+
+typedef_tident(PROTOCOL_INFO)
 
-typedef struct _PROVIDOR_INFO_1 {
-  LPTSTR pName;
-  LPTSTR pEnvironment ;
-  LPTSTR pDLLName ;
-} PROVIDOR_INFO_1;
+typedef struct _PROVIDOR_INFO_1A {
+  LPSTR  pName;
+  LPSTR  pEnvironment ;
+  LPSTR  pDLLName ;
+} PROVIDOR_INFO_1A;
+
+typedef struct _PROVIDOR_INFO_1W {
+  LPWSTR pName;
+  LPWSTR pEnvironment ;
+  LPWSTR pDLLName ;
+} PROVIDOR_INFO_1W;
+
+typedef_tident(PROVIDOR_INFO_1)
 
 typedef struct _PSHNOTIFY {
   NMHDR hdr;
   LPARAM lParam;
 } PSHNOTIFY,   *LPPSHNOTIFY;
 
-typedef struct _punctuation {
+typedef struct _punctuationA {
   UINT   iSize;
   LPSTR  szPunctuation;
-} PUNCTUATION;
+} PUNCTUATIONA;
+
+typedef struct _punctuationW {
+  UINT   iSize;
+  LPWSTR szPunctuation;
+} PUNCTUATIONW;
+
+typedef_tident(PUNCTUATION)
 
 typedef struct _QUERY_SERVICE_CONFIGA {
   DWORD dwServiceType;
@@ -3349,13 +4720,8 @@ typedef struct _QUERY_SERVICE_CONFIGW {
   LPWSTR lpDisplayName;
 } QUERY_SERVICE_CONFIGW, *LPQUERY_SERVICE_CONFIGW;
 
-#ifdef UNICODE
-#define QUERY_SERVICE_CONFIG QUERY_SERVICE_CONFIGW
-#define LPQUERY_SERVICE_CONFIG LPQUERY_SERVICE_CONFIGW
-#else
-#define QUERY_SERVICE_CONFIG QUERY_SERVICE_CONFIGA
-#define LPQUERY_SERVICE_CONFIG LPQUERY_SERVICE_CONFIGA
-#endif
+typedef_tident(QUERY_SERVICE_CONFIG)
+typedef_tident(LPQUERY_SERVICE_CONFIG)
 
 typedef struct _QUERY_SERVICE_LOCK_STATUSA {
   DWORD fIsLocked;
@@ -3369,80 +4735,177 @@ typedef struct _QUERY_SERVICE_LOCK_STATUSW {
   DWORD dwLockDuration;
 } QUERY_SERVICE_LOCK_STATUSW, *LPQUERY_SERVICE_LOCK_STATUSW;
 
-#ifdef UNICODE
-#define QUERY_SERVICE_LOCK_STATUS QUERY_SERVICE_LOCK_STATUSW
-#define LPQUERY_SERVICE_LOCK_STATUS LPQUERY_SERVICE_LOCK_STATUSW
-#else
-#define QUERY_SERVICE_LOCK_STATUS QUERY_SERVICE_LOCK_STATUSA
-#define LPQUERY_SERVICE_LOCK_STATUS LPQUERY_SERVICE_LOCK_STATUSA
-#endif
+typedef_tident(QUERY_SERVICE_LOCK_STATUS)
+typedef_tident(LPQUERY_SERVICE_LOCK_STATUS)
+
+typedef  struct  _RASAMBA {
+  DWORD    dwSize;
+  DWORD    dwError;
+  CHAR     szNetBiosError[ NETBIOS_NAME_LEN + 1 ];
+  BYTE     bLana;
+} RASAMBA;
 
-typedef  struct  _RASAMB {
+typedef  struct  _RASAMBW {
   DWORD    dwSize;
   DWORD    dwError;
-  TCHAR    szNetBiosError[ NETBIOS_NAME_LEN + 1 ];
+  WCHAR    szNetBiosError[ NETBIOS_NAME_LEN + 1 ];
   BYTE     bLana;
-} RASAMB;
+} RASAMBW;
+
+typedef_tident(RASAMB)
 
-typedef struct _RASCONN {
+typedef struct _RASCONNA {
   DWORD     dwSize;
   HRASCONN  hrasconn;
-  TCHAR     szEntryName[RAS_MaxEntryName + 1];
+  CHAR      szEntryName[RAS_MaxEntryName + 1];
 
+  /* WINVER >= 0x400 */
   CHAR      szDeviceType[ RAS_MaxDeviceType + 1 ];
   CHAR      szDeviceName[ RAS_MaxDeviceName + 1 ];
-} RASCONN ;
 
-typedef struct _RASCONNSTATUS {
+  /* WINVER >= 0x401 */
+  CHAR      szPhonebook[ MAX_PATH ];
+  DWORD     dwSubEntry;
+
+  /* WINVER >= 0x500 */
+  GUID      guidEntry;
+
+  /* WINVER >= 0x501 */
+  DWORD     dwSessionId;
+  DWORD     dwFlags;
+  LUID      luid;
+} RASCONNA ;
+
+typedef struct _RASCONNW {
+  DWORD     dwSize;
+  HRASCONN  hrasconn;
+  WCHAR     szEntryName[RAS_MaxEntryName + 1];
+
+  /* WINVER >= 0x400 */
+  WCHAR     szDeviceType[ RAS_MaxDeviceType + 1 ];
+  WCHAR     szDeviceName[ RAS_MaxDeviceName + 1 ];
+
+  /* WINVER >= 0x401 */
+  WCHAR     szPhonebook[ MAX_PATH ];
+  DWORD     dwSubEntry;
+
+  /* WINVER >= 0x500 */
+  GUID      guidEntry;
+
+  /* WINVER >= 0x501 */
+  DWORD     dwSessionId;
+  DWORD     dwFlags;
+  LUID      luid;
+} RASCONNW ;
+
+typedef_tident(RASCONN)
+
+typedef struct _RASCONNSTATUSA {
+  DWORD         dwSize;
+  RASCONNSTATE  rasconnstate;
+  DWORD         dwError;
+  CHAR          szDeviceType[RAS_MaxDeviceType + 1];
+  CHAR          szDeviceName[RAS_MaxDeviceName + 1];
+} RASCONNSTATUSA;
+
+typedef struct _RASCONNSTATUSW {
   DWORD         dwSize;
   RASCONNSTATE  rasconnstate;
   DWORD         dwError;
-  TCHAR         szDeviceType[RAS_MaxDeviceType + 1];
-  TCHAR         szDeviceName[RAS_MaxDeviceName + 1];
-} RASCONNSTATUS;
+  WCHAR         szDeviceType[RAS_MaxDeviceType + 1];
+  WCHAR         szDeviceName[RAS_MaxDeviceName + 1];
+} RASCONNSTATUSW;
+
+typedef_tident(RASCONNSTATUS)
 
 typedef  struct  _RASDIALEXTENSIONS {
   DWORD    dwSize;
   DWORD    dwfOptions;
-  HWND    hwndParent;
+  HWND     hwndParent;
   DWORD    reserved;
 } RASDIALEXTENSIONS;
 
-typedef struct _RASDIALPARAMS {
+typedef struct _RASDIALPARAMSA {
+  DWORD  dwSize;
+  CHAR   szEntryName[RAS_MaxEntryName + 1];
+  CHAR   szPhoneNumber[RAS_MaxPhoneNumber + 1];
+  CHAR   szCallbackNumber[RAS_MaxCallbackNumber + 1];
+  CHAR   szUserName[UNLEN + 1];
+  CHAR   szPassword[PWLEN + 1];
+  CHAR   szDomain[DNLEN + 1] ;
+} RASDIALPARAMSA;
+
+typedef struct _RASDIALPARAMSW {
+  DWORD  dwSize;
+  WCHAR  szEntryName[RAS_MaxEntryName + 1];
+  WCHAR  szPhoneNumber[RAS_MaxPhoneNumber + 1];
+  WCHAR  szCallbackNumber[RAS_MaxCallbackNumber + 1];
+  WCHAR  szUserName[UNLEN + 1];
+  WCHAR  szPassword[PWLEN + 1];
+  WCHAR  szDomain[DNLEN + 1] ;
+} RASDIALPARAMSW;
+
+typedef_tident(RASDIALPARAMS)
+
+typedef struct _RASENTRYNAMEA {
   DWORD  dwSize;
-  TCHAR  szEntryName[RAS_MaxEntryName + 1];
-  TCHAR  szPhoneNumber[RAS_MaxPhoneNumber + 1];
-  TCHAR  szCallbackNumber[RAS_MaxCallbackNumber + 1];
-  TCHAR  szUserName[UNLEN + 1];
-  TCHAR  szPassword[PWLEN + 1];
-  TCHAR  szDomain[DNLEN + 1] ;
-} RASDIALPARAMS;
-
-typedef struct _RASENTRYNAME {
+  CHAR   szEntryName[RAS_MaxEntryName + 1];
+}RASENTRYNAMEA;
+
+typedef struct _RASENTRYNAMEW {
   DWORD  dwSize;
-  TCHAR  szEntryName[RAS_MaxEntryName + 1];
-}RASENTRYNAME;
+  WCHAR  szEntryName[RAS_MaxEntryName + 1];
+}RASENTRYNAMEW;
+
+typedef_tident(RASENTRYNAME)
+
+typedef  struct  _RASPPPIPA {
+  DWORD    dwSize;
+  DWORD    dwError;
+  CHAR     szIpAddress[ RAS_MaxIpAddress + 1 ];
+} RASPPPIPA;
+
+typedef  struct  _RASPPPIPW {
+  DWORD    dwSize;
+  DWORD    dwError;
+  WCHAR    szIpAddress[ RAS_MaxIpAddress + 1 ];
+} RASPPPIPW;
 
-typedef  struct  _RASPPPIP {
+typedef_tident(RASPPPIP)
+
+typedef  struct  _RASPPPIPXA {
+  DWORD    dwSize;
+  DWORD    dwError;
+  CHAR     szIpxAddress[ RAS_MaxIpxAddress + 1 ];
+} RASPPPIPXA;
+
+typedef  struct  _RASPPPIPXW {
   DWORD    dwSize;
   DWORD    dwError;
-  TCHAR    szIpAddress[ RAS_MaxIpAddress + 1 ];
-} RASPPPIP;
+  WCHAR    szIpxAddress[ RAS_MaxIpxAddress + 1 ];
+} RASPPPIPXW;
 
-typedef  struct  _RASPPPIPX {
+typedef_tident(RASPPPIPX)
+
+typedef  struct  _RASPPPNBFA {
   DWORD    dwSize;
   DWORD    dwError;
-  TCHAR    szIpxAddress[ RAS_MaxIpxAddress + 1 ];
-} RASPPPIPX;
+  DWORD    dwNetBiosError;
+  CHAR     szNetBiosError[ NETBIOS_NAME_LEN + 1 ];
+  CHAR     szWorkstationName[ NETBIOS_NAME_LEN + 1 ];
+  BYTE     bLana;
+} RASPPPNBFA;
 
-typedef  struct  _RASPPPNBF {
+typedef  struct  _RASPPPNBFW {
   DWORD    dwSize;
   DWORD    dwError;
   DWORD    dwNetBiosError;
-  TCHAR    szNetBiosError[ NETBIOS_NAME_LEN + 1 ];
-  TCHAR    szWorkstationName[ NETBIOS_NAME_LEN + 1 ];
+  WCHAR    szNetBiosError[ NETBIOS_NAME_LEN + 1 ];
+  WCHAR    szWorkstationName[ NETBIOS_NAME_LEN + 1 ];
   BYTE     bLana;
-} RASPPPNBF;
+} RASPPPNBFW;
+
+typedef_tident(RASPPPNBF)
 
 typedef struct _RASTERIZER_STATUS {
   short nSize;
@@ -3456,11 +4919,19 @@ typedef struct _REASSIGN_BLOCKS {
   DWORD BlockNumber[1];
 } REASSIGN_BLOCKS ;
 
-typedef struct _REMOTE_NAME_INFO {
-  LPTSTR  lpUniversalName;
-  LPTSTR  lpConnectionName;
-  LPTSTR  lpRemainingPath;
-} REMOTE_NAME_INFO;
+typedef struct _REMOTE_NAME_INFOA {
+  LPSTR   lpUniversalName;
+  LPSTR   lpConnectionName;
+  LPSTR   lpRemainingPath;
+} REMOTE_NAME_INFOA;
+
+typedef struct _REMOTE_NAME_INFOW {
+  LPWSTR  lpUniversalName;
+  LPWSTR  lpConnectionName;
+  LPWSTR  lpRemainingPath;
+} REMOTE_NAME_INFOW;
+
+typedef_tident(REMOTE_NAME_INFO)
 
 /*
  TODO: OLE
@@ -3530,36 +5001,48 @@ typedef struct tagSERIALKEYS {
 
 typedef struct _SERVICE_TABLE_ENTRYA {
   LPSTR lpServiceName;
-  LPSERVICE_MAIN_FUNCTION lpServiceProc;
+  LPSERVICE_MAIN_FUNCTIONA lpServiceProc;
 } SERVICE_TABLE_ENTRYA, *LPSERVICE_TABLE_ENTRYA;
 
 typedef struct _SERVICE_TABLE_ENTRYW {
   LPWSTR lpServiceName;
-  LPSERVICE_MAIN_FUNCTION lpServiceProc;
+  LPSERVICE_MAIN_FUNCTIONW lpServiceProc;
 } SERVICE_TABLE_ENTRYW, *LPSERVICE_TABLE_ENTRYW;
 
-#ifdef UNICODE
-#define SERVICE_TABLE_ENTRY SERVICE_TABLE_ENTRYW
-#define LPSERVICE_TABLE_ENTRY LPSERVICE_TABLE_ENTRYW
-#else
-#define SERVICE_TABLE_ENTRY SERVICE_TABLE_ENTRYA
-#define LPSERVICE_TABLE_ENTRY LPSERVICE_TABLE_ENTRYA
-#endif
+typedef_tident(SERVICE_TABLE_ENTRY)
+typedef_tident(LPSERVICE_TABLE_ENTRY)
 
+typedef struct _SERVICE_TYPE_VALUE_ABSA {
+  DWORD   dwNameSpace;
+  DWORD   dwValueType;
+  DWORD   dwValueSize;
+  LPSTR   lpValueName;
+  PVOID   lpValue;
+} SERVICE_TYPE_VALUE_ABSA;
 
-typedef struct _SERVICE_TYPE_VALUE_ABS {
+typedef struct _SERVICE_TYPE_VALUE_ABSW {
   DWORD   dwNameSpace;
   DWORD   dwValueType;
   DWORD   dwValueSize;
-  LPTSTR  lpValueName;
+  LPWSTR  lpValueName;
   PVOID   lpValue;
-} SERVICE_TYPE_VALUE_ABS;
+} SERVICE_TYPE_VALUE_ABSW;
 
-typedef struct _SERVICE_TYPE_INFO_ABS {
-  LPTSTR                  lpTypeName;
+typedef_tident(SERVICE_TYPE_VALUE_ABS)
+
+typedef struct _SERVICE_TYPE_INFO_ABSA {
+  LPSTR                   lpTypeName;
+  DWORD                   dwValueCount;
+  SERVICE_TYPE_VALUE_ABSA Values[1];
+} SERVICE_TYPE_INFO_ABSA;
+
+typedef struct _SERVICE_TYPE_INFO_ABSW {
+  LPWSTR                  lpTypeName;
   DWORD                   dwValueCount;
-  SERVICE_TYPE_VALUE_ABS  Values[1];
-} SERVICE_TYPE_INFO_ABS;
+  SERVICE_TYPE_VALUE_ABSW Values[1];
+} SERVICE_TYPE_INFO_ABSW;
+
+typedef_tident(SERVICE_TYPE_INFO_ABS)
 
 typedef struct _SESSION_BUFFER {
   UCHAR lsn;
@@ -3581,56 +5064,103 @@ typedef enum tagSHCONTF {
   SHCONTF_FOLDERS = 32,         
   SHCONTF_NONFOLDERS = 64,      
   SHCONTF_INCLUDEHIDDEN = 128,  
+  SHCONTF_INIT_ON_FIRST_NEXT = 256,
+  SHCONTF_NETPRINTERSRCH = 512,
+  SHCONTF_SHAREABLE = 1024,
+  SHCONTF_STORAGE = 2048
 } SHCONTF; 
  
-typedef struct _SHFILEINFO { 
-  HICON hIcon;                   
-  int   iIcon;                   
-  DWORD dwAttributes;            
-  char  szDisplayName[MAX_PATH]; 
-  char  szTypeName[80];          
+typedef struct _SHFILEINFO {
+  HICON hIcon;
+  int   iIcon;
+  DWORD dwAttributes;
+  char  szDisplayName[MAX_PATH];
+  char  szTypeName[80];
 } SHFILEINFO; 
 
-typedef WORD FILEOP_FLAGS; 
-typedef struct _SHFILEOPSTRUCT { 
-  HWND         hwnd;                  
-  UINT         wFunc;                 
-  LPCSTR       pFrom;                 
-  LPCSTR       pTo;                   
-  FILEOP_FLAGS fFlags;                
-  WINBOOL         fAnyOperationsAborted; 
-  LPVOID       hNameMappings;         
-  LPCSTR       lpszProgressTitle;     
-} SHFILEOPSTRUCT,   *LPSHFILEOPSTRUCT; 
-typedef enum tagSHGDN { 
-  SHGDN_NORMAL = 0,           
-  SHGDN_INFOLDER = 1,         
-  SHGDN_FORPARSING = 0x8000,  
+typedef WORD FILEOP_FLAGS;
+
+typedef struct _SHFILEOPSTRUCTA {
+  HWND         hwnd;
+  UINT         wFunc;
+  LPCSTR       pFrom;
+  LPCSTR       pTo;
+  FILEOP_FLAGS fFlags;
+  WINBOOL      fAnyOperationsAborted;
+  LPVOID       hNameMappings;
+  LPCSTR       lpszProgressTitle;
+} SHFILEOPSTRUCTA, *LPSHFILEOPSTRUCTA;
+
+typedef struct _SHFILEOPSTRUCTW {
+  HWND         hwnd;
+  UINT         wFunc;
+  LPCWSTR      pFrom;
+  LPCWSTR      pTo;
+  FILEOP_FLAGS fFlags;
+  WINBOOL      fAnyOperationsAborted;
+  LPVOID       hNameMappings;
+  LPCWSTR      lpszProgressTitle;
+} SHFILEOPSTRUCTW, *LPSHFILEOPSTRUCTW;
+
+typedef_tident(SHFILEOPSTRUCT)
+typedef_tident(LPSHFILEOPSTRUCT)
+
+typedef enum tagSHGDN {
+  SHGDN_NORMAL = 0,
+  SHGDN_INFOLDER = 1,
+  SHGDN_FORPARSING = 0x8000,
 } SHGNO; 
-typedef struct _SHNAMEMAPPING { 
-  LPSTR pszOldPath; 
-  LPSTR pszNewPath; 
-  int   cchOldPath; 
-  int   cchNewPath; 
-} SHNAMEMAPPING,   *LPSHNAMEMAPPING; 
-typedef struct tagSOUNDSENTRY {  
-  UINT cbSize; 
-  DWORD dwFlags; 
-  DWORD iFSTextEffect; 
-  DWORD iFSTextEffectMSec; 
-  DWORD iFSTextEffectColorBits; 
-  DWORD iFSGrafEffect; 
-  DWORD iFSGrafEffectMSec; 
-  DWORD iFSGrafEffectColor; 
-  DWORD iWindowsEffect; 
-  DWORD iWindowsEffectMSec; 
-  LPTSTR lpszWindowsEffectDLL; 
-  DWORD iWindowsEffectOrdinal; 
-} SOUNDSENTRY, *LPSOUNDSENTRY; 
+
+typedef struct _SHNAMEMAPPINGA {
+  LPSTR  pszOldPath;
+  LPSTR  pszNewPath;
+  int    cchOldPath;
+  int    cchNewPath;
+} SHNAMEMAPPINGA, *LPSHNAMEMAPPINGA;
+
+typedef struct _SHNAMEMAPPINGW {
+  LPWSTR pszOldPath;
+  LPWSTR pszNewPath;
+  int    cchOldPath;
+  int    cchNewPath;
+} SHNAMEMAPPINGW, *LPSHNAMEMAPPINGW;
+
+typedef_tident(SHNAMEMAPPING)
+typedef_tident(LPSHNAMEMAPPING)
+
+typedef struct tagSOUNDSENTRYA {
+  UINT   cbSize;
+  DWORD  dwFlags; 
+  DWORD  iFSTextEffect; 
+  DWORD  iFSTextEffectMSec; 
+  DWORD  iFSTextEffectColorBits; 
+  DWORD  iFSGrafEffect; 
+  DWORD  iFSGrafEffectMSec; 
+  DWORD  iFSGrafEffectColor; 
+  DWORD  iWindowsEffect; 
+  DWORD  iWindowsEffectMSec; 
+  LPSTR  lpszWindowsEffectDLL; 
+  DWORD  iWindowsEffectOrdinal; 
+} SOUNDSENTRYA, *LPSOUNDSENTRYA; 
+
+typedef struct tagSOUNDSENTRYW {
+  UINT   cbSize;
+  DWORD  dwFlags; 
+  DWORD  iFSTextEffect; 
+  DWORD  iFSTextEffectMSec; 
+  DWORD  iFSTextEffectColorBits; 
+  DWORD  iFSGrafEffect; 
+  DWORD  iFSGrafEffectMSec; 
+  DWORD  iFSGrafEffectColor; 
+  DWORD  iWindowsEffect; 
+  DWORD  iWindowsEffectMSec; 
+  LPWSTR lpszWindowsEffectDLL; 
+  DWORD  iWindowsEffectOrdinal; 
+} SOUNDSENTRYW, *LPSOUNDSENTRYW; 
+
+typedef_tident(SOUNDSENTRY)
+typedef_tident(LPSOUNDSENTRY)
+
 typedef struct _STARTUPINFOA {
   DWORD   cb;
   LPSTR   lpReserved;
@@ -3673,13 +5203,8 @@ typedef struct _STARTUPINFOW {
   HANDLE  hStdError;
 } STARTUPINFOW, *LPSTARTUPINFOW;
 
-#ifdef UNICODE
-typedef STARTUPINFOW STARTUPINFO;
-typedef LPSTARTUPINFOW LPSTARTUPINFO;
-#else
-typedef STARTUPINFOA STARTUPINFO;
-typedef LPSTARTUPINFOA LPSTARTUPINFO;
-#endif /* UNICODE */
+typedef_tident(STARTUPINFO)
+typedef_tident(LPSTARTUPINFO)
 
 typedef struct tagSTICKYKEYS {
   DWORD cbSize;
@@ -3706,11 +5231,70 @@ typedef struct tagSTYLESTRUCT {
   DWORD styleNew;
 } STYLESTRUCT, * LPSTYLESTRUCT;
 
+typedef struct _ACCESS_ALLOWED_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD SidStart;
+} ACCESS_ALLOWED_ACE;
+
+typedef ACCESS_ALLOWED_ACE *PACCESS_ALLOWED_ACE;
+
+typedef struct _ACCESS_DENIED_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD SidStart;
+} ACCESS_DENIED_ACE;
+typedef ACCESS_DENIED_ACE *PACCESS_DENIED_ACE;
+
 typedef struct _SYSTEM_AUDIT_ACE {
 ACE_HEADER  Header;
 ACCESS_MASK Mask;
 DWORD       SidStart;
ACE_HEADER Header;
+ ACCESS_MASK Mask;
DWORD SidStart;
 } SYSTEM_AUDIT_ACE;
+typedef SYSTEM_AUDIT_ACE *PSYSTEM_AUDIT_ACE;
+
+typedef struct _SYSTEM_ALARM_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD SidStart;
+} SYSTEM_ALARM_ACE;
+typedef SYSTEM_ALARM_ACE *PSYSTEM_ALARM_ACE;
+
+typedef struct _ACCESS_ALLOWED_OBJECT_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD Flags;
+ GUID ObjectType;
+ GUID InheritedObjectType;
+ DWORD SidStart;
+} ACCESS_ALLOWED_OBJECT_ACE, *PACCESS_ALLOWED_OBJECT_ACE;
+
+typedef struct _ACCESS_DENIED_OBJECT_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD Flags;
+ GUID ObjectType;
+ GUID InheritedObjectType;
+ DWORD SidStart;
+} ACCESS_DENIED_OBJECT_ACE, *PACCESS_DENIED_OBJECT_ACE;
+
+typedef struct _SYSTEM_AUDIT_OBJECT_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD Flags;
+ GUID ObjectType;
+ GUID InheritedObjectType;
+ DWORD SidStart;
+} SYSTEM_AUDIT_OBJECT_ACE, *PSYSTEM_AUDIT_OBJECT_ACE;
+
+typedef struct _SYSTEM_ALARM_OBJECT_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD Flags;
+ GUID ObjectType;
+ GUID InheritedObjectType;
+ DWORD SidStart;
+} SYSTEM_ALARM_OBJECT_ACE, *PSYSTEM_ALARM_OBJECT_ACE;
 
 typedef struct _SYSTEM_INFO
 {
@@ -3823,42 +5407,84 @@ typedef struct _TBBUTTON {
 typedef const TBBUTTON  * LPCTBBUTTON;
 
 typedef struct {
-  NMHDR hdr;
-  int iItem;
+  NMHDR    hdr;
+  int      iItem;
+  TBBUTTON tbButton;
+  int      cchText;
+  LPSTR    pszText;
+} TBNOTIFYA, *LPTBNOTIFYA;
+
+typedef struct {
+  NMHDR    hdr;
+  int      iItem;
   TBBUTTON tbButton;
-  int cchText;
-  LPTSTR pszText;
-} TBNOTIFY,  *LPTBNOTIFY;
+  int      cchText;
+  LPWSTR   pszText;
+} TBNOTIFYW, *LPTBNOTIFYW;
+
+typedef_tident(TBNOTIFY)
+typedef_tident(LPTBNOTIFY)
 
 typedef struct {
-  HKEY hkr;
-  LPCTSTR pszSubKey;
-  LPCTSTR pszValueName;
-} TBSAVEPARAMS;
+  HKEY    hkr;
+  LPCSTR  pszSubKey;
+  LPCSTR  pszValueName;
+} TBSAVEPARAMSA;
+
+typedef struct {
+  HKEY    hkr;
+  LPCWSTR pszSubKey;
+  LPCWSTR pszValueName;
+} TBSAVEPARAMSW;
+
+typedef_tident(TBSAVEPARAMS)
 
 typedef struct _TC_HITTESTINFO {
   POINT pt;
   UINT  flags;
 } TC_HITTESTINFO;
 
-typedef struct _TC_ITEM {
-  UINT mask;
-  UINT lpReserved1;
-  UINT lpReserved2;
-  LPTSTR pszText;
-  int cchTextMax;
-  int iImage;
+typedef struct _TC_ITEMA {
+  UINT   mask;
+  UINT   lpReserved1;
+  UINT   lpReserved2;
+  LPSTR  pszText;
+  int    cchTextMax;
+  int    iImage;
   LPARAM lParam;
-} TC_ITEM;
+} TC_ITEMA;
 
-typedef struct _TC_ITEMHEADER {
-  UINT mask;
-  UINT lpReserved1;
-  UINT lpReserved2;
-  LPTSTR pszText;
-  int cchTextMax;
-  int iImage;
-} TC_ITEMHEADER;
+typedef struct _TC_ITEMW {
+  UINT   mask;
+  UINT   lpReserved1;
+  UINT   lpReserved2;
+  LPWSTR pszText;
+  int    cchTextMax;
+  int    iImage;
+  LPARAM lParam;
+} TC_ITEMW;
+
+typedef_tident(TC_ITEM)
+
+typedef struct _TC_ITEMHEADERA {
+  UINT   mask;
+  UINT   lpReserved1;
+  UINT   lpReserved2;
+  LPSTR  pszText;
+  int    cchTextMax;
+  int    iImage;
+} TC_ITEMHEADERA;
+
+typedef struct _TC_ITEMHEADERW {
+  UINT   mask;
+  UINT   lpReserved1;
+  UINT   lpReserved2;
+  LPWSTR pszText;
+  int    cchTextMax;
+  int    iImage;
+} TC_ITEMHEADERW;
+
+typedef_tident(TC_ITEMHEADER)
 
 typedef struct _TC_KEYDOWN {
   NMHDR hdr;
@@ -3866,10 +5492,17 @@ typedef struct _TC_KEYDOWN {
   UINT flags;
 } TC_KEYDOWN;
 
-typedef struct _textrange {
+typedef struct _textrangeA {
   CHARRANGE chrg;
-  LPSTR lpstrText;
-} TEXTRANGE;
+  LPSTR     lpstrText;
+} TEXTRANGEA;
+
+typedef struct _textrangeW {
+  CHARRANGE chrg;
+  LPWSTR    lpstrText;
+} TEXTRANGEW;
+
+typedef_tident(TEXTRANGE)
 
 typedef struct tagTOGGLEKEYS {
   DWORD cbSize;
@@ -3883,23 +5516,48 @@ typedef struct {
   UINT      uId;
   RECT      rect;
   HINSTANCE hinst;
-  LPTSTR     lpszText;
-} TOOLINFO, *PTOOLINFO, *LPTOOLINFO;
+  LPSTR     lpszText;
+} TOOLINFOA, *PTOOLINFOA, *LPTOOLINFOA;
+
+typedef struct {
+  UINT      cbSize;
+  UINT      uFlags;
+  HWND      hwnd;
+  UINT      uId;
+  RECT      rect;
+  HINSTANCE hinst;
+  LPWSTR    lpszText;
+} TOOLINFOW, *PTOOLINFOW, *LPTOOLINFOW;
+
+typedef_tident(TOOLINFO)
+typedef_tident(PTOOLINFO)
+typedef_tident(LPTOOLINFO)
+
+typedef struct {
+  NMHDR     hdr;
+  LPSTR     lpszText;
+  CHAR      szText[80];
+  HINSTANCE hinst;
+  UINT      uFlags;
+} TOOLTIPTEXTA, *LPTOOLTIPTEXTA;
 
 typedef struct {
   NMHDR     hdr;
-  LPTSTR    lpszText;
-  char      szText[80];
+  LPWSTR    lpszText;
+  WCHAR     szText[80];
   HINSTANCE hinst;
   UINT      uFlags;
-} TOOLTIPTEXT,   *LPTOOLTIPTEXT;
+} TOOLTIPTEXTW, *LPTOOLTIPTEXTW;
+
+typedef_tident(TOOLTIPTEXT)
+typedef_tident(LPTOOLTIPTEXT)
 
 typedef struct tagTPMPARAMS {
   UINT cbSize;
   RECT rcExclude;
 } TPMPARAMS,   *LPTPMPARAMS;
 
-#if 0 // RobD - typedef removed due to conflict with mingw headers
+#if 0 /* RobD - typedef removed due to conflict with mingw headers */
 typedef struct _TRANSMIT_FILE_BUFFERS {
   PVOID Head;
   DWORD HeadLength;
@@ -3908,11 +5566,20 @@ typedef struct _TRANSMIT_FILE_BUFFERS {
 } TRANSMIT_FILE_BUFFERS;
 #endif
 
-typedef struct _TT_HITTESTINFO {
-  HWND hwnd;
-  POINT pt;
-  TOOLINFO ti;
-} TTHITTESTINFO,   * LPHITTESTINFO;
+typedef struct _TT_HITTESTINFOA {
+  HWND      hwnd;
+  POINT     pt;
+  TOOLINFOA ti;
+} TTHITTESTINFOA, *LPHITTESTINFOA;
+
+typedef struct _TT_HITTESTINFOW {
+  HWND      hwnd;
+  POINT     pt;
+  TOOLINFOW ti;
+} TTHITTESTINFOW, *LPHITTESTINFOW;
+
+typedef_tident(TTHITTESTINFO)
+typedef_tident(LPHITTESTINFO)
 
 typedef struct tagTTPOLYCURVE {
   WORD    wType;
@@ -3924,24 +5591,40 @@ typedef struct _TTPOLYGONHEADER {
   DWORD   cb;
   DWORD   dwType;
   POINTFX pfxStart;
-} TTPOLYGONHEADER,  * LPTTPOLYGONHEADER;
+} TTPOLYGONHEADER, *PTTPOLYGONHEADER, *LPTTPOLYGONHEADER;
+
+typedef struct _TV_DISPINFOA {
+  NMHDR    hdr;
+  TV_ITEMA item;
+} TV_DISPINFOA;
+
+typedef struct _TV_DISPINFOW {
+  NMHDR    hdr;
+  TV_ITEMW item;
+} TV_DISPINFOW;
 
-typedef struct _TV_DISPINFO {
-  NMHDR   hdr;
-  TV_ITEM item;
-} TV_DISPINFO;
+typedef_tident(TV_DISPINFO)
 
 typedef struct _TVHITTESTINFO {
   POINT     pt;
   UINT      flags;
   HTREEITEM hItem;
-} TV_HITTESTINFO,   *LPTV_HITTESTINFO;
+} TV_HITTESTINFO, *LPTV_HITTESTINFO;
+
+typedef struct _TV_INSERTSTRUCTA {
+  HTREEITEM hParent;
+  HTREEITEM hInsertAfter;
+  TV_ITEMA  item;
+} TV_INSERTSTRUCTA, *LPTV_INSERTSTRUCTA;
 
-typedef struct _TV_INSERTSTRUCT {
+typedef struct _TV_INSERTSTRUCTW {
   HTREEITEM hParent;
   HTREEITEM hInsertAfter;
-  TV_ITEM   item;
-} TV_INSERTSTRUCT,   *LPTV_INSERTSTRUCT;
+  TV_ITEMW  item;
+} TV_INSERTSTRUCTW, *LPTV_INSERTSTRUCTW;
+
+typedef_tident(TV_INSERTSTRUCT)
+typedef_tident(LPTV_INSERTSTRUCT)
 
 typedef struct _TV_KEYDOWN {
   NMHDR hdr;
@@ -3960,9 +5643,15 @@ typedef struct {
   UINT nInc;
 } UDACCEL;
 
-typedef struct _UNIVERSAL_NAME_INFO {
-  LPTSTR  lpUniversalName;
-} UNIVERSAL_NAME_INFO;
+typedef struct _UNIVERSAL_NAME_INFOA {
+  LPSTR   lpUniversalName;
+} UNIVERSAL_NAME_INFOA;
+
+typedef struct _UNIVERSAL_NAME_INFOW {
+  LPWSTR  lpUniversalName;
+} UNIVERSAL_NAME_INFOW;
+
+typedef_tident(UNIVERSAL_NAME_INFO)
 
 typedef struct tagUSEROBJECTFLAGS {
   WINBOOL fInherit;
@@ -4017,15 +5706,9 @@ typedef struct _WIN32_FIND_DATAW {
   WCHAR    cAlternateFileName[ 14 ];
 } WIN32_FIND_DATAW, *LPWIN32_FIND_DATAW, *PWIN32_FIND_DATAW;
 
-#ifdef UNICODE
-#define WIN32_FIND_DATA WIN32_FIND_DATAW
-#define PWIN32_FIND_DATA PWIN32_FIND_DATAW
-#define LPWIN32_FIND_DATA LPWIN32_FIND_DATAW
-#else
-#define WIN32_FIND_DATA WIN32_FIND_DATAA
-#define PWIN32_FIND_DATA PWIN32_FIND_DATAA
-#define LPWIN32_FIND_DATA LPWIN32_FIND_DATAA
-#endif
+typedef_tident(WIN32_FIND_DATA)
+typedef_tident(PWIN32_FIND_DATA)
+typedef_tident(LPWIN32_FIND_DATA)
 
 typedef struct _WIN32_STREAM_ID {
   DWORD dwStreamId;
@@ -4044,7 +5727,7 @@ typedef struct _WINDOWPLACEMENT {
   RECT  rcNormalPosition;
 } WINDOWPLACEMENT;
 
-typedef struct _WNDCLASS {
+typedef struct _WNDCLASSA {
   UINT    style;
   WNDPROC lpfnWndProc;
   int     cbClsExtra;
@@ -4053,11 +5736,26 @@ typedef struct _WNDCLASS {
   HICON   hIcon;
   HCURSOR hCursor;
   HBRUSH  hbrBackground;
-  LPCTSTR lpszMenuName;
-  LPCTSTR lpszClassName;
-} WNDCLASS, *LPWNDCLASS;
+  LPCSTR  lpszMenuName;
+  LPCSTR  lpszClassName;
+} WNDCLASSA, *LPWNDCLASSA;
 
-typedef struct _WNDCLASSEX {
+typedef struct _WNDCLASSW {
+  UINT    style;
+  WNDPROC lpfnWndProc;
+  int     cbClsExtra;
+  int     cbWndExtra;
+  HANDLE  hInstance;
+  HICON   hIcon;
+  HCURSOR hCursor;
+  HBRUSH  hbrBackground;
+  LPCWSTR lpszMenuName;
+  LPCWSTR lpszClassName;
+} WNDCLASSW, *LPWNDCLASSW;
+
+typedef_tident(WNDCLASS)
+
+typedef struct _WNDCLASSEXA {
   UINT    cbSize;
   UINT    style;
   WNDPROC lpfnWndProc;
@@ -4067,26 +5765,65 @@ typedef struct _WNDCLASSEX {
   HICON   hIcon;
   HCURSOR hCursor;
   HBRUSH  hbrBackground;
-  LPCTSTR lpszMenuName;
-  LPCTSTR lpszClassName;
+  LPCSTR  lpszMenuName;
+  LPCSTR  lpszClassName;
   HICON   hIconSm;
-} WNDCLASSEX, *LPWNDCLASSEX;
+} WNDCLASSEXA, *LPWNDCLASSEXA;
 
-typedef struct _CONNECTDLGSTRUCT {
-  DWORD cbStructure;
-  HWND hwndOwner;
-  LPNETRESOURCE lpConnRes;
-  DWORD dwFlags;
-  DWORD dwDevNum;
-} CONNECTDLGSTRUCT, *LPCONNECTDLGSTRUCT;
+typedef struct _WNDCLASSEXW {
+  UINT    cbSize;
+  UINT    style;
+  WNDPROC lpfnWndProc;
+  int     cbClsExtra;
+  int     cbWndExtra;
+  HANDLE  hInstance;
+  HICON   hIcon;
+  HCURSOR hCursor;
+  HBRUSH  hbrBackground;
+  LPCWSTR lpszMenuName;
+  LPCWSTR lpszClassName;
+  HICON   hIconSm;
+} WNDCLASSEXW, *LPWNDCLASSEXW;
+
+typedef_tident(WNDCLASSEX)
+
+typedef struct _CONNECTDLGSTRUCTA {
+  DWORD          cbStructure;
+  HWND           hwndOwner;
+  LPNETRESOURCEA lpConnRes;
+  DWORD          dwFlags;
+  DWORD          dwDevNum;
+} CONNECTDLGSTRUCTA, *LPCONNECTDLGSTRUCTA;
+
+typedef struct _CONNECTDLGSTRUCTW {
+  DWORD          cbStructure;
+  HWND           hwndOwner;
+  LPNETRESOURCEW lpConnRes;
+  DWORD          dwFlags;
+  DWORD          dwDevNum;
+} CONNECTDLGSTRUCTW, *LPCONNECTDLGSTRUCTW;
+
+typedef_tident(CONNECTDLGSTRUCT)
+typedef_tident(LPCONNECTDLGSTRUCT)
+
+typedef struct _DISCDLGSTRUCTA {
+  DWORD           cbStructure;
+  HWND            hwndOwner;
+  LPSTR           lpLocalName;
+  LPSTR           lpRemoteName;
+  DWORD           dwFlags;
+} DISCDLGSTRUCTA, *LPDISCDLGSTRUCTA;
 
-typedef struct _DISCDLGSTRUCT {
+typedef struct _DISCDLGSTRUCTW {
   DWORD           cbStructure;
   HWND            hwndOwner;
-  LPTSTR           lpLocalName;
-  LPTSTR           lpRemoteName;
+  LPWSTR          lpLocalName;
+  LPWSTR          lpRemoteName;
   DWORD           dwFlags;
-} DISCDLGSTRUCT, *LPDISCDLGSTRUCT;
+} DISCDLGSTRUCTW, *LPDISCDLGSTRUCTW;
+
+typedef_tident(DISCDLGSTRUCT)
+typedef_tident(LPDISCDLGSTRUCT)
 
 typedef struct _NETINFOSTRUCT{
     DWORD cbStructure;
@@ -4112,11 +5849,19 @@ typedef int CALLBACK (*ENUMMETAFILEPROC) (HDC, HANDLETABLE,
 typedef int CALLBACK (*ENHMETAFILEPROC) (HDC, HANDLETABLE,
                                         ENHMETARECORD, int, LPARAM);
 
-typedef int CALLBACK (*ENUMFONTSPROC) (LPLOGFONT, LPTEXTMETRIC, DWORD, LPARAM);
-typedef int CALLBACK (*FONTENUMPROC) (ENUMLOGFONT *, NEWTEXTMETRIC *,
-                                     int, LPARAM);
-typedef int CALLBACK (*FONTENUMEXPROC) (ENUMLOGFONTEX *, NEWTEXTMETRICEX *,
-                                     int, LPARAM);
+typedef int CALLBACK (*ENUMFONTSPROCA) (LPLOGFONTA, LPTEXTMETRICA, DWORD, LPARAM);
+typedef int CALLBACK (*ENUMFONTSPROCW) (LPLOGFONTW, LPTEXTMETRICW, DWORD, LPARAM);
+typedef_tident(ENUMFONTSPROC)
+typedef int CALLBACK (*FONTENUMPROCA) (ENUMLOGFONTA *, NEWTEXTMETRICA *,
+                                      int, LPARAM);
+typedef int CALLBACK (*FONTENUMPROCW) (ENUMLOGFONTW *, NEWTEXTMETRICW *,
+                                      int, LPARAM);
+typedef_tident(FONTENUMPROC)
+typedef int CALLBACK (*FONTENUMEXPROCA) (ENUMLOGFONTEXA *, NEWTEXTMETRICEXA *,
+                                        int, LPARAM);
+typedef int CALLBACK (*FONTENUMEXPROCW) (ENUMLOGFONTEXW *, NEWTEXTMETRICEXW *,
+                                        int, LPARAM);
+typedef_tident(FONTENUMEXPROC)
 
 typedef VOID CALLBACK (*LPOVERLAPPED_COMPLETION_ROUTINE) (DWORD, DWORD,
                                                          LPOVERLAPPED);
@@ -4407,11 +6152,17 @@ typedef struct tagTITLEBARINFO {
   DWORD rgstate[CCHILDREN_TITLEBAR+1];
 } TITLEBARINFO, *PTITLEBARINFO, *LPTITLEBARINFO;
 
-typedef struct {
-  HWND hwnd;
-  LPCTSTR szWindowName;
-  UINT32 fToBeClosed;
-  UINT32 fToBeTerminated;
+typedef struct tagWINDOWINFO {
+  DWORD   cbSize;
+  RECT    rcWindow;
+  RECT    rcClient;
+  DWORD   dwStyle;
+  DWORD   dwExStyle;
+  DWORD   dwWindowStatus;
+  UINT    cxWindowBorders;
+  UINT    cyWindowBorders;
+  ATOM    atomWindowType;
+  WORD    wCreatorVersion;
 } WINDOWINFO, *PWINDOWINFO, *LPWINDOWINFO;
 
 typedef struct tagMOUSEINPUT {
@@ -4454,6 +6205,89 @@ typedef struct tagTRACKMOUSEEVENT {
   DWORD dwHoverTime;
 } TRACKMOUSEEVENT, *LPTRACKMOUSEEVENT;
 
+typedef IMAGE_THUNK_DATA *          PImgThunkData;
+typedef const IMAGE_THUNK_DATA *    PCImgThunkData;
+
+typedef struct ImgDelayDescr {
+    DWORD           grAttrs;
+    LPCSTR          szName;
+    HMODULE *       phmod;
+    PImgThunkData   pIAT;
+    PCImgThunkData  pINT;
+    PCImgThunkData  pBoundIAT;
+    PCImgThunkData  pUnloadIAT;
+    DWORD           dwTimeStamp;
+    } ImgDelayDescr, * PImgDelayDescr;
+
+typedef const ImgDelayDescr *   PCImgDelayDescr;
+
+typedef struct DelayLoadProc {
+    BOOL                fImportByName;
+    union {
+        LPCSTR          szProcName;
+        DWORD           dwOrdinal;
+        };
+    } DelayLoadProc;
+
+typedef struct DelayLoadInfo {
+    DWORD               cb;
+    PCImgDelayDescr     pidd;
+    FARPROC *           ppfn;
+    LPCSTR              szDll;
+    DelayLoadProc       dlp;
+    HMODULE             hmodCur;
+    FARPROC             pfnCur;
+    DWORD               dwLastError;
+    } DelayLoadInfo, * PDelayLoadInfo;
+
+typedef struct _RTL_HEAP_TAG_INFO {
+       ULONG AllocCount;
+       ULONG FreeCount;
+       ULONG MemoryUsed;
+} RTL_HEAP_TAG_INFO, *LPRTL_HEAP_TAG_INFO, *PRTL_HEAP_TAG_INFO;
+
+typedef struct _PORT_MESSAGE {
+       USHORT DataSize;
+       USHORT MessageSize;
+       USHORT MessageType;
+       USHORT VirtualRangesOffset;
+       CLIENT_ID ClientId;
+       ULONG MessageId;
+       ULONG SectionSize;
+//     UCHAR Data [];
+} PORT_MESSAGE,*PPORT_MESSAGE;
+
+typedef struct _PORT_SECTION_WRITE {
+       ULONG Length;
+       HANDLE SectionHandle;
+       ULONG SectionOffset;
+       ULONG ViewSize;
+       PVOID ViewBase;
+       PVOID TargetViewBase;
+} PORT_SECTION_WRITE,*PPORT_SECTION_WRITE;
+
+typedef struct _PORT_SECTION_READ {
+       ULONG Length;
+       ULONG ViewSize;
+       ULONG ViewBase;
+} PORT_SECTION_READ,*PPORT_SECTION_READ;
+
+typedef struct _FILE_USER_QUOTA_INFORMATION {
+       ULONG NextEntryOffset;
+       ULONG SidLength;
+       LARGE_INTEGER ChangeTime;
+       LARGE_INTEGER QuotaUsed;
+       LARGE_INTEGER QuotaThreshold;
+       LARGE_INTEGER QuotaLimit;
+       SID Sid [1 ];
+} FILE_USER_QUOTA_INFORMATION,*PFILE_USER_QUOTA_INFORMATION;
+
+typedef struct _FILE_QUOTA_LIST_INFORMATION {
+       ULONG NextEntryOffset;
+       ULONG SidLength;
+       SID Sid [1 ];
+} FILE_QUOTA_LIST_INFORMATION,*PFILE_QUOTA_LIST_INFORMATION;
+
 typedef struct _BLENDFUNCTION {
   BYTE     BlendOp;
   BYTE     BlendFlags;
@@ -4481,5 +6315,3 @@ typedef struct _WIN32_FILE_ATTRIBUTES_DATA {
 #endif /* WIN32_LEAN_AND_MEAN */
 
 #endif /* _GNU_H_WINDOWS32_STRUCTURES */
-
-