update for HEAD-2003050101
[reactos.git] / include / structs.h
1 /*
2    Structures.h
3
4    Declarations for all the Windows32 API Structures
5
6    Copyright (C) 1996 Free Software Foundation, Inc.
7
8    Author:  Scott Christley <scottc@net-community.com>
9    Date: 1996
10
11    This file is part of the Windows32 API Library.
12
13    This library is free software; you can redistribute it and/or
14    modify it under the terms of the GNU Library General Public
15    License as published by the Free Software Foundation; either
16    version 2 of the License, or (at your option) any later version.
17
18    This library is distributed in the hope that it will be useful,
19    but WITHOUT ANY WARRANTY; without even the implied warranty of
20    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21    Library General Public License for more details.
22
23    If you are interested in a warranty or support for this source code,
24    contact Scott Christley <scottc@net-community.com> for more information.
25
26    You should have received a copy of the GNU Library General Public
27    License along with this library; see the file COPYING.LIB.
28    If not, write to the Free Software Foundation,
29    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
30 */
31
32
33 #ifndef _GNU_H_WINDOWS32_STRUCTURES
34 #define _GNU_H_WINDOWS32_STRUCTURES
35
36 #include <ntos/security.h>
37 #include <ntos/time.h>
38 #include <ntdll/rtl.h>
39 #include <ntos/console.h>
40 #include <ntos/keyboard.h>
41 #include <ntos/heap.h>
42 #include <ntos/mm.h>
43 #include <ntos/file.h>
44 #include <ntos/ps.h>
45 #include <ntos/disk.h>
46 #include <ntos/gditypes.h>
47 /*
48 typedef struct _VALENT
49 {
50    LPTSTR ve_valuename;
51    DWORD ve_valuelen;
52    DWORD ve_valueptr;
53    DWORD ve_type;
54 } VALENT, *PVALENT;
55  */
56 typedef struct _VALENT_A {
57    LPSTR ve_valuename;
58    DWORD ve_valuelen;
59    DWORD ve_valueptr;
60    DWORD ve_type;
61 } VALENTA, *PVALENTA;
62
63 typedef struct _VALENT_W {
64    LPWSTR ve_valuename;
65    DWORD  ve_valuelen;
66    DWORD  ve_valueptr;
67    DWORD  ve_type;
68 } VALENTW, *PVALENTW;
69
70 #ifdef UNICODE
71 typedef VALENTW VALENT;
72 typedef PVALENTW PVALENT;
73 #else
74 typedef VALENTA VALENT;
75 typedef PVALENTA PVALENT;
76 #endif
77
78 #ifndef WIN32_LEAN_AND_MEAN
79
80 #ifdef __cplusplus
81 extern "C" {
82 #endif /* __cplusplus */
83
84 typedef struct _ABC {
85   int     abcA;
86   UINT    abcB;
87   int     abcC;
88 } ABC, *LPABC;
89
90 typedef struct _ABCFLOAT {
91   FLOAT   abcfA;
92   FLOAT   abcfB;
93   FLOAT   abcfC;
94 } ABCFLOAT, *LPABCFLOAT;
95
96 typedef struct tagACCEL {
97   BYTE   fVirt;
98   WORD   key;
99   WORD   cmd;
100 } ACCEL, *LPACCEL;
101
102 typedef struct tagACCESSTIMEOUT {
103   UINT  cbSize;
104   DWORD dwFlags;
105   DWORD iTimeOutMSec;
106 } ACCESSTIMEOUT;
107
108 typedef struct _ACTION_HEADER {
109   ULONG   transport_id;
110   USHORT  action_code;
111   USHORT  reserved;
112 } ACTION_HEADER;
113
114 typedef struct _ADAPTER_STATUS {
115   UCHAR   adapter_address[6];
116   UCHAR   rev_major;
117   UCHAR   reserved0;
118   UCHAR   adapter_type;
119   UCHAR   rev_minor;
120   WORD    duration;
121   WORD    frmr_recv;
122   WORD    frmr_xmit;
123   WORD    iframe_recv_err;
124   WORD    xmit_aborts;
125   DWORD   xmit_success;
126   DWORD   recv_success;
127   WORD    iframe_xmit_err;
128   WORD    recv_buff_unavail;
129   WORD    t1_timeouts;
130   WORD    ti_timeouts;
131   DWORD   reserved1;
132   WORD    free_ncbs;
133   WORD    max_cfg_ncbs;
134   WORD    max_ncbs;
135   WORD    xmit_buf_unavail;
136   WORD    max_dgram_size;
137   WORD    pending_sess;
138   WORD    max_cfg_sess;
139   WORD    max_sess;
140   WORD    max_sess_pkt_size;
141   WORD    name_count;
142 } ADAPTER_STATUS;
143
144 typedef struct _ADDJOB_INFO_1 {
145   LPTSTR  Path;
146   DWORD   JobId;
147 } ADDJOB_INFO_1;
148
149 typedef struct tagANIMATIONINFO {
150   UINT cbSize;
151   int  iMinAnimate;
152 } ANIMATIONINFO, *LPANIMATIONINFO;
153
154 typedef struct _RECT {
155   LONG left;
156   LONG top;
157   LONG right;
158   LONG bottom;
159 } RECT, *LPRECT, *LPCRECT, *PRECT;
160
161 typedef struct _RECTL {
162   LONG left;
163   LONG top;
164   LONG right;
165   LONG bottom;
166 } RECTL, *LPRECTL, *LPCRECTL, *PRECTL;
167
168 typedef struct _AppBarData {
169   DWORD  cbSize;
170   HWND   hWnd;
171   UINT   uCallbackMessage;
172   UINT   uEdge;
173   RECT   rc;
174   LPARAM lParam;
175 } APPBARDATA, *PAPPBARDATA;
176
177 typedef struct tagBITMAP
178 {
179   LONG        bmType;
180   LONG        bmWidth;
181   LONG        bmHeight;
182   LONG        bmWidthBytes;
183   WORD        bmPlanes;
184   WORD        bmBitsPixel;
185   LPVOID      bmBits;
186 } BITMAP, *PBITMAP,   *NPBITMAP,   *LPBITMAP;
187
188 typedef struct tagBITMAPCOREHEADER {
189   DWORD   bcSize;
190   WORD    bcWidth;
191   WORD    bcHeight;
192   WORD    bcPlanes;
193   WORD    bcBitCount;
194 } BITMAPCOREHEADER;
195
196 typedef struct tagRGBTRIPLE {
197   BYTE rgbtBlue;
198   BYTE rgbtGreen;
199   BYTE rgbtRed;
200 } RGBTRIPLE, *PRGBTRIPLE;
201
202 typedef struct _BITMAPCOREINFO {
203   BITMAPCOREHEADER  bmciHeader;
204   RGBTRIPLE         bmciColors[1];
205 } BITMAPCOREINFO, *PBITMAPCOREINFO, *LPBITMAPCOREINFO;
206
207 typedef struct tagBITMAPFILEHEADER {
208   WORD    bfType;
209   DWORD   bfSize;
210   WORD    bfReserved1;
211   WORD    bfReserved2;
212   DWORD   bfOffBits;
213 } BITMAPFILEHEADER __attribute__((packed));
214
215 typedef struct tagBITMAPINFOHEADER {
216   DWORD  biSize;
217   LONG   biWidth;
218   LONG   biHeight;
219   WORD   biPlanes;
220   WORD   biBitCount;
221   DWORD  biCompression;
222   DWORD  biSizeImage;
223   LONG   biXPelsPerMeter;
224   LONG   biYPelsPerMeter;
225   DWORD  biClrUsed;
226   DWORD  biClrImportant;
227 } BITMAPINFOHEADER, *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;
228
229 typedef struct tagRGBQUAD {
230   BYTE    rgbBlue;
231   BYTE    rgbGreen;
232   BYTE    rgbRed;
233   BYTE    rgbReserved;
234 } RGBQUAD;
235
236 typedef struct tagBITMAPINFO {
237   BITMAPINFOHEADER bmiHeader;
238   RGBQUAD          bmiColors[1];
239 } BITMAPINFO, *LPBITMAPINFO, *PBITMAPINFO;
240
241 typedef long FXPT2DOT30,  * LPFXPT2DOT30;
242
243 typedef struct tagCIEXYZ
244 {
245   FXPT2DOT30 ciexyzX;
246   FXPT2DOT30 ciexyzY;
247   FXPT2DOT30 ciexyzZ;
248 } CIEXYZ;
249 typedef CIEXYZ  * LPCIEXYZ;
250
251 typedef struct tagCIEXYZTRIPLE
252 {
253   CIEXYZ  ciexyzRed;
254   CIEXYZ  ciexyzGreen;
255   CIEXYZ  ciexyzBlue;
256 } CIEXYZTRIPLE;
257 typedef CIEXYZTRIPLE  * LPCIEXYZTRIPLE;
258
259 typedef struct {
260   DWORD        bV4Size;
261   LONG         bV4Width;
262   LONG         bV4Height;
263   WORD         bV4Planes;
264   WORD         bV4BitCount;
265   DWORD        bV4V4Compression;
266   DWORD        bV4SizeImage;
267   LONG         bV4XPelsPerMeter;
268   LONG         bV4YPelsPerMeter;
269   DWORD        bV4ClrUsed;
270   DWORD        bV4ClrImportant;
271   DWORD        bV4RedMask;
272   DWORD        bV4GreenMask;
273   DWORD        bV4BlueMask;
274   DWORD        bV4AlphaMask;
275   DWORD        bV4CSType;
276   CIEXYZTRIPLE bV4Endpoints;
277   DWORD        bV4GammaRed;
278   DWORD        bV4GammaGreen;
279   DWORD        bV4GammaBlue;
280 } BITMAPV4HEADER,   *LPBITMAPV4HEADER, *PBITMAPV4HEADER;
281
282 #ifndef _BLOB_DEFINED
283 #define _BLOB_DEFINED
284 typedef struct _BLOB {
285   ULONG   cbSize;
286   BYTE    *pBlobData;
287 } BLOB;
288 #endif
289
290 typedef struct _SHITEMID {
291   USHORT cb;
292   BYTE   abID[1];
293 } SHITEMID, * LPSHITEMID;
294 typedef const SHITEMID  * LPCSHITEMID;
295
296 typedef struct _ITEMIDLIST {
297   SHITEMID mkid;
298 } ITEMIDLIST, * LPITEMIDLIST;
299 typedef const ITEMIDLIST * LPCITEMIDLIST;
300
301 typedef struct _browseinfo {
302   HWND hwndOwner;
303   LPCITEMIDLIST pidlRoot;
304   LPSTR pszDisplayName;
305   LPCSTR lpszTitle;
306   UINT ulFlags;
307   BFFCALLBACK lpfn;
308   LPARAM lParam;
309   int iImage;
310 } BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO;
311
312 typedef struct _BY_HANDLE_FILE_INFORMATION {
313   DWORD    dwFileAttributes;
314   FILETIME ftCreationTime;
315   FILETIME ftLastAccessTime;
316   FILETIME ftLastWriteTime;
317   DWORD    dwVolumeSerialNumber;
318   DWORD    nFileSizeHigh;
319   DWORD    nFileSizeLow;
320   DWORD    nNumberOfLinks;
321   DWORD    nFileIndexHigh;
322   DWORD    nFileIndexLow;
323 } BY_HANDLE_FILE_INFORMATION, *LPBY_HANDLE_FILE_INFORMATION;
324
325 typedef struct _FIXED {
326   WORD  fract;
327   short value;
328 } FIXED;
329
330 typedef struct tagPOINT {
331   LONG x;
332   LONG y;
333 } POINT, *LPPOINT, *PPOINT;
334
335 typedef struct tagPOINTFX {
336   FIXED x;
337   FIXED y;
338 } POINTFX;
339
340 typedef struct _POINTL {
341   LONG x;
342   LONG y;
343 } POINTL, *PPOINTL;
344
345 typedef struct tagPOINTS {
346   SHORT x;
347   SHORT y;
348 } POINTS;
349
350 typedef struct _tagCANDIDATEFORM {
351   DWORD  dwIndex;
352   DWORD  dwStyle;
353   POINT  ptCurrentPos;
354   RECT   rcArea;
355 } CANDIDATEFORM, *LPCANDIDATEFORM;
356
357 typedef struct _tagCANDIDATELIST {
358   DWORD  dwSize;
359   DWORD  dwStyle;
360   DWORD  dwCount;
361   DWORD  dwSelection;
362   DWORD  dwPageStart;
363   DWORD  dwPageSize;
364   DWORD  dwOffset[1];
365 } CANDIDATELIST, *LPCANDIDATELIST;
366
367 typedef struct tagCREATESTRUCT {
368   LPVOID    lpCreateParams;
369   HINSTANCE hInstance;
370   HMENU     hMenu;
371   HWND      hwndParent;
372   int       cy;
373   int       cx;
374   int       y;
375   int       x;
376   LONG      style;
377   LPCTSTR   lpszName;
378   LPCTSTR   lpszClass;
379   DWORD     dwExStyle;
380 } CREATESTRUCT, *LPCREATESTRUCT;
381
382 typedef struct tagCREATESTRUCTA {
383   LPVOID    lpCreateParams;
384   HINSTANCE hInstance;
385   HMENU     hMenu;
386   HWND      hwndParent;
387   int       cy;
388   int       cx;
389   int       y;
390   int       x;
391   LONG      style;
392   LPCSTR   lpszName;
393   LPCSTR   lpszClass;
394   DWORD     dwExStyle;
395 } CREATESTRUCTA, *LPCREATESTRUCTA;
396
397 typedef struct tagCREATESTRUCTW {
398   LPVOID    lpCreateParams;
399   HINSTANCE hInstance;
400   HMENU     hMenu;
401   HWND      hwndParent;
402   int       cy;
403   int       cx;
404   int       y;
405   int       x;
406   LONG      style;
407   LPCWSTR   lpszName;
408   LPCWSTR   lpszClass;
409   DWORD     dwExStyle;
410 } CREATESTRUCTW, *LPCREATESTRUCTW;
411
412 typedef struct tagCBT_CREATEWND {
413   LPCREATESTRUCT lpcs;
414   HWND           hwndInsertAfter;
415 } CBT_CREATEWND;
416
417 typedef struct tagCBTACTIVATESTRUCT {
418   WINBOOL fMouse;
419   HWND hWndActive;
420 } CBTACTIVATESTRUCT;
421
422 typedef struct _CHAR_INFO {
423   union {
424     WCHAR UnicodeChar;
425     CHAR AsciiChar;
426   } Char;
427   WORD Attributes;
428 } CHAR_INFO, *PCHAR_INFO;
429
430 typedef struct _charformat {
431   UINT     cbSize;
432   DWORD    dwMask;
433   DWORD    dwEffects;
434   LONG     yHeight;
435   LONG     yOffset;
436   COLORREF crTextColor;
437   BYTE     bCharSet;
438   BYTE     bPitchAndFamily;
439   TCHAR    szFaceName[LF_FACESIZE];
440 } CHARFORMAT;
441
442 typedef struct _charrange {
443   LONG cpMin;
444   LONG cpMax;
445 } CHARRANGE;
446
447 typedef struct tagCHARSET {
448   DWORD aflBlock[3];
449   DWORD flLang;
450 } CHARSET;
451
452 typedef struct tagFONTSIGNATURE {
453   DWORD  fsUsb[4];
454   DWORD  fsCsb[2];
455 } FONTSIGNATURE, *LPFONTSIGNATURE;
456
457 typedef struct {
458   UINT ciCharset;
459   UINT ciACP;
460   FONTSIGNATURE fs;
461 } CHARSETINFO, *LPCHARSETINFO;
462
463 typedef struct {
464   DWORD        lStructSize;
465   HWND         hwndOwner;
466   HWND         hInstance;
467   COLORREF     rgbResult;
468   COLORREF*    lpCustColors;
469   DWORD        Flags;
470   LPARAM       lCustData;
471   LPCCHOOKPROC lpfnHook;
472   LPCTSTR      lpTemplateName;
473 } CHOOSECOLOR, *LPCHOOSECOLOR;
474
475 typedef struct tagLOGFONTA {
476   LONG lfHeight;
477   LONG lfWidth;
478   LONG lfEscapement;
479   LONG lfOrientation;
480   LONG lfWeight;
481   BYTE lfItalic;
482   BYTE lfUnderline;
483   BYTE lfStrikeOut;
484   BYTE lfCharSet;
485   BYTE lfOutPrecision;
486   BYTE lfClipPrecision;
487   BYTE lfQuality;
488   BYTE lfPitchAndFamily;
489   CHAR lfFaceName[LF_FACESIZE];
490 } LOGFONTA, *LPLOGFONTA, *PLOGFONTA;
491
492 typedef struct tagLOGFONTW {
493   LONG lfHeight;
494   LONG lfWidth;
495   LONG lfEscapement;
496   LONG lfOrientation;
497   LONG lfWeight;
498   BYTE lfItalic;
499   BYTE lfUnderline;
500   BYTE lfStrikeOut;
501   BYTE lfCharSet;
502   BYTE lfOutPrecision;
503   BYTE lfClipPrecision;
504   BYTE lfQuality;
505   BYTE lfPitchAndFamily;
506   WCHAR lfFaceName[LF_FACESIZE];
507 } LOGFONTW, *LPLOGFONTW, *PLOGFONTW;
508
509 #ifdef UNICODE
510 typedef LOGFONTW LOGFONT;
511 typedef LPLOGFONTW LPLOGFONT;
512 typedef PLOGFONTW PLOGFONT;
513 #else
514 typedef LOGFONTA LOGFONT;
515 typedef LPLOGFONTA LPLOGFONT;
516 typedef PLOGFONTA PLOGFONT;
517 #endif
518
519 typedef struct tagCHOOSEFONTA {
520   DWORD        lStructSize;
521   HWND         hwndOwner;
522   HDC          hDC;
523   LPLOGFONTA   lpLogFont;
524   INT          iPointSize;
525   DWORD        Flags;
526   DWORD        rgbColors;
527   LPARAM       lCustData;
528   LPCFHOOKPROC lpfnHook;
529   LPCSTR       lpTemplateName;
530   HINSTANCE    hInstance;
531   LPSTR        lpszStyle;
532   WORD         nFontType;
533   WORD         ___MISSING_ALIGNMENT__;
534   INT          nSizeMin;
535   INT          nSizeMax;
536 } CHOOSEFONTA, *LPCHOOSEFONTA;
537
538 typedef struct tagCHOOSEFONTW {
539   DWORD        lStructSize;
540   HWND         hwndOwner;
541   HDC          hDC;
542   LPLOGFONTW   lpLogFont;
543   INT          iPointSize;
544   DWORD        Flags;
545   DWORD        rgbColors;
546   LPARAM       lCustData;
547   LPCFHOOKPROC lpfnHook;
548   LPCWSTR      lpTemplateName;
549   HINSTANCE    hInstance;
550   LPWSTR        lpszStyle;
551   WORD         nFontType;
552   WORD         ___MISSING_ALIGNMENT__;
553   INT          nSizeMin;
554   INT          nSizeMax;
555 } CHOOSEFONTW, *LPCHOOSEFONTW;
556
557 #ifdef UNICODE
558 typedef CHOOSEFONTW CHOOSEFONT;
559 typedef LPCHOOSEFONTW LPCHOOSEFONT;
560 #else
561 typedef CHOOSEFONTA CHOOSEFONT;
562 typedef LPCHOOSEFONTA LPCHOOSEFONT;
563 #endif
564
565 typedef struct _IDA {
566   UINT cidl;
567   UINT aoffset[1];
568 } CIDA, * LPIDA;
569
570 typedef struct tagCLIENTCREATESTRUCT {
571   HANDLE hWindowMenu;
572   UINT   idFirstChild;
573 } CLIENTCREATESTRUCT;
574
575 typedef CLIENTCREATESTRUCT *LPCLIENTCREATESTRUCT;
576
577 typedef struct _CMInvokeCommandInfo {
578   DWORD cbSize;
579   DWORD fMask;
580   HWND hwnd;
581   LPCSTR lpVerb;
582   LPCSTR lpParameters;
583   LPCSTR lpDirectory;
584   int nShow;
585   DWORD dwHotKey;
586   HANDLE hIcon;
587 } CMINVOKECOMMANDINFO, *LPCMINVOKECOMMANDINFO;
588
589 typedef struct  tagCOLORADJUSTMENT {
590   WORD  caSize;
591   WORD  caFlags;
592   WORD  caIlluminantIndex;
593   WORD  caRedGamma;
594   WORD  caGreenGamma;
595   WORD  caBlueGamma;
596   WORD  caReferenceBlack;
597   WORD  caReferenceWhite;
598   SHORT caContrast;
599   SHORT caBrightness;
600   SHORT caColorfulness;
601   SHORT caRedGreenTint;
602 } COLORADJUSTMENT, *LPCOLORADJUSTMENT;
603
604 typedef struct _COLORMAP {
605   COLORREF from;
606   COLORREF to;
607 } COLORMAP,  * LPCOLORMAP;
608
609 typedef struct _DCB {
610   DWORD DCBlength;
611   DWORD BaudRate;
612   DWORD fBinary: 1;
613   DWORD fParity: 1;
614   DWORD fOutxCtsFlow:1;
615   DWORD fOutxDsrFlow:1;
616   DWORD fDtrControl:2;
617   DWORD fDsrSensitivity:1;
618   DWORD fTXContinueOnXoff:1;
619   DWORD fOutX: 1;
620   DWORD fInX: 1;
621   DWORD fErrorChar: 1;
622   DWORD fNull: 1;
623   DWORD fRtsControl:2;
624   DWORD fAbortOnError:1;
625   DWORD fDummy2:17;
626   WORD wReserved;
627   WORD XonLim;
628   WORD XoffLim;
629   BYTE ByteSize;
630   BYTE Parity;
631   BYTE StopBits;
632   char XonChar;
633   char XoffChar;
634   char ErrorChar;
635   char EofChar;
636   char EvtChar;
637   WORD wReserved1;
638 } DCB, *LPDCB;
639
640 typedef struct _COMM_CONFIG {
641   DWORD dwSize;
642   WORD  wVersion;
643   WORD  wReserved;
644   DCB   dcb;
645   DWORD dwProviderSubType;
646   DWORD dwProviderOffset;
647   DWORD dwProviderSize;
648   WCHAR wcProviderData[1];
649 } COMMCONFIG, *LPCOMMCONFIG;
650
651 typedef struct _COMMPROP {
652   WORD  wPacketLength;
653   WORD  wPacketVersion;
654   DWORD dwServiceMask;
655   DWORD dwReserved1;
656   DWORD dwMaxTxQueue;
657   DWORD dwMaxRxQueue;
658   DWORD dwMaxBaud;
659   DWORD dwProvSubType;
660   DWORD dwProvCapabilities;
661   DWORD dwSettableParams;
662   DWORD dwSettableBaud;
663   WORD  wSettableData;
664   WORD  wSettableStopParity;
665   DWORD dwCurrentTxQueue;
666   DWORD dwCurrentRxQueue;
667   DWORD dwProvSpec1;
668   DWORD dwProvSpec2;
669   WCHAR wcProvChar[1];
670 } COMMPROP, *LPCOMMPROP;
671
672 typedef struct _COMMTIMEOUTS {
673   DWORD ReadIntervalTimeout;
674   DWORD ReadTotalTimeoutMultiplier;
675   DWORD ReadTotalTimeoutConstant;
676   DWORD WriteTotalTimeoutMultiplier;
677   DWORD WriteTotalTimeoutConstant;
678 } COMMTIMEOUTS,*LPCOMMTIMEOUTS;
679
680 typedef struct tagCOMPAREITEMSTRUCT {
681   UINT  CtlType;
682   UINT  CtlID;
683   HWND  hwndItem;
684   UINT  itemID1;
685   DWORD itemData1;
686   UINT  itemID2;
687   DWORD itemData2;
688 } COMPAREITEMSTRUCT;
689
690 typedef struct {
691   COLORREF crText;
692   COLORREF crBackground;
693   DWORD dwEffects;
694 } COMPCOLOR;
695
696 typedef struct _tagCOMPOSITIONFORM {
697   DWORD  dwStyle;
698   POINT  ptCurrentPos;
699   RECT   rcArea;
700 } COMPOSITIONFORM, *LPCOMPOSITIONFORM;
701
702 typedef struct _COMSTAT {
703   DWORD fCtsHold : 1;
704   DWORD fDsrHold : 1;
705   DWORD fRlsdHold : 1;
706   DWORD fXoffHold : 1;
707   DWORD fXoffSent : 1;
708   DWORD fEof : 1;
709   DWORD fTxim : 1;
710   DWORD fReserved : 25;
711   DWORD cbInQue;
712   DWORD cbOutQue;
713 } COMSTAT, *LPCOMSTAT;
714
715 typedef struct tagCONVCONTEXT {
716   UINT  cb;
717   UINT  wFlags;
718   UINT  wCountryID;
719   int   iCodePage;
720   DWORD dwLangID;
721   DWORD dwSecurity;
722   SECURITY_QUALITY_OF_SERVICE qos;
723 } CONVCONTEXT;
724
725 typedef CONVCONTEXT *PCONVCONTEXT;
726
727 typedef struct tagCONVINFO {
728   DWORD       cb;
729   DWORD       hUser;
730   HCONV       hConvPartner;
731   HSZ         hszSvcPartner;
732   HSZ         hszServiceReq;
733   HSZ         hszTopic;
734   HSZ         hszItem;
735   UINT        wFmt;
736   UINT        wType;
737   UINT        wStatus;
738   UINT        wConvst;
739   UINT        wLastError;
740   HCONVLIST   hConvList;
741   CONVCONTEXT ConvCtxt;
742   HWND        hwnd;
743   HWND        hwndPartner;
744 } CONVINFO, *PCONVINFO;
745
746 typedef struct tagCOPYDATASTRUCT {
747   DWORD dwData;
748   DWORD cbData;
749   PVOID lpData;
750 } COPYDATASTRUCT;
751
752 typedef struct _cpinfo {
753   UINT MaxCharSize;
754   BYTE DefaultChar[MAX_DEFAULTCHAR];
755   BYTE LeadByte[MAX_LEADBYTES];
756 } CPINFO, *LPCPINFO;
757
758 typedef struct tagCPLINFO {
759   int  idIcon;
760   int  idName;
761   int  idInfo;
762   LONG lData;
763 } CPLINFO;
764
765 typedef struct _CREATE_PROCESS_DEBUG_INFO {
766   HANDLE hFile;
767   HANDLE hProcess;
768   HANDLE hThread;
769   LPVOID lpBaseOfImage;
770   DWORD dwDebugInfoFileOffset;
771   DWORD nDebugInfoSize;
772   LPVOID lpThreadLocalBase;
773   LPTHREAD_START_ROUTINE lpStartAddress;
774   LPVOID lpImageName;
775   WORD fUnicode;
776 } CREATE_PROCESS_DEBUG_INFO;
777
778 typedef struct _CREATE_THREAD_DEBUG_INFO {
779   HANDLE hThread;
780   LPVOID lpThreadLocalBase;
781   LPTHREAD_START_ROUTINE lpStartAddress;
782 } CREATE_THREAD_DEBUG_INFO;
783
784 /*
785  TODO: sockets
786 typedef struct _SOCKET_ADDRESS {
787   LPSOCKADDR lpSockaddr ;
788   INT iSockaddrLength ;
789 } SOCKET_ADDRESS, *PSOCKET_ADDRESS, *LPSOCKET_ADDRESS;
790 */
791
792 /*
793 typedef struct _CSADDR_INFO {
794   SOCKET_ADDRESS  LocalAddr;
795   SOCKET_ADDRESS  RemoteAddr;
796   INT             iSocketType;
797   INT             iProtocol;
798 } CSADDR_INFO;
799 */
800
801 typedef struct _currencyfmt {
802   UINT      NumDigits;
803   UINT      LeadingZero;
804   UINT      Grouping;
805   LPTSTR    lpDecimalSep;
806   LPTSTR    lpThousandSep;
807   UINT      NegativeOrder;
808   UINT      PositiveOrder;
809   LPTSTR    lpCurrencySymbol;
810 } CURRENCYFMT;
811
812 typedef struct tagCURSORSHAPE {
813   int     xHotSpot;
814   int     yHotSpot;
815   int     cx;
816   int     cy;
817   int     cbWidth;
818   BYTE    Planes;
819   BYTE    BitsPixel;
820 } CURSORSHAPE,   *LPCURSORSHAPE;
821
822 typedef struct tagCWPRETSTRUCT {
823   LRESULT lResult;
824   LPARAM  lParam;
825   WPARAM  wParam;
826   DWORD   message;
827   HWND    hwnd;
828 } CWPRETSTRUCT;
829
830 typedef struct tagCWPSTRUCT {
831   LPARAM  lParam;
832   WPARAM  wParam;
833   UINT    message;
834   HWND    hwnd;
835 } CWPSTRUCT;
836
837 typedef struct _DATATYPES_INFO_1 {
838   LPTSTR pName;
839 } DATATYPES_INFO_1;
840
841 typedef struct {
842   unsigned short bAppReturnCode:8,
843     reserved:6,
844     fBusy:1,
845     fAck:1;
846 } DDEACK;
847
848 typedef struct {
849   unsigned short reserved:14,
850     fDeferUpd:1,
851     fAckReq:1;
852   short cfFormat;
853 } DDEADVISE;
854
855 typedef struct {
856   unsigned short unused:12,
857     fResponse:1,
858     fRelease:1,
859     reserved:1,
860     fAckReq:1;
861   short cfFormat;
862   BYTE  Value[1];
863 } DDEDATA;
864
865 typedef struct {
866   unsigned short unused:13,
867     fRelease:1,
868     fDeferUpd:1,
869     fAckReq:1;
870   short cfFormat;
871 } DDELN;
872
873 typedef struct tagDDEML_MSG_HOOK_DATA {
874   UINT  uiLo;
875   UINT  uiHi;
876   DWORD cbData;
877   DWORD Data[8];
878 } DDEML_MSG_HOOK_DATA;
879
880 typedef struct {
881   unsigned short unused:13,
882     fRelease:1,
883     fReserved:2;
884   short cfFormat;
885   BYTE  Value[1];
886 } DDEPOKE;
887
888 typedef struct {
889   unsigned short unused:12,
890     fAck:1,
891     fRelease:1,
892     fReserved:1,
893     fAckReq:1;
894   short cfFormat;
895   BYTE rgb[1];
896 } DDEUP;
897
898 typedef struct _EXCEPTION_DEBUG_INFO {
899   EXCEPTION_RECORD ExceptionRecord;
900   DWORD dwFirstChance;
901 } EXCEPTION_DEBUG_INFO;
902
903 typedef struct _EXIT_PROCESS_DEBUG_INFO {
904   DWORD dwExitCode;
905 } EXIT_PROCESS_DEBUG_INFO;
906
907 typedef struct _EXIT_THREAD_DEBUG_INFO {
908   DWORD dwExitCode;
909 } EXIT_THREAD_DEBUG_INFO;
910
911 typedef struct _LOAD_DLL_DEBUG_INFO {
912   HANDLE hFile;
913   LPVOID lpBaseOfDll;
914   DWORD  dwDebugInfoFileOffset;
915   DWORD  nDebugInfoSize;
916   LPVOID lpImageName;
917   WORD fUnicode;
918 } LOAD_DLL_DEBUG_INFO;
919
920 typedef struct _UNLOAD_DLL_DEBUG_INFO {
921   LPVOID lpBaseOfDll;
922 } UNLOAD_DLL_DEBUG_INFO;
923
924 typedef struct _OUTPUT_DEBUG_STRING_INFO {
925   LPSTR lpDebugStringData;
926   WORD  fUnicode;
927   WORD  nDebugStringLength;
928 } OUTPUT_DEBUG_STRING_INFO;
929
930 typedef struct _RIP_INFO {
931   DWORD  dwError;
932   DWORD  dwType;
933 } RIP_INFO;
934
935 typedef struct _DEBUG_EVENT {
936   DWORD dwDebugEventCode;
937   DWORD dwProcessId;
938   DWORD dwThreadId;
939   union {
940     EXCEPTION_DEBUG_INFO Exception;
941     CREATE_THREAD_DEBUG_INFO CreateThread;
942     CREATE_PROCESS_DEBUG_INFO CreateProcessInfo;
943     EXIT_THREAD_DEBUG_INFO ExitThread;
944     EXIT_PROCESS_DEBUG_INFO ExitProcess;
945     LOAD_DLL_DEBUG_INFO LoadDll;
946     UNLOAD_DLL_DEBUG_INFO UnloadDll;
947     OUTPUT_DEBUG_STRING_INFO DebugString;
948     RIP_INFO RipInfo;
949   } u;
950 } DEBUG_EVENT, *LPDEBUG_EVENT;
951
952 typedef struct tagDEBUGHOOKINFO {
953   DWORD  idThread;
954   DWORD  idThreadInstaller;
955   LPARAM lParam;
956   WPARAM wParam;
957   int    code;
958 } DEBUGHOOKINFO;
959
960 typedef struct tagDELETEITEMSTRUCT {
961   UINT CtlType;
962   UINT CtlID;
963   UINT itemID;
964   HWND hwndItem;
965   UINT itemData;
966 } DELETEITEMSTRUCT;
967
968 typedef struct _DEV_BROADCAST_HDR {
969   ULONG dbch_size;
970   ULONG dbch_devicetype;
971   ULONG dbch_reserved;
972 } DEV_BROADCAST_HDR;
973 typedef DEV_BROADCAST_HDR *PDEV_BROADCAST_HDR;
974
975 typedef struct _DEV_BROADCAST_OEM {
976   ULONG dbco_size;
977   ULONG dbco_devicetype;
978   ULONG dbco_reserved;
979   ULONG dbco_identifier;
980   ULONG dbco_suppfunc;
981 } DEV_BROADCAST_OEM;
982 typedef DEV_BROADCAST_OEM *PDEV_BROADCAST_OEM;
983
984 typedef struct _DEV_BROADCAST_PORT {
985   ULONG dbcp_size;
986   ULONG dbcp_devicetype;
987   ULONG dbcp_reserved;
988   char dbcp_name[1];
989 } DEV_BROADCAST_PORT;
990 typedef DEV_BROADCAST_PORT *PDEV_BROADCAST_PORT;
991
992 struct _DEV_BROADCAST_USERDEFINED {
993   struct _DEV_BROADCAST_HDR dbud_dbh;
994   char  dbud_szName[1];
995   BYTE  dbud_rgbUserDefined[1];
996 };
997
998 typedef struct _DEV_BROADCAST_VOLUME {
999   ULONG dbcv_size;
1000   ULONG dbcv_devicetype;
1001   ULONG dbcv_reserved;
1002   ULONG dbcv_unitmask;
1003   USHORT dbcv_flags;
1004 } DEV_BROADCAST_VOLUME;
1005 typedef DEV_BROADCAST_VOLUME *PDEV_BROADCAST_VOLUME;
1006
1007 typedef struct tagDEVNAMES {
1008   WORD wDriverOffset;
1009   WORD wDeviceOffset;
1010   WORD wOutputOffset;
1011   WORD wDefault;
1012 } DEVNAMES, *LPDEVNAMES;
1013
1014 typedef struct tagDIBSECTION {
1015   BITMAP              dsBm;
1016   BITMAPINFOHEADER    dsBmih;
1017   DWORD               dsBitfields[3];
1018   HANDLE              dshSection;
1019   DWORD               dsOffset;
1020 } DIBSECTION;
1021
1022 typedef struct _DISK_PERFORMANCE {
1023   LARGE_INTEGER BytesRead;
1024   LARGE_INTEGER BytesWritten;
1025   LARGE_INTEGER ReadTime;
1026   LARGE_INTEGER WriteTime;
1027   DWORD ReadCount;
1028   DWORD WriteCount;
1029   DWORD QueueDepth;
1030 } DISK_PERFORMANCE ;
1031
1032 typedef struct {
1033   DWORD style;
1034   DWORD dwExtendedStyle;
1035   short x;
1036   short y;
1037   short cx;
1038   short cy;
1039   WORD  id;
1040 } DLGITEMTEMPLATE PACKED;
1041
1042 typedef DLGITEMTEMPLATE *LPDLGITEMTEMPLATE;
1043 typedef DLGITEMTEMPLATE *PDLGITEMTEMPLATE;
1044
1045 typedef struct {
1046   DWORD style;
1047   DWORD dwExtendedStyle;
1048   WORD  cdit;
1049   short x;
1050   short y;
1051   short cx;
1052   short cy;
1053 } DLGTEMPLATE PACKED;
1054
1055 typedef DLGTEMPLATE *LPDLGTEMPLATE;
1056 typedef const DLGTEMPLATE *LPCDLGTEMPLATE;
1057
1058 typedef struct _DOC_INFO_1 {
1059   LPTSTR pDocName;
1060   LPTSTR pOutputFile;
1061   LPTSTR pDatatype;
1062 } DOC_INFO_1;
1063
1064 typedef struct _DOC_INFO_2 {
1065   LPTSTR pDocName;
1066   LPTSTR pOutputFile;
1067   LPTSTR pDatatype;
1068   DWORD  dwMode;
1069   DWORD  JobId;
1070 } DOC_INFO_2;
1071
1072 typedef struct {
1073   int     cbSize;
1074   LPCTSTR lpszDocName;
1075   LPCTSTR lpszOutput;
1076   LPCTSTR lpszDatatype;
1077   DWORD   fwType;
1078 } DOCINFO, *PDOCINFO;
1079
1080 typedef struct {
1081   UINT uNotification;
1082   HWND hWnd;
1083   POINT ptCursor;
1084 } DRAGLISTINFO, *LPDRAGLISTINFO;
1085
1086 typedef struct tagDRAWITEMSTRUCT {
1087   UINT  CtlType;
1088   UINT  CtlID;
1089   UINT  itemID;
1090   UINT  itemAction;
1091   UINT  itemState;
1092   HWND  hwndItem;
1093   HDC   hDC;
1094   RECT  rcItem;
1095   DWORD itemData;
1096 } DRAWITEMSTRUCT, *LPDRAWITEMSTRUCT, *PDRAWITEMSTRUCT;
1097
1098 typedef struct {
1099   UINT cbSize;
1100   int  iTabLength;
1101   int  iLeftMargin;
1102   int  iRightMargin;
1103   UINT uiLengthDrawn;
1104 } DRAWTEXTPARAMS, *LPDRAWTEXTPARAMS;
1105
1106
1107
1108 typedef struct _DRIVER_INFO_1 {
1109   LPTSTR pName;
1110 } DRIVER_INFO_1;
1111
1112 typedef struct _DRIVER_INFO_2 {
1113   DWORD  cVersion;
1114   LPTSTR pName;
1115   LPTSTR pEnvironment;
1116   LPTSTR pDriverPath;
1117   LPTSTR pDataFile;
1118   LPTSTR pConfigFile;
1119 } DRIVER_INFO_2;
1120
1121 typedef struct _DRIVER_INFO_3 {
1122   DWORD  cVersion;
1123   LPTSTR pName;
1124   LPTSTR pEnvironment;
1125   LPTSTR pDriverPath;
1126   LPTSTR pDataFile;
1127   LPTSTR pConfigFile;
1128   LPTSTR pHelpFile;
1129   LPTSTR pDependentFiles;
1130   LPTSTR pMonitorName;
1131   LPTSTR pDefaultDataType;
1132 } DRIVER_INFO_3;
1133
1134 typedef struct _editstream {
1135   DWORD dwCookie;
1136   DWORD dwError;
1137   EDITSTREAMCALLBACK pfnCallback;
1138 } EDITSTREAM;
1139
1140 typedef struct tagEMR
1141 {
1142   DWORD iType;
1143   DWORD nSize;
1144 } EMR, *PEMR;
1145
1146 typedef struct tagEMRANGLEARC
1147 {
1148   EMR     emr;
1149   POINTL  ptlCenter;
1150   DWORD   nRadius;
1151   FLOAT   eStartAngle;
1152   FLOAT   eSweepAngle;
1153 } EMRANGLEARC, *PEMRANGLEARC;
1154
1155 typedef struct tagEMRARC
1156 {
1157   EMR    emr;
1158   RECTL  rclBox;
1159   POINTL ptlStart;
1160   POINTL ptlEnd;
1161 } EMRARC,   *PEMRARC,
1162     EMRARCTO, *PEMRARCTO,
1163     EMRCHORD, *PEMRCHORD,
1164     EMRPIE,   *PEMRPIE;
1165
1166 typedef struct  _XFORM
1167 {
1168   FLOAT   eM11;
1169   FLOAT   eM12;
1170   FLOAT   eM21;
1171   FLOAT   eM22;
1172   FLOAT   eDx;
1173   FLOAT   eDy;
1174 } XFORM, *PXFORM, *LPXFORM;
1175
1176 typedef struct tagEMRBITBLT
1177 {
1178   EMR      emr;
1179   RECTL    rclBounds;
1180   LONG     xDest;
1181   LONG     yDest;
1182   LONG     cxDest;
1183   LONG     cyDest;
1184   DWORD    dwRop;
1185   LONG     xSrc;
1186   LONG     ySrc;
1187   XFORM    xformSrc;
1188   COLORREF crBkColorSrc;
1189   DWORD    iUsageSrc;
1190   DWORD    offBmiSrc;
1191   DWORD    offBitsSrc;
1192   DWORD    cbBitsSrc;
1193 } EMRBITBLT, *PEMRBITBLT;
1194
1195 typedef struct tagLOGBRUSH {
1196   UINT     lbStyle;
1197   COLORREF lbColor;
1198   LONG     lbHatch;
1199 } LOGBRUSH, *PLOGBRUSH;
1200
1201 typedef struct tagEMRCREATEBRUSHINDIRECT
1202 {
1203   EMR      emr;
1204   DWORD    ihBrush;
1205   LOGBRUSH lb;
1206 } EMRCREATEBRUSHINDIRECT, *PEMRCREATEBRUSHINDIRECT;
1207
1208 typedef LONG LCSCSTYPE;
1209 typedef LONG LCSGAMUTMATCH;
1210
1211 typedef struct tagLOGCOLORSPACE {
1212   DWORD         lcsSignature;
1213   DWORD         lcsVersion;
1214   DWORD         lcsSize;
1215
1216   LCSCSTYPE     lcsCSType;
1217   LCSGAMUTMATCH lcsIntent;
1218   CIEXYZTRIPLE  lcsEndpoints;
1219   DWORD         lcsGammaRed;
1220   DWORD         lcsGammaGreen;
1221   DWORD         lcsGammaBlue;
1222   TCHAR         lcsFilename[MAX_PATH];
1223 } LOGCOLORSPACE, *LPLOGCOLORSPACE;
1224
1225 typedef struct tagEMRCREATECOLORSPACE
1226 {
1227   EMR           emr;
1228   DWORD         ihCS;
1229   LOGCOLORSPACE lcs;
1230 } EMRCREATECOLORSPACE, *PEMRCREATECOLORSPACE;
1231
1232 typedef struct tagEMRCREATEDIBPATTERNBRUSHPT
1233 {
1234   EMR   emr;
1235   DWORD ihBrush;
1236   DWORD iUsage;
1237   DWORD offBmi;
1238   DWORD cbBmi;
1239   DWORD offBits;
1240   DWORD cbBits;
1241 } EMRCREATEDIBPATTERNBRUSHPT,
1242     PEMRCREATEDIBPATTERNBRUSHPT;
1243
1244 typedef struct tagEMRCREATEMONOBRUSH
1245 {
1246   EMR   emr;
1247   DWORD ihBrush;
1248   DWORD iUsage;
1249   DWORD offBmi;
1250   DWORD cbBmi;
1251   DWORD offBits;
1252   DWORD cbBits;
1253 } EMRCREATEMONOBRUSH, *PEMRCREATEMONOBRUSH;
1254
1255 typedef struct tagPALETTEENTRY {
1256   BYTE peRed;
1257   BYTE peGreen;
1258   BYTE peBlue;
1259   BYTE peFlags;
1260 } PALETTEENTRY, *LPPALETTEENTRY, *PPALETTEENTRY;
1261
1262 typedef struct tagLOGPALETTE {
1263   WORD         palVersion;
1264   WORD         palNumEntries;
1265   PALETTEENTRY palPalEntry[1];
1266 } LOGPALETTE, *LPLOGPALETTE, *PLOGPALETTE;
1267
1268 typedef struct tagEMRCREATEPALETTE
1269 {
1270   EMR        emr;
1271   DWORD      ihPal;
1272   LOGPALETTE lgpl;
1273 } EMRCREATEPALETTE, *PEMRCREATEPALETTE;
1274
1275 typedef struct tagLOGPEN {
1276   UINT     lopnStyle;
1277   POINT    lopnWidth;
1278   COLORREF lopnColor;
1279 } LOGPEN, *PLOGPEN;
1280
1281 typedef struct tagEMRCREATEPEN
1282 {
1283   EMR    emr;
1284   DWORD  ihPen;
1285   LOGPEN lopn;
1286 } EMRCREATEPEN, *PEMRCREATEPEN;
1287
1288 typedef struct tagEMRELLIPSE
1289 {
1290   EMR   emr;
1291   RECTL rclBox;
1292 } EMRELLIPSE,  *PEMRELLIPSE,
1293     EMRRECTANGLE, *PEMRRECTANGLE;
1294
1295 typedef struct tagEMREOF
1296 {
1297   EMR     emr;
1298   DWORD   nPalEntries;
1299   DWORD   offPalEntries;
1300   DWORD   nSizeLast;
1301 } EMREOF, *PEMREOF;
1302
1303 typedef struct tagEMREXCLUDECLIPRECT
1304 {
1305   EMR   emr;
1306   RECTL rclClip;
1307 } EMREXCLUDECLIPRECT,   *PEMREXCLUDECLIPRECT,
1308     EMRINTERSECTCLIPRECT, *PEMRINTERSECTCLIPRECT;
1309
1310 typedef struct tagPANOSE {
1311   BYTE bFamilyType;
1312   BYTE bSerifStyle;
1313   BYTE bWeight;
1314   BYTE bProportion;
1315   BYTE bContrast;
1316   BYTE bStrokeVariation;
1317   BYTE bArmStyle;
1318   BYTE bLetterform;
1319   BYTE bMidline;
1320   BYTE bXHeight;
1321 } PANOSE;
1322
1323 typedef struct tagEXTLOGFONTA {
1324     LOGFONTA elfLogFont;
1325     BCHAR    elfFullName[LF_FULLFACESIZE];
1326     BCHAR    elfStyle[LF_FACESIZE];
1327     DWORD    elfVersion;
1328     DWORD    elfStyleSize;
1329     DWORD    elfMatch;
1330     DWORD    elfReserved;
1331     BYTE     elfVendorId[ELF_VENDOR_SIZE];
1332     DWORD    elfCulture;
1333     PANOSE   elfPanose;
1334 } EXTLOGFONTA, *LPEXTLOGFONTA;
1335
1336 typedef struct tagEXTLOGFONTW {
1337     LOGFONTW elfLogFont;
1338     WCHAR    elfFullName[LF_FULLFACESIZE];
1339     WCHAR    elfStyle[LF_FACESIZE];
1340     DWORD    elfVersion;
1341     DWORD    elfStyleSize;
1342     DWORD    elfMatch;
1343     DWORD    elfReserved;
1344     BYTE     elfVendorId[ELF_VENDOR_SIZE];
1345     DWORD    elfCulture;
1346     PANOSE   elfPanose;
1347 } EXTLOGFONTW, *LPEXTLOGFONTW;
1348
1349 #ifdef UNICODE
1350 typedef EXTLOGFONTW EXTLOGFONT;
1351 typedef LPEXTLOGFONTW LPEXTLOGFONT;
1352 #else
1353 typedef EXTLOGFONTA EXTLOGFONT;
1354 typedef LPEXTLOGFONTA LPEXTLOGFONT;
1355 #endif
1356
1357 typedef struct tagEMREXTCREATEFONTINDIRECTW
1358 {
1359   EMR         emr;
1360   DWORD       ihFont;
1361   EXTLOGFONTW elfw;
1362 } EMREXTCREATEFONTINDIRECTW,
1363     PEMREXTCREATEFONTINDIRECTW;
1364
1365 typedef struct tagEXTLOGPEN {
1366   UINT     elpPenStyle;
1367   UINT     elpWidth;
1368   UINT     elpBrushStyle;
1369   COLORREF elpColor;
1370   LONG     elpHatch;
1371   DWORD    elpNumEntries;
1372   DWORD    elpStyleEntry[1];
1373 } EXTLOGPEN;
1374
1375 typedef struct tagEMREXTCREATEPEN
1376 {
1377   EMR       emr;
1378   DWORD     ihPen;
1379   DWORD     offBmi;
1380   DWORD     cbBmi;
1381   DWORD     offBits;
1382   DWORD     cbBits;
1383   EXTLOGPEN elp;
1384 } EMREXTCREATEPEN, *PEMREXTCREATEPEN;
1385
1386 typedef struct tagEMREXTFLOODFILL
1387 {
1388   EMR     emr;
1389   POINTL  ptlStart;
1390   COLORREF crColor;
1391   DWORD   iMode;
1392 } EMREXTFLOODFILL, *PEMREXTFLOODFILL;
1393
1394 typedef struct tagEMREXTSELECTCLIPRGN
1395 {
1396   EMR   emr;
1397   DWORD cbRgnData;
1398   DWORD iMode;
1399   BYTE  RgnData[1];
1400 } EMREXTSELECTCLIPRGN, *PEMREXTSELECTCLIPRGN;
1401
1402 typedef struct tagEMRTEXT
1403 {
1404   POINTL ptlReference;
1405   DWORD  nChars;
1406   DWORD  offString;
1407   DWORD  fOptions;
1408   RECTL  rcl;
1409   DWORD  offDx;
1410 } EMRTEXT, *PEMRTEXT;
1411
1412 typedef struct tagEMREXTTEXTOUTA
1413 {
1414   EMR     emr;
1415   RECTL   rclBounds;
1416   DWORD   iGraphicsMode;
1417   FLOAT   exScale;
1418   FLOAT   eyScale;
1419   EMRTEXT emrtext;
1420 } EMREXTTEXTOUTA, *PEMREXTTEXTOUTA,
1421     EMREXTTEXTOUTW, *PEMREXTTEXTOUTW;
1422
1423 typedef struct tagEMRFILLPATH
1424 {
1425   EMR   emr;
1426   RECTL rclBounds;
1427 } EMRFILLPATH,          *PEMRFILLPATH,
1428     EMRSTROKEANDFILLPATH, *PEMRSTROKEANDFILLPATH,
1429     EMRSTROKEPATH,        *PEMRSTROKEPATH;
1430
1431 typedef struct tagEMRFILLRGN
1432 {
1433   EMR   emr;
1434   RECTL rclBounds;
1435   DWORD cbRgnData;
1436   DWORD ihBrush;
1437   BYTE  RgnData[1];
1438 } EMRFILLRGN, *PEMRFILLRGN;
1439
1440 typedef struct tagEMRFORMAT {
1441   DWORD   dSignature;
1442   DWORD   nVersion;
1443   DWORD   cbData;
1444   DWORD   offData;
1445 } EMRFORMAT;
1446
1447 typedef struct tagSIZE {
1448   LONG cx;
1449   LONG cy;
1450 } SIZE, *PSIZE, *LPSIZE, SIZEL, *PSIZEL, *LPSIZEL;
1451
1452 typedef struct tagEMRFRAMERGN
1453 {
1454   EMR   emr;
1455   RECTL rclBounds;
1456   DWORD cbRgnData;
1457   DWORD ihBrush;
1458   SIZEL szlStroke;
1459   BYTE  RgnData[1];
1460 } EMRFRAMERGN, *PEMRFRAMERGN;
1461
1462 typedef struct tagEMRGDICOMMENT
1463 {
1464   EMR   emr;
1465   DWORD cbData;
1466   BYTE  Data[1];
1467 } EMRGDICOMMENT, *PEMRGDICOMMENT;
1468
1469 typedef struct tagEMRINVERTRGN
1470 {
1471   EMR   emr;
1472   RECTL rclBounds;
1473   DWORD cbRgnData;
1474   BYTE  RgnData[1];
1475 } EMRINVERTRGN, *PEMRINVERTRGN,
1476     EMRPAINTRGN,  *PEMRPAINTRGN;
1477
1478 typedef struct tagEMRLINETO
1479 {
1480   EMR    emr;
1481   POINTL ptl;
1482 } EMRLINETO,   *PEMRLINETO,
1483     EMRMOVETOEX, *PEMRMOVETOEX;
1484
1485 typedef struct tagEMRMASKBLT
1486 {
1487   EMR     emr;
1488   RECTL   rclBounds;
1489   LONG    xDest;
1490   LONG    yDest;
1491   LONG    cxDest;
1492   LONG    cyDest;
1493   DWORD   dwRop;
1494   LONG    xSrc;
1495   LONG    ySrc;
1496   XFORM   xformSrc;
1497   COLORREF crBkColorSrc;
1498   DWORD   iUsageSrc;
1499   DWORD   offBmiSrc;
1500   DWORD   cbBmiSrc;
1501   DWORD   offBitsSrc;
1502   DWORD   cbBitsSrc;
1503   LONG    xMask;
1504   LONG    yMask;
1505   DWORD   iUsageMask;
1506   DWORD   offBmiMask;
1507   DWORD   cbBmiMask;
1508   DWORD   offBitsMask;
1509   DWORD   cbBitsMask;
1510 } EMRMASKBLT, *PEMRMASKBLT;
1511
1512 typedef struct tagEMRMODIFYWORLDTRANSFORM
1513 {
1514   EMR   emr;
1515   XFORM xform;
1516   DWORD iMode;
1517 } EMRMODIFYWORLDTRANSFORM,
1518     PEMRMODIFYWORLDTRANSFORM;
1519
1520 typedef struct tagEMROFFSETCLIPRGN
1521 {
1522   EMR    emr;
1523   POINTL ptlOffset;
1524 } EMROFFSETCLIPRGN, *PEMROFFSETCLIPRGN;
1525
1526 typedef struct tagEMRPLGBLT
1527 {
1528   EMR      emr;
1529   RECTL    rclBounds;
1530   POINTL   aptlDest[3];
1531   LONG    xSrc;
1532   LONG    ySrc;
1533   LONG     cxSrc;
1534   LONG     cySrc;
1535   XFORM   xformSrc;
1536   COLORREF crBkColorSrc;
1537   DWORD    iUsageSrc;
1538   DWORD    offBmiSrc;
1539   DWORD   cbBmiSrc;
1540   DWORD   offBitsSrc;
1541   DWORD   cbBitsSrc;
1542   LONG    xMask;
1543   LONG    yMask;
1544   DWORD   iUsageMask;
1545   DWORD   offBmiMask;
1546   DWORD   cbBmiMask;
1547   DWORD   offBitsMask;
1548   DWORD   cbBitsMask;
1549 } EMRPLGBLT, *PEMRPLGBLT;
1550
1551 typedef struct tagEMRPOLYDRAW
1552 {
1553   EMR    emr;
1554   RECTL  rclBounds;
1555   DWORD  cptl;
1556   POINTL aptl[1];
1557   BYTE   abTypes[1];
1558 } EMRPOLYDRAW, *PEMRPOLYDRAW;
1559
1560 typedef struct tagEMRPOLYDRAW16
1561 {
1562   EMR    emr;
1563   RECTL  rclBounds;
1564   DWORD  cpts;
1565   POINTS apts[1];
1566   BYTE   abTypes[1];
1567 } EMRPOLYDRAW16, *PEMRPOLYDRAW16;
1568
1569 typedef struct tagEMRPOLYLINE
1570 {
1571   EMR    emr;
1572   RECTL  rclBounds;
1573   DWORD  cptl;
1574   POINTL aptl[1];
1575 } EMRPOLYLINE,     *PEMRPOLYLINE,
1576     EMRPOLYBEZIER,   *PEMRPOLYBEZIER,
1577     EMRPOLYGON,      *PEMRPOLYGON,
1578     EMRPOLYBEZIERTO, *PEMRPOLYBEZIERTO,
1579     EMRPOLYLINETO,   *PEMRPOLYLINETO;
1580
1581 typedef struct tagEMRPOLYLINE16
1582 {
1583   EMR    emr;
1584   RECTL  rclBounds;
1585   DWORD  cpts;
1586   POINTL apts[1];
1587 } EMRPOLYLINE16,     *PEMRPOLYLINE16,
1588     EMRPOLYBEZIER16,   *PEMRPOLYBEZIER16,
1589     EMRPOLYGON16,      *PEMRPOLYGON16,
1590     EMRPOLYBEZIERTO16, *PEMRPOLYBEZIERTO16,
1591     EMRPOLYLINETO16,   *PEMRPOLYLINETO16;
1592
1593 typedef struct tagEMRPOLYPOLYLINE
1594 {
1595   EMR     emr;
1596   RECTL   rclBounds;
1597   DWORD   nPolys;
1598   DWORD   cptl;
1599   DWORD   aPolyCounts[1];
1600   POINTL  aptl[1];
1601 } EMRPOLYPOLYLINE, *PEMRPOLYPOLYLINE,
1602     EMRPOLYPOLYGON,  *PEMRPOLYPOLYGON;
1603
1604 typedef struct tagEMRPOLYPOLYLINE16
1605 {
1606   EMR     emr;
1607   RECTL   rclBounds;
1608   DWORD   nPolys;
1609   DWORD   cpts;
1610   DWORD   aPolyCounts[1];
1611   POINTS  apts[1];
1612 } EMRPOLYPOLYLINE16, *PEMRPOLYPOLYLINE16,
1613     EMRPOLYPOLYGON16,  *PEMRPOLYPOLYGON16;
1614
1615 typedef struct tagEMRPOLYTEXTOUTA
1616 {
1617   EMR     emr;
1618   RECTL   rclBounds;
1619   DWORD   iGraphicsMode;
1620   FLOAT   exScale;
1621   FLOAT   eyScale;
1622   LONG    cStrings;
1623   EMRTEXT aemrtext[1];
1624 } EMRPOLYTEXTOUTA, *PEMRPOLYTEXTOUTA,
1625     EMRPOLYTEXTOUTW, *PEMRPOLYTEXTOUTW;
1626
1627 typedef struct tagEMRRESIZEPALETTE
1628 {
1629   EMR   emr;
1630   DWORD ihPal;
1631   DWORD cEntries;
1632 } EMRRESIZEPALETTE, *PEMRRESIZEPALETTE;
1633
1634 typedef struct tagEMRRESTOREDC
1635 {
1636   EMR  emr;
1637   LONG iRelative;
1638 } EMRRESTOREDC, *PEMRRESTOREDC;
1639
1640 typedef struct tagEMRROUNDRECT
1641 {
1642   EMR   emr;
1643   RECTL rclBox;
1644   SIZEL szlCorner;
1645 } EMRROUNDRECT, *PEMRROUNDRECT;
1646
1647 typedef struct tagEMRSCALEVIEWPORTEXTEX
1648 {
1649   EMR  emr;
1650   LONG xNum;
1651   LONG xDenom;
1652   LONG yNum;
1653   LONG yDenom;
1654 } EMRSCALEVIEWPORTEXTEX, *PEMRSCALEVIEWPORTEXTEX,
1655     EMRSCALEWINDOWEXTEX,   *PEMRSCALEWINDOWEXTEX;
1656
1657 typedef struct tagEMRSELECTCOLORSPACE
1658 {
1659   EMR     emr;
1660   DWORD   ihCS;
1661 } EMRSELECTCOLORSPACE, *PEMRSELECTCOLORSPACE,
1662     EMRDELETECOLORSPACE, *PEMRDELETECOLORSPACE;
1663 typedef struct tagEMRSELECTOBJECT
1664 {
1665   EMR   emr;
1666   DWORD ihObject;
1667 } EMRSELECTOBJECT, *PEMRSELECTOBJECT,
1668     EMRDELETEOBJECT, *PEMRDELETEOBJECT;
1669
1670 typedef struct tagEMRSELECTPALETTE
1671 {
1672   EMR   emr;
1673   DWORD ihPal;
1674 } EMRSELECTPALETTE, *PEMRSELECTPALETTE;
1675
1676 typedef struct tagEMRSETARCDIRECTION
1677 {
1678   EMR   emr;
1679   DWORD iArcDirection;
1680 } EMRSETARCDIRECTION, *PEMRSETARCDIRECTION;
1681
1682 typedef struct tagEMRSETTEXTCOLOR
1683 {
1684   EMR      emr;
1685   COLORREF crColor;
1686 } EMRSETBKCOLOR,   *PEMRSETBKCOLOR,
1687     EMRSETTEXTCOLOR, *PEMRSETTEXTCOLOR;
1688
1689 typedef struct tagEMRSETCOLORADJUSTMENT
1690 {
1691   EMR  emr;
1692   COLORADJUSTMENT ColorAdjustment;
1693 } EMRSETCOLORADJUSTMENT, *PEMRSETCOLORADJUSTMENT;
1694
1695 typedef struct tagEMRSETDIBITSTODEVICE
1696 {
1697   EMR   emr;
1698   RECTL rclBounds;
1699   LONG  xDest;
1700   LONG  yDest;
1701   LONG  xSrc;
1702   LONG  ySrc;
1703   LONG  cxSrc;
1704   LONG  cySrc;
1705   DWORD offBmiSrc;
1706   DWORD cbBmiSrc;
1707   DWORD offBitsSrc;
1708   DWORD cbBitsSrc;
1709   DWORD iUsageSrc;
1710   DWORD iStartScan;
1711   DWORD cScans;
1712 } EMRSETDIBITSTODEVICE, *PEMRSETDIBITSTODEVICE;
1713
1714 typedef struct tagEMRSETMAPPERFLAGS
1715 {
1716   EMR   emr;
1717   DWORD dwFlags;
1718 } EMRSETMAPPERFLAGS, *PEMRSETMAPPERFLAGS;
1719
1720 typedef struct tagEMRSETMITERLIMIT
1721 {
1722   EMR   emr;
1723   FLOAT eMiterLimit;
1724 } EMRSETMITERLIMIT, *PEMRSETMITERLIMIT;
1725
1726 typedef struct tagEMRSETPALETTEENTRIES
1727 {
1728   EMR          emr;
1729   DWORD        ihPal;
1730   DWORD        iStart;
1731   DWORD        cEntries;
1732   PALETTEENTRY aPalEntries[1];
1733 } EMRSETPALETTEENTRIES, *PEMRSETPALETTEENTRIES;
1734
1735 typedef struct tagEMRSETPIXELV
1736 {
1737   EMR     emr;
1738   POINTL  ptlPixel;
1739   COLORREF crColor;
1740 } EMRSETPIXELV, *PEMRSETPIXELV;
1741
1742 typedef struct tagEMRSETVIEWPORTEXTEX
1743 {
1744   EMR   emr;
1745   SIZEL szlExtent;
1746 } EMRSETVIEWPORTEXTEX, *PEMRSETVIEWPORTEXTEX,
1747     EMRSETWINDOWEXTEX,   *PEMRSETWINDOWEXTEX;
1748
1749 typedef struct tagEMRSETVIEWPORTORGEX
1750 {
1751   EMR    emr;
1752   POINTL ptlOrigin;
1753 } EMRSETVIEWPORTORGEX, *PEMRSETVIEWPORTORGEX,
1754     EMRSETWINDOWORGEX,   *PEMRSETWINDOWORGEX,
1755     EMRSETBRUSHORGEX,    *PEMRSETBRUSHORGEX;
1756
1757 typedef struct tagEMRSETWORLDTRANSFORM
1758 {
1759   EMR   emr;
1760   XFORM xform;
1761 } EMRSETWORLDTRANSFORM, *PEMRSETWORLDTRANSFORM;
1762
1763 typedef struct tagEMRSTRETCHBLT
1764 {
1765   EMR      emr;
1766   RECTL    rclBounds;
1767   LONG     xDest;
1768   LONG     yDest;
1769   LONG     cxDest;
1770   LONG     cyDest;
1771   DWORD    dwRop;
1772   LONG     xSrc;
1773   LONG     ySrc;
1774   XFORM    xformSrc;
1775   COLORREF crBkColorSrc;
1776   DWORD    iUsageSrc;
1777   DWORD    offBmiSrc;
1778   DWORD    cbBmiSrc;
1779   DWORD    offBitsSrc;
1780   DWORD    cbBitsSrc;
1781   LONG     cxSrc;
1782   LONG     cySrc;
1783 } EMRSTRETCHBLT, *PEMRSTRETCHBLT;
1784
1785 typedef struct tagEMRSTRETCHDIBITS
1786 {
1787   EMR   emr;
1788   RECTL rclBounds;
1789   LONG  xDest;
1790   LONG  yDest;
1791   LONG  xSrc;
1792   LONG  ySrc;
1793   LONG  cxSrc;
1794   LONG  cySrc;
1795   DWORD offBmiSrc;
1796   DWORD cbBmiSrc;
1797   DWORD offBitsSrc;
1798   DWORD cbBitsSrc;
1799   DWORD iUsageSrc;
1800   DWORD dwRop;
1801   LONG  cxDest;
1802   LONG  cyDest;
1803 } EMRSTRETCHDIBITS, *PEMRSTRETCHDIBITS;
1804
1805 typedef struct tagABORTPATH
1806 {
1807   EMR emr;
1808 } EMRABORTPATH,      *PEMRABORTPATH,
1809     EMRBEGINPATH,      *PEMRBEGINPATH,
1810     EMRENDPATH,        *PEMRENDPATH,
1811     EMRCLOSEFIGURE,    *PEMRCLOSEFIGURE,
1812     EMRFLATTENPATH,    *PEMRFLATTENPATH,
1813     EMRWIDENPATH,      *PEMRWIDENPATH,
1814     EMRSETMETARGN,     *PEMRSETMETARGN,
1815     EMRSAVEDC,         *PEMRSAVEDC,
1816     EMRREALIZEPALETTE, *PEMRREALIZEPALETTE;
1817
1818 typedef struct tagEMRSELECTCLIPPATH
1819 {
1820   EMR   emr;
1821   DWORD iMode;
1822 } EMRSELECTCLIPPATH,    *PEMRSELECTCLIPPATH,
1823     EMRSETBKMODE,         *PEMRSETBKMODE,
1824     EMRSETMAPMODE,        *PEMRSETMAPMODE,
1825     EMRSETPOLYFILLMODE,   *PEMRSETPOLYFILLMODE,
1826     EMRSETROP2,           *PEMRSETROP2,
1827     EMRSETSTRETCHBLTMODE, *PEMRSETSTRETCHBLTMODE,
1828     EMRSETTEXTALIGN,      *PEMRSETTEXTALIGN,
1829     EMRENABLEICM,       *PEMRENABLEICM;
1830
1831 typedef struct tagNMHDR {
1832   HWND hwndFrom;
1833   UINT idFrom;
1834   UINT code;
1835 } NMHDR;
1836
1837 typedef struct _encorrecttext {
1838   NMHDR nmhdr;
1839   CHARRANGE chrg;
1840   WORD seltyp;
1841 } ENCORRECTTEXT;
1842
1843 typedef struct _endropfiles {
1844   NMHDR nmhdr;
1845   HANDLE hDrop;
1846   LONG cp;
1847   WINBOOL fProtected;
1848 } ENDROPFILES;
1849
1850 typedef struct {
1851   NMHDR nmhdr;
1852   LONG cObjectCount;
1853   LONG cch;
1854 } ENSAVECLIPBOARD;
1855
1856 typedef struct {
1857   NMHDR nmhdr;
1858   LONG iob;
1859   LONG lOper;
1860   HRESULT hr;
1861 } ENOLEOPFAILED;
1862
1863 typedef struct tagENHMETAHEADER {
1864   DWORD iType;
1865   DWORD nSize;
1866   RECTL rclBounds;
1867   RECTL rclFrame;
1868   DWORD dSignature;
1869   DWORD nVersion;
1870   DWORD nBytes;
1871   DWORD nRecords;
1872   WORD  nHandles;
1873   WORD  sReserved;
1874   DWORD nDescription;
1875   DWORD offDescription;
1876   DWORD nPalEntries;
1877   SIZEL szlDevice;
1878   SIZEL szlMillimeters;
1879 } ENHMETAHEADER, *LPENHMETAHEADER;
1880
1881 typedef struct tagENHMETARECORD {
1882   DWORD iType;
1883   DWORD nSize;
1884   DWORD dParm[1];
1885 } ENHMETARECORD, *PENHMETARECORD, *LPENHMETARECORD;
1886
1887 typedef struct _enprotected {
1888   NMHDR nmhdr;
1889   UINT msg;
1890   WPARAM wParam;
1891   LPARAM lParam;
1892   CHARRANGE chrg;
1893 } ENPROTECTED;
1894
1895 typedef struct _SERVICE_STATUS {
1896   DWORD dwServiceType;
1897   DWORD dwCurrentState;
1898   DWORD dwControlsAccepted;
1899   DWORD dwWin32ExitCode;
1900   DWORD dwServiceSpecificExitCode;
1901   DWORD dwCheckPoint;
1902   DWORD dwWaitHint;
1903 } SERVICE_STATUS, *LPSERVICE_STATUS;
1904
1905 typedef struct _ENUM_SERVICE_STATUSA {
1906   LPSTR lpServiceName;
1907   LPSTR lpDisplayName;
1908   SERVICE_STATUS ServiceStatus;
1909 } ENUM_SERVICE_STATUSA, *LPENUM_SERVICE_STATUSA;
1910
1911 typedef struct _ENUM_SERVICE_STATUSW {
1912   LPWSTR lpServiceName;
1913   LPWSTR lpDisplayName;
1914   SERVICE_STATUS ServiceStatus;
1915 } ENUM_SERVICE_STATUSW, *LPENUM_SERVICE_STATUSW;
1916
1917 #ifdef UNICODE
1918 #define ENUM_SERVICE_STATUS ENUM_SERVICE_STATUSW
1919 #define LPENUM_SERVICE_STATUS LPENUM_SERVICE_STATUSW
1920 #else
1921 #define ENUM_SERVICE_STATUS ENUM_SERVICE_STATUSA
1922 #define LPENUM_SERVICE_STATUS LPENUM_SERVICE_STATUSA
1923 #endif
1924
1925 typedef struct tagENUMLOGFONTA {
1926   LOGFONTA elfLogFont;
1927   BCHAR    elfFullName[LF_FULLFACESIZE];
1928   BCHAR    elfStyle[LF_FACESIZE];
1929 } ENUMLOGFONTA, *LPENUMLOGFONTA;
1930
1931 typedef struct tagENUMLOGFONTW {
1932   LOGFONTW elfLogFont;
1933   WCHAR    elfFullName[LF_FULLFACESIZE];
1934   WCHAR    elfStyle[LF_FACESIZE];
1935 } ENUMLOGFONTW, *LPENUMLOGFONTW;
1936
1937 #ifdef UNICODE
1938 typedef ENUMLOGFONTW ENUMLOGFONT;
1939 typedef LPENUMLOGFONTW LPENUMLOGFONT;
1940 #else
1941 typedef ENUMLOGFONTA ENUMLOGFONT;
1942 typedef LPENUMLOGFONTA LPENUMLOGFONT;
1943 #endif
1944
1945 typedef struct tagENUMLOGFONTEXA {
1946   LOGFONTA elfLogFont;
1947   BCHAR    elfFullName[LF_FULLFACESIZE];
1948   BCHAR    elfStyle[LF_FACESIZE];
1949   BCHAR    elfScript[LF_FACESIZE];
1950 } ENUMLOGFONTEXA, *LPENUMLOGFONTEXA;
1951
1952 typedef struct tagENUMLOGFONTEXW {
1953   LOGFONTW elfLogFont;
1954   WCHAR    elfFullName[LF_FULLFACESIZE];
1955   WCHAR    elfStyle[LF_FACESIZE];
1956   WCHAR    elfScript[LF_FACESIZE];
1957 } ENUMLOGFONTEXW, *LPENUMLOGFONTEXW;
1958
1959 #ifdef UNICODE
1960 typedef ENUMLOGFONTEXW ENUMLOGFONTEX;
1961 typedef LPENUMLOGFONTEXW LPENUMLOGFONTEX;
1962 #else
1963 typedef ENUMLOGFONTEXA ENUMLOGFONTEX;
1964 typedef LPENUMLOGFONTEXA LPENUMLOGFONTEX;
1965 #endif
1966
1967 typedef struct _EVENTLOGRECORD {
1968   DWORD  Length;
1969   DWORD  Reserved;
1970   DWORD  RecordNumber;
1971   DWORD  TimeGenerated;
1972   DWORD  TimeWritten;
1973   DWORD  EventID;
1974   WORD   EventType;
1975   WORD   NumStrings;
1976   WORD   EventCategory;
1977   WORD   ReservedFlags;
1978   DWORD  ClosingRecordNumber;
1979   DWORD  StringOffset;
1980   DWORD  UserSidLength;
1981   DWORD  UserSidOffset;
1982   DWORD  DataLength;
1983   DWORD  DataOffset;
1984
1985 /*
1986   Then follow:
1987
1988   TCHAR SourceName[]
1989   TCHAR Computername[]
1990   SID   UserSid
1991   TCHAR Strings[]
1992   BYTE  Data[]
1993   CHAR  Pad[]
1994   DWORD Length;
1995 */
1996
1997 } EVENTLOGRECORD;
1998
1999 typedef struct tagEVENTMSG {
2000   UINT  message;
2001   UINT  paramL;
2002   UINT  paramH;
2003   DWORD time;
2004   HWND  hwnd;
2005 } EVENTMSG;
2006
2007 typedef struct _EXT_BUTTON {
2008   WORD idCommand;
2009   WORD idsHelp;
2010   WORD fsStyle;
2011 } EXT_BUTTON, *LPEXT_BUTTON;
2012
2013 typedef struct tagFILTERKEYS {
2014   UINT  cbSize;
2015   DWORD dwFlags;
2016   DWORD iWaitMSec;
2017   DWORD iDelayMSec;
2018   DWORD iRepeatMSec;
2019   DWORD iBounceMSec;
2020 } FILTERKEYS;
2021
2022 typedef struct _FIND_NAME_BUFFER {
2023   UCHAR length;
2024   UCHAR access_control;
2025   UCHAR frame_control;
2026   UCHAR destination_addr[6];
2027   UCHAR source_addr[6];
2028   UCHAR routing_info[18];
2029 } FIND_NAME_BUFFER;
2030
2031 typedef struct _FIND_NAME_HEADER {
2032   WORD  node_count;
2033   UCHAR reserved;
2034   UCHAR unique_group;
2035 } FIND_NAME_HEADER;
2036
2037 typedef
2038 enum _FINDEX_INFO_LEVELS
2039 {
2040         FindExInfoStandard,
2041         FindExInfoMaxInfoLevel
2042 } FINDEX_INFO_LEVELS;
2043
2044 typedef
2045 enum _FINDEX_SEARCH_OPS
2046 {
2047         FindExSearchNameMatch,
2048         FindExSearchLimitToDirectories,
2049         FindExSearchLimitToDevices,
2050         FindExSearchMaxSearchOp
2051
2052 } FINDEX_SEARCH_OPS;
2053
2054 #define FIND_FIRST_EX_CASE_SENSITIVE   0x00000001
2055
2056 typedef struct {
2057   DWORD        lStructSize;
2058   HWND         hwndOwner;
2059   HINSTANCE    hInstance;
2060   DWORD        Flags;
2061   LPTSTR        lpstrFindWhat;
2062   LPTSTR        lpstrReplaceWith;
2063   WORD         wFindWhatLen;
2064   WORD         wReplaceWithLen;
2065   LPARAM        lCustData;
2066   LPFRHOOKPROC lpfnHook;
2067   LPCTSTR       lpTemplateName;
2068 } FINDREPLACE, *LPFINDREPLACE;
2069
2070 typedef struct _findtext {
2071   CHARRANGE chrg;
2072   LPSTR lpstrText;
2073 } FINDTEXT;
2074
2075 typedef struct _findtextex {
2076   CHARRANGE chrg;
2077   LPSTR lpstrText;
2078   CHARRANGE chrgText;
2079 } FINDTEXTEX;
2080
2081 typedef struct _FMS_GETDRIVEINFO {
2082   DWORD dwTotalSpace;
2083   DWORD dwFreeSpace;
2084   TCHAR  szPath[260];
2085   TCHAR  szVolume[14];
2086   TCHAR  szShare[128];
2087 } FMS_GETDRIVEINFO;
2088
2089 typedef struct _FMS_GETFILESEL {
2090   FILETIME ftTime;
2091   DWORD    dwSize;
2092   BYTE     bAttr;
2093   TCHAR     szName[260];
2094 } FMS_GETFILESEL;
2095
2096 typedef struct _FMS_LOAD {
2097   DWORD dwSize;
2098   TCHAR  szMenuName[MENU_TEXT_LEN];
2099   HMENU hMenu;
2100   UINT  wMenuDelta;
2101 } FMS_LOAD;
2102
2103 typedef struct _FMS_TOOLBARLOAD {
2104   DWORD        dwSize;
2105   LPEXT_BUTTON lpButtons;
2106   WORD         cButtons;
2107   WORD         cBitmaps;
2108   WORD         idBitmap;
2109   HBITMAP      hBitmap;
2110 } FMS_TOOLBARLOAD;
2111
2112
2113 typedef struct _FORM_INFO_1 {
2114   DWORD Flags;
2115   LPTSTR pName;
2116   SIZEL  Size;
2117   RECTL  ImageableArea;
2118 } FORM_INFO_1;
2119
2120 typedef struct _FORMAT_PARAMETERS {
2121   MEDIA_TYPE MediaType;
2122   DWORD StartCylinderNumber;
2123   DWORD EndCylinderNumber;
2124   DWORD StartHeadNumber;
2125   DWORD EndHeadNumber;
2126 } FORMAT_PARAMETERS ;
2127
2128 typedef struct _formatrange {
2129   HDC hdc;
2130   HDC hdcTarget;
2131   RECT rc;
2132   RECT rcPage;
2133   CHARRANGE chrg;
2134 } FORMATRANGE;
2135
2136 typedef struct tagGCP_RESULTS {
2137   DWORD  lStructSize;
2138   LPTSTR  lpOutString;
2139   UINT  *lpOrder;
2140   INT  *lpDx;
2141   INT  *lpCaretPos;
2142   LPTSTR lpClass;
2143   UINT  *lpGlyphs;
2144   UINT  nGlyphs;
2145   UINT  nMaxFit;
2146 } GCP_RESULTS, *LPGCP_RESULTS;
2147
2148
2149 typedef struct _GLYPHMETRICS {
2150   UINT  gmBlackBoxX;
2151   UINT  gmBlackBoxY;
2152   POINT gmptGlyphOrigin;
2153   short gmCellIncX;
2154   short gmCellIncY;
2155 } GLYPHMETRICS, *LPGLYPHMETRICS;
2156
2157 typedef struct tagHANDLETABLE {
2158   HGDIOBJ objectHandle[1];
2159 } HANDLETABLE, *LPHANDLETABLE;
2160
2161 typedef struct _HD_HITTESTINFO {
2162   POINT pt;
2163   UINT flags;
2164   int iItem;
2165 } HD_HITTESTINFO;
2166
2167 typedef struct _HD_ITEM {
2168   UINT    mask;
2169   int     cxy;
2170   LPTSTR   pszText;
2171   HBITMAP hbm;
2172   int     cchTextMax;
2173   int     fmt;
2174   LPARAM  lParam;
2175 } HD_ITEM;
2176
2177 typedef struct _WINDOWPOS {
2178   HWND hwnd;
2179   HWND hwndInsertAfter;
2180   int  x;
2181   int  y;
2182   int  cx;
2183   int  cy;
2184   UINT flags;
2185 } WINDOWPOS, *PWINDOWPOS, *LPWINDOWPOS;
2186
2187 typedef struct _HD_LAYOUT {
2188   RECT  * prc;
2189   WINDOWPOS  * pwpos;
2190 } HD_LAYOUT;
2191
2192 typedef struct _HD_NOTIFY {
2193   NMHDR   hdr;
2194   int     iItem;
2195   int     iButton;
2196   HD_ITEM  * pitem;
2197 } HD_NOTIFY;
2198
2199 typedef  struct  tagHELPINFO {
2200   UINT   cbSize;
2201   int    iContextType;
2202   int    iCtrlId;
2203   HANDLE hItemHandle;
2204   DWORD  dwContextId;
2205   POINT  MousePos;
2206 } HELPINFO,   *LPHELPINFO;
2207
2208 typedef struct {
2209     DWORD   mkSize;
2210     CHAR    mkKeyList;
2211     CHAR    szKeyphrase[1];
2212 } MULTIKEYHELPA, *PMULTIKEYHELPA, *LPMULTIKEYHELPA;
2213
2214 typedef struct {
2215     DWORD   mkSize;
2216     WCHAR   mkKeyList;
2217     WCHAR   szKeyphrase[1];
2218 } MULTIKEYHELPW, *PMULTIKEYHELPW, *LPMULTIKEYHELPW;
2219
2220 typedef struct {
2221   int   wStructSize;
2222   int   x;
2223   int   y;
2224   int   dx;
2225   int   dy;
2226   int   wMax;
2227   TCHAR rgchMember[2];
2228 } HELPWININFO;
2229
2230 typedef struct {
2231         int wStructSize;
2232         int x;
2233         int y;
2234         int dx;
2235         int dy;
2236         int wMax;
2237         CHAR rgchMember[2];
2238 } HELPWININFOA, *PHELPWININFOA, *LPHELPWININFOA;
2239
2240 typedef struct {
2241         int wStructSize;
2242         int x;
2243         int y;
2244         int dx;
2245         int dy;
2246         int wMax;
2247         WCHAR rgchMember[2];
2248 } HELPWININFOW, *PHELPWININFOW, *LPHELPWININFOW;
2249
2250
2251 typedef struct tagHIGHCONTRAST {
2252   UINT cbSize;
2253   DWORD dwFlags;
2254   LPTSTR lpszDefaultScheme;
2255 } HIGHCONTRAST,  * LPHIGHCONTRAST;
2256
2257 typedef struct tagHSZPAIR {
2258   HSZ hszSvc;
2259   HSZ hszTopic;
2260 } HSZPAIR;
2261
2262 typedef struct _ICONINFO {
2263   WINBOOL    fIcon;
2264   DWORD   xHotspot;
2265   DWORD   yHotspot;
2266   HBITMAP hbmMask;
2267   HBITMAP hbmColor;
2268 } ICONINFO, *PICONINFO;
2269
2270 typedef struct tagICONMETRICSA {
2271   UINT     cbSize;
2272   int      iHorzSpacing;
2273   int      iVertSpacing;
2274   int      iTitleWrap;
2275   LOGFONTA lfFont;
2276 } ICONMETRICSA, *LPICONMETRICSA;
2277
2278 typedef struct tagICONMETRICSW {
2279   UINT     cbSize;
2280   int      iHorzSpacing;
2281   int      iVertSpacing;
2282   int      iTitleWrap;
2283   LOGFONTW lfFont;
2284 } ICONMETRICSW, *LPICONMETRICSW;
2285
2286 #ifdef UNICODE
2287 typedef ICONMETRICSW ICONMETRICS;
2288 typedef LPICONMETRICSW LPICONMETRICS;
2289 #else
2290 typedef ICONMETRICSA ICONMETRICS;
2291 typedef LPICONMETRICSA LPICONMETRICS;
2292 #endif
2293
2294 typedef struct _IMAGEINFO {
2295   HBITMAP hbmImage;
2296   HBITMAP hbmMask;
2297   int     Unused1;
2298   int     Unused2;
2299   RECT    rcImage;
2300 } IMAGEINFO;
2301
2302 typedef struct _JOB_INFO_1 {
2303   DWORD  JobId;
2304   LPTSTR pPrinterName;
2305   LPTSTR pMachineName;
2306   LPTSTR pUserName;
2307   LPTSTR pDocument;
2308   LPTSTR pDatatype;
2309   LPTSTR pStatus;
2310   DWORD  Status;
2311   DWORD  Priority;
2312   DWORD  Position;
2313   DWORD  TotalPages;
2314   DWORD  PagesPrinted;
2315   SYSTEMTIME Submitted;
2316 } JOB_INFO_1;
2317
2318 #if 0
2319 typedef struct _JOB_INFO_2 {
2320   DWORD      JobId;
2321   LPTSTR     pPrinterName;
2322   LPTSTR     pMachineName;
2323   LPTSTR     pUserName;
2324   LPTSTR     pDocument;
2325   LPTSTR     pNotifyName;
2326   LPTSTR     pDatatype;
2327   LPTSTR     pPrintProcessor;
2328   LPTSTR     pParameters;
2329   LPTSTR     pDriverName;
2330   LPDEVMODE  pDevMode;
2331   LPTSTR     pStatus;
2332   PSECURITY_DESCRIPTOR pSecurityDescriptor;
2333   DWORD      Status;
2334   DWORD      Priority;
2335   DWORD      Position;
2336   DWORD      StartTime;
2337   DWORD      UntilTime;
2338   DWORD      TotalPages;
2339   DWORD      Size;
2340   SYSTEMTIME Submitted;
2341   DWORD      Time;
2342   DWORD      PagesPrinted ;
2343 } JOB_INFO_2;
2344 #endif
2345
2346 typedef struct tagKERNINGPAIR {
2347   WORD wFirst;
2348   WORD wSecond;
2349   int  iKernAmount;
2350 } KERNINGPAIR, *LPKERNINGPAIR;
2351
2352 typedef struct _LANA_ENUM {
2353   UCHAR length;
2354   UCHAR lana[MAX_LANA];
2355 } LANA_ENUM;
2356
2357 typedef struct _LDT_ENTRY {
2358   WORD LimitLow;
2359   WORD BaseLow;
2360   union {
2361     struct {
2362       BYTE BaseMid;
2363       BYTE Flags1;
2364       BYTE Flags2;
2365       BYTE BaseHi;
2366     } Bytes;
2367     struct {
2368       DWORD BaseMid : 8;
2369       DWORD Type : 5;
2370       DWORD Dpl : 2;
2371       DWORD Pres : 1;
2372       DWORD LimitHi : 4;
2373       DWORD Sys : 1;
2374       DWORD Reserved_0 : 1;
2375       DWORD Default_Big : 1;
2376       DWORD Granularity : 1;
2377       DWORD BaseHi : 8;
2378     } Bits;
2379   } HighWord;
2380 } LDT_ENTRY, *PLDT_ENTRY, *LPLDT_ENTRY;
2381
2382 typedef struct tagLOCALESIGNATURE {
2383   DWORD  lsUsb[4];
2384   DWORD  lsCsbDefault[2];
2385   DWORD  lsCsbSupported[2];
2386 } LOCALESIGNATURE;
2387
2388    #if 0
2389 typedef struct _LOCALGROUP_MEMBERS_INFO_0 {
2390   PSID  lgrmi0_sid;
2391 } LOCALGROUP_MEMBERS_INFO_0;
2392  #endif
2393
2394 typedef struct _LOCALGROUP_MEMBERS_INFO_3 {
2395   LPWSTR  lgrmi3_domainandname;
2396 } LOCALGROUP_MEMBERS_INFO_3;
2397
2398 typedef long FXPT16DOT16,  * LPFXPT16DOT16;
2399
2400
2401
2402 typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
2403 typedef LUID_AND_ATTRIBUTES_ARRAY *PLUID_AND_ATTRIBUTES_ARRAY;
2404
2405 typedef struct _LV_COLUMN {
2406   UINT mask;
2407   int fmt;
2408   int cx;
2409   LPTSTR pszText;
2410   int cchTextMax;
2411   int iSubItem;
2412 } LV_COLUMN;
2413
2414 typedef struct _LV_ITEM {
2415   UINT   mask;
2416   int    iItem;
2417   int    iSubItem;
2418   UINT   state;
2419   UINT   stateMask;
2420   LPTSTR  pszText;
2421   int    cchTextMax;
2422   int    iImage;
2423   LPARAM lParam;
2424 } LV_ITEM;
2425
2426 typedef struct tagLV_DISPINFO {
2427   NMHDR   hdr;
2428   LV_ITEM item;
2429 } LV_DISPINFO;
2430
2431 typedef struct _LV_FINDINFO {
2432   UINT flags;
2433   LPCTSTR psz;
2434   LPARAM lParam;
2435   POINT pt;
2436   UINT vkDirection;
2437 } LV_FINDINFO;
2438
2439 typedef struct _LV_HITTESTINFO {
2440   POINT pt;
2441   UINT flags;
2442   int iItem;
2443 } LV_HITTESTINFO;
2444
2445 typedef struct tagLV_KEYDOWN {
2446   NMHDR hdr;
2447   WORD wVKey;
2448   UINT flags;
2449 } LV_KEYDOWN;
2450
2451 typedef struct _MAT2 {
2452   FIXED eM11;
2453   FIXED eM12;
2454   FIXED eM21;
2455   FIXED eM22;
2456 } MAT2, *LPMAT2;
2457
2458 typedef struct tagMDICREATESTRUCT {
2459   LPCTSTR szClass;
2460   LPCTSTR szTitle;
2461   HANDLE  hOwner;
2462   int     x;
2463   int     y;
2464   int     cx;
2465   int     cy;
2466   DWORD   style;
2467   LPARAM  lParam;
2468 } MDICREATESTRUCT;
2469
2470 typedef MDICREATESTRUCT *LPMDICREATESTRUCT;
2471
2472 typedef struct tagMEASUREITEMSTRUCT {
2473   UINT  CtlType;
2474   UINT  CtlID;
2475   UINT  itemID;
2476   UINT  itemWidth;
2477   UINT  itemHeight;
2478   DWORD itemData;
2479 } MEASUREITEMSTRUCT, *LPMEASUREITEMSTRUCT;
2480
2481 typedef struct _MEMORYSTATUS {
2482   DWORD dwLength;
2483   DWORD dwMemoryLoad;
2484   DWORD dwTotalPhys;
2485   DWORD dwAvailPhys;
2486   DWORD dwTotalPageFile;
2487   DWORD dwAvailPageFile;
2488   DWORD dwTotalVirtual;
2489   DWORD dwAvailVirtual;
2490 } MEMORYSTATUS, *LPMEMORYSTATUS;
2491
2492 typedef struct {
2493   WORD  wVersion;
2494   WORD  wOffset;
2495   DWORD dwHelpId;
2496 } MENUEX_TEMPLATE_HEADER;
2497
2498 typedef struct {
2499   DWORD  dwType;
2500   DWORD  dwState;
2501   UINT   uId;
2502   BYTE   bResInfo;
2503   WCHAR  szText[1];
2504   DWORD dwHelpId;
2505 } MENUEX_TEMPLATE_ITEM;
2506
2507 typedef struct tagMENUITEMINFO {
2508   UINT    cbSize;
2509   UINT    fMask;
2510   UINT    fType;
2511   UINT    fState;
2512   UINT    wID;
2513   HMENU   hSubMenu;
2514   HBITMAP hbmpChecked;
2515   HBITMAP hbmpUnchecked;
2516   DWORD   dwItemData;
2517   LPTSTR  dwTypeData;
2518   UINT    cch;
2519 } MENUITEMINFO, *LPMENUITEMINFO;
2520 typedef MENUITEMINFO CONST *LPCMENUITEMINFO;
2521
2522 typedef struct {
2523   WORD mtOption;
2524   WORD mtID;
2525   WCHAR mtString[1];
2526 } MENUITEMTEMPLATE;
2527
2528 typedef struct {
2529   WORD versionNumber;
2530   WORD offset;
2531 } MENUITEMTEMPLATEHEADER;
2532 typedef VOID MENUTEMPLATE, *LPMENUTEMPLATE;
2533
2534 typedef struct tagMETAFILEPICT {
2535 #if 0
2536   LONG      mm;
2537   LONG      xExt;
2538   LONG      yExt;
2539   HMETAFILE hMF;
2540 #else
2541   LONG      mm; // robd
2542 #endif
2543 } METAFILEPICT, *PMETAFILEPICT, *LPMETAFILEPICT;
2544
2545 typedef struct tagMETAHEADER {
2546   WORD  mtType;
2547   WORD  mtHeaderSize;
2548   WORD  mtVersion;
2549   DWORD mtSize;
2550   WORD  mtNoObjects;
2551   DWORD mtMaxRecord;
2552   WORD  mtNoParameters;
2553 } METAHEADER PACKED;
2554
2555 typedef struct tagMETARECORD {
2556   DWORD rdSize;
2557   WORD  rdFunction;
2558   WORD  rdParm[1];
2559 } METARECORD, *LPMETARECORD;
2560
2561 typedef struct tagMINIMIZEDMETRICS {
2562   UINT    cbSize;
2563   int     iWidth;
2564   int     iHorzGap;
2565   int     iVertGap;
2566   int     iArrange;
2567 }   MINIMIZEDMETRICS,   *LPMINIMIZEDMETRICS;
2568
2569 typedef struct tagMINMAXINFO {
2570   POINT ptReserved;
2571   POINT ptMaxSize;
2572   POINT ptMaxPosition;
2573   POINT ptMinTrackSize;
2574   POINT ptMaxTrackSize;
2575 } MINMAXINFO;
2576
2577 typedef struct modemdevcaps_tag {
2578   DWORD dwActualSize;
2579   DWORD dwRequiredSize;
2580   DWORD dwDevSpecificOffset;
2581   DWORD dwDevSpecificSize;
2582
2583   DWORD dwModemProviderVersion;
2584   DWORD dwModemManufacturerOffset;
2585   DWORD dwModemManufacturerSize;
2586   DWORD dwModemModelOffset;
2587   DWORD dwModemModelSize;
2588   DWORD dwModemVersionOffset;
2589   DWORD dwModemVersionSize;
2590
2591   DWORD dwDialOptions;
2592   DWORD dwCallSetupFailTimer;
2593   DWORD dwInactivityTimeout;
2594   DWORD dwSpeakerVolume;
2595   DWORD dwSpeakerMode;
2596   DWORD dwModemOptions;
2597   DWORD dwMaxDTERate;
2598   DWORD dwMaxDCERate;
2599
2600   BYTE abVariablePortion [1];
2601 } MODEMDEVCAPS, *PMODEMDEVCAPS, *LPMODEMDEVCAPS;
2602
2603 typedef struct modemsettings_tag {
2604   DWORD dwActualSize;
2605   DWORD dwRequiredSize;
2606   DWORD dwDevSpecificOffset;
2607   DWORD dwDevSpecificSize;
2608
2609   DWORD dwCallSetupFailTimer;
2610   DWORD dwInactivityTimeout;
2611   DWORD dwSpeakerVolume;
2612   DWORD dwSpeakerMode;
2613   DWORD dwPreferredModemOptions;
2614
2615   DWORD dwNegotiatedModemOptions;
2616   DWORD dwNegotiatedDCERate;
2617
2618   BYTE  abVariablePortion[1];
2619 } MODEMSETTINGS, *PMODEMSETTINGS, *LPMODEMSETTINGS;
2620
2621 typedef struct tagMONCBSTRUCT {
2622   UINT   cb;
2623   DWORD  dwTime;
2624   HANDLE hTask;
2625   DWORD  dwRet;
2626   UINT   wType;
2627   UINT   wFmt;
2628   HCONV  hConv;
2629   HSZ    hsz1;
2630   HSZ    hsz2;
2631   HDDEDATA hData;
2632   DWORD    dwData1;
2633   DWORD    dwData2;
2634   CONVCONTEXT cc;
2635   DWORD  cbData;
2636   DWORD  Data[8];
2637 } MONCBSTRUCT;
2638
2639 typedef struct tagMONCONVSTRUCT {
2640   UINT   cb;
2641   WINBOOL   fConnect;
2642   DWORD  dwTime;
2643   HANDLE hTask;
2644   HSZ    hszSvc;
2645   HSZ    hszTopic;
2646   HCONV  hConvClient;
2647   HCONV  hConvServer;
2648 } MONCONVSTRUCT;
2649
2650 typedef struct tagMONERRSTRUCT {
2651   UINT   cb;
2652   UINT   wLastError;
2653   DWORD  dwTime;
2654   HANDLE hTask;
2655 } MONERRSTRUCT;
2656
2657 typedef struct tagMONHSZSTRUCT {
2658   UINT   cb;
2659   WINBOOL   fsAction;
2660   DWORD  dwTime;
2661   HSZ    hsz;
2662   HANDLE hTask;
2663   TCHAR   str[1];
2664 } MONHSZSTRUCT;
2665
2666 typedef struct _MONITOR_INFO_1 {
2667   LPTSTR pName;
2668 } MONITOR_INFO_1;
2669
2670 typedef struct _MONITOR_INFO_2 {
2671   LPTSTR pName;
2672   LPTSTR pEnvironment ;
2673   LPTSTR pDLLName ;
2674 } MONITOR_INFO_2;
2675
2676 typedef struct tagMONLINKSTRUCT {
2677   UINT   cb;
2678   DWORD  dwTime;
2679   HANDLE hTask;
2680   WINBOOL   fEstablished;
2681   WINBOOL   fNoData;
2682   HSZ    hszSvc;
2683   HSZ    hszTopic;
2684   HSZ    hszItem;
2685   UINT   wFmt;
2686   WINBOOL   fServer;
2687   HCONV  hConvServer;
2688   HCONV  hConvClient;
2689 } MONLINKSTRUCT;
2690
2691 typedef struct tagMONMSGSTRUCT {
2692   UINT   cb;
2693   HWND   hwndTo;
2694   DWORD  dwTime;
2695   HANDLE hTask;
2696   UINT   wMsg;
2697   WPARAM wParam;
2698   LPARAM lParam;
2699   DDEML_MSG_HOOK_DATA dmhd;
2700 } MONMSGSTRUCT;
2701
2702 typedef struct tagMOUSEHOOKSTRUCT {
2703   POINT pt;
2704   HWND  hwnd;
2705   UINT  wHitTestCode;
2706   DWORD dwExtraInfo;
2707 } MOUSEHOOKSTRUCT, *PMOUSEHOOKSTRUCT, *LPMOUSEHOOKSTRUCT;
2708
2709 typedef struct _MOUSEKEYS {
2710   DWORD cbSize;
2711   DWORD dwFlags;
2712   DWORD iMaxSpeed;
2713   DWORD iTimeToMaxSpeed;
2714   DWORD iCtrlSpeed;
2715   DWORD dwReserved1;
2716   DWORD dwReserved2;
2717 } MOUSEKEYS;
2718
2719 typedef struct tagMSG {
2720   HWND   hwnd;
2721   UINT   message;
2722   WPARAM wParam;
2723   LPARAM lParam;
2724   DWORD  time;
2725   POINT  pt;
2726 } MSG, *LPMSG;
2727
2728 typedef void CALLBACK (*MSGBOXCALLBACK) (LPHELPINFO lpHelpInfo);
2729
2730 typedef struct {
2731   UINT      cbSize;
2732   HWND      hwndOwner;
2733   HINSTANCE hInstance;
2734   LPCSTR    lpszText;
2735   LPCSTR    lpszCaption;
2736   DWORD     dwStyle;
2737   LPCSTR    lpszIcon;
2738   DWORD     dwContextHelpId;
2739   MSGBOXCALLBACK lpfnMsgBoxCallback;
2740   DWORD     dwLanguageId;
2741 } MSGBOXPARAMS, *PMSGBOXPARAMS,   *LPMSGBOXPARAMS;
2742
2743 typedef struct _msgfilter {
2744   NMHDR nmhdr;
2745   UINT msg;
2746   WPARAM wParam;
2747   LPARAM lParam;
2748 } MSGFILTER;
2749
2750 typedef struct tagMULTIKEYHELP {
2751   DWORD  mkSize;
2752   TCHAR  mkKeylist;
2753   TCHAR  szKeyphrase[1];
2754 } MULTIKEYHELP;
2755
2756 typedef struct _NAME_BUFFER {
2757   UCHAR name[NCBNAMSZ];
2758   UCHAR name_num;
2759   UCHAR name_flags;
2760 } NAME_BUFFER;
2761
2762 typedef struct _NCB {
2763   UCHAR  ncb_command;
2764   UCHAR  ncb_retcode;
2765   UCHAR  ncb_lsn;
2766   UCHAR  ncb_num;
2767   PUCHAR ncb_buffer;
2768   WORD   ncb_length;
2769   UCHAR  ncb_callname[NCBNAMSZ];
2770   UCHAR  ncb_name[NCBNAMSZ];
2771   UCHAR  ncb_rto;
2772   UCHAR  ncb_sto;
2773   void (*ncb_post) (struct _NCB *);
2774   UCHAR  ncb_lana_num;
2775   UCHAR  ncb_cmd_cplt;
2776   UCHAR  ncb_reserve[10];
2777   HANDLE ncb_event;
2778 } NCB;
2779
2780 typedef struct _NCCALCSIZE_PARAMS {
2781   RECT        rgrc[3];
2782   PWINDOWPOS  lppos;
2783 } NCCALCSIZE_PARAMS;
2784
2785 typedef struct _NDDESHAREINFO {
2786   LONG   lRevision;
2787   LPTSTR lpszShareName;
2788   LONG   lShareType;
2789   LPTSTR lpszAppTopicList;
2790   LONG   fSharedFlag;
2791   LONG   fService;
2792   LONG   fStartAppFlag;
2793   LONG   nCmdShow;
2794   LONG   qModifyId[2];
2795   LONG   cNumItems;
2796   LPTSTR lpszItemList;
2797 }NDDESHAREINFO;
2798
2799 typedef struct _NETRESOURCE {
2800   DWORD  dwScope;
2801   DWORD  dwType;
2802   DWORD  dwDisplayType;
2803   DWORD  dwUsage;
2804   LPTSTR lpLocalName;
2805   LPTSTR lpRemoteName;
2806   LPTSTR lpComment;
2807   LPTSTR lpProvider;
2808 } NETRESOURCE, *LPNETRESOURCE;
2809
2810 typedef struct tagNEWCPLINFO {
2811   DWORD dwSize;
2812   DWORD dwFlags;
2813   DWORD dwHelpContext;
2814   LONG  lData;
2815   HICON hIcon;
2816   TCHAR  szName[32];
2817   TCHAR  szInfo[64];
2818   TCHAR  szHelpFile[128];
2819 } NEWCPLINFO;
2820
2821 typedef struct tagNEWTEXTMETRICA {
2822   LONG   tmHeight;
2823   LONG   tmAscent;
2824   LONG   tmDescent;
2825   LONG   tmInternalLeading;
2826   LONG   tmExternalLeading;
2827   LONG   tmAveCharWidth;
2828   LONG   tmMaxCharWidth;
2829   LONG   tmWeight;
2830   LONG   tmOverhang;
2831   LONG   tmDigitizedAspectX;
2832   LONG   tmDigitizedAspectY;
2833   BCHAR  tmFirstChar;
2834   BCHAR  tmLastChar;
2835   BCHAR  tmDefaultChar;
2836   BCHAR  tmBreakChar;
2837   BYTE   tmItalic;
2838   BYTE   tmUnderlined;
2839   BYTE   tmStruckOut;
2840   BYTE   tmPitchAndFamily;
2841   BYTE   tmCharSet;
2842   DWORD  ntmFlags;
2843   UINT   ntmSizeEM;
2844   UINT   ntmCellHeight;
2845   UINT   ntmAvgWidth;
2846 } NEWTEXTMETRICA;
2847
2848 typedef struct tagNEWTEXTMETRICW {
2849   LONG   tmHeight;
2850   LONG   tmAscent;
2851   LONG   tmDescent;
2852   LONG   tmInternalLeading;
2853   LONG   tmExternalLeading;
2854   LONG   tmAveCharWidth;
2855   LONG   tmMaxCharWidth;
2856   LONG   tmWeight;
2857   LONG   tmOverhang;
2858   LONG   tmDigitizedAspectX;
2859   LONG   tmDigitizedAspectY;
2860   WCHAR  tmFirstChar;
2861   WCHAR  tmLastChar;
2862   WCHAR  tmDefaultChar;
2863   WCHAR  tmBreakChar;
2864   BYTE   tmItalic;
2865   BYTE   tmUnderlined;
2866   BYTE   tmStruckOut;
2867   BYTE   tmPitchAndFamily;
2868   BYTE   tmCharSet;
2869   DWORD  ntmFlags;
2870   UINT   ntmSizeEM;
2871   UINT   ntmCellHeight;
2872   UINT   ntmAvgWidth;
2873 } NEWTEXTMETRICW;
2874
2875 #ifdef UNICODE
2876 typedef NEWTEXTMETRICA NEWTEXTMETRIC;
2877 #else
2878 typedef NEWTEXTMETRICW NEWTEXTMETRIC;
2879 #endif
2880
2881 typedef struct tagNEWTEXTMETRICEXA {
2882   NEWTEXTMETRICA ntmentm;
2883   FONTSIGNATURE  ntmeFontSignature;
2884 } NEWTEXTMETRICEXA;
2885
2886 typedef struct tagNEWTEXTMETRICEXW {
2887   NEWTEXTMETRICW ntmentm;
2888   FONTSIGNATURE  ntmeFontSignature;
2889 } NEWTEXTMETRICEXW;
2890
2891 #ifdef UNICODE
2892 typedef NEWTEXTMETRICEXA NEWTEXTMETRICEX;
2893 #else
2894 typedef NEWTEXTMETRICEXW NEWTEXTMETRICEX;
2895 #endif
2896
2897 typedef struct tagNM_LISTVIEW {
2898   NMHDR hdr;
2899   int   iItem;
2900   int   iSubItem;
2901   UINT  uNewState;
2902   UINT  uOldState;
2903   UINT  uChanged;
2904   POINT ptAction;
2905   LPARAM lParam;
2906 } NM_LISTVIEW;
2907
2908 typedef struct _TREEITEM *HTREEITEM;
2909
2910 typedef struct _TV_ITEM {
2911   UINT       mask;
2912   HTREEITEM  hItem;
2913   UINT       state;
2914   UINT       stateMask;
2915   LPTSTR     pszText;
2916   int        cchTextMax;
2917   int        iImage;
2918   int        iSelectedImage;
2919   int        cChildren;
2920   LPARAM     lParam;
2921 } TV_ITEM,   *LPTV_ITEM;
2922
2923 typedef struct _NM_TREEVIEW {
2924   NMHDR    hdr;
2925   UINT     action;
2926   TV_ITEM  itemOld;
2927   TV_ITEM  itemNew;
2928   POINT    ptDrag;
2929 } NM_TREEVIEW;
2930 typedef NM_TREEVIEW   *LPNM_TREEVIEW;
2931
2932 typedef struct _NM_UPDOWN {
2933   NMHDR    hdr;
2934   int     iPos;
2935   int  iDelta;
2936 } NM_UPDOWNW;
2937
2938 typedef struct tagNONCLIENTMETRICSA {
2939   UINT     cbSize;
2940   int      iBorderWidth;
2941   int      iScrollWidth;
2942   int      iScrollHeight;
2943   int      iCaptionWidth;
2944   int      iCaptionHeight;
2945   LOGFONTA lfCaptionFont;
2946   int      iSmCaptionWidth;
2947   int      iSmCaptionHeight;
2948   LOGFONTA lfSmCaptionFont;
2949   int      iMenuWidth;
2950   int      iMenuHeight;
2951   LOGFONTA lfMenuFont;
2952   LOGFONTA lfStatusFont;
2953   LOGFONTA lfMessageFont;
2954 } NONCLIENTMETRICSA, *LPNONCLIENTMETRICSA;
2955
2956 typedef struct tagNONCLIENTMETRICSW {
2957   UINT     cbSize;
2958   int      iBorderWidth;
2959   int      iScrollWidth;
2960   int      iScrollHeight;
2961   int      iCaptionWidth;
2962   int      iCaptionHeight;
2963   LOGFONTW lfCaptionFont;
2964   int      iSmCaptionWidth;
2965   int      iSmCaptionHeight;
2966   LOGFONTW lfSmCaptionFont;
2967   int      iMenuWidth;
2968   int      iMenuHeight;
2969   LOGFONTW lfMenuFont;
2970   LOGFONTW lfStatusFont;
2971   LOGFONTW lfMessageFont;
2972 } NONCLIENTMETRICSW, *LPNONCLIENTMETRICSW;
2973
2974 #ifdef UNICODE
2975 typedef NONCLIENTMETRICSW NONCLIENTMETRICS;
2976 typedef LPNONCLIENTMETRICSW LPNONCLIENTMETRICS;
2977 #else
2978 typedef NONCLIENTMETRICSA NONCLIENTMETRICS;
2979 typedef LPNONCLIENTMETRICSA LPNONCLIENTMETRICS;
2980 #endif
2981
2982 typedef struct _SERVICE_ADDRESS {
2983   DWORD   dwAddressType;
2984   DWORD   dwAddressFlags;
2985   DWORD   dwAddressLength;
2986   DWORD   dwPrincipalLength;
2987   BYTE   *lpAddress;
2988   BYTE   *lpPrincipal;
2989 } SERVICE_ADDRESS;
2990
2991 typedef struct _SERVICE_ADDRESSES {
2992   DWORD   dwAddressCount;
2993   SERVICE_ADDRESS   Addresses[1];
2994 } SERVICE_ADDRESSES, *LPSERVICE_ADDRESSES;
2995
2996 #ifndef _GUID_DEFINED
2997 #define _GUID_DEFINED
2998 typedef struct _GUID
2999 {
3000     unsigned long  Data1;
3001     unsigned short  Data2;
3002     unsigned short  Data3;
3003     unsigned char Data4[8];
3004 } GUID, *LPGUID;
3005 typedef GUID CLSID, *LPCLSID;
3006 #endif
3007
3008 typedef struct _SERVICE_INFO {
3009   LPGUID   lpServiceType;
3010   LPTSTR   lpServiceName;
3011   LPTSTR   lpComment;
3012   LPTSTR   lpLocale;
3013   DWORD    dwDisplayHint;
3014   DWORD    dwVersion;
3015   DWORD    dwTime;
3016   LPTSTR   lpMachineName;
3017   LPSERVICE_ADDRESSES lpServiceAddress;
3018   BLOB ServiceSpecificInfo;
3019 } SERVICE_INFO;
3020
3021 typedef struct _NS_SERVICE_INFO {
3022   DWORD   dwNameSpace;
3023   SERVICE_INFO ServiceInfo;
3024 } NS_SERVICE_INFO;
3025
3026 typedef struct _numberfmt {
3027   UINT      NumDigits;
3028   UINT      LeadingZero;
3029   UINT      Grouping;
3030   LPTSTR    lpDecimalSep;
3031   LPTSTR    lpThousandSep;
3032   UINT      NegativeOrder;
3033 } NUMBERFMT;
3034
3035 typedef struct _OFSTRUCT {
3036   BYTE cBytes;
3037   BYTE fFixedDisk;
3038   WORD nErrCode;
3039   WORD Reserved1;
3040   WORD Reserved2;
3041   CHAR szPathName[OFS_MAXPATHNAME];
3042 } OFSTRUCT, *LPOFSTRUCT;
3043
3044 typedef struct tagOFN {
3045   DWORD         lStructSize;
3046   HWND          hwndOwner;
3047   HINSTANCE     hInstance;
3048   LPCTSTR       lpstrFilter;
3049   LPTSTR        lpstrCustomFilter;
3050   DWORD         nMaxCustFilter;
3051   DWORD         nFilterIndex;
3052   LPTSTR        lpstrFile;
3053   DWORD         nMaxFile;
3054   LPTSTR        lpstrFileTitle;
3055   DWORD         nMaxFileTitle;
3056   LPCTSTR       lpstrInitialDir;
3057   LPCTSTR       lpstrTitle;
3058   DWORD         Flags;
3059   WORD          nFileOffset;
3060   WORD          nFileExtension;
3061   LPCTSTR       lpstrDefExt;
3062   DWORD         lCustData;
3063   LPOFNHOOKPROC lpfnHook;
3064   LPCTSTR       lpTemplateName;
3065 } OPENFILENAME, *LPOPENFILENAME;
3066
3067 typedef struct _OFNOTIFY {
3068   NMHDR          hdr;
3069   LPOPENFILENAME lpOFN;
3070   LPTSTR         pszFile;
3071 } OFNOTIFY, *LPOFNOTIFY;
3072
3073 typedef struct _OSVERSIONINFOA {
3074   DWORD dwOSVersionInfoSize;
3075   DWORD dwMajorVersion;
3076   DWORD dwMinorVersion;
3077   DWORD dwBuildNumber;
3078   DWORD dwPlatformId;
3079   CHAR szCSDVersion[ 128 ];
3080 } OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA;
3081
3082 typedef struct _OSVERSIONINFOW {
3083   DWORD dwOSVersionInfoSize;
3084   DWORD dwMajorVersion;
3085   DWORD dwMinorVersion;
3086   DWORD dwBuildNumber;
3087   DWORD dwPlatformId;
3088   WCHAR szCSDVersion[ 128 ];
3089 } OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW;
3090
3091 #ifdef UNICODE
3092 typedef OSVERSIONINFOA OSVERSIONINFO;
3093 #else
3094 typedef OSVERSIONINFOW OSVERSIONINFO;
3095 #endif
3096
3097 typedef struct _OSVERSIONINFOEXA
3098 #if defined(__cplusplus)
3099 : public OSVERSIONINFOA
3100 {
3101 #elif 0
3102 {
3103  OSVERSIONINFOA;
3104 #else
3105 {
3106  DWORD dwOSVersionInfoSize;
3107  DWORD dwMajorVersion;
3108  DWORD dwMinorVersion;
3109  DWORD dwBuildNumber;
3110  DWORD dwPlatformId;
3111  CHAR szCSDVersion[ 128 ];
3112 #endif
3113  WORD wServicePackMajor;
3114  WORD wServicePackMinor;
3115  WORD wSuiteMask;
3116  BYTE wProductType;
3117  BYTE wReserved;
3118 } OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
3119
3120 typedef struct _OSVERSIONINFOEXW
3121 #if defined(__cplusplus)
3122 : public OSVERSIONINFOW
3123 {
3124 #elif 0
3125 {
3126  OSVERSIONINFOW;
3127 #else
3128 {
3129  DWORD dwOSVersionInfoSize;
3130  DWORD dwMajorVersion;
3131  DWORD dwMinorVersion;
3132  DWORD dwBuildNumber;
3133  DWORD dwPlatformId;
3134  WCHAR szCSDVersion[ 128 ];
3135 #endif
3136  WORD wServicePackMajor;
3137  WORD wServicePackMinor;
3138  WORD wSuiteMask;
3139  BYTE wProductType;
3140  BYTE wReserved;
3141 } OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW;
3142
3143 #ifdef UNICODE
3144 typedef OSVERSIONINFOEXA OSVERSIONINFOEX;
3145 #else
3146 typedef OSVERSIONINFOEXW OSVERSIONINFOEX;
3147 #endif
3148
3149 typedef struct tagTEXTMETRICA {
3150   LONG tmHeight;
3151   LONG tmAscent;
3152   LONG tmDescent;
3153   LONG tmInternalLeading;
3154   LONG tmExternalLeading;
3155   LONG tmAveCharWidth;
3156   LONG tmMaxCharWidth;
3157   LONG tmWeight;
3158   LONG tmOverhang;
3159   LONG tmDigitizedAspectX;
3160   LONG tmDigitizedAspectY;
3161   BCHAR tmFirstChar;
3162   BCHAR tmLastChar;
3163   BCHAR tmDefaultChar;
3164   BCHAR tmBreakChar;
3165   BYTE tmItalic;
3166   BYTE tmUnderlined;
3167   BYTE tmStruckOut;
3168   BYTE tmPitchAndFamily;
3169   BYTE tmCharSet;
3170 } TEXTMETRICA, *LPTEXTMETRICA;
3171
3172 typedef struct tagTEXTMETRICW {
3173   LONG tmHeight;
3174   LONG tmAscent;
3175   LONG tmDescent;
3176   LONG tmInternalLeading;
3177   LONG tmExternalLeading;
3178   LONG tmAveCharWidth;
3179   LONG tmMaxCharWidth;
3180   LONG tmWeight;
3181   LONG tmOverhang;
3182   LONG tmDigitizedAspectX;
3183   LONG tmDigitizedAspectY;
3184   WCHAR tmFirstChar;
3185   WCHAR tmLastChar;
3186   WCHAR tmDefaultChar;
3187   BCHAR tmBreakChar;
3188   BYTE tmItalic;
3189   BYTE tmUnderlined;
3190   BYTE tmStruckOut;
3191   BYTE tmPitchAndFamily;
3192   BYTE tmCharSet;
3193 } TEXTMETRICW, *LPTEXTMETRICW;
3194
3195 #ifdef UNICODE
3196 typedef TEXTMETRICA TEXTMETRIC;
3197 typedef LPTEXTMETRICA LPTEXTMETRIC;
3198 #else
3199 typedef TEXTMETRICW TEXTMETRIC;
3200 typedef LPTEXTMETRICA LPTEXTMETRIC;
3201 #endif
3202
3203 typedef struct _OUTLINETEXTMETRICA {
3204   UINT   otmSize;
3205   TEXTMETRICA otmTextMetrics;
3206   BYTE   otmFiller;
3207   PANOSE otmPanoseNumber;
3208   UINT   otmfsSelection;
3209   UINT   otmfsType;
3210   int    otmsCharSlopeRise;
3211   int    otmsCharSlopeRun;
3212   int    otmItalicAngle;
3213   UINT   otmEMSquare;
3214   int    otmAscent;
3215   int    otmDescent;
3216   UINT   otmLineGap;
3217   UINT   otmsCapEmHeight;
3218   UINT   otmsXHeight;
3219   RECT   otmrcFontBox;
3220   int    otmMacAscent;
3221   int    otmMacDescent;
3222   UINT   otmMacLineGap;
3223   UINT   otmusMinimumPPEM;
3224   POINT  otmptSubscriptSize;
3225   POINT  otmptSubscriptOffset;
3226   POINT  otmptSuperscriptSize;
3227   POINT  otmptSuperscriptOffset;
3228   UINT   otmsStrikeoutSize;
3229   int    otmsStrikeoutPosition;
3230   int    otmsUnderscoreSize;
3231   int    otmsUnderscorePosition;
3232   PSTR   otmpFamilyName;
3233   PSTR   otmpFaceName;
3234   PSTR   otmpStyleName;
3235   PSTR   otmpFullName;
3236 } OUTLINETEXTMETRICA, *LPOUTLINETEXTMETRICA;
3237
3238 typedef struct _OUTLINETEXTMETRICW {
3239   UINT   otmSize;
3240   TEXTMETRICW otmTextMetrics;
3241   BYTE   otmFiller;
3242   PANOSE otmPanoseNumber;
3243   UINT   otmfsSelection;
3244   UINT   otmfsType;
3245   int    otmsCharSlopeRise;
3246   int    otmsCharSlopeRun;
3247   int    otmItalicAngle;
3248   UINT   otmEMSquare;
3249   int    otmAscent;
3250   int    otmDescent;
3251   UINT   otmLineGap;
3252   UINT   otmsCapEmHeight;
3253   UINT   otmsXHeight;
3254   RECT   otmrcFontBox;
3255   int    otmMacAscent;
3256   int    otmMacDescent;
3257   UINT   otmMacLineGap;
3258   UINT   otmusMinimumPPEM;
3259   POINT  otmptSubscriptSize;
3260   POINT  otmptSubscriptOffset;
3261   POINT  otmptSuperscriptSize;
3262   POINT  otmptSuperscriptOffset;
3263   UINT   otmsStrikeoutSize;
3264   int    otmsStrikeoutPosition;
3265   int    otmsUnderscoreSize;
3266   int    otmsUnderscorePosition;
3267   PSTR   otmpFamilyName;
3268   PSTR   otmpFaceName;
3269   PSTR   otmpStyleName;
3270   PSTR   otmpFullName;
3271 } OUTLINETEXTMETRICW, *LPOUTLINETEXTMETRICW;
3272
3273 #ifdef UNICODE
3274 typedef OUTLINETEXTMETRICA OUTLINETEXTMETRIC;
3275 typedef LPOUTLINETEXTMETRICA LPOUTLINETEXTMETRIC;
3276 #else
3277 typedef OUTLINETEXTMETRICW OUTLINETEXTMETRIC;
3278 typedef LPOUTLINETEXTMETRICA LPOUTLINETEXTMETRIC;
3279 #endif
3280
3281 typedef struct _OVERLAPPED {
3282   DWORD  Internal;
3283   DWORD  InternalHigh;
3284   DWORD  Offset;
3285   DWORD  OffsetHigh;
3286   HANDLE hEvent;
3287 } OVERLAPPED, *LPOVERLAPPED;
3288
3289 typedef struct tagPSD {
3290     DWORD           lStructSize;
3291     HWND            hwndOwner;
3292     HGLOBAL         hDevMode;
3293     HGLOBAL         hDevNames;
3294     DWORD           Flags;
3295     POINT           ptPaperSize;
3296     RECT            rtMinMargin;
3297     RECT            rtMargin;
3298     HINSTANCE       hInstance;
3299     LPARAM          lCustData;
3300     LPPAGESETUPHOOK lpfnPageSetupHook;
3301     LPPAGEPAINTHOOK lpfnPagePaintHook;
3302     LPCTSTR         lpPageSetupTemplateName;
3303     HGLOBAL         hPageSetupTemplate;
3304 } PAGESETUPDLG, *LPPAGESETUPDLG;
3305
3306 typedef struct tagPAINTSTRUCT {
3307   HDC  hdc;
3308   WINBOOL fErase;
3309   RECT rcPaint;
3310   WINBOOL fRestore;
3311   WINBOOL fIncUpdate;
3312   BYTE rgbReserved[32];
3313 } PAINTSTRUCT, *LPPAINTSTRUCT;
3314
3315 typedef struct _paraformat {
3316   UINT cbSize;
3317   DWORD dwMask;
3318   WORD  wNumbering;
3319   WORD  wReserved;
3320   LONG  dxStartIndent;
3321   LONG  dxRightIndent;
3322   LONG  dxOffset;
3323   WORD  wAlignment;
3324   SHORT cTabCount;
3325   LONG  rgxTabs[MAX_TAB_STOPS];
3326 } PARAFORMAT;
3327
3328 typedef struct _PERF_COUNTER_BLOCK {
3329   DWORD ByteLength;
3330 } PERF_COUNTER_BLOCK;
3331
3332 typedef struct _PERF_COUNTER_DEFINITION {
3333   DWORD  ByteLength;
3334   DWORD  CounterNameTitleIndex;
3335   LPWSTR CounterNameTitle;
3336   DWORD  CounterHelpTitleIndex;
3337   LPWSTR CounterHelpTitle;
3338   DWORD  DefaultScale;
3339   DWORD  DetailLevel;
3340   DWORD  CounterType;
3341   DWORD  CounterSize;
3342   DWORD  CounterOffset;
3343 } PERF_COUNTER_DEFINITION;
3344
3345 typedef struct _PERF_DATA_BLOCK {
3346   WCHAR         Signature[4];
3347   DWORD         LittleEndian;
3348   DWORD         Version;
3349   DWORD         Revision;
3350   DWORD         TotalByteLength;
3351   DWORD         HeaderLength;
3352   DWORD         NumObjectTypes;
3353   DWORD         DefaultObject;
3354   SYSTEMTIME    SystemTime;
3355   LARGE_INTEGER PerfTime;
3356   LARGE_INTEGER PerfFreq;
3357   LARGE_INTEGER PerfTime100nSec;
3358   DWORD         SystemNameLength;
3359   DWORD         SystemNameOffset;
3360 } PERF_DATA_BLOCK;
3361
3362 typedef struct _PERF_INSTANCE_DEFINITION {
3363   DWORD ByteLength;
3364   DWORD ParentObjectTitleIndex;
3365   DWORD ParentObjectInstance;
3366   DWORD UniqueID;
3367   DWORD NameOffset;
3368   DWORD NameLength;
3369 } PERF_INSTANCE_DEFINITION;
3370
3371 typedef struct _PERF_OBJECT_TYPE {
3372   DWORD  TotalByteLength;
3373   DWORD  DefinitionLength;
3374   DWORD  HeaderLength;
3375   DWORD  ObjectNameTitleIndex;
3376   LPWSTR ObjectNameTitle;
3377   DWORD  ObjectHelpTitleIndex;
3378   LPWSTR ObjectHelpTitle;
3379   DWORD  DetailLevel;
3380   DWORD  NumCounters;
3381   DWORD  DefaultCounter;
3382   DWORD  NumInstances;
3383   DWORD  CodePage;
3384   LARGE_INTEGER PerfTime;
3385   LARGE_INTEGER PerfFreq;
3386 } PERF_OBJECT_TYPE;
3387
3388 typedef struct _POLYTEXT {
3389   int     x;
3390   int     y;
3391   UINT    n;
3392   LPCTSTR lpstr;
3393   UINT    uiFlags;
3394   RECT    rcl;
3395   int     *pdx;
3396 } POLYTEXT, *LPPOLYTEXT;
3397
3398 typedef struct _PORT_INFO_1 {
3399   LPTSTR pName;
3400 } PORT_INFO_1;
3401
3402 typedef struct _PORT_INFO_2 {
3403   LPSTR pPortName;
3404   LPSTR pMonitorName;
3405   LPSTR pDescription;
3406   DWORD fPortType;
3407   DWORD Reserved;
3408 } PORT_INFO_2;
3409
3410 typedef struct _PREVENT_MEDIA_REMOVAL {
3411   BOOLEAN PreventMediaRemoval;
3412 } PREVENT_MEDIA_REMOVAL ;
3413
3414 typedef struct tagPD {
3415   DWORD     lStructSize;
3416   HWND      hwndOwner;
3417   HANDLE    hDevMode;
3418   HANDLE    hDevNames;
3419   HDC       hDC;
3420   DWORD     Flags;
3421   WORD      nFromPage;
3422   WORD      nToPage;
3423   WORD      nMinPage;
3424   WORD      nMaxPage;
3425   WORD      nCopies;
3426   HINSTANCE hInstance;
3427   DWORD     lCustData;
3428   LPPRINTHOOKPROC lpfnPrintHook;
3429   LPSETUPHOOKPROC lpfnSetupHook;
3430   LPCTSTR    lpPrintTemplateName;
3431   LPCTSTR    lpSetupTemplateName;
3432   HANDLE    hPrintTemplate;
3433   HANDLE    hSetupTemplate;
3434 } PRINTDLG PACKED, *LPPRINTDLG PACKED;
3435
3436 typedef struct _PRINTER_DEFAULTSA
3437 {
3438   LPTSTR      pDatatype;
3439   LPDEVMODEA   pDevMode;
3440   ACCESS_MASK DesiredAccess;
3441 } PRINTER_DEFAULTSA, *PPRINTER_DEFAULTSA, *LPPRINTER_DEFAULTSA;
3442
3443 typedef struct _PRINTER_DEFAULTSW
3444 {
3445   LPTSTR      pDatatype;
3446   LPDEVMODEA   pDevMode;
3447   ACCESS_MASK DesiredAccess;
3448 } PRINTER_DEFAULTSW, *PPRINTER_DEFAULTSW, *LPPRINTER_DEFAULTSW;
3449
3450 typedef struct _PRINTER_INFO_1 {
3451   DWORD  Flags;
3452   LPTSTR pDescription;
3453   LPTSTR pName;
3454   LPTSTR pComment;
3455 } PRINTER_INFO_1, *PPRINTER_INFO_1, *LPPRINTER_INFO_1;
3456
3457    #if 0
3458 typedef struct _PRINTER_INFO_2 {
3459   LPTSTR    pServerName;
3460   LPTSTR    pPrinterName;
3461   LPTSTR    pShareName;
3462   LPTSTR    pPortName;
3463   LPTSTR    pDriverName;
3464   LPTSTR    pComment;
3465   LPTSTR    pLocation;
3466   LPDEVMODE pDevMode;
3467   LPTSTR    pSepFile;
3468   LPTSTR    pPrintProcessor;
3469   LPTSTR    pDatatype;
3470   LPTSTR    pParameters;
3471   PSECURITY_DESCRIPTOR pSecurityDescriptor;
3472   DWORD     Attributes;
3473   DWORD     Priority;
3474   DWORD     DefaultPriority;
3475   DWORD     StartTime;
3476   DWORD     UntilTime;
3477   DWORD     Status;
3478   DWORD     cJobs;
3479   DWORD     AveragePPM;
3480 } PRINTER_INFO_2;
3481
3482
3483 typedef struct _PRINTER_INFO_3 {
3484   PSECURITY_DESCRIPTOR pSecurityDescriptor;
3485 } PRINTER_INFO_3;
3486  #endif
3487
3488 typedef struct _PRINTER_INFO_4 {
3489   LPTSTR  pPrinterName;
3490   LPTSTR  pServerName;
3491   DWORD  Attributes;
3492 } PRINTER_INFO_4;
3493
3494 typedef struct _PRINTER_INFO_5 {
3495   LPTSTR    pPrinterName;
3496   LPTSTR    pPortName;
3497   DWORD     Attributes;
3498   DWORD     DeviceNotSelectedTimeout;
3499   DWORD     TransmissionRetryTimeout;
3500 } PRINTER_INFO_5;
3501
3502 typedef struct _PRINTER_NOTIFY_INFO_DATA {
3503   WORD   Type;
3504   WORD   Field;
3505   DWORD  Reserved;
3506   DWORD  Id;
3507   union {
3508     DWORD  adwData[2];
3509     struct {
3510       DWORD  cbBuf;
3511       LPVOID pBuf;
3512     } Data;
3513   } NotifyData;
3514 } PRINTER_NOTIFY_INFO_DATA;
3515
3516 typedef struct _PRINTER_NOTIFY_INFO {
3517   DWORD  Version;
3518   DWORD  Flags;
3519   DWORD  Count;
3520   PRINTER_NOTIFY_INFO_DATA  aData[1];
3521 } PRINTER_NOTIFY_INFO;
3522
3523 typedef struct _PRINTER_NOTIFY_OPTIONS_TYPE {
3524   WORD   Type;
3525   WORD   Reserved0;
3526   DWORD  Reserved1;
3527   DWORD  Reserved2;
3528   DWORD  Count;
3529   PWORD  pFields;
3530 } PRINTER_NOTIFY_OPTIONS_TYPE, *PPRINTER_NOTIFY_OPTIONS_TYPE;
3531
3532 typedef struct _PRINTER_NOTIFY_OPTIONS {
3533   DWORD  Version;
3534   DWORD  Flags;
3535   DWORD  Count;
3536   PPRINTER_NOTIFY_OPTIONS_TYPE  pTypes;
3537 } PRINTER_NOTIFY_OPTIONS;
3538
3539 typedef struct _PRINTPROCESSOR_INFO_1 {
3540   LPTSTR pName;
3541 } PRINTPROCESSOR_INFO_1;
3542
3543
3544 typedef struct _PROCESS_HEAP_ENTRY {
3545   PVOID lpData;
3546   DWORD cbData;
3547   BYTE cbOverhead;
3548   BYTE iRegionIndex;
3549   WORD wFlags;
3550   DWORD dwCommittedSize;
3551   DWORD dwUnCommittedSize;
3552   LPVOID lpFirstBlock;
3553   LPVOID lpLastBlock;
3554   HANDLE hMem;
3555 } PROCESS_HEAPENTRY, *LPPROCESS_HEAP_ENTRY;
3556
3557 typedef struct _PROCESS_INFORMATION {
3558   HANDLE hProcess;
3559   HANDLE hThread;
3560   DWORD dwProcessId;
3561   DWORD dwThreadId;
3562 } PROCESS_INFORMATION, *LPPROCESS_INFORMATION;
3563
3564 typedef UINT CALLBACK (*LPFNPSPCALLBACK) (HWND, UINT, LPVOID);
3565
3566 typedef struct _PROPSHEETPAGE {
3567   DWORD     dwSize;
3568   DWORD     dwFlags;
3569   HINSTANCE hInstance;
3570   union {
3571     LPCTSTR        pszTemplate;
3572     LPCDLGTEMPLATE pResource;
3573   } u1;
3574   union {
3575     HICON  hIcon;
3576     LPCTSTR pszIcon;
3577   } u2;
3578   LPCTSTR pszTitle;
3579   DLGPROC pfnDlgProc;
3580   LPARAM  lParam;
3581   LPFNPSPCALLBACK pfnCallback;
3582   UINT   * pcRefParent;
3583 } PROPSHEETPAGE,   *LPPROPSHEETPAGE;
3584 typedef const PROPSHEETPAGE   *LPCPROPSHEETPAGE;
3585
3586 typedef struct _PSP *HPROPSHEETPAGE;
3587 typedef struct _PROPSHEETHEADER {
3588   DWORD      dwSize;
3589   DWORD      dwFlags;
3590   HWND       hwndParent;
3591   HINSTANCE  hInstance;
3592   union {
3593     HICON  hIcon;
3594     LPCTSTR pszIcon;
3595   } u1;
3596   LPCTSTR     pszCaption;
3597   UINT       nPages;
3598   union {
3599     UINT  nStartPage;
3600     LPCTSTR pStartPage;
3601   } u2;
3602   union {
3603     LPCPROPSHEETPAGE    ppsp;
3604     HPROPSHEETPAGE   *phpage;
3605   } u3;
3606   PFNPROPSHEETCALLBACK pfnCallback;
3607 } PROPSHEETHEADER,   *LPPROPSHEETHEADER;
3608 typedef const PROPSHEETHEADER   *LPCPROPSHEETHEADER;
3609
3610 /* PropertySheet callbacks */
3611 typedef WINBOOL CALLBACK (*LPFNADDPROPSHEETPAGE) (HPROPSHEETPAGE, LPARAM);
3612 typedef WINBOOL CALLBACK (*LPFNADDPROPSHEETPAGES) (LPVOID,
3613                                                    LPFNADDPROPSHEETPAGE,
3614                                                    LPARAM);
3615
3616 typedef  struct _PROTOCOL_INFO {
3617   DWORD  dwServiceFlags;
3618   INT  iAddressFamily;
3619   INT  iMaxSockAddr;
3620   INT  iMinSockAddr;
3621   INT  iSocketType;
3622   INT  iProtocol;
3623   DWORD  dwMessageSize;
3624   LPTSTR  lpProtocol;
3625 } PROTOCOL_INFO;
3626
3627 typedef struct _PROVIDOR_INFO_1 {
3628   LPTSTR pName;
3629   LPTSTR pEnvironment ;
3630   LPTSTR pDLLName ;
3631 } PROVIDOR_INFO_1;
3632
3633 typedef struct _PSHNOTIFY {
3634   NMHDR hdr;
3635   LPARAM lParam;
3636 } PSHNOTIFY,   *LPPSHNOTIFY;
3637
3638 typedef struct _punctuation {
3639   UINT   iSize;
3640   LPSTR  szPunctuation;
3641 } PUNCTUATION;
3642
3643 typedef struct _QUERY_SERVICE_CONFIGA {
3644   DWORD dwServiceType;
3645   DWORD dwStartType;
3646   DWORD dwErrorControl;
3647   LPSTR lpBinaryPathName;
3648   LPSTR lpLoadOrderGroup;
3649   DWORD dwTagId;
3650   LPSTR lpDependencies;
3651   LPSTR lpServiceStartName;
3652   LPSTR lpDisplayName;
3653 } QUERY_SERVICE_CONFIGA, *LPQUERY_SERVICE_CONFIGA;
3654
3655 typedef struct _QUERY_SERVICE_CONFIGW {
3656   DWORD dwServiceType;
3657   DWORD dwStartType;
3658   DWORD dwErrorControl;
3659   LPWSTR lpBinaryPathName;
3660   LPWSTR lpLoadOrderGroup;
3661   DWORD dwTagId;
3662   LPWSTR lpDependencies;
3663   LPWSTR lpServiceStartName;
3664   LPWSTR lpDisplayName;
3665 } QUERY_SERVICE_CONFIGW, *LPQUERY_SERVICE_CONFIGW;
3666
3667 #ifdef UNICODE
3668 #define QUERY_SERVICE_CONFIG QUERY_SERVICE_CONFIGW
3669 #define LPQUERY_SERVICE_CONFIG LPQUERY_SERVICE_CONFIGW
3670 #else
3671 #define QUERY_SERVICE_CONFIG QUERY_SERVICE_CONFIGA
3672 #define LPQUERY_SERVICE_CONFIG LPQUERY_SERVICE_CONFIGA
3673 #endif
3674
3675 typedef struct _QUERY_SERVICE_LOCK_STATUSA {
3676   DWORD fIsLocked;
3677   LPSTR lpLockOwner;
3678   DWORD dwLockDuration;
3679 } QUERY_SERVICE_LOCK_STATUSA, *LPQUERY_SERVICE_LOCK_STATUSA;
3680
3681 typedef struct _QUERY_SERVICE_LOCK_STATUSW {
3682   DWORD fIsLocked;
3683   LPWSTR lpLockOwner;
3684   DWORD dwLockDuration;
3685 } QUERY_SERVICE_LOCK_STATUSW, *LPQUERY_SERVICE_LOCK_STATUSW;
3686
3687 #ifdef UNICODE
3688 #define QUERY_SERVICE_LOCK_STATUS QUERY_SERVICE_LOCK_STATUSW
3689 #define LPQUERY_SERVICE_LOCK_STATUS LPQUERY_SERVICE_LOCK_STATUSW
3690 #else
3691 #define QUERY_SERVICE_LOCK_STATUS QUERY_SERVICE_LOCK_STATUSA
3692 #define LPQUERY_SERVICE_LOCK_STATUS LPQUERY_SERVICE_LOCK_STATUSA
3693 #endif
3694
3695 typedef  struct  _RASAMB {
3696   DWORD    dwSize;
3697   DWORD    dwError;
3698   TCHAR    szNetBiosError[ NETBIOS_NAME_LEN + 1 ];
3699   BYTE     bLana;
3700 } RASAMB;
3701
3702 typedef struct _RASCONN {
3703   DWORD     dwSize;
3704   HRASCONN  hrasconn;
3705   TCHAR     szEntryName[RAS_MaxEntryName + 1];
3706
3707   CHAR      szDeviceType[ RAS_MaxDeviceType + 1 ];
3708   CHAR      szDeviceName[ RAS_MaxDeviceName + 1 ];
3709 } RASCONN ;
3710
3711 typedef struct _RASCONNSTATUS {
3712   DWORD         dwSize;
3713   RASCONNSTATE  rasconnstate;
3714   DWORD         dwError;
3715   TCHAR         szDeviceType[RAS_MaxDeviceType + 1];
3716   TCHAR         szDeviceName[RAS_MaxDeviceName + 1];
3717 } RASCONNSTATUS;
3718
3719 typedef  struct  _RASDIALEXTENSIONS {
3720   DWORD    dwSize;
3721   DWORD    dwfOptions;
3722   HWND    hwndParent;
3723   DWORD    reserved;
3724 } RASDIALEXTENSIONS;
3725
3726 typedef struct _RASDIALPARAMS {
3727   DWORD  dwSize;
3728   TCHAR  szEntryName[RAS_MaxEntryName + 1];
3729   TCHAR  szPhoneNumber[RAS_MaxPhoneNumber + 1];
3730   TCHAR  szCallbackNumber[RAS_MaxCallbackNumber + 1];
3731   TCHAR  szUserName[UNLEN + 1];
3732   TCHAR  szPassword[PWLEN + 1];
3733   TCHAR  szDomain[DNLEN + 1] ;
3734 } RASDIALPARAMS;
3735
3736 typedef struct _RASENTRYNAME {
3737   DWORD  dwSize;
3738   TCHAR  szEntryName[RAS_MaxEntryName + 1];
3739 }RASENTRYNAME;
3740
3741 typedef  struct  _RASPPPIP {
3742   DWORD    dwSize;
3743   DWORD    dwError;
3744   TCHAR    szIpAddress[ RAS_MaxIpAddress + 1 ];
3745 } RASPPPIP;
3746
3747 typedef  struct  _RASPPPIPX {
3748   DWORD    dwSize;
3749   DWORD    dwError;
3750   TCHAR    szIpxAddress[ RAS_MaxIpxAddress + 1 ];
3751 } RASPPPIPX;
3752
3753 typedef  struct  _RASPPPNBF {
3754   DWORD    dwSize;
3755   DWORD    dwError;
3756   DWORD    dwNetBiosError;
3757   TCHAR    szNetBiosError[ NETBIOS_NAME_LEN + 1 ];
3758   TCHAR    szWorkstationName[ NETBIOS_NAME_LEN + 1 ];
3759   BYTE     bLana;
3760 } RASPPPNBF;
3761
3762 typedef struct _RASTERIZER_STATUS {
3763   short nSize;
3764   short wFlags;
3765   short nLanguageID;
3766 } RASTERIZER_STATUS, *LPRASTERIZER_STATUS;
3767
3768 typedef struct _REASSIGN_BLOCKS {
3769   WORD   Reserved;
3770   WORD   Count;
3771   DWORD BlockNumber[1];
3772 } REASSIGN_BLOCKS ;
3773
3774 typedef struct _REMOTE_NAME_INFO {
3775   LPTSTR  lpUniversalName;
3776   LPTSTR  lpConnectionName;
3777   LPTSTR  lpRemainingPath;
3778 } REMOTE_NAME_INFO;
3779
3780 /*
3781  TODO: OLE
3782 typedef struct _reobject {
3783   DWORD  cbStruct;
3784   LONG   cp;
3785   CLSID  clsid;
3786   LPOLEOBJECT      poleobj;
3787   LPSTORAGE        pstg;
3788   LPOLECLIENTSITE  polesite;
3789   SIZEL  sizel;
3790   DWORD  dvaspect;
3791   DWORD  dwFlags;
3792   DWORD  dwUser;
3793 } REOBJECT;
3794 */
3795
3796 typedef struct _repastespecial {
3797   DWORD  dwAspect;
3798   DWORD  dwParam;
3799 } REPASTESPECIAL;
3800
3801 typedef struct _reqresize {
3802   NMHDR nmhdr;
3803   RECT rc;
3804 } REQRESIZE;
3805
3806 typedef struct _RGNDATAHEADER {
3807   DWORD dwSize;
3808   DWORD iType;
3809   DWORD nCount;
3810   DWORD nRgnSize;
3811   RECT  rcBound;
3812 } RGNDATAHEADER;
3813
3814 typedef struct _RGNDATA {
3815   RGNDATAHEADER rdh;
3816   char          Buffer[1];
3817 } RGNDATA, *PRGNDATA, *LPRGNDATA;
3818
3819 typedef struct tagSCROLLINFO {
3820   UINT cbSize;
3821   UINT fMask;
3822   int  nMin;
3823   int  nMax;
3824   UINT nPage;
3825   int  nPos;
3826   int  nTrackPos;
3827 }   SCROLLINFO, *LPSCROLLINFO;
3828 typedef SCROLLINFO const *LPCSCROLLINFO;
3829
3830
3831 typedef struct _selchange {
3832   NMHDR nmhdr;
3833   CHARRANGE chrg;
3834   WORD seltyp;
3835 } SELCHANGE;
3836
3837 typedef struct tagSERIALKEYS {
3838   DWORD cbSize;
3839   DWORD dwFlags;
3840   LPSTR lpszActivePort;
3841   LPSTR lpszPort;
3842   DWORD iBaudRate;
3843   DWORD iPortState;
3844 } SERIALKEYS,  * LPSERIALKEYS;
3845
3846 typedef struct _SERVICE_TABLE_ENTRYA {
3847   LPSTR lpServiceName;
3848   LPSERVICE_MAIN_FUNCTION lpServiceProc;
3849 } SERVICE_TABLE_ENTRYA, *LPSERVICE_TABLE_ENTRYA;
3850
3851 typedef struct _SERVICE_TABLE_ENTRYW {
3852   LPWSTR lpServiceName;
3853   LPSERVICE_MAIN_FUNCTION lpServiceProc;
3854 } SERVICE_TABLE_ENTRYW, *LPSERVICE_TABLE_ENTRYW;
3855
3856 #ifdef UNICODE
3857 #define SERVICE_TABLE_ENTRY SERVICE_TABLE_ENTRYW
3858 #define LPSERVICE_TABLE_ENTRY LPSERVICE_TABLE_ENTRYW
3859 #else
3860 #define SERVICE_TABLE_ENTRY SERVICE_TABLE_ENTRYA
3861 #define LPSERVICE_TABLE_ENTRY LPSERVICE_TABLE_ENTRYA
3862 #endif
3863
3864
3865 typedef struct _SERVICE_TYPE_VALUE_ABS {
3866   DWORD   dwNameSpace;
3867   DWORD   dwValueType;
3868   DWORD   dwValueSize;
3869   LPTSTR  lpValueName;
3870   PVOID   lpValue;
3871 } SERVICE_TYPE_VALUE_ABS;
3872
3873 typedef struct _SERVICE_TYPE_INFO_ABS {
3874   LPTSTR                  lpTypeName;
3875   DWORD                   dwValueCount;
3876   SERVICE_TYPE_VALUE_ABS  Values[1];
3877 } SERVICE_TYPE_INFO_ABS;
3878
3879 typedef struct _SESSION_BUFFER {
3880   UCHAR lsn;
3881   UCHAR state;
3882   UCHAR local_name[NCBNAMSZ];
3883   UCHAR remote_name[NCBNAMSZ];
3884   UCHAR rcvs_outstanding;
3885   UCHAR sends_outstanding;
3886 } SESSION_BUFFER;
3887
3888 typedef struct _SESSION_HEADER {
3889   UCHAR sess_name;
3890   UCHAR num_sess;
3891   UCHAR rcv_dg_outstanding;
3892   UCHAR rcv_any_outstanding;
3893 } SESSION_HEADER;
3894
3895 typedef enum tagSHCONTF { 
3896   SHCONTF_FOLDERS = 32,         
3897   SHCONTF_NONFOLDERS = 64,      
3898   SHCONTF_INCLUDEHIDDEN = 128,  
3899 } SHCONTF; 
3900  
3901 typedef struct _SHFILEINFO { 
3902   HICON hIcon;                   
3903   int   iIcon;                   
3904   DWORD dwAttributes;            
3905   char  szDisplayName[MAX_PATH]; 
3906   char  szTypeName[80];          
3907 } SHFILEINFO; 
3908
3909 typedef WORD FILEOP_FLAGS; 
3910 typedef struct _SHFILEOPSTRUCT { 
3911   HWND         hwnd;                  
3912   UINT         wFunc;                 
3913   LPCSTR       pFrom;                 
3914   LPCSTR       pTo;                   
3915   FILEOP_FLAGS fFlags;                
3916   WINBOOL         fAnyOperationsAborted; 
3917   LPVOID       hNameMappings;         
3918   LPCSTR       lpszProgressTitle;     
3919 } SHFILEOPSTRUCT,   *LPSHFILEOPSTRUCT; 
3920  
3921 typedef enum tagSHGDN { 
3922   SHGDN_NORMAL = 0,           
3923   SHGDN_INFOLDER = 1,         
3924   SHGDN_FORPARSING = 0x8000,  
3925 } SHGNO; 
3926  
3927 typedef struct _SHNAMEMAPPING { 
3928   LPSTR pszOldPath; 
3929   LPSTR pszNewPath; 
3930   int   cchOldPath; 
3931   int   cchNewPath; 
3932 } SHNAMEMAPPING,   *LPSHNAMEMAPPING; 
3933  
3934 typedef struct tagSOUNDSENTRY {  
3935   UINT cbSize; 
3936   DWORD dwFlags; 
3937   DWORD iFSTextEffect; 
3938   DWORD iFSTextEffectMSec; 
3939   DWORD iFSTextEffectColorBits; 
3940   DWORD iFSGrafEffect; 
3941   DWORD iFSGrafEffectMSec; 
3942   DWORD iFSGrafEffectColor; 
3943   DWORD iWindowsEffect; 
3944   DWORD iWindowsEffectMSec; 
3945   LPTSTR lpszWindowsEffectDLL; 
3946   DWORD iWindowsEffectOrdinal; 
3947 } SOUNDSENTRY, *LPSOUNDSENTRY; 
3948  
3949 typedef struct _STARTUPINFOA {
3950   DWORD   cb;
3951   LPSTR   lpReserved;
3952   LPSTR   lpDesktop;
3953   LPSTR   lpTitle;
3954   DWORD   dwX;
3955   DWORD   dwY;
3956   DWORD   dwXSize;
3957   DWORD   dwYSize;
3958   DWORD   dwXCountChars;
3959   DWORD   dwYCountChars;
3960   DWORD   dwFillAttribute;
3961   DWORD   dwFlags;
3962   WORD    wShowWindow;
3963   WORD    cbReserved2;
3964   LPBYTE  lpReserved2;
3965   HANDLE  hStdInput;
3966   HANDLE  hStdOutput;
3967   HANDLE  hStdError;
3968 } STARTUPINFOA, *LPSTARTUPINFOA;
3969
3970 typedef struct _STARTUPINFOW {
3971   DWORD   cb;
3972   LPWSTR  lpReserved;
3973   LPWSTR  lpDesktop;
3974   LPWSTR  lpTitle;
3975   DWORD   dwX;
3976   DWORD   dwY;
3977   DWORD   dwXSize;
3978   DWORD   dwYSize;
3979   DWORD   dwXCountChars;
3980   DWORD   dwYCountChars;
3981   DWORD   dwFillAttribute;
3982   DWORD   dwFlags;
3983   WORD    wShowWindow;
3984   WORD    cbReserved2;
3985   LPBYTE  lpReserved2;
3986   HANDLE  hStdInput;
3987   HANDLE  hStdOutput;
3988   HANDLE  hStdError;
3989 } STARTUPINFOW, *LPSTARTUPINFOW;
3990
3991 #ifdef UNICODE
3992 typedef STARTUPINFOW STARTUPINFO;
3993 typedef LPSTARTUPINFOW LPSTARTUPINFO;
3994 #else
3995 typedef STARTUPINFOA STARTUPINFO;
3996 typedef LPSTARTUPINFOA LPSTARTUPINFO;
3997 #endif /* UNICODE */
3998
3999 typedef struct tagSTICKYKEYS {
4000   DWORD cbSize;
4001   DWORD dwFlags;
4002 } STICKYKEYS, *LPSTICKYKEYS;
4003
4004 typedef struct _STRRET {
4005   UINT uType;
4006   union
4007     {
4008       LPWSTR pOleStr;
4009       UINT   uOffset;
4010       char   cStr[MAX_PATH];
4011     } DUMMYUNIONNAME;
4012 } STRRET, *LPSTRRET;
4013
4014 typedef struct _tagSTYLEBUF {
4015   DWORD  dwStyle;
4016   CHAR  szDescription[32];
4017 } STYLEBUF, *LPSTYLEBUF;
4018
4019 typedef struct tagSTYLESTRUCT {
4020   DWORD styleOld;
4021   DWORD styleNew;
4022 } STYLESTRUCT, * LPSTYLESTRUCT;
4023
4024 typedef struct _ACCESS_ALLOWED_ACE {
4025  ACE_HEADER Header;
4026  ACCESS_MASK Mask;
4027  DWORD SidStart;
4028 } ACCESS_ALLOWED_ACE;
4029
4030 typedef ACCESS_ALLOWED_ACE *PACCESS_ALLOWED_ACE;
4031
4032 typedef struct _ACCESS_DENIED_ACE {
4033  ACE_HEADER Header;
4034  ACCESS_MASK Mask;
4035  DWORD SidStart;
4036 } ACCESS_DENIED_ACE;
4037 typedef ACCESS_DENIED_ACE *PACCESS_DENIED_ACE;
4038
4039 typedef struct _SYSTEM_AUDIT_ACE {
4040  ACE_HEADER Header;
4041  ACCESS_MASK Mask;
4042  DWORD SidStart;
4043 } SYSTEM_AUDIT_ACE;
4044 typedef SYSTEM_AUDIT_ACE *PSYSTEM_AUDIT_ACE;
4045
4046 typedef struct _SYSTEM_ALARM_ACE {
4047  ACE_HEADER Header;
4048  ACCESS_MASK Mask;
4049  DWORD SidStart;
4050 } SYSTEM_ALARM_ACE;
4051 typedef SYSTEM_ALARM_ACE *PSYSTEM_ALARM_ACE;
4052
4053 typedef struct _ACCESS_ALLOWED_OBJECT_ACE {
4054  ACE_HEADER Header;
4055  ACCESS_MASK Mask;
4056  DWORD Flags;
4057  GUID ObjectType;
4058  GUID InheritedObjectType;
4059  DWORD SidStart;
4060 } ACCESS_ALLOWED_OBJECT_ACE, *PACCESS_ALLOWED_OBJECT_ACE;
4061
4062 typedef struct _ACCESS_DENIED_OBJECT_ACE {
4063  ACE_HEADER Header;
4064  ACCESS_MASK Mask;
4065  DWORD Flags;
4066  GUID ObjectType;
4067  GUID InheritedObjectType;
4068  DWORD SidStart;
4069 } ACCESS_DENIED_OBJECT_ACE, *PACCESS_DENIED_OBJECT_ACE;
4070
4071 typedef struct _SYSTEM_AUDIT_OBJECT_ACE {
4072  ACE_HEADER Header;
4073  ACCESS_MASK Mask;
4074  DWORD Flags;
4075  GUID ObjectType;
4076  GUID InheritedObjectType;
4077  DWORD SidStart;
4078 } SYSTEM_AUDIT_OBJECT_ACE, *PSYSTEM_AUDIT_OBJECT_ACE;
4079
4080 typedef struct _SYSTEM_ALARM_OBJECT_ACE {
4081  ACE_HEADER Header;
4082  ACCESS_MASK Mask;
4083  DWORD Flags;
4084  GUID ObjectType;
4085  GUID InheritedObjectType;
4086  DWORD SidStart;
4087 } SYSTEM_ALARM_OBJECT_ACE, *PSYSTEM_ALARM_OBJECT_ACE;
4088
4089 typedef struct _SYSTEM_INFO
4090 {
4091   union
4092     {
4093       DWORD dwOemId;
4094       struct
4095         {
4096           WORD wProcessorArchitecture;
4097           WORD wReserved;
4098         }
4099       s;
4100     }
4101   u;
4102   DWORD  dwPageSize;
4103   LPVOID lpMinimumApplicationAddress;
4104   LPVOID lpMaximumApplicationAddress;
4105   DWORD  dwActiveProcessorMask;
4106   DWORD  dwNumberOfProcessors;
4107   DWORD  dwProcessorType;
4108   DWORD  dwAllocationGranularity;
4109   WORD  wProcessorLevel;
4110   WORD  wProcessorRevision;
4111 } SYSTEM_INFO, *LPSYSTEM_INFO;
4112
4113 typedef struct _SYSTEM_POWER_STATUS {
4114   BYTE ACLineStatus;
4115   BYTE  BatteryFlag;
4116   BYTE  BatteryLifePercent;
4117   BYTE  Reserved1;
4118   DWORD  BatteryLifeTime;
4119   DWORD  BatteryFullLifeTime;
4120 } SYSTEM_POWER_STATUS;
4121 typedef SYSTEM_POWER_STATUS *LPSYSTEM_POWER_STATUS;
4122
4123 typedef struct _TAPE_ERASE {
4124   ULONG Type;
4125 } TAPE_ERASE;
4126
4127 typedef struct _TAPE_GET_DRIVE_PARAMETERS {
4128   BOOLEAN ECC;
4129   BOOLEAN Compression;
4130   BOOLEAN DataPadding;
4131   BOOLEAN ReportSetmarks;
4132   ULONG   DefaultBlockSize;
4133   ULONG   MaximumBlockSize;
4134   ULONG   MinimumBlockSize;
4135   ULONG   MaximumPartitionCount;
4136   ULONG   FeaturesLow;
4137   ULONG   FeaturesHigh;
4138   ULONG   EOTWarningZoneSize;
4139 } TAPE_GET_DRIVE_PARAMETERS;
4140
4141 typedef struct _TAPE_GET_MEDIA_PARAMETERS {
4142   LARGE_INTEGER   Capacity;
4143   LARGE_INTEGER   Remaining;
4144   DWORD   BlockSize;
4145   DWORD   PartitionCount;
4146   BOOLEAN WriteProtected;
4147 } TAPE_GET_MEDIA_PARAMETERS;
4148
4149 typedef struct _TAPE_GET_POSITION {
4150   ULONG Type;
4151   ULONG Partition;
4152   ULONG OffsetLow;
4153   ULONG OffsetHigh;
4154 } TAPE_GET_POSITION;
4155
4156 typedef struct _TAPE_PREPARE {
4157   ULONG Operation;
4158 } TAPE_PREPARE;
4159
4160 typedef struct _TAPE_SET_DRIVE_PARAMETERS {
4161   BOOLEAN ECC;
4162   BOOLEAN Compression;
4163   BOOLEAN DataPadding;
4164   BOOLEAN ReportSetmarks;
4165   ULONG   EOTWarningZoneSize;
4166 } TAPE_SET_DRIVE_PARAMETERS;
4167
4168 typedef struct _TAPE_SET_MEDIA_PARAMETERS {
4169   ULONG BlockSize;
4170 } TAPE_SET_MEDIA_PARAMETERS;
4171
4172 typedef struct _TAPE_SET_POSITION {
4173   ULONG Method;
4174   ULONG Partition;
4175   ULONG OffsetLow;
4176   ULONG OffsetHigh;
4177 } TAPE_SET_POSITION;
4178
4179 typedef struct _TAPE_WRITE_MARKS {
4180   ULONG Type;
4181   ULONG Count;
4182 } TAPE_WRITE_MARKS;
4183
4184 typedef struct {
4185   HINSTANCE hInst;
4186   UINT nID;
4187 } TBADDBITMAP, *LPTBADDBITMAP;
4188
4189 typedef struct _TBBUTTON {
4190   int iBitmap;
4191   int idCommand;
4192   BYTE fsState;
4193   BYTE fsStyle;
4194   DWORD dwData;
4195   int iString;
4196 } TBBUTTON,  * PTBBUTTON,  * LPTBBUTTON;
4197 typedef const TBBUTTON  * LPCTBBUTTON;
4198
4199 typedef struct {
4200   NMHDR hdr;
4201   int iItem;
4202   TBBUTTON tbButton;
4203   int cchText;
4204   LPTSTR pszText;
4205 } TBNOTIFY,  *LPTBNOTIFY;
4206
4207 typedef struct {
4208   HKEY hkr;
4209   LPCTSTR pszSubKey;
4210   LPCTSTR pszValueName;
4211 } TBSAVEPARAMS;
4212
4213 typedef struct _TC_HITTESTINFO {
4214   POINT pt;
4215   UINT  flags;
4216 } TC_HITTESTINFO;
4217
4218 typedef struct _TC_ITEM {
4219   UINT mask;
4220   UINT lpReserved1;
4221   UINT lpReserved2;
4222   LPTSTR pszText;
4223   int cchTextMax;
4224   int iImage;
4225   LPARAM lParam;
4226 } TC_ITEM;
4227
4228 typedef struct _TC_ITEMHEADER {
4229   UINT mask;
4230   UINT lpReserved1;
4231   UINT lpReserved2;
4232   LPTSTR pszText;
4233   int cchTextMax;
4234   int iImage;
4235 } TC_ITEMHEADER;
4236
4237 typedef struct _TC_KEYDOWN {
4238   NMHDR hdr;
4239   WORD wVKey;
4240   UINT flags;
4241 } TC_KEYDOWN;
4242
4243 typedef struct _textrange {
4244   CHARRANGE chrg;
4245   LPSTR lpstrText;
4246 } TEXTRANGE;
4247
4248 typedef struct tagTOGGLEKEYS {
4249   DWORD cbSize;
4250   DWORD dwFlags;
4251 } TOGGLEKEYS;
4252
4253 typedef struct {
4254   UINT      cbSize;
4255   UINT      uFlags;
4256   HWND      hwnd;
4257   UINT      uId;
4258   RECT      rect;
4259   HINSTANCE hinst;
4260   LPTSTR     lpszText;
4261 } TOOLINFO, *PTOOLINFO, *LPTOOLINFO;
4262
4263 typedef struct {
4264   NMHDR     hdr;
4265   LPTSTR    lpszText;
4266   char      szText[80];
4267   HINSTANCE hinst;
4268   UINT      uFlags;
4269 } TOOLTIPTEXT,   *LPTOOLTIPTEXT;
4270
4271 typedef struct tagTPMPARAMS {
4272   UINT cbSize;
4273   RECT rcExclude;
4274 } TPMPARAMS,   *LPTPMPARAMS;
4275
4276 #if 0 // RobD - typedef removed due to conflict with mingw headers
4277 typedef struct _TRANSMIT_FILE_BUFFERS {
4278   PVOID Head;
4279   DWORD HeadLength;
4280   PVOID Tail;
4281   DWORD TailLength;
4282 } TRANSMIT_FILE_BUFFERS;
4283 #endif
4284
4285 typedef struct _TT_HITTESTINFO {
4286   HWND hwnd;
4287   POINT pt;
4288   TOOLINFO ti;
4289 } TTHITTESTINFO,   * LPHITTESTINFO;
4290
4291 typedef struct tagTTPOLYCURVE {
4292   WORD    wType;
4293   WORD    cpfx;
4294   POINTFX apfx[1];
4295 } TTPOLYCURVE,  * LPTTPOLYCURVE;
4296
4297 typedef struct _TTPOLYGONHEADER {
4298   DWORD   cb;
4299   DWORD   dwType;
4300   POINTFX pfxStart;
4301 } TTPOLYGONHEADER,  * LPTTPOLYGONHEADER;
4302
4303 typedef struct _TV_DISPINFO {
4304   NMHDR   hdr;
4305   TV_ITEM item;
4306 } TV_DISPINFO;
4307
4308 typedef struct _TVHITTESTINFO {
4309   POINT     pt;
4310   UINT      flags;
4311   HTREEITEM hItem;
4312 } TV_HITTESTINFO,   *LPTV_HITTESTINFO;
4313
4314 typedef struct _TV_INSERTSTRUCT {
4315   HTREEITEM hParent;
4316   HTREEITEM hInsertAfter;
4317   TV_ITEM   item;
4318 } TV_INSERTSTRUCT,   *LPTV_INSERTSTRUCT;
4319
4320 typedef struct _TV_KEYDOWN {
4321   NMHDR hdr;
4322   WORD  wVKey;
4323   UINT  flags;
4324 } TV_KEYDOWN;
4325
4326 typedef struct _TV_SORTCB {
4327   HTREEITEM    hParent;
4328   PFNTVCOMPARE lpfnCompare;
4329   LPARAM       lParam;
4330 } TV_SORTCB,   *LPTV_SORTCB;
4331
4332 typedef struct {
4333   UINT nSec;
4334   UINT nInc;
4335 } UDACCEL;
4336
4337 typedef struct _UNIVERSAL_NAME_INFO {
4338   LPTSTR  lpUniversalName;
4339 } UNIVERSAL_NAME_INFO;
4340
4341 typedef struct tagUSEROBJECTFLAGS {
4342   WINBOOL fInherit;
4343   WINBOOL fReserved;
4344   DWORD dwFlags;
4345 } USEROBJECTFLAGS;
4346
4347 typedef struct _VERIFY_INFORMATION {
4348   LARGE_INTEGER  StartingOffset;
4349   DWORD  Length;
4350 } VERIFY_INFORMATION ;
4351
4352 typedef struct _VS_FIXEDFILEINFO {
4353   DWORD dwSignature;
4354   DWORD dwStrucVersion;
4355   DWORD dwFileVersionMS;
4356   DWORD dwFileVersionLS;
4357   DWORD dwProductVersionMS;
4358   DWORD dwProductVersionLS;
4359   DWORD dwFileFlagsMask;
4360   DWORD dwFileFlags;
4361   DWORD dwFileOS;
4362   DWORD dwFileType;
4363   DWORD dwFileSubtype;
4364   DWORD dwFileDateMS;
4365   DWORD dwFileDateLS;
4366 } VS_FIXEDFILEINFO;
4367
4368 typedef struct _WIN32_FIND_DATAA {
4369   DWORD    dwFileAttributes;
4370   FILETIME ftCreationTime;
4371   FILETIME ftLastAccessTime;
4372   FILETIME ftLastWriteTime;
4373   DWORD    nFileSizeHigh;
4374   DWORD    nFileSizeLow;
4375   DWORD    dwReserved0;
4376   DWORD    dwReserved1;
4377   CHAR     cFileName[ MAX_PATH ];
4378   CHAR     cAlternateFileName[ 14 ];
4379 } WIN32_FIND_DATAA, *LPWIN32_FIND_DATAA, *PWIN32_FIND_DATAA;
4380
4381 typedef struct _WIN32_FIND_DATAW {
4382   DWORD dwFileAttributes;
4383   FILETIME ftCreationTime;
4384   FILETIME ftLastAccessTime;
4385   FILETIME ftLastWriteTime;
4386   DWORD    nFileSizeHigh;
4387   DWORD    nFileSizeLow;
4388   DWORD    dwReserved0;
4389   DWORD    dwReserved1;
4390   WCHAR    cFileName[ MAX_PATH ];
4391   WCHAR    cAlternateFileName[ 14 ];
4392 } WIN32_FIND_DATAW, *LPWIN32_FIND_DATAW, *PWIN32_FIND_DATAW;
4393
4394 #ifdef UNICODE
4395 #define WIN32_FIND_DATA WIN32_FIND_DATAW
4396 #define PWIN32_FIND_DATA PWIN32_FIND_DATAW
4397 #define LPWIN32_FIND_DATA LPWIN32_FIND_DATAW
4398 #else
4399 #define WIN32_FIND_DATA WIN32_FIND_DATAA
4400 #define PWIN32_FIND_DATA PWIN32_FIND_DATAA
4401 #define LPWIN32_FIND_DATA LPWIN32_FIND_DATAA
4402 #endif
4403
4404 typedef struct _WIN32_STREAM_ID {
4405   DWORD dwStreamId;
4406   DWORD dwStreamAttributes;
4407   LARGE_INTEGER Size;
4408   DWORD dwStreamNameSize;
4409   WCHAR *cStreamName;
4410 } WIN32_STREAM_ID;
4411
4412 typedef struct _WINDOWPLACEMENT {
4413   UINT  length;
4414   UINT  flags;
4415   UINT  showCmd;
4416   POINT ptMinPosition;
4417   POINT ptMaxPosition;
4418   RECT  rcNormalPosition;
4419 } WINDOWPLACEMENT;
4420
4421 typedef struct _WNDCLASS {
4422   UINT    style;
4423   WNDPROC lpfnWndProc;
4424   int     cbClsExtra;
4425   int     cbWndExtra;
4426   HANDLE  hInstance;
4427   HICON   hIcon;
4428   HCURSOR hCursor;
4429   HBRUSH  hbrBackground;
4430   LPCTSTR lpszMenuName;
4431   LPCTSTR lpszClassName;
4432 } WNDCLASS, *LPWNDCLASS;
4433
4434 typedef struct _WNDCLASSEX {
4435   UINT    cbSize;
4436   UINT    style;
4437   WNDPROC lpfnWndProc;
4438   int     cbClsExtra;
4439   int     cbWndExtra;
4440   HANDLE  hInstance;
4441   HICON   hIcon;
4442   HCURSOR hCursor;
4443   HBRUSH  hbrBackground;
4444   LPCTSTR lpszMenuName;
4445   LPCTSTR lpszClassName;
4446   HICON   hIconSm;
4447 } WNDCLASSEX, *LPWNDCLASSEX;
4448
4449 typedef struct _CONNECTDLGSTRUCT {
4450   DWORD cbStructure;
4451   HWND hwndOwner;
4452   LPNETRESOURCE lpConnRes;
4453   DWORD dwFlags;
4454   DWORD dwDevNum;
4455 } CONNECTDLGSTRUCT, *LPCONNECTDLGSTRUCT;
4456
4457 typedef struct _DISCDLGSTRUCT {
4458   DWORD           cbStructure;
4459   HWND            hwndOwner;
4460   LPTSTR           lpLocalName;
4461   LPTSTR           lpRemoteName;
4462   DWORD           dwFlags;
4463 } DISCDLGSTRUCT, *LPDISCDLGSTRUCT;
4464
4465 typedef struct _NETINFOSTRUCT{
4466     DWORD cbStructure;
4467     DWORD dwProviderVersion;
4468     DWORD dwStatus;
4469     DWORD dwCharacteristics;
4470     DWORD dwHandle;
4471     WORD  wNetType;
4472     DWORD dwPrinters;
4473     DWORD dwDrives;
4474 } NETINFOSTRUCT, *LPNETINFOSTRUCT;
4475
4476 typedef struct _NETCONNECTINFOSTRUCT{
4477   DWORD cbStructure;
4478   DWORD dwFlags;
4479   DWORD dwSpeed;
4480   DWORD dwDelay;
4481   DWORD dwOptDataSize;
4482 } NETCONNECTINFOSTRUCT, *LPNETCONNECTINFOSTRUCT;
4483
4484 typedef int CALLBACK (*ENUMMETAFILEPROC) (HDC, HANDLETABLE,
4485                                           METARECORD, int, LPARAM);
4486 typedef int CALLBACK (*ENHMETAFILEPROC) (HDC, HANDLETABLE,
4487                                          ENHMETARECORD, int, LPARAM);
4488
4489 typedef int CALLBACK (*ENUMFONTSPROCA) (LPLOGFONTA, LPTEXTMETRICA, DWORD, LPARAM);
4490 typedef int CALLBACK (*ENUMFONTSPROCW) (LPLOGFONTW, LPTEXTMETRICW, DWORD, LPARAM);
4491 #ifdef UNICODE
4492 typedef ENUMFONTSPROCW ENUMFONTSPROC;
4493 #else
4494 typedef ENUMFONTSPROCA ENUMFONTSPROC;
4495 #endif
4496 typedef int CALLBACK (*FONTENUMPROCA) (ENUMLOGFONTA *, NEWTEXTMETRICA *,
4497                                        int, LPARAM);
4498 typedef int CALLBACK (*FONTENUMPROCW) (ENUMLOGFONTW *, NEWTEXTMETRICW *,
4499                                        int, LPARAM);
4500 #ifdef UNICODE
4501 typedef FONTENUMPROCW FONTENUMPROC;
4502 #else
4503 typedef FONTENUMPROCA FONTENUMPROC;
4504 #endif
4505 typedef int CALLBACK (*FONTENUMEXPROCA) (ENUMLOGFONTEXA *, NEWTEXTMETRICEXA *,
4506                                          int, LPARAM);
4507 typedef int CALLBACK (*FONTENUMEXPROCW) (ENUMLOGFONTEXW *, NEWTEXTMETRICEXW *,
4508                                          int, LPARAM);
4509 #ifdef UNICODE
4510 typedef FONTENUMEXPROCW FONTENUMEXPROC;
4511 #else
4512 typedef FONTENUMEXPROCA FONTENUMEXPROC;
4513 #endif
4514
4515 typedef VOID CALLBACK (*LPOVERLAPPED_COMPLETION_ROUTINE) (DWORD, DWORD,
4516                                                           LPOVERLAPPED);
4517
4518 /*
4519   Structures for the extensions to OpenGL
4520   */
4521 typedef struct _POINTFLOAT
4522 {
4523   FLOAT   x;
4524   FLOAT   y;
4525 } POINTFLOAT, *PPOINTFLOAT;
4526
4527 typedef struct _GLYPHMETRICSFLOAT
4528 {
4529   FLOAT       gmfBlackBoxX;
4530   FLOAT       gmfBlackBoxY;
4531   POINTFLOAT  gmfptGlyphOrigin;
4532   FLOAT       gmfCellIncX;
4533   FLOAT       gmfCellIncY;
4534 } GLYPHMETRICSFLOAT, *PGLYPHMETRICSFLOAT, *LPGLYPHMETRICSFLOAT;
4535
4536 typedef struct tagLAYERPLANEDESCRIPTOR
4537 {
4538   WORD  nSize;
4539   WORD  nVersion;
4540   DWORD dwFlags;
4541   BYTE  iPixelType;
4542   BYTE  cColorBits;
4543   BYTE  cRedBits;
4544   BYTE  cRedShift;
4545   BYTE  cGreenBits;
4546   BYTE  cGreenShift;
4547   BYTE  cBlueBits;
4548   BYTE  cBlueShift;
4549   BYTE  cAlphaBits;
4550   BYTE  cAlphaShift;
4551   BYTE  cAccumBits;
4552   BYTE  cAccumRedBits;
4553   BYTE  cAccumGreenBits;
4554   BYTE  cAccumBlueBits;
4555   BYTE  cAccumAlphaBits;
4556   BYTE  cDepthBits;
4557   BYTE  cStencilBits;
4558   BYTE  cAuxBuffers;
4559   BYTE  iLayerPlane;
4560   BYTE  bReserved;
4561   COLORREF crTransparent;
4562 } LAYERPLANEDESCRIPTOR, *PLAYERPLANEDESCRIPTOR, *LPLAYERPLANEDESCRIPTOR;
4563
4564 typedef struct tagPIXELFORMATDESCRIPTOR
4565 {
4566   WORD  nSize;
4567   WORD  nVersion;
4568   DWORD dwFlags;
4569   BYTE  iPixelType;
4570   BYTE  cColorBits;
4571   BYTE  cRedBits;
4572   BYTE  cRedShift;
4573   BYTE  cGreenBits;
4574   BYTE  cGreenShift;
4575   BYTE  cBlueBits;
4576   BYTE  cBlueShift;
4577   BYTE  cAlphaBits;
4578   BYTE  cAlphaShift;
4579   BYTE  cAccumBits;
4580   BYTE  cAccumRedBits;
4581   BYTE  cAccumGreenBits;
4582   BYTE  cAccumBlueBits;
4583   BYTE  cAccumAlphaBits;
4584   BYTE  cDepthBits;
4585   BYTE  cStencilBits;
4586   BYTE  cAuxBuffers;
4587   BYTE  iLayerType;
4588   BYTE  bReserved;
4589   DWORD dwLayerMask;
4590   DWORD dwVisibleMask;
4591   DWORD dwDamageMask;
4592 } PIXELFORMATDESCRIPTOR, *PPIXELFORMATDESCRIPTOR, *LPPIXELFORMATDESCRIPTOR;
4593
4594 typedef struct
4595 {
4596   LPWSTR    usri2_name;
4597   LPWSTR    usri2_password;
4598   DWORD     usri2_password_age;
4599   DWORD     usri2_priv;
4600   LPWSTR    usri2_home_dir;
4601   LPWSTR    usri2_comment;
4602   DWORD     usri2_flags;
4603   LPWSTR    usri2_script_path;
4604   DWORD     usri2_auth_flags;
4605   LPWSTR    usri2_full_name;
4606   LPWSTR    usri2_usr_comment;
4607   LPWSTR    usri2_parms;
4608   LPWSTR    usri2_workstations;
4609   DWORD     usri2_last_logon;
4610   DWORD     usri2_last_logoff;
4611   DWORD     usri2_acct_expires;
4612   DWORD     usri2_max_storage;
4613   DWORD     usri2_units_per_week;
4614   PBYTE     usri2_logon_hours;
4615   DWORD     usri2_bad_pw_count;
4616   DWORD     usri2_num_logons;
4617   LPWSTR    usri2_logon_server;
4618   DWORD     usri2_country_code;
4619   DWORD     usri2_code_page;
4620 } USER_INFO_2, *PUSER_INFO_2, *LPUSER_INFO_2;
4621
4622 typedef struct
4623 {
4624   LPWSTR    usri0_name;
4625 } USER_INFO_0, *PUSER_INFO_0, *LPUSER_INFO_0;
4626
4627 typedef struct
4628 {
4629   LPWSTR    usri3_name;
4630   LPWSTR    usri3_password;
4631   DWORD     usri3_password_age;
4632   DWORD     usri3_priv;
4633   LPWSTR    usri3_home_dir;
4634   LPWSTR    usri3_comment;
4635   DWORD     usri3_flags;
4636   LPWSTR    usri3_script_path;
4637   DWORD     usri3_auth_flags;
4638   LPWSTR    usri3_full_name;
4639   LPWSTR    usri3_usr_comment;
4640   LPWSTR    usri3_parms;
4641   LPWSTR    usri3_workstations;
4642   DWORD     usri3_last_logon;
4643   DWORD     usri3_last_logoff;
4644   DWORD     usri3_acct_expires;
4645   DWORD     usri3_max_storage;
4646   DWORD     usri3_units_per_week;
4647   PBYTE     usri3_logon_hours;
4648   DWORD     usri3_bad_pw_count;
4649   DWORD     usri3_num_logons;
4650   LPWSTR    usri3_logon_server;
4651   DWORD     usri3_country_code;
4652   DWORD     usri3_code_page;
4653   DWORD     usri3_user_id;
4654   DWORD     usri3_primary_group_id;
4655   LPWSTR    usri3_profile;
4656   LPWSTR    usri3_home_dir_drive;
4657   DWORD     usri3_password_expired;
4658 } USER_INFO_3, *PUSER_INFO_3, *LPUSER_INFO_3;
4659
4660 typedef struct
4661 {
4662   LPWSTR   grpi2_name;
4663   LPWSTR   grpi2_comment;
4664   DWORD    grpi2_group_id;
4665   DWORD    grpi2_attributes;
4666 } GROUP_INFO_2, *PGROUP_INFO_2;
4667
4668 typedef struct
4669 {
4670   LPWSTR   lgrpi0_name;
4671 } LOCALGROUP_INFO_0, *PLOCALGROUP_INFO_0, *LPLOCALGROUP_INFO_0;
4672
4673 /* PE executable header.  */
4674 /* Windows.h now includes pe.h to avoid conflicts! */
4675
4676 typedef struct _DISPLAY_DEVICE {
4677   DWORD cb;
4678   WCHAR DeviceName[32];
4679   WCHAR DeviceString[128];
4680   DWORD StateFlags;
4681   WCHAR DeviceID[128];
4682   WCHAR DeviceKey[128];
4683 } DISPLAY_DEVICE, *PDISPLAY_DEVICE;
4684
4685 typedef HANDLE HMONITOR;
4686 typedef HANDLE HDEVNOTIFY;
4687
4688 typedef BOOL CALLBACK (*MonitorEnumProc)(
4689   HMONITOR hMonitor,
4690   HDC hdcMonitor,
4691   LPRECT lprcMonitor,
4692   LPARAM dwData);
4693
4694 typedef MonitorEnumProc MONITORENUMPROC;
4695
4696 typedef struct {
4697   UINT  cbSize;
4698   HWND  hwnd;
4699   DWORD dwFlags;
4700   UINT  uCount;
4701   DWORD dwTimeout;
4702 } FLASHWINFO, *PFLASHWINFO;
4703
4704 typedef struct tagALTTABINFO {
4705   DWORD cbSize;
4706   int   cItems;
4707   int   cColumns;
4708   int   cRows;
4709   int   iColFocus;
4710   int   iRowFocus;
4711   int   cxItem;
4712   int   cyItem;
4713   POINT ptStart;
4714 } ALTTABINFO, *PALTTABINFO, *LPALTTABINFO;
4715
4716 typedef struct tagCOMBOBOXINFO {
4717   DWORD cbSize;
4718   RECT  rcItem;
4719   RECT  rcButton;
4720   DWORD stateButton;
4721   HWND  hwndCombo;
4722   HWND  hwndItem;
4723   HWND  hwndList;
4724 } COMBOBOXINFO, *PCOMBOBOXINFO, *LPCOMBOBOXINFO;
4725
4726 typedef struct tagCURSORINFO {
4727   DWORD   cbSize;
4728   DWORD   flags;
4729   HCURSOR hCursor;
4730   POINT   ptScreenPos;
4731 } CURSORINFO, *PCURSORINFO, *LPCURSORINFO;
4732
4733 typedef struct tagGUITHREADINFO {
4734   DWORD   cbSize;
4735   DWORD   flags;
4736   HWND    hwndActive;
4737   HWND    hwndFocus;
4738   HWND    hwndCapture;
4739   HWND    hwndMenuOwner;
4740   HWND    hwndMoveSize;
4741   HWND    hwndCaret;
4742   RECT    rcCaret;
4743 } GUITHREADINFO, *PGUITHREADINFO, *LPGUITHREADINFO;
4744
4745 typedef struct tagLASTINPUTINFO {
4746   UINT cbSize;
4747   DWORD dwTime;
4748 } LASTINPUTINFO, *PLASTINPUTINFO;
4749
4750 typedef struct tagMENUBARINFO {
4751   DWORD cbSize;
4752   RECT  rcBar;
4753   HMENU hMenu;
4754   HWND  hwndMenu;
4755   BOOL  fBarFocused:1;
4756   BOOL  fFocused:1;
4757 } MENUBARINFO, *PMENUBARINFO;
4758
4759 typedef struct tagMENUINFO {
4760   DWORD   cbSize;
4761   DWORD   fMask;
4762   DWORD   dwStyle;
4763   UINT    cyMax;
4764   HBRUSH  hbrBack;
4765   DWORD   dwContextHelpID;
4766   ULONG_PTR  dwMenuData;
4767 } MENUINFO, FAR *LPMENUINFO;
4768 typedef MENUINFO CONST FAR *LPCMENUINFO;
4769
4770 typedef struct tagMONITORINFO {
4771   DWORD cbSize;
4772   RECT rcMonitor;
4773   RECT rcWork;
4774   DWORD dwFlags;
4775 } MONITORINFO, *LPMONITORINFO;
4776
4777 typedef struct tagMOUSEMOVEPOINT {
4778   int       x;
4779   int       y;
4780   DWORD     time;
4781   ULONG_PTR dwExtraInfo;
4782 } MOUSEMOVEPOINT, *PMOUSEMOVEPOINT, *LPMOUSEMOVEPOINT;
4783
4784 #define CCHILDREN_SCROLLBAR 5
4785
4786 typedef struct tagSCROLLBARINFO {
4787   DWORD cbSize;
4788   RECT  rcScrollBar;
4789   int   dxyLineButton;
4790   int   xyThumbTop;
4791   int   xyThumbBottom;
4792   int   reserved;
4793   DWORD rgstate[CCHILDREN_SCROLLBAR+1];
4794 } SCROLLBARINFO, *PSCROLLBARINFO, *LPSCROLLBARINFO;
4795
4796 #define CCHILDREN_TITLEBAR 5
4797
4798 typedef struct tagTITLEBARINFO {
4799   DWORD cbSize;
4800   RECT  rcTitleBar;
4801   DWORD rgstate[CCHILDREN_TITLEBAR+1];
4802 } TITLEBARINFO, *PTITLEBARINFO, *LPTITLEBARINFO;
4803
4804 typedef struct {
4805   HWND hwnd;
4806   LPCTSTR szWindowName;
4807   UINT32 fToBeClosed;
4808   UINT32 fToBeTerminated;
4809 } WINDOWINFO, *PWINDOWINFO, *LPWINDOWINFO;
4810
4811 typedef struct tagMOUSEINPUT {
4812   LONG    dx;
4813   LONG    dy;
4814   DWORD   mouseData;
4815   DWORD   dwFlags;
4816   DWORD   time;
4817   ULONG_PTR   dwExtraInfo;
4818 } MOUSEINPUT, *PMOUSEINPUT;
4819
4820 typedef struct tagKEYBDINPUT {
4821   WORD      wVk;
4822   WORD      wScan;
4823   DWORD     dwFlags;
4824   DWORD     time;
4825   ULONG_PTR dwExtraInfo;
4826 } KEYBDINPUT, *PKEYBDINPUT;
4827
4828 typedef struct tagHARDWAREINPUT {
4829   DWORD   uMsg;
4830   WORD    wParamL;
4831   WORD    wParamH;
4832 } HARDWAREINPUT, *PHARDWAREINPUT;
4833
4834 typedef struct tagINPUT {
4835   DWORD type;
4836   union
4837   {
4838     MOUSEINPUT mi;
4839     KEYBDINPUT ki;
4840     HARDWAREINPUT hi;
4841   } u;
4842 } INPUT, *PINPUT, FAR* LPINPUT;
4843
4844 typedef struct tagTRACKMOUSEEVENT {
4845   DWORD cbSize;
4846   DWORD dwFlags;
4847   HWND  hwndTrack;
4848   DWORD dwHoverTime;
4849 } TRACKMOUSEEVENT, *LPTRACKMOUSEEVENT;
4850
4851 typedef struct _BLENDFUNCTION {
4852   BYTE     BlendOp;
4853   BYTE     BlendFlags;
4854   BYTE     SourceConstantAlpha;
4855   BYTE     AlphaFormat;
4856 }BLENDFUNCTION, *PBLENDFUNCTION, *LPBLENDFUNCTION;
4857
4858 typedef enum _GET_FILEEX_INFO_LEVELS {
4859     GetFileExInfoStandard
4860 } GET_FILEEX_INFO_LEVELS;
4861
4862 typedef struct _WIN32_FILE_ATTRIBUTES_DATA {
4863     DWORD    dwFileAttributes;
4864     FILETIME ftCreationTime;
4865     FILETIME ftLastAccessTime;
4866     FILETIME ftLastWriteTime;
4867     DWORD    nFileSizeHigh;
4868     DWORD    nFileSizeLow;
4869 } WIN32_FILE_ATTRIBUTE_DATA, *LPWIN32_FILE_ATTRIBUTE_DATA;
4870
4871 #ifdef __cplusplus
4872 }
4873 #endif /* __cplusplus */
4874
4875 #endif /* WIN32_LEAN_AND_MEAN */
4876
4877 #endif /* _GNU_H_WINDOWS32_STRUCTURES */
4878
4879