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