1{
2    This file is part of the Free Pascal run time library.
3    This unit contains base 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  Base.h
18
19  Base definitions
20
21  Copyright (C) 1996, 1997 Free Software Foundation, Inc.
22
23  Author: Scott Christley <scottc@net-community.com>
24
25  This file is part of the Windows32 API Library.
26
27  This library is free software; you can redistribute it and/or
28  modify it under the terms of the GNU Library General Public
29  License as published by the Free Software Foundation; either
30  version 2 of the License, or (at your option) any later version.
31
32  This library is distributed in the hope that it will be useful,
33  but WITHOUT ANY WARRANTY; without even the implied warranty of
34  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
35  Library General Public License for more details.
36
37  If you are interested in a warranty or support for this source code,
38  contact Scott Christley <scottc@net-community.com> for more information.
39
40  You should have received a copy of the GNU Library General Public
41  License along with this library; see the file COPYING.LIB.
42  If not, write to the Free Software Foundation,
43  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
44}
45
46{$ifdef read_interface}
47
48{$PACKRECORDS C}
49
50  type
51     ATOM = word;
52     TAtom = ATOM;
53
54     WINBOOL = longbool;
55     BOOL = WINBOOL;
56
57     CALTYPE = cardinal;
58     CALID = cardinal;
59
60     CCHAR = char;
61
62     COLORREF = cardinal;
63     TCOLORREF = cardinal;
64
65     SHORT = smallint;
66     WINT  = longint;
67     LONG  = longint;
68     LONG64= int64;
69     ULONG64 = qword;     // imagehlp header.
70     ULONG32 = cardinal;
71     DWORD = cardinal;
72
73     PINTEGER = ^longint;
74     PBOOL    = ^BOOL;
75
76     LONGLONG  = int64;
77     PLONGLONG = ^LONGLONG;
78     LPLONGLONG = ^LONGLONG;
79     ULONGLONG  = qword;      // used in AMD64 CONTEXT
80     PULONGLONG = ^ULONGLONG; //
81     DWORD64 = qword;         //
82     PDWORD64 = ^DWORD64;     //
83
84
85     INT_PTR = PtrInt;
86     PINT_PTR = ^INT_PTR;
87     UINT_PTR = PtrUInt;
88     PUINT_PTR = ^UINT_PTR;
89     LONG_PTR = PtrInt;
90     ULONG_PTR = PtrUInt;
91     DWORD_PTR   = ULONG_PTR;
92     PDWORD_PTR  = ^DWORD_PTR;
93     PULONG64    = ^ULONG64;
94     PULONG32    = ^ULONG32;
95     PULONG_PTR  = ^ULONG_PTR;
96     PLONG64     = ^LONG64;
97
98     DWORDLONG  = qword;  { was unsigned long  }
99     PDWORDLONG = ^DWORDLONG;
100
101     HANDLE = System.THandle;
102     HRESULT = System.HResult;
103     PHRESULT= ^HRESULT;
104
105     HACCEL = HANDLE;
106     HBITMAP = HANDLE;
107     HBRUSH = HANDLE;
108     HCOLORSPACE = HANDLE;
109     HCONV = HANDLE;
110     HCONVLIST = HANDLE;
111     HCURSOR = HANDLE;
112     HDBC = HANDLE;
113     HDC = HANDLE;
114     HDDEDATA = HANDLE;
115     HDESK = HANDLE;
116     HDEVNOTIFY = HANDLE;
117     HDROP = HANDLE;
118     HDWP = HANDLE;
119     HENHMETAFILE = HANDLE;
120     HENV = HANDLE;
121     HFILE = HANDLE;
122     HFONT = HANDLE;
123     HGDIOBJ = HANDLE;
124     HGLOBAL = HANDLE;
125     HGLRC = HANDLE;
126     HHOOK = HANDLE;
127     HICON = HANDLE;
128     HIMAGELIST = HANDLE;
129     HINST = HANDLE;   { Not HINSTANCE, else it has problems with the var HInstance }
130     HKEY = HANDLE;
131     HKL = HANDLE;
132     HLOCAL = HANDLE;
133     HMENU = HANDLE;
134     HMETAFILE = HANDLE;
135     HMODULE = HANDLE;
136     HMONITOR = HANDLE;
137     HPALETTE = HANDLE;
138     HPEN = HANDLE;
139     HRASCONN = HANDLE;
140     HRGN = HANDLE;
141     HRSRC = HANDLE;
142     HSTMT = HANDLE;
143     HSTR  = HANDLE;
144     HSZ = HANDLE;
145     HWINSTA = HANDLE;
146     HWND = HANDLE;
147     HTASK = HANDLE;
148     HRAWINPUT = HANDLE;
149
150     LANGID = word;
151     LCID   = DWORD;
152     LCTYPE = DWORD;
153     LPARAM = LONG_PTR;
154
155     LP     = ^word;
156     LPBOOL = ^WINBOOL;
157     LPBYTE = pbyte;
158     LPCCH  = PCHAR;
159     LPCH   = PCHAR;
160
161     LPCOLORREF = ^COLORREF;
162
163     LPCSTR  = Pchar;
164{$ifdef UNICODE}
165     LPCTSTR = Pwidechar;
166{$else}
167     LPCTSTR = Pchar;
168{$endif}
169
170     LPCWCH  = Pwidechar;
171     LPCWSTR = Pwidechar;
172
173     LPPCSTR = ^LPCSTR;
174     LPPCTSTR = ^LPCTSTR;
175     LPPCWSTR = ^LPCWSTR;
176
177     LPDWORD = ^DWORD;
178
179     LPHANDLE = ^HANDLE;
180
181     LPINT  = ^longint;
182     LPLONG = ^longint;
183
184     LPSTR = Pchar;
185{$ifdef UNICODE}
186     LPTCH  = Pwidechar;
187     LPTSTR = Pwidechar;
188{$else}
189     LPTCH  = Pchar;
190     LPTSTR = Pchar;
191{$endif}
192
193     LRESULT = LONG_PTR;
194     PLRESULT= ^LRESULT;
195
196     LPVOID  = pointer;
197     LPCVOID = pointer;
198
199     LPWCH  = Pwidechar;
200     LPWORD = ^word;
201     LPWSTR = Pwidechar;
202     NWPSTR = Pwidechar;
203
204     LPPSTR = ^LPSTR;
205     LPPWSTR = ^LPWSTR;
206     LPPTSTR = ^LPTSTR;
207
208     PWINBOOL = ^WINBOOL;
209
210     PBYTE = System.PByte;
211
212     PCCH = PCHAR;
213     PCH  = PCHAR;
214
215     PCSTR = Pchar;
216
217     PCWCH  = Pwidechar;
218     PCWSTR = Pwidechar;
219
220     PDWORD = System.PDWORD;
221
222     PHANDLE = ^HANDLE;
223     PHKEY = ^HKEY;
224
225     PINT = ^longint;
226     PLONG = ^longint;
227     PSHORT = ^SHORT;
228
229     PSTR = Pchar;
230     PWSTR = LPWSTR;
231
232     PSZ = Pchar;
233{$ifdef UNICODE}
234     PTBYTE = ^word;
235     PTCH = Pwidechar;
236     PTCHAR = Pwidechar;
237     PTSTR = Pwidechar;
238{$else}
239     PTBYTE = ^byte;
240     PTCH   = Pchar;
241     PTCHAR = Pchar;
242     PTSTR  = Pchar;
243{$endif}
244
245     PUCHAR = ^byte;
246     PWCH   = Pwidechar;
247     PWCHAR = Pwidechar;
248
249     PWORD   = System.PWord;
250     PUINT   = ^cardinal;
251     PULONG  = ^cardinal;
252     PUSHORT = ^word;
253
254     PVOID = pointer;
255
256     RETCODE = SHORT;
257
258     SC_HANDLE = HANDLE;
259     SC_LOCK = LPVOID;
260     LPSC_HANDLE = ^SC_HANDLE;
261
262     SERVICE_STATUS_HANDLE = DWORD;
263
264
265{$ifdef UNICODE}
266     TBYTE = word;
267     TCHAR = widechar;
268     BCHAR = word;
269{$else}
270     TBYTE = byte;
271     TCHAR = ansichar;
272     BCHAR = BYTE;
273{$endif}
274
275     UCHAR = byte;
276     WCHAR = WideChar;
277
278     UINT   = cardinal;
279     ULONG  = cardinal;
280     USHORT = word;
281
282     WPARAM = LONG_PTR;
283     PLPSTR = ^LPSTR;
284     PLPWStr= ^LPWStr;
285     COLOR16 = ushort;
286{
287  Enumerations
288}
289
290     ACL_INFORMATION_CLASS = (AclRevisionInformation = 1,AclSizeInformation
291       );
292
293     _ACL_INFORMATION_CLASS = ACL_INFORMATION_CLASS;
294
295     MEDIA_TYPE = (Unknown,F5_1Pt2_512,F3_1Pt44_512,F3_2Pt88_512,
296       F3_20Pt8_512,F3_720_512,F5_360_512,F5_320_512,
297       F5_320_1024,F5_180_512,F5_160_512,RemovableMedia,
298       FixedMedia);
299
300     _MEDIA_TYPE = MEDIA_TYPE;
301
302  const
303     RASCS_DONE = $2000;
304     RASCS_PAUSED = $1000;
305
306  type
307
308     RASCONNSTATE = (RASCS_OpenPort = 0,RASCS_PortOpened,
309       RASCS_ConnectDevice,RASCS_DeviceConnected,
310       RASCS_AllDevicesConnected,RASCS_Authenticate,
311       RASCS_AuthNotify,RASCS_AuthRetry,RASCS_AuthCallback,
312       RASCS_AuthChangePassword,RASCS_AuthProject,
313       RASCS_AuthLinkSpeed,RASCS_AuthAck,RASCS_ReAuthenticate,
314       RASCS_Authenticated,RASCS_PrepareForCallback,
315       RASCS_WaitForModemReset,RASCS_WaitForCallback,
316       RASCS_Projected,RASCS_StartAuthentication,
317       RASCS_CallbackComplete,RASCS_LogonNetwork,
318       RASCS_Interactive = RASCS_PAUSED,RASCS_RetryAuthentication,
319       RASCS_CallbackSetByCaller,RASCS_PasswordExpired,
320       RASCS_Connected = RASCS_DONE,RASCS_Disconnected
321       );
322
323     _RASCONNSTATE = RASCONNSTATE;
324
325     RASPROJECTION = (RASP_PppIp = $8021, RASP_PppIpx = $802B, RASP_PppNbf = $803F,
326       RASP_Amb = $10000);
327
328     _RASPROJECTION = RASPROJECTION;
329
330     SECURITY_IMPERSONATION_LEVEL = (SecurityAnonymous,SecurityIdentification,
331       SecurityImpersonation,SecurityDelegation
332       );
333
334     _SECURITY_IMPERSONATION_LEVEL = SECURITY_IMPERSONATION_LEVEL;
335
336     SID_NAME_USE = (SidTypeUser = 1,SidTypeGroup,SidTypeDomain,
337       SidTypeAlias,SidTypeWellKnownGroup,SidTypeDeletedAccount,
338       SidTypeInvalid,SidTypeUnknown);
339
340     PSID_NAME_USE = ^SID_NAME_USE;
341
342     _SID_NAME_USE = SID_NAME_USE;
343
344     TOKEN_TYPE = (
345       TokenPrimary = 1,
346       TokenImpersonation
347     );
348     _TOKEN_TYPE = TOKEN_TYPE;
349     TTokenType = TOKEN_TYPE;
350
351     TOKEN_ELEVATION_TYPE = (
352       TokenElevationTypeDefault = 1,
353       TokenElevationTypeFull,
354       TokenElevationTypeLimited
355     );
356     _TOKEN_ELEVATION_TYPE = TOKEN_ELEVATION_TYPE;
357     TTokenElevationType = TOKEN_ELEVATION_TYPE;
358
359     TOKEN_INFORMATION_CLASS = (
360       TokenUser = 1,
361       TokenGroups,
362       TokenPrivileges,
363       TokenOwner,
364       TokenPrimaryGroup,
365       TokenDefaultDacl,
366       TokenSource,
367       TokenType,
368       TokenImpersonationLevel,
369       TokenStatistics,
370       TokenRestrictedSids,
371       TokenSessionId,
372       TokenGroupsAndPrivileges,
373       TokenSessionReference,
374       TokenSandBoxInert,
375       TokenAuditPolicy,
376       TokenOrigin,
377       TokenElevationType,
378       TokenLinkedToken,
379       TokenElevation,
380       TokenHasRestrictions,
381       TokenAccessInformation,
382       TokenVirtualizationAllowed,
383       TokenVirtualizationEnabled,
384       TokenIntegrityLevel,
385       TokenUIAccess,
386       TokenMandatoryPolicy,
387       TokenLogonSid,
388       MaxTokenInfoClass  // MaxTokenInfoClass should always be the last enum
389     );
390     _TOKEN_INFORMATION_CLASS = TOKEN_INFORMATION_CLASS;
391     TTokenInformationClass   = TOKEN_INFORMATION_CLASS;
392
393     _TOKEN_ELEVATION = record
394       TokenIsElevated: DWORD;
395     end;
396     TOKEN_ELEVATION = _TOKEN_ELEVATION;
397     TTokenElevation = _TOKEN_ELEVATION;
398     PTokenElevation = ^TTokenElevation;
399
400    _FINDEX_INFO_LEVELS = (FindExInfoStandard,FindExInfoBasic,FindExInfoMaxInfoLevel);
401    _FINDEX_SEARCH_OPS  = (FindExSearchNameMatch, FindExSearchLimitToDirectories,
402 			   FindExSearchLimitToDevices, FindExSearchMaxSearchOp);
403    TFINDEX_INFO_LEVELS = _FINDEX_INFO_LEVELS;
404    FINDEX_INFO_LEVELS  = _FINDEX_INFO_LEVELS;
405    PFINDEX_INFO_LEVELS = ^TFINDEX_INFO_LEVELS;
406    TFINDEX_SEARCH_OPS  = _FINDEX_SEARCH_OPS;
407    FINDEX_SEARCH_OPS   = _FINDEX_SEARCH_OPS;
408    PFINDEX_SEARCH_OPS  = ^TFINDEX_SEARCH_OPS;
409
410    PARTITION_STYLE     = (PARTITION_STYLE_MBR=0,PARTITION_STYLE_GPT,PARTITION_STYLE_RAW);
411    TPARTITION_STYLE    = PARTITION_STYLE;
412    PPARTITION_STYLE    = ^TPARTITION_STYLE;
413
414 {
415   Macros
416 }
417
418  MakeIntResourceA = PAnsiChar;
419  MakeIntResourceW = PWideChar;
420  {$ifdef UNICODE}
421    MakeIntResource = MakeIntResourceW;
422  {$else}
423    MakeIntResource = MakeIntResourceA;
424  {$endif}
425
426  { was #define dname(params) def_expr }
427  { argument types are unknown }
428  function GetBValue(rgb : longint) : BYTE; inline;
429
430  { was #define dname(params) def_expr }
431  { argument types are unknown }
432  function GetGValue(rgb : longint) : BYTE; inline;
433
434  { was #define dname(params) def_expr }
435  { argument types are unknown }
436  function GetRValue(rgb : longint) : BYTE; inline;
437
438  { was #define dname(params) def_expr }
439  { argument types are unknown }
440  function RGB(r,g,b : longint) : DWORD; inline;
441
442  {  Not convertable by H2PAS
443  #define HANDLE_WM_NOTIFY(hwnd, wParam, lParam, fn) \
444      (fn)((hwnd), (int)(wParam), (NMHDR FAR )(lParam))
445   }
446
447  { was #define dname(params) def_expr }
448  { argument types are unknown }
449  function HIBYTE(w : longint) : BYTE; inline;
450
451  { was #define dname(params) def_expr }
452  { argument types are unknown }
453  function HIWORD(l : longint) : WORD; inline;
454
455  { was #define dname(params) def_expr }
456  { argument types are unknown }
457  function LOBYTE(w : longint) : BYTE; inline;
458
459  { was #define dname(params) def_expr }
460  { argument types are unknown }
461  function LOWORD(l : longint) : WORD; inline;
462
463  { was #define dname(params) def_expr }
464  { argument types are unknown }
465  function MAKELONG(a,b : longint) : LONG; inline;
466
467  { was #define dname(params) def_expr }
468  { argument types are unknown }
469  function MAKEWORD(a,b : longint) : WORD; inline;
470
471  { original Cygnus headers also had the following defined:  }
472  { was #define dname(params) def_expr }
473  { argument types are unknown }
474  { return type might be wrong }
475  function SEXT_HIWORD(l : longint) : longint; inline;
476    { return type might be wrong }
477
478  { was #define dname(params) def_expr }
479  { argument types are unknown }
480  { return type might be wrong }
481  function ZEXT_HIWORD(l : longint) : longint; inline;
482    { return type might be wrong }
483
484  { was #define dname(params) def_expr }
485  { argument types are unknown }
486  function SEXT_LOWORD(l : longint) : longint; inline;
487
488  { was #define dname(params) def_expr }
489  { argument types are unknown }
490  { return type might be wrong }
491  function INDEXTOOVERLAYMASK(i : longint) : longint; inline;
492    { return type might be wrong }
493
494  { was #define dname(params) def_expr }
495  { argument types are unknown }
496  { return type might be wrong }
497  function INDEXTOSTATEIMAGEMASK(i : longint) : longint; inline;
498    { return type might be wrong }
499
500  { was #define dname(params) def_expr }
501  { argument types are unknown }
502  function MAKEINTATOM(i : longint) : LPTSTR; inline;
503
504  { was #define dname(params) def_expr }
505  { argument types are unknown }
506  { return type might be wrong }
507  function MAKELANGID(p,s : longint) : longint; inline;
508    { return type might be wrong }
509
510  { was #define dname(params) def_expr }
511  { argument types are unknown }
512  function PRIMARYLANGID(lgid : longint) : WORD; inline;
513
514  { was #define dname(params) def_expr }
515  { argument types are unknown }
516  { return type might be wrong }
517  function SUBLANGID(lgid : longint) : longint; inline;
518    { return type might be wrong }
519
520  { was #define dname(params) def_expr }
521  { argument types are unknown }
522  function LANGIDFROMLCID(lcid : longint) : WORD; inline;
523
524  { was #define dname(params) def_expr }
525  { argument types are unknown }
526  function SORTIDFROMLCID(lcid : longint) : WORD; inline;
527
528  { was #define dname(params) def_expr }
529  { argument types are unknown }
530  function MAKELCID(lgid,srtid : longint) : DWORD; inline;
531
532  { was #define dname(params) def_expr }
533  { argument types are unknown }
534  function MAKELPARAM(l,h : longint) : LPARAM; inline;
535
536  { was #define dname(params) def_expr }
537  { argument types are unknown }
538  function MAKELRESULT(l,h : longint) : LRESULT; inline;
539
540  {  Not convertable by H2PAS
541  #define MAKEPOINTS(l)   ( ((POINTS FAR  ) & (l)))
542   }
543  { was #define dname(params) def_expr }
544  { argument types are unknown }
545  function MAKEROP4(fore,back : DWord ) : DWORD; inline;
546
547  { was #define dname(params) def_expr }
548  { argument types are unknown }
549  function MAKEWPARAM(l,h : longint) : WPARAM; inline;
550
551  function GET_X_LPARAM(lp : Windows.LParam) : longint; inline;
552
553  function GET_Y_LPARAM(lp : Windows.LParam) : longint; inline;
554
555  {$ifndef max}
556  { was #define dname(params) def_expr }
557  { argument types are unknown }
558  { return type might be wrong }
559  function max(a,b : longint) : longint;  inline;
560    { return type might be wrong }
561
562{$endif}
563{$ifndef min}
564  { was #define dname(params) def_expr }
565  { argument types are unknown }
566  { return type might be wrong }
567  function min(a,b : longint) : longint; inline;
568    { return type might be wrong }
569
570{$endif}
571  { was #define dname(params) def_expr }
572  { argument types are unknown }
573  function PALETTEINDEX(i : longint) : COLORREF; inline;
574
575  { was #define dname(params) def_expr }
576  { argument types are unknown }
577  { return type might be wrong }
578  function PALETTERGB(r,g,b : longint) : longint; inline;
579    { return type might be wrong }
580
581  (*  Not convertable by H2PAS
582  #define POINTSTOPOINT(pt, pts) {(pt).x = (SHORT) LOWORD(pts); \
583        (pt).y = (SHORT) HIWORD(pts);}
584  #define POINTTOPOINTS(pt) \
585      (MAKELONG((short) ((pt).x), (short) ((pt).y)))
586   *)
587  { already declared before
588  #define INDEXTOOVERLAYMASK(i) ((i) << 8)
589  #define INDEXTOSTATEIMAGEMASK(i) ((i) << 12)
590   }
591  {  Not convertable by H2PAS
592  #ifdef UNICODE
593  #define TEXT(quote) L##quote
594  #else
595  #define TEXT(quote) quote
596  #endif
597   }
598
599
600  function IMAGE_ORDINAL64(Ordinal : uint64) : uint64; inline;
601  function IMAGE_ORDINAL32(Ordinal : cardinal) : cardinal;inline;
602  function IMAGE_SNAP_BY_ORDINAL64(Ordinal : uint64) : boolean;  inline;
603  function IMAGE_SNAP_BY_ORDINAL32(Ordinal : cardinal) : boolean; inline;
604  {$ifdef WIN64}
605    function IMAGE_ORDINAL(Ordinal : uint64) : uint64; inline;
606    function IMAGE_SNAP_BY_ORDINAL(Ordinal : uint64) : boolean; inline;
607  {$else}
608    function IMAGE_ORDINAL(Ordinal : cardinal) : cardinal; inline;
609    function IMAGE_SNAP_BY_ORDINAL(Ordinal : cardinal) : boolean; inline;
610  {$endif}
611
612
613
614 {
615    Definitions for callback procedures
616 }
617
618 type
619
620     BFFCALLBACK = function (_para1:HWND; _para2:UINT; _para3:LPARAM; _para4:LPARAM):longint;stdcall;
621
622     LPCCHOOKPROC = function (_para1:HWND; _para2:UINT; _para3:WPARAM; _para4:LPARAM):UINT_PTR;stdcall;
623
624     LPCFHOOKPROC = function (_para1:HWND; _para2:UINT; _para3:WPARAM; _para4:LPARAM):UINT_PTR;stdcall;
625
626     PTHREAD_START_ROUTINE = Pointer;
627
628     LPTHREAD_START_ROUTINE = PTHREAD_START_ROUTINE;
629
630     EDITSTREAMCALLBACK = function (_para1:DWORD_PTR; _para2:LPBYTE; _para3:LONG; _para4:PLONG):DWORD;stdcall;
631
632     LPFRHOOKPROC = function (_para1:HWND; _para2:UINT; _para3:WPARAM; _para4:LPARAM):UINT_PTR;stdcall;
633
634     LPOFNHOOKPROC = function (_para1:HWND; _para2:UINT; _para3:WPARAM; _para4:LPARAM):UINT_PTR;stdcall;
635
636     LPPRINTHOOKPROC = function (_para1:HWND; _para2:UINT; _para3:WPARAM; _para4:LPARAM):UINT_PTR;stdcall;
637
638     LPSETUPHOOKPROC = function (_para1:HWND; _para2:UINT; _para3:WPARAM; _para4:LPARAM):UINT_PTR;stdcall;
639
640     DLGPROC = function (_para1:HWND; _para2:UINT; _para3:WPARAM; _para4:LPARAM):LRESULT;stdcall;
641
642     PFNPROPSHEETCALLBACK = function (_para1:HWND; _para2:UINT; _para3:LPARAM):longint;stdcall;
643
644     LPSERVICE_MAIN_FUNCTION  = procedure (_para1:DWORD; _para2:LPPTSTR);stdcall;
645     LPSERVICE_MAIN_FUNCTIONA = procedure (_para1:DWORD; _para2:LPPSTR);stdcall;
646     LPSERVICE_MAIN_FUNCTIONW = procedure (_para1:DWORD; _para2:LPPWSTR);stdcall;
647
648     PFNTVCOMPARE = function (_para1:LPARAM; _para2:LPARAM; _para3:LPARAM):longint;stdcall;
649
650     WNDPROC = function (_para1:HWND; _para2:UINT; _para3:WPARAM; _para4:LPARAM):LRESULT;stdcall;
651
652     FARPROC = pointer;
653
654     TFarProc = FARPROC;
655
656     TFNWndProc = TFarProc;
657
658     PROC = FARPROC;
659
660     ENUMRESTYPEPROC = function (hModule:HMODULE; lpszType:LPTSTR; lParam:LONG_PTR):WINBOOL;stdcall;
661     ENUMRESTYPEPROCA = function (hModule:HMODULE; lpszType:LPSTR; lParam:LONG_PTR):WINBOOL;stdcall;
662     ENUMRESTYPEPROCW = function (hModule:HMODULE; lpszType:LPWSTR; lParam:LONG_PTR):WINBOOL;stdcall;
663
664     ENUMRESNAMEPROC = function (hModule:HMODULE; lpszType:LPCTSTR; lpszName:LPTSTR; lParam:LONG_PTR):WINBOOL;stdcall;
665     ENUMRESNAMEPROCA= function (hModule:HMODULE; lpszType:LPCSTR;  lpszName:LPSTR;  lParam:LONG_PTR):WINBOOL;stdcall;
666     ENUMRESNAMEPROCW= function (hModule:HMODULE; lpszType:LPCWSTR; lpszName:LPWSTR; lParam:LONG_PTR):WINBOOL;stdcall;
667
668     ENUMRESLANGPROC = function (hModule:HMODULE; lpszType:LPCTSTR; lpszName:LPCTSTR; wIDLanguage:WORD; lParam:LONG_PTR):WINBOOL;stdcall;
669     ENUMRESLANGPROCA= function (hModule:HMODULE; lpszType:LPCSTR;  lpszName:LPCSTR;  wIDLanguage:WORD; lParam:LONG_PTR):WINBOOL;stdcall;
670     ENUMRESLANGPROCW= function (hModule:HMODULE; lpszType:LPCWSTR; lpszName:LPCWSTR; wIDLanguage:WORD; lParam:LONG_PTR):WINBOOL;stdcall;
671     DESKTOPENUMPROC = FARPROC;
672
673     ENUMWINDOWSPROC = function (_para1:HWND; _para2:LPARAM):WINBOOL;stdcall;
674
675     ENUMWINDOWSTATIONPROC = function (_para1:LPTSTR; _para2:LPARAM):WINBOOL;stdcall;
676     ENUMWINDOWSTATIONPROCA = function (_para1:LPSTR; _para2:LPARAM):WINBOOL;stdcall;
677     ENUMWINDOWSTATIONPROCW = function (_para1:LPWSTR; _para2:LPARAM):WINBOOL;stdcall;
678
679     SENDASYNCPROC = procedure (_para1:HWND; _para2:UINT; _para3:ULONG_PTR; _para4:LRESULT);stdcall;
680
681     TIMERPROC = procedure (hWnd: HWND; uMsg: UINT; idEvent: UINT_PTR; dwTime: DWORD); stdcall;
682
683     GRAYSTRINGPROC = FARPROC;
684
685     DRAWSTATEPROC = function (_para1:HDC; _para2:LPARAM; _para3:WPARAM; _para4:longint; _para5:longint):WINBOOL;stdcall;
686
687     PROPENUMPROCEXA = function (_para1:HWND; _para2:LPCSTR;  _para3:HANDLE; _para4:ULONG_PTR):WINBOOL;stdcall;
688     PROPENUMPROCEXW = function (_para1:HWND; _para2:LPCWSTR; _para3:HANDLE; _para4:ULONG_PTR):WINBOOL;stdcall;
689     PROPENUMPROCEX  = function (_para1:HWND; _para2:LPCTSTR; _para3:HANDLE; _para4:ULONG_PTR):WINBOOL;stdcall;
690
691     PROPENUMPROCA = function (_para1:HWND; _para2:LPCSTR;  _para3:HANDLE):WINBOOL;stdcall;
692     PROPENUMPROCW = function (_para1:HWND; _para2:LPCWSTR; _para3:HANDLE):WINBOOL;stdcall;
693     PROPENUMPROC  = function (_para1:HWND; _para2:LPCTSTR; _para3:HANDLE):WINBOOL;stdcall;
694
695     HOOKPROC = function (_para1:longint; _para2:WPARAM; _para3:LPARAM):LRESULT;stdcall;
696
697     ENUMOBJECTSPROC = procedure (_para1:LPVOID; _para2:LPARAM);stdcall;
698
699     LINEDDAPROC = procedure (_para1:longint; _para2:longint; _para3:LPARAM);stdcall;
700
701     TABORTPROC = function (_para1:HDC; _para2:longint):WINBOOL;stdcall;
702
703     LPPAGEPAINTHOOK = function (_para1:HWND; _para2:UINT; _para3:WPARAM; _para4:LPARAM):UINT_PTR;stdcall;
704
705     LPPAGESETUPHOOK = function (_para1:HWND; _para2:UINT; _para3:WPARAM; _para4:LPARAM):UINT_PTR;stdcall;
706
707     ICMENUMPROCA = function (_para1:LPSTR;  _para2:LPARAM):longint;stdcall;
708     ICMENUMPROCW = function (_para1:LPWSTR; _para2:LPARAM):longint;stdcall;
709     ICMENUMPROC = function  (_para1:LPTSTR; _para2:LPARAM):longint;stdcall;
710
711     EDITWORDBREAKPROCEX = function (_para1:pchar; _para2:LONG; _para3:BYTE; _para4:WINT):LONG;stdcall;
712
713     PFNLVCOMPARE = function (_para1:LPARAM; _para2:LPARAM; _para3:LPARAM):longint;stdcall;
714
715     LOCALE_ENUMPROCA = function (_para1:LPSTR):WINBOOL;stdcall;
716     LOCALE_ENUMPROCW = function (_para1:LPWSTR):WINBOOL;stdcall;
717     LOCALE_ENUMPROC  = function (_para1:LPTSTR):WINBOOL;stdcall;
718
719     CODEPAGE_ENUMPROCA = function (_para1:LPSTR):WINBOOL;stdcall;
720     CODEPAGE_ENUMPROCW = function (_para1:LPWSTR):WINBOOL;stdcall;
721     CODEPAGE_ENUMPROC  = function (_para1:LPTSTR):WINBOOL;stdcall;
722
723     DATEFMT_ENUMPROCA = function (_para1:LPSTR):WINBOOL;stdcall;
724     DATEFMT_ENUMPROCW = function (_para1:LPWSTR):WINBOOL;stdcall;
725     DATEFMT_ENUMPROC  = function (_para1:LPTSTR):WINBOOL;stdcall;
726
727     TIMEFMT_ENUMPROCA = function (_para1:LPSTR):WINBOOL;stdcall;
728     TIMEFMT_ENUMPROCW = function (_para1:LPWSTR):WINBOOL;stdcall;
729     TIMEFMT_ENUMPROC  = function (_para1:LPTSTR):WINBOOL;stdcall;
730
731     CALINFO_ENUMPROCA= function (_para1:LPSTR):WINBOOL;stdcall;
732     CALINFO_ENUMPROCW= function (_para1:LPWSTR):WINBOOL;stdcall;
733     CALINFO_ENUMPROC = function (_para1:LPTSTR):WINBOOL;stdcall;
734
735     PHANDLER_ROUTINE = function (_para1:DWORD):WINBOOL;stdcall;
736
737     LPHANDLER_FUNCTION = function (_para1:DWORD):WINBOOL;stdcall;
738
739     PFNGETPROFILEPATHA = function (_para1:LPCSTR; _para2:LPSTR; _para3:UINT):UINT;stdcall;
740     PFNGETPROFILEPATHW = function (_para1:LPCWSTR; _para2:LPSTR; _para3:UINT):UINT;stdcall;
741     PFNGETPROFILEPATH  = function (_para1:LPCTSTR; _para2:LPSTR; _para3:UINT):UINT;stdcall;
742
743     PFNRECONCILEPROFILEA = function (_para1:LPCSTR; _para2:LPCSTR; _para3:DWORD):UINT;stdcall;
744     PFNRECONCILEPROFILEW = function (_para1:LPCWSTR; _para2:LPCWSTR; _para3:DWORD):UINT;stdcall;
745     PFNRECONCILEPROFILE  = function (_para1:LPCTSTR; _para2:LPCTSTR; _para3:DWORD):UINT;stdcall;
746
747     PFNPROCESSPOLICIESA = function (_para1:HWND; _para2:LPCSTR; _para3:LPCSTR; _para4:LPCSTR; _para5:DWORD):WINBOOL;stdcall;
748     PFNPROCESSPOLICIESW = function (_para1:HWND; _para2:LPCWSTR; _para3:LPCWSTR; _para4:LPCWSTR; _para5:DWORD):WINBOOL;stdcall;
749     PFNPROCESSPOLICIES  = function (_para1:HWND; _para2:LPCTSTR; _para3:LPCTSTR; _para4:LPCTSTR; _para5:DWORD):WINBOOL;stdcall;
750     TIMEFMT_ENUMPROCEX  = function (TimeFormat : LPWSTR; AppData : LPARAM) : BOOL; stdcall;
751
752  (*  Not convertable by H2PAS
753  #define SECURITY_NULL_SID_AUTHORITY     {0,0,0,0,0,0}
754  #define SECURITY_WORLD_SID_AUTHORITY    {0,0,0,0,0,1}
755  #define SECURITY_LOCAL_SID_AUTHORITY    {0,0,0,0,0,2}
756  #define SECURITY_CREATOR_SID_AUTHORITY  {0,0,0,0,0,3}
757  #define SECURITY_NON_UNIQUE_AUTHORITY   {0,0,0,0,0,4}
758  #define SECURITY_NT_AUTHORITY           {0,0,0,0,0,5}
759   *)
760  { TEXT("String") replaced by "String" below for H2PAS  }
761
762  const
763     SE_CREATE_TOKEN_NAME = 'SeCreateTokenPrivilege';
764     SE_ASSIGNPRIMARYTOKEN_NAME = 'SeAssignPrimaryTokenPrivilege';
765     SE_LOCK_MEMORY_NAME = 'SeLockMemoryPrivilege';
766     SE_INCREASE_QUOTA_NAME = 'SeIncreaseQuotaPrivilege';
767     SE_UNSOLICITED_INPUT_NAME = 'SeUnsolicitedInputPrivilege';
768     SE_MACHINE_ACCOUNT_NAME = 'SeMachineAccountPrivilege';
769     SE_TCB_NAME = 'SeTcbPrivilege';
770     SE_SECURITY_NAME = 'SeSecurityPrivilege';
771     SE_TAKE_OWNERSHIP_NAME = 'SeTakeOwnershipPrivilege';
772     SE_LOAD_DRIVER_NAME = 'SeLoadDriverPrivilege';
773     SE_SYSTEM_PROFILE_NAME = 'SeSystemProfilePrivilege';
774     SE_SYSTEMTIME_NAME = 'SeSystemtimePrivilege';
775     SE_PROF_SINGLE_PROCESS_NAME = 'SeProfileSingleProcessPrivilege';
776     SE_INC_BASE_PRIORITY_NAME = 'SeIncreaseBasePriorityPrivilege';
777     SE_CREATE_PAGEFILE_NAME = 'SeCreatePagefilePrivilege';
778     SE_CREATE_PERMANENT_NAME = 'SeCreatePermanentPrivilege';
779     SE_BACKUP_NAME = 'SeBackupPrivilege';
780     SE_RESTORE_NAME = 'SeRestorePrivilege';
781     SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
782     SE_DEBUG_NAME = 'SeDebugPrivilege';
783     SE_AUDIT_NAME = 'SeAuditPrivilege';
784     SE_SYSTEM_ENVIRONMENT_NAME = 'SeSystemEnvironmentPrivilege';
785     SE_CHANGE_NOTIFY_NAME = 'SeChangeNotifyPrivilege';
786     SE_REMOTE_SHUTDOWN_NAME = 'SeRemoteShutdownPrivilege';
787  {  Not convertable by H2PAS
788  #define SERVICES_ACTIVE_DATABASEW      L"ServicesActive"
789  #define SERVICES_FAILED_DATABASEW      L"ServicesFailed"
790   }
791     SERVICES_ACTIVE_DATABASEA = 'ServicesActive';
792     SERVICES_FAILED_DATABASEA = 'ServicesFailed';
793     SERVICES_ACTIVE_DATABASEW = 'ServicesActive'#0000;
794     SERVICES_FAILED_DATABASEW = 'ServicesFailed'#0000;
795
796  {  Not convertable by H2PAS
797  #define SC_GROUP_IDENTIFIERW           L'+'
798   }
799     SC_GROUP_IDENTIFIERA = '+';
800     SC_GROUP_IDENTIFIERW = '+'#0000;
801{$ifdef UNICODE}
802     SERVICES_ACTIVE_DATABASE = SERVICES_ACTIVE_DATABASEW;
803     SERVICES_FAILED_DATABASE = SERVICES_FAILED_DATABASEW;
804     SC_GROUP_IDENTIFIER = SC_GROUP_IDENTIFIERW;
805{$else}
806     SERVICES_ACTIVE_DATABASE = SERVICES_ACTIVE_DATABASEA;
807     SERVICES_FAILED_DATABASE = SERVICES_FAILED_DATABASEA;
808     SC_GROUP_IDENTIFIER = SC_GROUP_IDENTIFIERA;
809{$endif}
810
811type
812
813     { PFNCALLBACK = CALLB; }
814     PFNCALLBACK = function(_para1, _para2: UINT;_para3: HCONV;_para4, _para5: HSZ; _para6: HDDEDATA;_para7 ,_para8 :DWORD): HDDEData;stdcall;
815     { CALLB = procedure ;CDECL; }
816       CALLB = PFNCALLBACK;
817
818
819     SECURITY_CONTEXT_TRACKING_MODE = WINBOOL;
820  { End of stuff from ddeml.h in old Cygnus headers  }
821  { -----------------------------------------------  }
822
823     WNDENUMPROC = FARPROC;
824
825     ENHMFENUMPROC = FARPROC;
826
827     CCSTYLE = DWORD;
828
829     PCCSTYLE = ^CCSTYLE;
830
831     LPCCSTYLE = ^CCSTYLE;
832
833     CCSTYLEFLAGA = DWORD;
834
835     PCCSTYLEFLAGA = ^CCSTYLEFLAGA;
836
837     LPCCSTYLEFLAGA = ^CCSTYLEFLAGA;
838
839{$endif read_interface}
840
841
842{$ifdef read_implementation}
843
844  { was #define dname(params) def_expr }
845  { argument types are unknown }
846  function GetBValue(rgb : longint) : BYTE;
847    begin
848       GetBValue:=BYTE(rgb shr 16);
849    end;
850
851  { was #define dname(params) def_expr }
852  { argument types are unknown }
853  function GetGValue(rgb : longint) : BYTE;
854    begin
855       GetGValue:=BYTE((WORD(rgb)) shr 8);
856    end;
857
858  { was #define dname(params) def_expr }
859  { argument types are unknown }
860  function GetRValue(rgb : longint) : BYTE;
861    begin
862       GetRValue:=BYTE(rgb);
863    end;
864
865  { was #define dname(params) def_expr }
866  { argument types are unknown }
867  function RGB(r,g,b : longint) : DWORD;
868    begin
869       RGB:=DWORD(((DWORD(BYTE(r))) or ((DWORD(WORD(g))) shl 8)) or ((DWORD(BYTE(b))) shl 16));
870    end;
871
872  { was #define dname(params) def_expr }
873  { argument types are unknown }
874  function HIBYTE(w : longint) : BYTE;
875    begin
876       HIBYTE:=BYTE(((WORD(w)) shr 8) and $FF);
877    end;
878
879  { was #define dname(params) def_expr }
880  { argument types are unknown }
881  function HIWORD(l : longint) : WORD;
882    begin
883       HIWORD:=WORD(((DWORD(l)) shr 16) and $FFFF);
884    end;
885
886  { was #define dname(params) def_expr }
887  { argument types are unknown }
888  function LOBYTE(w : longint) : BYTE;
889    begin
890       LOBYTE:=BYTE(w);
891    end;
892
893  { was #define dname(params) def_expr }
894  { argument types are unknown }
895  function LOWORD(l : longint) : WORD;
896    begin
897       LOWORD:=WORD(l);
898    end;
899
900  { was #define dname(params) def_expr }
901  { argument types are unknown }
902  function MAKELONG(a,b : longint) : LONG;
903    begin
904       MAKELONG:=LONG((WORD(a)) or ((DWORD(WORD(b))) shl 16));
905    end;
906
907  { was #define dname(params) def_expr }
908  { argument types are unknown }
909  function MAKEWORD(a,b : longint) : WORD;
910    begin
911       MAKEWORD:=WORD((BYTE(a)) or ((WORD(BYTE(b))) shl 8));
912    end;
913
914  { was #define dname(params) def_expr }
915  { argument types are unknown }
916  { return type might be wrong }
917  function SEXT_HIWORD(l : longint) : longint;
918    { return type might be wrong }
919    begin
920       SEXT_HIWORD:=(longint(l)) shr 16;
921    end;
922
923  { was #define dname(params) def_expr }
924  { argument types are unknown }
925  { return type might be wrong }
926  function ZEXT_HIWORD(l : longint) : longint;
927    { return type might be wrong }
928    begin
929       ZEXT_HIWORD:=(cardinal(l)) shr 16;
930    end;
931
932  { was #define dname(params) def_expr }
933  { argument types are unknown }
934  function SEXT_LOWORD(l : longint) : longint;
935    begin
936       SEXT_LOWORD:=longint(SHORT(l));
937    end;
938
939  { was #define dname(params) def_expr }
940  { argument types are unknown }
941  { return type might be wrong }
942  function INDEXTOOVERLAYMASK(i : longint) : longint;
943    { return type might be wrong }
944    begin
945       INDEXTOOVERLAYMASK:=i shl 8;
946    end;
947
948  { was #define dname(params) def_expr }
949  { argument types are unknown }
950  { return type might be wrong }
951  function INDEXTOSTATEIMAGEMASK(i : longint) : longint;
952    { return type might be wrong }
953    begin
954       INDEXTOSTATEIMAGEMASK:=i shl 12;
955    end;
956
957  { was #define dname(params) def_expr }
958  { argument types are unknown }
959  function MAKEINTATOM(i : longint) : LPTSTR;
960    begin
961       MAKEINTATOM:=LPTSTR(ULONG_PTR(WORD(i)));
962    end;
963
964
965  { was #define dname(params) def_expr }
966  { argument types are unknown }
967  { return type might be wrong }
968  function MAKELANGID(p,s : longint) : longint;
969    { return type might be wrong }
970    begin
971       MAKELANGID:=((WORD(s)) shl 10) or (WORD(p));
972    end;
973
974  { was #define dname(params) def_expr }
975  { argument types are unknown }
976  function PRIMARYLANGID(lgid : longint) : WORD;
977    begin
978       { PRIMARYLANGID:=WORD(lgid(@($3ff)));
979         h2pas error here corrected by hand PM }
980       PRIMARYLANGID:=WORD(lgid) and ($3ff);
981    end;
982
983  { was #define dname(params) def_expr }
984  { argument types are unknown }
985  { return type might be wrong }
986  function SUBLANGID(lgid : longint) : longint;
987    { return type might be wrong }
988    begin
989       SUBLANGID:=(WORD(lgid)) shr 10;
990    end;
991
992  { was #define dname(params) def_expr }
993  { argument types are unknown }
994  function LANGIDFROMLCID(lcid : longint) : WORD;
995    begin
996       LANGIDFROMLCID:=WORD(lcid);
997    end;
998
999  { was #define dname(params) def_expr }
1000  { argument types are unknown }
1001  function SORTIDFROMLCID(lcid : longint) : WORD;
1002    begin
1003       SORTIDFROMLCID:=WORD(((DWORD(lcid)) and $000FFFFF) shr 16);
1004    end;
1005
1006  { was #define dname(params) def_expr }
1007  { argument types are unknown }
1008  function MAKELCID(lgid,srtid : longint) : DWORD;
1009    begin
1010       MAKELCID:=DWORD(((DWORD(WORD(srtid))) shl 16) or (DWORD(WORD(lgid))));
1011    end;
1012
1013  { was #define dname(params) def_expr }
1014  { argument types are unknown }
1015  function MAKELPARAM(l,h : longint) : LPARAM;
1016    begin
1017       MAKELPARAM:=LPARAM(MAKELONG(l,h));
1018    end;
1019
1020  { was #define dname(params) def_expr }
1021  { argument types are unknown }
1022  function MAKELRESULT(l,h : longint) : LRESULT;
1023    begin
1024       MAKELRESULT:=LRESULT(MAKELONG(l,h));
1025    end;
1026
1027  { was #define dname(params) def_expr }
1028  { argument types are unknown }
1029  function MAKEROP4(fore,back : DWOrd ) : DWORD;
1030    begin
1031       MAKEROP4:=((back shl 8) and $FF000000) or fore;
1032    end;
1033
1034  { was #define dname(params) def_expr }
1035  { argument types are unknown }
1036  function MAKEWPARAM(l,h : longint) : WPARAM;
1037    begin
1038       MAKEWPARAM:=WPARAM(MAKELONG(l,h));
1039    end;
1040
1041  function GET_X_LPARAM(lp : Windows.LParam) : longint;
1042    begin
1043      result:=smallint(LOWORD(lp));
1044    end;
1045
1046  function GET_Y_LPARAM(lp : Windows.LParam) : longint;
1047    begin
1048      result:=smallint(HIWORD(lp));
1049    end;
1050
1051  { was #define dname(params) def_expr }
1052  { argument types are unknown }
1053  { return type might be wrong }
1054  function max(a,b : longint) : longint;
1055    begin
1056       if a > b then
1057         max:=a
1058       else
1059         max:=b;
1060    end;
1061
1062  { was #define dname(params) def_expr }
1063  { argument types are unknown }
1064  { return type might be wrong }
1065  function min(a,b : longint) : longint;
1066    begin
1067       if a < b then
1068         min:=a
1069       else
1070         min:=b;
1071    end;
1072
1073  { was #define dname(params) def_expr }
1074  { argument types are unknown }
1075  function PALETTEINDEX(i : longint) : COLORREF;
1076    begin
1077       PALETTEINDEX:=COLORREF($01000000 or (DWORD(WORD(i))));
1078    end;
1079
1080  { was #define dname(params) def_expr }
1081  { argument types are unknown }
1082  { return type might be wrong }
1083  function PALETTERGB(r,g,b : longint) : longint;
1084    { return type might be wrong }
1085    begin
1086       PALETTERGB:=$02000000 or (RGB(r,g,b));
1087    end;
1088
1089  function IMAGE_ORDINAL64(Ordinal : uint64) : uint64;
1090  begin
1091    IMAGE_ORDINAL64:=Ordinal and $ffff;
1092  end;
1093
1094  function IMAGE_ORDINAL32(Ordinal : cardinal) : cardinal;
1095  begin
1096    IMAGE_ORDINAL32:=Ordinal and $ffff;
1097  end;
1098
1099  function IMAGE_SNAP_BY_ORDINAL64(Ordinal : uint64) : boolean;
1100  begin
1101    IMAGE_SNAP_BY_ORDINAL64:=(Ordinal and IMAGE_ORDINAL_FLAG64)<>0;
1102  end;
1103
1104  function IMAGE_SNAP_BY_ORDINAL32(Ordinal : cardinal) : boolean;
1105  begin
1106    IMAGE_SNAP_BY_ORDINAL32:=(Ordinal and IMAGE_ORDINAL_FLAG32)<>0;
1107  end;
1108
1109  {$ifdef win64}
1110  function IMAGE_ORDINAL(Ordinal : uint64) : uint64;
1111  begin
1112    IMAGE_ORDINAL:=IMAGE_ORDINAL64(Ordinal);
1113  end;
1114
1115
1116  function IMAGE_SNAP_BY_ORDINAL(Ordinal : uint64) : boolean;
1117  begin
1118    IMAGE_SNAP_BY_ORDINAL:=IMAGE_SNAP_BY_ORDINAL64(Ordinal);
1119  end;
1120
1121  {$else}
1122
1123  function IMAGE_ORDINAL(Ordinal : cardinal) : cardinal;
1124  begin
1125    IMAGE_ORDINAL:=IMAGE_ORDINAL32(Ordinal);
1126  end;
1127
1128  function IMAGE_SNAP_BY_ORDINAL(Ordinal : cardinal) : boolean;
1129  begin
1130    IMAGE_SNAP_BY_ORDINAL:=IMAGE_SNAP_BY_ORDINAL32(Ordinal);
1131  end;
1132 {$endif}
1133{$endif read_implementation}
1134
1135