1{
2    This file is part of the Free Pascal run time library.
3    This unit contains the record definition for the Win32 API
4    Copyright (c) 1999-2000 by Florian KLaempfl,
5    member of the Free Pascal development team.
6
7    See the file COPYING.FPC, included in this distribution,
8    for details about the copyright.
9
10    This program is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13
14 **********************************************************************}
15
16{
17  Structures.h
18
19  Declarations for all the Windows32 API Structures
20
21  Copyright (C) 1996 Free Software Foundation, Inc.
22
23  Author:  Scott Christley <scottc@net-community.com>
24  Date: 1996
25
26  This file is part of the Windows32 API Library.
27
28  This library is free software; you can redistribute it and/or
29  modify it under the terms of the GNU Library General Public
30  License as published by the Free Software Foundation; either
31  version 2 of the License, or (at your option) any later version.
32
33  This library is distributed in the hope that it will be useful,
34  but WITHOUT ANY WARRANTY; without even the implied warranty of
35  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
36  Library General Public License for more details.
37
38  If you are interested in a warranty or support for this source code,
39  contact Scott Christley <scottc@net-community.com> for more information.
40
41  You should have received a copy of the GNU Library General Public
42  License along with this library; see the file COPYING.LIB.
43  If not, write to the Free Software Foundation,
44  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
45}
46
47{$ifdef read_interface}
48
49Const
50  IMAGE_SIZEOF_SHORT_NAME = 8;
51
52  type
53  {$I typshrdh.inc}
54
55    { WARNING
56      the variable argument list
57      is not implemented for FPC
58      va_list is just a dummy record
59      MvdV: Nevertheless it should be a pointer type, not a record}
60
61     va_list = pchar;
62
63     ABC = record
64          abcA : longint;
65          abcB : UINT;
66          abcC : longint;
67       end;
68     LPABC = ^ABC;
69     _ABC = ABC;
70     TABC = ABC;
71     PABC = ^ABC;
72
73     ABCFLOAT = record
74          abcfA : Single;
75          abcfB : Single;
76          abcfC : Single;
77       end;
78     LPABCFLOAT = ^ABCFLOAT;
79     _ABCFLOAT = ABCFLOAT;
80     TABCFLOAT = ABCFLOAT;
81     PABCFLOAT = ^ABCFLOAT;
82
83     ACCEL = record
84          fVirt : BYTE;
85          key : WORD;
86          cmd : WORD;
87       end;
88     LPACCEL = ^ACCEL;
89     _ACCEL = ACCEL;
90     TACCEL = ACCEL;
91     PACCEL = ^ACCEL;
92
93     ACE_HEADER = record
94          AceType : BYTE;
95          AceFlags : BYTE;
96          AceSize : WORD;
97       end;
98     _ACE_HEADER = ACE_HEADER;
99     TACE_HEADER = ACE_HEADER;
100     PACE_HEADER = ^ACE_HEADER;
101
102     ACCESS_MASK = DWORD;
103
104     REGSAM = ACCESS_MASK;
105
106     ACCESS_ALLOWED_ACE = record
107          Header : ACE_HEADER;
108          Mask : ACCESS_MASK;
109          SidStart : DWORD;
110       end;
111     _ACCESS_ALLOWED_ACE = ACCESS_ALLOWED_ACE;
112     TACCESS_ALLOWED_ACE = ACCESS_ALLOWED_ACE;
113     PACCESS_ALLOWED_ACE = ^ACCESS_ALLOWED_ACE;
114
115     ACCESS_DENIED_ACE = record
116          Header : ACE_HEADER;
117          Mask : ACCESS_MASK;
118          SidStart : DWORD;
119       end;
120     _ACCESS_DENIED_ACE = ACCESS_DENIED_ACE;
121     TACCESS_DENIED_ACE = ACCESS_DENIED_ACE;
122
123     ACCESSTIMEOUT = record
124          cbSize : UINT;
125          dwFlags : DWORD;
126          iTimeOutMSec : DWORD;
127       end;
128     _ACCESSTIMEOUT = ACCESSTIMEOUT;
129     TACCESSTIMEOUT = ACCESSTIMEOUT;
130     PACCESSTIMEOUT = ^ACCESSTIMEOUT;
131
132     ACL = record
133          AclRevision : BYTE;
134          Sbz1 : BYTE;
135          AclSize : WORD;
136          AceCount : WORD;
137          Sbz2 : WORD;
138       end;
139     PACL = ^ACL;
140     _ACL = ACL;
141     TACL = ACL;
142
143     ACL_REVISION_INFORMATION = record
144          AclRevision : DWORD;
145       end;
146     _ACL_REVISION_INFORMATION = ACL_REVISION_INFORMATION;
147     TACLREVISIONINFORMATION = ACL_REVISION_INFORMATION;
148     PACLREVISIONINFORMATION = ^ACL_REVISION_INFORMATION;
149
150     ACL_SIZE_INFORMATION = record
151          AceCount : DWORD;
152          AclBytesInUse : DWORD;
153          AclBytesFree : DWORD;
154       end;
155     _ACL_SIZE_INFORMATION = ACL_SIZE_INFORMATION;
156     TACLSIZEINFORMATION = ACL_SIZE_INFORMATION;
157     PACLSIZEINFORMATION = ^ACL_SIZE_INFORMATION;
158
159     ACTION_HEADER = record
160          transport_id : ULONG;
161          action_code : USHORT;
162          reserved : USHORT;
163       end;
164     _ACTION_HEADER = ACTION_HEADER;
165     TACTIONHEADER = ACTION_HEADER;
166     PACTIONHEADER = ^ACTION_HEADER;
167
168     ADAPTER_STATUS = record
169          adapter_address : array[0..5] of UCHAR;
170          rev_major : UCHAR;
171          reserved0 : UCHAR;
172          adapter_type : UCHAR;
173          rev_minor : UCHAR;
174          duration : WORD;
175          frmr_recv : WORD;
176          frmr_xmit : WORD;
177          iframe_recv_err : WORD;
178          xmit_aborts : WORD;
179          xmit_success : DWORD;
180          recv_success : DWORD;
181          iframe_xmit_err : WORD;
182          recv_buff_unavail : WORD;
183          t1_timeouts : WORD;
184          ti_timeouts : WORD;
185          reserved1 : DWORD;
186          free_ncbs : WORD;
187          max_cfg_ncbs : WORD;
188          max_ncbs : WORD;
189          xmit_buf_unavail : WORD;
190          max_dgram_size : WORD;
191          pending_sess : WORD;
192          max_cfg_sess : WORD;
193          max_sess : WORD;
194          max_sess_pkt_size : WORD;
195          name_count : WORD;
196       end;
197     _ADAPTER_STATUS = ADAPTER_STATUS;
198     TADAPTERSTATUS = ADAPTER_STATUS;
199     PADAPTERSTATUS = ^ADAPTER_STATUS;
200
201     ADDJOB_INFO_1 = record
202          Path : LPTSTR;
203          JobId : DWORD;
204       end;
205     _ADDJOB_INFO_1 = ADDJOB_INFO_1;
206     TADDJOB_INFO_1 = ADDJOB_INFO_1;
207     PADDJOB_INFO_1 = ^ADDJOB_INFO_1;
208
209     ANIMATIONINFO = record
210          cbSize : UINT;
211          iMinAnimate : longint;
212       end;
213     LPANIMATIONINFO = ^ANIMATIONINFO;
214     _ANIMATIONINFO = ANIMATIONINFO;
215     TANIMATIONINFO = ANIMATIONINFO;
216     PANIMATIONINFO = ^ANIMATIONINFO;
217
218     POINT = TPOINT;
219     LPPOINT = PPOINT;
220     tagPOINT = TPOINT;
221
222
223     RECT = TRect;
224     LPRECT = PRECT;
225     _RECT = RECT;
226
227     RECTL = record
228          left : LONG;
229          top : LONG;
230          right : LONG;
231          bottom : LONG;
232       end;
233     _RECTL = RECTL;
234     TRECTL = RECTL;
235     PRECTL = ^RECTL;
236
237     APPBARDATA = record
238          cbSize : DWORD;
239          hWnd : HWND;
240          uCallbackMessage : UINT;
241          uEdge : UINT;
242          rc : RECT;
243          lParam : LPARAM;
244       end;
245     _AppBarData = APPBARDATA;
246     TAppBarData = APPBARDATA;
247     PAppBarData = ^APPBARDATA;
248
249     BITMAP = record
250          bmType : LONG;
251          bmWidth : LONG;
252          bmHeight : LONG;
253          bmWidthBytes : LONG;
254          bmPlanes : WORD;
255          bmBitsPixel : WORD;
256          bmBits : LPVOID;
257       end;
258     PBITMAP = ^BITMAP;
259     NPBITMAP = ^BITMAP;
260     LPBITMAP = ^BITMAP;
261     tagBITMAP = BITMAP;
262     TBITMAP = BITMAP;
263
264     BITMAPCOREHEADER = record
265          bcSize : DWORD;
266          bcWidth : WORD;
267          bcHeight : WORD;
268          bcPlanes : WORD;
269          bcBitCount : WORD;
270       end;
271     tagBITMAPCOREHEADER = BITMAPCOREHEADER;
272     TBITMAPCOREHEADER = BITMAPCOREHEADER;
273     PBITMAPCOREHEADER = ^BITMAPCOREHEADER;
274
275     RGBTRIPLE = record
276          rgbtBlue : BYTE;
277          rgbtGreen : BYTE;
278          rgbtRed : BYTE;
279       end;
280     tagRGBTRIPLE = RGBTRIPLE;
281     TRGBTRIPLE = RGBTRIPLE;
282     PRGBTRIPLE = ^RGBTRIPLE;
283
284     BITMAPCOREINFO = record
285          bmciHeader : BITMAPCOREHEADER;
286          bmciColors : array[0..0] of RGBTRIPLE;
287       end;
288     PBITMAPCOREINFO = ^BITMAPCOREINFO;
289     LPBITMAPCOREINFO = ^BITMAPCOREINFO;
290     _BITMAPCOREINFO = BITMAPCOREINFO;
291     TBITMAPCOREINFO = BITMAPCOREINFO;
292
293(* error
294  WORD    bfReserved1;
295  WORD    bfReserved2;
296 in declarator_list *)
297
298     BITMAPINFOHEADER = record
299          biSize : DWORD;
300          biWidth : LONG;
301          biHeight : LONG;
302          biPlanes : WORD;
303          biBitCount : WORD;
304          biCompression : DWORD;
305          biSizeImage : DWORD;
306          biXPelsPerMeter : LONG;
307          biYPelsPerMeter : LONG;
308          biClrUsed : DWORD;
309          biClrImportant : DWORD;
310       end;
311     LPBITMAPINFOHEADER = ^BITMAPINFOHEADER;
312     TBITMAPINFOHEADER = BITMAPINFOHEADER;
313     PBITMAPINFOHEADER = ^BITMAPINFOHEADER;
314
315     RGBQUAD = record
316          rgbBlue : BYTE;
317          rgbGreen : BYTE;
318          rgbRed : BYTE;
319          rgbReserved : BYTE;
320       end;
321     tagRGBQUAD = RGBQUAD;
322     TRGBQUAD = RGBQUAD;
323     PRGBQUAD = ^RGBQUAD;
324
325     BITMAPINFO = record
326          bmiHeader : BITMAPINFOHEADER;
327          bmiColors : array[0..0] of RGBQUAD;
328       end;
329     LPBITMAPINFO = ^BITMAPINFO;
330     PBITMAPINFO = ^BITMAPINFO;
331     TBITMAPINFO = BITMAPINFO;
332
333     FXPT2DOT30   = longint;
334     LPFXPT2DOT30 = ^FXPT2DOT30;
335     TFXPT2DOT30  = FXPT2DOT30;
336     PFXPT2DOT30  = LPFXPT2DOT30;
337
338     CIEXYZ = record
339          ciexyzX : FXPT2DOT30;
340          ciexyzY : FXPT2DOT30;
341          ciexyzZ : FXPT2DOT30;
342       end;
343     tagCIEXYZ = CIEXYZ;
344     LPCIEXYZ = ^CIEXYZ;
345     TPCIEXYZ = CIEXYZ;
346     PCIEXYZ = ^CIEXYZ;
347
348     CIEXYZTRIPLE = record
349          ciexyzRed : CIEXYZ;
350          ciexyzGreen : CIEXYZ;
351          ciexyzBlue : CIEXYZ;
352       end;
353     tagCIEXYZTRIPLE = CIEXYZTRIPLE;
354     LPCIEXYZTRIPLE = ^CIEXYZTRIPLE;
355     TCIEXYZTRIPLE = CIEXYZTRIPLE;
356     PCIEXYZTRIPLE = ^CIEXYZTRIPLE;
357
358     BITMAPV4HEADER = record
359          bV4Size : DWORD;
360          bV4Width : LONG;
361          bV4Height : LONG;
362          bV4Planes : WORD;
363          bV4BitCount : WORD;
364          bV4V4Compression : DWORD;
365          bV4SizeImage : DWORD;
366          bV4XPelsPerMeter : LONG;
367          bV4YPelsPerMeter : LONG;
368          bV4ClrUsed : DWORD;
369          bV4ClrImportant : DWORD;
370          bV4RedMask : DWORD;
371          bV4GreenMask : DWORD;
372          bV4BlueMask : DWORD;
373          bV4AlphaMask : DWORD;
374          bV4CSType : DWORD;
375          bV4Endpoints : CIEXYZTRIPLE;
376          bV4GammaRed : DWORD;
377          bV4GammaGreen : DWORD;
378          bV4GammaBlue : DWORD;
379       end;
380     LPBITMAPV4HEADER = ^BITMAPV4HEADER;
381     TBITMAPV4HEADER = BITMAPV4HEADER;
382     PBITMAPV4HEADER = ^BITMAPV4HEADER;
383
384     BITMAPFILEHEADER = packed record
385       bfType : Word;
386       bfSize : DWord;
387       bfReserved1 : Word;
388       bfReserved2 : Word;
389       bfOffBits : DWord;
390     end;
391     tagBITMAPFILEHEADER = BITMAPFILEHEADER;
392
393     TBitmapFileHeader = BITMAPFILEHEADER;
394     PBitmapFileHeader = ^TBitmapFileHeader;
395
396     BLOB = record
397          cbSize : ULONG;
398          pBlobData : ^BYTE;
399       end;
400     _BLOB = BLOB;
401     TBLOB = BLOB;
402     PBLOB = ^BLOB;
403
404     SHITEMID = record
405          cb : USHORT;
406          abID : array[0..0] of BYTE;
407       end;
408     LPSHITEMID = ^SHITEMID;
409     LPCSHITEMID = ^SHITEMID;
410     _SHITEMID = SHITEMID;
411     TSHITEMID = SHITEMID;
412     PSHITEMID = ^SHITEMID;
413
414     ITEMIDLIST = record
415          mkid : SHITEMID;
416       end;
417     LPITEMIDLIST = ^ITEMIDLIST;
418     LPCITEMIDLIST = ^ITEMIDLIST;
419     _ITEMIDLIST = ITEMIDLIST;
420     TITEMIDLIST = ITEMIDLIST;
421     PITEMIDLIST = ^ITEMIDLIST;
422
423     BROWSEINFO = record
424          hwndOwner : HWND;
425          pidlRoot : LPCITEMIDLIST;
426          pszDisplayName : LPTSTR;
427          lpszTitle : LPCTSTR;
428          ulFlags : UINT;
429          lpfn : BFFCALLBACK;
430          lParam : LPARAM;
431          iImage : longint;
432       end deprecated 'Use shlobj version. Will be removed in the future';
433     LPBROWSEINFO = ^BROWSEINFO deprecated;
434     _browseinfo = BROWSEINFO deprecated;
435     Tbrowseinfo = BROWSEINFO deprecated;
436     PBROWSEINFO = ^BROWSEINFO deprecated;
437
438     FILETIME = record
439          dwLowDateTime : DWORD;
440          dwHighDateTime : DWORD;
441       end;
442     LPFILETIME = ^FILETIME;
443     _FILETIME = FILETIME;
444     TFILETIME = FILETIME;
445     PFILETIME = ^FILETIME;
446
447     BY_HANDLE_FILE_INFORMATION = record
448          dwFileAttributes : DWORD;
449          ftCreationTime : FILETIME;
450          ftLastAccessTime : FILETIME;
451          ftLastWriteTime : FILETIME;
452          dwVolumeSerialNumber : DWORD;
453          nFileSizeHigh : DWORD;
454          nFileSizeLow : DWORD;
455          nNumberOfLinks : DWORD;
456          nFileIndexHigh : DWORD;
457          nFileIndexLow : DWORD;
458       end;
459     LPBY_HANDLE_FILE_INFORMATION = ^BY_HANDLE_FILE_INFORMATION;
460     _BY_HANDLE_FILE_INFORMATION = BY_HANDLE_FILE_INFORMATION;
461     TBYHANDLEFILEINFORMATION = BY_HANDLE_FILE_INFORMATION;
462     PBYHANDLEFILEINFORMATION = ^BY_HANDLE_FILE_INFORMATION;
463
464     FIXED = packed record
465          fract : WORD;
466          value : SHORT;
467       end;
468     _FIXED = FIXED;
469     TFIXED = FIXED;
470     PFIXED = ^FIXED;
471
472     POINTFX = record
473          x : FIXED;
474          y : FIXED;
475       end;
476     tagPOINTFX = POINTFX;
477     TPOINTFX = POINTFX;
478     PPOINTFX = ^POINTFX;
479
480     POINTL = record
481          x : LONG;
482          y : LONG;
483       end;
484     _POINTL = POINTL;
485     TPOINTL = POINTL;
486     PPOINTL = ^POINTL;
487
488     POINTS = record
489          x : SHORT;
490          y : SHORT;
491       end;
492     tagPOINTS = POINTS;
493     TPOINTS = POINTS;
494     PPOINTS = ^POINTS;
495
496     CANDIDATEFORM = record
497          dwIndex : DWORD;
498          dwStyle : DWORD;
499          ptCurrentPos : POINT;
500          rcArea : RECT;
501       end;
502     LPCANDIDATEFORM = ^CANDIDATEFORM;
503     _tagCANDIDATEFORM = CANDIDATEFORM;
504     TCANDIDATEFORM = CANDIDATEFORM;
505     PCANDIDATEFORM = ^CANDIDATEFORM;
506
507     CANDIDATELIST = record
508          dwSize : DWORD;
509          dwStyle : DWORD;
510          dwCount : DWORD;
511          dwSelection : DWORD;
512          dwPageStart : DWORD;
513          dwPageSize : DWORD;
514          dwOffset : array[0..0] of DWORD;
515       end;
516     LPCANDIDATELIST = ^CANDIDATELIST;
517     _tagCANDIDATELIST = CANDIDATELIST;
518     TCANDIDATELIST = CANDIDATELIST;
519     PCANDIDATELIST = ^CANDIDATELIST;
520
521     CREATESTRUCT = record
522          lpCreateParams : LPVOID;
523          hInstance : HINST;
524          hMenu : HMENU;
525          hwndParent : HWND;
526          cy : longint;
527          cx : longint;
528          y : longint;
529          x : longint;
530          style : LONG;
531          lpszName : LPCTSTR;
532          lpszClass : LPCTSTR;
533          dwExStyle : DWORD;
534       end;
535     LPCREATESTRUCT = ^CREATESTRUCT;
536     tagCREATESTRUCT = CREATESTRUCT;
537     TCREATESTRUCT = CREATESTRUCT;
538     PCREATESTRUCT = ^CREATESTRUCT;
539
540     CBT_CREATEWND = record
541          lpcs : LPCREATESTRUCT;
542          hwndInsertAfter : HWND;
543       end;
544     tagCBT_CREATEWND = CBT_CREATEWND;
545     TCBT_CREATEWND = CBT_CREATEWND;
546     PCBT_CREATEWND = ^CBT_CREATEWND;
547
548     CBTACTIVATESTRUCT = record
549          fMouse : WINBOOL;
550          hWndActive : HWND;
551       end;
552     tagCBTACTIVATESTRUCT = CBTACTIVATESTRUCT;
553     TCBTACTIVATESTRUCT = CBTACTIVATESTRUCT;
554     PCBTACTIVATESTRUCT = ^CBTACTIVATESTRUCT;
555
556
557     CHAR_INFO = record
558              case longint of
559                 0 : ( UnicodeChar : WCHAR;
560                       Attributes  : Word);
561                 1 : ( AsciiChar : CHAR );
562              end;
563     _CHAR_INFO = CHAR_INFO;
564     TCHAR_INFO = CHAR_INFO;
565     PCHAR_INFO = ^CHAR_INFO;
566
567     CHARFORMATA = record
568          cbSize : UINT;
569          dwMask : DWORD;
570          dwEffects : DWORD;
571          yHeight : LONG;
572          yOffset : LONG;
573          crTextColor : COLORREF;
574          bCharSet : BYTE;
575          bPitchAndFamily : BYTE;
576          szFaceName : array[0..(LF_FACESIZE)-1] of AnsiCHAR;
577       end;
578     _CHARFORMATA = CHARFORMATA;
579     TCHARFORMATA = CHARFORMATA;
580     PCHARFORMATA = ^CHARFORMATA;
581
582     CHARFORMATW = record
583          cbSize : UINT;
584          dwMask : DWORD;
585          dwEffects : DWORD;
586          yHeight : LONG;
587          yOffset : LONG;
588          crTextColor : COLORREF;
589          bCharSet : BYTE;
590          bPitchAndFamily : BYTE;
591          szFaceName : array[0..(LF_FACESIZE)-1] of WCHAR;
592       end;
593     _CHARFORMATW = CHARFORMATW;
594     TCHARFORMATW = CHARFORMATW;
595     PCHARFORMATW = ^CHARFORMATW;
596{$ifdef Unicode}
597   CHARFORMAT  = CHARFORMATW;
598   _CHARFORMAT = CHARFORMATW;
599   TCHARFORMAT = CHARFORMATW;
600   PCHARFORMAT = PCHARFORMATW;
601{$else}
602   CHARFORMAT  = CHARFORMATA;
603   _CHARFORMAT = CHARFORMATA;
604   TCHARFORMAT = CHARFORMATA;
605   PCHARFORMAT = PCHARFORMATA;
606{$endif}
607
608     CHARRANGE = record
609          cpMin : LONG;
610          cpMax : LONG;
611       end;
612     _charrange = CHARRANGE;
613     Tcharrange = CHARRANGE;
614     Pcharrange = ^CHARRANGE;
615
616     CHARSET = record
617          aflBlock : array[0..2] of DWORD;
618          flLang : DWORD;
619       end;
620     tagCHARSET = CHARSET;
621     TCHARSET = CHARSET;
622     PCHARSET = ^CHARSET;
623
624     FONTSIGNATURE = record
625          fsUsb : array[0..3] of DWORD;
626          fsCsb : array[0..1] of DWORD;
627       end;
628     LPFONTSIGNATURE = ^FONTSIGNATURE;
629     tagFONTSIGNATURE = FONTSIGNATURE;
630     TFONTSIGNATURE = FONTSIGNATURE;
631     PFONTSIGNATURE = ^FONTSIGNATURE;
632
633     CHARSETINFO = record
634          ciCharset : UINT;
635          ciACP : UINT;
636          fs : FONTSIGNATURE;
637       end;
638     LPCHARSETINFO = ^CHARSETINFO;
639     TCHARSETINFO = CHARSETINFO;
640     PCHARSETINFO = ^CHARSETINFO;
641
642     {CHOOSECOLOR = record confilcts with function ChooseColor }
643     TCHOOSECOLOR = record
644          lStructSize : DWORD;
645          hwndOwner : HWND;
646          hInstance : HWND;
647          rgbResult : COLORREF;
648          lpCustColors : ^COLORREF;
649          Flags : DWORD;
650          lCustData : LPARAM;
651          lpfnHook : LPCCHOOKPROC;
652          lpTemplateName : LPCTSTR;
653       end;
654     LPCHOOSECOLOR = ^TCHOOSECOLOR;
655     PCHOOSECOLOR = ^TCHOOSECOLOR;
656
657     LOGFONTA = record
658          lfHeight : LONG;
659          lfWidth : LONG;
660          lfEscapement : LONG;
661          lfOrientation : LONG;
662          lfWeight : LONG;
663          lfItalic : BYTE;
664          lfUnderline : BYTE;
665          lfStrikeOut : BYTE;
666          lfCharSet : BYTE;
667          lfOutPrecision : BYTE;
668          lfClipPrecision : BYTE;
669          lfQuality : BYTE;
670          lfPitchAndFamily : BYTE;
671          lfFaceName : array[0..(LF_FACESIZE)-1] of AnsiCHAR;
672       end;
673     LPLOGFONTA = ^LOGFONTA;
674     _LOGFONTA  = LOGFONTA;
675     TLOGFONTA  = LOGFONTA;
676     PLOGFONTA  = LPLOGFONTA;
677     tagLOGFONTA= LOGFONTA;
678
679     LOGFONTW = record
680       lfHeight: LONG;
681       lfWidth: LONG;
682       lfEscapement: LONG;
683       lfOrientation: LONG;
684       lfWeight: LONG;
685       lfItalic: BYTE;
686       lfUnderline: BYTE;
687       lfStrikeOut: BYTE;
688       lfCharSet: BYTE;
689       lfOutPrecision: BYTE;
690       lfClipPrecision: BYTE;
691       lfQuality: BYTE;
692       lfPitchAndFamily: BYTE;
693       lfFaceName: array [0..LF_FACESIZE - 1] of WCHAR;
694     end;
695     LPLOGFONTW = ^LOGFONTW;
696     NPLOGFONTW = ^LOGFONTW;
697     _LOGFONTW  = LOGFONTW;
698     TLogFontW  = LOGFONTW;
699     PLogFontW  = ^TLOGFONTW;
700     tagLOGFONTW= LOGFONTW;
701
702   {$IFNDEF UNICODE}
703     LOGFONT    = LOGFONTA;
704     LPLOGFONT  = ^LOGFONTA;
705     _LOGFONT   = LOGFONTA;
706     TLOGFONT   = LOGFONTA;
707     PLOGFONT   = ^LOGFONTA;
708     tagLOGFONT = LOGFONTA;
709   {$ELSE}
710     LOGFONT    = LOGFONTW;
711     LPLOGFONT  = ^LOGFONTW;
712     _LOGFONT   = LOGFONTW;
713     TLOGFONT   = LOGFONTW;
714     PLOGFONT   = ^LOGFONTW;
715     tagLOGFONT = LOGFONTW;
716    {$ENDIF}
717
718     {CHOOSEFONT = record conflicts with ChosseFont function }
719     TCHOOSEFONT = record
720          lStructSize : DWORD;
721          hwndOwner : HWND;
722          hDC : HDC;
723          lpLogFont : LPLOGFONT;
724          iPointSize : WINT;
725          Flags : DWORD;
726          rgbColors : COLORREF;
727          lCustData : LPARAM;
728          lpfnHook : LPCFHOOKPROC;
729          lpTemplateName : LPCTSTR;
730          hInstance : HINST;
731          lpszStyle : LPTSTR;
732          nFontType : WORD;
733          ___MISSING_ALIGNMENT__ : WORD;
734          nSizeMin : WINT;
735          nSizeMax : WINT;
736       end;
737     LPCHOOSEFONT = ^TCHOOSEFONT;
738     PCHOOSEFONT = ^TCHOOSEFONT;
739
740     CIDA = record
741          cidl : UINT;
742          aoffset : array[0..0] of UINT;
743       end;
744     LPIDA = ^CIDA;
745     _IDA = CIDA;
746     TIDA = CIDA;
747     PIDA = ^CIDA;
748
749     CLIENTCREATESTRUCT = record
750          hWindowMenu : HANDLE;
751          idFirstChild : UINT;
752       end;
753     LPCLIENTCREATESTRUCT = ^CLIENTCREATESTRUCT;
754     tagCLIENTCREATESTRUCT = CLIENTCREATESTRUCT;
755     TCLIENTCREATESTRUCT = CLIENTCREATESTRUCT;
756     PCLIENTCREATESTRUCT = ^CLIENTCREATESTRUCT;
757
758     CMINVOKECOMMANDINFO = record
759          cbSize : DWORD;
760          fMask : DWORD;
761          hwnd : HWND;
762          lpVerb : LPCSTR;
763          lpParameters : LPCSTR;
764          lpDirectory : LPCSTR;
765          nShow : longint;
766          dwHotKey : DWORD;
767          hIcon : HANDLE;
768       end deprecated 'Use shlobj version. Will be removed in the future';
769     LPCMINVOKECOMMANDINFO = ^CMINVOKECOMMANDINFO deprecated;
770     _CMInvokeCommandInfo = CMINVOKECOMMANDINFO deprecated;
771     TCMInvokeCommandInfo = CMINVOKECOMMANDINFO deprecated;
772     PCMInvokeCommandInfo = ^CMINVOKECOMMANDINFO deprecated;
773
774     COLORADJUSTMENT = record
775          caSize : WORD;
776          caFlags : WORD;
777          caIlluminantIndex : WORD;
778          caRedGamma : WORD;
779          caGreenGamma : WORD;
780          caBlueGamma : WORD;
781          caReferenceBlack : WORD;
782          caReferenceWhite : WORD;
783          caContrast : SHORT;
784          caBrightness : SHORT;
785          caColorfulness : SHORT;
786          caRedGreenTint : SHORT;
787       end;
788     LPCOLORADJUSTMENT = ^COLORADJUSTMENT;
789     tagCOLORADJUSTMENT = COLORADJUSTMENT;
790     TCOLORADJUSTMENT = COLORADJUSTMENT;
791     PCOLORADJUSTMENT = ^COLORADJUSTMENT;
792
793     COLORMAP = record
794          from : COLORREF;
795          _to : COLORREF;
796       end;
797     LPCOLORMAP = ^COLORMAP;
798     _COLORMAP = COLORMAP;
799     TCOLORMAP = COLORMAP;
800     PCOLORMAP = ^COLORMAP;
801
802     DCB = record
803          DCBlength : DWORD;
804          BaudRate : DWORD;
805          flags : DWORD;
806          wReserved : WORD;
807          XonLim : WORD;
808          XoffLim : WORD;
809          ByteSize : BYTE;
810          Parity : BYTE;
811          StopBits : BYTE;
812          XonChar : char;
813          XoffChar : char;
814          ErrorChar : char;
815          EofChar : char;
816          EvtChar : char;
817          wReserved1 : WORD;
818       end;
819     LPDCB = ^DCB;
820     _DCB = DCB;
821     TDCB = DCB;
822     PDCB = ^DCB;
823
824     FLASHWINFO = record
825         cbSize    : UINT;
826         hwnd      : HWND;
827         dwFlags   : DWORD;
828         uCount    : UINT;
829         dwTimeOut : DWORD;
830     end;
831    TFLASHWINFO  = FLASHWINFO;
832    PFLASHWINFO  = ^FLASHWINFO;
833
834  const
835     bm_DCB_fBinary = $1;
836     bp_DCB_fBinary = 0;
837     bm_DCB_fParity = $2;
838     bp_DCB_fParity = 1;
839     bm_DCB_fOutxCtsFlow = $4;
840     bp_DCB_fOutxCtsFlow = 2;
841     bm_DCB_fOutxDsrFlow = $8;
842     bp_DCB_fOutxDsrFlow = 3;
843     bm_DCB_fDtrControl = $30;
844     bp_DCB_fDtrControl = 4;
845     bm_DCB_fDsrSensitivity = $40;
846     bp_DCB_fDsrSensitivity = 6;
847     bm_DCB_fTXContinueOnXoff = $80;
848     bp_DCB_fTXContinueOnXoff = 7;
849     bm_DCB_fOutX = $100;
850     bp_DCB_fOutX = 8;
851     bm_DCB_fInX = $200;
852     bp_DCB_fInX = 9;
853     bm_DCB_fErrorChar = $400;
854     bp_DCB_fErrorChar = 10;
855     bm_DCB_fNull = $800;
856     bp_DCB_fNull = 11;
857     bm_DCB_fRtsControl = $3000;
858     bp_DCB_fRtsControl = 12;
859     bm_DCB_fAbortOnError = $4000;
860     bp_DCB_fAbortOnError = 14;
861     bm_DCB_fDummy2 = $FFFF8000;
862     bp_DCB_fDummy2 = 15;
863  function fBinary(var a : DCB) : DWORD;
864  procedure set_fBinary(var a : DCB; __fBinary : DWORD);
865  function fParity(var a : DCB) : DWORD;
866  procedure set_fParity(var a : DCB; __fParity : DWORD);
867  function fOutxCtsFlow(var a : DCB) : DWORD;
868  procedure set_fOutxCtsFlow(var a : DCB; __fOutxCtsFlow : DWORD);
869  function fOutxDsrFlow(var a : DCB) : DWORD;
870  procedure set_fOutxDsrFlow(var a : DCB; __fOutxDsrFlow : DWORD);
871  function fDtrControl(var a : DCB) : DWORD;
872  procedure set_fDtrControl(var a : DCB; __fDtrControl : DWORD);
873  function fDsrSensitivity(var a : DCB) : DWORD;
874  procedure set_fDsrSensitivity(var a : DCB; __fDsrSensitivity : DWORD);
875  function fTXContinueOnXoff(var a : DCB) : DWORD;
876  procedure set_fTXContinueOnXoff(var a : DCB; __fTXContinueOnXoff : DWORD);
877  function fOutX(var a : DCB) : DWORD;
878  procedure set_fOutX(var a : DCB; __fOutX : DWORD);
879  function fInX(var a : DCB) : DWORD;
880  procedure set_fInX(var a : DCB; __fInX : DWORD);
881  function fErrorChar(var a : DCB) : DWORD;
882  procedure set_fErrorChar(var a : DCB; __fErrorChar : DWORD);
883  function fNull(var a : DCB) : DWORD;
884  procedure set_fNull(var a : DCB; __fNull : DWORD);
885  function fRtsControl(var a : DCB) : DWORD;
886  procedure set_fRtsControl(var a : DCB; __fRtsControl : DWORD);
887  function fAbortOnError(var a : DCB) : DWORD;
888  procedure set_fAbortOnError(var a : DCB; __fAbortOnError : DWORD);
889  function fDummy2(var a : DCB) : DWORD;
890  procedure set_fDummy2(var a : DCB; __fDummy2 : DWORD);
891
892  type
893
894     COMMCONFIG = record
895          dwSize : DWORD;
896          wVersion : WORD;
897          wReserved : WORD;
898          dcb : DCB;
899          dwProviderSubType : DWORD;
900          dwProviderOffset : DWORD;
901          dwProviderSize : DWORD;
902          wcProviderData : array[0..0] of WCHAR;
903       end;
904     LPCOMMCONFIG = ^COMMCONFIG;
905     _COMM_CONFIG = COMMCONFIG;
906     TCOMMCONFIG = COMMCONFIG;
907     PCOMMCONFIG = ^COMMCONFIG;
908
909     COMMPROP = record
910          wPacketLength : WORD;
911          wPacketVersion : WORD;
912          dwServiceMask : DWORD;
913          dwReserved1 : DWORD;
914          dwMaxTxQueue : DWORD;
915          dwMaxRxQueue : DWORD;
916          dwMaxBaud : DWORD;
917          dwProvSubType : DWORD;
918          dwProvCapabilities : DWORD;
919          dwSettableParams : DWORD;
920          dwSettableBaud : DWORD;
921          wSettableData : WORD;
922          wSettableStopParity : WORD;
923          dwCurrentTxQueue : DWORD;
924          dwCurrentRxQueue : DWORD;
925          dwProvSpec1 : DWORD;
926          dwProvSpec2 : DWORD;
927          wcProvChar : array[0..0] of WCHAR;
928       end;
929     LPCOMMPROP = ^COMMPROP;
930     _COMMPROP = COMMPROP;
931     TCOMMPROP = COMMPROP;
932     PCOMMPROP = ^COMMPROP;
933
934     COMMTIMEOUTS = record
935          ReadIntervalTimeout : DWORD;
936          ReadTotalTimeoutMultiplier : DWORD;
937          ReadTotalTimeoutConstant : DWORD;
938          WriteTotalTimeoutMultiplier : DWORD;
939          WriteTotalTimeoutConstant : DWORD;
940       end;
941     LPCOMMTIMEOUTS = ^COMMTIMEOUTS;
942     _COMMTIMEOUTS = COMMTIMEOUTS;
943     TCOMMTIMEOUTS = COMMTIMEOUTS;
944     PCOMMTIMEOUTS = ^COMMTIMEOUTS;
945
946     COMPAREITEMSTRUCT = record
947          CtlType : UINT;
948          CtlID : UINT;
949          hwndItem : HWND;
950          itemID1 : UINT;
951          itemData1 : ULONG_PTR;
952          itemID2 : UINT;
953          itemData2 : ULONG_PTR;
954          dwLocaleID : DWORD;
955       end;
956     tagCOMPAREITEMSTRUCT = COMPAREITEMSTRUCT;
957     TCOMPAREITEMSTRUCT = COMPAREITEMSTRUCT;
958     PCOMPAREITEMSTRUCT = ^COMPAREITEMSTRUCT;
959
960     COMPCOLOR = record
961          crText : COLORREF;
962          crBackground : COLORREF;
963          dwEffects : DWORD;
964       end;
965     TCOMPCOLOR = COMPCOLOR;
966     PCOMPCOLOR = ^COMPCOLOR;
967
968     COMPOSITIONFORM = record
969          dwStyle : DWORD;
970          ptCurrentPos : POINT;
971          rcArea : RECT;
972       end;
973     LPCOMPOSITIONFORM = ^COMPOSITIONFORM;
974     _tagCOMPOSITIONFORM = COMPOSITIONFORM;
975     TCOMPOSITIONFORM = COMPOSITIONFORM;
976     PCOMPOSITIONFORM = ^COMPOSITIONFORM;
977
978//     TComStatFlags = set of (fCtsHold, fDsrHold, fRlsdHold , fXoffHold ,
979//                    fXoffSent , fEof ,  fTxim  , fReserved);
980
981     COMSTAT = record
982          flag0 : DWORD;   // can't use tcomstatflags, set packing issues
983                           // and conflicts with macro's
984          cbInQue : DWORD;
985          cbOutQue : DWORD;
986       end;
987     LPCOMSTAT = ^COMSTAT;
988     _COMSTAT = COMSTAT;
989     TCOMSTAT = COMSTAT;
990     PCOMSTAT = ^COMSTAT;
991  const
992     bm_COMSTAT_fCtsHold = $1;
993     bp_COMSTAT_fCtsHold = 0;
994     bm_COMSTAT_fDsrHold = $2;
995     bp_COMSTAT_fDsrHold = 1;
996     bm_COMSTAT_fRlsdHold = $4;
997     bp_COMSTAT_fRlsdHold = 2;
998     bm_COMSTAT_fXoffHold = $8;
999     bp_COMSTAT_fXoffHold = 3;
1000     bm_COMSTAT_fXoffSent = $10;
1001     bp_COMSTAT_fXoffSent = 4;
1002     bm_COMSTAT_fEof = $20;
1003     bp_COMSTAT_fEof = 5;
1004     bm_COMSTAT_fTxim = $40;
1005     bp_COMSTAT_fTxim = 6;
1006     bm_COMSTAT_fReserved = $FFFFFF80;
1007     bp_COMSTAT_fReserved = 7;
1008  function fCtsHold(var a : COMSTAT) : DWORD;  // should be renamed to get_<x>?
1009  procedure set_fCtsHold(var a : COMSTAT; __fCtsHold : DWORD);
1010  function fDsrHold(var a : COMSTAT) : DWORD;
1011  procedure set_fDsrHold(var a : COMSTAT; __fDsrHold : DWORD);
1012  function fRlsdHold(var a : COMSTAT) : DWORD;
1013  procedure set_fRlsdHold(var a : COMSTAT; __fRlsdHold : DWORD);
1014  function fXoffHold(var a : COMSTAT) : DWORD;
1015  procedure set_fXoffHold(var a : COMSTAT; __fXoffHold : DWORD);
1016  function fXoffSent(var a : COMSTAT) : DWORD;
1017  procedure set_fXoffSent(var a : COMSTAT; __fXoffSent : DWORD);
1018  function fEof(var a : COMSTAT) : DWORD;
1019  procedure set_fEof(var a : COMSTAT; __fEof : DWORD);
1020  function fTxim(var a : COMSTAT) : DWORD;
1021  procedure set_fTxim(var a : COMSTAT; __fTxim : DWORD);
1022  function fReserved(var a : COMSTAT) : DWORD;
1023  procedure set_fReserved(var a : COMSTAT; __fReserved : DWORD);
1024
1025  type
1026
1027     CONSOLE_CURSOR_INFO = record
1028          dwSize : DWORD;
1029          bVisible : WINBOOL;
1030       end;
1031     PCONSOLE_CURSOR_INFO = ^CONSOLE_CURSOR_INFO;
1032     _CONSOLE_CURSOR_INFO = CONSOLE_CURSOR_INFO;
1033     TCONSOLECURSORINFO = CONSOLE_CURSOR_INFO;
1034     PCONSOLECURSORINFO = ^CONSOLE_CURSOR_INFO;
1035
1036     COORD = record
1037          X : SHORT;
1038          Y : SHORT;
1039       end;
1040     _COORD = COORD;
1041     TCOORD = COORD;
1042     PCOORD = ^COORD;
1043
1044     SMALL_RECT = record
1045          Left : SHORT;
1046          Top : SHORT;
1047          Right : SHORT;
1048          Bottom : SHORT;
1049       end;
1050     _SMALL_RECT = SMALL_RECT;
1051     TSMALL_RECT = SMALL_RECT;
1052     PSMALL_RECT = ^SMALL_RECT;
1053
1054     CONSOLE_SCREEN_BUFFER_INFO = packed record
1055          dwSize : COORD;
1056          dwCursorPosition : COORD;
1057          wAttributes : WORD;
1058          srWindow : SMALL_RECT;
1059          dwMaximumWindowSize : COORD;
1060       end;
1061     PCONSOLE_SCREEN_BUFFER_INFO = ^CONSOLE_SCREEN_BUFFER_INFO;
1062     _CONSOLE_SCREEN_BUFFER_INFO = CONSOLE_SCREEN_BUFFER_INFO;
1063     TCONSOLESCREENBUFFERINFO = CONSOLE_SCREEN_BUFFER_INFO;
1064     PCONSOLESCREENBUFFERINFO = ^CONSOLE_SCREEN_BUFFER_INFO;
1065
1066{$ifdef cpui386}
1067{$define __HASCONTEXT__}
1068  type
1069
1070     FLOATING_SAVE_AREA = record
1071          ControlWord : DWORD;
1072          StatusWord : DWORD;
1073          TagWord : DWORD;
1074          ErrorOffset : DWORD;
1075          ErrorSelector : DWORD;
1076          DataOffset : DWORD;
1077          DataSelector : DWORD;
1078          RegisterArea : array[0..79] of BYTE;
1079          Cr0NpxState : DWORD;
1080       end;
1081     _FLOATING_SAVE_AREA = FLOATING_SAVE_AREA;
1082     TFLOATINGSAVEAREA = FLOATING_SAVE_AREA;
1083     PFLOATINGSAVEAREA = ^FLOATING_SAVE_AREA;
1084
1085     CONTEXT = record
1086          ContextFlags : DWORD;
1087          Dr0 : DWORD;
1088          Dr1 : DWORD;
1089          Dr2 : DWORD;
1090          Dr3 : DWORD;
1091          Dr6 : DWORD;
1092          Dr7 : DWORD;
1093          FloatSave : FLOATING_SAVE_AREA;
1094          SegGs : DWORD;
1095          SegFs : DWORD;
1096          SegEs : DWORD;
1097          SegDs : DWORD;
1098          Edi : DWORD;
1099          Esi : DWORD;
1100          Ebx : DWORD;
1101          Edx : DWORD;
1102          Ecx : DWORD;
1103          Eax : DWORD;
1104          Ebp : DWORD;
1105          Eip : DWORD;
1106          SegCs : DWORD;
1107          EFlags : DWORD;
1108          Esp : DWORD;
1109          SegSs : DWORD;
1110       end;
1111{$endif}
1112
1113{$ifdef cpux86_64}
1114{$define __HASCONTEXT__}
1115//
1116// Define 128-bit 16-byte aligned xmm register type.
1117//
1118
1119//typedef struct DECLSPEC_ALIGN(16) _M128A {
1120{$note todo, fix alignment }
1121  type
1122     M128A = record
1123          Low: ULONGLONG;
1124          High: LONGLONG;
1125       end;
1126     _M128A = M128A;
1127     TM128A = M128A;
1128     PM128A = TM128A;
1129
1130//
1131// Format of data for 32-bit fxsave/fxrstor instructions.
1132//
1133
1134//typedef struct _XMM_SAVE_AREA32 {
1135  type
1136     XMM_SAVE_AREA32 = record
1137          ControlWord: WORD;
1138          StatusWord: WORD;
1139          TagWord: BYTE;
1140          Reserved1: BYTE;
1141          ErrorOpcode: WORD;
1142          ErrorOffset: DWORD;
1143          ErrorSelector: WORD;
1144          Reserved2: WORD;
1145          DataOffset: DWORD;
1146          DataSelector: WORD;
1147          Reserved3: WORD;
1148          MxCsr: DWORD;
1149          MxCsr_Mask: DWORD;
1150          FloatRegisters: array[0..7] of M128A;
1151          XmmRegisters: array[0..15] of M128A;
1152          Reserved4: array[0..95] of BYTE;
1153       end;
1154     _XMM_SAVE_AREA32 = XMM_SAVE_AREA32;
1155     TXmmSaveArea = XMM_SAVE_AREA32;
1156     PXmmSaveArea = ^TXmmSaveArea;
1157
1158  const
1159     LEGACY_SAVE_AREA_LENGTH = sizeof(XMM_SAVE_AREA32);
1160
1161//
1162// Context Frame
1163//
1164//  This frame has a several purposes: 1) it is used as an argument to
1165//  NtContinue, 2) is is used to constuct a call frame for APC delivery,
1166//  and 3) it is used in the user level thread creation routines.
1167//
1168//
1169// The flags field within this record controls the contents of a CONTEXT
1170// record.
1171//
1172// If the context record is used as an input parameter, then for each
1173// portion of the context record controlled by a flag whose value is
1174// set, it is assumed that that portion of the context record contains
1175// valid context. If the context record is being used to modify a threads
1176// context, then only that portion of the threads context is modified.
1177//
1178// If the context record is used as an output parameter to capture the
1179// context of a thread, then only those portions of the thread's context
1180// corresponding to set flags will be returned.
1181//
1182// CONTEXT_CONTROL specifies SegSs, Rsp, SegCs, Rip, and EFlags.
1183//
1184// CONTEXT_INTEGER specifies Rax, Rcx, Rdx, Rbx, Rbp, Rsi, Rdi, and R8-R15.
1185//
1186// CONTEXT_SEGMENTS specifies SegDs, SegEs, SegFs, and SegGs.
1187//
1188// CONTEXT_DEBUG_REGISTERS specifies Dr0-Dr3 and Dr6-Dr7.
1189//
1190// CONTEXT_MMX_REGISTERS specifies the floating point and extended registers
1191//     Mm0/St0-Mm7/St7 and Xmm0-Xmm15).
1192//
1193
1194//typedef struct DECLSPEC_ALIGN(16) _CONTEXT {
1195{$note todo, fix alignment }
1196  type
1197     CONTEXT = record
1198
1199          //
1200          // Register parameter home addresses.
1201          //
1202          // N.B. These fields are for convience - they could be used to extend the
1203          //      context record in the future.
1204          //
1205
1206          P1Home: DWORD64;
1207          P2Home: DWORD64;
1208          P3Home: DWORD64;
1209          P4Home: DWORD64;
1210          P5Home: DWORD64;
1211          P6Home: DWORD64;
1212
1213          //
1214          // Control flags.
1215          //
1216
1217          ContextFlags: DWORD;
1218          MxCsr: DWORD;
1219
1220          //
1221          // Segment Registers and processor flags.
1222          //
1223
1224          SegCs: WORD;
1225          SegDs: WORD;
1226          SegEs: WORD;
1227          SegFs: WORD;
1228          SegGs: WORD;
1229          SegSs: WORD;
1230          EFlags: DWORD;
1231
1232          //
1233          // Debug registers
1234          //
1235
1236          Dr0: DWORD64;
1237          Dr1: DWORD64;
1238          Dr2: DWORD64;
1239          Dr3: DWORD64;
1240          Dr6: DWORD64;
1241          Dr7: DWORD64;
1242
1243          //
1244          // Integer registers.
1245          //
1246
1247          Rax: DWORD64;
1248          Rcx: DWORD64;
1249          Rdx: DWORD64;
1250          Rbx: DWORD64;
1251          Rsp: DWORD64;
1252          Rbp: DWORD64;
1253          Rsi: DWORD64;
1254          Rdi: DWORD64;
1255          R8: DWORD64;
1256          R9: DWORD64;
1257          R10: DWORD64;
1258          R11: DWORD64;
1259          R12: DWORD64;
1260          R13: DWORD64;
1261          R14: DWORD64;
1262          R15: DWORD64;
1263
1264          //
1265          // Program counter.
1266          //
1267
1268          Rip: DWORD64;
1269
1270          //
1271          // Floating point state.
1272          //
1273
1274          FltSave: XMM_SAVE_AREA32; // MWE: only translated the FltSave part of the union
1275(*
1276          union  {
1277              XMM_SAVE_AREA32 FltSave;
1278              struct {
1279                  M128A Header[2];
1280                  M128A Legacy[8];
1281                  M128A Xmm0;
1282                  M128A Xmm1;
1283                  M128A Xmm2;
1284                  M128A Xmm3;
1285                  M128A Xmm4;
1286                  M128A Xmm5;
1287                  M128A Xmm6;
1288                  M128A Xmm7;
1289                  M128A Xmm8;
1290                  M128A Xmm9;
1291                  M128A Xmm10;
1292                  M128A Xmm11;
1293                  M128A Xmm12;
1294                  M128A Xmm13;
1295                  M128A Xmm14;
1296                  M128A Xmm15;
1297              };
1298          };
1299*)
1300
1301          //
1302          // Vector registers.
1303          //
1304
1305          VectorRegister: array[0..25] of M128A;
1306          VectorControl: DWORD64;
1307
1308          //
1309          // Special debug control registers.
1310          //
1311
1312          DebugControl: DWORD64;
1313          LastBranchToRip: DWORD64;
1314          LastBranchFromRip: DWORD64;
1315          LastExceptionToRip: DWORD64;
1316          LastExceptionFromRip: DWORD64;
1317      end;
1318{$endif}
1319
1320{$ifdef cpupowerpc32}
1321{$define __HASCONTEXT__}
1322  { __ppc__  }
1323  { Floating point registers returned when CONTEXT_FLOATING_POINT is set  }
1324  { Integer registers returned when CONTEXT_INTEGER is set.   }
1325  { Condition register  }
1326  { Fixed point exception register  }
1327  { The following are set when CONTEXT_CONTROL is set.   }
1328  { Machine status register  }
1329  { Instruction address register  }
1330  { Link register  }
1331  { Control register  }
1332  { Control which context values are returned  }
1333  { Registers returned if CONTEXT_DEBUG_REGISTERS is set.   }
1334  { Breakpoint Register 1  }
1335  { Breakpoint Register 2  }
1336  { Breakpoint Register 3  }
1337  { Breakpoint Register 4  }
1338  { Breakpoint Register 5  }
1339  { Breakpoint Register 6  }
1340  { Debug Status Register  }
1341  { Debug Control Register  }
1342
1343  type
1344
1345     CONTEXT = record
1346          Fpr0 : double;
1347          Fpr1 : double;
1348          Fpr2 : double;
1349          Fpr3 : double;
1350          Fpr4 : double;
1351          Fpr5 : double;
1352          Fpr6 : double;
1353          Fpr7 : double;
1354          Fpr8 : double;
1355          Fpr9 : double;
1356          Fpr10 : double;
1357          Fpr11 : double;
1358          Fpr12 : double;
1359          Fpr13 : double;
1360          Fpr14 : double;
1361          Fpr15 : double;
1362          Fpr16 : double;
1363          Fpr17 : double;
1364          Fpr18 : double;
1365          Fpr19 : double;
1366          Fpr20 : double;
1367          Fpr21 : double;
1368          Fpr22 : double;
1369          Fpr23 : double;
1370          Fpr24 : double;
1371          Fpr25 : double;
1372          Fpr26 : double;
1373          Fpr27 : double;
1374          Fpr28 : double;
1375          Fpr29 : double;
1376          Fpr30 : double;
1377          Fpr31 : double;
1378          Fpscr : double;
1379          Gpr0 : DWORD;
1380          Gpr1 : DWORD;
1381          Gpr2 : DWORD;
1382          Gpr3 : DWORD;
1383          Gpr4 : DWORD;
1384          Gpr5 : DWORD;
1385          Gpr6 : DWORD;
1386          Gpr7 : DWORD;
1387          Gpr8 : DWORD;
1388          Gpr9 : DWORD;
1389          Gpr10 : DWORD;
1390          Gpr11 : DWORD;
1391          Gpr12 : DWORD;
1392          Gpr13 : DWORD;
1393          Gpr14 : DWORD;
1394          Gpr15 : DWORD;
1395          Gpr16 : DWORD;
1396          Gpr17 : DWORD;
1397          Gpr18 : DWORD;
1398          Gpr19 : DWORD;
1399          Gpr20 : DWORD;
1400          Gpr21 : DWORD;
1401          Gpr22 : DWORD;
1402          Gpr23 : DWORD;
1403          Gpr24 : DWORD;
1404          Gpr25 : DWORD;
1405          Gpr26 : DWORD;
1406          Gpr27 : DWORD;
1407          Gpr28 : DWORD;
1408          Gpr29 : DWORD;
1409          Gpr30 : DWORD;
1410          Gpr31 : DWORD;
1411          Cr : DWORD;
1412          Xer : DWORD;
1413          Msr : DWORD;
1414          Iar : DWORD;
1415          Lr : DWORD;
1416          Ctr : DWORD;
1417          ContextFlags : DWORD;
1418          Fill : array[0..2] of DWORD;
1419          Dr0 : DWORD;
1420          Dr1 : DWORD;
1421          Dr2 : DWORD;
1422          Dr3 : DWORD;
1423          Dr4 : DWORD;
1424          Dr5 : DWORD;
1425          Dr6 : DWORD;
1426          Dr7 : DWORD;
1427       end;
1428{$endif}
1429
1430{$ifndef __HASCONTEXT__}
1431  { MWE: placeholder so it won't break compilation on others (CPUARM ?) }
1432  type
1433     CONTEXT = record
1434       end;
1435{$endif}
1436
1437{$undef __HASCONTEXT__}
1438
1439     LPCONTEXT = ^CONTEXT;
1440     _CONTEXT = CONTEXT;
1441     TCONTEXT = CONTEXT;
1442     PCONTEXT = ^CONTEXT;
1443
1444  type
1445
1446     LIST_ENTRY = record
1447          Flink : ^_LIST_ENTRY;
1448          Blink : ^_LIST_ENTRY;
1449       end;
1450     _LIST_ENTRY = LIST_ENTRY;
1451     TLISTENTRY = LIST_ENTRY;
1452     PLISTENTRY = ^LIST_ENTRY;
1453
1454     CRITICAL_SECTION_DEBUG = record
1455          _Type : WORD;
1456          CreatorBackTraceIndex : WORD;
1457          CriticalSection : ^_CRITICAL_SECTION;
1458          ProcessLocksList : LIST_ENTRY;
1459          EntryCount : DWORD;
1460          ContentionCount : DWORD;
1461          Depth : DWORD;
1462          OwnerBackTrace : array[0..4] of PVOID;
1463       end;
1464     LPCRITICAL_SECTION_DEBUG = ^CRITICAL_SECTION_DEBUG;
1465     PCRITICAL_SECTION_DEBUG = ^CRITICAL_SECTION_DEBUG;
1466     _CRITICAL_SECTION_DEBUG = CRITICAL_SECTION_DEBUG;
1467     TCRITICALSECTIONDEBUG = CRITICAL_SECTION_DEBUG;
1468     PCRITICALSECTIONDEBUG = ^CRITICAL_SECTION_DEBUG;
1469
1470     CRITICAL_SECTION = TRTLCriticalSection;
1471     _CRITICAL_SECTION = TRTLCriticalSection;
1472     TCRITICAL_SECTION = TRTLCriticalSection;
1473     PCRITICAL_SECTION = PRTLCriticalSection;
1474     LPCRITICAL_SECTION = PRTLCriticalSection;
1475     TCRITICALSECTION = TRTLCriticalSection;
1476     PCRITICALSECTION = PRTLCriticalSection;
1477
1478  { SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode;  }
1479
1480     SECURITY_QUALITY_OF_SERVICE = record
1481          Length : DWORD;
1482          ImpersonationLevel : SECURITY_IMPERSONATION_LEVEL;
1483          ContextTrackingMode : BOOLEAN;    // SECURITY_CONTEXT_TRACKING_MODE
1484          EffectiveOnly : BOOLEAN;
1485       end;
1486     PSECURITY_QUALITY_OF_SERVICE = ^SECURITY_QUALITY_OF_SERVICE;
1487     _SECURITY_QUALITY_OF_SERVICE = SECURITY_QUALITY_OF_SERVICE;
1488     TSECURITYQUALITYOFSERVICE = SECURITY_QUALITY_OF_SERVICE;
1489     PSECURITYQUALITYOFSERVICE = ^SECURITY_QUALITY_OF_SERVICE;
1490
1491     CONVCONTEXT = record
1492          cb : UINT;
1493          wFlags : UINT;
1494          wCountryID : UINT;
1495          iCodePage : longint;
1496          dwLangID : DWORD;
1497          dwSecurity : DWORD;
1498          qos : SECURITY_QUALITY_OF_SERVICE;
1499       end;
1500     tagCONVCONTEXT = CONVCONTEXT;
1501     TCONVCONTEXT = CONVCONTEXT;
1502     PCONVCONTEXT = ^CONVCONTEXT;
1503
1504     CONVINFO = record
1505          cb : DWORD;
1506          hUser : DWORD;
1507          hConvPartner : HCONV;
1508          hszSvcPartner : HSZ;
1509          hszServiceReq : HSZ;
1510          hszTopic : HSZ;
1511          hszItem : HSZ;
1512          wFmt : UINT;
1513          wType : UINT;
1514          wStatus : UINT;
1515          wConvst : UINT;
1516          wLastError : UINT;
1517          hConvList : HCONVLIST;
1518          ConvCtxt : CONVCONTEXT;
1519          _hwnd : HWND;
1520          hwndPartner : HWND;
1521       end;
1522     tagCONVINFO = CONVINFO;
1523     TCONVINFO = CONVINFO;
1524     PCONVINFO = ^CONVINFO;
1525
1526     COPYDATASTRUCT = record
1527          dwData : ULONG_PTR;
1528          cbData : DWORD;
1529          lpData : PVOID;
1530       end;
1531     tagCOPYDATASTRUCT = COPYDATASTRUCT;
1532     TCOPYDATASTRUCT = COPYDATASTRUCT;
1533     PCOPYDATASTRUCT = ^COPYDATASTRUCT;
1534
1535     CPINFO = record
1536          MaxCharSize : UINT;
1537          DefaultChar : array[0..(MAX_DEFAULTCHAR)-1] of BYTE;
1538          LeadByte : array[0..(MAX_LEADBYTES)-1] of BYTE;
1539       end;
1540     LPCPINFO = ^CPINFO;
1541     _cpinfo = CPINFO;
1542     Tcpinfo = CPINFO;
1543     Pcpinfo = ^CPINFO;
1544
1545     CPINFOEXA = record
1546        MaxCharSize    : UINT;
1547        DefaultChar    : array[0..(MAX_DEFAULTCHAR)-1] of BYTE;
1548        LeadByte       : array[0..(MAX_LEADBYTES)-1] of BYTE;
1549        DefaultUnicode : WCHAR;
1550        CodePage       : UINT;
1551        CodePageName   : array[0..(MAX_PATH)-1] of CHAR;
1552      end;
1553     LPCPINFOEXA = ^CPINFOEXA;
1554     _cpinfoexA  = CPINFOEXA;
1555     TcpinfoexA  = CPINFOEXA;
1556     PcpinfoexA  = ^CPINFOEXA;
1557
1558     CPINFOEXW = record
1559        MaxCharSize    : UINT;
1560        DefaultChar    : array[0..(MAX_DEFAULTCHAR)-1] of BYTE;
1561        LeadByte       : array[0..(MAX_LEADBYTES)-1] of BYTE;
1562        DefaultUnicode : WCHAR;
1563        CodePage       : UINT;
1564        CodePageName   : array[0..(MAX_PATH)-1] of WCHAR;
1565     end;
1566     LPCPINFOEXW = ^CPINFOEXW;
1567     _cpinfoexW  = CPINFOEXW;
1568     TcpinfoexW  = CPINFOEXW;
1569     PcpinfoexW  = ^CPINFOEXW;
1570
1571{$ifndef UNICODE}
1572     CPINFOEX   = CPINFOEXA;
1573     LPCPINFOEX = PCPINFOEXA;
1574     _cpinfoex  = CPINFOEXA;
1575     Tcpinfoex  = CPINFOEXA;
1576     Pcpinfoex  = PCPINFOEXA;
1577{$ELSE}
1578     CPINFOEX   = CPINFOEXW;
1579     LPCPINFOEX = PCPINFOEXW;
1580     _cpinfoex  = CPINFOEXW;
1581     Tcpinfoex  = CPINFOEXW;
1582     Pcpinfoex  = PCPINFOEXW;
1583{$ENDIF}
1584
1585     CPLINFO = record
1586          idIcon : longint;
1587          idName : longint;
1588          idInfo : longint;
1589          lData : LONG_PTR;
1590       end;
1591     tagCPLINFO = CPLINFO;
1592     TCPLINFO = CPLINFO;
1593     PCPLINFO = ^CPLINFO;
1594
1595     CREATE_PROCESS_DEBUG_INFO = record
1596          hFile : HANDLE;
1597          hProcess : HANDLE;
1598          hThread : HANDLE;
1599          lpBaseOfImage : LPVOID;
1600          dwDebugInfoFileOffset : DWORD;
1601          nDebugInfoSize : DWORD;
1602          lpThreadLocalBase : LPVOID;
1603          lpStartAddress : LPTHREAD_START_ROUTINE;
1604          lpImageName : LPVOID;
1605          fUnicode : WORD;
1606       end;
1607     _CREATE_PROCESS_DEBUG_INFO = CREATE_PROCESS_DEBUG_INFO;
1608     TCREATEPROCESSDEBUGINFO = CREATE_PROCESS_DEBUG_INFO;
1609     PCREATEPROCESSDEBUGINFO = ^CREATE_PROCESS_DEBUG_INFO;
1610
1611     CREATE_THREAD_DEBUG_INFO = record
1612          hThread : HANDLE;
1613          lpThreadLocalBase : LPVOID;
1614          lpStartAddress : LPTHREAD_START_ROUTINE;
1615       end;
1616     _CREATE_THREAD_DEBUG_INFO = CREATE_THREAD_DEBUG_INFO;
1617     TCREATETHREADDEBUGINFO = CREATE_THREAD_DEBUG_INFO;
1618     PCREATETHREADDEBUGINFO = ^CREATE_THREAD_DEBUG_INFO;
1619
1620     CURRENCYFMTA = record
1621          NumDigits     : UINT;
1622          LeadingZero   : UINT;
1623          Grouping      : UINT;
1624          lpDecimalSep  : LPSTR;
1625          lpThousandSep : LPSTR;
1626          NegativeOrder : UINT;
1627          PositiveOrder : UINT;
1628          lpCurrencySymbol : LPSTR;
1629       end;
1630     _currencyfmtA = CURRENCYFMTA;
1631     TcurrencyfmtA = CURRENCYFMTA;
1632     PcurrencyfmtA = ^CURRENCYFMTA;
1633
1634     CURRENCYFMTW = record
1635          NumDigits     : UINT;
1636          LeadingZero   : UINT;
1637          Grouping      : UINT;
1638          lpDecimalSep  : LPWSTR;
1639          lpThousandSep : LPWSTR;
1640          NegativeOrder : UINT;
1641          PositiveOrder : UINT;
1642          lpCurrencySymbol : LPWSTR;
1643       end;
1644
1645     _CURRENCYFMTW = CURRENCYFMTW;
1646     TCURRENCYFMTW = CURRENCYFMTW;
1647     PCURRENCYFMTW = ^CURRENCYFMTW;
1648
1649     {$ifdef Unicode}
1650     _CURRENCYFMT  = CURRENCYFMTW;
1651     CURRENCYFMT   = CURRENCYFMTW;
1652     TCURRENCYFMT  = CURRENCYFMTW;
1653     PCURRENCYFMT  = ^CURRENCYFMTW;
1654     {$else}
1655     _CURRENCYFMT  = CURRENCYFMTA;
1656     CURRENCYFMT   = CURRENCYFMTA;
1657     TCURRENCYFMT  = CURRENCYFMTA;
1658     PCURRENCYFMT  = ^CURRENCYFMTA;
1659     {$endif}
1660
1661     CURSORSHAPE = record
1662          xHotSpot : longint;
1663          yHotSpot : longint;
1664          cx : longint;
1665          cy : longint;
1666          cbWidth : longint;
1667          Planes : BYTE;
1668          BitsPixel : BYTE;
1669       end;
1670     LPCURSORSHAPE = ^CURSORSHAPE;
1671     tagCURSORSHAPE = CURSORSHAPE;
1672     TCURSORSHAPE = CURSORSHAPE;
1673     PCURSORSHAPE = ^CURSORSHAPE;
1674
1675     CWPRETSTRUCT = record
1676          lResult : LRESULT;
1677          lParam : LPARAM;
1678          wParam : WPARAM;
1679          message : DWORD;
1680          hwnd : HWND;
1681       end;
1682     tagCWPRETSTRUCT = CWPRETSTRUCT;
1683     TCWPRETSTRUCT = CWPRETSTRUCT;
1684     PCWPRETSTRUCT = ^CWPRETSTRUCT;
1685
1686     CWPSTRUCT = record
1687          lParam : LPARAM;
1688          wParam : WPARAM;
1689          message : UINT;
1690          hwnd : HWND;
1691       end;
1692     tagCWPSTRUCT = CWPSTRUCT;
1693     TCWPSTRUCT = CWPSTRUCT;
1694     PCWPSTRUCT = ^CWPSTRUCT;
1695
1696     DATATYPES_INFO_1 = record
1697          pName : LPTSTR;
1698       end;
1699     _DATATYPES_INFO_1 = DATATYPES_INFO_1;
1700     TDATATYPESINFO1 = DATATYPES_INFO_1;
1701     PDATATYPESINFO1 = ^DATATYPES_INFO_1;
1702
1703     DDEACK = record
1704          flag0 : word;
1705       end;
1706     TDDEACK = DDEACK;
1707     PDDEACK = ^DDEACK;
1708  const
1709     bm_DDEACK_bAppReturnCode = $FF;
1710     bp_DDEACK_bAppReturnCode = 0;
1711     bm_DDEACK_reserved = $3F00;
1712     bp_DDEACK_reserved = 8;
1713     bm_DDEACK_fBusy = $4000;
1714     bp_DDEACK_fBusy = 14;
1715     bm_DDEACK_fAck = $8000;
1716     bp_DDEACK_fAck = 15;
1717  function bAppReturnCode(var a : DDEACK) : word;
1718  procedure set_bAppReturnCode(var a : DDEACK; __bAppReturnCode : word);
1719  function reserved(var a : DDEACK) : word;
1720  procedure set_reserved(var a : DDEACK; __reserved : word);
1721  function fBusy(var a : DDEACK) : word;
1722  procedure set_fBusy(var a : DDEACK; __fBusy : word);
1723  function fAck(var a : DDEACK) : word;
1724  procedure set_fAck(var a : DDEACK; __fAck : word);
1725
1726  type
1727
1728     DDEADVISE = record
1729          flag0 : word;
1730          cfFormat : SHORT;
1731       end;
1732     TDDEADVISE = DDEADVISE;
1733     PDDEADVISE = ^DDEADVISE;
1734  const
1735     bm_DDEADVISE_reserved = $3FFF;
1736     bp_DDEADVISE_reserved = 0;
1737     bm_DDEADVISE_fDeferUpd = $4000;
1738     bp_DDEADVISE_fDeferUpd = 14;
1739     bm_DDEADVISE_fAckReq = $8000;
1740     bp_DDEADVISE_fAckReq = 15;
1741  function reserved(var a : DDEADVISE) : word;
1742  procedure set_reserved(var a : DDEADVISE; __reserved : word);
1743  function fDeferUpd(var a : DDEADVISE) : word;
1744  procedure set_fDeferUpd(var a : DDEADVISE; __fDeferUpd : word);
1745  function fAckReq(var a : DDEADVISE) : word;
1746  procedure set_fAckReq(var a : DDEADVISE; __fAckReq : word);
1747
1748  type
1749
1750     DDEDATA = record
1751          flag0 : word;
1752          cfFormat : SHORT;
1753          Value : array[0..0] of BYTE;
1754       end;
1755     PDDEDATA = ^DDEDATA;
1756  const
1757     bm_DDEDATA_unused = $FFF;
1758     bp_DDEDATA_unused = 0;
1759     bm_DDEDATA_fResponse = $1000;
1760     bp_DDEDATA_fResponse = 12;
1761     bm_DDEDATA_fRelease = $2000;
1762     bp_DDEDATA_fRelease = 13;
1763     bm_DDEDATA_reserved = $4000;
1764     bp_DDEDATA_reserved = 14;
1765     bm_DDEDATA_fAckReq = $8000;
1766     bp_DDEDATA_fAckReq = 15;
1767  function unused(var a : DDEDATA) : word;
1768  procedure set_unused(var a : DDEDATA; __unused : word);
1769  function fResponse(var a : DDEDATA) : word;
1770  procedure set_fResponse(var a : DDEDATA; __fResponse : word);
1771  function fRelease(var a : DDEDATA) : word;
1772  procedure set_fRelease(var a : DDEDATA; __fRelease : word);
1773  function reserved(var a : DDEDATA) : word;
1774  procedure set_reserved(var a : DDEDATA; __reserved : word);
1775  function fAckReq(var a : DDEDATA) : word;
1776  procedure set_fAckReq(var a : DDEDATA; __fAckReq : word);
1777
1778  type
1779
1780     DDELN = record
1781          flag0 : word;
1782          cfFormat : SHORT;
1783       end;
1784     TDDELN = DDELN;
1785     PDDELN = ^DDELN;
1786  const
1787     bm_DDELN_unused = $1FFF;
1788     bp_DDELN_unused = 0;
1789     bm_DDELN_fRelease = $2000;
1790     bp_DDELN_fRelease = 13;
1791     bm_DDELN_fDeferUpd = $4000;
1792     bp_DDELN_fDeferUpd = 14;
1793     bm_DDELN_fAckReq = $8000;
1794     bp_DDELN_fAckReq = 15;
1795  function unused(var a : DDELN) : word;
1796  procedure set_unused(var a : DDELN; __unused : word);
1797  function fRelease(var a : DDELN) : word;
1798  procedure set_fRelease(var a : DDELN; __fRelease : word);
1799  function fDeferUpd(var a : DDELN) : word;
1800  procedure set_fDeferUpd(var a : DDELN; __fDeferUpd : word);
1801  function fAckReq(var a : DDELN) : word;
1802  procedure set_fAckReq(var a : DDELN; __fAckReq : word);
1803
1804  type
1805
1806     DDEML_MSG_HOOK_DATA = record
1807          uiLo : UINT_PTR;
1808          uiHi : UINT_PTR;
1809          cbData : DWORD;
1810          Data : array[0..7] of DWORD;
1811       end;
1812     tagDDEML_MSG_HOOK_DATA = DDEML_MSG_HOOK_DATA;
1813     TDDEMLMSGHOOKDATA = DDEML_MSG_HOOK_DATA;
1814     PDDEMLMSGHOOKDATA = ^DDEML_MSG_HOOK_DATA;
1815
1816     DDEPOKE = record
1817          flag0 : word;
1818          cfFormat : SHORT;
1819          Value : array[0..0] of BYTE;
1820       end;
1821     TDDEPOKE = DDEPOKE;
1822     PDDEPOKE = ^DDEPOKE;
1823  const
1824     bm_DDEPOKE_unused = $1FFF;
1825     bp_DDEPOKE_unused = 0;
1826     bm_DDEPOKE_fRelease = $2000;
1827     bp_DDEPOKE_fRelease = 13;
1828     bm_DDEPOKE_fReserved = $C000;
1829     bp_DDEPOKE_fReserved = 14;
1830  function unused(var a : DDEPOKE) : word;
1831  procedure set_unused(var a : DDEPOKE; __unused : word);
1832  function fRelease(var a : DDEPOKE) : word;
1833  procedure set_fRelease(var a : DDEPOKE; __fRelease : word);
1834  function fReserved(var a : DDEPOKE) : word;
1835  procedure set_fReserved(var a : DDEPOKE; __fReserved : word);
1836
1837  type
1838
1839     DDEUP = record
1840          flag0 : word;
1841          cfFormat : SHORT;
1842          rgb : array[0..0] of BYTE;
1843       end;
1844     TDDEUP = DDEUP;
1845     PDDEUP = ^DDEUP;
1846  const
1847     bm_DDEUP_unused = $FFF;
1848     bp_DDEUP_unused = 0;
1849     bm_DDEUP_fAck = $1000;
1850     bp_DDEUP_fAck = 12;
1851     bm_DDEUP_fRelease = $2000;
1852     bp_DDEUP_fRelease = 13;
1853     bm_DDEUP_fReserved = $4000;
1854     bp_DDEUP_fReserved = 14;
1855     bm_DDEUP_fAckReq = $8000;
1856     bp_DDEUP_fAckReq = 15;
1857  function unused(var a : DDEUP) : word;
1858  procedure set_unused(var a : DDEUP; __unused : word);
1859  function fAck(var a : DDEUP) : word;
1860  procedure set_fAck(var a : DDEUP; __fAck : word);
1861  function fRelease(var a : DDEUP) : word;
1862  procedure set_fRelease(var a : DDEUP; __fRelease : word);
1863  function fReserved(var a : DDEUP) : word;
1864  procedure set_fReserved(var a : DDEUP; __fReserved : word);
1865  function fAckReq(var a : DDEUP) : word;
1866  procedure set_fAckReq(var a : DDEUP; __fAckReq : word);
1867
1868  type
1869
1870     EXCEPTION_RECORD = record
1871          ExceptionCode : DWORD;
1872          ExceptionFlags : DWORD;
1873          ExceptionRecord : ^_EXCEPTION_RECORD;
1874          ExceptionAddress : PVOID;
1875          NumberParameters : DWORD;
1876          ExceptionInformation : array[0..(EXCEPTION_MAXIMUM_PARAMETERS)-1] of ULONG_PTR;
1877       end;
1878     PEXCEPTION_RECORD = ^EXCEPTION_RECORD;
1879     _EXCEPTION_RECORD = EXCEPTION_RECORD;
1880     TEXCEPTIONRECORD = EXCEPTION_RECORD;
1881     PEXCEPTIONRECORD = ^EXCEPTION_RECORD;
1882
1883     EXCEPTION_DEBUG_INFO = record
1884          ExceptionRecord : EXCEPTION_RECORD;
1885          dwFirstChance : DWORD;
1886       end;
1887     PEXCEPTION_DEBUG_INFO = ^EXCEPTION_DEBUG_INFO;
1888     _EXCEPTION_DEBUG_INFO = EXCEPTION_DEBUG_INFO;
1889     TEXCEPTIONDEBUGINFO = EXCEPTION_DEBUG_INFO;
1890     PEXCEPTIONDEBUGINFO = ^EXCEPTION_DEBUG_INFO;
1891
1892     { Explicit forms to debug targets running on a different architecture (32-bit versus 64-bit)}
1893
1894     EXCEPTION_RECORD32 = record
1895          ExceptionCode : DWORD;
1896          ExceptionFlags : DWORD;
1897          ExceptionRecord : DWORD;
1898          ExceptionAddress : DWORD;
1899          NumberParameters : DWORD;
1900          ExceptionInformation : array[0..(EXCEPTION_MAXIMUM_PARAMETERS)-1] of DWORD;
1901       end;
1902     PEXCEPTION_RECORD32 = ^EXCEPTION_RECORD32;
1903     _EXCEPTION_RECORD32 = EXCEPTION_RECORD32;
1904     TExceptionRecord32 = EXCEPTION_RECORD32;
1905     PExceptionRecord32 = ^EXCEPTION_RECORD32;
1906
1907     EXCEPTION_DEBUG_INFO32 = record
1908          ExceptionRecord : EXCEPTION_RECORD32;
1909          dwFirstChance : DWORD;
1910       end;
1911     PEXCEPTION_DEBUG_INFO32 = ^EXCEPTION_DEBUG_INFO32;
1912     _EXCEPTION_DEBUG_INFO32 = EXCEPTION_DEBUG_INFO32;
1913     TExceptionDebugInfo32 = EXCEPTION_DEBUG_INFO32;
1914     PExceptionDebugInfo32 = ^EXCEPTION_DEBUG_INFO32;
1915
1916     EXCEPTION_RECORD64 = record
1917          ExceptionCode : DWORD;
1918          ExceptionFlags : DWORD;
1919          ExceptionRecord : DWORD64;
1920          ExceptionAddress : DWORD64;
1921          NumberParameters : DWORD;
1922          __unusedAlignment : DWORD;
1923          ExceptionInformation : array[0..(EXCEPTION_MAXIMUM_PARAMETERS)-1] of DWORD64;
1924       end;
1925     PEXCEPTION_RECORD64 = ^EXCEPTION_RECORD64;
1926     _EXCEPTION_RECORD64 = EXCEPTION_RECORD64;
1927     TExceptionRecord64 = EXCEPTION_RECORD64;
1928     PExceptionRecord64 = ^EXCEPTION_RECORD64;
1929
1930     EXCEPTION_DEBUG_INFO64 = record
1931          ExceptionRecord : EXCEPTION_RECORD64;
1932          dwFirstChance : DWORD;
1933       end;
1934     PEXCEPTION_DEBUG_INFO64 = ^EXCEPTION_DEBUG_INFO64;
1935     _EXCEPTION_DEBUG_INFO64 = EXCEPTION_DEBUG_INFO64;
1936     TExceptionDebugInfo64 = EXCEPTION_DEBUG_INFO64;
1937     PExceptionDebugInfo64 = ^EXCEPTION_DEBUG_INFO64;
1938
1939     EXIT_PROCESS_DEBUG_INFO = record
1940          dwExitCode : DWORD;
1941       end;
1942     _EXIT_PROCESS_DEBUG_INFO = EXIT_PROCESS_DEBUG_INFO;
1943     TEXITPROCESSDEBUGINFO = EXIT_PROCESS_DEBUG_INFO;
1944     PEXITPROCESSDEBUGINFO = ^EXIT_PROCESS_DEBUG_INFO;
1945
1946
1947     EXIT_THREAD_DEBUG_INFO = record
1948          dwExitCode : DWORD;
1949       end;
1950     _EXIT_THREAD_DEBUG_INFO = EXIT_THREAD_DEBUG_INFO;
1951     TEXITTHREADDEBUGINFO = EXIT_THREAD_DEBUG_INFO;
1952     PEXITTHREADDEBUGINFO = ^EXIT_THREAD_DEBUG_INFO;
1953
1954     LOAD_DLL_DEBUG_INFO = record
1955          hFile : HANDLE;
1956          lpBaseOfDll : LPVOID;
1957          dwDebugInfoFileOffset : DWORD;
1958          nDebugInfoSize : DWORD;
1959          lpImageName : LPVOID;
1960          fUnicode : WORD;
1961       end;
1962     _LOAD_DLL_DEBUG_INFO = LOAD_DLL_DEBUG_INFO;
1963     TLOADDLLDEBUGINFO = LOAD_DLL_DEBUG_INFO;
1964     PLOADDLLDEBUGINFO = ^LOAD_DLL_DEBUG_INFO;
1965
1966     UNLOAD_DLL_DEBUG_INFO = record
1967          lpBaseOfDll : LPVOID;
1968       end;
1969     _UNLOAD_DLL_DEBUG_INFO = UNLOAD_DLL_DEBUG_INFO;
1970     TUNLOADDLLDEBUGINFO = UNLOAD_DLL_DEBUG_INFO;
1971     PUNLOADDLLDEBUGINFO = ^UNLOAD_DLL_DEBUG_INFO;
1972
1973     OUTPUT_DEBUG_STRING_INFO = record
1974          lpDebugStringData : LPSTR;
1975          fUnicode : WORD;
1976          nDebugStringLength : WORD;
1977       end;
1978     _OUTPUT_DEBUG_STRING_INFO = OUTPUT_DEBUG_STRING_INFO;
1979     TOUTPUTDEBUGSTRINGINFO = OUTPUT_DEBUG_STRING_INFO;
1980     POUTPUTDEBUGSTRINGINFO = ^OUTPUT_DEBUG_STRING_INFO;
1981
1982     RIP_INFO = record
1983          dwError : DWORD;
1984          dwType : DWORD;
1985       end;
1986     _RIP_INFO = RIP_INFO;
1987     TRIPINFO = RIP_INFO;
1988     PRIPINFO = ^RIP_INFO;
1989
1990     DEBUG_EVENT = record
1991          dwDebugEventCode : DWORD;
1992          dwProcessId : DWORD;
1993          dwThreadId : DWORD;
1994              case longint of
1995                 0 : ( Exception : EXCEPTION_DEBUG_INFO );
1996                 1 : ( CreateThread : CREATE_THREAD_DEBUG_INFO );
1997                 2 : ( CreateProcessInfo : CREATE_PROCESS_DEBUG_INFO );
1998                 3 : ( ExitThread : EXIT_THREAD_DEBUG_INFO );
1999                 4 : ( ExitProcess : EXIT_PROCESS_DEBUG_INFO );
2000                 5 : ( LoadDll : LOAD_DLL_DEBUG_INFO );
2001                 6 : ( UnloadDll : UNLOAD_DLL_DEBUG_INFO );
2002                 7 : ( DebugString : OUTPUT_DEBUG_STRING_INFO );
2003                 8 : ( RipInfo : RIP_INFO );
2004       end;
2005     LPDEBUG_EVENT = ^DEBUG_EVENT;
2006     _DEBUG_EVENT = DEBUG_EVENT;
2007     TDEBUGEVENT = DEBUG_EVENT;
2008     PDEBUGEVENT = ^DEBUG_EVENT;
2009
2010     DEBUGHOOKINFO = record
2011          idThread : DWORD;
2012          idThreadInstaller : DWORD;
2013          lParam : LPARAM;
2014          wParam : WPARAM;
2015          code : longint;
2016       end;
2017     tagDEBUGHOOKINFO = DEBUGHOOKINFO;
2018     TDEBUGHOOKINFO = DEBUGHOOKINFO;
2019     PDEBUGHOOKINFO = ^DEBUGHOOKINFO;
2020
2021     DELETEITEMSTRUCT = record
2022          CtlType : UINT;
2023          CtlID : UINT;
2024          itemID : UINT;
2025          hwndItem : HWND;
2026          itemData : ULONG_PTR;
2027       end;
2028     tagDELETEITEMSTRUCT = DELETEITEMSTRUCT;
2029     TDELETEITEMSTRUCT = DELETEITEMSTRUCT;
2030     PDELETEITEMSTRUCT = ^DELETEITEMSTRUCT;
2031
2032     DEV_BROADCAST_HDR = record
2033          dbch_size : ULONG;
2034          dbch_devicetype : ULONG;
2035          dbch_reserved : ULONG;
2036       end;
2037     PDEV_BROADCAST_HDR = ^DEV_BROADCAST_HDR;
2038     _DEV_BROADCAST_HDR = DEV_BROADCAST_HDR;
2039     TDEVBROADCASTHDR = DEV_BROADCAST_HDR;
2040     PDEVBROADCASTHDR = ^DEV_BROADCAST_HDR;
2041
2042     DEV_BROADCAST_OEM = record
2043          dbco_size : DWORD;
2044          dbco_devicetype : DWORD;
2045          dbco_reserved : DWORD;
2046          dbco_identifier : DWORD;
2047          dbco_suppfunc : DWORD;
2048       end;
2049     PDEV_BROADCAST_OEM = ^DEV_BROADCAST_OEM;
2050     _DEV_BROADCAST_OEM = DEV_BROADCAST_OEM;
2051     TDEVBROADCASTOEM = DEV_BROADCAST_OEM;
2052     PDEVBROADCASTOEM = ^DEV_BROADCAST_OEM;
2053
2054     DEV_BROADCAST_PORT = record
2055          dbcp_size : DWORD;
2056          dbcp_devicetype : DWORD;
2057          dbcp_reserved : DWORD;
2058          dbcp_name : array[0..0] of TCHAR;
2059       end;
2060     PDEV_BROADCAST_PORT = ^DEV_BROADCAST_PORT;
2061     _DEV_BROADCAST_PORT = DEV_BROADCAST_PORT;
2062     TDEVBROADCASTPORT = DEV_BROADCAST_PORT;
2063     PDEVBROADCASTPORT = ^DEV_BROADCAST_PORT;
2064
2065     _DEV_BROADCAST_USERDEFINED = record
2066          dbud_dbh : _DEV_BROADCAST_HDR;
2067          dbud_szName : array[0..0] of char;
2068          dbud_rgbUserDefined : array[0..0] of BYTE;
2069       end;
2070     TDEVBROADCASTUSERDEFINED = _DEV_BROADCAST_USERDEFINED;
2071     PDEVBROADCASTUSERDEFINED = ^_DEV_BROADCAST_USERDEFINED;
2072
2073     DEV_BROADCAST_VOLUME = record
2074          dbcv_size : DWORD;
2075          dbcv_devicetype : DWORD;
2076          dbcv_reserved : DWORD;
2077          dbcv_unitmask : DWORD;
2078          dbcv_flags : WORD;
2079       end;
2080     PDEV_BROADCAST_VOLUME = ^DEV_BROADCAST_VOLUME;
2081     _DEV_BROADCAST_VOLUME = DEV_BROADCAST_VOLUME;
2082     TDEVBROADCASTVOLUME = DEV_BROADCAST_VOLUME;
2083     PDEVBROADCASTVOLUME = ^DEV_BROADCAST_VOLUME;
2084
2085     DEVMODEA = record
2086          dmDeviceName : array[0..(CCHDEVICENAME)-1] of AnsiChar;
2087          dmSpecVersion : WORD;
2088          dmDriverVersion : WORD;
2089          dmSize : WORD;
2090          dmDriverExtra : WORD;
2091          dmFields : DWORD;
2092          case byte of
2093            1: (dmOrientation : SmallInt;
2094                dmPaperSize : SmallInt;
2095                dmPaperLength : SmallInt;
2096                dmPaperWidth : SmallInt;
2097                dmScale : SmallInt;
2098                dmCopies : SmallInt;
2099                dmDefaultSource : SmallInt;
2100                dmPrintQuality : SmallInt;
2101                dmColor : SmallInt;
2102                dmDuplex : SmallInt;
2103                dmYResolution : SmallInt;
2104                dmTTOption : SmallInt;
2105                dmCollate : SmallInt;
2106                dmFormName : array[0..(CCHFORMNAME)-1] of AnsiCHAR;
2107                dmLogPixels : WORD;
2108                dmBitsPerPel : DWORD;
2109                dmPelsWidth : DWORD;
2110                dmPelsHeight : DWORD;
2111                dmDisplayFlags : DWORD;
2112                dmDisplayFrequency : DWORD;
2113                dmICMMethod : DWORD;
2114                dmICMIntent : DWORD;
2115                dmMediaType : DWORD;
2116                dmDitherType : DWORD;
2117                dmICCManufacturer : DWORD;
2118                dmICCModel : DWORD
2119               );
2120            2: (dmPosition: POINTL;
2121                dmDisplayOrientation: DWORD;
2122                dmDisplayFixedOutput: DWORD;
2123               );
2124       end;
2125
2126     LPDEVMODEA = ^DEVMODEA;
2127     _DEVMODEA  = DEVMODEA;
2128     TDEVMODEA  = DEVMODEA;
2129     PDEVMODEA  = LPDEVMODEA;
2130
2131     _devicemodeA = DEVMODEA;
2132     devicemodeA  = DEVMODEA;
2133     tdevicemodeA = DEVMODEA;
2134     PDeviceModeA = LPDEVMODEA;
2135
2136     devmodeW   = record
2137                     dmDeviceName   : array[0.. CCHDEVICENAME-1] of WCHAR;
2138                     dmSpecVersion  : WORD;
2139                     dmDriverVersion: WORD;
2140                     dmSize        : WORD;
2141                     dmDriverExtra  : WORD;
2142                     dmFields       : DWORD;
2143                     case byte of
2144                  1: (
2145                     dmOrientation  : short;
2146                     dmPaperSize    : short;
2147                     dmPaperLength  : short;
2148                     dmPaperWidth   : short;
2149                     dmScale       : short;
2150                     dmCopies      : short;
2151                     dmDefaultSource: short;
2152                     dmPrintQuality : short;
2153                     dmColor       : short;
2154                     dmDuplex      : short;
2155                     dmYResolution  : short;
2156                     dmTTOption    : short;
2157                     dmCollate     : short;
2158                     dmFormName     : array [0..CCHFORMNAME-1] of wchar;
2159                     dmLogPixels    : WORD;
2160                     dmBitsPerPel   : DWORD;
2161                     dmPelsWidth    : DWORD;
2162                     dmPelsHeight   : DWORD;
2163                     dmDisplayFlags : DWORD;
2164                     dmDisplayFrequency     : DWORD;
2165                     dmICMMethod    : DWORD;
2166                     dmICMIntent    : DWORD;
2167                     dmMediaType    : DWORD;
2168                     dmDitherType   : DWORD;
2169                     dmReserved1    : DWORD;
2170                     dmReserved2    : DWORD;
2171                     dmPanningWidth : DWORD;
2172                     dmPanningHeight: DWORD;
2173                     );
2174                  2: (dmPosition: POINTL;
2175                      dmDisplayOrientation: DWORD;
2176                      dmDisplayFixedOutput: DWORD;
2177                     );
2178                   end;
2179
2180     LPDEVMODEW   = ^DEVMODEW;
2181     _DEVMODEW    = DEVMODEW;
2182     TDEVMODEW    = DEVMODEW;
2183     PDEVMODEW    = LPDEVMODEW;
2184
2185     _devicemodeW = DEVMODEW;
2186     devicemodeW  = DEVMODEW;
2187     TDeviceModeW = DEVMODEW;
2188     PDeviceModeW = LPDEVMODEW;
2189
2190
2191    {$IFNDEF UNICODE}
2192      DEVMODE      = DEVMODEA;
2193      LPDEVMODE    = ^DEVMODEA;
2194      _DEVMODE     = DEVMODEA;
2195      TDEVMODE     = DEVMODEA;
2196      PDEVMODE     = ^DEVMODEA;
2197    {$ELSE}
2198      DEVMODE      = DEVMODEW;
2199      LPDEVMODE    = ^DEVMODEW;
2200      _DEVMODE     = DEVMODEW;
2201      TDEVMODE     = DEVMODEW;
2202      PDEVMODE     = ^DEVMODEW;
2203    {$ENDIF}
2204
2205    _devicemode  = DEVMODE;
2206    DeviceMode   = DEVMODE;
2207    TDeviceMode  = DEVMODE;
2208    PDeviceMode  = ^DEVMODE;
2209
2210     DEVNAMES = record
2211          wDriverOffset : WORD;
2212          wDeviceOffset : WORD;
2213          wOutputOffset : WORD;
2214          wDefault : WORD;
2215       end;
2216     LPDEVNAMES = ^DEVNAMES;
2217     tagDEVNAMES = DEVNAMES;
2218     TDEVNAMES = DEVNAMES;
2219     PDEVNAMES = ^DEVNAMES;
2220
2221     DIBSECTION = record
2222          dsBm : BITMAP;
2223          dsBmih : BITMAPINFOHEADER;
2224          dsBitfields : array[0..2] of DWORD;
2225          dshSection : HANDLE;
2226          dsOffset : DWORD;
2227       end;
2228     tagDIBSECTION = DIBSECTION;
2229     TDIBSECTION = DIBSECTION;
2230     PDIBSECTION = ^DIBSECTION;
2231
2232     LARGE_INTEGER = record
2233        case byte of
2234          0: (LowPart : DWORD;
2235              HighPart : LONG);
2236          1: (QuadPart : LONGLONG);
2237       end;
2238     PLARGE_INTEGER = ^LARGE_INTEGER;
2239     _LARGE_INTEGER = LARGE_INTEGER;
2240
2241     TLargeInteger = Int64;
2242     PLargeInteger = ^TLargeInteger;
2243
2244     ULARGE_INTEGER = record
2245        case byte of
2246          0: (LowPart : DWORD;
2247              HighPart : DWORD);
2248          1: (QuadPart : ULONGLONG);
2249       end;
2250     PULARGE_INTEGER = ^ULARGE_INTEGER;
2251     _ULARGE_INTEGER = ULARGE_INTEGER;
2252
2253     TULargeInteger = QWord;
2254     PULargeInteger = ^TULargeInteger;
2255
2256     DISK_GEOMETRY = record
2257          Cylinders : LARGE_INTEGER;
2258          MediaType : MEDIA_TYPE;
2259          TracksPerCylinder : DWORD;
2260          SectorsPerTrack : DWORD;
2261          BytesPerSector : DWORD;
2262       end;
2263     _DISK_GEOMETRY = DISK_GEOMETRY;
2264     TDISKGEOMETRY = DISK_GEOMETRY;
2265     PDISKGEOMETRY = ^DISK_GEOMETRY;
2266
2267     DISK_PERFORMANCE = record
2268          BytesRead : LARGE_INTEGER;
2269          BytesWritten : LARGE_INTEGER;
2270          ReadTime : LARGE_INTEGER;
2271          WriteTime : LARGE_INTEGER;
2272          IdleTime : LARGE_INTEGER;
2273          ReadCount : DWORD;
2274          WriteCount : DWORD;
2275          QueueDepth : DWORD;
2276          SplitCount : DWORD;
2277          QueryTime : LARGE_INTEGER;
2278          StorageDeviceNumber : DWORD;
2279          StorageManagerName : array [0..7] of WCHAR;
2280       end;
2281     _DISK_PERFORMANCE = DISK_PERFORMANCE;
2282     TDISKPERFORMANCE = DISK_PERFORMANCE;
2283     PDISKPERFORMANCE = ^DISK_PERFORMANCE;
2284
2285     DLGITEMTEMPLATE = packed record
2286          style : DWORD;
2287          dwExtendedStyle : DWORD;
2288          x : smallint;
2289          y : smallint;
2290          cx : smallint;
2291          cy : smallint;
2292          id : WORD;
2293       end;
2294     LPDLGITEMTEMPLATE = ^DLGITEMTEMPLATE;
2295     TDLGITEMTEMPLATE = DLGITEMTEMPLATE;
2296     PDLGITEMTEMPLATE = ^DLGITEMTEMPLATE;
2297
2298     DLGTEMPLATE = packed record
2299          style : DWORD;
2300          dwExtendedStyle : DWORD;
2301          cdit : WORD;
2302          x : smallint;
2303          y : smallint;
2304          cx : smallint;
2305          cy : smallint;
2306       end;
2307     LPDLGTEMPLATE = ^DLGTEMPLATE;
2308     LPCDLGTEMPLATE = ^DLGTEMPLATE;
2309     TDLGTEMPLATE = DLGTEMPLATE;
2310     PDLGTEMPLATE = ^DLGTEMPLATE;
2311
2312     DOC_INFO_1 = record
2313          pDocName : LPTSTR;
2314          pOutputFile : LPTSTR;
2315          pDatatype : LPTSTR;
2316       end;
2317     _DOC_INFO_1 = DOC_INFO_1;
2318     TDOCINFO1 = DOC_INFO_1;
2319     PDOCINFO1 = ^DOC_INFO_1;
2320
2321     DOC_INFO_2 = record
2322          pDocName : LPTSTR;
2323          pOutputFile : LPTSTR;
2324          pDatatype : LPTSTR;
2325          dwMode : DWORD;
2326          JobId : DWORD;
2327       end;
2328     _DOC_INFO_2 = DOC_INFO_2;
2329     TDOCINFO2 = DOC_INFO_2;
2330     PDOCINFO2 = ^DOC_INFO_2;
2331
2332     DOCINFOA = record
2333          cbSize : longint;
2334          lpszDocName  : LPCSTR;
2335          lpszOutput   : LPCSTR;
2336          lpszDatatype : LPCSTR;
2337          fwType : DWORD;
2338       end;
2339     TDOCINFOA = DOCINFOA;
2340     PDOCINFOa = ^DOCINFOA;
2341
2342     DOCINFOW = record
2343          cbSize : longint;
2344          lpszDocName  : LPCWSTR;
2345          lpszOutput   : LPCWSTR;
2346          lpszDatatype : LPCWSTR;
2347          fwType : DWORD;
2348       end;
2349     TDOCINFOW = DOCINFOW;
2350     PDOCINFOW = ^DOCINFOW;
2351
2352     {$ifdef Unicode}
2353     DOCINFO   = DOCINFOW;
2354     TDOCINFO  = DOCINFOW;
2355     PDOCINFO  = ^DOCINFOW;
2356     {$else}
2357     DOCINFO   = DOCINFOA;
2358     TDOCINFO  = DOCINFOA;
2359     PDOCINFO  = ^DOCINFOA;
2360     {$endif}
2361
2362     DRAGLISTINFO = record
2363          uNotification : UINT;
2364          hWnd : HWND;
2365          ptCursor : POINT;
2366       end;
2367     LPDRAGLISTINFO = ^DRAGLISTINFO;
2368     TDRAGLISTINFO = DRAGLISTINFO;
2369     PDRAGLISTINFO = ^DRAGLISTINFO;
2370
2371     DRAWITEMSTRUCT = record
2372          CtlType : UINT;
2373          CtlID : UINT;
2374          itemID : UINT;
2375          itemAction : UINT;
2376          itemState : UINT;
2377          hwndItem : HWND;
2378          hDC : HDC;
2379          rcItem : RECT;
2380          itemData : ULONG_PTR;
2381       end;
2382     LPDRAWITEMSTRUCT = ^DRAWITEMSTRUCT;
2383     tagDRAWITEMSTRUCT = DRAWITEMSTRUCT;
2384     TDRAWITEMSTRUCT = DRAWITEMSTRUCT;
2385     PDRAWITEMSTRUCT = ^DRAWITEMSTRUCT;
2386
2387     DRAWTEXTPARAMS = record
2388          cbSize : UINT;
2389          iTabLength : longint;
2390          iLeftMargin : longint;
2391          iRightMargin : longint;
2392          uiLengthDrawn : UINT;
2393       end;
2394     LPDRAWTEXTPARAMS = ^DRAWTEXTPARAMS;
2395     TDRAWTEXTPARAMS = DRAWTEXTPARAMS;
2396     PDRAWTEXTPARAMS = ^DRAWTEXTPARAMS;
2397
2398     PARTITION_INFORMATION = record
2399          StartingOffset : LARGE_INTEGER;
2400          PartitionLength: LARGE_INTEGER;
2401          HiddenSectors  : DWORD;
2402	  PartitionNumber: DWORD;
2403          PartitionType  : BYTE;
2404	  BootIndicator       : BYTEBOOL;
2405          RecognizedPartition : BYTEBOOL;
2406          RewritePartition    : BYTEBOOL;
2407       end;
2408     _PARTITION_INFORMATION = PARTITION_INFORMATION;
2409     TPARTITIONINFORMATION = PARTITION_INFORMATION;
2410     PPARTITIONINFORMATION = ^PARTITION_INFORMATION;
2411
2412     PARTITION_INFORMATION_GPT = record
2413		                   PartitionType  : TGUID;
2414				   PartitionID    : TGUID;
2415				   Attributes     : DWORD64;
2416				   Name		  : array[0..35] OF WCHAR;
2417				  end;
2418     TPARTITION_INFORMATION_GPT= PARTITION_INFORMATION_GPT;
2419     PPARTITION_INFORMATION_GPT= ^PARTITION_INFORMATION_GPT;
2420
2421     PARTITION_INFORMATION_MBR = record
2422		                   PartitionType  : Byte;
2423				   BootIndicator  : ByteBool;
2424				   RecognizedPartition : ByteBool;
2425				   HiddenSectors  : DWORD;
2426				  end;
2427     TPARTITION_INFORMATION_MBR=  PARTITION_INFORMATION_MBR;
2428     PPARTITION_INFORMATION_MBR= ^PARTITION_INFORMATION_MBR;
2429
2430     SET_PARTITION_INFORMATION = record
2431          PartitionType : BYTE;
2432       end;
2433     _SET_PARTITION_INFORMATION = SET_PARTITION_INFORMATION;
2434     TSETPARTITIONINFORMATION = SET_PARTITION_INFORMATION;
2435     PSETPARTITIONINFORMATION = ^SET_PARTITION_INFORMATION;
2436
2437     SET_PARTITION_INFORMATION_MBR  = PARTITION_INFORMATION;
2438     TSET_PARTITION_INFORMATION_MBR = PARTITION_INFORMATION;
2439
2440     SET_PARTITION_INFORMATION_GPT  = PARTITION_INFORMATION_GPT;
2441     TSET_PARTITION_INFORMATION_GPT = PARTITION_INFORMATION_GPT;
2442
2443     SET_PARTITION_INFORMATION_EX   = record
2444                                      PartitionStyle : TPartition_Style;
2445				      case integer of
2446					0 : (mbr : SET_PARTITION_INFORMATION_MBR);
2447					1 : (GPT : SET_PARTITION_INFORMATION_GPT);
2448				      end;
2449     TSET_PARTITION_INFORMATION_EX  = SET_PARTITION_INFORMATION_EX;
2450     PSET_PARTITION_INFORMATION_EX  = ^SET_PARTITION_INFORMATION_EX;
2451
2452     CREATE_DISK_GPT = record
2453			 DiskID 	   : TGUID;
2454			 MaxPartitionCount : DWord;
2455		        end;
2456     TCREATE_DISK_GPT = CREATE_DISK_GPT;
2457     PCREATE_DISK_GPT = ^TCREATE_DISK_GPT;
2458
2459     CREATE_DISK_MBR = record
2460			 Signature 	   : DWord;
2461		        end;
2462     TCREATE_DISK_MBR = CREATE_DISK_MBR;
2463     PCREATE_DISK_MBR = ^TCREATE_DISK_MBR;
2464
2465     CREATE_DISK  = record
2466		       PartitionStyle : TPartition_Style;
2467		       case integer of
2468			 0: ( MBR : Create_Disk_MBR);
2469		         1: ( GPT : Create_Disk_GPT);
2470		      end;
2471     TCREATE_DISK = CREATE_DISK;
2472     PCREATE_DISK = ^TCREATE_DISK;
2473
2474     GET_LENGTH_INFORMATION = record
2475	                        Length : LARGE_INTEGER;
2476			      end;
2477     TGET_LENGTH_INFORMATION = GET_LENGTH_INFORMATION;
2478     PGET_LENGTH_INFORMATION = ^GET_LENGTH_INFORMATION;
2479
2480     PARTITION_INFORMATION_EX = record
2481	  PartitionStyle  : TPartition_Style;
2482          StartingOffset  : LARGE_INTEGER;
2483          PartitionLength : LARGE_INTEGER;
2484	  PartitionNumber : DWORD;
2485          RewritePartition: BYTEBOOL;
2486	  case integer of
2487	    0: ( MBR : PARTITION_INFORMATION_MBR);
2488	    1: ( GPT : PARTITION_INFORMATION_GPT);
2489       end;
2490     _PARTITION_INFORMATION_EX = PARTITION_INFORMATION_EX;
2491     TPARTITIONINFORMATION_EX  = PARTITION_INFORMATION_EX;
2492     PPARTITIONINFORMATION_EX  = ^PARTITION_INFORMATION_EX;
2493
2494     DRIVE_LAYOUT_INFORMATION = record
2495          PartitionCount : DWORD;
2496          Signature : DWORD;
2497          PartitionEntry : array[0..0] of PARTITION_INFORMATION;
2498       end;
2499     _DRIVE_LAYOUT_INFORMATION = DRIVE_LAYOUT_INFORMATION;
2500     TDRIVELAYOUTINFORMATION = DRIVE_LAYOUT_INFORMATION;
2501     PDRIVELAYOUTINFORMATION = ^DRIVE_LAYOUT_INFORMATION;
2502
2503     DRIVER_INFO_1 = record
2504          pName : LPTSTR;
2505       end;
2506     _DRIVER_INFO_1 = DRIVER_INFO_1;
2507     TDRIVERINFO1 = DRIVER_INFO_1;
2508     PDRIVERINFO1 = ^DRIVER_INFO_1;
2509
2510     DRIVER_INFO_2 = record
2511          cVersion : DWORD;
2512          pName : LPTSTR;
2513          pEnvironment : LPTSTR;
2514          pDriverPath : LPTSTR;
2515          pDataFile : LPTSTR;
2516          pConfigFile : LPTSTR;
2517       end;
2518     _DRIVER_INFO_2 = DRIVER_INFO_2;
2519     TDRIVERINFO2 = DRIVER_INFO_2;
2520     PDRIVERINFO2 = ^DRIVER_INFO_2;
2521
2522     DRIVER_INFO_3 = record
2523          cVersion : DWORD;
2524          pName : LPTSTR;
2525          pEnvironment : LPTSTR;
2526          pDriverPath : LPTSTR;
2527          pDataFile : LPTSTR;
2528          pConfigFile : LPTSTR;
2529          pHelpFile : LPTSTR;
2530          pDependentFiles : LPTSTR;
2531          pMonitorName : LPTSTR;
2532          pDefaultDataType : LPTSTR;
2533       end;
2534     _DRIVER_INFO_3 = DRIVER_INFO_3;
2535     TDRIVERINFO3 = DRIVER_INFO_3;
2536     PDRIVERINFO3 = ^DRIVER_INFO_3;
2537
2538     EDITSTREAM = record
2539          dwCookie : DWORD_PTR;
2540          dwError : DWORD;
2541          pfnCallback : EDITSTREAMCALLBACK;
2542       end;
2543     _editstream = EDITSTREAM;
2544     Teditstream = EDITSTREAM;
2545     Peditstream = ^EDITSTREAM;
2546
2547     EMR = record
2548          iType : DWORD;
2549          nSize : DWORD;
2550       end;
2551     tagEMR = EMR;
2552     TEMR = EMR;
2553     PEMR = ^EMR;
2554
2555     EMRANGLEARC = record
2556          emr : EMR;
2557          ptlCenter : POINTL;
2558          nRadius : DWORD;
2559          eStartAngle : Single;
2560          eSweepAngle : Single;
2561       end;
2562     tagEMRANGLEARC = EMRANGLEARC;
2563     TEMRANGLEARC = EMRANGLEARC;
2564     PEMRANGLEARC = ^EMRANGLEARC;
2565
2566     EMRARC = record
2567          emr : EMR;
2568          rclBox : RECTL;
2569          ptlStart : POINTL;
2570          ptlEnd : POINTL;
2571       end;
2572     tagEMRARC = EMRARC;
2573     TEMRARC = EMRARC;
2574     PEMRARC = ^EMRARC;
2575
2576     EMRARCTO = EMRARC;
2577     TEMRARCTO = EMRARC;
2578     PEMRARCTO = ^EMRARC;
2579
2580     EMRCHORD = EMRARC;
2581     TEMRCHORD = EMRARC;
2582     PEMRCHORD = ^EMRARC;
2583
2584     EMRPIE = EMRARC;
2585     TEMRPIE = EMRARC;
2586     PEMRPIE = ^EMRARC;
2587
2588     XFORM = record
2589          eM11 : Single;
2590          eM12 : Single;
2591          eM21 : Single;
2592          eM22 : Single;
2593          eDx : Single;
2594          eDy : Single;
2595       end;
2596     LPXFORM = ^XFORM;
2597     _XFORM = XFORM;
2598     TXFORM = XFORM;
2599     PXFORM = ^XFORM;
2600
2601     EMRBITBLT = record
2602          emr : EMR;
2603          rclBounds : RECTL;
2604          xDest : LONG;
2605          yDest : LONG;
2606          cxDest : LONG;
2607          cyDest : LONG;
2608          dwRop : DWORD;
2609          xSrc : LONG;
2610          ySrc : LONG;
2611          xformSrc : XFORM;
2612          crBkColorSrc : COLORREF;
2613          iUsageSrc : DWORD;
2614          offBmiSrc : DWORD;
2615          cbBmiSrc : DWORD;
2616          offBitsSrc : DWORD;
2617          cbBitsSrc : DWORD;
2618       end;
2619     tagEMRBITBLT = EMRBITBLT;
2620     TEMRBITBLT = EMRBITBLT;
2621     PEMRBITBLT = ^EMRBITBLT;
2622
2623     LOGBRUSH = record
2624          lbStyle : UINT;
2625          lbColor : COLORREF;
2626          lbHatch : ULONG_PTR;
2627       end;
2628     tagLOGBRUSH = LOGBRUSH;
2629     TLOGBRUSH = LOGBRUSH;
2630     PLOGBRUSH = ^LOGBRUSH;
2631
2632     EMRCREATEBRUSHINDIRECT = record
2633          emr : EMR;
2634          ihBrush : DWORD;
2635          lb : LOGBRUSH;
2636       end;
2637     tagEMRCREATEBRUSHINDIRECT = EMRCREATEBRUSHINDIRECT;
2638     TEMRCREATEBRUSHINDIRECT = EMRCREATEBRUSHINDIRECT;
2639     PEMRCREATEBRUSHINDIRECT = ^EMRCREATEBRUSHINDIRECT;
2640
2641     LCSCSTYPE = LONG;
2642
2643     LCSGAMUTMATCH = LONG;
2644
2645     LOGCOLORSPACEA = record
2646          lcsSignature : DWORD;
2647          lcsVersion : DWORD;
2648          lcsSize : DWORD;
2649          lcsCSType : LCSCSTYPE;
2650          lcsIntent : LCSGAMUTMATCH;
2651          lcsEndpoints : CIEXYZTRIPLE;
2652          lcsGammaRed : DWORD;
2653          lcsGammaGreen : DWORD;
2654          lcsGammaBlue : DWORD;
2655          lcsFilename : array[0..(MAX_PATH)-1] of ANSICHAR;
2656       end;
2657     LPLOGCOLORSPACEA  = ^LOGCOLORSPACEA;
2658     tagLOGCOLORSPACEA = LOGCOLORSPACEA;
2659     TLOGCOLORSPACEA   = LOGCOLORSPACEA;
2660     PLOGCOLORSPACEA   = ^LOGCOLORSPACEA;
2661
2662     LOGCOLORSPACEW = record
2663          lcsSignature : DWORD;
2664          lcsVersion : DWORD;
2665          lcsSize : DWORD;
2666          lcsCSType : LCSCSTYPE;
2667          lcsIntent : LCSGAMUTMATCH;
2668          lcsEndpoints : CIEXYZTRIPLE;
2669          lcsGammaRed : DWORD;
2670          lcsGammaGreen : DWORD;
2671          lcsGammaBlue : DWORD;
2672          lcsFilename : array[0..(MAX_PATH)-1] of WIDECHAR;
2673       end;
2674     LPLOGCOLORSPACEW  = ^LOGCOLORSPACEW;
2675     tagLOGCOLORSPACEW = LOGCOLORSPACEW;
2676     TLOGCOLORSPACEW   = LOGCOLORSPACEW;
2677     PLOGCOLORSPACEW   = ^LOGCOLORSPACEW;
2678     {$ifdef UNICODE}
2679        LPLOGCOLORSPACE  = PLOGCOLORSPACEW;
2680        tagLOGCOLORSPACE = LOGCOLORSPACEW;
2681        TLOGCOLORSPACE   = LOGCOLORSPACEW;
2682        LOGCOLORSPACE    = LOGCOLORSPACEW;
2683        PLOGCOLORSPACE   = PLOGCOLORSPACEW;
2684     {$else}
2685        LPLOGCOLORSPACE  = PLOGCOLORSPACEA;
2686        tagLOGCOLORSPACE = LOGCOLORSPACEA;
2687        TLOGCOLORSPACE   = LOGCOLORSPACEA;
2688        LOGCOLORSPACE    = LOGCOLORSPACEA;
2689        PLOGCOLORSPACE   = PLOGCOLORSPACEA;
2690     {$endif}
2691
2692     EMRCREATECOLORSPACE = record
2693          emr : EMR;
2694          ihCS : DWORD;
2695          lcs : LOGCOLORSPACE;
2696       end;
2697     tagEMRCREATECOLORSPACE = EMRCREATECOLORSPACE;
2698     TEMRCREATECOLORSPACE = EMRCREATECOLORSPACE;
2699     PEMRCREATECOLORSPACE = ^EMRCREATECOLORSPACE;
2700
2701     EMRCREATEDIBPATTERNBRUSHPT = record
2702          emr : EMR;
2703          ihBrush : DWORD;
2704          iUsage : DWORD;
2705          offBmi : DWORD;
2706          cbBmi : DWORD;
2707          offBits : DWORD;
2708          cbBits : DWORD;
2709       end;
2710     tagEMRCREATEDIBPATTERNBRUSHPT = EMRCREATEDIBPATTERNBRUSHPT;
2711     TEMRCREATEDIBPATTERNBRUSHPT = EMRCREATEDIBPATTERNBRUSHPT;
2712     PEMRCREATEDIBPATTERNBRUSHPT = ^EMRCREATEDIBPATTERNBRUSHPT;
2713
2714     EMRCREATEMONOBRUSH = record
2715          emr : EMR;
2716          ihBrush : DWORD;
2717          iUsage : DWORD;
2718          offBmi : DWORD;
2719          cbBmi : DWORD;
2720          offBits : DWORD;
2721          cbBits : DWORD;
2722       end;
2723     tagEMRCREATEMONOBRUSH = EMRCREATEMONOBRUSH;
2724     TEMRCREATEMONOBRUSH = EMRCREATEMONOBRUSH;
2725     PEMRCREATEMONOBRUSH = ^EMRCREATEMONOBRUSH;
2726
2727     PALETTEENTRY = record
2728          peRed : BYTE;
2729          peGreen : BYTE;
2730          peBlue : BYTE;
2731          peFlags : BYTE;
2732       end;
2733     LPPALETTEENTRY = ^PALETTEENTRY;
2734     tagPALETTEENTRY = PALETTEENTRY;
2735     TPALETTEENTRY = PALETTEENTRY;
2736     PPALETTEENTRY = ^PALETTEENTRY;
2737
2738     LOGPALETTE = record
2739          palVersion : WORD;
2740          palNumEntries : WORD;
2741          palPalEntry : array[0..0] of PALETTEENTRY;
2742       end;
2743     LPLOGPALETTE = ^LOGPALETTE;
2744     tagLOGPALETTE = LOGPALETTE;
2745     TLOGPALETTE = LOGPALETTE;
2746     PLOGPALETTE = ^LOGPALETTE;
2747
2748     EMRCREATEPALETTE = record
2749          emr : EMR;
2750          ihPal : DWORD;
2751          lgpl : LOGPALETTE;
2752       end;
2753     tagEMRCREATEPALETTE = EMRCREATEPALETTE;
2754     TEMRCREATEPALETTE = EMRCREATEPALETTE;
2755     PEMRCREATEPALETTE = ^EMRCREATEPALETTE;
2756
2757     LOGPEN = record
2758          lopnStyle : UINT;
2759          lopnWidth : POINT;
2760          lopnColor : COLORREF;
2761       end;
2762     tagLOGPEN = LOGPEN;
2763     TLOGPEN = LOGPEN;
2764     PLOGPEN = ^LOGPEN;
2765
2766     EMRCREATEPEN = record
2767          emr : EMR;
2768          ihPen : DWORD;
2769          lopn : LOGPEN;
2770       end;
2771     tagEMRCREATEPEN = EMRCREATEPEN;
2772     TEMRCREATEPEN = EMRCREATEPEN;
2773     PEMRCREATEPEN = ^EMRCREATEPEN;
2774
2775     EMRELLIPSE = record
2776          emr : EMR;
2777          rclBox : RECTL;
2778       end;
2779     tagEMRELLIPSE = EMRELLIPSE;
2780     TEMRELLIPSE = EMRELLIPSE;
2781     PEMRELLIPSE = ^EMRELLIPSE;
2782
2783     EMRRECTANGLE = EMRELLIPSE;
2784     TEMRRECTANGLE = EMRELLIPSE;
2785     PEMRRECTANGLE = ^EMRELLIPSE;
2786
2787     EMREOF = record
2788          emr : EMR;
2789          nPalEntries : DWORD;
2790          offPalEntries : DWORD;
2791          nSizeLast : DWORD;
2792       end;
2793     tagEMREOF = EMREOF;
2794     TEMREOF = EMREOF;
2795     PEMREOF = ^EMREOF;
2796
2797     EMREXCLUDECLIPRECT = record
2798          emr : EMR;
2799          rclClip : RECTL;
2800       end;
2801     tagEMREXCLUDECLIPRECT = EMREXCLUDECLIPRECT;
2802     TEMREXCLUDECLIPRECT = EMREXCLUDECLIPRECT;
2803     PEMREXCLUDECLIPRECT = ^EMREXCLUDECLIPRECT;
2804
2805     EMRINTERSECTCLIPRECT = EMREXCLUDECLIPRECT;
2806     TEMRINTERSECTCLIPRECT = EMREXCLUDECLIPRECT;
2807     PEMRINTERSECTCLIPRECT = ^EMREXCLUDECLIPRECT;
2808
2809     PANOSE = record
2810          bFamilyType : BYTE;
2811          bSerifStyle : BYTE;
2812          bWeight : BYTE;
2813          bProportion : BYTE;
2814          bContrast : BYTE;
2815          bStrokeVariation : BYTE;
2816          bArmStyle : BYTE;
2817          bLetterform : BYTE;
2818          bMidline : BYTE;
2819          bXHeight : BYTE;
2820       end;
2821     tagPANOSE = PANOSE;
2822     TPANOSE = PANOSE;
2823     PPANOSE = ^PANOSE;
2824
2825     EXTLOGFONTA = record
2826          elfLogFont : LOGFONT;
2827          elfFullName : array[0..(LF_FULLFACESIZE)-1] of AnsiCHAR;
2828          elfStyle : array[0..(LF_FACESIZE)-1] of AnsiCHAR;
2829          elfVersion : DWORD;
2830          elfStyleSize : DWORD;
2831          elfMatch : DWORD;
2832          elfReserved : DWORD;
2833          elfVendorId : array[0..(ELF_VENDOR_SIZE)-1] of BYTE;
2834          elfCulture : DWORD;
2835          elfPanose : PANOSE;
2836       end;
2837     LPEXTLOGFONTA  = ^EXTLOGFONTA;
2838     tagEXTLOGFONTA = EXTLOGFONTA;
2839     TEXTLOGFONTA   = EXTLOGFONTA;
2840     PEXTLOGFONTA   = LPEXTLOGFONTA;
2841
2842
2843     EXTLOGFONTW    = record
2844       elfLogFont   :LOGFONTW;
2845       elfFullName  :array[0..(LF_FULLFACESIZE) - 1] of WCHAR;
2846       elfStyle     :array[0..(LF_FACESIZE) - 1] of WCHAR;
2847       elfVersion   :DWORD;
2848       elfStyleSize :DWORD;
2849       elfMatch     :DWORD;
2850       elfReserved  :DWORD;
2851       elfVendorId  :array[0..(ELF_VENDOR_SIZE) - 1] of Byte;
2852       elfCulture   :DWORD;
2853       elfPanose    :PANOSE;
2854      end;
2855     LPEXTLOGFONTW  = ^EXTLOGFONTW;
2856     tagEXTLOGFONTW = EXTLOGFONTW;
2857     TEXTLOGFONTW   = EXTLOGFONTW;
2858     PEXTLOGFONTW   = ^EXTLOGFONTW;
2859
2860    {$IFNDEF UNICODE}
2861      EXTLOGFONT     = EXTLOGFONTA;
2862      LPEXTLOGFONT   = ^EXTLOGFONTA;
2863      tagEXTLOGFONT  = EXTLOGFONTA;
2864      TEXTLOGFONT    = EXTLOGFONTA;
2865      PEXTLOGFONT    = ^EXTLOGFONTA;
2866    {$ELSE}
2867      EXTLOGFONT     = EXTLOGFONTW;
2868      LPEXTLOGFONT   = ^EXTLOGFONTW;
2869      tagEXTLOGFONT  = EXTLOGFONTW;
2870      TEXTLOGFONT    = EXTLOGFONTW;
2871      PEXTLOGFONT    = ^EXTLOGFONTW;
2872    {$ENDIF}
2873
2874     EMREXTCREATEFONTINDIRECTW = record
2875          emr : EMR;
2876          ihFont : DWORD;
2877          elfw : EXTLOGFONTW;
2878       end;
2879     tagEMREXTCREATEFONTINDIRECTW = EMREXTCREATEFONTINDIRECTW;
2880     TEMREXTCREATEFONTINDIRECTW = EMREXTCREATEFONTINDIRECTW;
2881     PEMREXTCREATEFONTINDIRECTW = ^EMREXTCREATEFONTINDIRECTW;
2882
2883     EXTLOGPEN = record
2884          elpPenStyle : DWORD;
2885          elpWidth : DWORD;
2886          elpBrushStyle : UINT;
2887          elpColor : COLORREF;
2888          elpHatch : ULONG_PTR;
2889          elpNumEntries : DWORD;
2890          elpStyleEntry : array[0..0] of DWORD;
2891       end;
2892     tagEXTLOGPEN = EXTLOGPEN;
2893     TEXTLOGPEN = EXTLOGPEN;
2894     PEXTLOGPEN = ^EXTLOGPEN;
2895
2896     EMREXTCREATEPEN = record
2897          emr : EMR;
2898          ihPen : DWORD;
2899          offBmi : DWORD;
2900          cbBmi : DWORD;
2901          offBits : DWORD;
2902          cbBits : DWORD;
2903          elp : EXTLOGPEN;
2904       end;
2905     tagEMREXTCREATEPEN = EMREXTCREATEPEN;
2906     TEMREXTCREATEPEN = EMREXTCREATEPEN;
2907     PEMREXTCREATEPEN = ^EMREXTCREATEPEN;
2908
2909     EMREXTFLOODFILL = record
2910          emr : EMR;
2911          ptlStart : POINTL;
2912          crColor : COLORREF;
2913          iMode : DWORD;
2914       end;
2915     tagEMREXTFLOODFILL = EMREXTFLOODFILL;
2916     TEMREXTFLOODFILL = EMREXTFLOODFILL;
2917     PEMREXTFLOODFILL = ^EMREXTFLOODFILL;
2918
2919     EMREXTSELECTCLIPRGN = record
2920          emr : EMR;
2921          cbRgnData : DWORD;
2922          iMode : DWORD;
2923          RgnData : array[0..0] of BYTE;
2924       end;
2925     tagEMREXTSELECTCLIPRGN = EMREXTSELECTCLIPRGN;
2926     TEMREXTSELECTCLIPRGN = EMREXTSELECTCLIPRGN;
2927     PEMREXTSELECTCLIPRGN = ^EMREXTSELECTCLIPRGN;
2928
2929     EMRTEXT = record
2930          ptlReference : POINTL;
2931          nChars : DWORD;
2932          offString : DWORD;
2933          fOptions : DWORD;
2934          rcl : RECTL;
2935          offDx : DWORD;
2936       end;
2937     tagEMRTEXT = EMRTEXT;
2938     TEMRTEXT = EMRTEXT;
2939     PEMRTEXT = ^EMRTEXT;
2940
2941     EMREXTTEXTOUTA = record
2942          emr : EMR;
2943          rclBounds : RECTL;
2944          iGraphicsMode : DWORD;
2945          exScale : Single;
2946          eyScale : Single;
2947          emrtext : EMRTEXT;
2948       end;
2949     tagEMREXTTEXTOUTA = EMREXTTEXTOUTA;
2950     TEMREXTTEXTOUTA = EMREXTTEXTOUTA;
2951     PEMREXTTEXTOUTA = ^EMREXTTEXTOUTA;
2952
2953     EMREXTTEXTOUTW = EMREXTTEXTOUTA;
2954     TEMREXTTEXTOUTW = EMREXTTEXTOUTA;
2955     PEMREXTTEXTOUTW = ^EMREXTTEXTOUTA;
2956
2957     EMRFILLPATH = record
2958          emr : EMR;
2959          rclBounds : RECTL;
2960       end;
2961     tagEMRFILLPATH = EMRFILLPATH;
2962     TEMRFILLPATH = EMRFILLPATH;
2963     PEMRFILLPATH = ^EMRFILLPATH;
2964
2965     EMRSTROKEANDFILLPATH = EMRFILLPATH;
2966     TEMRSTROKEANDFILLPATH = EMRFILLPATH;
2967     PEMRSTROKEANDFILLPATH = ^EMRFILLPATH;
2968
2969     EMRSTROKEPATH = EMRFILLPATH;
2970     TEMRSTROKEPATH = EMRFILLPATH;
2971     PEMRSTROKEPATH = ^EMRFILLPATH;
2972
2973     EMRFILLRGN = record
2974          emr : EMR;
2975          rclBounds : RECTL;
2976          cbRgnData : DWORD;
2977          ihBrush : DWORD;
2978          RgnData : array[0..0] of BYTE;
2979       end;
2980     tagEMRFILLRGN = EMRFILLRGN;
2981     TEMRFILLRGN = EMRFILLRGN;
2982     PEMRFILLRGN = ^EMRFILLRGN;
2983
2984     EMRFORMAT = record
2985          dSignature : DWORD;
2986          nVersion : DWORD;
2987          cbData : DWORD;
2988          offData : DWORD;
2989       end;
2990     tagEMRFORMAT = EMRFORMAT;
2991     TEMRFORMAT = EMRFORMAT;
2992     PEMRFORMAT = ^EMRFORMAT;
2993
2994     SIZE = TSize;
2995     LPSIZE = PSIZE;
2996     tagSIZE = SIZE;
2997
2998     SIZEL = SIZE;
2999     TSIZEL = SIZE;
3000     PSIZEL = ^SIZE;
3001     LPSIZEL = ^SIZE;
3002
3003     EMRFRAMERGN = record
3004          emr : EMR;
3005          rclBounds : RECTL;
3006          cbRgnData : DWORD;
3007          ihBrush : DWORD;
3008          szlStroke : SIZEL;
3009          RgnData : array[0..0] of BYTE;
3010       end;
3011     tagEMRFRAMERGN = EMRFRAMERGN;
3012     TEMRFRAMERGN = EMRFRAMERGN;
3013     PEMRFRAMERGN = ^EMRFRAMERGN;
3014
3015     EMRGDICOMMENT = record
3016          emr : EMR;
3017          cbData : DWORD;
3018          Data : array[0..0] of BYTE;
3019       end;
3020     tagEMRGDICOMMENT = EMRGDICOMMENT;
3021     TEMRGDICOMMENT = EMRGDICOMMENT;
3022     PEMRGDICOMMENT = ^EMRGDICOMMENT;
3023
3024     EMRINVERTRGN = record
3025          emr : EMR;
3026          rclBounds : RECTL;
3027          cbRgnData : DWORD;
3028          RgnData : array[0..0] of BYTE;
3029       end;
3030     tagEMRINVERTRGN = EMRINVERTRGN;
3031     TEMRINVERTRGN = EMRINVERTRGN;
3032     PEMRINVERTRGN = ^EMRINVERTRGN;
3033
3034     EMRPAINTRGN = EMRINVERTRGN;
3035     TEMRPAINTRGN = EMRINVERTRGN;
3036     PEMRPAINTRGN = ^EMRINVERTRGN;
3037
3038     EMRLINETO = record
3039          emr : EMR;
3040          ptl : POINTL;
3041       end;
3042     tagEMRLINETO = EMRLINETO;
3043     TEMRLINETO = EMRLINETO;
3044     PEMRLINETO = ^EMRLINETO;
3045
3046     EMRMOVETOEX = EMRLINETO;
3047     TEMRMOVETOEX = EMRLINETO;
3048     PEMRMOVETOEX = ^EMRLINETO;
3049
3050     EMRMASKBLT = record
3051          emr : EMR;
3052          rclBounds : RECTL;
3053          xDest : LONG;
3054          yDest : LONG;
3055          cxDest : LONG;
3056          cyDest : LONG;
3057          dwRop : DWORD;
3058          xSrc : LONG;
3059          ySrc : LONG;
3060          xformSrc : XFORM;
3061          crBkColorSrc : COLORREF;
3062          iUsageSrc : DWORD;
3063          offBmiSrc : DWORD;
3064          cbBmiSrc : DWORD;
3065          offBitsSrc : DWORD;
3066          cbBitsSrc : DWORD;
3067          xMask : LONG;
3068          yMask : LONG;
3069          iUsageMask : DWORD;
3070          offBmiMask : DWORD;
3071          cbBmiMask : DWORD;
3072          offBitsMask : DWORD;
3073          cbBitsMask : DWORD;
3074       end;
3075     tagEMRMASKBLT = EMRMASKBLT;
3076     TEMRMASKBLT = EMRMASKBLT;
3077     PEMRMASKBLT = ^EMRMASKBLT;
3078
3079     EMRMODIFYWORLDTRANSFORM = record
3080          emr : EMR;
3081          xform : XFORM;
3082          iMode : DWORD;
3083       end;
3084     tagEMRMODIFYWORLDTRANSFORM = EMRMODIFYWORLDTRANSFORM;
3085     TEMRMODIFYWORLDTRANSFORM = EMRMODIFYWORLDTRANSFORM;
3086     PEMRMODIFYWORLDTRANSFORM = ^EMRMODIFYWORLDTRANSFORM;
3087
3088     EMROFFSETCLIPRGN = record
3089          emr : EMR;
3090          ptlOffset : POINTL;
3091       end;
3092     tagEMROFFSETCLIPRGN = EMROFFSETCLIPRGN;
3093     TEMROFFSETCLIPRGN = EMROFFSETCLIPRGN;
3094     PEMROFFSETCLIPRGN = ^EMROFFSETCLIPRGN;
3095
3096     EMRPLGBLT = record
3097          emr : EMR;
3098          rclBounds : RECTL;
3099          aptlDest : array[0..2] of POINTL;
3100          xSrc : LONG;
3101          ySrc : LONG;
3102          cxSrc : LONG;
3103          cySrc : LONG;
3104          xformSrc : XFORM;
3105          crBkColorSrc : COLORREF;
3106          iUsageSrc : DWORD;
3107          offBmiSrc : DWORD;
3108          cbBmiSrc : DWORD;
3109          offBitsSrc : DWORD;
3110          cbBitsSrc : DWORD;
3111          xMask : LONG;
3112          yMask : LONG;
3113          iUsageMask : DWORD;
3114          offBmiMask : DWORD;
3115          cbBmiMask : DWORD;
3116          offBitsMask : DWORD;
3117          cbBitsMask : DWORD;
3118       end;
3119     tagEMRPLGBLT = EMRPLGBLT;
3120     TEMRPLGBLT = EMRPLGBLT;
3121     PEMRPLGBLT = ^EMRPLGBLT;
3122
3123     EMRPOLYDRAW = record
3124          emr : EMR;
3125          rclBounds : RECTL;
3126          cptl : DWORD;
3127          aptl : array[0..0] of POINTL;
3128          abTypes : array[0..0] of BYTE;
3129       end;
3130     tagEMRPOLYDRAW = EMRPOLYDRAW;
3131     TEMRPOLYDRAW = EMRPOLYDRAW;
3132     PEMRPOLYDRAW = ^EMRPOLYDRAW;
3133
3134     EMRPOLYDRAW16 = record
3135          emr : EMR;
3136          rclBounds : RECTL;
3137          cpts : DWORD;
3138          apts : array[0..0] of POINTS;
3139          abTypes : array[0..0] of BYTE;
3140       end;
3141     tagEMRPOLYDRAW16 = EMRPOLYDRAW16;
3142     TEMRPOLYDRAW16 = EMRPOLYDRAW16;
3143     PEMRPOLYDRAW16 = ^EMRPOLYDRAW16;
3144
3145     EMRPOLYLINE = record
3146          emr : EMR;
3147          rclBounds : RECTL;
3148          cptl : DWORD;
3149          aptl : array[0..0] of POINTL;
3150       end;
3151     tagEMRPOLYLINE = EMRPOLYLINE;
3152     TEMRPOLYLINE = EMRPOLYLINE;
3153     PEMRPOLYLINE = ^EMRPOLYLINE;
3154
3155     EMRPOLYBEZIER = EMRPOLYLINE;
3156     TEMRPOLYBEZIER = EMRPOLYLINE;
3157     PEMRPOLYBEZIER = ^EMRPOLYLINE;
3158
3159     EMRPOLYGON = EMRPOLYLINE;
3160     TEMRPOLYGON = EMRPOLYLINE;
3161     PEMRPOLYGON = ^EMRPOLYLINE;
3162
3163     EMRPOLYBEZIERTO = EMRPOLYLINE;
3164     TEMRPOLYBEZIERTO = EMRPOLYLINE;
3165     PEMRPOLYBEZIERTO = ^EMRPOLYLINE;
3166
3167     EMRPOLYLINETO = EMRPOLYLINE;
3168     TEMRPOLYLINETO = EMRPOLYLINE;
3169     PEMRPOLYLINETO = ^EMRPOLYLINE;
3170
3171     EMRPOLYLINE16 = record
3172          emr : EMR;
3173          rclBounds : RECTL;
3174          cpts : DWORD;
3175          apts : array[0..0] of POINTS;
3176       end;
3177     tagEMRPOLYLINE16 = EMRPOLYLINE16;
3178     TEMRPOLYLINE16 = EMRPOLYLINE16;
3179     PEMRPOLYLINE16 = ^EMRPOLYLINE16;
3180
3181     EMRPOLYBEZIER16 = EMRPOLYLINE16;
3182     TEMRPOLYBEZIER16 = EMRPOLYLINE16;
3183     PEMRPOLYBEZIER16 = ^EMRPOLYLINE16;
3184
3185     EMRPOLYGON16 = EMRPOLYLINE16;
3186     TEMRPOLYGON16 = EMRPOLYLINE16;
3187     PEMRPOLYGON16 = ^EMRPOLYLINE16;
3188
3189     EMRPOLYBEZIERTO16 = EMRPOLYLINE16;
3190     TEMRPOLYBEZIERTO16 = EMRPOLYLINE16;
3191     PEMRPOLYBEZIERTO16 = ^EMRPOLYLINE16;
3192
3193     EMRPOLYLINETO16 = EMRPOLYLINE16;
3194     TEMRPOLYLINETO16 = EMRPOLYLINE16;
3195     PEMRPOLYLINETO16 = ^EMRPOLYLINE16;
3196
3197     EMRPOLYPOLYLINE = record
3198          emr : EMR;
3199          rclBounds : RECTL;
3200          nPolys : DWORD;
3201          cptl : DWORD;
3202          aPolyCounts : array[0..0] of DWORD;
3203          aptl : array[0..0] of POINTL;
3204       end;
3205     tagEMRPOLYPOLYLINE = EMRPOLYPOLYLINE;
3206     TEMRPOLYPOLYLINE = EMRPOLYPOLYLINE;
3207     PEMRPOLYPOLYLINE = ^EMRPOLYPOLYLINE;
3208
3209     EMRPOLYPOLYGON = EMRPOLYPOLYLINE;
3210     TEMRPOLYPOLYGON = EMRPOLYPOLYLINE;
3211     PEMRPOLYPOLYGON = ^EMRPOLYPOLYLINE;
3212
3213     EMRPOLYPOLYLINE16 = record
3214          emr : EMR;
3215          rclBounds : RECTL;
3216          nPolys : DWORD;
3217          cpts : DWORD;
3218          aPolyCounts : array[0..0] of DWORD;
3219          apts : array[0..0] of POINTS;
3220       end;
3221     tagEMRPOLYPOLYLINE16 = EMRPOLYPOLYLINE16;
3222     TEMRPOLYPOLYLINE16 = EMRPOLYPOLYLINE16;
3223     PEMRPOLYPOLYLINE16 = ^EMRPOLYPOLYLINE16;
3224
3225     EMRPOLYPOLYGON16 = EMRPOLYPOLYLINE16;
3226     TEMRPOLYPOLYGON16 = EMRPOLYPOLYLINE16;
3227     PEMRPOLYPOLYGON16 = ^EMRPOLYPOLYLINE16;
3228
3229     EMRPOLYTEXTOUTA = record
3230          emr : EMR;
3231          rclBounds : RECTL;
3232          iGraphicsMode : DWORD;
3233          exScale : Single;
3234          eyScale : Single;
3235          cStrings : LONG;
3236          aemrtext : array[0..0] of EMRTEXT;
3237       end;
3238     tagEMRPOLYTEXTOUTA = EMRPOLYTEXTOUTA;
3239     TEMRPOLYTEXTOUTA = EMRPOLYTEXTOUTA;
3240     PEMRPOLYTEXTOUTA = ^EMRPOLYTEXTOUTA;
3241
3242     EMRPOLYTEXTOUTW = EMRPOLYTEXTOUTA;
3243     TEMRPOLYTEXTOUTW = EMRPOLYTEXTOUTA;
3244     PEMRPOLYTEXTOUTW = ^EMRPOLYTEXTOUTA;
3245
3246     EMRRESIZEPALETTE = record
3247          emr : EMR;
3248          ihPal : DWORD;
3249          cEntries : DWORD;
3250       end;
3251     tagEMRRESIZEPALETTE = EMRRESIZEPALETTE;
3252     TEMRRESIZEPALETTE = EMRRESIZEPALETTE;
3253     PEMRRESIZEPALETTE = ^EMRRESIZEPALETTE;
3254
3255     EMRRESTOREDC = record
3256          emr : EMR;
3257          iRelative : LONG;
3258       end;
3259     tagEMRRESTOREDC = EMRRESTOREDC;
3260     TEMRRESTOREDC = EMRRESTOREDC;
3261     PEMRRESTOREDC = ^EMRRESTOREDC;
3262
3263     EMRROUNDRECT = record
3264          emr : EMR;
3265          rclBox : RECTL;
3266          szlCorner : SIZEL;
3267       end;
3268     tagEMRROUNDRECT = EMRROUNDRECT;
3269     TEMRROUNDRECT = EMRROUNDRECT;
3270     PEMRROUNDRECT = ^EMRROUNDRECT;
3271
3272     EMRSCALEVIEWPORTEXTEX = record
3273          emr : EMR;
3274          xNum : LONG;
3275          xDenom : LONG;
3276          yNum : LONG;
3277          yDenom : LONG;
3278       end;
3279     tagEMRSCALEVIEWPORTEXTEX = EMRSCALEVIEWPORTEXTEX;
3280     TEMRSCALEVIEWPORTEXTEX = EMRSCALEVIEWPORTEXTEX;
3281     PEMRSCALEVIEWPORTEXTEX = ^EMRSCALEVIEWPORTEXTEX;
3282
3283     EMRSCALEWINDOWEXTEX = EMRSCALEVIEWPORTEXTEX;
3284     TEMRSCALEWINDOWEXTEX = EMRSCALEVIEWPORTEXTEX;
3285     PEMRSCALEWINDOWEXTEX = ^EMRSCALEVIEWPORTEXTEX;
3286
3287     EMRSELECTCOLORSPACE = record
3288          emr : EMR;
3289          ihCS : DWORD;
3290       end;
3291     tagEMRSELECTCOLORSPACE = EMRSELECTCOLORSPACE;
3292     TEMRSELECTCOLORSPACE = EMRSELECTCOLORSPACE;
3293     PEMRSELECTCOLORSPACE = ^EMRSELECTCOLORSPACE;
3294
3295     EMRDELETECOLORSPACE = EMRSELECTCOLORSPACE;
3296     TEMRDELETECOLORSPACE = EMRSELECTCOLORSPACE;
3297     PEMRDELETECOLORSPACE = ^EMRSELECTCOLORSPACE;
3298
3299     EMRSELECTOBJECT = record
3300          emr : EMR;
3301          ihObject : DWORD;
3302       end;
3303     tagEMRSELECTOBJECT = EMRSELECTOBJECT;
3304     TEMRSELECTOBJECT = EMRSELECTOBJECT;
3305     PEMRSELECTOBJECT = ^EMRSELECTOBJECT;
3306
3307     EMRDELETEOBJECT = EMRSELECTOBJECT;
3308     TEMRDELETEOBJECT = EMRSELECTOBJECT;
3309     PEMRDELETEOBJECT = ^EMRSELECTOBJECT;
3310
3311     EMRSELECTPALETTE = record
3312          emr : EMR;
3313          ihPal : DWORD;
3314       end;
3315     tagEMRSELECTPALETTE = EMRSELECTPALETTE;
3316     TEMRSELECTPALETTE = EMRSELECTPALETTE;
3317     PEMRSELECTPALETTE = ^EMRSELECTPALETTE;
3318
3319     EMRSETARCDIRECTION = record
3320          emr : EMR;
3321          iArcDirection : DWORD;
3322       end;
3323     tagEMRSETARCDIRECTION = EMRSETARCDIRECTION;
3324     TEMRSETARCDIRECTION = EMRSETARCDIRECTION;
3325     PEMRSETARCDIRECTION = ^EMRSETARCDIRECTION;
3326
3327     EMRSETBKCOLOR = record
3328          emr : EMR;
3329          crColor : COLORREF;
3330       end;
3331     tagEMRSETTEXTCOLOR = EMRSETBKCOLOR;
3332     TEMRSETBKCOLOR = EMRSETBKCOLOR;
3333     PEMRSETBKCOLOR = ^EMRSETBKCOLOR;
3334
3335     EMRSETTEXTCOLOR = EMRSETBKCOLOR;
3336     TEMRSETTEXTCOLOR = EMRSETBKCOLOR;
3337     PEMRSETTEXTCOLOR = ^EMRSETBKCOLOR;
3338
3339     EMRSETCOLORADJUSTMENT = record
3340          emr : EMR;
3341          ColorAdjustment : COLORADJUSTMENT;
3342       end;
3343     tagEMRSETCOLORADJUSTMENT = EMRSETCOLORADJUSTMENT;
3344     TEMRSETCOLORADJUSTMENT = EMRSETCOLORADJUSTMENT;
3345     PEMRSETCOLORADJUSTMENT = ^EMRSETCOLORADJUSTMENT;
3346
3347     EMRSETDIBITSTODEVICE = record
3348          emr : EMR;
3349          rclBounds : RECTL;
3350          xDest : LONG;
3351          yDest : LONG;
3352          xSrc : LONG;
3353          ySrc : LONG;
3354          cxSrc : LONG;
3355          cySrc : LONG;
3356          offBmiSrc : DWORD;
3357          cbBmiSrc : DWORD;
3358          offBitsSrc : DWORD;
3359          cbBitsSrc : DWORD;
3360          iUsageSrc : DWORD;
3361          iStartScan : DWORD;
3362          cScans : DWORD;
3363       end;
3364     tagEMRSETDIBITSTODEVICE = EMRSETDIBITSTODEVICE;
3365     TEMRSETDIBITSTODEVICE = EMRSETDIBITSTODEVICE;
3366     PEMRSETDIBITSTODEVICE = ^EMRSETDIBITSTODEVICE;
3367
3368     EMRSETMAPPERFLAGS = record
3369          emr : EMR;
3370          dwFlags : DWORD;
3371       end;
3372     tagEMRSETMAPPERFLAGS = EMRSETMAPPERFLAGS;
3373     TEMRSETMAPPERFLAGS = EMRSETMAPPERFLAGS;
3374     PEMRSETMAPPERFLAGS = ^EMRSETMAPPERFLAGS;
3375
3376     EMRSETMITERLIMIT = record
3377          emr : EMR;
3378          eMiterLimit : Single;
3379       end;
3380     tagEMRSETMITERLIMIT = EMRSETMITERLIMIT;
3381     TEMRSETMITERLIMIT = EMRSETMITERLIMIT;
3382     PEMRSETMITERLIMIT = ^EMRSETMITERLIMIT;
3383
3384     EMRSETPALETTEENTRIES = record
3385          emr : EMR;
3386          ihPal : DWORD;
3387          iStart : DWORD;
3388          cEntries : DWORD;
3389          aPalEntries : array[0..0] of PALETTEENTRY;
3390       end;
3391     tagEMRSETPALETTEENTRIES = EMRSETPALETTEENTRIES;
3392     TEMRSETPALETTEENTRIES = EMRSETPALETTEENTRIES;
3393     PEMRSETPALETTEENTRIES = ^EMRSETPALETTEENTRIES;
3394
3395     EMRSETPIXELV = record
3396          emr : EMR;
3397          ptlPixel : POINTL;
3398          crColor : COLORREF;
3399       end;
3400     tagEMRSETPIXELV = EMRSETPIXELV;
3401     TEMRSETPIXELV = EMRSETPIXELV;
3402     PEMRSETPIXELV = ^EMRSETPIXELV;
3403
3404     EMRSETVIEWPORTEXTEX = record
3405          emr : EMR;
3406          szlExtent : SIZEL;
3407       end;
3408     tagEMRSETVIEWPORTEXTEX = EMRSETVIEWPORTEXTEX;
3409     TEMRSETVIEWPORTEXTEX = EMRSETVIEWPORTEXTEX;
3410     PEMRSETVIEWPORTEXTEX = ^EMRSETVIEWPORTEXTEX;
3411
3412     EMRSETWINDOWEXTEX = EMRSETVIEWPORTEXTEX;
3413     TEMRSETWINDOWEXTEX = EMRSETVIEWPORTEXTEX;
3414     PEMRSETWINDOWEXTEX = ^EMRSETVIEWPORTEXTEX;
3415
3416     EMRSETVIEWPORTORGEX = record
3417          emr : EMR;
3418          ptlOrigin : POINTL;
3419       end;
3420     tagEMRSETVIEWPORTORGEX = EMRSETVIEWPORTORGEX;
3421     TEMRSETVIEWPORTORGEX = EMRSETVIEWPORTORGEX;
3422     PEMRSETVIEWPORTORGEX = ^EMRSETVIEWPORTORGEX;
3423
3424     EMRSETWINDOWORGEX = EMRSETVIEWPORTORGEX;
3425     TEMRSETWINDOWORGEX = EMRSETVIEWPORTORGEX;
3426     PEMRSETWINDOWORGEX = ^EMRSETVIEWPORTORGEX;
3427
3428     EMRSETBRUSHORGEX = EMRSETVIEWPORTORGEX;
3429     TEMRSETBRUSHORGEX = EMRSETVIEWPORTORGEX;
3430     PEMRSETBRUSHORGEX = ^EMRSETVIEWPORTORGEX;
3431
3432     EMRSETWORLDTRANSFORM = record
3433          emr : EMR;
3434          xform : XFORM;
3435       end;
3436     tagEMRSETWORLDTRANSFORM = EMRSETWORLDTRANSFORM;
3437     TEMRSETWORLDTRANSFORM = EMRSETWORLDTRANSFORM;
3438     PEMRSETWORLDTRANSFORM = ^EMRSETWORLDTRANSFORM;
3439
3440     EMRSTRETCHBLT = record
3441          emr : EMR;
3442          rclBounds : RECTL;
3443          xDest : LONG;
3444          yDest : LONG;
3445          cxDest : LONG;
3446          cyDest : LONG;
3447          dwRop : DWORD;
3448          xSrc : LONG;
3449          ySrc : LONG;
3450          xformSrc : XFORM;
3451          crBkColorSrc : COLORREF;
3452          iUsageSrc : DWORD;
3453          offBmiSrc : DWORD;
3454          cbBmiSrc : DWORD;
3455          offBitsSrc : DWORD;
3456          cbBitsSrc : DWORD;
3457          cxSrc : LONG;
3458          cySrc : LONG;
3459       end;
3460     tagEMRSTRETCHBLT = EMRSTRETCHBLT;
3461     TEMRSTRETCHBLT = EMRSTRETCHBLT;
3462     PEMRSTRETCHBLT = ^EMRSTRETCHBLT;
3463
3464     EMRSTRETCHDIBITS = record
3465          emr : EMR;
3466          rclBounds : RECTL;
3467          xDest : LONG;
3468          yDest : LONG;
3469          xSrc : LONG;
3470          ySrc : LONG;
3471          cxSrc : LONG;
3472          cySrc : LONG;
3473          offBmiSrc : DWORD;
3474          cbBmiSrc : DWORD;
3475          offBitsSrc : DWORD;
3476          cbBitsSrc : DWORD;
3477          iUsageSrc : DWORD;
3478          dwRop : DWORD;
3479          cxDest : LONG;
3480          cyDest : LONG;
3481       end;
3482     tagEMRSTRETCHDIBITS = EMRSTRETCHDIBITS;
3483     TEMRSTRETCHDIBITS = EMRSTRETCHDIBITS;
3484     PEMRSTRETCHDIBITS = ^EMRSTRETCHDIBITS;
3485
3486     EMRABORTPATH = record
3487          emr : EMR;
3488       end;
3489     TEMRABORTPATH = EMRABORTPATH;
3490     PEMRABORTPATH = ^EMRABORTPATH;
3491
3492     tagABORTPATH = EMRABORTPATH;
3493     TABORTPATH = EMRABORTPATH;
3494
3495     EMRBEGINPATH = EMRABORTPATH;
3496     TEMRBEGINPATH = EMRABORTPATH;
3497     PEMRBEGINPATH = ^EMRABORTPATH;
3498
3499     EMRENDPATH = EMRABORTPATH;
3500     TEMRENDPATH = EMRABORTPATH;
3501     PEMRENDPATH = ^EMRABORTPATH;
3502
3503     EMRCLOSEFIGURE = EMRABORTPATH;
3504     TEMRCLOSEFIGURE = EMRABORTPATH;
3505     PEMRCLOSEFIGURE = ^EMRABORTPATH;
3506
3507     EMRFLATTENPATH = EMRABORTPATH;
3508     TEMRFLATTENPATH = EMRABORTPATH;
3509     PEMRFLATTENPATH = ^EMRABORTPATH;
3510
3511     EMRWIDENPATH = EMRABORTPATH;
3512     TEMRWIDENPATH = EMRABORTPATH;
3513     PEMRWIDENPATH = ^EMRABORTPATH;
3514
3515     EMRSETMETARGN = EMRABORTPATH;
3516     TEMRSETMETARGN = EMRABORTPATH;
3517     PEMRSETMETARGN = ^EMRABORTPATH;
3518
3519     EMRSAVEDC = EMRABORTPATH;
3520     TEMRSAVEDC = EMRABORTPATH;
3521     PEMRSAVEDC = ^EMRABORTPATH;
3522
3523     EMRREALIZEPALETTE = EMRABORTPATH;
3524     TEMRREALIZEPALETTE = EMRABORTPATH;
3525     PEMRREALIZEPALETTE = ^EMRABORTPATH;
3526
3527     EMRSELECTCLIPPATH = record
3528          emr : EMR;
3529          iMode : DWORD;
3530       end;
3531     tagEMRSELECTCLIPPATH = EMRSELECTCLIPPATH;
3532     TEMRSELECTCLIPPATH = EMRSELECTCLIPPATH;
3533     PEMRSELECTCLIPPATH = ^EMRSELECTCLIPPATH;
3534
3535     EMRSETBKMODE = EMRSELECTCLIPPATH;
3536     TEMRSETBKMODE = EMRSELECTCLIPPATH;
3537     PEMRSETBKMODE = ^EMRSELECTCLIPPATH;
3538
3539     EMRSETMAPMODE = EMRSELECTCLIPPATH;
3540     TEMRSETMAPMODE = EMRSELECTCLIPPATH;
3541     PEMRSETMAPMODE = ^EMRSELECTCLIPPATH;
3542
3543     EMRSETPOLYFILLMODE = EMRSELECTCLIPPATH;
3544     TEMRSETPOLYFILLMODE = EMRSELECTCLIPPATH;
3545     PEMRSETPOLYFILLMODE = ^EMRSELECTCLIPPATH;
3546
3547     EMRSETROP2 = EMRSELECTCLIPPATH;
3548     TEMRSETROP2 = EMRSELECTCLIPPATH;
3549     PEMRSETROP2 = ^EMRSELECTCLIPPATH;
3550
3551     EMRSETSTRETCHBLTMODE = EMRSELECTCLIPPATH;
3552     TEMRSETSTRETCHBLTMODE = EMRSELECTCLIPPATH;
3553     PEMRSETSTRETCHBLTMODE = ^EMRSELECTCLIPPATH;
3554
3555     EMRSETTEXTALIGN = EMRSELECTCLIPPATH;
3556     TEMRSETTEXTALIGN = EMRSELECTCLIPPATH;
3557     PEMRSETTEXTALIGN = ^EMRSELECTCLIPPATH;
3558
3559     EMRENABLEICM = EMRSELECTCLIPPATH;
3560     TEMRENABLEICM = EMRSELECTCLIPPATH;
3561     PEMRENABLEICM = ^EMRSELECTCLIPPATH;
3562
3563     NMHDR = record
3564          hwndFrom : HWND;
3565          idFrom : UINT_PTR;
3566          code : UINT;
3567       end;
3568     tagNMHDR = NMHDR;
3569     TNMHDR = NMHDR;
3570     PNMHDR = ^NMHDR;
3571
3572     ENCORRECTTEXT = record
3573          nmhdr : NMHDR;
3574          chrg : CHARRANGE;
3575          seltyp : WORD;
3576       end;
3577     _encorrecttext = ENCORRECTTEXT;
3578     Tencorrecttext = ENCORRECTTEXT;
3579     Pencorrecttext = ^ENCORRECTTEXT;
3580
3581     ENDROPFILES = record
3582          nmhdr : NMHDR;
3583          hDrop : HANDLE;
3584          cp : LONG;
3585          fProtected : WINBOOL;
3586       end;
3587     _endropfiles = ENDROPFILES;
3588     Tendropfiles = ENDROPFILES;
3589     Pendropfiles = ^ENDROPFILES;
3590
3591     ENSAVECLIPBOARD = record
3592          nmhdr : NMHDR;
3593          cObjectCount : LONG;
3594          cch : LONG;
3595       end;
3596     TENSAVECLIPBOARD = ENSAVECLIPBOARD;
3597     PENSAVECLIPBOARD = ^ENSAVECLIPBOARD;
3598
3599     ENOLEOPFAILED = record
3600          nmhdr : NMHDR;
3601          iob : LONG;
3602          lOper : LONG;
3603          hr : HRESULT;
3604       end;
3605     TENOLEOPFAILED = ENOLEOPFAILED;
3606     PENOLEOPFAILED = ^ENOLEOPFAILED;
3607
3608     ENHMETAHEADER = record
3609          iType : DWORD;
3610          nSize : DWORD;
3611          rclBounds : RECTL;
3612          rclFrame : RECTL;
3613          dSignature : DWORD;
3614          nVersion : DWORD;
3615          nBytes : DWORD;
3616          nRecords : DWORD;
3617          nHandles : WORD;
3618          sReserved : WORD;
3619          nDescription : DWORD;
3620          offDescription : DWORD;
3621          nPalEntries : DWORD;
3622          szlDevice : SIZEL;
3623          szlMillimeters : SIZEL;
3624// #if (WINVER >= 0x0400)
3625          cbPixelFormat : DWORD;
3626          offPixelFormat : DWORD;
3627          bOpenGL : DWORD;
3628// #endif
3629// #if (WINVER >= 0x0500)
3630          szlMicrometers : SIZEL;
3631// #endif
3632       end;
3633     LPENHMETAHEADER = ^ENHMETAHEADER;
3634     tagENHMETAHEADER = ENHMETAHEADER;
3635     TENHMETAHEADER = ENHMETAHEADER;
3636     PENHMETAHEADER = ^ENHMETAHEADER;
3637
3638     ENHMETARECORD = record
3639          iType : DWORD;
3640          nSize : DWORD;
3641          dParm : array[0..0] of DWORD;
3642       end;
3643     LPENHMETARECORD = ^ENHMETARECORD;
3644     tagENHMETARECORD = ENHMETARECORD;
3645     TENHMETARECORD = ENHMETARECORD;
3646     PENHMETARECORD = ^ENHMETARECORD;
3647
3648     ENPROTECTED = record
3649          nmhdr : NMHDR;
3650          msg : UINT;
3651          wParam : WPARAM;
3652          lParam : LPARAM;
3653          chrg : CHARRANGE;
3654       end;
3655     _enprotected = ENPROTECTED;
3656     Tenprotected = ENPROTECTED;
3657     Penprotected = ^ENPROTECTED;
3658
3659     SERVICE_STATUS = record
3660          dwServiceType : DWORD;
3661          dwCurrentState : DWORD;
3662          dwControlsAccepted : DWORD;
3663          dwWin32ExitCode : DWORD;
3664          dwServiceSpecificExitCode : DWORD;
3665          dwCheckPoint : DWORD;
3666          dwWaitHint : DWORD;
3667       end;
3668     LPSERVICE_STATUS = ^SERVICE_STATUS;
3669     _SERVICE_STATUS = SERVICE_STATUS;
3670     TSERVICESTATUS = SERVICE_STATUS;
3671     PSERVICESTATUS = ^SERVICE_STATUS;
3672
3673     ENUM_SERVICE_STATUSA= record
3674          lpServiceName : LPSTR;
3675          lpDisplayName : LPSTR;
3676          ServiceStatus : SERVICE_STATUS;
3677       end;
3678     LPENUM_SERVICE_STATUSA = ^ENUM_SERVICE_STATUSA;
3679     _ENUM_SERVICE_STATUSA  = ENUM_SERVICE_STATUSA;
3680     TENUMSERVICESTATUSA    = ENUM_SERVICE_STATUSA;
3681     PENUMSERVICESTATUSA   = ^ENUM_SERVICE_STATUSA;
3682
3683     ENUM_SERVICE_STATUSW = record
3684          lpServiceName : LPWSTR;
3685          lpDisplayName : LPWSTR;
3686          ServiceStatus : SERVICE_STATUS;
3687       end;
3688     LPENUM_SERVICE_STATUSW = ^ENUM_SERVICE_STATUSW;
3689     _ENUM_SERVICE_STATUSW  = ENUM_SERVICE_STATUSW;
3690     TENUMSERVICESTATUSW    = ENUM_SERVICE_STATUSW;
3691     PENUMSERVICESTATUSW    = ^ENUM_SERVICE_STATUSW;
3692
3693     {$ifdef Unicode}
3694     LPENUM_SERVICE_STATUS = ^ENUM_SERVICE_STATUSW;
3695     _ENUM_SERVICE_STATUS  = ENUM_SERVICE_STATUSW;
3696     TENUMSERVICESTATUS    = ENUM_SERVICE_STATUSW;
3697     ENUMSERVICESTATUS     = ENUM_SERVICE_STATUSW;
3698     PENUMSERVICESTATUS    = ^ENUM_SERVICE_STATUSW;
3699     {$else}
3700     LPENUM_SERVICE_STATUS = ^ENUM_SERVICE_STATUSA;
3701     _ENUM_SERVICE_STATUS  = ENUM_SERVICE_STATUSA;
3702     TENUMSERVICESTATUS    = ENUM_SERVICE_STATUSA;
3703     ENUMSERVICESTATUS     = ENUM_SERVICE_STATUSA;
3704     PENUMSERVICESTATUS    = ^ENUM_SERVICE_STATUSA;
3705     {$endif}
3706
3707     ENUMLOGFONTA = record
3708          elfLogFont : LOGFONTA;
3709          elfFullName : array[0..(LF_FULLFACESIZE)-1] of AnsiCHAR;
3710          elfStyle : array[0..(LF_FACESIZE)-1] of AnsiCHAR;
3711       end;
3712     tagENUMLOGFONTA =  ENUMLOGFONTA;
3713     TENUMLOGFONTA   =  ENUMLOGFONTA;
3714     PENUMLOGFONTA   = ^ENUMLOGFONTA;
3715
3716     ENUMLOGFONTW = record
3717          elfLogFont : LOGFONTW;
3718          elfFullName : array[0..(LF_FULLFACESIZE)-1] of WCHAR;
3719          elfStyle : array[0..(LF_FACESIZE)-1] of WCHAR;
3720       end;
3721     tagENUMLOGFONTW = ENUMLOGFONTW;
3722     TENUMLOGFONTW   = ENUMLOGFONTW;
3723     PENUMLOGFONTW   = ^ENUMLOGFONTW;
3724     {$ifdef Unicode}
3725     tagENUMLOGFONT  = ENUMLOGFONTW;
3726     TENUMLOGFONT    = ENUMLOGFONTW;
3727     ENUMLOGFONT     = ENUMLOGFONTW;
3728     PENUMLOGFONT    = ^ENUMLOGFONTW;
3729     {$else}
3730     tagENUMLOGFONT  = ENUMLOGFONTA;
3731     TENUMLOGFONT    = ENUMLOGFONTA;
3732     ENUMLOGFONT     = ENUMLOGFONTA;
3733     PENUMLOGFONT    = ^ENUMLOGFONTA;
3734     {$endif}
3735     ENUMLOGFONTEXA = record
3736          elfLogFont : LOGFONTA;
3737          elfFullName : array[0..(LF_FULLFACESIZE)-1] of AnsiCHAR;
3738          elfStyle : array[0..(LF_FACESIZE)-1] of AnsiCHAR;
3739          elfScript : array[0..(LF_FACESIZE)-1] of AnsiCHAR;
3740       end;
3741     tagENUMLOGFONTEXA = ENUMLOGFONTEXA;
3742     TENUMLOGFONTEXA   = ENUMLOGFONTEXA;
3743     PENUMLOGFONTEXA   = ^ENUMLOGFONTEXA;
3744
3745     ENUMLOGFONTEXW = record
3746          elfLogFont : LOGFONTW;
3747          elfFullName : array[0..(LF_FULLFACESIZE)-1] of WCHAR;
3748          elfStyle : array[0..(LF_FACESIZE)-1] of WCHAR;
3749          elfScript : array[0..(LF_FACESIZE)-1] of WCHAR;
3750       end;
3751          {
3752            Then follow:
3753
3754            TCHAR SourceName[]
3755            TCHAR Computername[]
3756            SID   UserSid
3757            TCHAR Strings[]
3758            BYTE  Data[]
3759            CHAR  Pad[]
3760            DWORD Length;
3761           }
3762     tagENUMLOGFONTEXW = ENUMLOGFONTEXW;
3763     TENUMLOGFONTEXW   = ENUMLOGFONTEXW;
3764     PENUMLOGFONTEXW   = ^ENUMLOGFONTEXW;
3765
3766     {$ifdef Unicode}
3767     tagENUMLOGFONTEX  = ENUMLOGFONTEXW;
3768     ENUMLOGFONTEX     = ENUMLOGFONTEXW;
3769     TENUMLOGFONTEX    = ENUMLOGFONTEXW;
3770     PENUMLOGFONTEX    = ^ENUMLOGFONTEXW;
3771     {$else}
3772     tagENUMLOGFONTEX  = ENUMLOGFONTEXA;
3773     ENUMLOGFONTEX     = ENUMLOGFONTEXA;
3774     TENUMLOGFONTEX    = ENUMLOGFONTEXA;
3775     PENUMLOGFONTEX    = ^ENUMLOGFONTEXA;
3776     {$endif}
3777
3778     EVENTLOGRECORD = record
3779          Length : DWORD;
3780          Reserved : DWORD;
3781          RecordNumber : DWORD;
3782          TimeGenerated : DWORD;
3783          TimeWritten : DWORD;
3784          EventID : DWORD;
3785          EventType : WORD;
3786          NumStrings : WORD;
3787          EventCategory : WORD;
3788          ReservedFlags : WORD;
3789          ClosingRecordNumber : DWORD;
3790          StringOffset : DWORD;
3791          UserSidLength : DWORD;
3792          UserSidOffset : DWORD;
3793          DataLength : DWORD;
3794          DataOffset : DWORD;
3795       end;
3796     _EVENTLOGRECORD = EVENTLOGRECORD;
3797     TEVENTLOGRECORD = EVENTLOGRECORD;
3798     PEVENTLOGRECORD = ^EVENTLOGRECORD;
3799
3800     EVENTMSG = record
3801          message : UINT;
3802          paramL : UINT;
3803          paramH : UINT;
3804          time : DWORD;
3805          hwnd : HWND;
3806       end;
3807     tagEVENTMSG = EVENTMSG;
3808     TEVENTMSG = EVENTMSG;
3809     PEVENTMSG = ^EVENTMSG;
3810
3811     EXCEPTION_POINTERS = record
3812          ExceptionRecord : PEXCEPTION_RECORD;
3813          ContextRecord : PCONTEXT;
3814       end;
3815     LPEXCEPTION_POINTERS = ^EXCEPTION_POINTERS;
3816     PEXCEPTION_POINTERS = ^EXCEPTION_POINTERS;
3817     _EXCEPTION_POINTERS = EXCEPTION_POINTERS;
3818     TEXCEPTIONPOINTERS = EXCEPTION_POINTERS;
3819     PEXCEPTIONPOINTERS = ^EXCEPTION_POINTERS;
3820
3821     EXT_BUTTON = record
3822          idCommand : WORD;
3823          idsHelp : WORD;
3824          fsStyle : WORD;
3825       end;
3826     LPEXT_BUTTON = ^EXT_BUTTON;
3827     _EXT_BUTTON = EXT_BUTTON;
3828     TEXTBUTTON = EXT_BUTTON;
3829     PEXTBUTTON = ^EXT_BUTTON;
3830
3831     FILTERKEYS = record
3832          cbSize : UINT;
3833          dwFlags : DWORD;
3834          iWaitMSec : DWORD;
3835          iDelayMSec : DWORD;
3836          iRepeatMSec : DWORD;
3837          iBounceMSec : DWORD;
3838       end;
3839     tagFILTERKEYS = FILTERKEYS;
3840     TFILTERKEYS = FILTERKEYS;
3841     PFILTERKEYS = ^FILTERKEYS;
3842
3843     FIND_NAME_BUFFER = record
3844          length : UCHAR;
3845          access_control : UCHAR;
3846          frame_control : UCHAR;
3847          destination_addr : array[0..5] of UCHAR;
3848          source_addr : array[0..5] of UCHAR;
3849          routing_info : array[0..17] of UCHAR;
3850       end;
3851     _FIND_NAME_BUFFER = FIND_NAME_BUFFER;
3852     TFINDNAMEBUFFER = FIND_NAME_BUFFER;
3853     PFINDNAMEBUFFER = ^FIND_NAME_BUFFER;
3854
3855     FIND_NAME_HEADER = record
3856          node_count : WORD;
3857          reserved : UCHAR;
3858          unique_group : UCHAR;
3859       end;
3860     _FIND_NAME_HEADER = FIND_NAME_HEADER;
3861     TFINDNAMEHEADER = FIND_NAME_HEADER;
3862     PFINDNAMEHEADER = ^FIND_NAME_HEADER;
3863
3864     FINDREPLACE = record
3865          lStructSize : DWORD;
3866          hwndOwner : HWND;
3867          hInstance : HINST;
3868          Flags : DWORD;
3869          lpstrFindWhat : LPTSTR;
3870          lpstrReplaceWith : LPTSTR;
3871          wFindWhatLen : WORD;
3872          wReplaceWithLen : WORD;
3873          lCustData : LPARAM;
3874          lpfnHook : LPFRHOOKPROC;
3875          lpTemplateName : LPCTSTR;
3876       end;
3877     LPFINDREPLACE = ^FINDREPLACE;
3878     TFINDREPLACE = FINDREPLACE;
3879     PFINDREPLACE = ^FINDREPLACE;
3880
3881     {FINDTEXT = record conflicts with FindText function }
3882     TFINDTEXT = record
3883          chrg : CHARRANGE;
3884          lpstrText : LPSTR;
3885       end;
3886     _findtext = TFINDTEXT;
3887     Pfindtext = ^TFINDTEXT;
3888
3889     FINDTEXTEX = record
3890          chrg : CHARRANGE;
3891          lpstrText : LPSTR;
3892          chrgText : CHARRANGE;
3893       end;
3894     _findtextex = FINDTEXTEX;
3895     Tfindtextex = FINDTEXTEX;
3896     Pfindtextex = ^FINDTEXTEX;
3897
3898     FMS_GETDRIVEINFOA = record
3899          dwTotalSpace : DWORD;
3900          dwFreeSpace : DWORD;
3901          szPath : array[0..259] of AnsiCHAR;
3902          szVolume : array[0..13] of AnsiCHAR;
3903          szShare : array[0..127] of AnsiCHAR;
3904       end;
3905     _FMS_GETDRIVEINFOA = FMS_GETDRIVEINFOA;
3906     TFMSGETDRIVEINFOA = FMS_GETDRIVEINFOA;
3907     PFMSGETDRIVEINFOA = ^FMS_GETDRIVEINFOA;
3908
3909     FMS_GETDRIVEINFOW = record
3910          dwTotalSpace : DWORD;
3911          dwFreeSpace : DWORD;
3912          szPath : array[0..259] of WCHAR;
3913          szVolume : array[0..13] of WCHAR;
3914          szShare : array[0..127] of WCHAR;
3915       end;
3916     _FMS_GETDRIVEINFOW = FMS_GETDRIVEINFOW;
3917     TFMSGETDRIVEINFOW  = FMS_GETDRIVEINFOW;
3918     PFMSGETDRIVEINFOW  = ^FMS_GETDRIVEINFOW;
3919     {$ifdef Unicode}
3920       _FMS_GETDRIVEINFO = FMS_GETDRIVEINFOW;
3921       TFMSGETDRIVEINFO  = FMS_GETDRIVEINFOW;
3922       PFMSGETDRIVEINFO  = PFMSGETDRIVEINFOW;
3923       FMS_GETDRIVEINFO  = FMS_GETDRIVEINFOW;
3924     {$else}
3925       _FMS_GETDRIVEINFO = FMS_GETDRIVEINFOA;
3926       TFMSGETDRIVEINFO  = FMS_GETDRIVEINFOA;
3927       PFMSGETDRIVEINFO  = PFMSGETDRIVEINFOA;
3928       FMS_GETDRIVEINFO  = FMS_GETDRIVEINFOA;
3929     {$endif}
3930
3931     FMS_GETFILESELA = record
3932          ftTime : FILETIME;
3933          dwSize : DWORD;
3934          bAttr : BYTE;
3935          szName : array[0..259] of AnsiCHAR;
3936       end;
3937     _FMS_GETFILESELA = FMS_GETFILESELA;
3938     TFMSGETFILESELA  = FMS_GETFILESELA;
3939     PFMSGETFILESELA  = ^FMS_GETFILESELA;
3940
3941     FMS_GETFILESELW = record
3942          ftTime : FILETIME;
3943          dwSize : DWORD;
3944          bAttr : BYTE;
3945          szName : array[0..259] of WCHAR;
3946       end;
3947     _FMS_GETFILESELW = FMS_GETFILESELW;
3948     TFMSGETFILESELW  = FMS_GETFILESELW;
3949     PFMSGETFILESELW  = ^FMS_GETFILESELW;
3950     {$ifdef Unicode}
3951       _FMS_GETFILESEL  = FMS_GETFILESELW;
3952       TFMSGETFILESEL   = FMS_GETFILESELW;
3953       FMS_GETFILESEL   = FMS_GETFILESELW;
3954       PFMSGETFILESEL   = PFMSGETFILESELW;
3955     {$else}
3956       _FMS_GETFILESEL  = FMS_GETFILESELA;
3957       TFMSGETFILESEL   = FMS_GETFILESELA;
3958       FMS_GETFILESEL   = FMS_GETFILESELA;
3959       PFMSGETFILESEL   = PFMSGETFILESELA;
3960     {$endif}
3961
3962     FMS_LOADA = record
3963          dwSize : DWORD;
3964          szMenuName : array[0..(MENU_TEXT_LEN)-1] of AnsiCHAR;
3965          hMenu : HMENU;
3966          wMenuDelta : UINT;
3967       end;
3968     _FMS_LOADA = FMS_LOADA;
3969     TFMSLOADA  = FMS_LOADA;
3970     PFMSLOADA  = ^FMS_LOADA;
3971
3972     FMS_LOADW = record
3973          dwSize : DWORD;
3974          szMenuName : array[0..(MENU_TEXT_LEN)-1] of WCHAR;
3975          hMenu : HMENU;
3976          wMenuDelta : UINT;
3977       end;
3978     _FMS_LOADW = FMS_LOADW;
3979     TFMSLOADW = FMS_LOADW;
3980     PFMSLOADW = ^FMS_LOADW;
3981     {$ifdef unicode}
3982       _FMS_LOAD = FMS_LOADW;
3983       TFMSLOAD  = FMS_LOADW;
3984       PFMSLOAD  = PFMSLOADW;
3985       FMS_LOAD  = FMS_LOADW;
3986     {$else}
3987       _FMS_LOAD = FMS_LOADA;
3988       TFMSLOAD  = FMS_LOADA;
3989       PFMSLOAD  = PFMSLOADA;
3990       FMS_LOAD  = FMS_LOADA;
3991     {$endif}
3992
3993     FMS_TOOLBARLOAD = record
3994          dwSize : DWORD;
3995          lpButtons : LPEXT_BUTTON;
3996          cButtons : WORD;
3997          cBitmaps : WORD;
3998          idBitmap : WORD;
3999          hBitmap : HBITMAP;
4000       end;
4001     _FMS_TOOLBARLOAD = FMS_TOOLBARLOAD;
4002     TFMSTOOLBARLOAD = FMS_TOOLBARLOAD;
4003     PFMSTOOLBARLOAD = ^FMS_TOOLBARLOAD;
4004
4005     FOCUS_EVENT_RECORD = record
4006          bSetFocus : WINBOOL;
4007       end;
4008     _FOCUS_EVENT_RECORD = FOCUS_EVENT_RECORD;
4009     TFOCUSEVENTRECORD = FOCUS_EVENT_RECORD;
4010     PFOCUSEVENTRECORD = ^FOCUS_EVENT_RECORD;
4011
4012     FORM_INFO_1 = record
4013          Flags : DWORD;
4014          pName : LPTSTR;
4015          Size : SIZEL;
4016          ImageableArea : RECTL;
4017       end;
4018     _FORM_INFO_1 = FORM_INFO_1;
4019     TFORMINFO1 = FORM_INFO_1;
4020     PFORMINFO1 = ^FORM_INFO_1;
4021
4022     FORMAT_PARAMETERS = record
4023          MediaType : MEDIA_TYPE;
4024          StartCylinderNumber : DWORD;
4025          EndCylinderNumber : DWORD;
4026          StartHeadNumber : DWORD;
4027          EndHeadNumber : DWORD;
4028       end;
4029     _FORMAT_PARAMETERS = FORMAT_PARAMETERS;
4030     TFORMATPARAMETERS = FORMAT_PARAMETERS;
4031     PFORMATPARAMETERS = ^FORMAT_PARAMETERS;
4032
4033     FORMATRANGE = record
4034          _hdc : HDC;
4035          hdcTarget : HDC;
4036          rc : RECT;
4037          rcPage : RECT;
4038          chrg : CHARRANGE;
4039       end;
4040     _formatrange = FORMATRANGE;
4041     Tformatrange = FORMATRANGE;
4042     Pformatrange = ^FORMATRANGE;
4043
4044     GCP_RESULTSA = record
4045          lStructSize : DWORD;
4046          lpOutString : LPSTR;
4047          lpOrder : ^UINT;
4048          lpDx : ^WINT;
4049          lpCaretPos : ^WINT;
4050          lpClass : LPSTR;           { Unicode-independent, i.e. not LPTSTR }
4051          lpGlyphs : LPWSTR;         { Unicode-independent }
4052          nGlyphs : UINT;
4053          nMaxFit : WINT;
4054       end;
4055     LPGCP_RESULTSA = ^GCP_RESULTSA;
4056     tagGCP_RESULTSA= GCP_RESULTSA;
4057     TGCPRESULTSA   = GCP_RESULTSA;
4058     PGCPRESULTSA   = ^GCP_RESULTSA;
4059
4060     GCP_RESULTSW = record
4061          lStructSize : DWORD;
4062          lpOutString : LPWSTR;
4063          lpOrder : ^UINT;
4064          lpDx : ^WINT;
4065          lpCaretPos : ^WINT;
4066          lpClass : LPSTR;           { Unicode-independent, i.e. not LPTSTR }
4067          lpGlyphs : LPWSTR;         { Unicode-independent }
4068          nGlyphs : UINT;
4069          nMaxFit : WINT;
4070       end;
4071     LPGCP_RESULTSW  = ^GCP_RESULTSW;
4072     tagGCP_RESULTSW = GCP_RESULTSW;
4073     TGCPRESULTSW    = GCP_RESULTSW;
4074     PGCPRESULTSW    = ^GCP_RESULTSW;
4075
4076     {$ifdef Unicode}
4077     LPGCP_RESULTS   = ^GCP_RESULTSW;
4078     tagGCP_RESULTS  = GCP_RESULTSW;
4079     TGCPRESULTS     = GCP_RESULTSW;
4080     GCPRESULTS      = GCP_RESULTSW;
4081     PGCPRESULTS     = ^GCP_RESULTSW;
4082     {$else}
4083     LPGCP_RESULTS   = ^GCP_RESULTSA;
4084     tagGCP_RESULTS  = GCP_RESULTSA;
4085     TGCPRESULTS     = GCP_RESULTSA;
4086     GCPRESULTS      = GCP_RESULTSA;
4087     PGCPRESULTS     = ^GCP_RESULTSA;
4088     {$endif}
4089
4090     GENERIC_MAPPING = record
4091          GenericRead : ACCESS_MASK;
4092          GenericWrite : ACCESS_MASK;
4093          GenericExecute : ACCESS_MASK;
4094          GenericAll : ACCESS_MASK;
4095       end;
4096     PGENERIC_MAPPING = ^GENERIC_MAPPING;
4097     _GENERIC_MAPPING = GENERIC_MAPPING;
4098     TGENERICMAPPING = GENERIC_MAPPING;
4099     PGENERICMAPPING = ^GENERIC_MAPPING;
4100
4101     GLYPHMETRICS = record
4102          gmBlackBoxX : UINT;
4103          gmBlackBoxY : UINT;
4104          gmptGlyphOrigin : POINT;
4105          gmCellIncX : SHORT;
4106          gmCellIncY : SHORT;
4107       end;
4108     LPGLYPHMETRICS = ^GLYPHMETRICS;
4109     _GLYPHMETRICS = GLYPHMETRICS;
4110     TGLYPHMETRICS = GLYPHMETRICS;
4111     PGLYPHMETRICS = ^GLYPHMETRICS;
4112
4113     HANDLETABLE = record
4114          objectHandle : array[0..0] of HGDIOBJ;
4115       end;
4116     tagHANDLETABLE = HANDLETABLE;
4117     THANDLETABLE = HANDLETABLE;
4118     LPHANDLETABLE = ^HANDLETABLE;
4119
4120     HD_HITTESTINFO = record
4121          pt : POINT;
4122          flags : UINT;
4123          iItem : longint;
4124       end;
4125     _HD_HITTESTINFO = HD_HITTESTINFO;
4126     THDHITTESTINFO = HD_HITTESTINFO;
4127     PHDHITTESTINFO = ^HD_HITTESTINFO;
4128
4129     HD_ITEM = record
4130          mask : UINT;
4131          cxy : longint;
4132          pszText : LPTSTR;
4133          hbm : HBITMAP;
4134          cchTextMax : longint;
4135          fmt : longint;
4136          lParam : LPARAM;
4137       end;
4138     _HD_ITEM = HD_ITEM;
4139     THDITEM = HD_ITEM;
4140     PHDITEM = ^HD_ITEM;
4141
4142     WINDOWPOS = record
4143          _hwnd : HWND;
4144          hwndInsertAfter : HWND;
4145          x : longint;
4146          y : longint;
4147          cx : longint;
4148          cy : longint;
4149          flags : UINT;
4150       end;
4151     LPWINDOWPOS = ^WINDOWPOS;
4152     _WINDOWPOS = WINDOWPOS;
4153     TWINDOWPOS = WINDOWPOS;
4154     PWINDOWPOS = ^WINDOWPOS;
4155
4156     PWindowInfo = ^TWindowInfo;
4157     LPWindowInfo = ^TWindowInfo;
4158     tagWINDOWINFO = record
4159          cbSize: DWORD;
4160          rcWindow: TRect;
4161          rcClient: TRect;
4162          dwStyle: DWORD;
4163          dwExStyle: DWORD;
4164          dwWindowStatus: DWORD;
4165          cxWindowBorders: UINT;
4166          cyWindowBorders: UINT;
4167          atomWindowType: TAtom;
4168          wCreatorVersion: WORD;
4169       end;
4170     TWindowInfo = tagWINDOWINFO;
4171
4172     HD_LAYOUT = record
4173          prc : ^RECT;
4174          pwpos : ^WINDOWPOS;
4175       end;
4176     _HD_LAYOUT = HD_LAYOUT;
4177     THDLAYOUT = HD_LAYOUT;
4178     PHDLAYOUT = ^HD_LAYOUT;
4179
4180     HD_NOTIFY = record
4181          hdr : NMHDR;
4182          iItem : longint;
4183          iButton : longint;
4184          pitem : ^HD_ITEM;
4185       end;
4186     _HD_NOTIFY = HD_NOTIFY;
4187     THDNOTIFY = HD_NOTIFY;
4188     PHDNOTIFY = ^HD_NOTIFY;
4189
4190     HELPINFO = record
4191          cbSize : UINT;
4192          iContextType : longint;
4193          iCtrlId : longint;
4194          hItemHandle : HANDLE;
4195          dwContextId : DWORD_PTR;
4196 // NOTE:  this is defined as DWORD in http://msdn.microsoft.com/en-us/library/windows/desktop/bb773313%28v=vs.85%29.asp
4197// but mingw has it as DWORD_PTR, so we will use that
4198          MousePos : POINT;
4199       end;
4200     LPHELPINFO = ^HELPINFO;
4201     tagHELPINFO = HELPINFO;
4202     THELPINFO = HELPINFO;
4203     PHELPINFO = ^HELPINFO;
4204
4205     HELPWININFOA = record
4206          wStructSize : longint;
4207          x : longint;
4208          y : longint;
4209          dx : longint;
4210          dy : longint;
4211          wMax : longint;
4212          rgchMember : array[0..1] of AnsiCHAR;
4213       end;
4214     THELPWININFOA = HELPWININFOA;
4215     PHELPWININFOA = ^HELPWININFOA;
4216
4217     HELPWININFOW = record
4218          wStructSize : longint;
4219          x : longint;
4220          y : longint;
4221          dx : longint;
4222          dy : longint;
4223          wMax : longint;
4224          rgchMember : array[0..1] of WCHAR;
4225       end;
4226     THELPWININFOW = HELPWININFOW;
4227     PHELPWININFOW = ^HELPWININFOW;
4228
4229     {$ifdef Unicode}
4230       HELPWININFO  = HELPWININFOW;
4231       THELPWININFO = HELPWININFOW;
4232       PHELPWININFO = PHELPWININFOW;
4233     {$else}
4234       HELPWININFO  = HELPWININFOA;
4235       THELPWININFO = HELPWININFOA;
4236       PHELPWININFO = PHELPWININFOA;
4237     {$endif}
4238
4239     HIGHCONTRAST = record
4240          cbSize : UINT;
4241          dwFlags : DWORD;
4242          lpszDefaultScheme : LPTSTR;
4243       end;
4244     LPHIGHCONTRAST = ^HIGHCONTRAST;
4245     tagHIGHCONTRAST = HIGHCONTRAST;
4246     THIGHCONTRAST = HIGHCONTRAST;
4247     PHIGHCONTRAST = ^HIGHCONTRAST;
4248
4249     HSZPAIR = record
4250          hszSvc : HSZ;
4251          hszTopic : HSZ;
4252       end;
4253     tagHSZPAIR = HSZPAIR;
4254     THSZPAIR = HSZPAIR;
4255     PHSZPAIR = ^HSZPAIR;
4256
4257     ICONINFO = record
4258          fIcon : WINBOOL;
4259          xHotspot : DWORD;
4260          yHotspot : DWORD;
4261          hbmMask : HBITMAP;
4262          hbmColor : HBITMAP;
4263       end;
4264     _ICONINFO = ICONINFO;
4265     TICONINFO = ICONINFO;
4266     PICONINFO = ^ICONINFO;
4267
4268     ICONMETRICS = record
4269          cbSize : UINT;
4270          iHorzSpacing : longint;
4271          iVertSpacing : longint;
4272          iTitleWrap : longint;
4273          lfFont : LOGFONT;
4274       end;
4275     LPICONMETRICS = ^ICONMETRICS;
4276     tagICONMETRICS = ICONMETRICS;
4277     TICONMETRICS = ICONMETRICS;
4278     PICONMETRICS = ^ICONMETRICS;
4279
4280     IMAGEINFO = record
4281          hbmImage : HBITMAP;
4282          hbmMask : HBITMAP;
4283          Unused1 : longint;
4284          Unused2 : longint;
4285          rcImage : RECT;
4286       end;
4287     _IMAGEINFO = IMAGEINFO;
4288     TIMAGEINFO = IMAGEINFO;
4289     PIMAGEINFO = ^IMAGEINFO;
4290
4291     KEY_EVENT_RECORD = packed record
4292          bKeyDown : WINBOOL;
4293          wRepeatCount : WORD;
4294          wVirtualKeyCode : WORD;
4295          wVirtualScanCode : WORD;
4296          case longint of
4297             0 : ( UnicodeChar : WCHAR;
4298                   dwControlKeyState : DWORD; );
4299             1 : ( AsciiChar : CHAR );
4300       end;
4301     _KEY_EVENT_RECORD = KEY_EVENT_RECORD;
4302     TKEYEVENTRECORD = KEY_EVENT_RECORD;
4303     PKEYEVENTRECORD = ^KEY_EVENT_RECORD;
4304
4305     MOUSE_EVENT_RECORD = record
4306          dwMousePosition : COORD;
4307          dwButtonState : DWORD;
4308          dwControlKeyState : DWORD;
4309          dwEventFlags : DWORD;
4310       end;
4311     _MOUSE_EVENT_RECORD = MOUSE_EVENT_RECORD;
4312     TMOUSEEVENTRECORD = MOUSE_EVENT_RECORD;
4313     PMOUSEEVENTRECORD = ^MOUSE_EVENT_RECORD;
4314
4315     WINDOW_BUFFER_SIZE_RECORD = record
4316          dwSize : COORD;
4317       end;
4318     _WINDOW_BUFFER_SIZE_RECORD = WINDOW_BUFFER_SIZE_RECORD;
4319     TWINDOWBUFFERSIZERECORD = WINDOW_BUFFER_SIZE_RECORD;
4320     PWINDOWBUFFERSIZERECORD = ^WINDOW_BUFFER_SIZE_RECORD;
4321
4322     MENU_EVENT_RECORD = record
4323          dwCommandId : UINT;
4324       end;
4325     PMENU_EVENT_RECORD = ^MENU_EVENT_RECORD;
4326     _MENU_EVENT_RECORD = MENU_EVENT_RECORD;
4327     TMENUEVENTRECORD = MENU_EVENT_RECORD;
4328     PMENUEVENTRECORD = ^MENU_EVENT_RECORD;
4329
4330     INPUT_RECORD = record
4331          EventType: Word;
4332          Reserved: Word;
4333          Event : record case longint of
4334                 0 : ( KeyEvent : KEY_EVENT_RECORD );
4335                 1 : ( MouseEvent : MOUSE_EVENT_RECORD );
4336                 2 : ( WindowBufferSizeEvent : WINDOW_BUFFER_SIZE_RECORD );
4337                 3 : ( MenuEvent : MENU_EVENT_RECORD );
4338                 4 : ( FocusEvent : FOCUS_EVENT_RECORD );
4339       end;
4340      end;
4341     PINPUT_RECORD = ^INPUT_RECORD;
4342     _INPUT_RECORD = INPUT_RECORD;
4343     TINPUTRECORD = INPUT_RECORD;
4344     PINPUTRECORD = ^INPUT_RECORD;
4345
4346     SYSTEMTIME = record
4347          case integer of
4348           1 : (
4349             wYear : WORD;
4350             wMonth : WORD;
4351             wDayOfWeek : WORD;
4352             wDay : WORD;
4353             wHour : WORD;
4354             wMinute : WORD;
4355             wSecond : WORD;
4356             wMilliseconds : WORD;
4357               );
4358           { Compatibility for FPC }
4359           2 : (
4360             Year : WORD;
4361             Month : WORD;
4362             DayOfWeek : WORD;
4363             Day : WORD;
4364             Hour : WORD;
4365             Minute : WORD;
4366             Second : WORD;
4367             Millisecond : WORD;
4368               );
4369       end;
4370     LPSYSTEMTIME = ^SYSTEMTIME;
4371     _SYSTEMTIME = SYSTEMTIME;
4372     TSYSTEMTIME = SYSTEMTIME;
4373     PSYSTEMTIME = ^SYSTEMTIME;
4374
4375     JOB_INFO_1 = record
4376          JobId : DWORD;
4377          pPrinterName : LPTSTR;
4378          pMachineName : LPTSTR;
4379          pUserName : LPTSTR;
4380          pDocument : LPTSTR;
4381          pDatatype : LPTSTR;
4382          pStatus : LPTSTR;
4383          Status : DWORD;
4384          Priority : DWORD;
4385          Position : DWORD;
4386          TotalPages : DWORD;
4387          PagesPrinted : DWORD;
4388          Submitted : SYSTEMTIME;
4389       end;
4390     _JOB_INFO_1 = JOB_INFO_1;
4391     TJOBINFO1 = JOB_INFO_1;
4392     PJOBINFO1 = ^JOB_INFO_1;
4393
4394     SID_IDENTIFIER_AUTHORITY = record
4395          Value : array[0..5] of BYTE;
4396       end;
4397     LPSID_IDENTIFIER_AUTHORITY = ^SID_IDENTIFIER_AUTHORITY;
4398     PSID_IDENTIFIER_AUTHORITY = ^SID_IDENTIFIER_AUTHORITY;
4399     _SID_IDENTIFIER_AUTHORITY = SID_IDENTIFIER_AUTHORITY;
4400     TSIDIDENTIFIERAUTHORITY = SID_IDENTIFIER_AUTHORITY;
4401     PSIDIDENTIFIERAUTHORITY = ^SID_IDENTIFIER_AUTHORITY;
4402
4403     SID = record
4404          Revision : BYTE;
4405          SubAuthorityCount : BYTE;
4406          IdentifierAuthority : SID_IDENTIFIER_AUTHORITY;
4407          SubAuthority : array[0..(ANYSIZE_ARRAY)-1] of DWORD;
4408       end;
4409     _SID = SID;
4410     TSID = SID;
4411     PSID = ^SID;
4412
4413     SECURITY_DESCRIPTOR_CONTROL = WORD;
4414     PSECURITY_DESCRIPTOR_CONTROL = ^SECURITY_DESCRIPTOR_CONTROL;
4415     TSECURITYDESCRIPTORCONTROL = SECURITY_DESCRIPTOR_CONTROL;
4416     PSECURITYDESCRIPTORCONTROL = ^SECURITY_DESCRIPTOR_CONTROL;
4417
4418     SECURITY_DESCRIPTOR = record
4419          Revision : BYTE;
4420          Sbz1 : BYTE;
4421          Control : SECURITY_DESCRIPTOR_CONTROL;
4422          Owner : PSID;
4423          Group : PSID;
4424          Sacl : PACL;
4425          Dacl : PACL;
4426       end;
4427     PSECURITY_DESCRIPTOR = ^SECURITY_DESCRIPTOR;
4428     _SECURITY_DESCRIPTOR = SECURITY_DESCRIPTOR;
4429     TSECURITYDESCRIPTOR = SECURITY_DESCRIPTOR;
4430     PSECURITYDESCRIPTOR = ^SECURITY_DESCRIPTOR;
4431
4432     JOB_INFO_2 = record
4433          JobId : DWORD;
4434          pPrinterName : LPTSTR;
4435          pMachineName : LPTSTR;
4436          pUserName : LPTSTR;
4437          pDocument : LPTSTR;
4438          pNotifyName : LPTSTR;
4439          pDatatype : LPTSTR;
4440          pPrintProcessor : LPTSTR;
4441          pParameters : LPTSTR;
4442          pDriverName : LPTSTR;
4443          pDevMode : LPDEVMODE;
4444          pStatus : LPTSTR;
4445          pSecurityDescriptor : PSECURITY_DESCRIPTOR;
4446          Status : DWORD;
4447          Priority : DWORD;
4448          Position : DWORD;
4449          StartTime : DWORD;
4450          UntilTime : DWORD;
4451          TotalPages : DWORD;
4452          Size : DWORD;
4453          Submitted : SYSTEMTIME;
4454          Time : DWORD;
4455          PagesPrinted : DWORD;
4456       end;
4457     _JOB_INFO_2 = JOB_INFO_2;
4458     TJOBINFO2 = JOB_INFO_2;
4459     PJOBINFO2 = ^JOB_INFO_2;
4460
4461     KERNINGPAIR = record
4462          wFirst : WORD;
4463          wSecond : WORD;
4464          iKernAmount : longint;
4465       end;
4466     LPKERNINGPAIR = ^KERNINGPAIR;
4467     tagKERNINGPAIR = KERNINGPAIR;
4468     TKERNINGPAIR = KERNINGPAIR;
4469     PKERNINGPAIR = ^KERNINGPAIR;
4470
4471     LANA_ENUM = record
4472          length : UCHAR;
4473          lana : array[0..(MAX_LANA)-1] of UCHAR;
4474       end;
4475     _LANA_ENUM = LANA_ENUM;
4476     TLANAENUM = LANA_ENUM;
4477     PLANAENUM = ^LANA_ENUM;
4478
4479     LDT_ENTRY = record
4480          LimitLow : WORD;
4481          BaseLow : WORD;
4482          HighWord : record
4483              case longint of
4484                 0 : ( Bytes : record
4485                      BaseMid : BYTE;
4486                      Flags1 : BYTE;
4487                      Flags2 : BYTE;
4488                      BaseHi : BYTE;
4489                   end );
4490                 1 : ( Bits : record
4491                      flag0 : longint;
4492                   end );
4493              end;
4494       end;
4495     LPLDT_ENTRY = ^LDT_ENTRY;
4496     PLDT_ENTRY = ^LDT_ENTRY;
4497     _LDT_ENTRY = LDT_ENTRY;
4498     TLDTENTRY = LDT_ENTRY;
4499     PLDTENTRY = ^LDT_ENTRY;
4500
4501  const
4502     bm_LDT_ENTRY_BaseMid = $FF;
4503     bp_LDT_ENTRY_BaseMid = 0;
4504     bm_LDT_ENTRY_Type = $1F00;
4505     bp_LDT_ENTRY_Type = 8;
4506     bm_LDT_ENTRY_Dpl = $6000;
4507     bp_LDT_ENTRY_Dpl = 13;
4508     bm_LDT_ENTRY_Pres = $8000;
4509     bp_LDT_ENTRY_Pres = 15;
4510     bm_LDT_ENTRY_LimitHi = $F0000;
4511     bp_LDT_ENTRY_LimitHi = 16;
4512     bm_LDT_ENTRY_Sys = $100000;
4513     bp_LDT_ENTRY_Sys = 20;
4514     bm_LDT_ENTRY_Reserved_0 = $200000;
4515     bp_LDT_ENTRY_Reserved_0 = 21;
4516     bm_LDT_ENTRY_Default_Big = $400000;
4517     bp_LDT_ENTRY_Default_Big = 22;
4518     bm_LDT_ENTRY_Granularity = $800000;
4519     bp_LDT_ENTRY_Granularity = 23;
4520     bm_LDT_ENTRY_BaseHi = $FF000000;
4521     bp_LDT_ENTRY_BaseHi = 24;
4522
4523  type
4524
4525     LOCALESIGNATURE = record
4526          lsUsb : array[0..3] of DWORD;
4527          lsCsbDefault : array[0..1] of DWORD;
4528          lsCsbSupported : array[0..1] of DWORD;
4529       end;
4530     tagLOCALESIGNATURE = LOCALESIGNATURE;
4531     TLOCALESIGNATURE = LOCALESIGNATURE;
4532     PLOCALESIGNATURE = ^LOCALESIGNATURE;
4533
4534     LOCALGROUP_MEMBERS_INFO_0 = record
4535          lgrmi0_sid : PSID;
4536       end;
4537     _LOCALGROUP_MEMBERS_INFO_0 = LOCALGROUP_MEMBERS_INFO_0;
4538     TLOCALGROUPMEMBERSINFO0 = LOCALGROUP_MEMBERS_INFO_0;
4539     PLOCALGROUPMEMBERSINFO0 = ^LOCALGROUP_MEMBERS_INFO_0;
4540
4541     LOCALGROUP_MEMBERS_INFO_3 = record
4542          lgrmi3_domainandname : LPWSTR;
4543       end;
4544     _LOCALGROUP_MEMBERS_INFO_3 = LOCALGROUP_MEMBERS_INFO_3;
4545     TLOCALGROUPMEMBERSINFO3 = LOCALGROUP_MEMBERS_INFO_3;
4546     PLOCALGROUPMEMBERSINFO3 = ^LOCALGROUP_MEMBERS_INFO_3;
4547
4548     FXPT16DOT16 = longint;
4549     LPFXPT16DOT16 = ^FXPT16DOT16;
4550     TFXPT16DOT16 = FXPT16DOT16;
4551     PFXPT16DOT16 = ^FXPT16DOT16;
4552
4553     LUID = TlargeInteger;
4554     TLUID = LUID;
4555     PLUID = ^LUID;
4556
4557     LUID_AND_ATTRIBUTES = packed record
4558          Luid : LUID;
4559          Attributes : DWORD;
4560       end;
4561     _LUID_AND_ATTRIBUTES = LUID_AND_ATTRIBUTES;
4562     TLUIDANDATTRIBUTES = LUID_AND_ATTRIBUTES;
4563     PLUIDANDATTRIBUTES = ^LUID_AND_ATTRIBUTES;
4564
4565     LUID_AND_ATTRIBUTES_ARRAY = array[0..(ANYSIZE_ARRAY)-1] of LUID_AND_ATTRIBUTES;
4566     PLUID_AND_ATTRIBUTES_ARRAY = ^LUID_AND_ATTRIBUTES_ARRAY;
4567     TLUIDANDATTRIBUTESARRAY = LUID_AND_ATTRIBUTES_ARRAY;
4568     PLUIDANDATTRIBUTESARRAY = ^LUID_AND_ATTRIBUTES_ARRAY;
4569
4570     LV_COLUMN = record
4571          mask : UINT;
4572          fmt : longint;
4573          cx : longint;
4574          pszText : LPTSTR;
4575          cchTextMax : longint;
4576          iSubItem : longint;
4577       end;
4578     _LV_COLUMN = LV_COLUMN;
4579     TLVCOLUMN = LV_COLUMN;
4580     PLVCOLUMN = ^LV_COLUMN;
4581
4582     LV_ITEM = record
4583          mask : UINT;
4584          iItem : longint;
4585          iSubItem : longint;
4586          state : UINT;
4587          stateMask : UINT;
4588          pszText : LPTSTR;
4589          cchTextMax : longint;
4590          iImage : longint;
4591          lParam : LPARAM;
4592       end;
4593     _LV_ITEM = LV_ITEM;
4594     TLVITEM = LV_ITEM;
4595     PLVITEM = ^LV_ITEM;
4596
4597     LV_DISPINFO = record
4598          hdr : NMHDR;
4599          item : LV_ITEM;
4600       end;
4601     tagLV_DISPINFO = LV_DISPINFO;
4602     TLVDISPINFO = LV_DISPINFO;
4603     PLVDISPINFO = ^LV_DISPINFO;
4604
4605     LV_FINDINFO = record
4606          flags : UINT;
4607          psz : LPCTSTR;
4608          lParam : LPARAM;
4609          pt : POINT;
4610          vkDirection : UINT;
4611       end;
4612     _LV_FINDINFO = LV_FINDINFO;
4613     TLVFINDINFO = LV_FINDINFO;
4614     PLVFINDINFO = ^LV_FINDINFO;
4615
4616     LV_HITTESTINFO = record
4617          pt : POINT;
4618          flags : UINT;
4619          iItem : longint;
4620          iSubItem : longint;
4621          iGroup : longint;
4622       end;
4623     _LV_HITTESTINFO = LV_HITTESTINFO;
4624     TLVHITTESTINFO = LV_HITTESTINFO;
4625     PLVHITTESTINFO = ^LV_HITTESTINFO;
4626
4627     LV_KEYDOWN = record
4628          hdr : NMHDR;
4629          wVKey : WORD;
4630          flags : UINT;
4631       end;
4632     tagLV_KEYDOWN = LV_KEYDOWN;
4633     TLVKEYDOWN = LV_KEYDOWN;
4634     PLVKEYDOWN = ^LV_KEYDOWN;
4635
4636     MAT2 = packed record
4637          eM11 : FIXED;
4638          eM12 : FIXED;
4639          eM21 : FIXED;
4640          eM22 : FIXED;
4641       end;
4642     _MAT2 = MAT2;
4643     TMAT2 = MAT2;
4644     PMAT2 = ^MAT2;
4645
4646     MDICREATESTRUCT = record
4647          szClass : LPCTSTR;
4648          szTitle : LPCTSTR;
4649          hOwner : HANDLE;
4650          x : longint;
4651          y : longint;
4652          cx : longint;
4653          cy : longint;
4654          style : DWORD;
4655          lParam : LPARAM;
4656       end;
4657     LPMDICREATESTRUCT = ^MDICREATESTRUCT;
4658     tagMDICREATESTRUCT = MDICREATESTRUCT;
4659     TMDICREATESTRUCT = MDICREATESTRUCT;
4660     PMDICREATESTRUCT = ^MDICREATESTRUCT;
4661
4662     MEASUREITEMSTRUCT = record
4663          CtlType : UINT;
4664          CtlID : UINT;
4665          itemID : UINT;
4666          itemWidth : UINT;
4667          itemHeight : UINT;
4668          itemData : ULONG_PTR;
4669       end;
4670     LPMEASUREITEMSTRUCT = ^MEASUREITEMSTRUCT;
4671     tagMEASUREITEMSTRUCT = MEASUREITEMSTRUCT;
4672     TMEASUREITEMSTRUCT = MEASUREITEMSTRUCT;
4673     PMEASUREITEMSTRUCT = ^MEASUREITEMSTRUCT;
4674
4675     MEMORY_BASIC_INFORMATION = record
4676          BaseAddress : PVOID;
4677          AllocationBase : PVOID;
4678          AllocationProtect : DWORD;
4679          RegionSize : PTRUINT; // MvdV: size_t in win SDK 6.0.
4680          State : DWORD;
4681          Protect : DWORD;
4682          _Type : DWORD;
4683       end;
4684     PMEMORY_BASIC_INFORMATION = ^MEMORY_BASIC_INFORMATION;
4685     _MEMORY_BASIC_INFORMATION = MEMORY_BASIC_INFORMATION;
4686     TMEMORYBASICINFORMATION = MEMORY_BASIC_INFORMATION;
4687     PMEMORYBASICINFORMATION = ^MEMORY_BASIC_INFORMATION;
4688
4689     MEMORYSTATUS = record
4690          dwLength : DWORD;
4691          dwMemoryLoad : DWORD;
4692          dwTotalPhys : SIZE_T;
4693          dwAvailPhys : SIZE_T;
4694          dwTotalPageFile : SIZE_T;
4695          dwAvailPageFile : SIZE_T;
4696          dwTotalVirtual : SIZE_T;
4697          dwAvailVirtual : SIZE_T;
4698       end;
4699     LPMEMORYSTATUS = ^MEMORYSTATUS;
4700     _MEMORYSTATUS = MEMORYSTATUS;
4701     TMEMORYSTATUS = MEMORYSTATUS;
4702     PMEMORYSTATUS = ^MEMORYSTATUS;
4703
4704     MENUEX_TEMPLATE_HEADER = record
4705          wVersion : WORD;
4706          wOffset : WORD;
4707          dwHelpId : DWORD;
4708       end;
4709     TMENUXTEMPLATEHEADER = MENUEX_TEMPLATE_HEADER;
4710     PMENUXTEMPLATEHEADER = ^MENUEX_TEMPLATE_HEADER;
4711
4712     MENUEX_TEMPLATE_ITEM = record
4713          dwType : DWORD;
4714          dwState : DWORD;
4715          uId : UINT;
4716          bResInfo : BYTE;
4717          szText : array[0..0] of WCHAR;
4718          dwHelpId : DWORD;
4719       end;
4720     TMENUEXTEMPLATEITEM = MENUEX_TEMPLATE_ITEM;
4721     PMENUEXTEMPLATEITEM = ^MENUEX_TEMPLATE_ITEM;
4722
4723     MENUINFO = record
4724          cbSize : DWORD;
4725          fMask : DWORD;
4726          dwStyle : DWORD;
4727          cyMax : UINT;
4728          hbrBack : HBRUSH;
4729          dwContextHelpID : DWORD;
4730          dwMenuData : ULONG_PTR;
4731       end;
4732     LPMENUINFO = ^MENUINFO;
4733     LPCMENUINFO = ^MENUINFO;
4734     tagMENUINFO = MENUINFO;
4735     TMENUINFO = MENUINFO;
4736     PMENUINFO = ^MENUINFO;
4737
4738     MENUITEMINFOA = record
4739          cbSize : UINT;
4740          fMask : UINT;
4741          fType : UINT;
4742          fState : UINT;
4743          wID : UINT;
4744          hSubMenu : HMENU;
4745          hbmpChecked : HBITMAP;
4746          hbmpUnchecked : HBITMAP;
4747          dwItemData : ULONG_PTR;
4748          dwTypeData : LPSTR;
4749          cch : UINT;
4750          hbmpItem : HBITMAP;
4751       end;
4752     LPMENUITEMINFOA = ^MENUITEMINFOA;
4753     LPCMENUITEMINFOA = ^MENUITEMINFOA;
4754     tagMENUITEMINFOA = MENUITEMINFOA;
4755     TMENUITEMINFOA = MENUITEMINFOA;
4756     PMENUITEMINFOA = ^MENUITEMINFOA;
4757
4758     MENUITEMINFOW = record
4759          cbSize : UINT;
4760          fMask : UINT;
4761          fType : UINT;
4762          fState : UINT;
4763          wID : UINT;
4764          hSubMenu : HMENU;
4765          hbmpChecked : HBITMAP;
4766          hbmpUnchecked : HBITMAP;
4767          dwItemData : ULONG_PTR;
4768          dwTypeData : LPWSTR;
4769          cch : UINT;
4770          hbmpItem : HBITMAP;
4771       end;
4772     LPMENUITEMINFOW = ^MENUITEMINFOW;
4773     LPCMENUITEMINFOW = ^MENUITEMINFOW;
4774     tagMENUITEMINFOW = MENUITEMINFOW;
4775     TMENUITEMINFOW = MENUITEMINFOW;
4776     PMENUITEMINFOW = ^MENUITEMINFOW;
4777     {$ifdef unicode}
4778     LPMENUITEMINFO   = ^MENUITEMINFOW;
4779     LPCMENUITEMINFO  = ^MENUITEMINFOW;
4780     tagMENUITEMINFO  =  MENUITEMINFOW;
4781     TMENUITEMINFO    =  MENUITEMINFOW;
4782     PMENUITEMINFO    = ^MENUITEMINFOW;
4783     MENUITEMINFO     =  MENUITEMINFOW;
4784     {$ELSE}
4785     LPMENUITEMINFO   = ^MENUITEMINFOA;
4786     LPCMENUITEMINFO  = ^MENUITEMINFOA;
4787     tagMENUITEMINFO  = MENUITEMINFOA;
4788     TMENUITEMINFO    = MENUITEMINFOA;
4789     PMENUITEMINFO    = ^MENUITEMINFOA;
4790     MENUITEMINFO     =  MENUITEMINFOA;
4791     {$ENDIF}
4792
4793     MENUITEMTEMPLATE = record
4794          mtOption : WORD;
4795          mtID : WORD;
4796          mtString : array[0..0] of WCHAR;
4797       end;
4798     TMENUITEMTEMPLATE = MENUITEMTEMPLATE;
4799     PMENUITEMTEMPLATE = ^MENUITEMTEMPLATE;
4800
4801     MENUITEMTEMPLATEHEADER = record
4802          versionNumber : WORD;
4803          offset : WORD;
4804       end;
4805     TMENUITEMTEMPLATEHEADER = MENUITEMTEMPLATEHEADER;
4806     PMENUITEMTEMPLATEHEADER = ^MENUITEMTEMPLATEHEADER;
4807
4808     MENUTEMPLATE = record
4809                    end;
4810     LPMENUTEMPLATE = ^MENUTEMPLATE;
4811     TMENUTEMPLATE = MENUTEMPLATE;
4812     PMENUTEMPLATE = ^MENUTEMPLATE;
4813
4814     METAFILEPICT = record
4815          mm : LONG;
4816          xExt : LONG;
4817          yExt : LONG;
4818          hMF : HMETAFILE;
4819       end;
4820     LPMETAFILEPICT = ^METAFILEPICT;
4821     tagMETAFILEPICT = METAFILEPICT;
4822     TMETAFILEPICT = METAFILEPICT;
4823     PMETAFILEPICT = ^METAFILEPICT;
4824
4825     METAHEADER = packed record
4826          mtType : WORD;
4827          mtHeaderSize : WORD;
4828          mtVersion : WORD;
4829          mtSize : DWORD;
4830          mtNoObjects : WORD;
4831          mtMaxRecord : DWORD;
4832          mtNoParameters : WORD;
4833       end;
4834     tagMETAHEADER = METAHEADER;
4835     TMETAHEADER = METAHEADER;
4836     PMETAHEADER = ^METAHEADER;
4837
4838     METARECORD = record
4839          rdSize : DWORD;
4840          rdFunction : WORD;
4841          rdParm : array[0..0] of WORD;
4842       end;
4843     LPMETARECORD = ^METARECORD;
4844     tagMETARECORD = METARECORD;
4845     TMETARECORD = METARECORD;
4846     PMETARECORD = ^METARECORD;
4847
4848     MINIMIZEDMETRICS = record
4849          cbSize : UINT;
4850          iWidth : longint;
4851          iHorzGap : longint;
4852          iVertGap : longint;
4853          iArrange : longint;
4854       end;
4855     LPMINIMIZEDMETRICS = ^MINIMIZEDMETRICS;
4856     tagMINIMIZEDMETRICS = MINIMIZEDMETRICS;
4857     TMINIMIZEDMETRICS = MINIMIZEDMETRICS;
4858     PMINIMIZEDMETRICS = ^MINIMIZEDMETRICS;
4859
4860     MINMAXINFO = record
4861          ptReserved : POINT;
4862          ptMaxSize : POINT;
4863          ptMaxPosition : POINT;
4864          ptMinTrackSize : POINT;
4865          ptMaxTrackSize : POINT;
4866       end;
4867     tagMINMAXINFO = MINMAXINFO;
4868     TMINMAXINFO = MINMAXINFO;
4869     PMINMAXINFO = ^MINMAXINFO;
4870
4871     MODEMDEVCAPS = record
4872          dwActualSize : DWORD;
4873          dwRequiredSize : DWORD;
4874          dwDevSpecificOffset : DWORD;
4875          dwDevSpecificSize : DWORD;
4876          dwModemProviderVersion : DWORD;
4877          dwModemManufacturerOffset : DWORD;
4878          dwModemManufacturerSize : DWORD;
4879          dwModemModelOffset : DWORD;
4880          dwModemModelSize : DWORD;
4881          dwModemVersionOffset : DWORD;
4882          dwModemVersionSize : DWORD;
4883          dwDialOptions : DWORD;
4884          dwCallSetupFailTimer : DWORD;
4885          dwInactivityTimeout : DWORD;
4886          dwSpeakerVolume : DWORD;
4887          dwSpeakerMode : DWORD;
4888          dwModemOptions : DWORD;
4889          dwMaxDTERate : DWORD;
4890          dwMaxDCERate : DWORD;
4891          abVariablePortion : array[0..0] of BYTE;
4892       end;
4893     LPMODEMDEVCAPS = ^MODEMDEVCAPS;
4894     TMODEMDEVCAPS = MODEMDEVCAPS;
4895     PMODEMDEVCAPS = ^MODEMDEVCAPS;
4896
4897     modemdevcaps_tag = MODEMDEVCAPS;
4898
4899     MODEMSETTINGS = record
4900          dwActualSize : DWORD;
4901          dwRequiredSize : DWORD;
4902          dwDevSpecificOffset : DWORD;
4903          dwDevSpecificSize : DWORD;
4904          dwCallSetupFailTimer : DWORD;
4905          dwInactivityTimeout : DWORD;
4906          dwSpeakerVolume : DWORD;
4907          dwSpeakerMode : DWORD;
4908          dwPreferredModemOptions : DWORD;
4909          dwNegotiatedModemOptions : DWORD;
4910          dwNegotiatedDCERate : DWORD;
4911          abVariablePortion : array[0..0] of BYTE;
4912       end;
4913     LPMODEMSETTINGS = ^MODEMSETTINGS;
4914     TMODEMSETTINGS = MODEMSETTINGS;
4915     PMODEMSETTINGS = ^MODEMSETTINGS;
4916
4917     modemsettings_tag = MODEMSETTINGS;
4918
4919     MONCBSTRUCT = record
4920          cb : UINT;
4921          dwTime : DWORD;
4922          hTask : HANDLE;
4923          dwRet : DWORD;
4924          wType : UINT;
4925          wFmt : UINT;
4926          hConv : HCONV;
4927          hsz1 : HSZ;
4928          hsz2 : HSZ;
4929          hData : HDDEDATA;
4930          dwData1 : ULONG_PTR;
4931          dwData2 : ULONG_PTR;
4932          cc : CONVCONTEXT;
4933          cbData : DWORD;
4934          Data : array[0..7] of DWORD;
4935       end;
4936     tagMONCBSTRUCT = MONCBSTRUCT;
4937     TMONCBSTRUCT = MONCBSTRUCT;
4938     PMONCBSTRUCT = ^MONCBSTRUCT;
4939
4940     MONCONVSTRUCT = record
4941          cb : UINT;
4942          fConnect : WINBOOL;
4943          dwTime : DWORD;
4944          hTask : HANDLE;
4945          hszSvc : HSZ;
4946          hszTopic : HSZ;
4947          hConvClient : HCONV;
4948          hConvServer : HCONV;
4949       end;
4950     tagMONCONVSTRUCT = MONCONVSTRUCT;
4951     TMONCONVSTRUCT = MONCONVSTRUCT;
4952     PMONCONVSTRUCT = ^MONCONVSTRUCT;
4953
4954     MONERRSTRUCT = record
4955          cb : UINT;
4956          wLastError : UINT;
4957          dwTime : DWORD;
4958          hTask : HANDLE;
4959       end;
4960     tagMONERRSTRUCT = MONERRSTRUCT;
4961     TMONERRSTRUCT = MONERRSTRUCT;
4962     PMONERRSTRUCT = ^MONERRSTRUCT;
4963
4964     MONHSZSTRUCTA = record
4965          cb : UINT;
4966          fsAction : WINBOOL;
4967          dwTime : DWORD;
4968          hsz : HSZ;
4969          hTask : HANDLE;
4970          str : array[0..0] of AnsiCHAR;
4971       end;
4972     tagMONHSZSTRUCTA = MONHSZSTRUCTA;
4973     TMONHSZSTRUCTA   = MONHSZSTRUCTA;
4974     PMONHSZSTRUCTA   = ^MONHSZSTRUCTA;
4975
4976     MONHSZSTRUCTW = record
4977          cb : UINT;
4978          fsAction : WINBOOL;
4979          dwTime : DWORD;
4980          hsz : HSZ;
4981          hTask : HANDLE;
4982          str : array[0..0] of WCHAR;
4983       end;
4984     tagMONHSZSTRUCTW = MONHSZSTRUCTW;
4985     TMONHSZSTRUCTW   = MONHSZSTRUCTW;
4986     PMONHSZSTRUCTW   = ^MONHSZSTRUCTW;
4987     {$ifdef unicode}
4988       tagMONHSZSTRUCT  = MONHSZSTRUCTW;
4989       TMONHSZSTRUCT    = MONHSZSTRUCTW;
4990       PMONHSZSTRUCT    = PMONHSZSTRUCTW;
4991       MONHSZSTRUCT     = MONHSZSTRUCTW;
4992     {$else}
4993       tagMONHSZSTRUCT  = MONHSZSTRUCTA;
4994       TMONHSZSTRUCT    = MONHSZSTRUCTA;
4995       PMONHSZSTRUCT    = PMONHSZSTRUCTA;
4996       MONHSZSTRUCT     = MONHSZSTRUCTA;
4997     {$endif}
4998
4999     MONITOR_INFO_1 = record
5000          pName : LPTSTR;
5001       end;
5002     _MONITOR_INFO_1 = MONITOR_INFO_1;
5003     TMONITORINFO1 = MONITOR_INFO_1;
5004     PMONITORINFO1 = ^MONITOR_INFO_1;
5005
5006     MONITOR_INFO_2 = record
5007          pName : LPTSTR;
5008          pEnvironment : LPTSTR;
5009          pDLLName : LPTSTR;
5010       end;
5011     _MONITOR_INFO_2 = MONITOR_INFO_2;
5012     TMONITORINFO2 = MONITOR_INFO_2;
5013     PMONITORINFO2 = ^MONITOR_INFO_2;
5014
5015     MONLINKSTRUCT = record
5016          cb : UINT;
5017          dwTime : DWORD;
5018          hTask : HANDLE;
5019          fEstablished : WINBOOL;
5020          fNoData : WINBOOL;
5021          hszSvc : HSZ;
5022          hszTopic : HSZ;
5023          hszItem : HSZ;
5024          wFmt : UINT;
5025          fServer : WINBOOL;
5026          hConvServer : HCONV;
5027          hConvClient : HCONV;
5028       end;
5029     tagMONLINKSTRUCT = MONLINKSTRUCT;
5030     TMONLINKSTRUCT = MONLINKSTRUCT;
5031     PMONLINKSTRUCT = ^MONLINKSTRUCT;
5032
5033     MONMSGSTRUCT = record
5034          cb : UINT;
5035          hwndTo : HWND;
5036          dwTime : DWORD;
5037          hTask : HANDLE;
5038          wMsg : UINT;
5039          wParam : WPARAM;
5040          lParam : LPARAM;
5041          dmhd : DDEML_MSG_HOOK_DATA;
5042       end;
5043     tagMONMSGSTRUCT = MONMSGSTRUCT;
5044     TMONMSGSTRUCT = MONMSGSTRUCT;
5045     PMONMSGSTRUCT = ^MONMSGSTRUCT;
5046
5047     MOUSEHOOKSTRUCT = record
5048          pt : POINT;
5049          hwnd : HWND;
5050          wHitTestCode : UINT;
5051          dwExtraInfo : ULONG_PTR;
5052       end;
5053     LPMOUSEHOOKSTRUCT = ^MOUSEHOOKSTRUCT;
5054     tagMOUSEHOOKSTRUCT = MOUSEHOOKSTRUCT;
5055     TMOUSEHOOKSTRUCT = MOUSEHOOKSTRUCT;
5056     PMOUSEHOOKSTRUCT = ^MOUSEHOOKSTRUCT;
5057
5058     MOUSEKEYS = record
5059          cbSize : DWORD;
5060          dwFlags : DWORD;
5061          iMaxSpeed : DWORD;
5062          iTimeToMaxSpeed : DWORD;
5063          iCtrlSpeed : DWORD;
5064          dwReserved1 : DWORD;
5065          dwReserved2 : DWORD;
5066       end;
5067     TMOUSEKEYS = MOUSEKEYS;
5068     PMOUSEKEYS = ^MOUSEKEYS;
5069
5070     MSGBOXCALLBACK = procedure (lpHelpInfo:LPHELPINFO);stdcall;
5071     TMSGBOXCALLBACK = MSGBOXCALLBACK;
5072
5073     MSGBOXPARAMSA = record
5074          cbSize : UINT;
5075          hwndOwner : HWND;
5076          hInstance : HINST;
5077          lpszText : LPCSTR;
5078          lpszCaption : LPCSTR;
5079          dwStyle : DWORD;
5080          lpszIcon : LPCSTR;
5081          dwContextHelpId : DWORD_PTR;
5082          lpfnMsgBoxCallback : MSGBOXCALLBACK;
5083          dwLanguageId : DWORD;
5084       end;
5085     LPMSGBOXPARAMSA = ^MSGBOXPARAMSA;
5086     TMSGBOXPARAMSA  =  MSGBOXPARAMSA;
5087     PMSGBOXPARAMSA  = ^MSGBOXPARAMSA;
5088
5089     MSGBOXPARAMSW = record
5090          cbSize : UINT;
5091          hwndOwner : HWND;
5092          hInstance : HINST;
5093          lpszText : LPCWSTR;
5094          lpszCaption : LPCWSTR;
5095          dwStyle : DWORD;
5096          lpszIcon : LPCWSTR;
5097          dwContextHelpId : DWORD_PTR;
5098          lpfnMsgBoxCallback : MSGBOXCALLBACK;
5099          dwLanguageId : DWORD;
5100     end;
5101     LPMSGBOXPARAMSW = ^MSGBOXPARAMSW;
5102     TMSGBOXPARAMSW  =  MSGBOXPARAMSW;
5103     PMSGBOXPARAMSW  = ^MSGBOXPARAMSW;
5104
5105     {$ifdef Unicode}
5106     LPMSGBOXPARAMS  = ^MSGBOXPARAMSW;
5107     TMSGBOXPARAMS   =  MSGBOXPARAMSW;
5108     PMSGBOXPARAMS   = ^MSGBOXPARAMSW;
5109     MSGBOXPARAMS    =  MSGBOXPARAMSW;
5110     {$else}
5111     LPMSGBOXPARAMS  = ^MSGBOXPARAMSA;
5112     TMSGBOXPARAMS   =  MSGBOXPARAMSA;
5113     PMSGBOXPARAMS   = ^MSGBOXPARAMSA;
5114     MSGBOXPARAMS    =  MSGBOXPARAMSA;
5115     {$endif}
5116
5117     MSGFILTER = record
5118          nmhdr : NMHDR;
5119          msg : UINT;
5120          wParam : WPARAM;
5121          lParam : LPARAM;
5122       end;
5123     _msgfilter = MSGFILTER;
5124     Tmsgfilter = MSGFILTER;
5125     Pmsgfilter = ^MSGFILTER;
5126
5127     MULTIKEYHELPA = record
5128          mkSize : DWORD;
5129          mkKeylist : AnsiCHAR;
5130          szKeyphrase : array[0..0] of AnsiCHAR;
5131       end;
5132     tagMULTIKEYHELPA = MULTIKEYHELPA;
5133     TMULTIKEYHELPA   = MULTIKEYHELPA;
5134     PMULTIKEYHELPA   = ^MULTIKEYHELPA;
5135
5136     MULTIKEYHELPW = record
5137          mkSize : DWORD;
5138          mkKeylist : WideCHAR;
5139          szKeyphrase : array[0..0] of WideCHAR;
5140       end;
5141     tagMULTIKEYHELPW = MULTIKEYHELPW;
5142     TMULTIKEYHELPW   = MULTIKEYHELPW;
5143     PMULTIKEYHELPW   = ^MULTIKEYHELPW;
5144     {$ifdef Unicode}
5145        tagMULTIKEYHELP = MULTIKEYHELPW;
5146        TMULTIKEYHELP   = MULTIKEYHELPW;
5147        PMULTIKEYHELP   = PMULTIKEYHELPW;
5148        MULTIKEYHELP    = MULTIKEYHELPW;
5149     {$else}
5150        tagMULTIKEYHELP = MULTIKEYHELPA;
5151        TMULTIKEYHELP   = MULTIKEYHELPA;
5152        PMULTIKEYHELP   = PMULTIKEYHELPA;
5153        MULTIKEYHELP    = MULTIKEYHELPA;
5154     {$endif}
5155
5156     NAME_BUFFER = record
5157          name : array[0..(NCBNAMSZ)-1] of UCHAR;
5158          name_num : UCHAR;
5159          name_flags : UCHAR;
5160       end;
5161     _NAME_BUFFER = NAME_BUFFER;
5162     TNAMEBUFFER = NAME_BUFFER;
5163     PNAMEBUFFER = ^NAME_BUFFER;
5164
5165     p_NCB = ^_NCB;
5166     NCB = record
5167          ncb_command : UCHAR;
5168          ncb_retcode : UCHAR;
5169          ncb_lsn : UCHAR;
5170          ncb_num : UCHAR;
5171          ncb_buffer : PUCHAR;
5172          ncb_length : WORD;
5173          ncb_callname : array[0..(NCBNAMSZ)-1] of UCHAR;
5174          ncb_name : array[0..(NCBNAMSZ)-1] of UCHAR;
5175          ncb_rto : UCHAR;
5176          ncb_sto : UCHAR;
5177          ncb_post : procedure (_para1:p_NCB);CDECL;
5178          ncb_lana_num : UCHAR;
5179          ncb_cmd_cplt : UCHAR;
5180          ncb_reserve : array[0..9] of UCHAR;
5181          ncb_event : HANDLE;
5182       end;
5183     _NCB = NCB;
5184     TNCB = NCB;
5185     PNCB = ^NCB;
5186
5187     NCCALCSIZE_PARAMS = record
5188          rgrc : array[0..2] of RECT;
5189          lppos : PWINDOWPOS;
5190       end;
5191     _NCCALCSIZE_PARAMS = NCCALCSIZE_PARAMS;
5192     TNCCALCSIZEPARAMS = NCCALCSIZE_PARAMS;
5193     PNCCALCSIZEPARAMS = ^NCCALCSIZE_PARAMS;
5194
5195     NDDESHAREINFO = record
5196          lRevision : LONG;
5197          lpszShareName : LPTSTR;
5198          lShareType : LONG;
5199          lpszAppTopicList : LPTSTR;
5200          fSharedFlag : LONG;
5201          fService : LONG;
5202          fStartAppFlag : LONG;
5203          nCmdShow : LONG;
5204          qModifyId : array[0..1] of LONG;
5205          cNumItems : LONG;
5206          lpszItemList : LPTSTR;
5207       end;
5208     _NDDESHAREINFO = NDDESHAREINFO;
5209     TNDDESHAREINFO = NDDESHAREINFO;
5210     PNDDESHAREINFO = ^NDDESHAREINFO;
5211
5212     NETRESOURCEA = record
5213          dwScope : DWORD;
5214          dwType : DWORD;
5215          dwDisplayType : DWORD;
5216          dwUsage : DWORD;
5217          lpLocalName : LPSTR;
5218          lpRemoteName : LPSTR;
5219          lpComment : LPSTR;
5220          lpProvider : LPSTR;
5221       end;
5222     LPNETRESOURCEA = ^NETRESOURCEA;
5223     _NETRESOURCEA  = NETRESOURCEA;
5224     TNETRESOURCEA  = NETRESOURCEA;
5225     PNETRESOURCEA  = ^NETRESOURCEA;
5226
5227     NETRESOURCEW = record
5228          dwScope : DWORD;
5229          dwType : DWORD;
5230          dwDisplayType : DWORD;
5231          dwUsage : DWORD;
5232          lpLocalName : LPWSTR;
5233          lpRemoteName : LPWSTR;
5234          lpComment : LPWSTR;
5235          lpProvider : LPWSTR;
5236       end;
5237     LPNETRESOURCEW = ^NETRESOURCEW;
5238     _NETRESOURCEW = NETRESOURCEW;
5239     TNETRESOURCEW = NETRESOURCEW;
5240     PNETRESOURCEW = ^NETRESOURCEW;
5241
5242     {$ifdef Unicode}
5243     LPNETRESOURCE = ^NETRESOURCEW;
5244     _NETRESOURCE  = NETRESOURCEW;
5245     TNETRESOURCE  = NETRESOURCEW;
5246     NETRESOURCE   = NETRESOURCEW;
5247     PNETRESOURCE  = ^NETRESOURCEW;
5248     {$else}
5249     LPNETRESOURCE = ^NETRESOURCEA;
5250     _NETRESOURCE  = NETRESOURCEA;
5251     TNETRESOURCE  = NETRESOURCEA;
5252     NETRESOURCE   = NETRESOURCEA;
5253     PNETRESOURCE  = ^NETRESOURCEA;
5254     {$endif}
5255
5256     NEWCPLINFOA = record
5257          dwSize : DWORD;
5258          dwFlags : DWORD;
5259          dwHelpContext : DWORD;
5260          lData : LONG_PTR;
5261          hIcon : HICON;
5262          szName : array[0..31] of AnsiCHAR;
5263          szInfo : array[0..63] of AnsiCHAR;
5264          szHelpFile : array[0..127] of AnsiCHAR;
5265       end;
5266     tagNEWCPLINFOA = NEWCPLINFOA;
5267     TNEWCPLINFOA   = NEWCPLINFOA;
5268     PNEWCPLINFOA   = ^NEWCPLINFOA;
5269
5270     NEWCPLINFOW = record
5271          dwSize : DWORD;
5272          dwFlags : DWORD;
5273          dwHelpContext : DWORD;
5274          lData : LONG;
5275          hIcon : HICON;
5276          szName : array[0..31] of WideCHAR;
5277          szInfo : array[0..63] of WideCHAR;
5278          szHelpFile : array[0..127] of WideCHAR;
5279       end;
5280     tagNEWCPLINFOW = NEWCPLINFOW;
5281     TNEWCPLINFOW   = NEWCPLINFOW;
5282     PNEWCPLINFOW   = ^NEWCPLINFOW;
5283
5284     {$ifdef Unicode}
5285       tagNEWCPLINFO = NEWCPLINFOW;
5286       TNEWCPLINFO   = NEWCPLINFOW;
5287       PNEWCPLINFO   = PNEWCPLINFOW;
5288       NEWCPLINFO    = NEWCPLINFOW;
5289     {$else}
5290       tagNEWCPLINFO = NEWCPLINFOA;
5291       TNEWCPLINFO   = NEWCPLINFOA;
5292       PNEWCPLINFO   = PNEWCPLINFOA;
5293       NEWCPLINFO    = NEWCPLINFOA;
5294     {$endif}
5295     NEWTEXTMETRICA = record
5296          tmHeight : LONG;
5297          tmAscent : LONG;
5298          tmDescent : LONG;
5299          tmInternalLeading : LONG;
5300          tmExternalLeading : LONG;
5301          tmAveCharWidth : LONG;
5302          tmMaxCharWidth : LONG;
5303          tmWeight : LONG;
5304          tmOverhang : LONG;
5305          tmDigitizedAspectX : LONG;
5306          tmDigitizedAspectY : LONG;
5307          tmFirstChar : AnsiChar;
5308          tmLastChar : AnsiChar;
5309          tmDefaultChar : AnsiChar;
5310          tmBreakChar : AnsiChar;
5311          tmItalic : BYTE;
5312          tmUnderlined : BYTE;
5313          tmStruckOut : BYTE;
5314          tmPitchAndFamily : BYTE;
5315          tmCharSet : BYTE;
5316          ntmFlags : DWORD;
5317          ntmSizeEM : UINT;
5318          ntmCellHeight : UINT;
5319          ntmAvgWidth : UINT;
5320       end;
5321     LPNEWTEXTMETRICA  = ^NEWTEXTMETRICA;
5322     tagNEWTEXTMETRICA = NEWTEXTMETRICA;
5323     _NEWTEXTMETRICA   = NEWTEXTMETRICA;
5324     TNEWTEXTMETRICA   = NEWTEXTMETRICA;
5325     PNEWTEXTMETRICA   = ^NEWTEXTMETRICA;
5326
5327     NEWTEXTMETRICW    = record
5328       tmHeight           :LONG;
5329       tmAscent           :LONG;
5330       tmDescent          :LONG;
5331       tmInternalLeading  :LONG;
5332       tmExternalLeading  :LONG;
5333       tmAveCharWidth     :LONG;
5334       tmMaxCharWidth     :LONG;
5335       tmWeight           :LONG;
5336       tmOverhang         :LONG;
5337       tmDigitizedAspectX :LONG;
5338       tmDigitizedAspectY :LONG;
5339       tmFirstChar        :WCHAR;
5340       tmLastChar         :WCHAR;
5341       tmDefaultChar      :WCHAR;
5342       tmBreakChar        :WCHAR;
5343       tmItalic           :Byte;
5344       tmUnderlined       :Byte;
5345       tmStruckOut        :Byte;
5346       tmPitchAndFamily   :Byte;
5347       tmCharSet          :Byte;
5348       ntmFlags           :DWORD;
5349       ntmSizeEM          :UINT;
5350       ntmCellHeight      :UINT;
5351       ntmAvgWidth        :UINT;
5352     end;
5353     LPNEWTEXTMETRICW  = ^NEWTEXTMETRICW;
5354     tagNEWTEXTMETRICW = NEWTEXTMETRICW;
5355     _NEWTEXTMETRICW   = NEWTEXTMETRICW;
5356     TNEWTEXTMETRICW   = NEWTEXTMETRICW;
5357     PNEWTEXTMETRICW   = ^NEWTEXTMETRICW;
5358
5359    {$IFNDEF UNICODE}
5360     LPNEWTEXTMETRIC   = ^NEWTEXTMETRICA;
5361     _NEWTEXTMETRIC    = NEWTEXTMETRICA;
5362     tagNEWTEXTMETRIC  = NEWTEXTMETRICA;
5363     TNEWTEXTMETRIC    = NEWTEXTMETRICA;
5364     PNEWTEXTMETRIC    = ^NEWTEXTMETRICA;
5365     NEWTEXTMETRIC     = NEWTEXTMETRICA;
5366    {$ELSE}
5367     LPNEWTEXTMETRIC   = ^NEWTEXTMETRICW;
5368     _NEWTEXTMETRIC    = NEWTEXTMETRICW;
5369     tagNEWTEXTMETRIC  = NEWTEXTMETRICW;
5370     TNEWTEXTMETRIC    = NEWTEXTMETRICW;
5371     PNEWTEXTMETRIC    = ^NEWTEXTMETRICW;
5372     NEWTEXTMETRIC     = NEWTEXTMETRICW;
5373    {$ENDIF}
5374
5375     NEWTEXTMETRICEXA = record
5376          ntmentm : NEWTEXTMETRICA;
5377          ntmeFontSignature : FONTSIGNATURE;
5378       end;
5379     LPNEWTEXTMETRICEXA  = ^NEWTEXTMETRICEXA;
5380     tagNEWTEXTMETRICEXA = NEWTEXTMETRICEXA;
5381     TNEWTEXTMETRICEXA   = NEWTEXTMETRICEXA;
5382     PNEWTEXTMETRICEXA   = ^NEWTEXTMETRICEXA;
5383
5384     NEWTEXTMETRICEXW    = record
5385       ntmentm           :NEWTEXTMETRICW;
5386       ntmeFontSignature :FONTSIGNATURE;
5387    end;
5388     LPNEWTEXTMETRICEXW  = ^NEWTEXTMETRICEXW;
5389     tagNEWTEXTMETRICEXW = NEWTEXTMETRICEXW;
5390     TNEWTEXTMETRICEXW   = NEWTEXTMETRICEXW;
5391     PNEWTEXTMETRICEXW   = ^NEWTEXTMETRICEXW;
5392
5393    {$IFNDEF UNICODE}
5394     LPNEWTEXTMETRICEX   = ^NEWTEXTMETRICEXA;
5395     _NEWTEXTMETRICEX    = NEWTEXTMETRICEXA;
5396     tagNEWTEXTMETRICEX  = NEWTEXTMETRICEXA;
5397     TNEWTEXTMETRICEX    = NEWTEXTMETRICEXA;
5398     PNEWTEXTMETRICEX    = ^NEWTEXTMETRICEXA;
5399     NEWTEXTMETRICEX     = NEWTEXTMETRICEXA;
5400    {$ELSE}
5401     LPNEWTEXTMETRICEX   = ^NEWTEXTMETRICEXW;
5402     _NEWTEXTMETRICEX    = NEWTEXTMETRICEXW;
5403     tagNEWTEXTMETRICEX  = NEWTEXTMETRICEXW;
5404     TNEWTEXTMETRICEX    = NEWTEXTMETRICEXW;
5405     PNEWTEXTMETRICEX    = ^NEWTEXTMETRICEXW;
5406     NEWTEXTMETRICEX     = NEWTEXTMETRICEXW;
5407    {$ENDIF}
5408
5409     NM_LISTVIEW = record
5410          hdr : NMHDR;
5411          iItem : longint;
5412          iSubItem : longint;
5413          uNewState : UINT;
5414          uOldState : UINT;
5415          uChanged : UINT;
5416          ptAction : POINT;
5417          lParam : LPARAM;
5418       end;
5419     tagNM_LISTVIEW = NM_LISTVIEW;
5420     TNMLISTVIEW = NM_LISTVIEW;
5421     PNMLISTVIEW = ^NM_LISTVIEW;
5422
5423     TV_ITEM = record
5424          mask : UINT;
5425          hItem : HTREEITEM;
5426          state : UINT;
5427          stateMask : UINT;
5428          pszText : LPTSTR;
5429          cchTextMax : longint;
5430          iImage : longint;
5431          iSelectedImage : longint;
5432          cChildren : longint;
5433          lParam : LPARAM;
5434       end;
5435     LPTV_ITEM = ^TV_ITEM;
5436     _TV_ITEM = TV_ITEM;
5437     TTVITEM = TV_ITEM;
5438     PTVITEM = ^TV_ITEM;
5439
5440     NM_TREEVIEW = record
5441          hdr : NMHDR;
5442          action : UINT;
5443          itemOld : TV_ITEM;
5444          itemNew : TV_ITEM;
5445          ptDrag : POINT;
5446       end;
5447     LPNM_TREEVIEW = ^NM_TREEVIEW;
5448     _NM_TREEVIEW = NM_TREEVIEW;
5449     TNMTREEVIEW = NM_TREEVIEW;
5450     PNMTREEVIEW = ^NM_TREEVIEW;
5451
5452     NM_UPDOWNW = record
5453          hdr : NMHDR;
5454          iPos : longint;
5455          iDelta : longint;
5456       end;
5457     _NM_UPDOWN = NM_UPDOWNW;
5458     TNMUPDOWN = NM_UPDOWNW;
5459     PNMUPDOWN = ^NM_UPDOWNW;
5460
5461     NONCLIENTMETRICS = record
5462          cbSize : UINT;
5463          iBorderWidth : longint;
5464          iScrollWidth : longint;
5465          iScrollHeight : longint;
5466          iCaptionWidth : longint;
5467          iCaptionHeight : longint;
5468          lfCaptionFont : LOGFONT;
5469          iSmCaptionWidth : longint;
5470          iSmCaptionHeight : longint;
5471          lfSmCaptionFont : LOGFONT;
5472          iMenuWidth : longint;
5473          iMenuHeight : longint;
5474          lfMenuFont : LOGFONT;
5475          lfStatusFont : LOGFONT;
5476          lfMessageFont : LOGFONT;
5477          //iPaddedBorderWidth : longint;     // WINVER >= 0x0600
5478       end;
5479     LPNONCLIENTMETRICS = ^NONCLIENTMETRICS;
5480     tagNONCLIENTMETRICS = NONCLIENTMETRICS;
5481     TNONCLIENTMETRICS = NONCLIENTMETRICS;
5482     PNONCLIENTMETRICS = ^NONCLIENTMETRICS;
5483
5484     SERVICE_ADDRESS = record
5485          dwAddressType : DWORD;
5486          dwAddressFlags : DWORD;
5487          dwAddressLength : DWORD;
5488          dwPrincipalLength : DWORD;
5489          lpAddress : ^BYTE;
5490          lpPrincipal : ^BYTE;
5491       end;
5492     _SERVICE_ADDRESS = SERVICE_ADDRESS;
5493     TSERVICEADDRESS = SERVICE_ADDRESS;
5494     PSERVICEADDRESS = ^SERVICE_ADDRESS;
5495
5496     SERVICE_ADDRESSES = record
5497          dwAddressCount : DWORD;
5498          Addresses : array[0..0] of SERVICE_ADDRESS;
5499       end;
5500     LPSERVICE_ADDRESSES = ^SERVICE_ADDRESSES;
5501     _SERVICE_ADDRESSES = SERVICE_ADDRESSES;
5502     TSERVICEADDRESSES = SERVICE_ADDRESSES;
5503     PSERVICEADDRESSES = ^SERVICE_ADDRESSES;
5504
5505     GUID = system.tguid;
5506     LPGUID = ^GUID;
5507     _GUID = GUID;
5508     TGUID = GUID;
5509     PGUID = ^GUID;
5510
5511     CLSID = GUID;
5512     LPCLSID = ^CLSID;
5513     TCLSID = CLSID;
5514     PCLSID = ^CLSID;
5515
5516     SERVICE_INFO = record
5517          lpServiceType : LPGUID;
5518          lpServiceName : LPTSTR;
5519          lpComment : LPTSTR;
5520          lpLocale : LPTSTR;
5521          dwDisplayHint : DWORD;
5522          dwVersion : DWORD;
5523          dwTime : DWORD;
5524          lpMachineName : LPTSTR;
5525          lpServiceAddress : LPSERVICE_ADDRESSES;
5526          ServiceSpecificInfo : BLOB;
5527       end;
5528     _SERVICE_INFO = SERVICE_INFO;
5529     TSERVICEINFO = SERVICE_INFO;
5530     PSERVICEINFO = ^SERVICE_INFO;
5531
5532     NS_SERVICE_INFO = record
5533          dwNameSpace : DWORD;
5534          ServiceInfo : SERVICE_INFO;
5535       end;
5536     _NS_SERVICE_INFO = NS_SERVICE_INFO;
5537     TNSSERVICEINFO = NS_SERVICE_INFO;
5538     PNSSERVICEINFO = ^NS_SERVICE_INFO;
5539
5540     NUMBERFMTA = record
5541          NumDigits : UINT;
5542          LeadingZero : UINT;
5543          Grouping : UINT;
5544          lpDecimalSep : LPSTR;
5545          lpThousandSep : LPSTR;
5546          NegativeOrder : UINT;
5547       end;
5548     _numberfmtA = NUMBERFMTA;
5549     TnumberfmtA = NUMBERFMTA;
5550     PnumberfmtA = ^NUMBERFMTA;
5551
5552     NUMBERFMTW = record
5553          NumDigits : UINT;
5554          LeadingZero : UINT;
5555          Grouping : UINT;
5556          lpDecimalSep : LPWSTR;
5557          lpThousandSep : LPWSTR;
5558          NegativeOrder : UINT;
5559       end;
5560     _numberfmtW = NUMBERFMTW;
5561     TnumberfmtW = NUMBERFMTW;
5562     PnumberfmtW = ^NUMBERFMTW;
5563
5564     {$ifdef Unicode}
5565     _NUMBERFMT = NUMBERFMTW;
5566     TNUMBERFMT = NUMBERFMTW;
5567     NUMBERFMT  = NUMBERFMTW;
5568     PNUMBERFMT = ^NUMBERFMTW;
5569     {$else}
5570     _NUMBERFMT = NUMBERFMTA;
5571     TNUMBERFMT = NUMBERFMTA;
5572     NUMBERFMT  = NUMBERFMTA;
5573     PNUMBERFMT = ^NUMBERFMTA;
5574     {$endif}
5575
5576     OFSTRUCT = record
5577          cBytes : BYTE;
5578          fFixedDisk : BYTE;
5579          nErrCode : WORD;
5580          Reserved1 : WORD;
5581          Reserved2 : WORD;
5582          szPathName : array[0..(OFS_MAXPATHNAME)-1] of CHAR;
5583       end;
5584     LPOFSTRUCT = ^OFSTRUCT;
5585     _OFSTRUCT = OFSTRUCT;
5586     TOFSTRUCT = OFSTRUCT;
5587     POFSTRUCT = ^OFSTRUCT;
5588
5589     OPENFILENAME_NT4 = record
5590          lStructSize : DWORD;
5591          hwndOwner : HWND;
5592          hInstance : HINST;
5593          lpstrFilter : LPCTSTR;
5594          lpstrCustomFilter : LPTSTR;
5595          nMaxCustFilter : DWORD;
5596          nFilterIndex : DWORD;
5597          lpstrFile : LPTSTR;
5598          nMaxFile : DWORD;
5599          lpstrFileTitle : LPTSTR;
5600          nMaxFileTitle : DWORD;
5601          lpstrInitialDir : LPCTSTR;
5602          lpstrTitle : LPCTSTR;
5603          Flags : DWORD;
5604          nFileOffset : WORD;
5605          nFileExtension : WORD;
5606          lpstrDefExt : LPCTSTR;
5607          lCustData : LPARAM;
5608          lpfnHook : LPOFNHOOKPROC;
5609          lpTemplateName : LPCTSTR;
5610       end;
5611     LPOPENFILENAME_NT4 = ^OPENFILENAME_NT4;
5612     TOPENFILENAME_NT4 = OPENFILENAME_NT4;
5613     POPENFILENAME_NT4 = ^OPENFILENAME_NT4;
5614
5615     OPENFILENAME = record
5616          lStructSize : DWORD;
5617          hwndOwner : HWND;
5618          hInstance : HINST;
5619          lpstrFilter : LPCTSTR;
5620          lpstrCustomFilter : LPTSTR;
5621          nMaxCustFilter : DWORD;
5622          nFilterIndex : DWORD;
5623          lpstrFile : LPTSTR;
5624          nMaxFile : DWORD;
5625          lpstrFileTitle : LPTSTR;
5626          nMaxFileTitle : DWORD;
5627          lpstrInitialDir : LPCTSTR;
5628          lpstrTitle : LPCTSTR;
5629          Flags : DWORD;
5630          nFileOffset : WORD;
5631          nFileExtension : WORD;
5632          lpstrDefExt : LPCTSTR;
5633          lCustData : LPARAM;
5634          lpfnHook : LPOFNHOOKPROC;
5635          lpTemplateName : LPCTSTR;
5636          pvReserved : pointer;
5637          dwreserved : dword;
5638          FlagsEx    : dword;
5639       end;
5640     LPOPENFILENAME = ^OPENFILENAME;
5641     TOPENFILENAME = OPENFILENAME;
5642     POPENFILENAME = ^OPENFILENAME;
5643
5644     tagOFN = OPENFILENAME;
5645     TOFN = OPENFILENAME;
5646     POFN = ^OPENFILENAME;
5647
5648     OFNOTIFY = record
5649          hdr : NMHDR;
5650          lpOFN : LPOPENFILENAME;
5651          pszFile : LPTSTR;
5652       end;
5653     LPOFNOTIFY = ^OFNOTIFY;
5654     _OFNOTIFY = OFNOTIFY;
5655     TOFNOTIFY = OFNOTIFY;
5656     POFNOTIFY = ^OFNOTIFY;
5657
5658     OSVERSIONINFOA = record
5659          dwOSVersionInfoSize : DWORD;
5660          dwMajorVersion : DWORD;
5661          dwMinorVersion : DWORD;
5662          dwBuildNumber : DWORD;
5663          dwPlatformId : DWORD;
5664          szCSDVersion : array[0..127] of AnsiCHAR;
5665       end;
5666     LPOSVERSIONINFOA= ^OSVERSIONINFOA;
5667     _OSVERSIONINFOA = OSVERSIONINFOA;
5668     TOSVERSIONINFOA = OSVERSIONINFOA;
5669     POSVERSIONINFOA = LPOSVERSIONINFOA;
5670
5671     OSVERSIONINFOW = record
5672       dwOSVersionInfoSize : DWORD;
5673       dwMajorVersion : DWORD;
5674       dwMinorVersion : DWORD;
5675       dwBuildNumber : DWORD;
5676       dwPlatformId : DWORD;
5677       szCSDVersion : array[0..127] of WCHAR;
5678     end;
5679     LPOSVERSIONINFOW = ^OSVERSIONINFOW;
5680     _OSVERSIONINFOW = OSVERSIONINFOW;
5681     TOSVERSIONINFOW = OSVERSIONINFOW;
5682     POSVERSIONINFOW = LPOSVERSIONINFOW;
5683
5684     {$IFNDEF UNICODE}
5685       LPOSVERSIONINFO  = ^OSVERSIONINFOA;
5686       _OSVERSIONINFO   = OSVERSIONINFOA;
5687       TOSVERSIONINFO   = OSVERSIONINFOA;
5688       POSVERSIONINFO   = ^OSVERSIONINFOA;
5689       OSVERSIONINFO    = OSVERSIONINFOA;
5690     {$ELSE}
5691       LPOSVERSIONINFO  = ^OSVERSIONINFOW;
5692       _OSVERSIONINFO   = OSVERSIONINFOW;
5693       TOSVERSIONINFO   = OSVERSIONINFOW;
5694       POSVERSIONINFO   = ^OSVERSIONINFOW;
5695       OSVERSIONINFO    = OSVERSIONINFOW;
5696     {$ENDIF}
5697
5698     {$push}
5699     {$packrecords 4}
5700
5701     TEXTMETRICA = record
5702          tmHeight : LONG;
5703          tmAscent : LONG;
5704          tmDescent : LONG;
5705          tmInternalLeading : LONG;
5706          tmExternalLeading : LONG;
5707          tmAveCharWidth : LONG;
5708          tmMaxCharWidth : LONG;
5709          tmWeight : LONG;
5710          tmOverhang : LONG;
5711          tmDigitizedAspectX : LONG;
5712          tmDigitizedAspectY : LONG;
5713          tmFirstChar : AnsiChar;
5714          tmLastChar : AnsiChar;
5715          tmDefaultChar : AnsiChar;
5716          tmBreakChar : AnsiChar;
5717          tmItalic : BYTE;
5718          tmUnderlined : BYTE;
5719          tmStruckOut : BYTE;
5720          tmPitchAndFamily : BYTE;
5721          tmCharSet : BYTE;
5722       end;
5723     LPTEXTMETRICA  = ^TEXTMETRICA;
5724     tagTEXTMETRICA = TEXTMETRICA;
5725     _TEXTMETRICA   = TEXTMETRICA;
5726     TTEXTMETRICA   = TEXTMETRICA;
5727     PTEXTMETRICA   = LPTEXTMETRICA;
5728
5729     TEXTMETRICW = record
5730          tmHeight : LONG;
5731          tmAscent : LONG;
5732          tmDescent : LONG;
5733          tmInternalLeading : LONG;
5734          tmExternalLeading : LONG;
5735          tmAveCharWidth : LONG;
5736          tmMaxCharWidth : LONG;
5737          tmWeight : LONG;
5738          tmOverhang : LONG;
5739          tmDigitizedAspectX : LONG;
5740          tmDigitizedAspectY : LONG;
5741          tmFirstChar : WCHAR;
5742          tmLastChar : WCHAR;
5743          tmDefaultChar : WCHAR;
5744          tmBreakChar : WCHAR;
5745          tmItalic : BYTE;
5746          tmUnderlined : BYTE;
5747          tmStruckOut : BYTE;
5748          tmPitchAndFamily : BYTE;
5749          tmCharSet : BYTE;
5750       end;
5751     LPTEXTMETRICW = ^TEXTMETRICW;
5752     tagTEXTMETRICW = TEXTMETRICW;
5753     _TEXTMETRICW   = TEXTMETRICW;
5754     TTEXTMETRICW = TEXTMETRICW;
5755     PTEXTMETRICW = ^TEXTMETRICW;
5756
5757     {$IFNDEF UNICODE}
5758       LPTEXTMETRIC       = ^TEXTMETRICA;
5759       _TEXTMETRIC        = TEXTMETRICA;
5760       tagTEXTMETRIC      = TEXTMETRICA;
5761       TTEXTMETRIC        = TEXTMETRICA;
5762       PTEXTMETRIC        = ^TEXTMETRICA;
5763       TEXTMETRIC         = TEXTMETRICA;
5764     {$ELSE}
5765       LPTEXTMETRIC       = ^TEXTMETRICW;
5766       _TEXTMETRIC        = TEXTMETRICW;
5767       tagTEXTMETRIC      = TEXTMETRICW;
5768       TTEXTMETRIC        = TEXTMETRICW;
5769       PTEXTMETRIC        = ^TEXTMETRICW;
5770       TEXTMETRIC         = TEXTMETRICW;
5771     {$ENDIF}
5772     {$PACKRECORDS C}
5773
5774     OUTLINETEXTMETRICA = record
5775          otmSize : UINT;
5776          otmTextMetrics : TEXTMETRICA;
5777          otmFiller : BYTE;
5778          otmPanoseNumber : PANOSE;
5779          otmfsSelection : UINT;
5780          otmfsType : UINT;
5781          otmsCharSlopeRise : longint;
5782          otmsCharSlopeRun : longint;
5783          otmItalicAngle : longint;
5784          otmEMSquare : UINT;
5785          otmAscent : longint;
5786          otmDescent : longint;
5787          otmLineGap : UINT;
5788          otmsCapEmHeight : UINT;
5789          otmsXHeight : UINT;
5790          otmrcFontBox : RECT;
5791          otmMacAscent : longint;
5792          otmMacDescent : longint;
5793          otmMacLineGap : UINT;
5794          otmusMinimumPPEM : UINT;
5795          otmptSubscriptSize : POINT;
5796          otmptSubscriptOffset : POINT;
5797          otmptSuperscriptSize : POINT;
5798          otmptSuperscriptOffset : POINT;
5799          otmsStrikeoutSize : UINT;
5800          otmsStrikeoutPosition : longint;
5801          otmsUnderscoreSize : longint;
5802          otmsUnderscorePosition : longint;
5803          otmpFamilyName : PSTR;
5804          otmpFaceName : PSTR;
5805          otmpStyleName : PSTR;
5806          otmpFullName : PSTR;
5807       end;
5808     LPOUTLINETEXTMETRICA = ^OUTLINETEXTMETRICA;
5809     _OUTLINETEXTMETRICA = OUTLINETEXTMETRICA;
5810     TOUTLINETEXTMETRICA = OUTLINETEXTMETRICA;
5811     POUTLINETEXTMETRICA = ^OUTLINETEXTMETRICA;
5812
5813     OUTLINETEXTMETRICW = record
5814          otmSize : UINT;
5815          otmTextMetrics : TEXTMETRICW;
5816          otmFiller : BYTE;
5817          otmPanoseNumber : PANOSE;
5818          otmfsSelection : UINT;
5819          otmfsType : UINT;
5820          otmsCharSlopeRise : longint;
5821          otmsCharSlopeRun : longint;
5822          otmItalicAngle : longint;
5823          otmEMSquare : UINT;
5824          otmAscent : longint;
5825          otmDescent : longint;
5826          otmLineGap : UINT;
5827          otmsCapEmHeight : UINT;
5828          otmsXHeight : UINT;
5829          otmrcFontBox : RECT;
5830          otmMacAscent : longint;
5831          otmMacDescent : longint;
5832          otmMacLineGap : UINT;
5833          otmusMinimumPPEM : UINT;
5834          otmptSubscriptSize : POINT;
5835          otmptSubscriptOffset : POINT;
5836          otmptSuperscriptSize : POINT;
5837          otmptSuperscriptOffset : POINT;
5838          otmsStrikeoutSize : UINT;
5839          otmsStrikeoutPosition : longint;
5840          otmsUnderscoreSize : longint;
5841          otmsUnderscorePosition : longint;
5842          otmpFamilyName : PSTR;
5843          otmpFaceName : PSTR;
5844          otmpStyleName : PSTR;
5845          otmpFullName : PSTR;
5846       end;
5847     LPOUTLINETEXTMETRICW = ^OUTLINETEXTMETRICW;
5848     _OUTLINETEXTMETRICW = OUTLINETEXTMETRICW;
5849     TOUTLINETEXTMETRICW = OUTLINETEXTMETRICW;
5850     POUTLINETEXTMETRICW = LPOUTLINETEXTMETRICW;
5851
5852     {$ifdef Unicode}
5853     LPOUTLINETEXTMETRIC = LPOUTLINETEXTMETRICW;
5854     _OUTLINETEXTMETRIC  = OUTLINETEXTMETRICW;
5855     TOUTLINETEXTMETRIC  = OUTLINETEXTMETRICW;
5856     POUTLINETEXTMETRIC  = LPOUTLINETEXTMETRICW;
5857     OUTLINETEXTMETRIC   = OUTLINETEXTMETRICW;
5858     {$else}
5859     LPOUTLINETEXTMETRIC = LPOUTLINETEXTMETRICA;
5860     _OUTLINETEXTMETRIC  = OUTLINETEXTMETRICA;
5861     TOUTLINETEXTMETRIC  = OUTLINETEXTMETRICA;
5862     POUTLINETEXTMETRIC  = LPOUTLINETEXTMETRICA;
5863     OUTLINETEXTMETRIC   = OUTLINETEXTMETRICA;
5864     {$endif}
5865
5866     {$POP}
5867     OVERLAPPED = record
5868          Internal : ULONG_PTR;
5869          InternalHigh : ULONG_PTR;
5870          Offset : DWORD;
5871          OffsetHigh : DWORD;
5872          hEvent : HANDLE;
5873       end;
5874     LPOVERLAPPED = ^OVERLAPPED;
5875     _OVERLAPPED = OVERLAPPED;
5876     TOVERLAPPED = OVERLAPPED;
5877     POVERLAPPED = ^OVERLAPPED;
5878
5879     {PAGESETUPDLG = record conflicts with function PageSetupDlg }
5880     TPAGESETUPDLG = record
5881          lStructSize : DWORD;
5882          hwndOwner : HWND;
5883          hDevMode : HGLOBAL;
5884          hDevNames : HGLOBAL;
5885          Flags : DWORD;
5886          ptPaperSize : POINT;
5887          rtMinMargin : RECT;
5888          rtMargin : RECT;
5889          hInstance : HINST;
5890          lCustData : LPARAM;
5891          lpfnPageSetupHook : LPPAGESETUPHOOK;
5892          lpfnPagePaintHook : LPPAGEPAINTHOOK;
5893          lpPageSetupTemplateName : LPCTSTR;
5894          hPageSetupTemplate : HGLOBAL;
5895       end;
5896     LPPAGESETUPDLG = ^TPAGESETUPDLG;
5897     PPAGESETUPDLG = ^TPAGESETUPDLG;
5898
5899     tagPSD = TPAGESETUPDLG;
5900     TPSD = TPAGESETUPDLG;
5901     PPSD = ^TPAGESETUPDLG;
5902
5903     PAINTSTRUCT = record
5904          hdc : HDC;
5905          fErase : WINBOOL;
5906          rcPaint : RECT;
5907          fRestore : WINBOOL;
5908          fIncUpdate : WINBOOL;
5909          rgbReserved : array[0..31] of BYTE;
5910       end;
5911     LPPAINTSTRUCT = ^PAINTSTRUCT;
5912     tagPAINTSTRUCT = PAINTSTRUCT;
5913     TPAINTSTRUCT = PAINTSTRUCT;
5914     PPAINTSTRUCT = ^PAINTSTRUCT;
5915
5916     PARAFORMAT = record
5917          cbSize : UINT;
5918          dwMask : DWORD;
5919          wNumbering : WORD;
5920          wReserved : WORD;
5921          dxStartIndent : LONG;
5922          dxRightIndent : LONG;
5923          dxOffset : LONG;
5924          wAlignment : WORD;
5925          cTabCount : SHORT;
5926          rgxTabs : array[0..(MAX_TAB_STOPS)-1] of LONG;
5927       end;
5928     _paraformat = PARAFORMAT;
5929     Tparaformat = PARAFORMAT;
5930     Pparaformat = ^PARAFORMAT;
5931
5932     PERF_COUNTER_BLOCK = record
5933          ByteLength : DWORD;
5934       end;
5935     _PERF_COUNTER_BLOCK = PERF_COUNTER_BLOCK;
5936     TPERFCOUNTERBLOCK = PERF_COUNTER_BLOCK;
5937     PPERFCOUNTERBLOCK = ^PERF_COUNTER_BLOCK;
5938
5939     PERF_COUNTER_DEFINITION = record
5940          ByteLength : DWORD;
5941          CounterNameTitleIndex : DWORD;
5942          CounterNameTitle : LPWSTR;
5943          CounterHelpTitleIndex : DWORD;
5944          CounterHelpTitle : LPWSTR;
5945          DefaultScale : DWORD;
5946          DetailLevel : DWORD;
5947          CounterType : DWORD;
5948          CounterSize : DWORD;
5949          CounterOffset : DWORD;
5950       end;
5951     _PERF_COUNTER_DEFINITION = PERF_COUNTER_DEFINITION;
5952     TPERFCOUNTERDEFINITION = PERF_COUNTER_DEFINITION;
5953     PPERFCOUNTERDEFINITION = ^PERF_COUNTER_DEFINITION;
5954
5955     PERF_DATA_BLOCK = record
5956          Signature : array[0..3] of WCHAR;
5957          LittleEndian : DWORD;
5958          Version : DWORD;
5959          Revision : DWORD;
5960          TotalByteLength : DWORD;
5961          HeaderLength : DWORD;
5962          NumObjectTypes : DWORD;
5963          DefaultObject : DWORD;
5964          SystemTime : SYSTEMTIME;
5965          PerfTime : LARGE_INTEGER;
5966          PerfFreq : LARGE_INTEGER;
5967          PerfTime100nSec : LARGE_INTEGER;
5968          SystemNameLength : DWORD;
5969          SystemNameOffset : DWORD;
5970       end;
5971     _PERF_DATA_BLOCK = PERF_DATA_BLOCK;
5972     TPERFDATABLOCK = PERF_DATA_BLOCK;
5973     PPERFDATABLOCK = ^PERF_DATA_BLOCK;
5974
5975     PERF_INSTANCE_DEFINITION = record
5976          ByteLength : DWORD;
5977          ParentObjectTitleIndex : DWORD;
5978          ParentObjectInstance : DWORD;
5979          UniqueID : DWORD;
5980          NameOffset : DWORD;
5981          NameLength : DWORD;
5982       end;
5983     _PERF_INSTANCE_DEFINITION = PERF_INSTANCE_DEFINITION;
5984     TPERFINSTANCEDEFINITION = PERF_INSTANCE_DEFINITION;
5985     PPERFINSTANCEDEFINITION = PERF_INSTANCE_DEFINITION;
5986
5987     PERF_OBJECT_TYPE = record
5988          TotalByteLength : DWORD;
5989          DefinitionLength : DWORD;
5990          HeaderLength : DWORD;
5991          ObjectNameTitleIndex : DWORD;
5992          ObjectNameTitle : LPWSTR;
5993          ObjectHelpTitleIndex : DWORD;
5994          ObjectHelpTitle : LPWSTR;
5995          DetailLevel : DWORD;
5996          NumCounters : DWORD;
5997          DefaultCounter : DWORD;
5998          NumInstances : DWORD;
5999          CodePage : DWORD;
6000          PerfTime : LARGE_INTEGER;
6001          PerfFreq : LARGE_INTEGER;
6002       end;
6003     _PERF_OBJECT_TYPE = PERF_OBJECT_TYPE;
6004     TPERFOBJECTTYPE = PERF_OBJECT_TYPE;
6005     PPERFOBJECTTYPE = ^PERF_OBJECT_TYPE;
6006
6007     POLYTEXTA = record
6008          x : longint;
6009          y : longint;
6010          n : UINT;
6011          lpstr : LPCSTR;
6012          uiFlags : UINT;
6013          rcl : RECT;
6014          pdx : ^longint;
6015       end;
6016     _POLYTEXTA = POLYTEXTA;
6017     TPOLYTEXTA = POLYTEXTA;
6018     PPOLYTEXTA = ^POLYTEXTA;
6019
6020     POLYTEXTW = record
6021          x : longint;
6022          y : longint;
6023          n : UINT;
6024          lpstr : LPCWSTR;
6025          uiFlags : UINT;
6026          rcl : RECT;
6027          pdx : ^longint;
6028       end;
6029     _POLYTEXTW = POLYTEXTW;
6030     TPOLYTEXTW = POLYTEXTW;
6031     PPOLYTEXTW = ^POLYTEXTW;
6032
6033     {$ifdef unicode}
6034     _POLYTEXT = POLYTEXTW;
6035     TPOLYTEXT = POLYTEXTW;
6036     POLYTEXT  = POLYTEXTW;
6037     PPOLYTEXT = ^POLYTEXTW;
6038     {$else}
6039     _POLYTEXT = POLYTEXTA;
6040     TPOLYTEXT = POLYTEXTA;
6041     POLYTEXT  = POLYTEXTA;
6042     PPOLYTEXT = ^POLYTEXTA;
6043     {$endif}
6044
6045     PORT_INFO_1 = record
6046          pName : LPTSTR;
6047       end;
6048     _PORT_INFO_1 = PORT_INFO_1;
6049     TPORTINFO1 = PORT_INFO_1;
6050     PPORTINFO1 = ^PORT_INFO_1;
6051
6052     PORT_INFO_2 = record
6053          pPortName : LPSTR;
6054          pMonitorName : LPSTR;
6055          pDescription : LPSTR;
6056          fPortType : DWORD;
6057          Reserved : DWORD;
6058       end;
6059     _PORT_INFO_2 = PORT_INFO_2;
6060     TPORTINFO2 = PORT_INFO_2;
6061     PPORTINFO2 = ^PORT_INFO_2;
6062
6063     PREVENT_MEDIA_REMOVAL = record
6064          PreventMediaRemoval : BOOLEAN;
6065       end;
6066     _PREVENT_MEDIA_REMOVAL = PREVENT_MEDIA_REMOVAL;
6067     TPREVENTMEDIAREMOVAL = PREVENT_MEDIA_REMOVAL;
6068     PPREVENTMEDIAREMOVAL = ^PREVENT_MEDIA_REMOVAL;
6069
6070     {PRINTDLG = record conflicts with PrintDlg function }
6071     TPRINTDLG = {$ifndef win64}packed {$endif}record
6072          lStructSize : DWORD;
6073          hwndOwner : HWND;
6074          hDevMode : HGLOBAL;
6075          hDevNames : HGLOBAL;
6076          hDC : HDC;
6077          Flags : DWORD;
6078          nFromPage : WORD;
6079          nToPage : WORD;
6080          nMinPage : WORD;
6081          nMaxPage : WORD;
6082          nCopies : WORD;
6083          hInstance : HINST;
6084          lCustData : LPARAM;
6085          lpfnPrintHook : LPPRINTHOOKPROC;
6086          lpfnSetupHook : LPSETUPHOOKPROC;
6087          lpPrintTemplateName : LPCTSTR;
6088          lpSetupTemplateName : LPCTSTR;
6089          hPrintTemplate : HGLOBAL;
6090          hSetupTemplate : HGLOBAL;
6091       end;
6092     LPPRINTDLG = ^TPRINTDLG;
6093     PPRINTDLG = ^TPRINTDLG;
6094
6095     tagPD = TPRINTDLG;
6096     TPD = TPRINTDLG;
6097     PPD = ^TPRINTDLG;
6098
6099     PRINTER_DEFAULTS = record
6100          pDatatype : LPTSTR;
6101          pDevMode : LPDEVMODE;
6102          DesiredAccess : ACCESS_MASK;
6103       end;
6104     _PRINTER_DEFAULTS = PRINTER_DEFAULTS;
6105     TPRINTERDEFAULTS = PRINTER_DEFAULTS;
6106     PPRINTERDEFAULTS = ^PRINTER_DEFAULTS;
6107
6108     PRINTER_INFO_1 = record
6109          Flags : DWORD;
6110          pDescription : LPTSTR;
6111          pName : LPTSTR;
6112          pComment : LPTSTR;
6113       end;
6114     LPPRINTER_INFO_1 = ^PRINTER_INFO_1;
6115     PPRINTER_INFO_1 = ^PRINTER_INFO_1;
6116     _PRINTER_INFO_1 = PRINTER_INFO_1;
6117     TPRINTERINFO1 = PRINTER_INFO_1;
6118     PPRINTERINFO1 = ^PRINTER_INFO_1;
6119
6120     PRINTER_INFO_2 = record
6121          pServerName : LPTSTR;
6122          pPrinterName : LPTSTR;
6123          pShareName : LPTSTR;
6124          pPortName : LPTSTR;
6125          pDriverName : LPTSTR;
6126          pComment : LPTSTR;
6127          pLocation : LPTSTR;
6128          pDevMode : LPDEVMODE;
6129          pSepFile : LPTSTR;
6130          pPrintProcessor : LPTSTR;
6131          pDatatype : LPTSTR;
6132          pParameters : LPTSTR;
6133          pSecurityDescriptor : PSECURITY_DESCRIPTOR;
6134          Attributes : DWORD;
6135          Priority : DWORD;
6136          DefaultPriority : DWORD;
6137          StartTime : DWORD;
6138          UntilTime : DWORD;
6139          Status : DWORD;
6140          cJobs : DWORD;
6141          AveragePPM : DWORD;
6142       end;
6143     _PRINTER_INFO_2 = PRINTER_INFO_2;
6144     TPRINTERINFO2 = PRINTER_INFO_2;
6145     PPRINTERINFO2 = ^PRINTER_INFO_2;
6146
6147     PRINTER_INFO_3 = record
6148          pSecurityDescriptor : PSECURITY_DESCRIPTOR;
6149       end;
6150     _PRINTER_INFO_3 = PRINTER_INFO_3;
6151     TPRINTERINFO3 = PRINTER_INFO_3;
6152     PPRINTERINFO3 = ^PRINTER_INFO_3;
6153
6154     PRINTER_INFO_4 = record
6155          pPrinterName : LPTSTR;
6156          pServerName : LPTSTR;
6157          Attributes : DWORD;
6158       end;
6159     _PRINTER_INFO_4 = PRINTER_INFO_4;
6160     TPRINTERINFO4 = PRINTER_INFO_4;
6161     PPRINTERINFO4 = ^PRINTER_INFO_4;
6162
6163     PRINTER_INFO_5 = record
6164          pPrinterName : LPTSTR;
6165          pPortName : LPTSTR;
6166          Attributes : DWORD;
6167          DeviceNotSelectedTimeout : DWORD;
6168          TransmissionRetryTimeout : DWORD;
6169       end;
6170     _PRINTER_INFO_5 = PRINTER_INFO_5;
6171     TPRINTERINFO5 = PRINTER_INFO_5;
6172     PPRINTERINFO5 = ^PRINTER_INFO_5;
6173
6174     PRINTER_NOTIFY_INFO_DATA = record
6175          _Type : WORD;
6176          Field : WORD;
6177          Reserved : DWORD;
6178          Id : DWORD;
6179          NotifyData : record
6180              case longint of
6181                 0 : ( adwData : array[0..1] of DWORD );
6182                 1 : ( Data : record
6183                      cbBuf : DWORD;
6184                      pBuf : LPVOID;
6185                   end );
6186              end;
6187       end;
6188     _PRINTER_NOTIFY_INFO_DATA = PRINTER_NOTIFY_INFO_DATA;
6189     TPRINTERNOTIFYINFODATA = PRINTER_NOTIFY_INFO_DATA;
6190     PPRINTERNOTIFYINFODATA = ^PRINTER_NOTIFY_INFO_DATA;
6191
6192     PRINTER_NOTIFY_INFO = record
6193          Version : DWORD;
6194          Flags : DWORD;
6195          Count : DWORD;
6196          aData : array[0..0] of PRINTER_NOTIFY_INFO_DATA;
6197       end;
6198     _PRINTER_NOTIFY_INFO = PRINTER_NOTIFY_INFO;
6199     TPRINTERNOTIFYINFO = PRINTER_NOTIFY_INFO;
6200     PPRINTERNOTIFYINFO = ^PRINTER_NOTIFY_INFO;
6201
6202     PRINTER_NOTIFY_OPTIONS_TYPE = record
6203          _Type : WORD;
6204          Reserved0 : WORD;
6205          Reserved1 : DWORD;
6206          Reserved2 : DWORD;
6207          Count : DWORD;
6208          pFields : PWORD;
6209       end;
6210     PPRINTER_NOTIFY_OPTIONS_TYPE = ^PRINTER_NOTIFY_OPTIONS_TYPE;
6211     _PRINTER_NOTIFY_OPTIONS_TYPE = PRINTER_NOTIFY_OPTIONS_TYPE;
6212     TPRINTERNOTIFYOPTIONSTYPE = PRINTER_NOTIFY_OPTIONS_TYPE;
6213     PPRINTERNOTIFYOPTIONSTYPE = ^PRINTER_NOTIFY_OPTIONS_TYPE;
6214
6215     PRINTER_NOTIFY_OPTIONS = record
6216          Version : DWORD;
6217          Flags : DWORD;
6218          Count : DWORD;
6219          pTypes : PPRINTER_NOTIFY_OPTIONS_TYPE;
6220       end;
6221     _PRINTER_NOTIFY_OPTIONS = PRINTER_NOTIFY_OPTIONS;
6222     TPRINTERNOTIFYOPTIONS = PRINTER_NOTIFY_OPTIONS;
6223     PPRINTERNOTIFYOPTIONS = ^PRINTER_NOTIFY_OPTIONS;
6224
6225     PRINTPROCESSOR_INFO_1 = record
6226          pName : LPTSTR;
6227       end;
6228     _PRINTPROCESSOR_INFO_1 = PRINTPROCESSOR_INFO_1;
6229     TPRINTPROCESSORINFO1 = PRINTPROCESSOR_INFO_1;
6230     PPRINTPROCESSORINFO1 = ^PRINTPROCESSOR_INFO_1;
6231
6232     PRIVILEGE_SET = record
6233          PrivilegeCount : DWORD;
6234          Control : DWORD;
6235          Privilege : array[0..(ANYSIZE_ARRAY)-1] of LUID_AND_ATTRIBUTES;
6236       end;
6237     LPPRIVILEGE_SET = ^PRIVILEGE_SET;
6238     PPRIVILEGE_SET = ^PRIVILEGE_SET;
6239     _PRIVILEGE_SET = PRIVILEGE_SET;
6240     TPRIVILEGESET = PRIVILEGE_SET;
6241     PPRIVILEGESET = ^PRIVILEGE_SET;
6242
6243     PROCESS_HEAPENTRY = record
6244          lpData : PVOID;
6245          cbData : DWORD;
6246          cbOverhead : BYTE;
6247          iRegionIndex : BYTE;
6248          wFlags : WORD;
6249          case longint of
6250            0 : (hMem : HANDLE;
6251                 dwReserved : array [0..2] of DWORD;
6252                );
6253            1 : (dwCommittedSize : DWORD;
6254                 dwUnCommittedSize : DWORD;
6255                 lpFirstBlock : LPVOID;
6256                 lpLastBlock : LPVOID;
6257                );
6258       end;
6259     LPPROCESS_HEAP_ENTRY = ^PROCESS_HEAPENTRY;
6260     _PROCESS_HEAP_ENTRY = PROCESS_HEAPENTRY;
6261     TPROCESSHEAPENTRY = PROCESS_HEAPENTRY;
6262     PPROCESSHEAPENTRY = ^PROCESS_HEAPENTRY;
6263
6264     PROCESS_INFORMATION = record
6265          hProcess : HANDLE;
6266          hThread : HANDLE;
6267          dwProcessId : DWORD;
6268          dwThreadId : DWORD;
6269       end;
6270     LPPROCESS_INFORMATION = ^PROCESS_INFORMATION;
6271     _PROCESS_INFORMATION = PROCESS_INFORMATION;
6272     TPROCESSINFORMATION = PROCESS_INFORMATION;
6273     PPROCESSINFORMATION = ^PROCESS_INFORMATION;
6274
6275     LPFNPSPCALLBACK = function (_para1:HWND; _para2:UINT; _para3:LPVOID):UINT;stdcall;
6276     TFNPSPCALLBACK = LPFNPSPCALLBACK;
6277
6278     PROPSHEETPAGE = record
6279          dwSize : DWORD;
6280          dwFlags : DWORD;
6281          hInstance : HINST;
6282          case longint of
6283            0 : (pszTemplate : LPCTSTR);
6284            1 : (pResource : LPCDLGTEMPLATE;
6285                 case longint of
6286                    0 : (hIcon : HICON);
6287                    1 : (pszIcon : LPCTSTR;
6288                         pszTitle : LPCTSTR;
6289                         pfnDlgProc : DLGPROC;
6290                         lParam : LPARAM;
6291                         pfnCallback : LPFNPSPCALLBACK;
6292                         pcRefParent : ^UINT;
6293                        );
6294                );
6295       end;
6296     LPPROPSHEETPAGE = ^PROPSHEETPAGE;
6297     LPCPROPSHEETPAGE = ^PROPSHEETPAGE;
6298     _PROPSHEETPAGE = PROPSHEETPAGE;
6299     TPROPSHEETPAGE = PROPSHEETPAGE;
6300     PPROPSHEETPAGE = ^PROPSHEETPAGE;
6301
6302     emptyrecord = record
6303       end;
6304     lpemptyrecord = ^emptyrecord;
6305     HPROPSHEETPAGE = ^emptyrecord;
6306
6307     PROPSHEETHEADERA = record
6308          dwSize : DWORD;
6309          dwFlags : DWORD;
6310          hwndParent : HWND;
6311          hInstance : HINST;
6312          case longint of
6313              0 : (hIcon : HICON);
6314              1 : (pszIcon : LPCSTR;
6315                   pszCaption : LPCSTR;
6316                   nPages : UINT;
6317                   case longint of
6318                      0 : (nStartPage : UINT);
6319                      1 : (pStartPage : LPCSTR;
6320                           case longint of
6321                              0 : (ppsp : LPCPROPSHEETPAGE);
6322                              1 : (phpage : ^HPROPSHEETPAGE;
6323                                   pfnCallback : PFNPROPSHEETCALLBACK;
6324                                   case longint of
6325                                     0 : (hbmWatermark : HBITMAP);
6326                                     1 : (pszbmWatermark : LPCSTR;
6327                                          hplWatermark : HPALETTE;
6328                                          case longint of
6329                                             0 : (hbmHeader : HBITMAP);
6330                                             1 : (pszbmHeader: LPCStr);
6331                                         );
6332                                  );
6333                          );
6334                  );
6335       end;
6336     LPPROPSHEETHEADERA = ^PROPSHEETHEADERA;
6337     LPCPROPSHEETHEADERA = ^PROPSHEETHEADERA;
6338     _PROPSHEETHEADERA = PROPSHEETHEADERA;
6339     TPROPSHEETHEADERA = PROPSHEETHEADERA;
6340     PPROPSHEETHEADERA = ^PROPSHEETHEADERA;
6341
6342     PROPSHEETHEADERW = record
6343          dwSize : DWORD;
6344          dwFlags : DWORD;
6345          hwndParent : HWND;
6346          hInstance : HINST;
6347          case longint of
6348              0 : (hIcon : HICON);
6349              1 : (pszIcon : LPCWSTR;
6350                   pszCaption : LPCWSTR;
6351                   nPages : UINT;
6352                   case longint of
6353                      0 : (nStartPage : UINT);
6354                      1 : (pStartPage : LPCWSTR;
6355                           case longint of
6356                              0 : (ppsp : LPCPROPSHEETPAGE);
6357                              1 : (phpage : ^HPROPSHEETPAGE;
6358                                   pfnCallback : PFNPROPSHEETCALLBACK;
6359                                   case longint of
6360                                     0 : (hbmWatermark : HBITMAP);
6361                                     1 : (pszbmWatermark : LPCWSTR;
6362                                          hplWatermark : HPALETTE;
6363                                          case longint of
6364                                             0 : (hbmHeader : HBITMAP);
6365                                             1 : (pszbmHeader: LPCWStr);
6366                                         );
6367                                  );
6368                          );
6369                  );
6370       end;
6371     LPPROPSHEETHEADERW = ^PROPSHEETHEADERW;
6372     LPCPROPSHEETHEADERW = ^PROPSHEETHEADERW;
6373     _PROPSHEETHEADERW = PROPSHEETHEADERW;
6374     TPROPSHEETHEADERW = PROPSHEETHEADERW;
6375     PPROPSHEETHEADERW = ^PROPSHEETHEADERW;
6376
6377     {$ifdef Unicode}
6378     PROPSHEETHEADER    = PROPSHEETHEADERW;
6379     LPPROPSHEETHEADER  = LPPROPSHEETHEADERW;
6380     LPCPROPSHEETHEADER = LPCPROPSHEETHEADERW;
6381     _PROPSHEETHEADER   = _PROPSHEETHEADERW;
6382     TPROPSHEETHEADER   = TPROPSHEETHEADERW;
6383     PPROPSHEETHEADER   = PPROPSHEETHEADERW;
6384     {$else}
6385     PROPSHEETHEADER    = PROPSHEETHEADERA;
6386     LPPROPSHEETHEADER  = LPPROPSHEETHEADERA;
6387     LPCPROPSHEETHEADER = LPCPROPSHEETHEADERA;
6388     _PROPSHEETHEADER   = _PROPSHEETHEADERA;
6389     TPROPSHEETHEADER   = TPROPSHEETHEADERA;
6390     PPROPSHEETHEADER   = PPROPSHEETHEADERA;
6391     {$endif}
6392
6393     { PropertySheet callbacks  }
6394     LPFNADDPROPSHEETPAGE = function (_para1:HPROPSHEETPAGE; _para2:LPARAM):WINBOOL;stdcall;
6395     TFNADDPROPSHEETPAGE = LPFNADDPROPSHEETPAGE;
6396
6397     LPFNADDPROPSHEETPAGES = function (_para1:LPVOID; _para2:LPFNADDPROPSHEETPAGE; _para3:LPARAM):WINBOOL;stdcall;
6398     TFNADDPROPSHEETPAGES = LPFNADDPROPSHEETPAGES;
6399
6400     PROTOCOL_INFO = record
6401          dwServiceFlags : DWORD;
6402          iAddressFamily : WINT;
6403          iMaxSockAddr : WINT;
6404          iMinSockAddr : WINT;
6405          iSocketType : WINT;
6406          iProtocol : WINT;
6407          dwMessageSize : DWORD;
6408          lpProtocol : LPTSTR;
6409       end;
6410     _PROTOCOL_INFO = PROTOCOL_INFO;
6411     TPROTOCOLINFO = PROTOCOL_INFO;
6412     PPROTOCOLINFO = ^PROTOCOL_INFO;
6413
6414     PROVIDOR_INFO_1 = record
6415          pName : LPTSTR;
6416          pEnvironment : LPTSTR;
6417          pDLLName : LPTSTR;
6418       end;
6419     _PROVIDOR_INFO_1 = PROVIDOR_INFO_1;
6420     TPROVIDORINFO1 = PROVIDOR_INFO_1;
6421     PPROVIDORINFO1 = ^PROVIDOR_INFO_1;
6422
6423     PSHNOTIFY = record
6424          hdr : NMHDR;
6425          lParam : LPARAM;
6426       end;
6427     LPPSHNOTIFY = ^PSHNOTIFY;
6428     _PSHNOTIFY = PSHNOTIFY;
6429     TPSHNOTIFY = PSHNOTIFY;
6430     PPSHNOTIFY = ^PSHNOTIFY;
6431
6432     PUNCTUATION = record
6433          iSize : UINT;
6434          szPunctuation : LPSTR;
6435       end;
6436     _punctuation = PUNCTUATION;
6437     Tpunctuation = PUNCTUATION;
6438     Ppunctuation = ^PUNCTUATION;
6439
6440     QUERY_SERVICE_CONFIG = record
6441          dwServiceType : DWORD;
6442          dwStartType : DWORD;
6443          dwErrorControl : DWORD;
6444          lpBinaryPathName : LPTSTR;
6445          lpLoadOrderGroup : LPTSTR;
6446          dwTagId : DWORD;
6447          lpDependencies : LPTSTR;
6448          lpServiceStartName : LPTSTR;
6449          lpDisplayName : LPTSTR;
6450       end;
6451     LPQUERY_SERVICE_CONFIG = ^QUERY_SERVICE_CONFIG;
6452     _QUERY_SERVICE_CONFIG = QUERY_SERVICE_CONFIG;
6453     TQUERYSERVICECONFIG = QUERY_SERVICE_CONFIG;
6454     PQUERYSERVICECONFIG = ^QUERY_SERVICE_CONFIG;
6455
6456     QUERY_SERVICE_CONFIGA = record
6457          dwServiceType : DWORD;
6458          dwStartType : DWORD;
6459          dwErrorControl : DWORD;
6460          lpBinaryPathName : LPSTR;
6461          lpLoadOrderGroup : LPSTR;
6462          dwTagId : DWORD;
6463          lpDependencies : LPSTR;
6464          lpServiceStartName : LPSTR;
6465          lpDisplayName : LPSTR;
6466       end;
6467     LPQUERY_SERVICE_CONFIGA = ^QUERY_SERVICE_CONFIGA;
6468     _QUERY_SERVICE_CONFIGA  = QUERY_SERVICE_CONFIGA;
6469     TQUERYSERVICECONFIGA    = QUERY_SERVICE_CONFIGA;
6470     PQUERYSERVICECONFIGA    = ^QUERY_SERVICE_CONFIGA;
6471
6472     QUERY_SERVICE_CONFIGW = record
6473          dwServiceType : DWORD;
6474          dwStartType : DWORD;
6475          dwErrorControl : DWORD;
6476          lpBinaryPathName : LPWSTR;
6477          lpLoadOrderGroup : LPWSTR;
6478          dwTagId : DWORD;
6479          lpDependencies : LPWSTR;
6480          lpServiceStartName : LPWSTR;
6481          lpDisplayName : LPWSTR;
6482       end;
6483     LPQUERY_SERVICE_CONFIGW = ^QUERY_SERVICE_CONFIGW;
6484     _QUERY_SERVICE_CONFIGW  = QUERY_SERVICE_CONFIGW;
6485     TQUERYSERVICECONFIGW    = QUERY_SERVICE_CONFIGW;
6486     PQUERYSERVICECONFIGW    = ^QUERY_SERVICE_CONFIGW;
6487
6488     QUERY_SERVICE_LOCK_STATUSA = record
6489          fIsLocked : DWORD;
6490          lpLockOwner : LPSTR;
6491          dwLockDuration : DWORD;
6492       end;
6493     LPQUERY_SERVICE_LOCK_STATUSA = ^QUERY_SERVICE_LOCK_STATUSA;
6494     _QUERY_SERVICE_LOCK_STATUSA  = QUERY_SERVICE_LOCK_STATUSA;
6495     TQUERYSERVICELOCKSTATUSA     = QUERY_SERVICE_LOCK_STATUSA;
6496     PQUERYSERVICELOCKSTATUSA     = ^QUERY_SERVICE_LOCK_STATUSA;
6497
6498     QUERY_SERVICE_LOCK_STATUSW = record
6499          fIsLocked : DWORD;
6500          lpLockOwner : LPWSTR;
6501          dwLockDuration : DWORD;
6502       end;
6503     LPQUERY_SERVICE_LOCK_STATUSW = ^QUERY_SERVICE_LOCK_STATUSW;
6504     _QUERY_SERVICE_LOCK_STATUSW = QUERY_SERVICE_LOCK_STATUSW;
6505     TQUERYSERVICELOCKSTATUSW = QUERY_SERVICE_LOCK_STATUSW;
6506     PQUERYSERVICELOCKSTATUSW = ^QUERY_SERVICE_LOCK_STATUSW;
6507     {$ifdef Unicode}
6508     LPQUERY_SERVICE_LOCK_STATUS = ^QUERY_SERVICE_LOCK_STATUSW;
6509     _QUERY_SERVICE_LOCK_STATUS  = QUERY_SERVICE_LOCK_STATUSW;
6510     QUERY_SERVICE_LOCK_STATUS   = QUERY_SERVICE_LOCK_STATUSW;
6511     TQUERYSERVICELOCKSTATUS     = QUERY_SERVICE_LOCK_STATUSW;
6512     PQUERYSERVICELOCKSTATUS     = ^QUERY_SERVICE_LOCK_STATUSW;
6513     {$else}
6514     LPQUERY_SERVICE_LOCK_STATUS = ^QUERY_SERVICE_LOCK_STATUSA;
6515     _QUERY_SERVICE_LOCK_STATUS  = QUERY_SERVICE_LOCK_STATUSA;
6516     QUERY_SERVICE_LOCK_STATUS   = QUERY_SERVICE_LOCK_STATUSA;
6517     TQUERYSERVICELOCKSTATUS     = QUERY_SERVICE_LOCK_STATUSA;
6518     PQUERYSERVICELOCKSTATUS     = ^QUERY_SERVICE_LOCK_STATUSA;
6519     {$endif}
6520
6521     RASAMBA = record
6522          dwSize : DWORD;
6523          dwError : DWORD;
6524          szNetBiosError : array[0..(NETBIOS_NAME_LEN + 1)-1] of AnsiCHAR;
6525          bLana : BYTE;
6526       end;
6527     _RASAMBA = RASAMBA;
6528     TRASAMBA = RASAMBA;
6529     PRASAMBA = ^RASAMBA;
6530
6531     RASAMBW = record
6532          dwSize : DWORD;
6533          dwError : DWORD;
6534          szNetBiosError : array[0..(NETBIOS_NAME_LEN + 1)-1] of WideCHAR;
6535          bLana : BYTE;
6536       end;
6537     _RASAMBW = RASAMBW;
6538     TRASAMBW = RASAMBW;
6539     PRASAMBW = ^RASAMBW;
6540     {$ifdef Unicode}
6541       _RASAMB = RASAMBW;
6542       TRASAMB = RASAMBW;
6543       PRASAMB = PRASAMBW;
6544       RASAMB  = RASAMBW;
6545     {$else}
6546       _RASAMB = RASAMBA;
6547       TRASAMB = RASAMBA;
6548       RASAMB  = RASAMBA;
6549       PRASAMB = PRASAMBA;
6550     {$endif}
6551
6552     RASCONNA = record
6553          dwSize : DWORD;
6554          hrasconn : HRASCONN;
6555          szEntryName : array[0..(RAS_MaxEntryName + 1)-1] of AnsiCHAR;
6556          szDeviceType : array[0..(RAS_MaxDeviceType + 1)-1] of AnsiCHAR;
6557          szDeviceName : array[0..(RAS_MaxDeviceName + 1)-1] of AnsiCHAR;
6558       end;
6559     _RASCONNA = RASCONNA;
6560     TRASCONNA = RASCONNA;
6561     PRASCONNA = ^RASCONNA;
6562
6563     RASCONNW = record
6564          dwSize : DWORD;
6565          hrasconn : HRASCONN;
6566          szEntryName : array[0..(RAS_MaxEntryName + 1)-1] of WideCHAR;
6567          szDeviceType : array[0..(RAS_MaxDeviceType + 1)-1] of WideCHAR;
6568          szDeviceName : array[0..(RAS_MaxDeviceName + 1)-1] of WideCHAR;
6569       end;
6570     _RASCONNW = RASCONNW;
6571     TRASCONNW = RASCONNW;
6572     PRASCONNW = ^RASCONNW;
6573     {$ifdef Unicode}
6574        _RASCONN = RASCONNW;
6575        TRASCONN = RASCONNW;
6576        PRASCONN = PRASCONNW;
6577        RASCONN  = RASCONNW;
6578     {$else}
6579        _RASCONN = RASCONNA;
6580        TRASCONN = RASCONNA;
6581        PRASCONN = PRASCONNA;
6582        RASCONN  = RASCONNA;
6583     {$endif}
6584
6585     { actually: in_addr }
6586     RASIPV4ADDR = record
6587       case longint of
6588         0 : (s_b1 : BYTE;
6589              s_b2 : BYTE;
6590              s_b3 : BYTE;
6591              s_b4 : BYTE;
6592             );
6593         1 : (s_w1 : USHORT;
6594              s_w2 : USHORT;
6595             );
6596         2 : (S_addr : ULONG;);
6597     end;
6598
6599     { actually: in6_addr }
6600     RASIPV6ADDR = record
6601       case longint of
6602         0 : (rbyte : array[0..15] of BYTE);
6603         1 : (rword : array[0..7] of USHORT);
6604     end;
6605
6606     RASTUNNELENDPOINT = record
6607       dwType : DWORD;
6608       case longint of
6609         0 : (ipv4 : RASIPV4ADDR);
6610         1 : (ipv6 : RASIPV6ADDR);
6611     end;
6612
6613     RASCONNSUBSTATE = longint;   //enumerated type
6614
6615     RASCONNSTATUSA = record
6616          dwSize : DWORD;
6617          rasconnstate : RASCONNSTATE;
6618          dwError : DWORD;
6619          szDeviceType : array[0..(RAS_MaxDeviceType + 1)-1] of AnsiCHAR;
6620          szDeviceName : array[0..(RAS_MaxDeviceName + 1)-1] of AnsiCHAR;
6621          szPhoneNumber : array[0..(RAS_MaxPhoneNumber + 1)-1] of AnsiCHAR; // http://msdn.microsoft.com/en-us/library/windows/desktop/aa376728%28v=vs.85%29.aspx
6622          localEndPoint : RASTUNNELENDPOINT;
6623          remoteEndPoint : RASTUNNELENDPOINT;
6624          rasconnsubstate : RASCONNSUBSTATE;
6625       end;
6626     _RASCONNSTATUSA = RASCONNSTATUSA;
6627     TRASCONNSTATUSA = RASCONNSTATUSA;
6628     PRASCONNSTATUSA = ^RASCONNSTATUSA;
6629
6630     RASCONNSTATUSW = record
6631          dwSize : DWORD;
6632          rasconnstate : RASCONNSTATE;
6633          dwError : DWORD;
6634          szDeviceType : array[0..(RAS_MaxDeviceType + 1)-1] of WideCHAR;
6635          szDeviceName : array[0..(RAS_MaxDeviceName + 1)-1] of WideCHAR;
6636          szPhoneNumber : array[0..(RAS_MaxPhoneNumber + 1)-1] of WideCHAR; // http://msdn.microsoft.com/en-us/library/windows/desktop/aa376728%28v=vs.85%29.aspx
6637          localEndPoint : RASTUNNELENDPOINT;
6638          remoteEndPoint : RASTUNNELENDPOINT;
6639          rasconnsubstate : RASCONNSUBSTATE;
6640       end;
6641     _RASCONNSTATUSW = RASCONNSTATUSW;
6642     TRASCONNSTATUSW = RASCONNSTATUSW;
6643     PRASCONNSTATUSW = ^RASCONNSTATUSW;
6644     {$ifdef Unicode}
6645       _RASCONNSTATUS = RASCONNSTATUSW;
6646       TRASCONNSTATUS = RASCONNSTATUSW;
6647       PRASCONNSTATUS = PRASCONNSTATUSW;
6648       RASCONNSTATUS  = RASCONNSTATUSW;
6649     {$else}
6650       _RASCONNSTATUS = RASCONNSTATUSA;
6651       TRASCONNSTATUS = RASCONNSTATUSA;
6652       PRASCONNSTATUS = PRASCONNSTATUSA;
6653       RASCONNSTATUS  = RASCONNSTATUSA;
6654     {$endif}
6655
6656     RASDIALEXTENSIONS = record
6657          dwSize : DWORD;
6658          dwfOptions : DWORD;
6659          hwndParent : HWND;
6660          reserved : DWORD;
6661       end;
6662     _RASDIALEXTENSIONS = RASDIALEXTENSIONS;
6663     TRASDIALEXTENSIONS = RASDIALEXTENSIONS;
6664     PRASDIALEXTENSIONS = ^RASDIALEXTENSIONS;
6665
6666     RASDIALPARAMSA = record
6667          dwSize : DWORD;
6668          szEntryName : array[0..(RAS_MaxEntryName + 1)-1] of AnsiCHAR;
6669          szPhoneNumber : array[0..(RAS_MaxPhoneNumber + 1)-1] of AnsiCHAR;
6670          szCallbackNumber : array[0..(RAS_MaxCallbackNumber + 1)-1] of AnsiCHAR;
6671          szUserName : array[0..(UNLEN + 1)-1] of AnsiCHAR;
6672          szPassword : array[0..(PWLEN + 1)-1] of AnsiCHAR;
6673          szDomain : array[0..(DNLEN + 1)-1] of AnsiCHAR;
6674          dwSubEntry : DWORD; // http://msdn.microsoft.com/en-us/library/windows/desktop/aa377238%28v=vs.85%29.aspx
6675          dwCallbackId : ULONG_PTR;
6676          dwIfIndex : DWORD;
6677       end;
6678     _RASDIALPARAMSA = RASDIALPARAMSA;
6679     TRASDIALPARAMSA = RASDIALPARAMSA;
6680     PRASDIALPARAMSA = ^RASDIALPARAMSA;
6681
6682     RASDIALPARAMSW = record
6683          dwSize : DWORD;
6684          szEntryName : array[0..(RAS_MaxEntryName + 1)-1] of WCHAR;
6685          szPhoneNumber : array[0..(RAS_MaxPhoneNumber + 1)-1] of WCHAR;
6686          szCallbackNumber : array[0..(RAS_MaxCallbackNumber + 1)-1] of WCHAR;
6687          szUserName : array[0..(UNLEN + 1)-1] of WCHAR;
6688          szPassword : array[0..(PWLEN + 1)-1] of WCHAR;
6689          szDomain : array[0..(DNLEN + 1)-1] of WCHAR;
6690          dwSubEntry : DWORD; // http://msdn.microsoft.com/en-us/library/windows/desktop/aa377238%28v=vs.85%29.aspx
6691          dwCallbackId : ULONG_PTR;
6692          dwIfIndex : DWORD;
6693       end;
6694     _RASDIALPARAMSW = RASDIALPARAMSW;
6695     TRASDIALPARAMSW = RASDIALPARAMSW;
6696     PRASDIALPARAMSW = ^RASDIALPARAMSW;
6697     {$ifdef Unicode}
6698        _RASDIALPARAMS = RASDIALPARAMSW;
6699        TRASDIALPARAMS = RASDIALPARAMSW;
6700        PRASDIALPARAMS = PRASDIALPARAMSW;
6701        RASDIALPARAMS  = RASDIALPARAMSW;
6702     {$else}
6703        _RASDIALPARAMS = RASDIALPARAMSA;
6704        TRASDIALPARAMS = RASDIALPARAMSA;
6705        PRASDIALPARAMS = PRASDIALPARAMSA;
6706        RASDIALPARAMS  = RASDIALPARAMSA;
6707     {$endif}
6708
6709     RASENTRYNAMEA = record
6710          dwSize : DWORD;
6711          szEntryName : array[0..(RAS_MaxEntryName + 1)-1] of AnsiCHAR;
6712          { Winver>=0x500 members }
6713          dwFlags : DWORD;
6714          szPhonebookPath : array[0..(MAX_PATH + 1)-1] of AnsiCHAR;
6715       end;
6716     _RASENTRYNAMEA = RASENTRYNAMEA;
6717     TRASENTRYNAMEA = RASENTRYNAMEA;
6718     PRASENTRYNAMEA = ^RASENTRYNAMEA;
6719
6720     RASENTRYNAMEW = record
6721          dwSize : DWORD;
6722          szEntryName : array[0..(RAS_MaxEntryName + 1)-1] of WCHAR;
6723          { Winver>=0x500 members }
6724          dwFlags : DWORD;
6725          szPhonebookPath : array[0..(MAX_PATH + 1)-1] of WCHAR;
6726       end;
6727     _RASENTRYNAMEW = RASENTRYNAMEW;
6728     TRASENTRYNAMEW = RASENTRYNAMEW;
6729     PRASENTRYNAMEW = ^RASENTRYNAMEW;
6730     {$ifdef Unicode}
6731         _RASENTRYNAME = RASENTRYNAMEW;
6732         TRASENTRYNAME = RASENTRYNAMEW;
6733         PRASENTRYNAME = ^RASENTRYNAMEW;
6734         RASENTRYNAME  = RASENTRYNAMEW;
6735     {$else}
6736         _RASENTRYNAME = RASENTRYNAMEA;
6737         TRASENTRYNAME = RASENTRYNAMEA;
6738         PRASENTRYNAME = ^RASENTRYNAMEA;
6739         RASENTRYNAME  = RASENTRYNAMEA;
6740     {$endif}
6741
6742     RASPPPIPA = record
6743          dwSize : DWORD;
6744          dwError : DWORD;
6745          szIpAddress : array[0..(RAS_MaxIpAddress + 1)-1] of AnsiCHAR;
6746       end;
6747     _RASPPPIPA = RASPPPIPA;
6748     TRASPPPIPA = RASPPPIPA;
6749     PRASPPPIPA = ^RASPPPIPA;
6750
6751     RASPPPIPW = record
6752          dwSize : DWORD;
6753          dwError : DWORD;
6754          szIpAddress : array[0..(RAS_MaxIpAddress + 1)-1] of WCHAR;
6755       end;
6756     _RASPPPIPW = RASPPPIPW;
6757     TRASPPPIPW = RASPPPIPW;
6758     PRASPPPIPW = ^RASPPPIPW;
6759     {$ifdef Unicode}
6760        _RASPPPIP  = RASPPPIPW;
6761        TRASPPPIP  = RASPPPIPW;
6762        PRASPPPIP  = PRASPPPIPW;
6763        RASPPPIP   = RASPPPIPW;
6764     {$else}
6765        _RASPPPIP  = RASPPPIPA;
6766        TRASPPPIP  = RASPPPIPA;
6767        PRASPPPIP  = PRASPPPIPA;
6768        RASPPPIP   = RASPPPIPA;
6769     {$endif}
6770
6771     RASPPPIPXA = record
6772          dwSize : DWORD;
6773          dwError : DWORD;
6774          szIpxAddress : array[0..(RAS_MaxIpxAddress + 1)-1] of AnsiCHAR;
6775       end;
6776     _RASPPPIPXA = RASPPPIPXA;
6777     TRASPPPIPXA = RASPPPIPXA;
6778     PRASPPPIPXA = ^RASPPPIPXA;
6779
6780     RASPPPIPXW = record
6781          dwSize : DWORD;
6782          dwError : DWORD;
6783          szIpxAddress : array[0..(RAS_MaxIpxAddress + 1)-1] of WCHAR;
6784       end;
6785     _RASPPPIPXW = RASPPPIPXW;
6786     TRASPPPIPXW = RASPPPIPXW;
6787     PRASPPPIPXW = ^RASPPPIPXW;
6788
6789     {$ifdef Unicode}
6790        _RASPPPIPX  = RASPPPIPXW;
6791        TRASPPPIPX  = RASPPPIPXW;
6792        PRASPPPIPX  = PRASPPPIPXW;
6793        RASPPPIPX   = RASPPPIPXW;
6794     {$else}
6795        _RASPPPIPX  = RASPPPIPXA;
6796        TRASPPPIPX  = RASPPPIPXA;
6797        PRASPPPIPX  = PRASPPPIPXA;
6798        RASPPPIPX   = RASPPPIPXA;
6799      {$endif}
6800
6801     RASPPPNBFA = record
6802          dwSize : DWORD;
6803          dwError : DWORD;
6804          dwNetBiosError : DWORD;
6805          szNetBiosError : array[0..(NETBIOS_NAME_LEN + 1)-1] of AnsiCHAR;
6806          szWorkstationName : array[0..(NETBIOS_NAME_LEN + 1)-1] of AnsiCHAR;
6807          bLana : BYTE;
6808       end;
6809     _RASPPPNBFA = RASPPPNBFA;
6810     TRASPPPNBFA = RASPPPNBFA;
6811     PRASPPPNBFA = ^RASPPPNBFA;
6812
6813     RASPPPNBFW = record
6814          dwSize : DWORD;
6815          dwError : DWORD;
6816          dwNetBiosError : DWORD;
6817          szNetBiosError : array[0..(NETBIOS_NAME_LEN + 1)-1] of WCHAR;
6818          szWorkstationName : array[0..(NETBIOS_NAME_LEN + 1)-1] of WCHAR;
6819          bLana : BYTE;
6820       end;
6821     _RASPPPNBFW = RASPPPNBFW;
6822     TRASPPPNBFW = RASPPPNBFW;
6823     PRASPPPNBFW = ^RASPPPNBFW;
6824     {$ifdef Unicode}
6825        _RASPPPNBF  = RASPPPNBFW;
6826        TRASPPPNBF  = RASPPPNBFW;
6827        PRASPPPNBF  = PRASPPPNBFW;
6828        RASPPPNBF   = RASPPPNBFW;
6829     {$else}
6830        _RASPPPNBF  = RASPPPNBFA;
6831        TRASPPPNBF  = RASPPPNBFA;
6832        PRASPPPNBF  = PRASPPPNBFA;
6833        RASPPPNBF   = RASPPPNBFA;
6834     {$endif}
6835     RASTERIZER_STATUS = record
6836          nSize : short;
6837          wFlags : short;
6838          nLanguageID : short;
6839       end;
6840     LPRASTERIZER_STATUS = ^RASTERIZER_STATUS;
6841     _RASTERIZER_STATUS = RASTERIZER_STATUS;
6842     TRASTERIZERSTATUS = RASTERIZER_STATUS;
6843     PRASTERIZERSTATUS = ^RASTERIZER_STATUS;
6844
6845     REASSIGN_BLOCKS = record
6846          Reserved : WORD;
6847          Count : WORD;
6848          BlockNumber : array[0..0] of DWORD;
6849       end;
6850     _REASSIGN_BLOCKS = REASSIGN_BLOCKS;
6851     TREASSIGNBLOCKS = REASSIGN_BLOCKS;
6852     PREASSIGNBLOCKS = ^REASSIGN_BLOCKS;
6853
6854     REMOTE_NAME_INFOA = record
6855          lpUniversalName : LPTSTR;
6856          lpConnectionName : LPTSTR;
6857          lpRemainingPath : LPTSTR;
6858       end;
6859     _REMOTE_NAME_INFOA = REMOTE_NAME_INFOA;
6860     TREMOTENAMEINFOA = REMOTE_NAME_INFOA;
6861     PREMOTENAMEINFOA = ^REMOTE_NAME_INFOA;
6862
6863     REMOTE_NAME_INFOW = record
6864          lpUniversalName : LPWSTR;
6865          lpConnectionName : LPWSTR;
6866          lpRemainingPath : LPWSTR;
6867       end;
6868     _REMOTE_NAME_INFOW = REMOTE_NAME_INFOW;
6869     TREMOTENAMEINFOW = REMOTE_NAME_INFOW;
6870     PREMOTENAMEINFOW = ^REMOTE_NAME_INFOW;
6871
6872{$IFNDEF UNICODE}
6873     REMOTE_NAME_INFO = REMOTE_NAME_INFOA;
6874     _REMOTE_NAME_INFO = REMOTE_NAME_INFOA;
6875     TREMOTENAMEINFO = REMOTE_NAME_INFOA;
6876     PREMOTENAMEINFO = ^REMOTE_NAME_INFOA;
6877{$ELSE UNICODE}
6878     REMOTE_NAME_INFO = REMOTE_NAME_INFOW;
6879     _REMOTE_NAME_INFO = REMOTE_NAME_INFOW;
6880     TREMOTENAMEINFO = REMOTE_NAME_INFOW;
6881     PREMOTENAMEINFO = ^REMOTE_NAME_INFOW;
6882{$ENDIF UNICODE}
6883
6884  (*
6885   TODO: OLE
6886  typedef struct _reobject {
6887    DWORD  cbStruct;
6888    LONG   cp;
6889    CLSID  clsid;
6890    LPOLEOBJECT      poleobj;
6891    LPSTORAGE        pstg;
6892    LPOLECLIENTSITE  polesite;
6893    SIZEL  sizel;
6894    DWORD  dvaspect;
6895    DWORD  dwFlags;
6896    DWORD  dwUser;
6897  } REOBJECT;
6898   *)
6899
6900     REPASTESPECIAL = record
6901          dwAspect : DWORD;
6902          dwParam : DWORD;
6903       end;
6904     _repastespecial = REPASTESPECIAL;
6905     Trepastespecial = REPASTESPECIAL;
6906     Prepastespecial = ^REPASTESPECIAL;
6907
6908     REQRESIZE = record
6909          nmhdr : NMHDR;
6910          rc : RECT;
6911       end;
6912     _reqresize = REQRESIZE;
6913     Treqresize = REQRESIZE;
6914     Preqresize = ^REQRESIZE;
6915
6916     RGNDATAHEADER = record
6917          dwSize : DWORD;
6918          iType : DWORD;
6919          nCount : DWORD;
6920          nRgnSize : DWORD;
6921          rcBound : RECT;
6922       end;
6923     _RGNDATAHEADER = RGNDATAHEADER;
6924     TRGNDATAHEADER = RGNDATAHEADER;
6925     PRGNDATAHEADER = ^RGNDATAHEADER;
6926
6927     RGNDATA = record
6928          rdh : RGNDATAHEADER;
6929          Buffer : array[0..0] of Ansichar;
6930       end;
6931     LPRGNDATA = ^RGNDATA;
6932     _RGNDATA = RGNDATA;
6933     TRGNDATA = RGNDATA;
6934     PRGNDATA = ^RGNDATA;
6935
6936     SCROLLINFO = record
6937          cbSize : UINT;
6938          fMask : UINT;
6939          nMin : longint;
6940          nMax : longint;
6941          nPage : UINT;
6942          nPos : longint;
6943          nTrackPos : longint;
6944       end;
6945     LPSCROLLINFO = ^SCROLLINFO;
6946     LPCSCROLLINFO = ^SCROLLINFO;
6947     tagSCROLLINFO = SCROLLINFO;
6948     TSCROLLINFO = SCROLLINFO;
6949     PSCROLLINFO = ^SCROLLINFO;
6950
6951     SECURITY_ATTRIBUTES = record
6952          nLength : DWORD;
6953          lpSecurityDescriptor : LPVOID;
6954          bInheritHandle : WINBOOL;
6955       end;
6956     LPSECURITY_ATTRIBUTES = ^SECURITY_ATTRIBUTES;
6957     _SECURITY_ATTRIBUTES = SECURITY_ATTRIBUTES;
6958     TSECURITYATTRIBUTES = SECURITY_ATTRIBUTES;
6959     PSECURITYATTRIBUTES = ^SECURITY_ATTRIBUTES;
6960
6961     SECURITY_INFORMATION = DWORD;
6962     PSECURITY_INFORMATION = ^SECURITY_INFORMATION;
6963     TSECURITYINFORMATION = SECURITY_INFORMATION;
6964     PSECURITYINFORMATION = ^SECURITY_INFORMATION;
6965
6966     SELCHANGE = record
6967          nmhdr : NMHDR;
6968          chrg : CHARRANGE;
6969          seltyp : WORD;
6970       end;
6971     _selchange = SELCHANGE;
6972     Tselchange = SELCHANGE;
6973     Pselchange = ^SELCHANGE;
6974
6975     SERIALKEYS = record
6976          cbSize : UINT;
6977          dwFlags : DWORD;
6978          lpszActivePort : LPSTR;
6979          lpszPort : LPSTR;
6980          iBaudRate : DWORD;
6981          iPortState : DWORD;
6982       end;
6983     LPSERIALKEYS = ^SERIALKEYS;
6984     tagSERIALKEYS = SERIALKEYS;
6985     TSERIALKEYS = SERIALKEYS;
6986     PSERIALKEYS = ^SERIALKEYS;
6987
6988     SERVICE_TABLE_ENTRY = record
6989          lpServiceName : LPTSTR;
6990          lpServiceProc : LPSERVICE_MAIN_FUNCTION;
6991       end;
6992     LPSERVICE_TABLE_ENTRY = ^SERVICE_TABLE_ENTRY;
6993     _SERVICE_TABLE_ENTRY = SERVICE_TABLE_ENTRY;
6994     TSERVICETABLEENTRY = SERVICE_TABLE_ENTRY;
6995     PSERVICETABLEENTRY = ^SERVICE_TABLE_ENTRY;
6996
6997     SERVICE_TABLE_ENTRYA = record
6998          lpServiceName : LPSTR;
6999          lpServiceProc : LPSERVICE_MAIN_FUNCTIONA;
7000       end;
7001     LPSERVICE_TABLE_ENTRYA = ^SERVICE_TABLE_ENTRYA;
7002     _SERVICE_TABLE_ENTRYA = SERVICE_TABLE_ENTRYA;
7003     TSERVICETABLEENTRYA = SERVICE_TABLE_ENTRYA;
7004     PSERVICETABLEENTRYA = ^SERVICE_TABLE_ENTRYA;
7005
7006     SERVICE_TABLE_ENTRYW = record
7007          lpServiceName : LPWSTR;
7008          lpServiceProc : LPSERVICE_MAIN_FUNCTIONW;
7009       end;
7010     LPSERVICE_TABLE_ENTRYW = ^SERVICE_TABLE_ENTRYW;
7011     _SERVICE_TABLE_ENTRYW = SERVICE_TABLE_ENTRYW;
7012     TSERVICETABLEENTRYW = SERVICE_TABLE_ENTRYW;
7013     PSERVICETABLEENTRYW = ^SERVICE_TABLE_ENTRYW;
7014
7015     SERVICE_TYPE_VALUE_ABS = record
7016          dwNameSpace : DWORD;
7017          dwValueType : DWORD;
7018          dwValueSize : DWORD;
7019          lpValueName : LPTSTR;
7020          lpValue : PVOID;
7021       end;
7022     _SERVICE_TYPE_VALUE_ABS = SERVICE_TYPE_VALUE_ABS;
7023     TSERVICETYPEVALUEABS = SERVICE_TYPE_VALUE_ABS;
7024     PSERVICETYPEVALUEABS = ^SERVICE_TYPE_VALUE_ABS;
7025
7026     SERVICE_TYPE_INFO_ABS = record
7027          lpTypeName : LPTSTR;
7028          dwValueCount : DWORD;
7029          Values : array[0..0] of SERVICE_TYPE_VALUE_ABS;
7030       end;
7031     _SERVICE_TYPE_INFO_ABS = SERVICE_TYPE_INFO_ABS;
7032     TSERVICETYPEINFOABS = SERVICE_TYPE_INFO_ABS;
7033     PSERVICETYPEINFOABS = ^SERVICE_TYPE_INFO_ABS;
7034
7035     SESSION_BUFFER = record
7036          lsn : UCHAR;
7037          state : UCHAR;
7038          local_name : array[0..(NCBNAMSZ)-1] of UCHAR;
7039          remote_name : array[0..(NCBNAMSZ)-1] of UCHAR;
7040          rcvs_outstanding : UCHAR;
7041          sends_outstanding : UCHAR;
7042       end;
7043     _SESSION_BUFFER = SESSION_BUFFER;
7044     TSESSIONBUFFER = SESSION_BUFFER;
7045     PSESSIONBUFFER = ^SESSION_BUFFER;
7046
7047     SESSION_HEADER = record
7048          sess_name : UCHAR;
7049          num_sess : UCHAR;
7050          rcv_dg_outstanding : UCHAR;
7051          rcv_any_outstanding : UCHAR;
7052       end;
7053     _SESSION_HEADER = SESSION_HEADER;
7054     TSESSIONHEADER = SESSION_HEADER;
7055     PSESSIONHEADER = ^SESSION_HEADER;
7056
7057
7058     SHCONTF = (SHCONTF_FOLDERS := 32,SHCONTF_NONFOLDERS := 64,
7059       SHCONTF_INCLUDEHIDDEN := 128);
7060     tagSHCONTF = SHCONTF;
7061     TSHCONTF = SHCONTF;
7062
7063     SHFILEINFO = record
7064          hIcon : HICON;
7065          iIcon : longint;
7066          dwAttributes : DWORD;
7067          szDisplayName : array[0..(MAX_PATH)-1] of TCHAR;
7068          szTypeName : array[0..79] of TCHAR;
7069       end;
7070     _SHFILEINFO = SHFILEINFO;
7071     TSHFILEINFO = SHFILEINFO;
7072     PSHFILEINFO = ^SHFILEINFO;
7073
7074     FILEOP_FLAGS = WORD;
7075     TFILEOPFLAGS = FILEOP_FLAGS;
7076     PFILEOPFLAGS = ^FILEOP_FLAGS;
7077
7078     SHFILEOPSTRUCT = record
7079          hwnd : HWND;
7080          wFunc : UINT;
7081          pFrom : LPCSTR;   // PCZZTSTR
7082          pTo : LPCSTR;     // PCZZTSTR
7083          fFlags : FILEOP_FLAGS;
7084          fAnyOperationsAborted : WINBOOL;
7085          hNameMappings : LPVOID;
7086          lpszProgressTitle : LPCSTR;   // PCTSTR
7087       end;
7088     LPSHFILEOPSTRUCT = ^SHFILEOPSTRUCT;
7089     _SHFILEOPSTRUCT = SHFILEOPSTRUCT;
7090     TSHFILEOPSTRUCT = SHFILEOPSTRUCT;
7091     PSHFILEOPSTRUCT = ^SHFILEOPSTRUCT;
7092
7093     SHGNO = (SHGDN_NORMAL := 0,SHGDN_INFOLDER := 1,
7094       SHGDN_FORPARSING := $8000);
7095     tagSHGDN = SHGNO;
7096     TSHGDN = SHGNO;
7097
7098     SHNAMEMAPPING = record
7099          pszOldPath : LPSTR;
7100          pszNewPath : LPSTR;
7101          cchOldPath : longint;
7102          cchNewPath : longint;
7103       end;
7104     LPSHNAMEMAPPING = ^SHNAMEMAPPING;
7105     _SHNAMEMAPPING = SHNAMEMAPPING;
7106     TSHNAMEMAPPING = SHNAMEMAPPING;
7107     PSHNAMEMAPPING = ^SHNAMEMAPPING;
7108
7109     SID_AND_ATTRIBUTES = record
7110          Sid : PSID;
7111          Attributes : DWORD;
7112       end;
7113     _SID_AND_ATTRIBUTES = SID_AND_ATTRIBUTES;
7114     TSIDANDATTRIBUTES = SID_AND_ATTRIBUTES;
7115     PSIDANDATTRIBUTES = ^SID_AND_ATTRIBUTES;
7116
7117     SID_AND_ATTRIBUTES_ARRAY = array[0..(ANYSIZE_ARRAY)-1] of SID_AND_ATTRIBUTES;
7118     PSID_AND_ATTRIBUTES_ARRAY = ^SID_AND_ATTRIBUTES_ARRAY;
7119     TSIDANDATTRIBUTESARRAY = SID_AND_ATTRIBUTES_ARRAY;
7120     PSIDANDATTRIBUTESARRAY = ^SID_AND_ATTRIBUTES_ARRAY;
7121
7122     SINGLE_LIST_ENTRY = record
7123          Next : ^_SINGLE_LIST_ENTRY;
7124       end;
7125     _SINGLE_LIST_ENTRY = SINGLE_LIST_ENTRY;
7126     TSINGLELISTENTRY = SINGLE_LIST_ENTRY;
7127     PSINGLELISTENTRY = ^SINGLE_LIST_ENTRY;
7128
7129     SOUNDSENTRY = record
7130          cbSize : UINT;
7131          dwFlags : DWORD;
7132          iFSTextEffect : DWORD;
7133          iFSTextEffectMSec : DWORD;
7134          iFSTextEffectColorBits : DWORD;
7135          iFSGrafEffect : DWORD;
7136          iFSGrafEffectMSec : DWORD;
7137          iFSGrafEffectColor : DWORD;
7138          iWindowsEffect : DWORD;
7139          iWindowsEffectMSec : DWORD;
7140          lpszWindowsEffectDLL : LPTSTR;
7141          iWindowsEffectOrdinal : DWORD;
7142       end;
7143     LPSOUNDSENTRY = ^SOUNDSENTRY;
7144     tagSOUNDSENTRY = SOUNDSENTRY;
7145     TSOUNDSENTRY = SOUNDSENTRY;
7146     PSOUNDSENTRY = ^SOUNDSENTRY;
7147     STARTUPINFOA = record
7148          cb : DWORD;
7149          lpReserved : LPSTR;
7150          lpDesktop : LPSTR;
7151          lpTitle : LPSTR;
7152          dwX : DWORD;
7153          dwY : DWORD;
7154          dwXSize : DWORD;
7155          dwYSize : DWORD;
7156          dwXCountChars : DWORD;
7157          dwYCountChars : DWORD;
7158          dwFillAttribute : DWORD;
7159          dwFlags : DWORD;
7160          wShowWindow : WORD;
7161          cbReserved2 : WORD;
7162          lpReserved2 : LPBYTE;
7163          hStdInput : HANDLE;
7164          hStdOutput : HANDLE;
7165          hStdError : HANDLE;
7166       end;
7167     LPSTARTUPINFOA = ^STARTUPINFOA;
7168     _STARTUPINFOA = STARTUPINFOA;
7169     TSTARTUPINFOA = STARTUPINFOA;
7170     PSTARTUPINFOA = ^STARTUPINFOA;
7171     STARTUPINFOW = record
7172          cb : DWORD;
7173          lpReserved : LPWSTR;
7174          lpDesktop : LPWSTR;
7175          lpTitle : LPWSTR;
7176          dwX : DWORD;
7177          dwY : DWORD;
7178          dwXSize : DWORD;
7179          dwYSize : DWORD;
7180          dwXCountChars : DWORD;
7181          dwYCountChars : DWORD;
7182          dwFillAttribute : DWORD;
7183          dwFlags : DWORD;
7184          wShowWindow : WORD;
7185          cbReserved2 : WORD;
7186          lpReserved2 : LPBYTE;
7187          hStdInput : HANDLE;
7188          hStdOutput : HANDLE;
7189          hStdError : HANDLE;
7190       end;
7191     LPSTARTUPINFOW = ^STARTUPINFOW;
7192     _STARTUPINFOW = STARTUPINFOW;
7193     TSTARTUPINFOW = STARTUPINFOW;
7194     PSTARTUPINFOW = ^STARTUPINFOW;
7195
7196     STARTUPINFO = record
7197          cb : DWORD;
7198          lpReserved : LPTSTR;
7199          lpDesktop : LPTSTR;
7200          lpTitle : LPTSTR;
7201          dwX : DWORD;
7202          dwY : DWORD;
7203          dwXSize : DWORD;
7204          dwYSize : DWORD;
7205          dwXCountChars : DWORD;
7206          dwYCountChars : DWORD;
7207          dwFillAttribute : DWORD;
7208          dwFlags : DWORD;
7209          wShowWindow : WORD;
7210          cbReserved2 : WORD;
7211          lpReserved2 : LPBYTE;
7212          hStdInput : HANDLE;
7213          hStdOutput : HANDLE;
7214          hStdError : HANDLE;
7215       end;
7216     {$ifdef Unicode}
7217     LPSTARTUPINFO = LPSTARTUPINFOW;
7218     _STARTUPINFO = _STARTUPINFOW;
7219     TSTARTUPINFO = TSTARTUPINFOW;
7220     PSTARTUPINFO = PSTARTUPINFOW;
7221     {$else}
7222     LPSTARTUPINFO = LPSTARTUPINFOA;
7223     _STARTUPINFO = _STARTUPINFOA;
7224     TSTARTUPINFO = TSTARTUPINFOA;
7225     PSTARTUPINFO = PSTARTUPINFOA;
7226     {$endif}
7227     STICKYKEYS = record
7228          cbSize : DWORD;
7229          dwFlags : DWORD;
7230       end;
7231     LPSTICKYKEYS = ^STICKYKEYS;
7232     tagSTICKYKEYS = STICKYKEYS;
7233     TSTICKYKEYS = STICKYKEYS;
7234     PSTICKYKEYS = ^STICKYKEYS;
7235
7236     STRRET = record
7237          utype : UINT;
7238          case longint of
7239           0: ( polestr:LPWSTR);
7240           1: ( uOffset : UINT);
7241           2: ( cStr : array[0..(MAX_PATH)-1] of char );
7242       end;
7243     LPSTRRET = ^STRRET;
7244     _STRRET = STRRET;
7245     TSTRRET = STRRET;
7246     PSTRRET = ^STRRET;
7247
7248     STYLEBUF = record
7249          dwStyle : DWORD;
7250          szDescription : array[0..31] of TCHAR;
7251       end;
7252     LPSTYLEBUF = ^STYLEBUF;
7253     _tagSTYLEBUF = STYLEBUF;
7254     TSTYLEBUF = STYLEBUF;
7255     PSTYLEBUF = ^STYLEBUF;
7256
7257     STYLESTRUCT = record
7258          styleOld : DWORD;
7259          styleNew : DWORD;
7260       end;
7261     LPSTYLESTRUCT = ^STYLESTRUCT;
7262     tagSTYLESTRUCT = STYLESTRUCT;
7263     TSTYLESTRUCT = STYLESTRUCT;
7264     PSTYLESTRUCT = ^STYLESTRUCT;
7265
7266     SYSTEM_AUDIT_ACE = record
7267          Header : ACE_HEADER;
7268          Mask : ACCESS_MASK;
7269          SidStart : DWORD;
7270       end;
7271     _SYSTEM_AUDIT_ACE = SYSTEM_AUDIT_ACE;
7272     TSYSTEMAUDITACE = SYSTEM_AUDIT_ACE;
7273     PSYSTEMAUDITACE = ^SYSTEM_AUDIT_ACE;
7274
7275     SYSTEM_INFO = record
7276              case longint of
7277                 0 : ( dwOemId : DWORD;
7278		       dwPageSize : DWORD;
7279          	       lpMinimumApplicationAddress : LPVOID;
7280          	       lpMaximumApplicationAddress : LPVOID;
7281          	       dwActiveProcessorMask : DWORD_PTR;
7282          	       dwNumberOfProcessors : DWORD;
7283                       dwProcessorType : DWORD;
7284                       dwAllocationGranularity : DWORD;
7285                       wProcessorLevel : WORD;
7286                       wProcessorRevision : WORD;
7287			 );
7288                 1 : (
7289                      wProcessorArchitecture : WORD;
7290                      wReserved : WORD;
7291                    );
7292       end;
7293     LPSYSTEM_INFO = ^SYSTEM_INFO;
7294     _SYSTEM_INFO = SYSTEM_INFO;
7295     TSYSTEMINFO = SYSTEM_INFO;
7296     PSYSTEMINFO = ^SYSTEM_INFO;
7297
7298     SYSTEM_POWER_STATUS = record
7299          ACLineStatus : BYTE;
7300          BatteryFlag : BYTE;
7301          BatteryLifePercent : BYTE;
7302          Reserved1 : BYTE;
7303          BatteryLifeTime : DWORD;
7304          BatteryFullLifeTime : DWORD;
7305       end;
7306     _SYSTEM_POWER_STATUS = SYSTEM_POWER_STATUS;
7307     TSYSTEMPOWERSTATUS = SYSTEM_POWER_STATUS;
7308     PSYSTEMPOWERSTATUS = ^SYSTEM_POWER_STATUS;
7309
7310     LPSYSTEM_POWER_STATUS = ^emptyrecord;
7311
7312     TAPE_ERASE = record
7313          _Type : ULONG;
7314          Immediate : BOOLEAN;
7315       end;
7316     _TAPE_ERASE = TAPE_ERASE;
7317     TTAPEERASE = TAPE_ERASE;
7318     PTAPEERASE = ^TAPE_ERASE;
7319
7320     TAPE_GET_DRIVE_PARAMETERS = record
7321          ECC : BOOLEAN;
7322          Compression : BOOLEAN;
7323          DataPadding : BOOLEAN;
7324          ReportSetmarks : BOOLEAN;
7325          DefaultBlockSize : ULONG;
7326          MaximumBlockSize : ULONG;
7327          MinimumBlockSize : ULONG;
7328          MaximumPartitionCount : ULONG;
7329          FeaturesLow : ULONG;
7330          FeaturesHigh : ULONG;
7331          EOTWarningZoneSize : ULONG;
7332       end;
7333     _TAPE_GET_DRIVE_PARAMETERS = TAPE_GET_DRIVE_PARAMETERS;
7334     TTAPEGETDRIVEPARAMETERS = TAPE_GET_DRIVE_PARAMETERS;
7335     PTAPEGETDRIVEPARAMETERS = ^TAPE_GET_DRIVE_PARAMETERS;
7336
7337     TAPE_GET_MEDIA_PARAMETERS = record
7338          Capacity : LARGE_INTEGER;
7339          Remaining : LARGE_INTEGER;
7340          BlockSize : ULONG;
7341          PartitionCount : ULONG;
7342          WriteProtected : BOOLEAN;
7343       end;
7344     _TAPE_GET_MEDIA_PARAMETERS = TAPE_GET_MEDIA_PARAMETERS;
7345     TTAPEGETMEDIAPARAMETERS = TAPE_GET_MEDIA_PARAMETERS;
7346     PTAPEGETMEDIAPARAMETERS = ^TAPE_GET_MEDIA_PARAMETERS;
7347
7348     TAPE_GET_POSITION = record
7349          _Type : ULONG;
7350          Partition : ULONG;
7351          OffsetLow : ULONG;
7352          OffsetHigh : ULONG;
7353       end;
7354     _TAPE_GET_POSITION = TAPE_GET_POSITION;
7355     TTAPEGETPOSITION = TAPE_GET_POSITION;
7356     PTAPEGETPOSITION = ^TAPE_GET_POSITION;
7357
7358     TAPE_PREPARE = record
7359          Operation : ULONG;
7360          Immediate : BOOLEAN;
7361       end;
7362     _TAPE_PREPARE = TAPE_PREPARE;
7363     TTAPEPREPARE = TAPE_PREPARE;
7364     PTAPEPREPARE = ^TAPE_PREPARE;
7365
7366     TAPE_SET_DRIVE_PARAMETERS = record
7367          ECC : BOOLEAN;
7368          Compression : BOOLEAN;
7369          DataPadding : BOOLEAN;
7370          ReportSetmarks : BOOLEAN;
7371          EOTWarningZoneSize : ULONG;
7372       end;
7373     _TAPE_SET_DRIVE_PARAMETERS = TAPE_SET_DRIVE_PARAMETERS;
7374     TTAPESETDRIVEPARAMETERS = TAPE_SET_DRIVE_PARAMETERS;
7375     PTAPESETDRIVEPARAMETERS = ^TAPE_SET_DRIVE_PARAMETERS;
7376
7377     TAPE_SET_MEDIA_PARAMETERS = record
7378          BlockSize : ULONG;
7379       end;
7380     _TAPE_SET_MEDIA_PARAMETERS = TAPE_SET_MEDIA_PARAMETERS;
7381     TTAPESETMEDIAPARAMETERS = TAPE_SET_MEDIA_PARAMETERS;
7382     PTAPESETMEDIAPARAMETERS = ^TAPE_SET_MEDIA_PARAMETERS;
7383
7384     TAPE_SET_POSITION = record
7385          Method : ULONG;
7386          Partition : ULONG;
7387          OffsetLow : ULONG;
7388          OffsetHigh : ULONG;
7389          Immediate : BOOLEAN;
7390       end;
7391     _TAPE_SET_POSITION = TAPE_SET_POSITION;
7392     TTAPESETPOSITION = TAPE_SET_POSITION;
7393     PTAPESETPOSITION = ^TAPE_SET_POSITION;
7394
7395     TAPE_WRITE_MARKS = record
7396          _Type : ULONG;
7397          Count : ULONG;
7398          Immediate : BOOLEAN;
7399       end;
7400     _TAPE_WRITE_MARKS = TAPE_WRITE_MARKS;
7401     TTAPEWRITEMARKS = TAPE_WRITE_MARKS;
7402     PTAPEWRITEMARKS = ^TAPE_WRITE_MARKS;
7403
7404     TBADDBITMAP = record
7405          hInst : HINST;
7406          nID : UINT_PTR;
7407       end;
7408     LPTBADDBITMAP = ^TBADDBITMAP;
7409     TTBADDBITMAP = TBADDBITMAP;
7410     PTBADDBITMAP = ^TBADDBITMAP;
7411
7412     TBBUTTON = record
7413          iBitmap : longint;
7414          idCommand : longint;
7415          fsState : BYTE;
7416          fsStyle : BYTE;
7417{$ifdef WIN64}
7418          bReserved : array[0..5] of BYTE;
7419{$else}
7420          bReserved : array[0..1] of BYTE;
7421{$endif}
7422          dwData : DWORD_PTR;
7423          iString : INT_PTR;
7424       end;
7425     LPTBBUTTON = ^TBBUTTON;
7426     LPCTBBUTTON = ^TBBUTTON;
7427     _TBBUTTON = TBBUTTON;
7428     TTBBUTTON = TBBUTTON;
7429     PTBBUTTON = ^TBBUTTON;
7430
7431     TBNOTIFY = record
7432          hdr : NMHDR;
7433          iItem : longint;
7434          tbButton : TBBUTTON;
7435          cchText : longint;
7436          pszText : LPTSTR;
7437       end;
7438     LPTBNOTIFY = ^TBNOTIFY;
7439     TTBNOTIFY = TBNOTIFY;
7440     PTBNOTIFY = ^TBNOTIFY;
7441
7442     TBSAVEPARAMS = record
7443          hkr : HKEY;
7444          pszSubKey : LPCTSTR;
7445          pszValueName : LPCTSTR;
7446       end;
7447     TTBSAVEPARAMS = TBSAVEPARAMS;
7448     PTBSAVEPARAMS = ^TBSAVEPARAMS;
7449
7450     TC_HITTESTINFO = record
7451          pt : POINT;
7452          flags : UINT;
7453       end;
7454     _TC_HITTESTINFO = TC_HITTESTINFO;
7455     TTCHITTESTINFO = TC_HITTESTINFO;
7456     PTCHITTESTINFO = ^TC_HITTESTINFO;
7457
7458     TC_ITEM = record
7459          mask : UINT;
7460          lpReserved1 : UINT;
7461          lpReserved2 : UINT;
7462          pszText : LPTSTR;
7463          cchTextMax : longint;
7464          iImage : longint;
7465          lParam : LPARAM;
7466       end;
7467     _TC_ITEM = TC_ITEM;
7468     TTCITEM = TC_ITEM;
7469     PTCITEM = ^TC_ITEM;
7470
7471     TC_ITEMHEADER = record
7472          mask : UINT;
7473          lpReserved1 : UINT;
7474          lpReserved2 : UINT;
7475          pszText : LPTSTR;
7476          cchTextMax : longint;
7477          iImage : longint;
7478       end;
7479     _TC_ITEMHEADER = TC_ITEMHEADER;
7480     TTCITEMHEADER = TC_ITEMHEADER;
7481     PTCITEMHEADER = ^TC_ITEMHEADER;
7482
7483     TC_KEYDOWN = record
7484          hdr : NMHDR;
7485          wVKey : WORD;
7486          flags : UINT;
7487       end;
7488     _TC_KEYDOWN = TC_KEYDOWN;
7489     TTCKEYDOWN = TC_KEYDOWN;
7490     PTCKEYDOWN = ^TC_KEYDOWN;
7491
7492     TEXTRANGE = record
7493          chrg : CHARRANGE;
7494          lpstrText : LPSTR;
7495       end;
7496     _textrange = TEXTRANGE;
7497     Ttextrange = TEXTRANGE;
7498     Ptextrange = ^TEXTRANGE;
7499
7500     TIME_ZONE_INFORMATION = record
7501          Bias : LONG;
7502          StandardName : array[0..31] of WCHAR;
7503          StandardDate : SYSTEMTIME;
7504          StandardBias : LONG;
7505          DaylightName : array[0..31] of WCHAR;
7506          DaylightDate : SYSTEMTIME;
7507          DaylightBias : LONG;
7508       end;
7509     LPTIME_ZONE_INFORMATION = ^TIME_ZONE_INFORMATION;
7510     _TIME_ZONE_INFORMATION = TIME_ZONE_INFORMATION;
7511     TTIMEZONEINFORMATION = TIME_ZONE_INFORMATION;
7512     PTIMEZONEINFORMATION = ^TIME_ZONE_INFORMATION;
7513
7514     TOGGLEKEYS = record
7515          cbSize : DWORD;
7516          dwFlags : DWORD;
7517       end;
7518     tagTOGGLEKEYS = TOGGLEKEYS;
7519     TTOGGLEKEYS = TOGGLEKEYS;
7520     PTOGGLEKEYS = ^TOGGLEKEYS;
7521
7522     TOKEN_SOURCE = record
7523          SourceName : array[0..7] of CHAR;  // 0..(TOKEN_SOURCE_LENGTH-1)
7524          SourceIdentifier : LUID;
7525       end;
7526     _TOKEN_SOURCE = TOKEN_SOURCE;
7527     TTOKENSOURCE = TOKEN_SOURCE;
7528     PTOKENSOURCE = ^TOKEN_SOURCE;
7529
7530     TOKEN_CONTROL = record
7531          TokenId : LUID;
7532          AuthenticationId : LUID;
7533          ModifiedId : LUID;
7534          TokenSource : TOKEN_SOURCE;
7535       end;
7536     _TOKEN_CONTROL = TOKEN_CONTROL;
7537     TTOKENCONTROL = TOKEN_CONTROL;
7538     PTOKENCONTROL = ^TOKEN_CONTROL;
7539
7540     TOKEN_DEFAULT_DACL = record
7541          DefaultDacl : PACL;
7542       end;
7543     _TOKEN_DEFAULT_DACL = TOKEN_DEFAULT_DACL;
7544     TTOKENDEFAULTDACL = TOKEN_DEFAULT_DACL;
7545     PTOKENDEFAULTDACL = ^TOKEN_DEFAULT_DACL;
7546
7547     TOKEN_GROUPS = record
7548          GroupCount : DWORD;
7549          Groups : array[0..(ANYSIZE_ARRAY)-1] of SID_AND_ATTRIBUTES;
7550       end;
7551     PTOKEN_GROUPS = ^TOKEN_GROUPS;
7552     LPTOKEN_GROUPS = ^TOKEN_GROUPS;
7553     _TOKEN_GROUPS = TOKEN_GROUPS;
7554     TTOKENGROUPS = TOKEN_GROUPS;
7555     PTOKENGROUPS = ^TOKEN_GROUPS;
7556
7557     TOKEN_OWNER = record
7558          Owner : PSID;
7559       end;
7560     _TOKEN_OWNER = TOKEN_OWNER;
7561     TTOKENOWNER = TOKEN_OWNER;
7562     PTOKENOWNER = ^TOKEN_OWNER;
7563
7564     TOKEN_PRIMARY_GROUP = record
7565          PrimaryGroup : PSID;
7566       end;
7567     _TOKEN_PRIMARY_GROUP = TOKEN_PRIMARY_GROUP;
7568     TTOKENPRIMARYGROUP = TOKEN_PRIMARY_GROUP;
7569     PTOKENPRIMARYGROUP = ^TOKEN_PRIMARY_GROUP;
7570
7571     TOKEN_PRIVILEGES = packed record
7572          PrivilegeCount : DWORD;
7573          Privileges : array[0..(ANYSIZE_ARRAY)-1] of LUID_AND_ATTRIBUTES;
7574       end;
7575
7576     PTOKEN_PRIVILEGES = ^TOKEN_PRIVILEGES;
7577     LPTOKEN_PRIVILEGES = ^TOKEN_PRIVILEGES;
7578     _TOKEN_PRIVILEGES = TOKEN_PRIVILEGES;
7579     TTOKENPRIVILEGES = TOKEN_PRIVILEGES;
7580     PTOKENPRIVILEGES = ^TOKEN_PRIVILEGES;
7581
7582     TOKEN_STATISTICS = record
7583          TokenId : LUID;
7584          AuthenticationId : LUID;
7585          ExpirationTime : LARGE_INTEGER;
7586          TokenType : TOKEN_TYPE;
7587          ImpersonationLevel : SECURITY_IMPERSONATION_LEVEL;
7588          DynamicCharged : DWORD;
7589          DynamicAvailable : DWORD;
7590          GroupCount : DWORD;
7591          PrivilegeCount : DWORD;
7592          ModifiedId : LUID;
7593       end;
7594     _TOKEN_STATISTICS = TOKEN_STATISTICS;
7595     TTOKENSTATISTICS = TOKEN_STATISTICS;
7596     PTOKENSTATISTICS = ^TOKEN_STATISTICS;
7597
7598     TOKEN_USER = record
7599          User : SID_AND_ATTRIBUTES;
7600       end;
7601     _TOKEN_USER = TOKEN_USER;
7602     TTOKENUSER = TOKEN_USER;
7603     PTOKENUSER = ^TOKEN_USER;
7604
7605     TOOLINFO = record
7606          cbSize : UINT;
7607          uFlags : UINT;
7608          hwnd : HWND;
7609          uId : UINT;
7610          rect : RECT;
7611          hinst : HINST;
7612          lpszText : LPTSTR;
7613          lParam : LPARAM;
7614          lpReserved : LPVOID;
7615       end;
7616     LPTOOLINFO = ^TOOLINFO;
7617     TTOOLINFO = TOOLINFO;
7618     PTOOLINFO = ^TOOLINFO;
7619
7620     TOOLTIPTEXTA = record
7621          hdr : NMHDR;
7622          lpszText : LPSTR;
7623          szText : array[0..79] of AnsiCHAR;
7624          hinst : HINST;
7625          uFlags : UINT;
7626          lParam : LPARAM;
7627       end;
7628     LPTOOLTIPTEXTA = ^TOOLTIPTEXTA;
7629     TTOOLTIPTEXTA  = TOOLTIPTEXTA;
7630     PTOOLTIPTEXTA  = ^TOOLTIPTEXTA;
7631
7632     TOOLTIPTEXTW = record
7633          hdr : NMHDR;
7634          lpszText : LPWSTR;
7635          szText : array[0..79] of WideCHAR;
7636          hinst : HINST;
7637          uFlags : UINT;
7638          lParam : LPARAM;
7639       end;
7640     LPTOOLTIPTEXTW = ^TOOLTIPTEXTW;
7641     TTOOLTIPTEXTW  = TOOLTIPTEXTW;
7642     PTOOLTIPTEXTW  = ^TOOLTIPTEXTW;
7643
7644     {$ifdef Unicode}
7645     LPTOOLTIPTEXT  = ^TOOLTIPTEXTW;
7646     TOOLTIPTEXT    = TOOLTIPTEXTW;
7647     TTOOLTIPTEXT   = TOOLTIPTEXTW;
7648     PTOOLTIPTEXT   = ^TOOLTIPTEXTW;
7649     {$else}
7650     LPTOOLTIPTEXT  = ^TOOLTIPTEXTA;
7651     TOOLTIPTEXT    = TOOLTIPTEXTA;
7652     TTOOLTIPTEXT   = TOOLTIPTEXTA;
7653     PTOOLTIPTEXT   = ^TOOLTIPTEXTA;
7654     {$endif}
7655
7656     TPMPARAMS = record
7657          cbSize : UINT;
7658          rcExclude : RECT;
7659       end;
7660     LPTPMPARAMS = ^TPMPARAMS;
7661     tagTPMPARAMS = TPMPARAMS;
7662     TTPMPARAMS = TPMPARAMS;
7663     PTPMPARAMS = ^TPMPARAMS;
7664
7665     TRANSMIT_FILE_BUFFERS = record
7666          Head : PVOID;
7667          HeadLength : DWORD;
7668          Tail : PVOID;
7669          TailLength : DWORD;
7670       end;
7671     _TRANSMIT_FILE_BUFFERS = TRANSMIT_FILE_BUFFERS;
7672     TTRANSMITFILEBUFFERS = TRANSMIT_FILE_BUFFERS;
7673     PTRANSMITFILEBUFFERS = ^TRANSMIT_FILE_BUFFERS;
7674
7675     TTHITTESTINFO = record
7676          hwnd : HWND;
7677          pt : POINT;
7678          ti : TOOLINFO;
7679       end;
7680     LPHITTESTINFO = ^TTHITTESTINFO;
7681     _TT_HITTESTINFO = TTHITTESTINFO;
7682     TTTHITTESTINFO = TTHITTESTINFO;
7683     PTTHITTESTINFO = ^TTHITTESTINFO;
7684
7685     TTPOLYCURVE = record
7686          wType : WORD;
7687          cpfx : WORD;
7688          apfx : array[0..0] of POINTFX;
7689       end;
7690     LPTTPOLYCURVE = ^TTPOLYCURVE;
7691     tagTTPOLYCURVE = TTPOLYCURVE;
7692     TTTPOLYCURVE = TTPOLYCURVE;
7693     PTTPOLYCURVE = ^TTPOLYCURVE;
7694
7695     TTPOLYGONHEADER = record
7696          cb : DWORD;
7697          dwType : DWORD;
7698          pfxStart : POINTFX;
7699       end;
7700     LPTTPOLYGONHEADER = ^TTPOLYGONHEADER;
7701     _TTPOLYGONHEADER = TTPOLYGONHEADER;
7702     TTTPOLYGONHEADER = TTPOLYGONHEADER;
7703     PTTPOLYGONHEADER = ^TTPOLYGONHEADER;
7704
7705     TV_DISPINFO = record
7706          hdr : NMHDR;
7707          item : TV_ITEM;
7708       end;
7709     _TV_DISPINFO = TV_DISPINFO;
7710     TTVDISPINFO = TV_DISPINFO;
7711     PTVDISPINFO = ^TV_DISPINFO;
7712
7713     TV_HITTESTINFO = record
7714          pt : POINT;
7715          flags : UINT;
7716          hItem : HTREEITEM;
7717       end;
7718     LPTV_HITTESTINFO = ^TV_HITTESTINFO;
7719     _TVHITTESTINFO = TV_HITTESTINFO;
7720     TTVHITTESTINFO = TV_HITTESTINFO;
7721     PTVHITTESTINFO = ^TV_HITTESTINFO;
7722
7723     TVITEMEX = record
7724          mask : UINT;
7725          hItem : HTREEITEM;
7726          state : UINT;
7727          stateMask : UINT;
7728          pszText : LPTSTR;
7729          cchTextMax : longint;
7730          iImage : longint;
7731          iSelectedImage : longint;
7732          cChildren : longint;
7733          lParam : LPARAM;
7734          iIntegral : longint;
7735       end;
7736
7737     TV_INSERTSTRUCT = record
7738          hParent : HTREEITEM;
7739          hInsertAfter : HTREEITEM;
7740          case longint of
7741          0 : (item : TV_ITEM;);
7742          1 : (itemex : TVITEMEX;);
7743       end;
7744     LPTV_INSERTSTRUCT = ^TV_INSERTSTRUCT;
7745     _TV_INSERTSTRUCT = TV_INSERTSTRUCT;
7746     TTVINSERTSTRUCT = TV_INSERTSTRUCT;
7747     PTVINSERTSTRUCT = ^TV_INSERTSTRUCT;
7748
7749     TV_KEYDOWN = record
7750          hdr : NMHDR;
7751          wVKey : WORD;
7752          flags : UINT;
7753       end;
7754     _TV_KEYDOWN = TV_KEYDOWN;
7755     TTVKEYDOWN = TV_KEYDOWN;
7756     PTVKEYDOWN = ^TV_KEYDOWN;
7757
7758     TV_SORTCB = record
7759          hParent : HTREEITEM;
7760          lpfnCompare : PFNTVCOMPARE;
7761          lParam : LPARAM;
7762       end;
7763     LPTV_SORTCB = ^TV_SORTCB;
7764     _TV_SORTCB = TV_SORTCB;
7765     TTVSORTCB = TV_SORTCB;
7766     PTVSORTCB = ^TV_SORTCB;
7767
7768     UDACCEL = record
7769          nSec : UINT;
7770          nInc : UINT;
7771       end;
7772     TUDACCEL = UDACCEL;
7773     PUDACCEL = ^UDACCEL;
7774
7775
7776     UNIVERSAL_NAME_INFO = record
7777          lpUniversalName : LPTSTR;
7778       end;
7779     _UNIVERSAL_NAME_INFO = UNIVERSAL_NAME_INFO;
7780     TUNIVERSALNAMEINFO = UNIVERSAL_NAME_INFO;
7781     PUNIVERSALNAMEINFO = ^UNIVERSAL_NAME_INFO;
7782
7783     USEROBJECTFLAGS = record
7784          fInherit : WINBOOL;
7785          fReserved : WINBOOL;
7786          dwFlags : DWORD;
7787       end;
7788     tagUSEROBJECTFLAGS = USEROBJECTFLAGS;
7789     TUSEROBJECTFLAGS = USEROBJECTFLAGS;
7790     PUSEROBJECTFLAGS = ^USEROBJECTFLAGS;
7791
7792     VALENTA = record
7793          ve_valuename : LPSTR;
7794          ve_valuelen : DWORD;
7795          ve_valueptr : DWORD_PTR;
7796          ve_type : DWORD;
7797       end;
7798     TVALENTA = VALENTA;
7799     PVALENTA = ^VALENTA;
7800
7801     VALENTW = record
7802          ve_valuename : LPWSTR;
7803          ve_valuelen : DWORD;
7804          ve_valueptr : DWORD_PTR;
7805          ve_type : DWORD;
7806       end;
7807     TVALENTW = VALENTW;
7808     PVALENTW = ^VALENTW;
7809
7810     {$ifdef Unicode}
7811     VALENT  = VALENTW;
7812     TVALENT = VALENTW;
7813     PVALENT = ^VALENTW;
7814     {$else}
7815     VALENT  = VALENTA;
7816     TVALENT = VALENTA;
7817     PVALENT = ^VALENTA;
7818     {$endif}
7819
7820     value_ent = VALENT;
7821     Tvalue_ent = VALENT;
7822     Pvalue_ent = ^VALENT;
7823
7824     VERIFY_INFORMATION = record
7825          StartingOffset : LARGE_INTEGER;
7826          Length : DWORD;
7827       end;
7828     _VERIFY_INFORMATION = VERIFY_INFORMATION;
7829     TVERIFYINFORMATION = VERIFY_INFORMATION;
7830     PVERIFYINFORMATION = ^VERIFY_INFORMATION;
7831
7832     VS_FIXEDFILEINFO = record
7833          dwSignature : DWORD;
7834          dwStrucVersion : DWORD;
7835          dwFileVersionMS : DWORD;
7836          dwFileVersionLS : DWORD;
7837          dwProductVersionMS : DWORD;
7838          dwProductVersionLS : DWORD;
7839          dwFileFlagsMask : DWORD;
7840          dwFileFlags : DWORD;
7841          dwFileOS : DWORD;
7842          dwFileType : DWORD;
7843          dwFileSubtype : DWORD;
7844          dwFileDateMS : DWORD;
7845          dwFileDateLS : DWORD;
7846       end;
7847     _VS_FIXEDFILEINFO = VS_FIXEDFILEINFO;
7848     TVSFIXEDFILEINFO = VS_FIXEDFILEINFO;
7849     PVSFIXEDFILEINFO = ^VS_FIXEDFILEINFO;
7850
7851     WIN32_FIND_DATAA = record
7852          dwFileAttributes : DWORD;
7853          ftCreationTime : FILETIME;
7854          ftLastAccessTime : FILETIME;
7855          ftLastWriteTime : FILETIME;
7856          nFileSizeHigh : DWORD;
7857          nFileSizeLow : DWORD;
7858          dwReserved0 : DWORD;
7859          dwReserved1 : DWORD;
7860          cFileName : array[0..(MAX_PATH)-1] of AnsiCHAR;
7861          cAlternateFileName : array[0..13] of AnsiCHAR;
7862       end;
7863     LPWIN32_FIND_DATAA = ^WIN32_FIND_DATAA;
7864     PWIN32_FIND_DATAA = ^WIN32_FIND_DATAA;
7865     _WIN32_FIND_DATAA = WIN32_FIND_DATAA;
7866     TWIN32FINDDATAA = WIN32_FIND_DATAA;
7867     WIN32FINDDATAA = WIN32_FIND_DATAA;
7868     PWIN32FINDDATAA = ^WIN32_FIND_DATAA;
7869
7870     WIN32_FIND_DATAW = record
7871          dwFileAttributes : DWORD;
7872          ftCreationTime : FILETIME;
7873          ftLastAccessTime : FILETIME;
7874          ftLastWriteTime : FILETIME;
7875          nFileSizeHigh : DWORD;
7876          nFileSizeLow : DWORD;
7877          dwReserved0 : DWORD;
7878          dwReserved1 : DWORD;
7879          cFileName : array[0..(MAX_PATH)-1] of WCHAR;
7880          cAlternateFileName : array[0..13] of WCHAR;
7881       end;
7882     LPWIN32_FIND_DATAW = ^WIN32_FIND_DATAW;
7883     PWIN32_FIND_DATAW = ^WIN32_FIND_DATAW;
7884     _WIN32_FIND_DATAW = WIN32_FIND_DATAW;
7885     TWIN32FINDDATAW = WIN32_FIND_DATAW;
7886     PWIN32FINDDATAW = ^WIN32_FIND_DATAW;
7887
7888     {$ifdef Unicode}
7889        LPWIN32_FIND_DATA = PWIN32_FIND_DATAW;
7890        PWIN32_FIND_DATA  = PWIN32_FIND_DATAW;
7891        _WIN32_FIND_DATA  = WIN32_FIND_DATAW;
7892        WIN32_FIND_DATA   = WIN32_FIND_DATAW;
7893        TWIN32FINDDATA    = WIN32_FIND_DATAW;
7894        WIN32FINDDATA     = WIN32_FIND_DATAW;
7895        PWIN32FINDDATA    = PWIN32_FIND_DATAW;
7896     {$else}
7897        LPWIN32_FIND_DATA = PWIN32_FIND_DATAA;
7898        PWIN32_FIND_DATA  = PWIN32_FIND_DATAA;
7899        _WIN32_FIND_DATA  = WIN32_FIND_DATAA;
7900        WIN32_FIND_DATA   = WIN32_FIND_DATAA;
7901        TWIN32FINDDATA    = WIN32_FIND_DATAA;
7902        WIN32FINDDATA     = WIN32_FIND_DATAA;
7903        PWIN32FINDDATA    = PWIN32_FIND_DATAA;
7904     {$endif}
7905     WIN32_STREAM_ID = record
7906          dwStreamId : DWORD;
7907          dwStreamAttributes : DWORD;
7908          Size : LARGE_INTEGER;
7909          dwStreamNameSize : DWORD;
7910          cStreamName : array[0..0] of WCHAR;  // really array[0..(dwStreamNameSize)] of WCHAR
7911       end;
7912     _WIN32_STREAM_ID = WIN32_STREAM_ID;
7913     TWIN32STREAMID = WIN32_STREAM_ID;
7914     PWIN32STREAMID = ^WIN32_STREAM_ID;
7915
7916     WINDOWPLACEMENT = record
7917          length : UINT;
7918          flags : UINT;
7919          showCmd : UINT;
7920          ptMinPosition : POINT;
7921          ptMaxPosition : POINT;
7922          rcNormalPosition : RECT;
7923       end;
7924     _WINDOWPLACEMENT = WINDOWPLACEMENT;
7925     TWINDOWPLACEMENT = WINDOWPLACEMENT;
7926     PWINDOWPLACEMENT = ^WINDOWPLACEMENT;
7927
7928     WNDCLASSA = record
7929          style : UINT;
7930          lpfnWndProc : WNDPROC;
7931          cbClsExtra : longint;
7932          cbWndExtra : longint;
7933          hInstance : HINST;
7934          hIcon : HICON;
7935          hCursor : HCURSOR;
7936          hbrBackground : HBRUSH;
7937          lpszMenuName : LPCSTR;
7938          lpszClassName : LPCSTR;
7939       end;
7940     LPWNDCLASSA = ^WNDCLASSA;
7941     _WNDCLASSA = WNDCLASSA;
7942     TWNDCLASSA = WNDCLASSA;
7943     PWNDCLASSA = ^WNDCLASSA;
7944
7945     WNDCLASSW = record
7946          style : UINT;
7947          lpfnWndProc : WNDPROC;
7948          cbClsExtra : longint;
7949          cbWndExtra : longint;
7950          hInstance : HINST;
7951          hIcon : HICON;
7952          hCursor : HCURSOR;
7953          hbrBackground : HBRUSH;
7954          lpszMenuName : LPCWSTR;
7955          lpszClassName : LPCWSTR;
7956       end;
7957     LPWNDCLASSW = ^WNDCLASSW;
7958     _WNDCLASSW  = WNDCLASSW;
7959     TWNDCLASSW  = WNDCLASSW;
7960     PWNDCLASSW  = ^WNDCLASSW;
7961     {$ifdef UNICODE}
7962     LPWNDCLASS  = LPWNDCLASSW;
7963     _WNDCLASS   = _WNDCLASSW;
7964     TWNDCLASS   = TWNDCLASSW;
7965     PWNDCLASS   = PWNDCLASSW;
7966     WNDCLASS    = WNDCLASSW;
7967     {$else}
7968     LPWNDCLASS  = LPWNDCLASSA;
7969     _WNDCLASS   = _WNDCLASSA;
7970     TWNDCLASS   = TWNDCLASSA;
7971     PWNDCLASS   = PWNDCLASSA;
7972     WNDCLASS    = WNDCLASSA;
7973     {$endif}
7974
7975     WNDCLASSEXA = record
7976          cbSize : UINT;
7977          style : UINT;
7978          lpfnWndProc : WNDPROC;
7979          cbClsExtra : longint;
7980          cbWndExtra : longint;
7981          hInstance : HINST;
7982          hIcon : HICON;
7983          hCursor : HCURSOR;
7984          hbrBackground : HBRUSH;
7985          lpszMenuName : LPCSTR;
7986          lpszClassName : LPCSTR;
7987          hIconSm : HANDLE;
7988       end;
7989     LPWNDCLASSEXA = ^WNDCLASSEXA;
7990     _WNDCLASSEXA = WNDCLASSEXA;
7991     TWNDCLASSEXA = WNDCLASSEXA;
7992     PWNDCLASSEXA = ^WNDCLASSEXA;
7993
7994     WNDCLASSEXW = record
7995          cbSize : UINT;
7996          style : UINT;
7997          lpfnWndProc : WNDPROC;
7998          cbClsExtra : longint;
7999          cbWndExtra : longint;
8000          hInstance : HINST;
8001          hIcon : HICON;
8002          hCursor : HCURSOR;
8003          hbrBackground : HBRUSH;
8004          lpszMenuName : LPCWSTR;
8005          lpszClassName : LPCWSTR;
8006          hIconSm : HANDLE;
8007       end;
8008     LPWNDCLASSEXW = ^WNDCLASSEXW;
8009     _WNDCLASSEXW  = WNDCLASSEXW;
8010     TWNDCLASSEXW  = WNDCLASSEXW;
8011     PWNDCLASSEXW  = ^WNDCLASSEXW;
8012
8013     {$ifdef UNICODE}
8014     LPWNDClassEx  = LPWNDClassExW;
8015     _WNDClassEx   = _WNDClassExW;
8016     TWNDClassEx   = TWNDClassExW;
8017     PWNDClassEx   = PWNDClassExW;
8018     WNDClassEx    = WNDClassExW;
8019     {$ELSE}
8020     LPWNDClassEx  = LPWNDClassExA;
8021     _WNDClassEx   = _WNDClassExA;
8022     TWNDClassEx   = TWNDClassExA;
8023     PWNDClassEx   = PWNDClassExA;
8024     WNDClassEx    = WNDClassExA;
8025     {$endif}
8026
8027     CONNECTDLGSTRUCTA = record
8028          cbStructure : DWORD;
8029          hwndOwner   : HWND;
8030          lpConnRes   : LPNETRESOURCEA;
8031          dwFlags     : DWORD;
8032          dwDevNum    : DWORD;
8033       end;
8034     LPCONNECTDLGSTRUCTA = ^CONNECTDLGSTRUCTA;
8035     _CONNECTDLGSTRUCTA  = CONNECTDLGSTRUCTA;
8036     TCONNECTDLGSTRUCTA  = CONNECTDLGSTRUCTA;
8037     PCONNECTDLGSTRUCTA  = ^CONNECTDLGSTRUCTA;
8038
8039     CONNECTDLGSTRUCTW = record
8040          cbStructure : DWORD;
8041          hwndOwner   : HWND;
8042          lpConnRes   : LPNETRESOURCEW;
8043          dwFlags     : DWORD;
8044          dwDevNum    : DWORD;
8045       end;
8046     LPCONNECTDLGSTRUCTW = ^CONNECTDLGSTRUCTW;
8047     _CONNECTDLGSTRUCTW = CONNECTDLGSTRUCTW;
8048     TCONNECTDLGSTRUCTW = CONNECTDLGSTRUCTW;
8049     PCONNECTDLGSTRUCTW = ^CONNECTDLGSTRUCTW;
8050
8051     {$ifdef Unicode}
8052     LPCONNECTDLGSTRUCT = ^CONNECTDLGSTRUCTW;
8053     _CONNECTDLGSTRUCT  = CONNECTDLGSTRUCTW;
8054     CONNECTDLGSTRUCT   = CONNECTDLGSTRUCTW;
8055     TCONNECTDLGSTRUCT  = CONNECTDLGSTRUCTW;
8056     PCONNECTDLGSTRUCT  = ^CONNECTDLGSTRUCTW;
8057     {$else}
8058     LPCONNECTDLGSTRUCT = ^CONNECTDLGSTRUCTA;
8059     _CONNECTDLGSTRUCT  = CONNECTDLGSTRUCTA;
8060     CONNECTDLGSTRUCT   = CONNECTDLGSTRUCTA;
8061     TCONNECTDLGSTRUCT  = CONNECTDLGSTRUCTA;
8062     PCONNECTDLGSTRUCT  = ^CONNECTDLGSTRUCTA;
8063     {$endif}
8064
8065     DISCDLGSTRUCTA = record
8066          cbStructure : DWORD;
8067          hwndOwner : HWND;
8068          lpLocalName : LPSTR;
8069          lpRemoteName : LPSTR;
8070          dwFlags : DWORD;
8071       end;
8072     LPDISCDLGSTRUCTA = ^DISCDLGSTRUCTA;
8073     _DISCDLGSTRUCTA  = DISCDLGSTRUCTA;
8074     TDISCDLGSTRUCTA  = DISCDLGSTRUCTA;
8075     PDISCDLGSTRUCTA  = ^DISCDLGSTRUCTA;
8076
8077     DISCDLGSTRUCTW = record
8078          cbStructure : DWORD;
8079          hwndOwner : HWND;
8080          lpLocalName : LPWSTR;
8081          lpRemoteName : LPWSTR;
8082          dwFlags : DWORD;
8083       end;
8084     LPDISCDLGSTRUCTW = ^DISCDLGSTRUCTW;
8085     _DISCDLGSTRUCTW  = DISCDLGSTRUCTW;
8086     TDISCDLGSTRUCTW  = DISCDLGSTRUCTW;
8087     PDISCDLGSTRUCTW  = ^DISCDLGSTRUCTW;
8088     {$ifdef Unicode}
8089     LPDISCDLGSTRUCT = ^DISCDLGSTRUCTW;
8090     _DISCDLGSTRUCT  = DISCDLGSTRUCTW;
8091     TDISCDLGSTRUCT  = DISCDLGSTRUCTW;
8092     DISCDLGSTRUCT   = DISCDLGSTRUCTW;
8093     PDISCDLGSTRUCT  = ^DISCDLGSTRUCTW;
8094     {$else}
8095     LPDISCDLGSTRUCT = ^DISCDLGSTRUCTA;
8096     _DISCDLGSTRUCT  = DISCDLGSTRUCTA;
8097     TDISCDLGSTRUCT  = DISCDLGSTRUCTA;
8098     DISCDLGSTRUCT   = DISCDLGSTRUCTA;
8099     PDISCDLGSTRUCT  = ^DISCDLGSTRUCTA;
8100     {$endif}
8101
8102     NETINFOSTRUCT = record
8103          cbStructure : DWORD;
8104          dwProviderVersion : DWORD;
8105          dwStatus : DWORD;
8106          dwCharacteristics : DWORD;
8107          dwHandle : ULONG_PTR;
8108          wNetType : WORD;
8109          dwPrinters : DWORD;
8110          dwDrives : DWORD;
8111       end;
8112     LPNETINFOSTRUCT = ^NETINFOSTRUCT;
8113     _NETINFOSTRUCT = NETINFOSTRUCT;
8114     TNETINFOSTRUCT = NETINFOSTRUCT;
8115     PNETINFOSTRUCT = ^NETINFOSTRUCT;
8116
8117     NETCONNECTINFOSTRUCT = record
8118          cbStructure : DWORD;
8119          dwFlags : DWORD;
8120          dwSpeed : DWORD;
8121          dwDelay : DWORD;
8122          dwOptDataSize : DWORD;
8123       end;
8124     LPNETCONNECTINFOSTRUCT = ^NETCONNECTINFOSTRUCT;
8125     _NETCONNECTINFOSTRUCT = NETCONNECTINFOSTRUCT;
8126     TNETCONNECTINFOSTRUCT = NETCONNECTINFOSTRUCT;
8127     PNETCONNECTINFOSTRUCT = ^NETCONNECTINFOSTRUCT;
8128
8129     ENUMMETAFILEPROC = function (_para1:HDC; _para2:LPHANDLETABLE; _para3:LPMETARECORD; _para4:longint; _para5:LPARAM):longint;stdcall;
8130
8131     ENHMETAFILEPROC = function (_para1:HDC; _para2:LPHANDLETABLE; _para3:LPENHMETARECORD; _para4:longint; _para5:LPARAM):longint;stdcall;
8132
8133     ENUMFONTSPROC = function (_para1:LPLOGFONT; _para2:LPTEXTMETRIC; _para3:DWORD; _para4:LPARAM):longint;stdcall;
8134     ENUMFONTSPROCA= function (_para1:LPLOGFONTA; _para2:LPTEXTMETRICA; _para3:DWORD; _para4:LPARAM):longint;stdcall;
8135     ENUMFONTSPROCW= function (_para1:LPLOGFONTW; _para2:LPTEXTMETRICW; _para3:DWORD; _para4:LPARAM):longint;stdcall;
8136     ENUMFONTSEXPROC = function (_para1:PENUMLOGFONTEX;  _para2:LPNEWTEXTMETRICEX; _para3:DWORD; _para4:LPARAM):longint;stdcall;
8137     ENUMFONTSEXPROCA= function (_para1:PENUMLOGFONTEXA; _para2:LPNEWTEXTMETRICEXA; _para3:DWORD; _para4:LPARAM):longint;stdcall;
8138     ENUMFONTSEXPROCW= function (_para1:PENUMLOGFONTEXW; _para2:LPNEWTEXTMETRICEXW; _para3:DWORD; _para4:LPARAM):longint;stdcall;
8139
8140     FONTENUMPROC   = function (var _para1:ENUMLOGFONT; var _para2:NEWTEXTMETRIC; _para3:longint; _para4:LPARAM):longint;stdcall;
8141     FONTENUMPROCA  = function (var _para1:ENUMLOGFONTA; var _para2:NEWTEXTMETRICA; _para3:longint; _para4:LPARAM):longint;stdcall;
8142     FONTENUMPROCW  = function (var _para1:ENUMLOGFONTW; var _para2:NEWTEXTMETRICW; _para3:longint; _para4:LPARAM):longint;stdcall;
8143     FONTENUMEXPROC = function (var _para1:ENUMLOGFONTEX;var _para2:NEWTEXTMETRICEX; _para3:longint; _para4:LPARAM):longint;stdcall;
8144     FONTENUMEXPROCA= function (var _para1:ENUMLOGFONTEXA;var _para2:NEWTEXTMETRICEXA; _para3:longint; _para4:LPARAM):longint;stdcall;
8145     FONTENUMEXPROCW= function (var _para1:ENUMLOGFONTEXW;var _para2:NEWTEXTMETRICEXW; _para3:longint; _para4:LPARAM):longint;stdcall;
8146
8147     LPOVERLAPPED_COMPLETION_ROUTINE = procedure (_para1:DWORD; _para2:DWORD; _para3:LPOVERLAPPED);stdcall;
8148
8149     { Structures for the extensions to OpenGL }
8150
8151     POINTFLOAT = record
8152          x : Single;
8153          y : Single;
8154       end;
8155     _POINTFLOAT = POINTFLOAT;
8156     TPOINTFLOAT = POINTFLOAT;
8157     PPOINTFLOAT = ^POINTFLOAT;
8158
8159     GLYPHMETRICSFLOAT = record
8160          gmfBlackBoxX : Single;
8161          gmfBlackBoxY : Single;
8162          gmfptGlyphOrigin : POINTFLOAT;
8163          gmfCellIncX : Single;
8164          gmfCellIncY : Single;
8165       end;
8166     LPGLYPHMETRICSFLOAT = ^GLYPHMETRICSFLOAT;
8167     _GLYPHMETRICSFLOAT = GLYPHMETRICSFLOAT;
8168     TGLYPHMETRICSFLOAT = GLYPHMETRICSFLOAT;
8169     PGLYPHMETRICSFLOAT = ^GLYPHMETRICSFLOAT;
8170
8171     LAYERPLANEDESCRIPTOR = record
8172          nSize : WORD;
8173          nVersion : WORD;
8174          dwFlags : DWORD;
8175          iPixelType : BYTE;
8176          cColorBits : BYTE;
8177          cRedBits : BYTE;
8178          cRedShift : BYTE;
8179          cGreenBits : BYTE;
8180          cGreenShift : BYTE;
8181          cBlueBits : BYTE;
8182          cBlueShift : BYTE;
8183          cAlphaBits : BYTE;
8184          cAlphaShift : BYTE;
8185          cAccumBits : BYTE;
8186          cAccumRedBits : BYTE;
8187          cAccumGreenBits : BYTE;
8188          cAccumBlueBits : BYTE;
8189          cAccumAlphaBits : BYTE;
8190          cDepthBits : BYTE;
8191          cStencilBits : BYTE;
8192          cAuxBuffers : BYTE;
8193          iLayerPlane : BYTE;
8194          bReserved : BYTE;
8195          crTransparent : COLORREF;
8196       end;
8197     LPLAYERPLANEDESCRIPTOR = ^LAYERPLANEDESCRIPTOR;
8198     tagLAYERPLANEDESCRIPTOR = LAYERPLANEDESCRIPTOR;
8199     TLAYERPLANEDESCRIPTOR = LAYERPLANEDESCRIPTOR;
8200     PLAYERPLANEDESCRIPTOR = ^LAYERPLANEDESCRIPTOR;
8201
8202     PIXELFORMATDESCRIPTOR = record
8203          nSize : WORD;
8204          nVersion : WORD;
8205          dwFlags : DWORD;
8206          iPixelType : BYTE;
8207          cColorBits : BYTE;
8208          cRedBits : BYTE;
8209          cRedShift : BYTE;
8210          cGreenBits : BYTE;
8211          cGreenShift : BYTE;
8212          cBlueBits : BYTE;
8213          cBlueShift : BYTE;
8214          cAlphaBits : BYTE;
8215          cAlphaShift : BYTE;
8216          cAccumBits : BYTE;
8217          cAccumRedBits : BYTE;
8218          cAccumGreenBits : BYTE;
8219          cAccumBlueBits : BYTE;
8220          cAccumAlphaBits : BYTE;
8221          cDepthBits : BYTE;
8222          cStencilBits : BYTE;
8223          cAuxBuffers : BYTE;
8224          iLayerType : BYTE;
8225          bReserved : BYTE;
8226          dwLayerMask : DWORD;
8227          dwVisibleMask : DWORD;
8228          dwDamageMask : DWORD;
8229       end;
8230     LPPIXELFORMATDESCRIPTOR = ^PIXELFORMATDESCRIPTOR;
8231     tagPIXELFORMATDESCRIPTOR = PIXELFORMATDESCRIPTOR;
8232     TPIXELFORMATDESCRIPTOR = PIXELFORMATDESCRIPTOR;
8233     PPIXELFORMATDESCRIPTOR = ^PIXELFORMATDESCRIPTOR;
8234
8235     USER_INFO_2 = record
8236          usri2_name : LPWSTR;
8237          usri2_password : LPWSTR;
8238          usri2_password_age : DWORD;
8239          usri2_priv : DWORD;
8240          usri2_home_dir : LPWSTR;
8241          usri2_comment : LPWSTR;
8242          usri2_flags : DWORD;
8243          usri2_script_path : LPWSTR;
8244          usri2_auth_flags : DWORD;
8245          usri2_full_name : LPWSTR;
8246          usri2_usr_comment : LPWSTR;
8247          usri2_parms : LPWSTR;
8248          usri2_workstations : LPWSTR;
8249          usri2_last_logon : DWORD;
8250          usri2_last_logoff : DWORD;
8251          usri2_acct_expires : DWORD;
8252          usri2_max_storage : DWORD;
8253          usri2_units_per_week : DWORD;
8254          usri2_logon_hours : PBYTE;
8255          usri2_bad_pw_count : DWORD;
8256          usri2_num_logons : DWORD;
8257          usri2_logon_server : LPWSTR;
8258          usri2_country_code : DWORD;
8259          usri2_code_page : DWORD;
8260       end;
8261     PUSER_INFO_2 = ^USER_INFO_2;
8262     LPUSER_INFO_2 = ^USER_INFO_2;
8263     TUSERINFO2 = USER_INFO_2;
8264     PUSERINFO2 = ^USER_INFO_2;
8265
8266     USER_INFO_0 = record
8267          usri0_name : LPWSTR;
8268       end;
8269     PUSER_INFO_0 = ^USER_INFO_0;
8270     LPUSER_INFO_0 = ^USER_INFO_0;
8271     TUSERINFO0 = USER_INFO_0;
8272     PUSERINFO0 = ^USER_INFO_0;
8273
8274     USER_INFO_3 = record
8275          usri3_name : LPWSTR;
8276          usri3_password : LPWSTR;
8277          usri3_password_age : DWORD;
8278          usri3_priv : DWORD;
8279          usri3_home_dir : LPWSTR;
8280          usri3_comment : LPWSTR;
8281          usri3_flags : DWORD;
8282          usri3_script_path : LPWSTR;
8283          usri3_auth_flags : DWORD;
8284          usri3_full_name : LPWSTR;
8285          usri3_usr_comment : LPWSTR;
8286          usri3_parms : LPWSTR;
8287          usri3_workstations : LPWSTR;
8288          usri3_last_logon : DWORD;
8289          usri3_last_logoff : DWORD;
8290          usri3_acct_expires : DWORD;
8291          usri3_max_storage : DWORD;
8292          usri3_units_per_week : DWORD;
8293          usri3_logon_hours : PBYTE;
8294          usri3_bad_pw_count : DWORD;
8295          usri3_num_logons : DWORD;
8296          usri3_logon_server : LPWSTR;
8297          usri3_country_code : DWORD;
8298          usri3_code_page : DWORD;
8299          usri3_user_id : DWORD;
8300          usri3_primary_group_id : DWORD;
8301          usri3_profile : LPWSTR;
8302          usri3_home_dir_drive : LPWSTR;
8303          usri3_password_expired : DWORD;
8304       end;
8305     PUSER_INFO_3 = ^USER_INFO_3;
8306     LPUSER_INFO_3 = ^USER_INFO_3;
8307     TUSERINFO3 = USER_INFO_3;
8308     PUSERINFO3 = ^USER_INFO_3;
8309
8310     GROUP_INFO_2 = record
8311          grpi2_name : LPWSTR;
8312          grpi2_comment : LPWSTR;
8313          grpi2_group_id : DWORD;
8314          grpi2_attributes : DWORD;
8315       end;
8316     PGROUP_INFO_2 = ^GROUP_INFO_2;
8317     TGROUPINFO2 = GROUP_INFO_2;
8318     PGROUPINFO2 = ^GROUP_INFO_2;
8319
8320     LOCALGROUP_INFO_0 = record
8321          lgrpi0_name : LPWSTR;
8322       end;
8323     PLOCALGROUP_INFO_0 = ^LOCALGROUP_INFO_0;
8324     LPLOCALGROUP_INFO_0 = ^LOCALGROUP_INFO_0;
8325     TLOCALGROUPINFO0 = LOCALGROUP_INFO_0;
8326     PLOCALGROUPINFO0 = ^LOCALGROUP_INFO_0;
8327
8328  { PE executable header.   }
8329  { Magic number, 0x5a4d  }
8330  { Bytes on last page of file, 0x90  }
8331  { Pages in file, 0x3  }
8332  { Relocations, 0x0  }
8333  { Size of header in paragraphs, 0x4  }
8334  { Minimum extra paragraphs needed, 0x0  }
8335  { Maximum extra paragraphs needed, 0xFFFF  }
8336  { Initial (relative) SS value, 0x0  }
8337  { Initial SP value, 0xb8  }
8338  { Checksum, 0x0  }
8339  { Initial IP value, 0x0  }
8340  { Initial (relative) CS value, 0x0  }
8341  { File address of relocation table, 0x40  }
8342  { Overlay number, 0x0  }
8343  { Reserved words, all 0x0  }
8344  { OEM identifier (for e_oeminfo), 0x0  }
8345  { OEM information; e_oemid specific, 0x0  }
8346  { Reserved words, all 0x0  }
8347  { File address of new exe header, 0x80  }
8348  { We leave out the next two fields, since they aren't in the header file }
8349  { DWORD dos_message[16];   text which always follows dos header  }
8350  { DWORD nt_signature;      required NT signature, 0x4550  }
8351
8352     IMAGE_DOS_HEADER = record
8353          e_magic : WORD;
8354          e_cblp : WORD;
8355          e_cp : WORD;
8356          e_crlc : WORD;
8357          e_cparhdr : WORD;
8358          e_minalloc : WORD;
8359          e_maxalloc : WORD;
8360          e_ss : WORD;
8361          e_sp : WORD;
8362          e_csum : WORD;
8363          e_ip : WORD;
8364          e_cs : WORD;
8365          e_lfarlc : WORD;
8366          e_ovno : WORD;
8367          e_res : array[0..3] of WORD;
8368          e_oemid : WORD;
8369          e_oeminfo : WORD;
8370          e_res2 : array[0..9] of WORD;
8371          case boolean of
8372             true : (e_lfanew : LONG);
8373             false: (_lfanew : LONG); // delphi naming
8374       end;
8375     PIMAGE_DOS_HEADER = ^IMAGE_DOS_HEADER;
8376     TIMAGE_DOS_HEADER = IMAGE_DOS_HEADER;
8377     TIMAGEDOSHEADER = IMAGE_DOS_HEADER;
8378     PIMAGEDOSHEADER = ^IMAGE_DOS_HEADER;
8379
8380      _NOTIFYICONDATAA = record
8381          cbSize: DWORD;
8382          Wnd: HWND;
8383          uID: UINT;
8384          uFlags: UINT;
8385          uCallbackMessage: UINT;
8386          hIcon: HICON;
8387          szTip: array [0..127] of AnsiChar;
8388          dwState : DWORD;
8389          dwStateMask : DWORD;
8390          szInfo : array[0..255] of AnsiChar;
8391          case longint of
8392            0 : (uTimeout : UINT;);
8393            1 : (uVersion : UINT;
8394                 szInfoTitle : array[0..63] of AnsiChar;
8395                 dwInfoFlags : DWORD;
8396                 //guidItem : TGUID;     // #if (_WIN32_IE >= 0x600)}
8397                );
8398     end;
8399     TNotifyIconDataA = _NOTIFYICONDATAA;
8400     NOTIFYICONDATAA = _NOTIFYICONDATAA;
8401     PNotifyIconDataA = ^TNotifyIconDataA;
8402
8403     _NOTIFYICONDATAW = record
8404         cbSize: DWORD;
8405         Wnd: HWND;
8406         uID: UINT;
8407         uFlags: UINT;
8408         uCallbackMessage: UINT;
8409         hIcon: HICON;
8410         szTip: array [0..127] of WCHAR;
8411         dwState : DWORD;
8412         dwStateMask : DWORD;
8413         szInfo : array[0..255] of WCHAR;
8414         case longint of
8415           0 : (uTimeout : UINT;);
8416           1 : (uVersion : UINT;
8417                szInfoTitle : array[0..63] of WCHAR;
8418                dwInfoFlags : DWORD;
8419                //guidItem : TGUID;     // #if (_WIN32_IE >= 0x600)}
8420               );
8421     end;
8422     TNotifyIconDataW = _NOTIFYICONDATAW;
8423     NOTIFYICONDATAW = _NOTIFYICONDATAW;
8424     PNotifyIconDataW = ^TNotifyIconDataW;
8425
8426     {$ifdef Unicode}
8427     _NOTIFYICONDATA = _NOTIFYICONDATAW;
8428     TNotifyIconData = TNotifyIconDataW;
8429     NOTIFYICONDATA  = NOTIFYICONDATAW;
8430     PNotifyIconData = PNotifyIconDataW;
8431     {$else}
8432     _NOTIFYICONDATA = _NOTIFYICONDATAA;
8433     TNotifyIconData = TNotifyIconDataA;
8434     NOTIFYICONDATA  = NOTIFYICONDATAA;
8435     PNotifyIconData = PNotifyIconDataA;
8436     {$endif}
8437
8438     TWOHandleArray = array[0..MAXIMUM_WAIT_OBJECTS-1] of HANDLE;
8439     PWOHandleArray = ^TWOHandleArray;
8440     MMRESULT = Longint;
8441
8442type
8443  PWaveFormatEx = ^TWaveFormatEx;
8444  TWaveFormatEx = packed record
8445    wFormatTag: Word;       { format type }
8446    nChannels: Word;        { number of channels (i.e. mono, stereo, etc.) }
8447    nSamplesPerSec: DWORD;  { sample rate }
8448    nAvgBytesPerSec: DWORD; { for buffer estimation }
8449    nBlockAlign: Word;      { block size of data }
8450    wBitsPerSample: Word;   { number of bits per sample of mono data }
8451    cbSize: Word;           { the count in bytes of the size of }
8452  end;
8453
8454  _WIN32_FILE_ATTRIBUTE_DATA = packed record
8455    dwFileAttributes:     DWORD;
8456    ftCreationTime:       FILETIME;
8457    ftLastAccessTime:     FILETIME;
8458    ftLastWriteTime:      FILETIME;
8459    nFileSizeHigh:        DWORD;
8460    nFileSizeLow:         DWORD;
8461    end;
8462  WIN32_FILE_ATTRIBUTE_DATA   = _WIN32_FILE_ATTRIBUTE_DATA ;
8463  LPWIN32_FILE_ATTRIBUTE_DATA = ^_WIN32_FILE_ATTRIBUTE_DATA;
8464  TWIN32FILEATTRIBUTEDATA     = _WIN32_FILE_ATTRIBUTE_DATA ;
8465  PWIN32FILEATTRIBUTEDATA     = ^_WIN32_FILE_ATTRIBUTE_DATA;
8466
8467  // TrackMouseEvent. NT or higher only.
8468  TTrackMouseEvent = Record
8469    cbSize : DWORD;
8470    dwFlags : DWORD;
8471    hwndTrack : HWND;
8472    dwHoverTime : DWORD;
8473  end;
8474  PTrackMouseEvent = ^TTrackMouseEvent;
8475
8476
8477// File header format.
8478//
8479
8480  PIMAGE_FILE_HEADER = ^IMAGE_FILE_HEADER;
8481  _IMAGE_FILE_HEADER = record
8482    Machine: WORD;
8483    NumberOfSections: WORD;
8484    TimeDateStamp: DWORD;
8485    PointerToSymbolTable: DWORD;
8486    NumberOfSymbols: DWORD;
8487    SizeOfOptionalHeader: WORD;
8488    Characteristics: WORD;
8489  end;
8490  IMAGE_FILE_HEADER = _IMAGE_FILE_HEADER;
8491  TImageFileHeader = IMAGE_FILE_HEADER;
8492  PImageFileHeader = PIMAGE_FILE_HEADER;
8493
8494
8495//
8496// Debug Format
8497//
8498
8499  PIMAGE_DEBUG_DIRECTORY = ^IMAGE_DEBUG_DIRECTORY;
8500  _IMAGE_DEBUG_DIRECTORY = record
8501    Characteristics: DWORD;
8502    TimeDateStamp: DWORD;
8503    MajorVersion: Word;
8504    MinorVersion: Word;
8505    Type_: DWORD;
8506    SizeOfData: DWORD;
8507    AddressOfRawData: DWORD;
8508    PointerToRawData: DWORD;
8509  end;
8510  IMAGE_DEBUG_DIRECTORY = _IMAGE_DEBUG_DIRECTORY;
8511  TImageDebugDirectory = IMAGE_DEBUG_DIRECTORY;
8512  PImageDebugDirectory = PIMAGE_DEBUG_DIRECTORY;
8513
8514//
8515// Optional header format.
8516//
8517
8518
8519  PIMAGE_DATA_DIRECTORY = ^IMAGE_DATA_DIRECTORY;
8520  _IMAGE_DATA_DIRECTORY = record
8521    VirtualAddress: DWORD;
8522    Size: DWORD;
8523  end;
8524  IMAGE_DATA_DIRECTORY = _IMAGE_DATA_DIRECTORY;
8525  TIMAGE_DATA_DIRECTORY = _IMAGE_DATA_DIRECTORY;
8526  TImageDataDirectory = IMAGE_DATA_DIRECTORY;
8527  PImageDataDirectory = PIMAGE_DATA_DIRECTORY;
8528
8529const
8530  IMAGE_NUMBEROF_DIRECTORY_ENTRIES = 16;
8531
8532type
8533  PIMAGE_OPTIONAL_HEADER32 = ^IMAGE_OPTIONAL_HEADER32;
8534  _IMAGE_OPTIONAL_HEADER = record
8535    //
8536    // Standard fields.
8537    //
8538    Magic: Word;
8539    MajorLinkerVersion: Byte;
8540    MinorLinkerVersion: Byte;
8541    SizeOfCode: DWORD;
8542    SizeOfInitializedData: DWORD;
8543    SizeOfUninitializedData: DWORD;
8544    AddressOfEntryPoint: DWORD;
8545    BaseOfCode: DWORD;
8546    BaseOfData: DWORD;
8547    //
8548    // NT additional fields.
8549    //
8550    ImageBase: DWORD;
8551    SectionAlignment: DWORD;
8552    FileAlignment: DWORD;
8553    MajorOperatingSystemVersion: Word;
8554    MinorOperatingSystemVersion: Word;
8555    MajorImageVersion: Word;
8556    MinorImageVersion: Word;
8557    MajorSubsystemVersion: Word;
8558    MinorSubsystemVersion: Word;
8559    Win32VersionValue: DWORD;
8560    SizeOfImage: DWORD;
8561    SizeOfHeaders: DWORD;
8562    CheckSum: DWORD;
8563    Subsystem: Word;
8564    DllCharacteristics: Word;
8565    SizeOfStackReserve: DWORD;
8566    SizeOfStackCommit: DWORD;
8567    SizeOfHeapReserve: DWORD;
8568    SizeOfHeapCommit: DWORD;
8569    LoaderFlags: DWORD;
8570    NumberOfRvaAndSizes: DWORD;
8571    DataDirectory: array [0..IMAGE_NUMBEROF_DIRECTORY_ENTRIES - 1] of IMAGE_DATA_DIRECTORY;
8572  end;
8573  IMAGE_OPTIONAL_HEADER32 = _IMAGE_OPTIONAL_HEADER;
8574  TImageOptionalHeader32 = IMAGE_OPTIONAL_HEADER32;
8575  PImageOptionalHeader32 = PIMAGE_OPTIONAL_HEADER32;
8576
8577  PIMAGE_ROM_OPTIONAL_HEADER = ^IMAGE_ROM_OPTIONAL_HEADER;
8578  _IMAGE_ROM_OPTIONAL_HEADER = record
8579    Magic: Word;
8580    MajorLinkerVersion: Byte;
8581    MinorLinkerVersion: Byte;
8582    SizeOfCode: DWORD;
8583    SizeOfInitializedData: DWORD;
8584    SizeOfUninitializedData: DWORD;
8585    AddressOfEntryPoint: DWORD;
8586    BaseOfCode: DWORD;
8587    BaseOfData: DWORD;
8588    BaseOfBss: DWORD;
8589    GprMask: DWORD;
8590    CprMask: array [0..3] of DWORD;
8591    GpValue: DWORD;
8592  end;
8593  IMAGE_ROM_OPTIONAL_HEADER = _IMAGE_ROM_OPTIONAL_HEADER;
8594  TIMAGE_ROM_OPTIONAL_HEADER = _IMAGE_ROM_OPTIONAL_HEADER;
8595  TImageRomOptionalHeader = IMAGE_ROM_OPTIONAL_HEADER;
8596  PImageRomOptionalHeader = PIMAGE_ROM_OPTIONAL_HEADER;
8597
8598  PIMAGE_OPTIONAL_HEADER64 = ^IMAGE_OPTIONAL_HEADER64;
8599  _IMAGE_OPTIONAL_HEADER64 = record
8600    Magic: Word;
8601    MajorLinkerVersion: Byte;
8602    MinorLinkerVersion: Byte;
8603    SizeOfCode: DWORD;
8604    SizeOfInitializedData: DWORD;
8605    SizeOfUninitializedData: DWORD;
8606    AddressOfEntryPoint: DWORD;
8607    BaseOfCode: DWORD;
8608    ImageBase: Int64;
8609    SectionAlignment: DWORD;
8610    FileAlignment: DWORD;
8611    MajorOperatingSystemVersion: Word;
8612    MinorOperatingSystemVersion: Word;
8613    MajorImageVersion: Word;
8614    MinorImageVersion: Word;
8615    MajorSubsystemVersion: Word;
8616    MinorSubsystemVersion: Word;
8617    Win32VersionValue: DWORD;
8618    SizeOfImage: DWORD;
8619    SizeOfHeaders: DWORD;
8620    CheckSum: DWORD;
8621    Subsystem: Word;
8622    DllCharacteristics: Word;
8623    SizeOfStackReserve: Int64;
8624    SizeOfStackCommit: Int64;
8625    SizeOfHeapReserve: Int64;
8626    SizeOfHeapCommit: Int64;
8627    LoaderFlags: DWORD;
8628    NumberOfRvaAndSizes: DWORD;
8629    DataDirectory: array [0..IMAGE_NUMBEROF_DIRECTORY_ENTRIES - 1] of IMAGE_DATA_DIRECTORY;
8630  end;
8631  IMAGE_OPTIONAL_HEADER64 = _IMAGE_OPTIONAL_HEADER64;
8632  TImageOptionalHeader64 = IMAGE_OPTIONAL_HEADER64;
8633  PImageOptionalHeader64 = PIMAGE_OPTIONAL_HEADER64;
8634
8635const
8636  IMAGE_SIZEOF_ROM_OPTIONAL_HEADER  = 56;
8637  IMAGE_SIZEOF_STD_OPTIONAL_HEADER  = 28;
8638  IMAGE_SIZEOF_NT_OPTIONAL32_HEADER = 224;
8639  IMAGE_SIZEOF_NT_OPTIONAL64_HEADER = 240;
8640
8641  IMAGE_NT_OPTIONAL_HDR32_MAGIC = $10b;
8642  IMAGE_NT_OPTIONAL_HDR64_MAGIC = $20b;
8643  IMAGE_ROM_OPTIONAL_HDR_MAGIC  = $107;
8644
8645type
8646{$ifdef WIN64}
8647  IMAGE_OPTIONAL_HEADER = IMAGE_OPTIONAL_HEADER64;
8648  PIMAGE_OPTIONAL_HEADER = PIMAGE_OPTIONAL_HEADER64;
8649{$else}
8650  IMAGE_OPTIONAL_HEADER = IMAGE_OPTIONAL_HEADER32;
8651  PIMAGE_OPTIONAL_HEADER = PIMAGE_OPTIONAL_HEADER32;
8652{$endif}
8653  TImageOptionalHeader = IMAGE_OPTIONAL_HEADER;
8654  PImageOptionalHeader = PIMAGE_OPTIONAL_HEADER;
8655
8656const
8657  IMAGE_SIZEOF_NT_OPTIONAL_HEADER = IMAGE_SIZEOF_NT_OPTIONAL32_HEADER;
8658  IMAGE_NT_OPTIONAL_HDR_MAGIC     = IMAGE_NT_OPTIONAL_HDR32_MAGIC;
8659
8660type
8661  PIMAGE_NT_HEADERS64 = ^IMAGE_NT_HEADERS64;
8662  _IMAGE_NT_HEADERS64 = record
8663    Signature: DWORD;
8664    FileHeader: IMAGE_FILE_HEADER;
8665    OptionalHeader: IMAGE_OPTIONAL_HEADER64;
8666  end;
8667  IMAGE_NT_HEADERS64 = _IMAGE_NT_HEADERS64;
8668  TImageNtHeaders64 = IMAGE_NT_HEADERS64;
8669  PImageNtHeaders64 = PIMAGE_NT_HEADERS64;
8670
8671  PIMAGE_NT_HEADERS32 = ^IMAGE_NT_HEADERS32;
8672  _IMAGE_NT_HEADERS = record
8673    Signature: DWORD;
8674    FileHeader: IMAGE_FILE_HEADER;
8675    OptionalHeader: IMAGE_OPTIONAL_HEADER32;
8676  end;
8677  IMAGE_NT_HEADERS32 = _IMAGE_NT_HEADERS;
8678  TImageNtHeaders32 = IMAGE_NT_HEADERS32;
8679  PImageNtHeaders32 = PIMAGE_NT_HEADERS32;
8680
8681  PIMAGE_ROM_HEADERS = ^IMAGE_ROM_HEADERS;
8682  _IMAGE_ROM_HEADERS = record
8683    FileHeader: IMAGE_FILE_HEADER;
8684    OptionalHeader: IMAGE_ROM_OPTIONAL_HEADER;
8685  end;
8686  IMAGE_ROM_HEADERS = _IMAGE_ROM_HEADERS;
8687  TImageRomHeaders = IMAGE_ROM_HEADERS;
8688  PImageRomHeaders = PIMAGE_ROM_HEADERS;
8689
8690{$ifdef WIN64}
8691  IMAGE_NT_HEADERS = IMAGE_NT_HEADERS64;
8692  PIMAGE_NT_HEADERS = PIMAGE_NT_HEADERS64;
8693{$else}
8694  IMAGE_NT_HEADERS = IMAGE_NT_HEADERS32;
8695  PIMAGE_NT_HEADERS = PIMAGE_NT_HEADERS32;
8696{$endif}
8697
8698  TImageNtHeaders = IMAGE_NT_HEADERS;
8699  PImageNtHeaders = PIMAGE_NT_HEADERS;
8700
8701  _GET_FILEEX_INFO_LEVELS = (GetFileExInfoStandard, GetFileExMaxInfoLevel);
8702  GET_FILEEX_INFO_LEVELS = _GET_FILEEX_INFO_LEVELS;
8703  TGetFileExInfoLevels = GET_FILEEX_INFO_LEVELS;
8704  TGet_FileEx_Info_Levels = GET_FILEEX_INFO_LEVELS;
8705
8706  tagBSTRBLOB = record
8707                  cbsize : ULONG;
8708		  pdata  : pbyte;
8709                  end;
8710  BSTRBLOB=TagBSTRBlob;
8711  TBSTRBLOB=BSTRBLOB;
8712  PBSTRBLOB=^BSTRBLOB;
8713
8714  tagCLIPDATA = record
8715                  cbsize : ULONG;
8716		  ulClipFmt : long;
8717		  pclipdata : pbyte;
8718                  end;
8719  CLIPDATA=TagCLIPDATA;
8720  TCLIPDATA=CLIPDATA;
8721  PCLIPDATA=^CLIPDATA;
8722
8723   TImage_Section_SubHeader= record
8724            case longint of
8725               0 : ( PhysicalAddress : DWORD );
8726               1 : ( VirtualSize : DWORD );
8727            end;
8728
8729   _IMAGE_SECTION_HEADER = record
8730        Name : array[0..(IMAGE_SIZEOF_SHORT_NAME)-1] of BYTE;
8731        Misc : TImage_Section_SubHeader;
8732        VirtualAddress : DWORD;
8733        SizeOfRawData : DWORD;
8734        PointerToRawData : DWORD;
8735        PointerToRelocations : DWORD;
8736        PointerToLinenumbers : DWORD;
8737        NumberOfRelocations : WORD;
8738        NumberOfLinenumbers : WORD;
8739        Characteristics : DWORD;
8740     end;
8741   IMAGE_SECTION_HEADER = _IMAGE_SECTION_HEADER;
8742   TIMAGE_SECTION_HEADER = _IMAGE_SECTION_HEADER;
8743   PIMAGE_SECTION_HEADER = ^_IMAGE_SECTION_HEADER;
8744   PPIMAGE_SECTION_HEADER = ^PIMAGE_SECTION_HEADER;
8745   IMAGESECTIONHEADER = _IMAGE_SECTION_HEADER;
8746   TIMAGESECTIONHEADER = _IMAGE_SECTION_HEADER;
8747   PIMAGESECTIONHEADER = ^_IMAGE_SECTION_HEADER;
8748
8749
8750   _IMAGE_FUNCTION_ENTRY = record
8751      StartingAddress,
8752      EndingAddress,
8753      EndOfPrologue     : DWord;
8754      end;
8755   IMAGE_FUNCTION_ENTRY = _IMAGE_FUNCTION_ENTRY;
8756   TIMAGE_FUNCTION_ENTRY= IMAGE_FUNCTION_ENTRY;
8757   PIMAGE_FUNCTION_ENTRY= ^IMAGE_FUNCTION_ENTRY;
8758   LPIMAGE_FUNCTION_ENTRY= PIMAGE_FUNCTION_ENTRY;
8759
8760
8761   _IMAGE_FUNCTION_ENTRY64 = record
8762       StartingAddress,
8763       EndingAddress :   ULONGLONG   ;
8764       case boolean of
8765         false : (EndOfPrologue : ULONGLONG);
8766         true  : (UnwindInfoAddress : ULONGLONG);
8767       end;
8768   IMAGE_FUNCTION_ENTRY64  =  _IMAGE_FUNCTION_ENTRY64;
8769   TIMAGE_FUNCTION_ENTRY64 =  _IMAGE_FUNCTION_ENTRY64;
8770   PIMAGE_FUNCTION_ENTRY64 =  ^_IMAGE_FUNCTION_ENTRY64;
8771   LPIMAGE_FUNCTION_ENTRY64=  ^_IMAGE_FUNCTION_ENTRY64;
8772
8773   _IMAGE_COFF_SYMBOLS_HEADER  = record
8774      NumberOfSymbols,
8775      LvaToFirstSymbol,
8776      NumberOfLinenumbers,
8777      LvaToFirstLinenumber,
8778      RvaToFirstByteOfCode,
8779      RvaToLastByteOfCode,
8780      RvaToFirstByteOfData,
8781      RvaToLastByteOfData    : DWORD;
8782    end;
8783   TIMAGE_COFF_SYMBOLS_HEADER = _IMAGE_COFF_SYMBOLS_HEADER;
8784   IMAGE_COFF_SYMBOLS_HEADER  = _IMAGE_COFF_SYMBOLS_HEADER;
8785   PIMAGE_COFF_SYMBOLS_HEADER = ^IMAGE_COFF_SYMBOLS_HEADER;
8786   LPIMAGE_COFF_SYMBOLS_HEADER= PIMAGE_COFF_SYMBOLS_HEADER;
8787
8788
8789   _FPO_DATA = record
8790    ulOffStart: DWORD;             // offset 1st byte of function code
8791    cbProcSize: DWORD;             // # bytes in function
8792    cdwLocals : DWORD;             // # bytes in locals/4
8793    bitvalues : word;              //
8794{
8795    WORD        cdwParams;              // # bytes in params/4
8796    WORD        cbProlog : 8;           // # bytes in prolog
8797    WORD        cbRegs   : 3;           // # regs saved
8798    WORD        fHasSEH  : 1;           // TRUE if SEH in func
8799    WORD        fUseBP   : 1;           // TRUE if EBP has been allocated
8800    WORD        reserved : 1;           // reserved for future use
8801    WORD        cbFrame  : 2;           // frame type
8802}
8803    end;
8804   FPO_DATA   = _FPO_DATA;
8805   TFPO_DATA  = _FPO_DATA;
8806   PFPO_DATA  = ^_FPO_DATA;
8807   LPFPO_DATA = PFPO_DATA;
8808
8809
8810     IMAGE_LOAD_CONFIG_DIRECTORY32 = record
8811          Size : DWORD;
8812          TimeDateStamp : DWORD;
8813          MajorVersion : WORD;
8814          MinorVersion : WORD;
8815          GlobalFlagsClear : DWORD;
8816          GlobalFlagsSet : DWORD;
8817          CriticalSectionDefaultTimeout : DWORD;
8818          DeCommitFreeBlockThreshold : DWORD;
8819          DeCommitTotalFreeThreshold : DWORD;
8820          LockPrefixTable : DWORD;
8821          MaximumAllocationSize : DWORD;
8822          VirtualMemoryThreshold : DWORD;
8823          ProcessHeapFlags : DWORD;
8824          ProcessAffinityMask : DWORD;
8825          CSDVersion : WORD;
8826          Reserved1 : WORD;
8827          EditList : DWORD;
8828          SecurityCookie : DWORD;
8829          SEHandlerTable : DWORD;
8830          SEHandlerCount : DWORD;
8831       end;
8832     PIMAGE_LOAD_CONFIG_DIRECTORY32 = ^IMAGE_LOAD_CONFIG_DIRECTORY32;
8833     TIMAGE_LOAD_CONFIG_DIRECTORY32 = IMAGE_LOAD_CONFIG_DIRECTORY32;
8834     IMAGE_LOAD_CONFIG_DIRECTORY64 = record
8835          Size : DWORD;
8836          TimeDateStamp : DWORD;
8837          MajorVersion : WORD;
8838          MinorVersion : WORD;
8839          GlobalFlagsClear : DWORD;
8840          GlobalFlagsSet : DWORD;
8841          CriticalSectionDefaultTimeout : DWORD;
8842          DeCommitFreeBlockThreshold : ULONGLONG;
8843          DeCommitTotalFreeThreshold : ULONGLONG;
8844          LockPrefixTable : ULONGLONG;
8845          MaximumAllocationSize : ULONGLONG;
8846          VirtualMemoryThreshold : ULONGLONG;
8847          ProcessAffinityMask : ULONGLONG;
8848          ProcessHeapFlags : DWORD;
8849          CSDVersion : WORD;
8850          Reserved1 : WORD;
8851          EditList : ULONGLONG;
8852          SecurityCookie : ULONGLONG;
8853          SEHandlerTable : ULONGLONG;
8854          SEHandlerCount : ULONGLONG;
8855       end;
8856     PIMAGE_LOAD_CONFIG_DIRECTORY64 = ^IMAGE_LOAD_CONFIG_DIRECTORY64;
8857     TIMAGE_LOAD_CONFIG_DIRECTORY64 = IMAGE_LOAD_CONFIG_DIRECTORY64;
8858{$ifdef WIN64}
8859     IMAGE_LOAD_CONFIG_DIRECTORY = IMAGE_LOAD_CONFIG_DIRECTORY64;
8860     TIMAGE_LOAD_CONFIG_DIRECTORY = TIMAGE_LOAD_CONFIG_DIRECTORY64;
8861     PIMAGE_LOAD_CONFIG_DIRECTORY = PIMAGE_LOAD_CONFIG_DIRECTORY64;
8862{$else}
8863     IMAGE_LOAD_CONFIG_DIRECTORY = IMAGE_LOAD_CONFIG_DIRECTORY32;
8864     TIMAGE_LOAD_CONFIG_DIRECTORY = TIMAGE_LOAD_CONFIG_DIRECTORY32;
8865     PIMAGE_LOAD_CONFIG_DIRECTORY = PIMAGE_LOAD_CONFIG_DIRECTORY32;
8866{$endif}
8867
8868     MOUSEINPUT = record
8869       dx        : LONG;
8870       dy        : LONG;
8871       MouseData : DWORD;
8872       dwFlags   : DWORD;
8873       Time      : DWORD;
8874       ExtraInfo : ULONG_PTR;
8875     end;
8876     TMOUSEINPUT  = MOUSEINPUT;
8877     PMOUSEINPUT  = ^MOUSEINPUT;
8878     LPMOUSEINPUT = PMOUSEINPUT;
8879
8880     KEYBDINPUT = record
8881       wVk       : WORD;
8882       wScan     : WORD;
8883       dwFlags   : DWORD;
8884       Time      : DWORD;
8885       ExtraInfo : ULONG_PTR;
8886     end;
8887     TKEYBDINPUT  = KEYBDINPUT;
8888     PKEYBDINPUT  = ^KEYBDINPUT;
8889     LPKEYBDINPUT = PKEYBDINPUT;
8890
8891     HARDWAREINPUT = record
8892       uMsg     : DWORD;
8893       wParamL  : WORD;
8894       wParamH  : WORD;
8895     end;
8896     THARDWAREINPUT  = HARDWAREINPUT;
8897     PHARDWAREINPUT  = ^HARDWAREINPUT;
8898     LPHARDWAREINPUT = PHARDWAREINPUT;
8899
8900     TINPUT = record
8901       _Type : DWORD;
8902       case integer of
8903         1 : (mi : MOUSEINPUT);
8904         2 : (ki : KEYBDINPUT);
8905         3 : (hi : HARDWAREINPUT);
8906     end;
8907     PINPUT = ^TINPUT;
8908     LPINPUT = PINPUT;
8909
8910{$push}
8911{$packrecords 4}
8912
8913    PIMAGE_EXPORT_DIRECTORY = ^TIMAGE_EXPORT_DIRECTORY;
8914    IMAGE_EXPORT_DIRECTORY = record
8915        Characteristics : DWORD;
8916        TimeDateStamp   : DWORD;
8917        MajorVersion    : WORD;
8918        MinorVersion    : WORD;
8919        Name 	        : DWORD;
8920        Base 		    : DWORD;
8921        NumberOfFunctions : DWORD;
8922        NumberOfNames   : DWORD;
8923        AddressOfFunctions : DWORD;     { RVA from base of image }
8924        AddressOfNames  : DWORD;        { RVA from base of image }
8925        AddressOfNameOrdinals : DWORD;  { RVA from base of image }
8926      end;
8927    TIMAGE_EXPORT_DIRECTORY = IMAGE_EXPORT_DIRECTORY;
8928    _IMAGE_EXPORT_DIRECTORY = IMAGE_EXPORT_DIRECTORY;
8929    LPIMAGE_EXPORT_DIRECTORY= PIMAGE_EXPORT_DIRECTORY;
8930
8931  P_IMAGE_IMPORT_BY_NAME = ^_IMAGE_IMPORT_BY_NAME;
8932  _IMAGE_IMPORT_BY_NAME =  record
8933      Hint : WORD;
8934      Name : array[0..0] of AnsiCHAR;
8935    end;
8936  IMAGE_IMPORT_BY_NAME = _IMAGE_IMPORT_BY_NAME;
8937  PIMAGE_IMPORT_BY_NAME = ^IMAGE_IMPORT_BY_NAME;
8938  LPIMAGE_IMPORT_BY_NAME = P_IMAGE_IMPORT_BY_NAME;
8939  PPIMAGE_IMPORT_BY_NAME = ^PIMAGE_IMPORT_BY_NAME;
8940
8941  {$push}{$packrecords 8}              // Use align 8 for the 64-bit IAT.}
8942  P_IMAGE_THUNK_DATA64 = ^_IMAGE_THUNK_DATA64;
8943  _IMAGE_THUNK_DATA64 =  record
8944      u1 :  record
8945          case longint of
8946            0 : ( ForwarderString : ULONGLONG );    { PBYTE  }
8947            1 : ( _Function : ULONGLONG );          { PDWORD }
8948            2 : ( Ordinal : ULONGLONG );
8949            3 : ( AddressOfData : ULONGLONG );      { PIMAGE_IMPORT_BY_NAME }
8950          end;
8951    end;
8952  IMAGE_THUNK_DATA64 = _IMAGE_THUNK_DATA64;
8953  PIMAGE_THUNK_DATA64 = ^IMAGE_THUNK_DATA64;
8954
8955  PPIMAGE_THUNK_DATA64 = ^PIMAGE_THUNK_DATA64;
8956  LPIMAGE_THUNK_DATA64 = PIMAGE_THUNK_DATA64;
8957  {$pop}                        // Back to 4 byte packing}
8958
8959  P_IMAGE_THUNK_DATA32 = ^_IMAGE_THUNK_DATA32;
8960  _IMAGE_THUNK_DATA32 =  record
8961      u1 :  record
8962          case longint of
8963            0 : ( ForwarderString : DWORD );          { PBYTE  }
8964            1 : ( _Function : DWORD );                { PDWORD }
8965            2 : ( Ordinal : DWORD );
8966            3 : ( AddressOfData : DWORD );            { PIMAGE_IMPORT_BY_NAME }
8967          end;
8968    end;
8969  IMAGE_THUNK_DATA32 = _IMAGE_THUNK_DATA32;
8970  PIMAGE_THUNK_DATA32 = ^IMAGE_THUNK_DATA32;
8971
8972  PPIMAGE_THUNK_DATA32 = ^PIMAGE_THUNK_DATA32;
8973  LPIMAGE_THUNK_DATA32 = PIMAGE_THUNK_DATA32;
8974
8975  { }
8976  { Thread Local Storage }
8977  { }
8978
8979  PIMAGE_TLS_CALLBACK = procedure (DllHandle:PVOID; Reason:DWORD; Reserved:PVOID);stdcall; {NTAPI}
8980
8981  P_IMAGE_TLS_DIRECTORY64 = ^_IMAGE_TLS_DIRECTORY64;
8982  _IMAGE_TLS_DIRECTORY64 =  record
8983      StartAddressOfRawData : ULONGLONG;
8984      EndAddressOfRawData : ULONGLONG;
8985      AddressOfIndex : ULONGLONG;               { PDWORD }
8986      AddressOfCallBacks : ULONGLONG;           { PIMAGE_TLS_CALLBACK *; }
8987      SizeOfZeroFill : DWORD;
8988          case longint of
8989            0 : ( Characteristics : DWORD );
8990            1 : ( CharacteristicsFields:  bitpacked record
8991                                  Reserved0 : 0..$FFFFF; // 5 nibbles=20 bits
8992                                  Alignment : 0..$F;      // 4 bits
8993                                  Reserved1 : 0..$FF;     // 8 bits
8994              end );
8995    end;
8996  IMAGE_TLS_DIRECTORY64 = _IMAGE_TLS_DIRECTORY64;
8997  PIMAGE_TLS_DIRECTORY64 = ^IMAGE_TLS_DIRECTORY64;
8998
8999  PPIMAGE_TLS_DIRECTORY64 = ^PIMAGE_TLS_DIRECTORY64;
9000  LPIMAGE_TLS_DIRECTORY64 = PIMAGE_TLS_DIRECTORY64;
9001  P_IMAGE_TLS_DIRECTORY32 = ^_IMAGE_TLS_DIRECTORY32;
9002  _IMAGE_TLS_DIRECTORY32 =  record
9003      StartAddressOfRawData : DWORD;
9004      EndAddressOfRawData : DWORD;
9005      AddressOfIndex : DWORD;                      { PDWORD }
9006      AddressOfCallBacks : DWORD;                  { PIMAGE_TLS_CALLBACK * }
9007      SizeOfZeroFill : DWORD;
9008          case longint of
9009            0 : ( Characteristics : DWORD );
9010            1 : ( CharacteristicsFields : bitpacked  record
9011                                 Reserved0 : 0..$FFFFF; // 5 nibbles=20 bits
9012                                 Alignment : 0..$F;      // 4 bits
9013                                 Reserved1 : 0..$FF;     // 8 bits
9014              end );
9015
9016    end;
9017  IMAGE_TLS_DIRECTORY32 = _IMAGE_TLS_DIRECTORY32;
9018  PIMAGE_TLS_DIRECTORY32 = ^IMAGE_TLS_DIRECTORY32;
9019
9020
9021
9022  PPIMAGE_TLS_DIRECTORY32 = ^PIMAGE_TLS_DIRECTORY32;
9023  LPIMAGE_TLS_DIRECTORY32 = PIMAGE_TLS_DIRECTORY32;
9024
9025  {$ifdef WIN64}
9026
9027  PIMAGE_THUNK_DATA = PIMAGE_THUNK_DATA64;
9028  IMAGE_THUNK_DATA = IMAGE_THUNK_DATA64;
9029
9030  PPIMAGE_THUNK_DATA = ^PIMAGE_THUNK_DATA64;
9031  LPIMAGE_THUNK_DATA = PIMAGE_THUNK_DATA64;
9032
9033  PIMAGE_TLS_DIRECTORY = ^IMAGE_TLS_DIRECTORY;
9034  IMAGE_TLS_DIRECTORY = IMAGE_TLS_DIRECTORY64;
9035
9036  PPIMAGE_TLS_DIRECTORY = ^PIMAGE_TLS_DIRECTORY;
9037  LPIMAGE_TLS_DIRECTORY = PIMAGE_TLS_DIRECTORY64;
9038  {$else}
9039
9040  PIMAGE_THUNK_DATA = PIMAGE_THUNK_DATA32;
9041  IMAGE_THUNK_DATA = IMAGE_THUNK_DATA32;
9042
9043  PPIMAGE_THUNK_DATA = ^PIMAGE_THUNK_DATA;
9044  LPIMAGE_THUNK_DATA = PIMAGE_THUNK_DATA32;
9045  PIMAGE_TLS_DIRECTORY = ^IMAGE_TLS_DIRECTORY;
9046  IMAGE_TLS_DIRECTORY = IMAGE_TLS_DIRECTORY32;
9047
9048  PPIMAGE_TLS_DIRECTORY = ^PIMAGE_TLS_DIRECTORY;
9049  LPIMAGE_TLS_DIRECTORY = PIMAGE_TLS_DIRECTORY32;
9050  {$endif}
9051
9052  P_IMAGE_IMPORT_DESCRIPTOR = ^_IMAGE_IMPORT_DESCRIPTOR;
9053  _IMAGE_IMPORT_DESCRIPTOR =  record
9054          case longint of
9055            0 : ( Characteristics : DWORD );     { 0 for terminating null import descriptor }
9056            1 : ( OriginalFirstThunk : DWORD;    { RVA to original unbound IAT (PIMAGE_THUNK_DATA) }
9057                  TimeDateStamp : DWORD;         { 0 if not bound, }
9058                                                 // -1 if bound, and real date\time stamp
9059                                                 //     in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT (new BIND)
9060                                                 // O.W. date/time stamp of DLL bound to (Old BIND)
9061                  ForwarderChain : DWORD;        // -1 if no forwarders
9062                  Name : DWORD;
9063                  FirstThunk : DWORD;            // RVA to IAT (if bound this IAT has actual addresses)
9064                );
9065    end;
9066  IMAGE_IMPORT_DESCRIPTOR = _IMAGE_IMPORT_DESCRIPTOR;
9067  PIMAGE_IMPORT_DESCRIPTOR = ^IMAGE_IMPORT_DESCRIPTOR   {UNALIGNED  }     ;
9068
9069
9070  PPIMAGE_IMPORT_DESCRIPTOR = ^PIMAGE_IMPORT_DESCRIPTOR;
9071  LPIMAGE_IMPORT_DESCRIPTOR = PIMAGE_IMPORT_DESCRIPTOR;
9072  { }
9073  { New format import descriptors pointed to by DataDirectory[ IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT ] }
9074  { }
9075
9076
9077  P_IMAGE_BOUND_IMPORT_DESCRIPTOR = ^_IMAGE_BOUND_IMPORT_DESCRIPTOR;
9078  _IMAGE_BOUND_IMPORT_DESCRIPTOR =  record
9079      TimeDateStamp : DWORD;
9080      OffsetModuleName : WORD;
9081      NumberOfModuleForwarderRefs : WORD;
9082      { Array of zero or more IMAGE_BOUND_FORWARDER_REF follows }
9083    end;
9084
9085  IMAGE_BOUND_IMPORT_DESCRIPTOR = _IMAGE_BOUND_IMPORT_DESCRIPTOR;
9086  PIMAGE_BOUND_IMPORT_DESCRIPTOR = ^IMAGE_BOUND_IMPORT_DESCRIPTOR;
9087  LPIMAGE_BOUND_IMPORT_DESCRIPTOR = P_IMAGE_BOUND_IMPORT_DESCRIPTOR;
9088  PPIMAGE_BOUND_IMPORT_DESCRIPTOR = ^PIMAGE_BOUND_IMPORT_DESCRIPTOR;
9089
9090  P_IMAGE_BOUND_FORWARDER_REF = ^_IMAGE_BOUND_FORWARDER_REF;
9091  _IMAGE_BOUND_FORWARDER_REF =  record
9092      TimeDateStamp : DWORD;
9093      OffsetModuleName : WORD;
9094      Reserved : WORD;
9095    end;
9096  IMAGE_BOUND_FORWARDER_REF = _IMAGE_BOUND_FORWARDER_REF;
9097  PIMAGE_BOUND_FORWARDER_REF = ^IMAGE_BOUND_FORWARDER_REF;
9098  LPIMAGE_BOUND_FORWARDER_REF = P_IMAGE_BOUND_FORWARDER_REF;
9099  PPIMAGE_BOUND_FORWARDER_REF = ^PIMAGE_BOUND_FORWARDER_REF;
9100  { Delay load version 2 }
9101
9102  _IMAGE_DELAYLOAD_DESCRIPTOR = record
9103        case longint of
9104        0: (AllAttributes :Dword;
9105            DllNameRVA,                       // RVA to the name of the target library (NULL-terminate ASCII string)
9106            ModuleHandleRVA,                  // RVA to the HMODULE caching location (PHMODULE)
9107            ImportAddressTableRVA,            // RVA to the start of the IAT (PIMAGE_THUNK_DATA)
9108            ImportNameTableRVA,               // RVA to the start of the name table (PIMAGE_THUNK_DATA::AddressOfData)
9109            BoundImportAddressTableRVA,       // RVA to an optional bound IAT
9110            UnloadInformationTableRVA,        // RVA to an optional unload info table
9111            TimeDateStamp            : DWORD; // 0 if not bound,
9112                                            // Otherwise, date/time of the target DLL
9113         );
9114        1: (Attributes:bitpacked record
9115             rvabased:0..1;  {1 bits}                 // Delay load version 2
9116             ReservedAttributes: 0..$7FFFFFF; {31 bits}
9117             end;)
9118     end;
9119
9120  IMAGE_DELAYLOAD_DESCRIPTOR= _IMAGE_DELAYLOAD_DESCRIPTOR;
9121  PIMAGE_DELAYLOAD_DESCRIPTOR= ^_IMAGE_DELAYLOAD_DESCRIPTOR;
9122  PCIMAGE_DELAYLOAD_DESCRIPTOR= PIMAGE_DELAYLOAD_DESCRIPTOR;
9123{$pop}
9124
9125 tagCOMBOBOXINFO = record
9126    cbSize: DWORD;
9127    rcItem: TRect;
9128    rcButton: TRect;
9129    stateButton: DWORD;
9130    hwndCombo: HWND;
9131    hwndItem: HWND;
9132    hwndList: HWND;
9133  end;
9134  TComboboxInfo = tagCOMBOBOXINFO;
9135  PComboboxInfo = ^TComboboxInfo;
9136  LPComboboxInfo = PComboboxInfo;
9137
9138  _TRIVERTEX = record
9139          x : LONG;
9140          y : LONG;
9141          Red : COLOR16;
9142          Green : COLOR16;
9143          Blue : COLOR16;
9144          Alpha : COLOR16;
9145       end;
9146  TRIVERTEX = _TRIVERTEX;
9147  PTRIVERTEX = ^_TRIVERTEX;
9148  LPTRIVERTEX = PTRIVERTEX;
9149
9150  _GRADIENT_TRIANGLE = record
9151          Vertex1 : ULONG;
9152          Vertex2 : ULONG;
9153          Vertex3 : ULONG;
9154       end;
9155  GRADIENT_TRIANGLE = _GRADIENT_TRIANGLE;
9156  TGRADIENT_TRIANGLE = _GRADIENT_TRIANGLE;
9157  PGRADIENT_TRIANGLE = ^_GRADIENT_TRIANGLE;
9158  LPGRADIENT_TRIANGLE = PGRADIENT_TRIANGLE;
9159
9160  _GRADIENT_RECT = record
9161          UpperLeft : ULONG;
9162          LowerRight : ULONG;
9163       end;
9164  GRADIENT_RECT = _GRADIENT_RECT;
9165  TGRADIENT_RECT = _GRADIENT_RECT;
9166  PGRADIENT_RECT = ^_GRADIENT_RECT;
9167  LPGRADIENT_RECT = PGRADIENT_RECT;
9168
9169  CURSORINFO = record
9170    		 cbSize  : DWORD;
9171     		 flags   : DWORD;
9172    		 hCursor : HCURSOR;
9173    	         ptScreenPos : POINT;
9174                 end;
9175  PCURSORINFO = ^CURSORINFO;
9176  TCURSORINFO = CURSORINFO;
9177
9178const
9179  SECURITY_DESCRIPTOR_MIN_LENGTH = SIZEOF(SECURITY_DESCRIPTOR);
9180
9181
9182// #if(WINVER >= 0x0500)
9183type
9184     tagMENUGETOBJECTINFO = packed record
9185       dwFlags:DWORD;
9186       uPos:UINT;
9187       _hmenu:HMENU;
9188       riid:PVOID;
9189       pvObj:PVOID;
9190     end;
9191     MENUGETOBJECTINFO = tagMENUGETOBJECTINFO;
9192     PMENUGETOBJECTINFO = ^tagMENUGETOBJECTINFO;
9193     LPMENUGETOBJECTINFO = ^tagMENUGETOBJECTINFO;
9194//#endif /* WINVER >= 0x0500 */
9195
9196
9197// Menubar information
9198type
9199     tagMENUBARINFO = record
9200       cbSize:DWORD;
9201       rcBar:Windows.RECT; // rect of bar, popup, item
9202       _hmenu:HMENU;       // real menu handle of bar, popup
9203       hwndMenu:HWND;      // hwnd of item submenu if one
9204//    fBarFocused:1:BOOL;  // bar, popup has the focus
9205//    fFocused:1:BOOL;     // item has the focus
9206      FocusedBits:DWORD;
9207    end;
9208    MENUBARINFO = tagMENUBARINFO;
9209    PMENUBARINFO = ^tagMENUBARINFO;
9210    LPMENUBARINFO = ^tagMENUBARINFO;
9211
9212
9213    // defined here because large_integer is defined in struct.inc
9214    LPPROGRESS_ROUTINE = function(TotalFileSize,TotalBytesTransferred,StreamSize,StreamBytesTransferred:LARGE_INTEGER;dwStreamNumber,dwCallbackReason:DWord;hSourceFile,hDestinationFile :THandle;lpdata:pointer):Dword; Stdcall;
9215    TPROGRESS_ROUTINE = LPPROGRESS_ROUTINE;
9216
9217// Raw Input Messages
9218//#if(_WIN32_WINNT >= 0x0501)
9219{$push}{$packrecords 4}
9220    tagRAWINPUTHEADER = record
9221      dwType: DWORD;
9222      dwSize: DWORD;
9223      hDevice: HANDLE;
9224      wParam: WPARAM;
9225    end;
9226    RAWINPUTHEADER = tagRAWINPUTHEADER;
9227    TRAWINPUTHEADER = tagRAWINPUTHEADER;
9228    PRAWINPUTHEADER = ^tagRAWINPUTHEADER;
9229    LPRAWINPUTHEADER = ^tagRAWINPUTHEADER;
9230
9231(*
9232 * Raw format of the mouse input
9233 *)
9234    tagRAWMOUSE = record
9235      (*
9236       * Indicator flags.
9237       *)
9238      usFlags: USHORT;
9239
9240      case longint of
9241        0: (
9242          (*
9243           * The transition state of the mouse buttons.
9244           *)
9245          ulButtons: ULONG;
9246
9247          (*
9248           * The raw state of the mouse buttons.
9249           *)
9250          ulRawButtons: ULONG;
9251
9252          (*
9253           * The signed relative or absolute motion in the X direction.
9254           *)
9255          lLastX: LONG;
9256
9257          (*
9258           * The signed relative or absolute motion in the Y direction.
9259           *)
9260          lLastY: LONG;
9261
9262          (*
9263           * Device-specific additional information for the event.
9264           *)
9265          ulExtraInformation: ULONG
9266        );
9267        1: (
9268          (*
9269           * The transition state of the mouse buttons.
9270           *)
9271          usButtonFlags: USHORT;
9272          usButtonData: USHORT
9273        );
9274    end;
9275    RAWMOUSE = tagRAWMOUSE;
9276    TRAWMOUSE = tagRAWMOUSE;
9277    PRAWMOUSE = ^tagRAWMOUSE;
9278    LPRAWMOUSE = ^tagRAWMOUSE;
9279
9280(*
9281 * Raw format of the keyboard input
9282 *)
9283    tagRAWKEYBOARD = record
9284      (*
9285       * The "make" scan code (key depression).
9286       *)
9287      MakeCode: USHORT;
9288
9289      (*
9290       * The flags field indicates a "break" (key release) and other
9291       * miscellaneous scan code information defined in ntddkbd.h.
9292       *)
9293      Flags: USHORT;
9294
9295      Reserved: USHORT;
9296
9297      (*
9298       * Windows message compatible information
9299       *)
9300      VKey: USHORT;
9301      Message: UINT;
9302
9303      (*
9304       * Device-specific additional information for the event.
9305       *)
9306      ExtraInformation: ULONG;
9307    end;
9308    RAWKEYBOARD = tagRAWKEYBOARD;
9309    TRAWKEYBOARD = tagRAWKEYBOARD;
9310    PRAWKEYBOARD = ^tagRAWKEYBOARD;
9311    LPRAWKEYBOARD = ^tagRAWKEYBOARD;
9312
9313    (*
9314     * Raw format of the input from Human Input Devices
9315     *)
9316    tagRAWHID = record
9317      dwSizeHid: DWORD;    // byte size of each report
9318      dwCount: DWORD;      // number of input packed
9319      bRawData: array [0..0] of BYTE;
9320    end;
9321    RAWHID = tagRAWHID;
9322    TRAWHID = tagRAWHID;
9323    PRAWHID = ^tagRAWHID;
9324    LPRAWHID = ^tagRAWHID;
9325
9326(*
9327 * RAWINPUT data structure.
9328 *)
9329    tagRAWINPUT = record
9330      header: RAWINPUTHEADER;
9331      data: record
9332        case longint of
9333          0: (mouse: RAWMOUSE);
9334          1: (keyboard: RAWKEYBOARD);
9335          2: (hid: RAWHID);
9336      end;
9337    end;
9338    RAWINPUT = tagRAWINPUT;
9339    TRAWINPUT = tagRAWINPUT;
9340    PRAWINPUT = ^tagRAWINPUT;
9341    LPRAWINPUT = ^tagRAWINPUT;
9342    PPRAWINPUT = ^PRAWINPUT;
9343    LPLPRAWINPUT = ^LPRAWINPUT;
9344
9345    tagRID_DEVICE_INFO_MOUSE = record
9346      dwId: DWORD;
9347      dwNumberOfButtons: DWORD;
9348      dwSampleRate: DWORD;
9349      fHasHorizontalWheel: BOOL;
9350    end;
9351    RID_DEVICE_INFO_MOUSE = tagRID_DEVICE_INFO_MOUSE;
9352    TRID_DEVICE_INFO_MOUSE = tagRID_DEVICE_INFO_MOUSE;
9353    PRID_DEVICE_INFO_MOUSE = ^tagRID_DEVICE_INFO_MOUSE;
9354
9355    tagRID_DEVICE_INFO_KEYBOARD = record
9356      dwType: DWORD;
9357      dwSubType: DWORD;
9358      dwKeyboardMode: DWORD;
9359      dwNumberOfFunctionKeys: DWORD;
9360      dwNumberOfIndicators: DWORD;
9361      dwNumberOfKeysTotal: DWORD;
9362    end;
9363    RID_DEVICE_INFO_KEYBOARD = tagRID_DEVICE_INFO_KEYBOARD;
9364    TRID_DEVICE_INFO_KEYBOARD = tagRID_DEVICE_INFO_KEYBOARD;
9365    PRID_DEVICE_INFO_KEYBOARD = ^tagRID_DEVICE_INFO_KEYBOARD;
9366
9367    tagRID_DEVICE_INFO_HID = record
9368      dwVendorId: DWORD;
9369      dwProductId: DWORD;
9370      dwVersionNumber: DWORD;
9371
9372      (*
9373       * Top level collection UsagePage and Usage
9374       *)
9375      usUsagePage: USHORT;
9376      usUsage: USHORT;
9377    end;
9378    RID_DEVICE_INFO_HID = tagRID_DEVICE_INFO_HID;
9379    TRID_DEVICE_INFO_HID = tagRID_DEVICE_INFO_HID;
9380    PRID_DEVICE_INFO_HID = ^tagRID_DEVICE_INFO_HID;
9381
9382    tagRID_DEVICE_INFO = record
9383      cbSize: DWORD;
9384      dwType: DWORD;
9385      case longint of
9386        0: (mouse: RID_DEVICE_INFO_MOUSE);
9387        1: (keyboard: RID_DEVICE_INFO_KEYBOARD);
9388        2: (hid: RID_DEVICE_INFO_HID);
9389    end;
9390    RID_DEVICE_INFO = tagRID_DEVICE_INFO;
9391    PRID_DEVICE_INFO = ^tagRID_DEVICE_INFO;
9392    LPRID_DEVICE_INFO = ^tagRID_DEVICE_INFO;
9393
9394(*
9395 * Raw Input request APIs
9396 *)
9397    tagRAWINPUTDEVICE = record
9398      usUsagePage: USHORT; // Toplevel collection UsagePage
9399      usUsage: USHORT;     // Toplevel collection Usage
9400      dwFlags: DWORD;
9401      hwndTarget: HWND;    // Target hwnd. NULL = follows keyboard focus
9402    end;
9403    RAWINPUTDEVICE = tagRAWINPUTDEVICE;
9404    TRAWINPUTDEVICE = tagRAWINPUTDEVICE;
9405    PRAWINPUTDEVICE = ^tagRAWINPUTDEVICE;
9406    LPRAWINPUTDEVICE = ^tagRAWINPUTDEVICE;
9407    PCRAWINPUTDEVICE = ^tagRAWINPUTDEVICE;
9408
9409{$packrecords C}
9410    tagRAWINPUTDEVICELIST = record
9411      hDevice: HANDLE;
9412      dwType: DWORD;
9413    end;
9414    RAWINPUTDEVICELIST = tagRAWINPUTDEVICELIST;
9415    PRAWINPUTDEVICELIST = ^tagRAWINPUTDEVICELIST;
9416//#endif /* _WIN32_WINNT >= 0x0501 */
9417
9418// Wincon.h
9419
9420    _CONSOLE_SCREEN_BUFFER_INFOEX = record
9421        cbSize : ULONG;
9422        dwSize : COORD;
9423        dwCursorPosition : COORD;
9424        wAttributes : WORD;
9425        srWindow : SMALL_RECT;
9426        dwMaximumWindowSize : COORD;
9427        wPopupAttributes : WORD;
9428        bFullscreenSupported : BOOL;
9429        ColorTable : array[0..15] of COLORREF;
9430      end;
9431    CONSOLE_SCREEN_BUFFER_INFOEX = _CONSOLE_SCREEN_BUFFER_INFOEX;
9432    PCONSOLE_SCREEN_BUFFER_INFOEX = ^_CONSOLE_SCREEN_BUFFER_INFOEX;
9433
9434
9435    _CONSOLE_FONT_INFO = record
9436        nFont : DWORD;
9437        dwFontSize : COORD;
9438      end;
9439    CONSOLE_FONT_INFO = _CONSOLE_FONT_INFO;
9440    PCONSOLE_FONT_INFO = ^_CONSOLE_FONT_INFO;
9441
9442    _CONSOLE_FONT_INFOEX = record
9443        cbSize : ULONG;
9444        nFont : DWORD;
9445        dwFontSize : COORD;
9446        FontFamily : UINT;
9447        FontWeight : UINT;
9448        FaceName : array[0..(LF_FACESIZE)-1] of WCHAR;
9449      end;
9450    CONSOLE_FONT_INFOEX = _CONSOLE_FONT_INFOEX;
9451    PCONSOLE_FONT_INFOEX = ^_CONSOLE_FONT_INFOEX;
9452
9453
9454
9455    _CONSOLE_HISTORY_INFO = record
9456        cbSize : UINT;
9457        HistoryBufferSize : UINT;
9458        NumberOfHistoryBuffers : UINT;
9459        dwFlags : DWORD;
9460      end;
9461    CONSOLE_HISTORY_INFO = _CONSOLE_HISTORY_INFO;
9462    PCONSOLE_HISTORY_INFO = ^_CONSOLE_HISTORY_INFO;
9463
9464    _CONSOLE_SELECTION_INFO = record
9465        dwFlags : DWORD;
9466        dwSelectionAnchor : COORD;
9467        srSelection : SMALL_RECT;
9468      end;
9469    CONSOLE_SELECTION_INFO = _CONSOLE_SELECTION_INFO;
9470    PCONSOLE_SELECTION_INFO = ^_CONSOLE_SELECTION_INFO;
9471
9472    _CONSOLE_READCONSOLE_CONTROL = record
9473        nLength : ULONG;
9474        nInitialChars : ULONG;
9475        dwCtrlWakeupMask : ULONG;
9476        dwControlKeyState : ULONG;
9477      end;
9478    CONSOLE_READCONSOLE_CONTROL = _CONSOLE_READCONSOLE_CONTROL;
9479    PCONSOLE_READCONSOLE_CONTROL = ^_CONSOLE_READCONSOLE_CONTROL;
9480
9481
9482    COMPUTER_NAME_FORMAT =  (
9483          ComputerNameNetBIOS=0,
9484          ComputerNameDnsHostname,
9485          ComputerNameDnsDomain,
9486          ComputerNameDnsFullyQualified,
9487          ComputerNamePhysicalNetBIOS,
9488          ComputerNamePhysicalDnsHostname,
9489          ComputerNamePhysicalDnsDomain,
9490          ComputerNamePhysicalDnsFullyQualified,
9491          ComputerNameMax=31);
9492    TCOMPUTER_NAME_FORMAT = COMPUTER_NAME_FORMAT;
9493{$pop}
9494{$endif read_interface}
9495
9496
9497{$ifdef read_implementation}
9498
9499  function fBinary(var a : DCB) : DWORD;
9500    begin
9501       fBinary:=(a.flags and bm_DCB_fBinary) shr bp_DCB_fBinary;
9502    end;
9503
9504  procedure set_fBinary(var a : DCB; __fBinary : DWORD);
9505    begin
9506       a.flags:=a.flags or ((__fBinary shl bp_DCB_fBinary) and bm_DCB_fBinary);
9507    end;
9508
9509  function fParity(var a : DCB) : DWORD;
9510    begin
9511       fParity:=(a.flags and bm_DCB_fParity) shr bp_DCB_fParity;
9512    end;
9513
9514  procedure set_fParity(var a : DCB; __fParity : DWORD);
9515    begin
9516       a.flags:=a.flags or ((__fParity shl bp_DCB_fParity) and bm_DCB_fParity);
9517    end;
9518
9519  function fOutxCtsFlow(var a : DCB) : DWORD;
9520    begin
9521       fOutxCtsFlow:=(a.flags and bm_DCB_fOutxCtsFlow) shr bp_DCB_fOutxCtsFlow;
9522    end;
9523
9524  procedure set_fOutxCtsFlow(var a : DCB; __fOutxCtsFlow : DWORD);
9525    begin
9526       a.flags:=a.flags or ((__fOutxCtsFlow shl bp_DCB_fOutxCtsFlow) and bm_DCB_fOutxCtsFlow);
9527    end;
9528
9529  function fOutxDsrFlow(var a : DCB) : DWORD;
9530    begin
9531       fOutxDsrFlow:=(a.flags and bm_DCB_fOutxDsrFlow) shr bp_DCB_fOutxDsrFlow;
9532    end;
9533
9534  procedure set_fOutxDsrFlow(var a : DCB; __fOutxDsrFlow : DWORD);
9535    begin
9536       a.flags:=a.flags or ((__fOutxDsrFlow shl bp_DCB_fOutxDsrFlow) and bm_DCB_fOutxDsrFlow);
9537    end;
9538
9539  function fDtrControl(var a : DCB) : DWORD;
9540    begin
9541       fDtrControl:=(a.flags and bm_DCB_fDtrControl) shr bp_DCB_fDtrControl;
9542    end;
9543
9544  procedure set_fDtrControl(var a : DCB; __fDtrControl : DWORD);
9545    begin
9546       a.flags:=a.flags or ((__fDtrControl shl bp_DCB_fDtrControl) and bm_DCB_fDtrControl);
9547    end;
9548
9549  function fDsrSensitivity(var a : DCB) : DWORD;
9550    begin
9551       fDsrSensitivity:=(a.flags and bm_DCB_fDsrSensitivity) shr bp_DCB_fDsrSensitivity;
9552    end;
9553
9554  procedure set_fDsrSensitivity(var a : DCB; __fDsrSensitivity : DWORD);
9555    begin
9556       a.flags:=a.flags or ((__fDsrSensitivity shl bp_DCB_fDsrSensitivity) and bm_DCB_fDsrSensitivity);
9557    end;
9558
9559  function fTXContinueOnXoff(var a : DCB) : DWORD;
9560    begin
9561       fTXContinueOnXoff:=(a.flags and bm_DCB_fTXContinueOnXoff) shr bp_DCB_fTXContinueOnXoff;
9562    end;
9563
9564  procedure set_fTXContinueOnXoff(var a : DCB; __fTXContinueOnXoff : DWORD);
9565    begin
9566       a.flags:=a.flags or ((__fTXContinueOnXoff shl bp_DCB_fTXContinueOnXoff) and bm_DCB_fTXContinueOnXoff);
9567    end;
9568
9569  function fOutX(var a : DCB) : DWORD;
9570    begin
9571       fOutX:=(a.flags and bm_DCB_fOutX) shr bp_DCB_fOutX;
9572    end;
9573
9574  procedure set_fOutX(var a : DCB; __fOutX : DWORD);
9575    begin
9576       a.flags:=a.flags or ((__fOutX shl bp_DCB_fOutX) and bm_DCB_fOutX);
9577    end;
9578
9579  function fInX(var a : DCB) : DWORD;
9580    begin
9581       fInX:=(a.flags and bm_DCB_fInX) shr bp_DCB_fInX;
9582    end;
9583
9584  procedure set_fInX(var a : DCB; __fInX : DWORD);
9585    begin
9586       a.flags:=a.flags or ((__fInX shl bp_DCB_fInX) and bm_DCB_fInX);
9587    end;
9588
9589  function fErrorChar(var a : DCB) : DWORD;
9590    begin
9591       fErrorChar:=(a.flags and bm_DCB_fErrorChar) shr bp_DCB_fErrorChar;
9592    end;
9593
9594  procedure set_fErrorChar(var a : DCB; __fErrorChar : DWORD);
9595    begin
9596       a.flags:=a.flags or ((__fErrorChar shl bp_DCB_fErrorChar) and bm_DCB_fErrorChar);
9597    end;
9598
9599  function fNull(var a : DCB) : DWORD;
9600    begin
9601       fNull:=(a.flags and bm_DCB_fNull) shr bp_DCB_fNull;
9602    end;
9603
9604  procedure set_fNull(var a : DCB; __fNull : DWORD);
9605    begin
9606       a.flags:=a.flags or ((__fNull shl bp_DCB_fNull) and bm_DCB_fNull);
9607    end;
9608
9609  function fRtsControl(var a : DCB) : DWORD;
9610    begin
9611       fRtsControl:=(a.flags and bm_DCB_fRtsControl) shr bp_DCB_fRtsControl;
9612    end;
9613
9614  procedure set_fRtsControl(var a : DCB; __fRtsControl : DWORD);
9615    begin
9616       a.flags:=a.flags or ((__fRtsControl shl bp_DCB_fRtsControl) and bm_DCB_fRtsControl);
9617    end;
9618
9619  function fAbortOnError(var a : DCB) : DWORD;
9620    begin
9621       fAbortOnError:=(a.flags and bm_DCB_fAbortOnError) shr bp_DCB_fAbortOnError;
9622    end;
9623
9624  procedure set_fAbortOnError(var a : DCB; __fAbortOnError : DWORD);
9625    begin
9626       a.flags:=a.flags or ((__fAbortOnError shl bp_DCB_fAbortOnError) and bm_DCB_fAbortOnError);
9627    end;
9628
9629  function fDummy2(var a : DCB) : DWORD;
9630    begin
9631       fDummy2:=(a.flags and bm_DCB_fDummy2) shr bp_DCB_fDummy2;
9632    end;
9633
9634  procedure set_fDummy2(var a : DCB; __fDummy2 : DWORD);
9635    begin
9636       a.flags:=a.flags or ((__fDummy2 shl bp_DCB_fDummy2) and bm_DCB_fDummy2);
9637    end;
9638
9639  function fCtsHold(var a : COMSTAT) : DWORD;
9640    begin
9641       fCtsHold:=(a.flag0 and bm_COMSTAT_fCtsHold) shr bp_COMSTAT_fCtsHold;
9642    end;
9643
9644  procedure set_fCtsHold(var a : COMSTAT; __fCtsHold : DWORD);
9645    begin
9646       a.flag0:=a.flag0 or ((__fCtsHold shl bp_COMSTAT_fCtsHold) and bm_COMSTAT_fCtsHold);
9647    end;
9648
9649  function fDsrHold(var a : COMSTAT) : DWORD;
9650    begin
9651       fDsrHold:=(a.flag0 and bm_COMSTAT_fDsrHold) shr bp_COMSTAT_fDsrHold;
9652    end;
9653
9654  procedure set_fDsrHold(var a : COMSTAT; __fDsrHold : DWORD);
9655    begin
9656       a.flag0:=a.flag0 or ((__fDsrHold shl bp_COMSTAT_fDsrHold) and bm_COMSTAT_fDsrHold);
9657    end;
9658
9659  function fRlsdHold(var a : COMSTAT) : DWORD;
9660    begin
9661       fRlsdHold:=(a.flag0 and bm_COMSTAT_fRlsdHold) shr bp_COMSTAT_fRlsdHold;
9662    end;
9663
9664  procedure set_fRlsdHold(var a : COMSTAT; __fRlsdHold : DWORD);
9665    begin
9666       a.flag0:=a.flag0 or ((__fRlsdHold shl bp_COMSTAT_fRlsdHold) and bm_COMSTAT_fRlsdHold);
9667    end;
9668
9669  function fXoffHold(var a : COMSTAT) : DWORD;
9670    begin
9671       fXoffHold:=(a.flag0 and bm_COMSTAT_fXoffHold) shr bp_COMSTAT_fXoffHold;
9672    end;
9673
9674  procedure set_fXoffHold(var a : COMSTAT; __fXoffHold : DWORD);
9675    begin
9676       a.flag0:=a.flag0 or ((__fXoffHold shl bp_COMSTAT_fXoffHold) and bm_COMSTAT_fXoffHold);
9677    end;
9678
9679  function fXoffSent(var a : COMSTAT) : DWORD;
9680    begin
9681       fXoffSent:=(a.flag0 and bm_COMSTAT_fXoffSent) shr bp_COMSTAT_fXoffSent;
9682    end;
9683
9684  procedure set_fXoffSent(var a : COMSTAT; __fXoffSent : DWORD);
9685    begin
9686       a.flag0:=a.flag0 or ((__fXoffSent shl bp_COMSTAT_fXoffSent) and bm_COMSTAT_fXoffSent);
9687    end;
9688
9689  function fEof(var a : COMSTAT) : DWORD;
9690    begin
9691       fEof:=(a.flag0 and bm_COMSTAT_fEof) shr bp_COMSTAT_fEof;
9692    end;
9693
9694  procedure set_fEof(var a : COMSTAT; __fEof : DWORD);
9695    begin
9696       a.flag0:=a.flag0 or ((__fEof shl bp_COMSTAT_fEof) and bm_COMSTAT_fEof);
9697    end;
9698
9699  function fTxim(var a : COMSTAT) : DWORD;
9700    begin
9701       fTxim:=(a.flag0 and bm_COMSTAT_fTxim) shr bp_COMSTAT_fTxim;
9702    end;
9703
9704  procedure set_fTxim(var a : COMSTAT; __fTxim : DWORD);
9705    begin
9706       a.flag0:=a.flag0 or ((__fTxim shl bp_COMSTAT_fTxim) and bm_COMSTAT_fTxim);
9707    end;
9708
9709  function fReserved(var a : COMSTAT) : DWORD;
9710    begin
9711       fReserved:=(a.flag0 and bm_COMSTAT_fReserved) shr bp_COMSTAT_fReserved;
9712    end;
9713
9714  procedure set_fReserved(var a : COMSTAT; __fReserved : DWORD);
9715    begin
9716       a.flag0:=a.flag0 or ((__fReserved shl bp_COMSTAT_fReserved) and bm_COMSTAT_fReserved);
9717    end;
9718
9719  function bAppReturnCode(var a : DDEACK) : word;
9720    begin
9721       bAppReturnCode:=(a.flag0 and bm_DDEACK_bAppReturnCode) shr bp_DDEACK_bAppReturnCode;
9722    end;
9723
9724  procedure set_bAppReturnCode(var a : DDEACK; __bAppReturnCode : word);
9725    begin
9726       a.flag0:=a.flag0 or ((__bAppReturnCode shl bp_DDEACK_bAppReturnCode) and bm_DDEACK_bAppReturnCode);
9727    end;
9728
9729  function reserved(var a : DDEACK) : word;
9730    begin
9731       reserved:=(a.flag0 and bm_DDEACK_reserved) shr bp_DDEACK_reserved;
9732    end;
9733
9734  procedure set_reserved(var a : DDEACK; __reserved : word);
9735    begin
9736       a.flag0:=a.flag0 or ((__reserved shl bp_DDEACK_reserved) and bm_DDEACK_reserved);
9737    end;
9738
9739  function fBusy(var a : DDEACK) : word;
9740    begin
9741       fBusy:=(a.flag0 and bm_DDEACK_fBusy) shr bp_DDEACK_fBusy;
9742    end;
9743
9744  procedure set_fBusy(var a : DDEACK; __fBusy : word);
9745    begin
9746       a.flag0:=a.flag0 or ((__fBusy shl bp_DDEACK_fBusy) and bm_DDEACK_fBusy);
9747    end;
9748
9749  function fAck(var a : DDEACK) : word;
9750    begin
9751       fAck:=(a.flag0 and bm_DDEACK_fAck) shr bp_DDEACK_fAck;
9752    end;
9753
9754  procedure set_fAck(var a : DDEACK; __fAck : word);
9755    begin
9756       a.flag0:=a.flag0 or ((__fAck shl bp_DDEACK_fAck) and bm_DDEACK_fAck);
9757    end;
9758
9759  function reserved(var a : DDEADVISE) : word;
9760    begin
9761       reserved:=(a.flag0 and bm_DDEADVISE_reserved) shr bp_DDEADVISE_reserved;
9762    end;
9763
9764  procedure set_reserved(var a : DDEADVISE; __reserved : word);
9765    begin
9766       a.flag0:=a.flag0 or ((__reserved shl bp_DDEADVISE_reserved) and bm_DDEADVISE_reserved);
9767    end;
9768
9769  function fDeferUpd(var a : DDEADVISE) : word;
9770    begin
9771       fDeferUpd:=(a.flag0 and bm_DDEADVISE_fDeferUpd) shr bp_DDEADVISE_fDeferUpd;
9772    end;
9773
9774  procedure set_fDeferUpd(var a : DDEADVISE; __fDeferUpd : word);
9775    begin
9776       a.flag0:=a.flag0 or ((__fDeferUpd shl bp_DDEADVISE_fDeferUpd) and bm_DDEADVISE_fDeferUpd);
9777    end;
9778
9779  function fAckReq(var a : DDEADVISE) : word;
9780    begin
9781       fAckReq:=(a.flag0 and bm_DDEADVISE_fAckReq) shr bp_DDEADVISE_fAckReq;
9782    end;
9783
9784  procedure set_fAckReq(var a : DDEADVISE; __fAckReq : word);
9785    begin
9786       a.flag0:=a.flag0 or ((__fAckReq shl bp_DDEADVISE_fAckReq) and bm_DDEADVISE_fAckReq);
9787    end;
9788
9789  function unused(var a : DDEDATA) : word;
9790    begin
9791       unused:=(a.flag0 and bm_DDEDATA_unused) shr bp_DDEDATA_unused;
9792    end;
9793
9794  procedure set_unused(var a : DDEDATA; __unused : word);
9795    begin
9796       a.flag0:=a.flag0 or ((__unused shl bp_DDEDATA_unused) and bm_DDEDATA_unused);
9797    end;
9798
9799  function fResponse(var a : DDEDATA) : word;
9800    begin
9801       fResponse:=(a.flag0 and bm_DDEDATA_fResponse) shr bp_DDEDATA_fResponse;
9802    end;
9803
9804  procedure set_fResponse(var a : DDEDATA; __fResponse : word);
9805    begin
9806       a.flag0:=a.flag0 or ((__fResponse shl bp_DDEDATA_fResponse) and bm_DDEDATA_fResponse);
9807    end;
9808
9809  function fRelease(var a : DDEDATA) : word;
9810    begin
9811       fRelease:=(a.flag0 and bm_DDEDATA_fRelease) shr bp_DDEDATA_fRelease;
9812    end;
9813
9814  procedure set_fRelease(var a : DDEDATA; __fRelease : word);
9815    begin
9816       a.flag0:=a.flag0 or ((__fRelease shl bp_DDEDATA_fRelease) and bm_DDEDATA_fRelease);
9817    end;
9818
9819  function reserved(var a : DDEDATA) : word;
9820    begin
9821       reserved:=(a.flag0 and bm_DDEDATA_reserved) shr bp_DDEDATA_reserved;
9822    end;
9823
9824  procedure set_reserved(var a : DDEDATA; __reserved : word);
9825    begin
9826       a.flag0:=a.flag0 or ((__reserved shl bp_DDEDATA_reserved) and bm_DDEDATA_reserved);
9827    end;
9828
9829  function fAckReq(var a : DDEDATA) : word;
9830    begin
9831       fAckReq:=(a.flag0 and bm_DDEDATA_fAckReq) shr bp_DDEDATA_fAckReq;
9832    end;
9833
9834  procedure set_fAckReq(var a : DDEDATA; __fAckReq : word);
9835    begin
9836       a.flag0:=a.flag0 or ((__fAckReq shl bp_DDEDATA_fAckReq) and bm_DDEDATA_fAckReq);
9837    end;
9838
9839  function unused(var a : DDELN) : word;
9840    begin
9841       unused:=(a.flag0 and bm_DDELN_unused) shr bp_DDELN_unused;
9842    end;
9843
9844  procedure set_unused(var a : DDELN; __unused : word);
9845    begin
9846       a.flag0:=a.flag0 or ((__unused shl bp_DDELN_unused) and bm_DDELN_unused);
9847    end;
9848
9849  function fRelease(var a : DDELN) : word;
9850    begin
9851       fRelease:=(a.flag0 and bm_DDELN_fRelease) shr bp_DDELN_fRelease;
9852    end;
9853
9854  procedure set_fRelease(var a : DDELN; __fRelease : word);
9855    begin
9856       a.flag0:=a.flag0 or ((__fRelease shl bp_DDELN_fRelease) and bm_DDELN_fRelease);
9857    end;
9858
9859  function fDeferUpd(var a : DDELN) : word;
9860    begin
9861       fDeferUpd:=(a.flag0 and bm_DDELN_fDeferUpd) shr bp_DDELN_fDeferUpd;
9862    end;
9863
9864  procedure set_fDeferUpd(var a : DDELN; __fDeferUpd : word);
9865    begin
9866       a.flag0:=a.flag0 or ((__fDeferUpd shl bp_DDELN_fDeferUpd) and bm_DDELN_fDeferUpd);
9867    end;
9868
9869  function fAckReq(var a : DDELN) : word;
9870    begin
9871       fAckReq:=(a.flag0 and bm_DDELN_fAckReq) shr bp_DDELN_fAckReq;
9872    end;
9873
9874  procedure set_fAckReq(var a : DDELN; __fAckReq : word);
9875    begin
9876       a.flag0:=a.flag0 or ((__fAckReq shl bp_DDELN_fAckReq) and bm_DDELN_fAckReq);
9877    end;
9878
9879  function unused(var a : DDEPOKE) : word;
9880    begin
9881       unused:=(a.flag0 and bm_DDEPOKE_unused) shr bp_DDEPOKE_unused;
9882    end;
9883
9884  procedure set_unused(var a : DDEPOKE; __unused : word);
9885    begin
9886       a.flag0:=a.flag0 or ((__unused shl bp_DDEPOKE_unused) and bm_DDEPOKE_unused);
9887    end;
9888
9889  function fRelease(var a : DDEPOKE) : word;
9890    begin
9891       fRelease:=(a.flag0 and bm_DDEPOKE_fRelease) shr bp_DDEPOKE_fRelease;
9892    end;
9893
9894  procedure set_fRelease(var a : DDEPOKE; __fRelease : word);
9895    begin
9896       a.flag0:=a.flag0 or ((__fRelease shl bp_DDEPOKE_fRelease) and bm_DDEPOKE_fRelease);
9897    end;
9898
9899  function fReserved(var a : DDEPOKE) : word;
9900    begin
9901       fReserved:=(a.flag0 and bm_DDEPOKE_fReserved) shr bp_DDEPOKE_fReserved;
9902    end;
9903
9904  procedure set_fReserved(var a : DDEPOKE; __fReserved : word);
9905    begin
9906       a.flag0:=a.flag0 or ((__fReserved shl bp_DDEPOKE_fReserved) and bm_DDEPOKE_fReserved);
9907    end;
9908
9909  function unused(var a : DDEUP) : word;
9910    begin
9911       unused:=(a.flag0 and bm_DDEUP_unused) shr bp_DDEUP_unused;
9912    end;
9913
9914  procedure set_unused(var a : DDEUP; __unused : word);
9915    begin
9916       a.flag0:=a.flag0 or ((__unused shl bp_DDEUP_unused) and bm_DDEUP_unused);
9917    end;
9918
9919  function fAck(var a : DDEUP) : word;
9920    begin
9921       fAck:=(a.flag0 and bm_DDEUP_fAck) shr bp_DDEUP_fAck;
9922    end;
9923
9924  procedure set_fAck(var a : DDEUP; __fAck : word);
9925    begin
9926       a.flag0:=a.flag0 or ((__fAck shl bp_DDEUP_fAck) and bm_DDEUP_fAck);
9927    end;
9928
9929  function fRelease(var a : DDEUP) : word;
9930    begin
9931       fRelease:=(a.flag0 and bm_DDEUP_fRelease) shr bp_DDEUP_fRelease;
9932    end;
9933
9934  procedure set_fRelease(var a : DDEUP; __fRelease : word);
9935    begin
9936       a.flag0:=a.flag0 or ((__fRelease shl bp_DDEUP_fRelease) and bm_DDEUP_fRelease);
9937    end;
9938
9939  function fReserved(var a : DDEUP) : word;
9940    begin
9941       fReserved:=(a.flag0 and bm_DDEUP_fReserved) shr bp_DDEUP_fReserved;
9942    end;
9943
9944  procedure set_fReserved(var a : DDEUP; __fReserved : word);
9945    begin
9946       a.flag0:=a.flag0 or ((__fReserved shl bp_DDEUP_fReserved) and bm_DDEUP_fReserved);
9947    end;
9948
9949  function fAckReq(var a : DDEUP) : word;
9950    begin
9951       fAckReq:=(a.flag0 and bm_DDEUP_fAckReq) shr bp_DDEUP_fAckReq;
9952    end;
9953
9954  procedure set_fAckReq(var a : DDEUP; __fAckReq : word);
9955    begin
9956       a.flag0:=a.flag0 or ((__fAckReq shl bp_DDEUP_fAckReq) and bm_DDEUP_fAckReq);
9957    end;
9958
9959  {$i typshrd.inc}
9960{$endif read_implementation}
9961
9962