~ubuntu-branches/debian/lenny/fpc/lenny

« back to all changes in this revision

Viewing changes to fpcsrc/packages/base/winunits/jwawinnt.pas

  • Committer: Bazaar Package Importer
  • Author(s): Mazen Neifer, Torsten Werner, Mazen Neifer
  • Date: 2008-05-17 17:12:11 UTC
  • mfrom: (3.1.9 intrepid)
  • Revision ID: james.westby@ubuntu.com-20080517171211-9qi33xhd9evfa0kg
Tags: 2.2.0-dfsg1-9
[ Torsten Werner ]
* Add Mazen Neifer to Uploaders field.

[ Mazen Neifer ]
* Moved FPC sources into a version dependent directory from /usr/share/fpcsrc
  to /usr/share/fpcsrc/${FPCVERSION}. This allow installing more than on FPC
  release.
* Fixed far call issue in compiler preventing building huge binearies.
  (closes: #477743)
* Updated building dependencies, recomennded and suggested packages.
* Moved fppkg to fp-utils as it is just a helper tool and is not required by
  compiler.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
{******************************************************************************}
 
2
{                                                                              }
 
3
{ Windows Types API interface Unit for Object Pascal                           }
 
4
{                                                                              }
 
5
{ Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft          }
 
6
{ Corporation. All Rights Reserved.                                            }
 
7
{                                                                              }
 
8
{ The original file is: winnt.h, released August 2001. The original Pascal     }
 
9
{ code is: WinNT.pas, released December 2000. The initial developer of the     }
 
10
{ Pascal code is Marcel van Brakel (brakelm att chello dott nl).               }
 
11
{                                                                              }
 
12
{ Portions created by Marcel van Brakel are Copyright (C) 1999-2001            }
 
13
{ Marcel van Brakel. All Rights Reserved.                                      }
 
14
{                                                                              }
 
15
{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI)        }
 
16
{                                                                              }
 
17
{ You may retrieve the latest version of this file at the Project JEDI         }
 
18
{ APILIB home page, located at http://jedi-apilib.sourceforge.net              }
 
19
{                                                                              }
 
20
{ The contents of this file are used with permission, subject to the Mozilla   }
 
21
{ Public License Version 1.1 (the "License"); you may not use this file except }
 
22
{ in compliance with the License. You may obtain a copy of the License at      }
 
23
{ http://www.mozilla.org/MPL/MPL-1.1.html                                      }
 
24
{                                                                              }
 
25
{ Software distributed under the License is distributed on an "AS IS" basis,   }
 
26
{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
 
27
{ the specific language governing rights and limitations under the License.    }
 
28
{                                                                              }
 
29
{ Alternatively, the contents of this file may be used under the terms of the  }
 
30
{ GNU Lesser General Public License (the  "LGPL License"), in which case the   }
 
31
{ provisions of the LGPL License are applicable instead of those above.        }
 
32
{ If you wish to allow use of your version of this file only under the terms   }
 
33
{ of the LGPL License and not to allow others to use your version of this file }
 
34
{ under the MPL, indicate your decision by deleting  the provisions above and  }
 
35
{ replace  them with the notice and other provisions required by the LGPL      }
 
36
{ License.  If you do not delete the provisions above, a recipient may use     }
 
37
{ your version of this file under either the MPL or the LGPL License.          }
 
38
{                                                                              }
 
39
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
 
40
{                                                                              }
 
41
{******************************************************************************}
 
42
 
 
43
// $Id: JwaWinNT.pas,v 1.11 2005/09/06 16:36:51 marquardt Exp $
 
44
 
 
45
{$IFNDEF JWA_INCLUDEMODE}
 
46
 
 
47
unit JwaWinNT;
 
48
 
 
49
{$WEAKPACKAGEUNIT}
 
50
 
 
51
{$I jediapilib.inc}
 
52
 
 
53
interface
 
54
 
 
55
uses
 
56
  JwaWinType;
 
57
 
 
58
{$ENDIF !JWA_INCLUDEMODE}
 
59
 
 
60
{$IFDEF JWA_INTERFACESECTION}
 
61
 
 
62
{$HPPEMIT ''}
 
63
{$HPPEMIT '#include "winnt.h"'}
 
64
{$HPPEMIT ''}
 
65
{$HPPEMIT 'typedef PACL *PPACL'}
 
66
{$HPPEMIT 'typedef PSID *PPSID'}
 
67
{$HPPEMIT 'typedef PSECURITY_DESCRIPTOR *PPSECURITY_DESCRIPTOR'}
 
68
{$HPPEMIT ''}
 
69
 
 
70
const
 
71
  MAXBYTE  = BYTE($ff);
 
72
  {$EXTERNALSYM MAXBYTE}
 
73
  MAXWORD  = WORD($ffff);
 
74
  {$EXTERNALSYM MAXWORD}
 
75
  MAXDWORD = DWORD($ffffffff);
 
76
  {$EXTERNALSYM MAXDWORD}
 
77
 
 
78
{$IFNDEF JWA_INCLUDEMODE}
 
79
const
 
80
  VER_SERVER_NT                      = DWORD($80000000);
 
81
  {$EXTERNALSYM VER_SERVER_NT}
 
82
  VER_WORKSTATION_NT                 = $40000000;
 
83
  {$EXTERNALSYM VER_WORKSTATION_NT}
 
84
  VER_SUITE_SMALLBUSINESS            = $00000001;
 
85
  {$EXTERNALSYM VER_SUITE_SMALLBUSINESS}
 
86
  VER_SUITE_ENTERPRISE               = $00000002;
 
87
  {$EXTERNALSYM VER_SUITE_ENTERPRISE}
 
88
  VER_SUITE_BACKOFFICE               = $00000004;
 
89
  {$EXTERNALSYM VER_SUITE_BACKOFFICE}
 
90
  VER_SUITE_COMMUNICATIONS           = $00000008;
 
91
  {$EXTERNALSYM VER_SUITE_COMMUNICATIONS}
 
92
  VER_SUITE_TERMINAL                 = $00000010;
 
93
  {$EXTERNALSYM VER_SUITE_TERMINAL}
 
94
  VER_SUITE_SMALLBUSINESS_RESTRICTED = $00000020;
 
95
  {$EXTERNALSYM VER_SUITE_SMALLBUSINESS_RESTRICTED}
 
96
  VER_SUITE_EMBEDDEDNT               = $00000040;
 
97
  {$EXTERNALSYM VER_SUITE_EMBEDDEDNT}
 
98
  VER_SUITE_DATACENTER               = $00000080;
 
99
  {$EXTERNALSYM VER_SUITE_DATACENTER}
 
100
  VER_SUITE_SINGLEUSERTS             = $00000100;
 
101
  {$EXTERNALSYM VER_SUITE_SINGLEUSERTS}
 
102
  VER_SUITE_PERSONAL                 = $00000200;
 
103
  {$EXTERNALSYM VER_SUITE_PERSONAL}
 
104
  VER_SUITE_BLADE                    = $00000400;
 
105
  {$EXTERNALSYM VER_SUITE_BLADE}
 
106
  VER_SUITE_EMBEDDED_RESTRICTED      = $00000800;
 
107
  {$EXTERNALSYM VER_SUITE_EMBEDDED_RESTRICTED}
 
108
  VER_SUITE_SECURITY_APPLIANCE       = $00001000;
 
109
  {$EXTERNALSYM VER_SUITE_SECURITY_APPLIANCE}
 
110
{$ENDIF !JWA_INCLUDEMODE}
 
111
 
 
112
//
 
113
//  Language IDs.
 
114
//
 
115
//  The following two combinations of primary language ID and
 
116
//  sublanguage ID have special semantics:
 
117
//
 
118
//    Primary Language ID   Sublanguage ID      Result
 
119
//    -------------------   ---------------     ------------------------
 
120
//    LANG_NEUTRAL          SUBLANG_NEUTRAL     Language neutral
 
121
//    LANG_NEUTRAL          SUBLANG_DEFAULT     User default language
 
122
//    LANG_NEUTRAL          SUBLANG_SYS_DEFAULT System default language
 
123
//    LANG_INVARIANT        SUBLANG_NEUTRAL     Invariant locale
 
124
//
 
125
 
 
126
//
 
127
//  Primary language IDs.
 
128
//
 
129
 
 
130
const
 
131
  LANG_NEUTRAL    = $00;
 
132
  {$EXTERNALSYM LANG_NEUTRAL}
 
133
  LANG_INVARIANT  = $7f;
 
134
  {$EXTERNALSYM LANG_INVARIANT}
 
135
 
 
136
  LANG_AFRIKAANS  = $36;
 
137
  {$EXTERNALSYM LANG_AFRIKAANS}
 
138
  LANG_ALBANIAN   = $1c;
 
139
  {$EXTERNALSYM LANG_ALBANIAN}
 
140
  LANG_ARABIC     = $01;
 
141
  {$EXTERNALSYM LANG_ARABIC}
 
142
  LANG_ARMENIAN   = $2b;
 
143
  {$EXTERNALSYM LANG_ARMENIAN}
 
144
  LANG_ASSAMESE   = $4d;
 
145
  {$EXTERNALSYM LANG_ASSAMESE}
 
146
  LANG_AZERI      = $2c;
 
147
  {$EXTERNALSYM LANG_AZERI}
 
148
  LANG_BASQUE     = $2d;
 
149
  {$EXTERNALSYM LANG_BASQUE}
 
150
  LANG_BELARUSIAN = $23;
 
151
  {$EXTERNALSYM LANG_BELARUSIAN}
 
152
  LANG_BENGALI    = $45;
 
153
  {$EXTERNALSYM LANG_BENGALI}
 
154
  LANG_BULGARIAN  = $02;
 
155
  {$EXTERNALSYM LANG_BULGARIAN}
 
156
  LANG_CATALAN    = $03;
 
157
  {$EXTERNALSYM LANG_CATALAN}
 
158
  LANG_CHINESE    = $04;
 
159
  {$EXTERNALSYM LANG_CHINESE}
 
160
  LANG_CROATIAN   = $1a;
 
161
  {$EXTERNALSYM LANG_CROATIAN}
 
162
  LANG_CZECH      = $05;
 
163
  {$EXTERNALSYM LANG_CZECH}
 
164
  LANG_DANISH     = $06;
 
165
  {$EXTERNALSYM LANG_DANISH}
 
166
  LANG_DIVEHI     = $65;
 
167
  {$EXTERNALSYM LANG_DIVEHI}
 
168
  LANG_DUTCH      = $13;
 
169
  {$EXTERNALSYM LANG_DUTCH}
 
170
  LANG_ENGLISH    = $09;
 
171
  {$EXTERNALSYM LANG_ENGLISH}
 
172
  LANG_ESTONIAN   = $25;
 
173
  {$EXTERNALSYM LANG_ESTONIAN}
 
174
  LANG_FAEROESE   = $38;
 
175
  {$EXTERNALSYM LANG_FAEROESE}
 
176
  LANG_FARSI      = $29;
 
177
  {$EXTERNALSYM LANG_FARSI}
 
178
  LANG_FINNISH    = $0b;
 
179
  {$EXTERNALSYM LANG_FINNISH}
 
180
  LANG_FRENCH     = $0c;
 
181
  {$EXTERNALSYM LANG_FRENCH}
 
182
  LANG_GALICIAN   = $56;
 
183
  {$EXTERNALSYM LANG_GALICIAN}
 
184
  LANG_GEORGIAN   = $37;
 
185
  {$EXTERNALSYM LANG_GEORGIAN}
 
186
  LANG_GERMAN     = $07;
 
187
  {$EXTERNALSYM LANG_GERMAN}
 
188
  LANG_GREEK      = $08;
 
189
  {$EXTERNALSYM LANG_GREEK}
 
190
  LANG_GUJARATI   = $47;
 
191
  {$EXTERNALSYM LANG_GUJARATI}
 
192
  LANG_HEBREW     = $0d;
 
193
  {$EXTERNALSYM LANG_HEBREW}
 
194
  LANG_HINDI      = $39;
 
195
  {$EXTERNALSYM LANG_HINDI}
 
196
  LANG_HUNGARIAN  = $0e;
 
197
  {$EXTERNALSYM LANG_HUNGARIAN}
 
198
  LANG_ICELANDIC  = $0f;
 
199
  {$EXTERNALSYM LANG_ICELANDIC}
 
200
  LANG_INDONESIAN = $21;
 
201
  {$EXTERNALSYM LANG_INDONESIAN}
 
202
  LANG_ITALIAN    = $10;
 
203
  {$EXTERNALSYM LANG_ITALIAN}
 
204
  LANG_JAPANESE   = $11;
 
205
  {$EXTERNALSYM LANG_JAPANESE}
 
206
  LANG_KANNADA    = $4b;
 
207
  {$EXTERNALSYM LANG_KANNADA}
 
208
  LANG_KASHMIRI   = $60;
 
209
  {$EXTERNALSYM LANG_KASHMIRI}
 
210
  LANG_KAZAK      = $3f;
 
211
  {$EXTERNALSYM LANG_KAZAK}
 
212
  LANG_KONKANI    = $57;
 
213
  {$EXTERNALSYM LANG_KONKANI}
 
214
  LANG_KOREAN     = $12;
 
215
  {$EXTERNALSYM LANG_KOREAN}
 
216
  LANG_KYRGYZ     = $40;
 
217
  {$EXTERNALSYM LANG_KYRGYZ}
 
218
  LANG_LATVIAN    = $26;
 
219
  {$EXTERNALSYM LANG_LATVIAN}
 
220
  LANG_LITHUANIAN = $27;
 
221
  {$EXTERNALSYM LANG_LITHUANIAN}
 
222
  LANG_MACEDONIAN = $2f;            // the Former Yugoslav Republic of Macedonia
 
223
  {$EXTERNALSYM LANG_MACEDONIAN}
 
224
  LANG_MALAY      = $3e;
 
225
  {$EXTERNALSYM LANG_MALAY}
 
226
  LANG_MALAYALAM  = $4c;
 
227
  {$EXTERNALSYM LANG_MALAYALAM}
 
228
  LANG_MANIPURI   = $58;
 
229
  {$EXTERNALSYM LANG_MANIPURI}
 
230
  LANG_MARATHI    = $4e;
 
231
  {$EXTERNALSYM LANG_MARATHI}
 
232
  LANG_MONGOLIAN  = $50;
 
233
  {$EXTERNALSYM LANG_MONGOLIAN}
 
234
  LANG_NEPALI     = $61;
 
235
  {$EXTERNALSYM LANG_NEPALI}
 
236
  LANG_NORWEGIAN  = $14;
 
237
  {$EXTERNALSYM LANG_NORWEGIAN}
 
238
  LANG_ORIYA      = $48;
 
239
  {$EXTERNALSYM LANG_ORIYA}
 
240
  LANG_POLISH     = $15;
 
241
  {$EXTERNALSYM LANG_POLISH}
 
242
  LANG_PORTUGUESE = $16;
 
243
  {$EXTERNALSYM LANG_PORTUGUESE}
 
244
  LANG_PUNJABI    = $46;
 
245
  {$EXTERNALSYM LANG_PUNJABI}
 
246
  LANG_ROMANIAN   = $18;
 
247
  {$EXTERNALSYM LANG_ROMANIAN}
 
248
  LANG_RUSSIAN    = $19;
 
249
  {$EXTERNALSYM LANG_RUSSIAN}
 
250
  LANG_SANSKRIT   = $4f;
 
251
  {$EXTERNALSYM LANG_SANSKRIT}
 
252
  LANG_SERBIAN    = $1a;
 
253
  {$EXTERNALSYM LANG_SERBIAN}
 
254
  LANG_SINDHI     = $59;
 
255
  {$EXTERNALSYM LANG_SINDHI}
 
256
  LANG_SLOVAK     = $1b;
 
257
  {$EXTERNALSYM LANG_SLOVAK}
 
258
  LANG_SLOVENIAN  = $24;
 
259
  {$EXTERNALSYM LANG_SLOVENIAN}
 
260
  LANG_SPANISH    = $0a;
 
261
  {$EXTERNALSYM LANG_SPANISH}
 
262
  LANG_SWAHILI    = $41;
 
263
  {$EXTERNALSYM LANG_SWAHILI}
 
264
  LANG_SWEDISH    = $1d;
 
265
  {$EXTERNALSYM LANG_SWEDISH}
 
266
  LANG_SYRIAC     = $5a;
 
267
  {$EXTERNALSYM LANG_SYRIAC}
 
268
  LANG_TAMIL      = $49;
 
269
  {$EXTERNALSYM LANG_TAMIL}
 
270
  LANG_TATAR      = $44;
 
271
  {$EXTERNALSYM LANG_TATAR}
 
272
  LANG_TELUGU     = $4a;
 
273
  {$EXTERNALSYM LANG_TELUGU}
 
274
  LANG_THAI       = $1e;
 
275
  {$EXTERNALSYM LANG_THAI}
 
276
  LANG_TURKISH    = $1f;
 
277
  {$EXTERNALSYM LANG_TURKISH}
 
278
  LANG_UKRAINIAN  = $22;
 
279
  {$EXTERNALSYM LANG_UKRAINIAN}
 
280
  LANG_URDU       = $20;
 
281
  {$EXTERNALSYM LANG_URDU}
 
282
  LANG_UZBEK      = $43;
 
283
  {$EXTERNALSYM LANG_UZBEK}
 
284
  LANG_VIETNAMESE = $2a;
 
285
  {$EXTERNALSYM LANG_VIETNAMESE}
 
286
 
 
287
//
 
288
//  Sublanguage IDs.
 
289
//
 
290
//  The name immediately following SUBLANG_ dictates which primary
 
291
//  language ID that sublanguage ID can be combined with to form a
 
292
//  valid language ID.
 
293
//
 
294
 
 
295
  SUBLANG_NEUTRAL     = $00; // language neutral
 
296
  {$EXTERNALSYM SUBLANG_NEUTRAL}
 
297
  SUBLANG_DEFAULT     = $01; // user default
 
298
  {$EXTERNALSYM SUBLANG_DEFAULT}
 
299
  SUBLANG_SYS_DEFAULT = $02; // system default
 
300
  {$EXTERNALSYM SUBLANG_SYS_DEFAULT}
 
301
 
 
302
  SUBLANG_ARABIC_SAUDI_ARABIA        = $01; // Arabic (Saudi Arabia)
 
303
  {$EXTERNALSYM SUBLANG_ARABIC_SAUDI_ARABIA}
 
304
  SUBLANG_ARABIC_IRAQ                = $02; // Arabic (Iraq)
 
305
  {$EXTERNALSYM SUBLANG_ARABIC_IRAQ}
 
306
  SUBLANG_ARABIC_EGYPT               = $03; // Arabic (Egypt)
 
307
  {$EXTERNALSYM SUBLANG_ARABIC_EGYPT}
 
308
  SUBLANG_ARABIC_LIBYA               = $04; // Arabic (Libya)
 
309
  {$EXTERNALSYM SUBLANG_ARABIC_LIBYA}
 
310
  SUBLANG_ARABIC_ALGERIA             = $05; // Arabic (Algeria)
 
311
  {$EXTERNALSYM SUBLANG_ARABIC_ALGERIA}
 
312
  SUBLANG_ARABIC_MOROCCO             = $06; // Arabic (Morocco)
 
313
  {$EXTERNALSYM SUBLANG_ARABIC_MOROCCO}
 
314
  SUBLANG_ARABIC_TUNISIA             = $07; // Arabic (Tunisia)
 
315
  {$EXTERNALSYM SUBLANG_ARABIC_TUNISIA}
 
316
  SUBLANG_ARABIC_OMAN                = $08; // Arabic (Oman)
 
317
  {$EXTERNALSYM SUBLANG_ARABIC_OMAN}
 
318
  SUBLANG_ARABIC_YEMEN               = $09; // Arabic (Yemen)
 
319
  {$EXTERNALSYM SUBLANG_ARABIC_YEMEN}
 
320
  SUBLANG_ARABIC_SYRIA               = $0a; // Arabic (Syria)
 
321
  {$EXTERNALSYM SUBLANG_ARABIC_SYRIA}
 
322
  SUBLANG_ARABIC_JORDAN              = $0b; // Arabic (Jordan)
 
323
  {$EXTERNALSYM SUBLANG_ARABIC_JORDAN}
 
324
  SUBLANG_ARABIC_LEBANON             = $0c; // Arabic (Lebanon)
 
325
  {$EXTERNALSYM SUBLANG_ARABIC_LEBANON}
 
326
  SUBLANG_ARABIC_KUWAIT              = $0d; // Arabic (Kuwait)
 
327
  {$EXTERNALSYM SUBLANG_ARABIC_KUWAIT}
 
328
  SUBLANG_ARABIC_UAE                 = $0e; // Arabic (U.A.E)
 
329
  {$EXTERNALSYM SUBLANG_ARABIC_UAE}
 
330
  SUBLANG_ARABIC_BAHRAIN             = $0f; // Arabic (Bahrain)
 
331
  {$EXTERNALSYM SUBLANG_ARABIC_BAHRAIN}
 
332
  SUBLANG_ARABIC_QATAR               = $10; // Arabic (Qatar)
 
333
  {$EXTERNALSYM SUBLANG_ARABIC_QATAR}
 
334
  SUBLANG_AZERI_LATIN                = $01; // Azeri (Latin)
 
335
  {$EXTERNALSYM SUBLANG_AZERI_LATIN}
 
336
  SUBLANG_AZERI_CYRILLIC             = $02; // Azeri (Cyrillic)
 
337
  {$EXTERNALSYM SUBLANG_AZERI_CYRILLIC}
 
338
  SUBLANG_CHINESE_TRADITIONAL        = $01; // Chinese (Taiwan)
 
339
  {$EXTERNALSYM SUBLANG_CHINESE_TRADITIONAL}
 
340
  SUBLANG_CHINESE_SIMPLIFIED         = $02; // Chinese (PR China)
 
341
  {$EXTERNALSYM SUBLANG_CHINESE_SIMPLIFIED}
 
342
  SUBLANG_CHINESE_HONGKONG           = $03; // Chinese (Hong Kong S.A.R., P.R.C.)
 
343
  {$EXTERNALSYM SUBLANG_CHINESE_HONGKONG}
 
344
  SUBLANG_CHINESE_SINGAPORE          = $04; // Chinese (Singapore)
 
345
  {$EXTERNALSYM SUBLANG_CHINESE_SINGAPORE}
 
346
  SUBLANG_CHINESE_MACAU              = $05; // Chinese (Macau S.A.R.)
 
347
  {$EXTERNALSYM SUBLANG_CHINESE_MACAU}
 
348
  SUBLANG_DUTCH                      = $01; // Dutch
 
349
  {$EXTERNALSYM SUBLANG_DUTCH}
 
350
  SUBLANG_DUTCH_BELGIAN              = $02; // Dutch (Belgian)
 
351
  {$EXTERNALSYM SUBLANG_DUTCH_BELGIAN}
 
352
  SUBLANG_ENGLISH_US                 = $01; // English (USA)
 
353
  {$EXTERNALSYM SUBLANG_ENGLISH_US}
 
354
  SUBLANG_ENGLISH_UK                 = $02; // English (UK)
 
355
  {$EXTERNALSYM SUBLANG_ENGLISH_UK}
 
356
  SUBLANG_ENGLISH_AUS                = $03; // English (Australian)
 
357
  {$EXTERNALSYM SUBLANG_ENGLISH_AUS}
 
358
  SUBLANG_ENGLISH_CAN                = $04; // English (Canadian)
 
359
  {$EXTERNALSYM SUBLANG_ENGLISH_CAN}
 
360
  SUBLANG_ENGLISH_NZ                 = $05; // English (New Zealand)
 
361
  {$EXTERNALSYM SUBLANG_ENGLISH_NZ}
 
362
  SUBLANG_ENGLISH_EIRE               = $06; // English (Irish)
 
363
  {$EXTERNALSYM SUBLANG_ENGLISH_EIRE}
 
364
  SUBLANG_ENGLISH_SOUTH_AFRICA       = $07; // English (South Africa)
 
365
  {$EXTERNALSYM SUBLANG_ENGLISH_SOUTH_AFRICA}
 
366
  SUBLANG_ENGLISH_JAMAICA            = $08; // English (Jamaica)
 
367
  {$EXTERNALSYM SUBLANG_ENGLISH_JAMAICA}
 
368
  SUBLANG_ENGLISH_CARIBBEAN          = $09; // English (Caribbean)
 
369
  {$EXTERNALSYM SUBLANG_ENGLISH_CARIBBEAN}
 
370
  SUBLANG_ENGLISH_BELIZE             = $0a; // English (Belize)
 
371
  {$EXTERNALSYM SUBLANG_ENGLISH_BELIZE}
 
372
  SUBLANG_ENGLISH_TRINIDAD           = $0b; // English (Trinidad)
 
373
  {$EXTERNALSYM SUBLANG_ENGLISH_TRINIDAD}
 
374
  SUBLANG_ENGLISH_ZIMBABWE           = $0c; // English (Zimbabwe)
 
375
  {$EXTERNALSYM SUBLANG_ENGLISH_ZIMBABWE}
 
376
  SUBLANG_ENGLISH_PHILIPPINES        = $0d; // English (Philippines)
 
377
  {$EXTERNALSYM SUBLANG_ENGLISH_PHILIPPINES}
 
378
  SUBLANG_FRENCH                     = $01; // French
 
379
  {$EXTERNALSYM SUBLANG_FRENCH}
 
380
  SUBLANG_FRENCH_BELGIAN             = $02; // French (Belgian)
 
381
  {$EXTERNALSYM SUBLANG_FRENCH_BELGIAN}
 
382
  SUBLANG_FRENCH_CANADIAN            = $03; // French (Canadian)
 
383
  {$EXTERNALSYM SUBLANG_FRENCH_CANADIAN}
 
384
  SUBLANG_FRENCH_SWISS               = $04; // French (Swiss)
 
385
  {$EXTERNALSYM SUBLANG_FRENCH_SWISS}
 
386
  SUBLANG_FRENCH_LUXEMBOURG          = $05; // French (Luxembourg)
 
387
  {$EXTERNALSYM SUBLANG_FRENCH_LUXEMBOURG}
 
388
  SUBLANG_FRENCH_MONACO              = $06; // French (Monaco)
 
389
  {$EXTERNALSYM SUBLANG_FRENCH_MONACO}
 
390
  SUBLANG_GERMAN                     = $01; // German
 
391
  {$EXTERNALSYM SUBLANG_GERMAN}
 
392
  SUBLANG_GERMAN_SWISS               = $02; // German (Swiss)
 
393
  {$EXTERNALSYM SUBLANG_GERMAN_SWISS}
 
394
  SUBLANG_GERMAN_AUSTRIAN            = $03; // German (Austrian)
 
395
  {$EXTERNALSYM SUBLANG_GERMAN_AUSTRIAN}
 
396
  SUBLANG_GERMAN_LUXEMBOURG          = $04; // German (Luxembourg)
 
397
  {$EXTERNALSYM SUBLANG_GERMAN_LUXEMBOURG}
 
398
  SUBLANG_GERMAN_LIECHTENSTEIN       = $05; // German (Liechtenstein)
 
399
  {$EXTERNALSYM SUBLANG_GERMAN_LIECHTENSTEIN}
 
400
  SUBLANG_ITALIAN                    = $01; // Italian
 
401
  {$EXTERNALSYM SUBLANG_ITALIAN}
 
402
  SUBLANG_ITALIAN_SWISS              = $02; // Italian (Swiss)
 
403
  {$EXTERNALSYM SUBLANG_ITALIAN_SWISS}
 
404
  SUBLANG_KASHMIRI_SASIA             = $02; // Kashmiri (South Asia)
 
405
  {$EXTERNALSYM SUBLANG_KASHMIRI_SASIA}
 
406
  SUBLANG_KASHMIRI_INDIA             = $02; // For app compatibility only
 
407
  {$EXTERNALSYM SUBLANG_KASHMIRI_INDIA}
 
408
  SUBLANG_KOREAN                     = $01; // Korean (Extended Wansung)
 
409
  {$EXTERNALSYM SUBLANG_KOREAN}
 
410
  SUBLANG_LITHUANIAN                 = $01; // Lithuanian
 
411
  {$EXTERNALSYM SUBLANG_LITHUANIAN}
 
412
  SUBLANG_MALAY_MALAYSIA             = $01; // Malay (Malaysia)
 
413
  {$EXTERNALSYM SUBLANG_MALAY_MALAYSIA}
 
414
  SUBLANG_MALAY_BRUNEI_DARUSSALAM    = $02; // Malay (Brunei Darussalam)
 
415
  {$EXTERNALSYM SUBLANG_MALAY_BRUNEI_DARUSSALAM}
 
416
  SUBLANG_NEPALI_INDIA               = $02; // Nepali (India)
 
417
  {$EXTERNALSYM SUBLANG_NEPALI_INDIA}
 
418
  SUBLANG_NORWEGIAN_BOKMAL           = $01; // Norwegian (Bokmal)
 
419
  {$EXTERNALSYM SUBLANG_NORWEGIAN_BOKMAL}
 
420
  SUBLANG_NORWEGIAN_NYNORSK          = $02; // Norwegian (Nynorsk)
 
421
  {$EXTERNALSYM SUBLANG_NORWEGIAN_NYNORSK}
 
422
  SUBLANG_PORTUGUESE                 = $02; // Portuguese
 
423
  {$EXTERNALSYM SUBLANG_PORTUGUESE}
 
424
  SUBLANG_PORTUGUESE_BRAZILIAN       = $01; // Portuguese (Brazilian)
 
425
  {$EXTERNALSYM SUBLANG_PORTUGUESE_BRAZILIAN}
 
426
  SUBLANG_SERBIAN_LATIN              = $02; // Serbian (Latin)
 
427
  {$EXTERNALSYM SUBLANG_SERBIAN_LATIN}
 
428
  SUBLANG_SERBIAN_CYRILLIC           = $03; // Serbian (Cyrillic)
 
429
  {$EXTERNALSYM SUBLANG_SERBIAN_CYRILLIC}
 
430
  SUBLANG_SPANISH                    = $01; // Spanish (Castilian)
 
431
  {$EXTERNALSYM SUBLANG_SPANISH}
 
432
  SUBLANG_SPANISH_MEXICAN            = $02; // Spanish (Mexican)
 
433
  {$EXTERNALSYM SUBLANG_SPANISH_MEXICAN}
 
434
  SUBLANG_SPANISH_MODERN             = $03; // Spanish (Spain)
 
435
  {$EXTERNALSYM SUBLANG_SPANISH_MODERN}
 
436
  SUBLANG_SPANISH_GUATEMALA          = $04; // Spanish (Guatemala)
 
437
  {$EXTERNALSYM SUBLANG_SPANISH_GUATEMALA}
 
438
  SUBLANG_SPANISH_COSTA_RICA         = $05; // Spanish (Costa Rica)
 
439
  {$EXTERNALSYM SUBLANG_SPANISH_COSTA_RICA}
 
440
  SUBLANG_SPANISH_PANAMA             = $06; // Spanish (Panama)
 
441
  {$EXTERNALSYM SUBLANG_SPANISH_PANAMA}
 
442
  SUBLANG_SPANISH_DOMINICAN_REPUBLIC = $07; // Spanish (Dominican Republic)
 
443
  {$EXTERNALSYM SUBLANG_SPANISH_DOMINICAN_REPUBLIC}
 
444
  SUBLANG_SPANISH_VENEZUELA          = $08; // Spanish (Venezuela)
 
445
  {$EXTERNALSYM SUBLANG_SPANISH_VENEZUELA}
 
446
  SUBLANG_SPANISH_COLOMBIA           = $09; // Spanish (Colombia)
 
447
  {$EXTERNALSYM SUBLANG_SPANISH_COLOMBIA}
 
448
  SUBLANG_SPANISH_PERU               = $0a; // Spanish (Peru)
 
449
  {$EXTERNALSYM SUBLANG_SPANISH_PERU}
 
450
  SUBLANG_SPANISH_ARGENTINA          = $0b; // Spanish (Argentina)
 
451
  {$EXTERNALSYM SUBLANG_SPANISH_ARGENTINA}
 
452
  SUBLANG_SPANISH_ECUADOR            = $0c; // Spanish (Ecuador)
 
453
  {$EXTERNALSYM SUBLANG_SPANISH_ECUADOR}
 
454
  SUBLANG_SPANISH_CHILE              = $0d; // Spanish (Chile)
 
455
  {$EXTERNALSYM SUBLANG_SPANISH_CHILE}
 
456
  SUBLANG_SPANISH_URUGUAY            = $0e; // Spanish (Uruguay)
 
457
  {$EXTERNALSYM SUBLANG_SPANISH_URUGUAY}
 
458
  SUBLANG_SPANISH_PARAGUAY           = $0f; // Spanish (Paraguay)
 
459
  {$EXTERNALSYM SUBLANG_SPANISH_PARAGUAY}
 
460
  SUBLANG_SPANISH_BOLIVIA            = $10; // Spanish (Bolivia)
 
461
  {$EXTERNALSYM SUBLANG_SPANISH_BOLIVIA}
 
462
  SUBLANG_SPANISH_EL_SALVADOR        = $11; // Spanish (El Salvador)
 
463
  {$EXTERNALSYM SUBLANG_SPANISH_EL_SALVADOR}
 
464
  SUBLANG_SPANISH_HONDURAS           = $12; // Spanish (Honduras)
 
465
  {$EXTERNALSYM SUBLANG_SPANISH_HONDURAS}
 
466
  SUBLANG_SPANISH_NICARAGUA          = $13; // Spanish (Nicaragua)
 
467
  {$EXTERNALSYM SUBLANG_SPANISH_NICARAGUA}
 
468
  SUBLANG_SPANISH_PUERTO_RICO        = $14; // Spanish (Puerto Rico)
 
469
  {$EXTERNALSYM SUBLANG_SPANISH_PUERTO_RICO}
 
470
  SUBLANG_SWEDISH                    = $01; // Swedish
 
471
  {$EXTERNALSYM SUBLANG_SWEDISH}
 
472
  SUBLANG_SWEDISH_FINLAND            = $02; // Swedish (Finland)
 
473
  {$EXTERNALSYM SUBLANG_SWEDISH_FINLAND}
 
474
  SUBLANG_URDU_PAKISTAN              = $01; // Urdu (Pakistan)
 
475
  {$EXTERNALSYM SUBLANG_URDU_PAKISTAN}
 
476
  SUBLANG_URDU_INDIA                 = $02; // Urdu (India)
 
477
  {$EXTERNALSYM SUBLANG_URDU_INDIA}
 
478
  SUBLANG_UZBEK_LATIN                = $01; // Uzbek (Latin)
 
479
  {$EXTERNALSYM SUBLANG_UZBEK_LATIN}
 
480
  SUBLANG_UZBEK_CYRILLIC             = $02; // Uzbek (Cyrillic)
 
481
  {$EXTERNALSYM SUBLANG_UZBEK_CYRILLIC}
 
482
 
 
483
//
 
484
//  Sorting IDs.
 
485
//
 
486
 
 
487
  SORT_DEFAULT = $0; // sorting default
 
488
  {$EXTERNALSYM SORT_DEFAULT}
 
489
 
 
490
  SORT_JAPANESE_XJIS    = $0; // Japanese XJIS order
 
491
  {$EXTERNALSYM SORT_JAPANESE_XJIS}
 
492
  SORT_JAPANESE_UNICODE = $1; // Japanese Unicode order
 
493
  {$EXTERNALSYM SORT_JAPANESE_UNICODE}
 
494
 
 
495
  SORT_CHINESE_BIG5     = $0; // Chinese BIG5 order
 
496
  {$EXTERNALSYM SORT_CHINESE_BIG5}
 
497
  SORT_CHINESE_PRCP     = $0; // PRC Chinese Phonetic order
 
498
  {$EXTERNALSYM SORT_CHINESE_PRCP}
 
499
  SORT_CHINESE_UNICODE  = $1; // Chinese Unicode order
 
500
  {$EXTERNALSYM SORT_CHINESE_UNICODE}
 
501
  SORT_CHINESE_PRC      = $2; // PRC Chinese Stroke Count order
 
502
  {$EXTERNALSYM SORT_CHINESE_PRC}
 
503
  SORT_CHINESE_BOPOMOFO = $3; // Traditional Chinese Bopomofo order
 
504
  {$EXTERNALSYM SORT_CHINESE_BOPOMOFO}
 
505
 
 
506
  SORT_KOREAN_KSC     = $0; // Korean KSC order
 
507
  {$EXTERNALSYM SORT_KOREAN_KSC}
 
508
  SORT_KOREAN_UNICODE = $1; // Korean Unicode order
 
509
  {$EXTERNALSYM SORT_KOREAN_UNICODE}
 
510
 
 
511
  SORT_GERMAN_PHONE_BOOK = $1; // German Phone Book order
 
512
  {$EXTERNALSYM SORT_GERMAN_PHONE_BOOK}
 
513
 
 
514
  SORT_HUNGARIAN_DEFAULT   = $0; // Hungarian Default order
 
515
  {$EXTERNALSYM SORT_HUNGARIAN_DEFAULT}
 
516
  SORT_HUNGARIAN_TECHNICAL = $1; // Hungarian Technical order
 
517
  {$EXTERNALSYM SORT_HUNGARIAN_TECHNICAL}
 
518
 
 
519
  SORT_GEORGIAN_TRADITIONAL = $0; // Georgian Traditional order
 
520
  {$EXTERNALSYM SORT_GEORGIAN_TRADITIONAL}
 
521
  SORT_GEORGIAN_MODERN      = $1; // Georgian Modern order
 
522
  {$EXTERNALSYM SORT_GEORGIAN_MODERN}
 
523
 
 
524
//
 
525
//  A language ID is a 16 bit value which is the combination of a
 
526
//  primary language ID and a secondary language ID.  The bits are
 
527
//  allocated as follows:
 
528
//
 
529
//       +-----------------------+-------------------------+
 
530
//       |     Sublanguage ID    |   Primary Language ID   |
 
531
//       +-----------------------+-------------------------+
 
532
//        15                   10 9                       0   bit
 
533
//
 
534
//
 
535
//  Language ID creation/extraction macros:
 
536
//
 
537
//    MAKELANGID    - construct language id from a primary language id and
 
538
//                    a sublanguage id.
 
539
//    PRIMARYLANGID - extract primary language id from a language id.
 
540
//    SUBLANGID     - extract sublanguage id from a language id.
 
541
//
 
542
 
 
543
function MAKELANGID(PrimaryLang, SubLang: USHORT): WORD;
 
544
{$EXTERNALSYM MAKELANGID}
 
545
function PRIMARYLANGID(LangId: WORD): WORD;
 
546
{$EXTERNALSYM PRIMARYLANGID}
 
547
function SUBLANGID(LangId: WORD): WORD;
 
548
{$EXTERNALSYM SUBLANGID}
 
549
 
 
550
//
 
551
//  A locale ID is a 32 bit value which is the combination of a
 
552
//  language ID, a sort ID, and a reserved area.  The bits are
 
553
//  allocated as follows:
 
554
//
 
555
//       +-------------+---------+-------------------------+
 
556
//       |   Reserved  | Sort ID |      Language ID        |
 
557
//       +-------------+---------+-------------------------+
 
558
//        31         20 19     16 15                      0   bit
 
559
//
 
560
//
 
561
//  Locale ID creation/extraction macros:
 
562
//
 
563
//    MAKELCID            - construct the locale id from a language id and a sort id.
 
564
//    MAKESORTLCID        - construct the locale id from a language id, sort id, and sort version.
 
565
//    LANGIDFROMLCID      - extract the language id from a locale id.
 
566
//    SORTIDFROMLCID      - extract the sort id from a locale id.
 
567
//    SORTVERSIONFROMLCID - extract the sort version from a locale id.
 
568
//
 
569
 
 
570
const
 
571
  NLS_VALID_LOCALE_MASK = $000fffff;
 
572
  {$EXTERNALSYM NLS_VALID_LOCALE_MASK}
 
573
 
 
574
function MAKELCID(LangId, SortId: WORD): DWORD;
 
575
{$EXTERNALSYM MAKELCID}
 
576
function MAKESORTLCID(LangId, SortId, SortVersion: WORD): DWORD;
 
577
{$EXTERNALSYM MAKESORTLCID}
 
578
function LANGIDFROMLCID(LocaleId: LCID): WORD;
 
579
{$EXTERNALSYM LANGIDFROMLCID}
 
580
function SORTIDFROMLCID(LocaleId: LCID): WORD;
 
581
{$EXTERNALSYM SORTIDFROMLCID}
 
582
function SORTVERSIONFROMLCID(LocaleId: LCID): WORD;
 
583
{$EXTERNALSYM SORTVERSIONFROMLCID}
 
584
 
 
585
//
 
586
//  Default System and User IDs for language and locale.
 
587
//
 
588
 
 
589
function LANG_SYSTEM_DEFAULT: WORD;
 
590
{$EXTERNALSYM LANG_SYSTEM_DEFAULT}
 
591
function LANG_USER_DEFAULT: WORD;
 
592
{$EXTERNALSYM LANG_USER_DEFAULT}
 
593
function LOCALE_SYSTEM_DEFAULT: DWORD;
 
594
{$EXTERNALSYM LOCALE_SYSTEM_DEFAULT}
 
595
function LOCALE_USER_DEFAULT: DWORD;
 
596
{$EXTERNALSYM LOCALE_USER_DEFAULT}
 
597
function LOCALE_NEUTRAL: DWORD;
 
598
{$EXTERNALSYM LOCALE_NEUTRAL}
 
599
function LOCALE_INVARIANT: DWORD;
 
600
{$EXTERNALSYM LOCALE_NEUTRAL}
 
601
 
 
602
const
 
603
  // (rom) deleted status codes already in JwaWinStatus.pas
 
604
  DBG_COMMAND_EXCEPTION           = DWORD($40010009);
 
605
  {$EXTERNALSYM DBG_COMMAND_EXCEPTION}
 
606
  STATUS_SXS_EARLY_DEACTIVATION   = DWORD($C015000F);
 
607
  {$EXTERNALSYM STATUS_SXS_EARLY_DEACTIVATION}
 
608
  STATUS_SXS_INVALID_DEACTIVATION = DWORD($C0150010);
 
609
  {$EXTERNALSYM STATUS_SXS_INVALID_DEACTIVATION}
 
610
 
 
611
const
 
612
  MAXIMUM_WAIT_OBJECTS  = 64;      // Maximum number of wait objects
 
613
  {$EXTERNALSYM MAXIMUM_WAIT_OBJECTS}
 
614
 
 
615
  MAXIMUM_SUSPEND_COUNT = MAXCHAR; // Maximum times thread can be suspended
 
616
  {$EXTERNALSYM MAXIMUM_SUSPEND_COUNT}
 
617
 
 
618
type
 
619
  KSPIN_LOCK = ULONG_PTR;
 
620
  {$EXTERNALSYM KSPIN_LOCK}
 
621
  PKSPIN_LOCK = ^KSPIN_LOCK;
 
622
  {$EXTERNALSYM PKSPIN_LOCK}
 
623
 
 
624
//
 
625
// Define functions to get the address of the current fiber and the
 
626
// current fiber data.
 
627
//
 
628
 
 
629
//
 
630
// Disable these two pramas that evaluate to "sti" "cli" on x86 so that driver
 
631
// writers to not leave them inadvertantly in their code.
 
632
//
 
633
 
 
634
function GetFiberData: PVOID;
 
635
{$EXTERNALSYM GetFiberData}
 
636
 
 
637
function GetCurrentFiber: PVOID;
 
638
{$EXTERNALSYM GetCurrentFiber}
 
639
 
 
640
//
 
641
//  Define the size of the 80387 save area, which is in the context frame.
 
642
//
 
643
 
 
644
const
 
645
  SIZE_OF_80387_REGISTERS = 80;
 
646
  {$EXTERNALSYM SIZE_OF_80387_REGISTERS}
 
647
 
 
648
//
 
649
// The following flags control the contents of the CONTEXT structure.
 
650
//
 
651
 
 
652
const
 
653
  CONTEXT_i386 = $00010000; // this assumes that i386 and
 
654
  {$EXTERNALSYM CONTEXT_i386}
 
655
  CONTEXT_i486 = $00010000; // i486 have identical context records
 
656
  {$EXTERNALSYM CONTEXT_i486}
 
657
 
 
658
const
 
659
  CONTEXT_CONTROL            = CONTEXT_i386 or $00000001; // SS:SP, CS:IP, FLAGS, BP
 
660
  {$EXTERNALSYM CONTEXT_CONTROL}
 
661
  CONTEXT_INTEGER            = CONTEXT_i386 or $00000002; // AX, BX, CX, DX, SI, DI
 
662
  {$EXTERNALSYM CONTEXT_INTEGER}
 
663
  CONTEXT_SEGMENTS           = CONTEXT_i386 or $00000004; // DS, ES, FS, GS
 
664
  {$EXTERNALSYM CONTEXT_SEGMENTS}
 
665
  CONTEXT_FLOATING_POINT     = CONTEXT_i386 or $00000008; // 387 state
 
666
  {$EXTERNALSYM CONTEXT_FLOATING_POINT}
 
667
  CONTEXT_DEBUG_REGISTERS    = CONTEXT_i386 or $00000010; // DB 0-3,6,7
 
668
  {$EXTERNALSYM CONTEXT_DEBUG_REGISTERS}
 
669
  CONTEXT_EXTENDED_REGISTERS = CONTEXT_i386 or $00000020; // cpu specific extensions
 
670
  {$EXTERNALSYM CONTEXT_EXTENDED_REGISTERS}
 
671
 
 
672
  CONTEXT_FULL = CONTEXT_CONTROL or CONTEXT_INTEGER or CONTEXT_SEGMENTS;
 
673
  {$EXTERNALSYM CONTEXT_FULL}
 
674
 
 
675
  CONTEXT_ALL = CONTEXT_CONTROL or CONTEXT_INTEGER or CONTEXT_SEGMENTS or CONTEXT_FLOATING_POINT or CONTEXT_DEBUG_REGISTERS;
 
676
  {$EXTERNALSYM CONTEXT_ALL}
 
677
 
 
678
//
 
679
// Define initial MxCsr control.
 
680
//
 
681
 
 
682
  INITIAL_MXCSR = $1f80;            // initial MXCSR value
 
683
  {$EXTERNALSYM INITIAL_MXCSR}
 
684
 
 
685
  MAXIMUM_SUPPORTED_EXTENSION = 512;
 
686
  {$EXTERNALSYM MAXIMUM_SUPPORTED_EXTENSION}
 
687
 
 
688
type
 
689
  PFLOATING_SAVE_AREA = ^FLOATING_SAVE_AREA;
 
690
  {$EXTERNALSYM PFLOATING_SAVE_AREA}
 
691
  _FLOATING_SAVE_AREA = record
 
692
    ControlWord: DWORD;
 
693
    StatusWord: DWORD;
 
694
    TagWord: DWORD;
 
695
    ErrorOffset: DWORD;
 
696
    ErrorSelector: DWORD;
 
697
    DataOffset: DWORD;
 
698
    DataSelector: DWORD;
 
699
    RegisterArea: array [0..SIZE_OF_80387_REGISTERS - 1] of BYTE;
 
700
    Cr0NpxState: DWORD;
 
701
  end;
 
702
  {$EXTERNALSYM _FLOATING_SAVE_AREA}
 
703
  FLOATING_SAVE_AREA = _FLOATING_SAVE_AREA;
 
704
  {$EXTERNALSYM FLOATING_SAVE_AREA}
 
705
  TFloatingSaveArea = FLOATING_SAVE_AREA;
 
706
  PFloatingSaveArea = PFLOATING_SAVE_AREA;
 
707
 
 
708
//
 
709
// Context Frame
 
710
//
 
711
//  This frame has a several purposes: 1) it is used as an argument to
 
712
//  NtContinue, 2) is is used to constuct a call frame for APC delivery,
 
713
//  and 3) it is used in the user level thread creation routines.
 
714
//
 
715
//  The layout of the record conforms to a standard call frame.
 
716
//
 
717
 
 
718
type
 
719
  PContext = ^CONTEXT;
 
720
  _CONTEXT  = record
 
721
 
 
722
    //
 
723
    // The flags values within this flag control the contents of
 
724
    // a CONTEXT record.
 
725
    //
 
726
    // If the context record is used as an input parameter, then
 
727
    // for each portion of the context record controlled by a flag
 
728
    // whose value is set, it is assumed that that portion of the
 
729
    // context record contains valid context. If the context record
 
730
    // is being used to modify a threads context, then only that
 
731
    // portion of the threads context will be modified.
 
732
    //
 
733
    // If the context record is used as an IN OUT parameter to capture
 
734
    // the context of a thread, then only those portions of the thread's
 
735
    // context corresponding to set flags will be returned.
 
736
    //
 
737
    // The context record is never used as an OUT only parameter.
 
738
    //
 
739
 
 
740
    ContextFlags: DWORD;
 
741
 
 
742
    //
 
743
    // This section is specified/returned if CONTEXT_DEBUG_REGISTERS is
 
744
    // set in ContextFlags.  Note that CONTEXT_DEBUG_REGISTERS is NOT
 
745
    // included in CONTEXT_FULL.
 
746
    //
 
747
 
 
748
    Dr0: DWORD;
 
749
    Dr1: DWORD;
 
750
    Dr2: DWORD;
 
751
    Dr3: DWORD;
 
752
    Dr6: DWORD;
 
753
    Dr7: DWORD;
 
754
 
 
755
    //
 
756
    // This section is specified/returned if the
 
757
    // ContextFlags word contians the flag CONTEXT_FLOATING_POINT.
 
758
    //
 
759
 
 
760
    FloatSave: FLOATING_SAVE_AREA;
 
761
 
 
762
    //
 
763
    // This section is specified/returned if the
 
764
    // ContextFlags word contians the flag CONTEXT_SEGMENTS.
 
765
    //
 
766
 
 
767
    SegGs: DWORD;
 
768
    SegFs: DWORD;
 
769
    SegEs: DWORD;
 
770
    SegDs: DWORD;
 
771
 
 
772
    //
 
773
    // This section is specified/returned if the
 
774
    // ContextFlags word contians the flag CONTEXT_INTEGER.
 
775
    //
 
776
 
 
777
    Edi: DWORD;
 
778
    Esi: DWORD;
 
779
    Ebx: DWORD;
 
780
    Edx: DWORD;
 
781
    Ecx: DWORD;
 
782
    Eax: DWORD;
 
783
 
 
784
    //
 
785
    // This section is specified/returned if the
 
786
    // ContextFlags word contians the flag CONTEXT_CONTROL.
 
787
    //
 
788
 
 
789
    Ebp: DWORD;
 
790
    Eip: DWORD;
 
791
    SegCs: DWORD;              // MUST BE SANITIZED
 
792
    EFlags: DWORD;             // MUST BE SANITIZED
 
793
    Esp: DWORD;
 
794
    SegSs: DWORD;
 
795
 
 
796
    //
 
797
    // This section is specified/returned if the ContextFlags word
 
798
    // contains the flag CONTEXT_EXTENDED_REGISTERS.
 
799
    // The format and contexts are processor specific
 
800
    //
 
801
 
 
802
    ExtendedRegisters: array [0..MAXIMUM_SUPPORTED_EXTENSION - 1] of BYTE;
 
803
  end;
 
804
  {$EXTERNALSYM _CONTEXT}
 
805
  CONTEXT = _CONTEXT;
 
806
  {$EXTERNALSYM CONTEXT}
 
807
  TContext = CONTEXT;
 
808
 
 
809
const
 
810
  LDTENTRY_FLAGS1_TYPE        = $1F;
 
811
  LDTENTRY_FLAGS1_DPL         = $60;
 
812
  LDTENTRY_FLAGS1_PRES        = $80;
 
813
 
 
814
  LDTENTRY_FLAGS2_LIMITHI     = $0F;
 
815
  LDTENTRY_FLAGS2_SYS         = $10;
 
816
  LDTENTRY_FLAGS2_RESERVED_0  = $20;
 
817
  LDTENTRY_FLAGS2_DEFAULT_BIG = $40;
 
818
  LDTENTRY_FLAGS2_GRANULARITY = $80;
 
819
 
 
820
type
 
821
  PLDT_ENTRY = ^LDT_ENTRY;
 
822
  {$EXTERNALSYM PLDT_ENTRY}
 
823
  _LDT_ENTRY = record
 
824
    LimitLow: WORD;
 
825
    BaseLow: WORD;
 
826
    BaseMid: BYTE;
 
827
    Flags1: BYTE;     // Declare as bytes to avoid alignment
 
828
    Flags2: BYTE;     // Problems.
 
829
    BaseHi: BYTE;
 
830
  end;
 
831
  {$EXTERNALSYM _LDT_ENTRY}
 
832
  LDT_ENTRY = _LDT_ENTRY;
 
833
  {$EXTERNALSYM LDT_ENTRY}
 
834
  TLdtEntry = LDT_ENTRY;
 
835
  PLdtEntry = PLDT_ENTRY;
 
836
 
 
837
// Please contact INTEL to get IA64-specific information
 
838
 
 
839
const
 
840
  EXCEPTION_NONCONTINUABLE     = $1; // Noncontinuable exception
 
841
  {$EXTERNALSYM EXCEPTION_NONCONTINUABLE}
 
842
  EXCEPTION_MAXIMUM_PARAMETERS = 15; // maximum number of exception parameters
 
843
  {$EXTERNALSYM EXCEPTION_MAXIMUM_PARAMETERS}
 
844
 
 
845
//
 
846
// Exception record definition.
 
847
//
 
848
 
 
849
type
 
850
  PEXCEPTION_RECORD = ^EXCEPTION_RECORD;
 
851
  {$EXTERNALSYM PEXCEPTION_RECORD}
 
852
  _EXCEPTION_RECORD = record
 
853
    ExceptionCode: DWORD;
 
854
    ExceptionFlags: DWORD;
 
855
    ExceptionRecord: PEXCEPTION_RECORD;
 
856
    ExceptionAddress: Pointer;
 
857
    NumberParameters: DWORD;
 
858
    ExceptionInformation: array [0..EXCEPTION_MAXIMUM_PARAMETERS - 1] of ULONG_PTR;
 
859
  end;
 
860
  {$EXTERNALSYM _EXCEPTION_RECORD}
 
861
  EXCEPTION_RECORD = _EXCEPTION_RECORD;
 
862
  {$EXTERNALSYM EXCEPTION_RECORD}
 
863
  TExceptionRecord = EXCEPTION_RECORD;
 
864
  PExceptionRecord = PEXCEPTION_RECORD;
 
865
 
 
866
  PEXCEPTION_RECORD32 = ^EXCEPTION_RECORD32;
 
867
  {$EXTERNALSYM PEXCEPTION_RECORD32}
 
868
  _EXCEPTION_RECORD32 = record
 
869
    ExceptionCode: DWORD;
 
870
    ExceptionFlags: DWORD;
 
871
    ExceptionRecord: DWORD;
 
872
    ExceptionAddress: DWORD;
 
873
    NumberParameters: DWORD;
 
874
    ExceptionInformation: array [0..EXCEPTION_MAXIMUM_PARAMETERS - 1] of DWORD;
 
875
  end;
 
876
  {$EXTERNALSYM _EXCEPTION_RECORD32}
 
877
  EXCEPTION_RECORD32 = _EXCEPTION_RECORD32;
 
878
  {$EXTERNALSYM EXCEPTION_RECORD32}
 
879
  TExceptionRecord32 = EXCEPTION_RECORD32;
 
880
  PExceptionRecord32 = PEXCEPTION_RECORD32;
 
881
 
 
882
  PEXCEPTION_RECORD64 = ^EXCEPTION_RECORD64;
 
883
  {$EXTERNALSYM PEXCEPTION_RECORD64}
 
884
  _EXCEPTION_RECORD64 = record
 
885
    ExceptionCode: DWORD;
 
886
    ExceptionFlags: DWORD;
 
887
    ExceptionRecord: DWORD64;
 
888
    ExceptionAddress: DWORD64;
 
889
    NumberParameters: DWORD;
 
890
    __unusedAlignment: DWORD;
 
891
    ExceptionInformation: array [0..EXCEPTION_MAXIMUM_PARAMETERS - 1] of DWORD64;
 
892
  end;
 
893
  {$EXTERNALSYM _EXCEPTION_RECORD64}
 
894
  EXCEPTION_RECORD64 = _EXCEPTION_RECORD64;
 
895
  {$EXTERNALSYM EXCEPTION_RECORD64}
 
896
  TExceptionRecord64 = EXCEPTION_RECORD64;
 
897
  PExceptionRecord64 = PEXCEPTION_RECORD64;
 
898
 
 
899
//
 
900
// Typedef for pointer returned by exception_info()
 
901
//
 
902
 
 
903
  PEXCEPTION_POINTERS = ^EXCEPTION_POINTERS;
 
904
  {$EXTERNALSYM PEXCEPTION_POINTERS}
 
905
  _EXCEPTION_POINTERS = record
 
906
    ExceptionRecord: PEXCEPTION_RECORD;
 
907
    ContextRecord: PCONTEXT;
 
908
  end;
 
909
  {$EXTERNALSYM _EXCEPTION_POINTERS}
 
910
  EXCEPTION_POINTERS = _EXCEPTION_POINTERS;
 
911
  {$EXTERNALSYM EXCEPTION_POINTERS}
 
912
  TExceptionPointers = EXCEPTION_POINTERS;
 
913
  PExceptionPointers = ^TExceptionPointers;
 
914
 
 
915
  PACCESS_TOKEN = Pointer;
 
916
  {$EXTERNALSYM PACCESS_TOKEN}
 
917
 
 
918
////////////////////////////////////////////////////////////////////////
 
919
//                                                                    //
 
920
//                             ACCESS MASK                            //
 
921
//                                                                    //
 
922
////////////////////////////////////////////////////////////////////////
 
923
 
 
924
//
 
925
//  Define the access mask as a longword sized structure divided up as
 
926
//  follows:
 
927
//
 
928
//       3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 
929
//       1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 
930
//      +---------------+---------------+-------------------------------+
 
931
//      |G|G|G|G|Res'd|A| StandardRights|         SpecificRights        |
 
932
//      |R|W|E|A|     |S|               |                               |
 
933
//      +-+-------------+---------------+-------------------------------+
 
934
//
 
935
//      typedef struct _ACCESS_MASK {
 
936
//          WORD   SpecificRights;
 
937
//          BYTE  StandardRights;
 
938
//          BYTE  AccessSystemAcl : 1;
 
939
//          BYTE  Reserved : 3;
 
940
//          BYTE  GenericAll : 1;
 
941
//          BYTE  GenericExecute : 1;
 
942
//          BYTE  GenericWrite : 1;
 
943
//          BYTE  GenericRead : 1;
 
944
//      } ACCESS_MASK;
 
945
//      typedef ACCESS_MASK *PACCESS_MASK;
 
946
//
 
947
//  but to make life simple for programmer's we'll allow them to specify
 
948
//  a desired access mask by simply OR'ing together mulitple single rights
 
949
//  and treat an access mask as a DWORD.  For example
 
950
//
 
951
//      DesiredAccess = DELETE | READ_CONTROL
 
952
//
 
953
//  So we'll declare ACCESS_MASK as DWORD
 
954
//
 
955
 
 
956
type
 
957
  ACCESS_MASK = DWORD;
 
958
  {$EXTERNALSYM ACCESS_MASK}
 
959
  PACCESS_MASK = ^ACCESS_MASK;
 
960
  {$EXTERNALSYM PACCESS_MASK}
 
961
  TAccessMask = ACCESS_MASK;
 
962
  PAccessMask = PACCESS_MASK;
 
963
 
 
964
////////////////////////////////////////////////////////////////////////
 
965
//                                                                    //
 
966
//                             ACCESS TYPES                           //
 
967
//                                                                    //
 
968
////////////////////////////////////////////////////////////////////////
 
969
 
 
970
//
 
971
//  The following are masks for the predefined standard access types
 
972
//
 
973
 
 
974
const
 
975
  DELETE                   = $00010000;
 
976
  {$EXTERNALSYM DELETE}
 
977
  READ_CONTROL             = $00020000;
 
978
  {$EXTERNALSYM READ_CONTROL}
 
979
  WRITE_DAC                = $00040000;
 
980
  {$EXTERNALSYM WRITE_DAC}
 
981
  WRITE_OWNER              = $00080000;
 
982
  {$EXTERNALSYM WRITE_OWNER}
 
983
  SYNCHRONIZE              = $00100000;
 
984
  {$EXTERNALSYM SYNCHRONIZE}
 
985
 
 
986
  STANDARD_RIGHTS_REQUIRED = $000F0000;
 
987
  {$EXTERNALSYM STANDARD_RIGHTS_REQUIRED}
 
988
 
 
989
  STANDARD_RIGHTS_READ     = READ_CONTROL;
 
990
  {$EXTERNALSYM STANDARD_RIGHTS_READ}
 
991
  STANDARD_RIGHTS_WRITE    = READ_CONTROL;
 
992
  {$EXTERNALSYM STANDARD_RIGHTS_WRITE}
 
993
  STANDARD_RIGHTS_EXECUTE  = READ_CONTROL;
 
994
  {$EXTERNALSYM STANDARD_RIGHTS_EXECUTE}
 
995
 
 
996
  STANDARD_RIGHTS_ALL      = $001F0000;
 
997
  {$EXTERNALSYM STANDARD_RIGHTS_ALL}
 
998
  SPECIFIC_RIGHTS_ALL      = $0000FFFF;
 
999
  {$EXTERNALSYM SPECIFIC_RIGHTS_ALL}
 
1000
 
 
1001
//
 
1002
// AccessSystemAcl access type
 
1003
//
 
1004
 
 
1005
  ACCESS_SYSTEM_SECURITY = $01000000;
 
1006
  {$EXTERNALSYM ACCESS_SYSTEM_SECURITY}
 
1007
 
 
1008
//
 
1009
// MaximumAllowed access type
 
1010
//
 
1011
 
 
1012
  MAXIMUM_ALLOWED = $02000000;
 
1013
  {$EXTERNALSYM MAXIMUM_ALLOWED}
 
1014
 
 
1015
//
 
1016
//  These are the generic rights.
 
1017
//
 
1018
 
 
1019
  GENERIC_READ    = DWORD($80000000);
 
1020
  {$EXTERNALSYM GENERIC_READ}
 
1021
  GENERIC_WRITE   = $40000000;
 
1022
  {$EXTERNALSYM GENERIC_WRITE}
 
1023
  GENERIC_EXECUTE = $20000000;
 
1024
  {$EXTERNALSYM GENERIC_EXECUTE}
 
1025
  GENERIC_ALL     = $10000000;
 
1026
  {$EXTERNALSYM GENERIC_ALL}
 
1027
 
 
1028
//
 
1029
//  Define the generic mapping array.  This is used to denote the
 
1030
//  mapping of each generic access right to a specific access mask.
 
1031
//
 
1032
 
 
1033
type
 
1034
  PGENERIC_MAPPING = ^GENERIC_MAPPING;
 
1035
  {$EXTERNALSYM PGENERIC_MAPPING}
 
1036
  _GENERIC_MAPPING = record
 
1037
    GenericRead: ACCESS_MASK;
 
1038
    GenericWrite: ACCESS_MASK;
 
1039
    GenericExecute: ACCESS_MASK;
 
1040
    GenericAll: ACCESS_MASK;
 
1041
  end;
 
1042
  {$EXTERNALSYM _GENERIC_MAPPING}
 
1043
  GENERIC_MAPPING = _GENERIC_MAPPING;
 
1044
  {$EXTERNALSYM GENERIC_MAPPING}
 
1045
  TGenericMapping = GENERIC_MAPPING;
 
1046
  PGenericMapping = PGENERIC_MAPPING;
 
1047
 
 
1048
////////////////////////////////////////////////////////////////////////
 
1049
//                                                                    //
 
1050
//                        LUID_AND_ATTRIBUTES                         //
 
1051
//                                                                    //
 
1052
////////////////////////////////////////////////////////////////////////
 
1053
//
 
1054
//
 
1055
 
 
1056
//#include <pshpack4.h>
 
1057
 
 
1058
  PLUID_AND_ATTRIBUTES = ^LUID_AND_ATTRIBUTES;
 
1059
  {$EXTERNALSYM PLUID_AND_ATTRIBUTES}
 
1060
  _LUID_AND_ATTRIBUTES = record
 
1061
    Luid: LUID;
 
1062
    Attributes: DWORD;
 
1063
  end;
 
1064
  {$EXTERNALSYM _LUID_AND_ATTRIBUTES}
 
1065
  LUID_AND_ATTRIBUTES = _LUID_AND_ATTRIBUTES;
 
1066
  {$EXTERNALSYM LUID_AND_ATTRIBUTES}
 
1067
  TLuidAndAttributes = LUID_AND_ATTRIBUTES;
 
1068
  PLuidAndAttributes = PLUID_AND_ATTRIBUTES;
 
1069
 
 
1070
  LUID_AND_ATTRIBUTES_ARRAY = array [0..ANYSIZE_ARRAY - 1] of LUID_AND_ATTRIBUTES;
 
1071
  {$EXTERNALSYM LUID_AND_ATTRIBUTES_ARRAY}
 
1072
  PLUID_AND_ATTRIBUTES_ARRAY = ^LUID_AND_ATTRIBUTES_ARRAY;
 
1073
  {$EXTERNALSYM PLUID_AND_ATTRIBUTES_ARRAY}
 
1074
  TLuidAndAttributesArray = LUID_AND_ATTRIBUTES_ARRAY;
 
1075
  PLuidAndAttributesArray = ^TLuidAndAttributesArray;
 
1076
 
 
1077
//#include <poppack.h>
 
1078
 
 
1079
////////////////////////////////////////////////////////////////////////
 
1080
//                                                                    //
 
1081
//              Security Id     (SID)                                 //
 
1082
//                                                                    //
 
1083
////////////////////////////////////////////////////////////////////////
 
1084
//
 
1085
//
 
1086
// Pictorially the structure of an SID is as follows:
 
1087
//
 
1088
//         1   1   1   1   1   1
 
1089
//         5   4   3   2   1   0   9   8   7   6   5   4   3   2   1   0
 
1090
//      +---------------------------------------------------------------+
 
1091
//      |      SubAuthorityCount        |Reserved1 (SBZ)|   Revision    |
 
1092
//      +---------------------------------------------------------------+
 
1093
//      |                   IdentifierAuthority[0]                      |
 
1094
//      +---------------------------------------------------------------+
 
1095
//      |                   IdentifierAuthority[1]                      |
 
1096
//      +---------------------------------------------------------------+
 
1097
//      |                   IdentifierAuthority[2]                      |
 
1098
//      +---------------------------------------------------------------+
 
1099
//      |                                                               |
 
1100
//      +- -  -  -  -  -  -  -  SubAuthority[]  -  -  -  -  -  -  -  - -+
 
1101
//      |                                                               |
 
1102
//      +---------------------------------------------------------------+
 
1103
//
 
1104
//
 
1105
 
 
1106
type
 
1107
  PSID_IDENTIFIER_AUTHORITY = ^SID_IDENTIFIER_AUTHORITY;
 
1108
  {$EXTERNALSYM PSID_IDENTIFIER_AUTHORITY}
 
1109
  _SID_IDENTIFIER_AUTHORITY = record
 
1110
    Value: array [0..5] of Byte;
 
1111
  end;
 
1112
  {$EXTERNALSYM _SID_IDENTIFIER_AUTHORITY}
 
1113
  SID_IDENTIFIER_AUTHORITY = _SID_IDENTIFIER_AUTHORITY;
 
1114
  {$EXTERNALSYM SID_IDENTIFIER_AUTHORITY}
 
1115
  TSidIdentifierAuthority = SID_IDENTIFIER_AUTHORITY;
 
1116
  PSidIdentifierAuthority = PSID_IDENTIFIER_AUTHORITY;
 
1117
 
 
1118
  PSid = ^SID;
 
1119
  _SID = record
 
1120
    Revision: Byte;
 
1121
    SubAuthorityCount: Byte;
 
1122
    IdentifierAuthority: SID_IDENTIFIER_AUTHORITY;
 
1123
    SubAuthority: array [0..ANYSIZE_ARRAY - 1] of DWORD;
 
1124
  end;
 
1125
  {$EXTERNALSYM _SID}
 
1126
  SID = _SID;
 
1127
  {$EXTERNALSYM SID}
 
1128
  PPSID = ^PSID;
 
1129
  {$NODEFINE PPSID}
 
1130
  TSid = SID;
 
1131
 
 
1132
const
 
1133
  SID_REVISION                    = 1; // Current revision level
 
1134
  {$EXTERNALSYM SID_REVISION}
 
1135
  SID_MAX_SUB_AUTHORITIES         = 15;
 
1136
  {$EXTERNALSYM SID_MAX_SUB_AUTHORITIES}
 
1137
  SID_RECOMMENDED_SUB_AUTHORITIES = 1; // Will change to around 6 in a future release.
 
1138
  {$EXTERNALSYM SID_RECOMMENDED_SUB_AUTHORITIES}
 
1139
 
 
1140
  SECURITY_MAX_SID_SIZE = SizeOf(SID) - SizeOf(DWORD) + (SID_MAX_SUB_AUTHORITIES * SizeOf(DWORD));
 
1141
  {$EXTERNALSYM SECURITY_MAX_SID_SIZE}
 
1142
 
 
1143
  SidTypeUser           = 1;
 
1144
  {$EXTERNALSYM SidTypeUser}
 
1145
  SidTypeGroup          = 2;
 
1146
  {$EXTERNALSYM SidTypeGroup}
 
1147
  SidTypeDomain         = 3;
 
1148
  {$EXTERNALSYM SidTypeDomain}
 
1149
  SidTypeAlias          = 4;
 
1150
  {$EXTERNALSYM SidTypeAlias}
 
1151
  SidTypeWellKnownGroup = 5;
 
1152
  {$EXTERNALSYM SidTypeWellKnownGroup}
 
1153
  SidTypeDeletedAccount = 6;
 
1154
  {$EXTERNALSYM SidTypeDeletedAccount}
 
1155
  SidTypeInvalid        = 7;
 
1156
  {$EXTERNALSYM SidTypeInvalid}
 
1157
  SidTypeUnknown        = 8;
 
1158
  {$EXTERNALSYM SidTypeUnknown}
 
1159
  SidTypeComputer       = 9;
 
1160
  {$EXTERNALSYM SidTypeComputer}
 
1161
 
 
1162
type
 
1163
  _SID_NAME_USE = DWORD;
 
1164
  {$EXTERNALSYM _SID_NAME_USE}
 
1165
  SID_NAME_USE = _SID_NAME_USE;
 
1166
  {$EXTERNALSYM SID_NAME_USE}
 
1167
  PSID_NAME_USE = ^SID_NAME_USE;
 
1168
  {$EXTERNALSYM PSID_NAME_USE}
 
1169
  TSidNameUse = SID_NAME_USE;
 
1170
  PSidNameUSe = PSID_NAME_USE;
 
1171
 
 
1172
  PSID_AND_ATTRIBUTES = ^SID_AND_ATTRIBUTES;
 
1173
  {$EXTERNALSYM PSID_AND_ATTRIBUTES}
 
1174
  _SID_AND_ATTRIBUTES = record
 
1175
    Sid: PSID;
 
1176
    Attributes: DWORD;
 
1177
  end;
 
1178
  {$EXTERNALSYM _SID_AND_ATTRIBUTES}
 
1179
  SID_AND_ATTRIBUTES = _SID_AND_ATTRIBUTES;
 
1180
  {$EXTERNALSYM SID_AND_ATTRIBUTES}
 
1181
  TSidAndAttributes = SID_AND_ATTRIBUTES;
 
1182
  PSidAndAttributes = PSID_AND_ATTRIBUTES;
 
1183
 
 
1184
  SID_AND_ATTRIBUTES_ARRAY = array [0..ANYSIZE_ARRAY - 1] of SID_AND_ATTRIBUTES;
 
1185
  {$EXTERNALSYM SID_AND_ATTRIBUTES_ARRAY}
 
1186
  PSID_AND_ATTRIBUTES_ARRAY = ^SID_AND_ATTRIBUTES_ARRAY;
 
1187
  {$EXTERNALSYM PSID_AND_ATTRIBUTES_ARRAY}
 
1188
  PSidAndAttributesArray = ^TSidAndAttributesArray;
 
1189
  TSidAndAttributesArray = SID_AND_ATTRIBUTES_ARRAY;
 
1190
 
 
1191
/////////////////////////////////////////////////////////////////////////////
 
1192
//                                                                         //
 
1193
// Universal well-known SIDs                                               //
 
1194
//                                                                         //
 
1195
//     Null SID                     S-1-0-0                                //
 
1196
//     World                        S-1-1-0                                //
 
1197
//     Local                        S-1-2-0                                //
 
1198
//     Creator Owner ID             S-1-3-0                                //
 
1199
//     Creator Group ID             S-1-3-1                                //
 
1200
//     Creator Owner Server ID      S-1-3-2                                //
 
1201
//     Creator Group Server ID      S-1-3-3                                //
 
1202
//                                                                         //
 
1203
//     (Non-unique IDs)             S-1-4                                  //
 
1204
//                                                                         //
 
1205
/////////////////////////////////////////////////////////////////////////////
 
1206
 
 
1207
const
 
1208
  SECURITY_NULL_SID_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 0));
 
1209
  {$EXTERNALSYM SECURITY_NULL_SID_AUTHORITY}
 
1210
  SECURITY_WORLD_SID_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 1));
 
1211
  {$EXTERNALSYM SECURITY_WORLD_SID_AUTHORITY}
 
1212
  SECURITY_LOCAL_SID_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 2));
 
1213
  {$EXTERNALSYM SECURITY_LOCAL_SID_AUTHORITY}
 
1214
  SECURITY_CREATOR_SID_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 3));
 
1215
  {$EXTERNALSYM SECURITY_CREATOR_SID_AUTHORITY}
 
1216
  SECURITY_NON_UNIQUE_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 4));
 
1217
  {$EXTERNALSYM SECURITY_NON_UNIQUE_AUTHORITY}
 
1218
  SECURITY_RESOURCE_MANAGER_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 9));
 
1219
  {$EXTERNALSYM SECURITY_RESOURCE_MANAGER_AUTHORITY}
 
1220
 
 
1221
  SECURITY_NULL_RID                 = $00000000;
 
1222
  {$EXTERNALSYM SECURITY_NULL_RID}
 
1223
  SECURITY_WORLD_RID                = $00000000;
 
1224
  {$EXTERNALSYM SECURITY_WORLD_RID}
 
1225
  SECURITY_LOCAL_RID                = $00000000;
 
1226
  {$EXTERNALSYM SECURITY_LOCAL_RID}
 
1227
 
 
1228
  SECURITY_CREATOR_OWNER_RID        = $00000000;
 
1229
  {$EXTERNALSYM SECURITY_CREATOR_OWNER_RID}
 
1230
  SECURITY_CREATOR_GROUP_RID        = $00000001;
 
1231
  {$EXTERNALSYM SECURITY_CREATOR_GROUP_RID}
 
1232
 
 
1233
  SECURITY_CREATOR_OWNER_SERVER_RID = $00000002;
 
1234
  {$EXTERNALSYM SECURITY_CREATOR_OWNER_SERVER_RID}
 
1235
  SECURITY_CREATOR_GROUP_SERVER_RID = $00000003;
 
1236
  {$EXTERNALSYM SECURITY_CREATOR_GROUP_SERVER_RID}
 
1237
 
 
1238
/////////////////////////////////////////////////////////////////////////////
 
1239
//                                                                         //
 
1240
// NT well-known SIDs                                                        //
 
1241
//                                                                           //
 
1242
//     NT Authority            S-1-5                                         //
 
1243
//     Dialup                  S-1-5-1                                       //
 
1244
//                                                                           //
 
1245
//     Network                 S-1-5-2                                       //
 
1246
//     Batch                   S-1-5-3                                       //
 
1247
//     Interactive             S-1-5-4                                       //
 
1248
//     (Logon IDs)             S-1-5-5-X-Y                                   //
 
1249
//     Service                 S-1-5-6                                       //
 
1250
//     AnonymousLogon          S-1-5-7       (aka null logon session)        //
 
1251
//     Proxy                   S-1-5-8                                       //
 
1252
//     Enterprise DC (EDC)     S-1-5-9       (aka domain controller account) //
 
1253
//     Self                    S-1-5-10      (self RID)                      //
 
1254
//     Authenticated User      S-1-5-11      (Authenticated user somewhere)  //
 
1255
//     Restricted Code         S-1-5-12      (Running restricted code)       //
 
1256
//     Terminal Server         S-1-5-13      (Running on Terminal Server)    //
 
1257
//     Remote Logon            S-1-5-14      (Remote Interactive Logon)      //
 
1258
//     This Organization       S-1-5-15                                      //
 
1259
//                                                                           //
 
1260
//     Local System            S-1-5-18                                      //
 
1261
//     Local Service           S-1-5-19                                      //
 
1262
//     Network Service         S-1-5-20                                      //
 
1263
//                                                                           //
 
1264
//     (NT non-unique IDs)     S-1-5-0x15-... (NT Domain Sids)               //
 
1265
//                                                                           //
 
1266
//     (Built-in domain)       S-1-5-0x20                                    //
 
1267
//                                                                           //
 
1268
//     (Security Package IDs)  S-1-5-0x40                                    //
 
1269
//     NTLM Authentication     S-1-5-0x40-10                                 //
 
1270
//     SChannel Authentication S-1-5-0x40-14                                 //
 
1271
//     Digest Authentication   S-1-5-0x40-21                                 //
 
1272
//                                                                           //
 
1273
//     Other Organization      S-1-5-1000    (>=1000 can not be filtered)    //
 
1274
//                                                                           //
 
1275
//                                                                           //
 
1276
// NOTE: the relative identifier values (RIDs) determine which security      //
 
1277
//       boundaries the SID is allowed to cross.  Before adding new RIDs,    //
 
1278
//       a determination needs to be made regarding which range they should  //
 
1279
//       be added to in order to ensure proper "SID filtering"               //
 
1280
//                                                                           //
 
1281
///////////////////////////////////////////////////////////////////////////////
 
1282
 
 
1283
const
 
1284
  SECURITY_NT_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5));
 
1285
  {$EXTERNALSYM SECURITY_NT_AUTHORITY}
 
1286
 
 
1287
  SECURITY_DIALUP_RID                 = $00000001;
 
1288
  {$EXTERNALSYM SECURITY_DIALUP_RID}
 
1289
  SECURITY_NETWORK_RID                = $00000002;
 
1290
  {$EXTERNALSYM SECURITY_NETWORK_RID}
 
1291
  SECURITY_BATCH_RID                  = $00000003;
 
1292
  {$EXTERNALSYM SECURITY_BATCH_RID}
 
1293
  SECURITY_INTERACTIVE_RID            = $00000004;
 
1294
  {$EXTERNALSYM SECURITY_INTERACTIVE_RID}
 
1295
  SECURITY_LOGON_IDS_RID              = $00000005;
 
1296
  {$EXTERNALSYM SECURITY_LOGON_IDS_RID}
 
1297
  SECURITY_LOGON_IDS_RID_COUNT        = 3;
 
1298
  {$EXTERNALSYM SECURITY_LOGON_IDS_RID_COUNT}
 
1299
  SECURITY_SERVICE_RID                = $00000006;
 
1300
  {$EXTERNALSYM SECURITY_SERVICE_RID}
 
1301
  SECURITY_ANONYMOUS_LOGON_RID        = $00000007;
 
1302
  {$EXTERNALSYM SECURITY_ANONYMOUS_LOGON_RID}
 
1303
  SECURITY_PROXY_RID                  = $00000008;
 
1304
  {$EXTERNALSYM SECURITY_PROXY_RID}
 
1305
  SECURITY_ENTERPRISE_CONTROLLERS_RID = $00000009;
 
1306
  {$EXTERNALSYM SECURITY_ENTERPRISE_CONTROLLERS_RID}
 
1307
  SECURITY_SERVER_LOGON_RID           = SECURITY_ENTERPRISE_CONTROLLERS_RID;
 
1308
  {$EXTERNALSYM SECURITY_SERVER_LOGON_RID}
 
1309
  SECURITY_PRINCIPAL_SELF_RID         = $0000000A;
 
1310
  {$EXTERNALSYM SECURITY_PRINCIPAL_SELF_RID}
 
1311
  SECURITY_AUTHENTICATED_USER_RID     = $0000000B;
 
1312
  {$EXTERNALSYM SECURITY_AUTHENTICATED_USER_RID}
 
1313
  SECURITY_RESTRICTED_CODE_RID        = $0000000C;
 
1314
  {$EXTERNALSYM SECURITY_RESTRICTED_CODE_RID}
 
1315
  SECURITY_TERMINAL_SERVER_RID        = $0000000D;
 
1316
  {$EXTERNALSYM SECURITY_TERMINAL_SERVER_RID}
 
1317
  SECURITY_REMOTE_LOGON_RID           = $0000000E;
 
1318
  {$EXTERNALSYM SECURITY_REMOTE_LOGON_RID}
 
1319
  SECURITY_THIS_ORGANIZATION_RID      = $0000000F;
 
1320
  {$EXTERNALSYM SECURITY_THIS_ORGANIZATION_RID}
 
1321
 
 
1322
  SECURITY_LOCAL_SYSTEM_RID    = $00000012;
 
1323
  {$EXTERNALSYM SECURITY_LOCAL_SYSTEM_RID}
 
1324
  SECURITY_LOCAL_SERVICE_RID   = $00000013;
 
1325
  {$EXTERNALSYM SECURITY_LOCAL_SERVICE_RID}
 
1326
  SECURITY_NETWORK_SERVICE_RID = $00000014;
 
1327
  {$EXTERNALSYM SECURITY_NETWORK_SERVICE_RID}
 
1328
 
 
1329
  SECURITY_NT_NON_UNIQUE       = $00000015;
 
1330
  {$EXTERNALSYM SECURITY_NT_NON_UNIQUE}
 
1331
  SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT = 3;
 
1332
  {$EXTERNALSYM SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT}
 
1333
 
 
1334
  SECURITY_BUILTIN_DOMAIN_RID  = $00000020;
 
1335
  {$EXTERNALSYM SECURITY_BUILTIN_DOMAIN_RID}
 
1336
 
 
1337
  SECURITY_PACKAGE_BASE_RID       = $00000040;
 
1338
  {$EXTERNALSYM SECURITY_PACKAGE_BASE_RID}
 
1339
  SECURITY_PACKAGE_RID_COUNT      = 2;
 
1340
  {$EXTERNALSYM SECURITY_PACKAGE_RID_COUNT}
 
1341
  SECURITY_PACKAGE_NTLM_RID       = $0000000A;
 
1342
  {$EXTERNALSYM SECURITY_PACKAGE_NTLM_RID}
 
1343
  SECURITY_PACKAGE_SCHANNEL_RID   = $0000000E;
 
1344
  {$EXTERNALSYM SECURITY_PACKAGE_SCHANNEL_RID}
 
1345
  SECURITY_PACKAGE_DIGEST_RID     = $00000015;
 
1346
  {$EXTERNALSYM SECURITY_PACKAGE_DIGEST_RID}
 
1347
 
 
1348
  SECURITY_MAX_ALWAYS_FILTERED    = $000003E7;
 
1349
  {$EXTERNALSYM SECURITY_MAX_ALWAYS_FILTERED}
 
1350
  SECURITY_MIN_NEVER_FILTERED     = $000003E8;
 
1351
  {$EXTERNALSYM SECURITY_MIN_NEVER_FILTERED}
 
1352
 
 
1353
  SECURITY_OTHER_ORGANIZATION_RID = $000003E8;
 
1354
  {$EXTERNALSYM SECURITY_OTHER_ORGANIZATION_RID}
 
1355
 
 
1356
/////////////////////////////////////////////////////////////////////////////
 
1357
//                                                                         //
 
1358
// well-known domain relative sub-authority values (RIDs)...               //
 
1359
//                                                                         //
 
1360
/////////////////////////////////////////////////////////////////////////////
 
1361
 
 
1362
// Well-known users ...
 
1363
 
 
1364
  FOREST_USER_RID_MAX    = $000001F3;
 
1365
  {$EXTERNALSYM FOREST_USER_RID_MAX}
 
1366
 
 
1367
  DOMAIN_USER_RID_ADMIN  = $000001F4;
 
1368
  {$EXTERNALSYM DOMAIN_USER_RID_ADMIN}
 
1369
  DOMAIN_USER_RID_GUEST  = $000001F5;
 
1370
  {$EXTERNALSYM DOMAIN_USER_RID_GUEST}
 
1371
  DOMAIN_USER_RID_KRBTGT = $000001F6;
 
1372
  {$EXTERNALSYM DOMAIN_USER_RID_KRBTGT}
 
1373
 
 
1374
  DOMAIN_USER_RID_MAX    = $000003E7;
 
1375
  {$EXTERNALSYM DOMAIN_USER_RID_MAX}
 
1376
 
 
1377
// well-known groups ...
 
1378
 
 
1379
  DOMAIN_GROUP_RID_ADMINS            = $00000200;
 
1380
  {$EXTERNALSYM DOMAIN_GROUP_RID_ADMINS}
 
1381
  DOMAIN_GROUP_RID_USERS             = $00000201;
 
1382
  {$EXTERNALSYM DOMAIN_GROUP_RID_USERS}
 
1383
  DOMAIN_GROUP_RID_GUESTS            = $00000202;
 
1384
  {$EXTERNALSYM DOMAIN_GROUP_RID_GUESTS}
 
1385
  DOMAIN_GROUP_RID_COMPUTERS         = $00000203;
 
1386
  {$EXTERNALSYM DOMAIN_GROUP_RID_COMPUTERS}
 
1387
  DOMAIN_GROUP_RID_CONTROLLERS       = $00000204;
 
1388
  {$EXTERNALSYM DOMAIN_GROUP_RID_CONTROLLERS}
 
1389
  DOMAIN_GROUP_RID_CERT_ADMINS       = $00000205;
 
1390
  {$EXTERNALSYM DOMAIN_GROUP_RID_CERT_ADMINS}
 
1391
  DOMAIN_GROUP_RID_SCHEMA_ADMINS     = $00000206;
 
1392
  {$EXTERNALSYM DOMAIN_GROUP_RID_SCHEMA_ADMINS}
 
1393
  DOMAIN_GROUP_RID_ENTERPRISE_ADMINS = $00000207;
 
1394
  {$EXTERNALSYM DOMAIN_GROUP_RID_ENTERPRISE_ADMINS}
 
1395
  DOMAIN_GROUP_RID_POLICY_ADMINS     = $00000208;
 
1396
  {$EXTERNALSYM DOMAIN_GROUP_RID_POLICY_ADMINS}
 
1397
 
 
1398
// well-known aliases ...
 
1399
 
 
1400
  DOMAIN_ALIAS_RID_ADMINS           = $00000220;
 
1401
  {$EXTERNALSYM DOMAIN_ALIAS_RID_ADMINS}
 
1402
  DOMAIN_ALIAS_RID_USERS            = $00000221;
 
1403
  {$EXTERNALSYM DOMAIN_ALIAS_RID_USERS}
 
1404
  DOMAIN_ALIAS_RID_GUESTS           = $00000222;
 
1405
  {$EXTERNALSYM DOMAIN_ALIAS_RID_GUESTS}
 
1406
  DOMAIN_ALIAS_RID_POWER_USERS      = $00000223;
 
1407
  {$EXTERNALSYM DOMAIN_ALIAS_RID_POWER_USERS}
 
1408
 
 
1409
  DOMAIN_ALIAS_RID_ACCOUNT_OPS      = $00000224;
 
1410
  {$EXTERNALSYM DOMAIN_ALIAS_RID_ACCOUNT_OPS}
 
1411
  DOMAIN_ALIAS_RID_SYSTEM_OPS       = $00000225;
 
1412
  {$EXTERNALSYM DOMAIN_ALIAS_RID_SYSTEM_OPS}
 
1413
  DOMAIN_ALIAS_RID_PRINT_OPS        = $00000226;
 
1414
  {$EXTERNALSYM DOMAIN_ALIAS_RID_PRINT_OPS}
 
1415
  DOMAIN_ALIAS_RID_BACKUP_OPS       = $00000227;
 
1416
  {$EXTERNALSYM DOMAIN_ALIAS_RID_BACKUP_OPS}
 
1417
 
 
1418
  DOMAIN_ALIAS_RID_REPLICATOR       = $00000228;
 
1419
  {$EXTERNALSYM DOMAIN_ALIAS_RID_REPLICATOR}
 
1420
  DOMAIN_ALIAS_RID_RAS_SERVERS      = $00000229;
 
1421
  {$EXTERNALSYM DOMAIN_ALIAS_RID_RAS_SERVERS}
 
1422
  DOMAIN_ALIAS_RID_PREW2KCOMPACCESS = $0000022A;
 
1423
  {$EXTERNALSYM DOMAIN_ALIAS_RID_PREW2KCOMPACCESS}
 
1424
  DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS = $0000022B;
 
1425
  {$EXTERNALSYM DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS}
 
1426
  DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS = $0000022C;
 
1427
  {$EXTERNALSYM DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS}
 
1428
  DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS = $0000022D;
 
1429
  {$EXTERNALSYM DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS}
 
1430
 
 
1431
  DOMAIN_ALIAS_RID_MONITORING_USERS      = $0000022E;
 
1432
  {$EXTERNALSYM DOMAIN_ALIAS_RID_MONITORING_USERS}
 
1433
  DOMAIN_ALIAS_RID_LOGGING_USERS         = $0000022F;
 
1434
  {$EXTERNALSYM DOMAIN_ALIAS_RID_LOGGING_USERS}
 
1435
  DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS   = $00000230;
 
1436
  {$EXTERNALSYM DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS}
 
1437
  DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS    = $00000231;
 
1438
  {$EXTERNALSYM DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS}
 
1439
 
 
1440
type
 
1441
  WELL_KNOWN_SID_TYPE = (
 
1442
    WinNullSid,
 
1443
    WinWorldSid,
 
1444
    WinLocalSid,
 
1445
    WinCreatorOwnerSid,
 
1446
    WinCreatorGroupSid,
 
1447
    WinCreatorOwnerServerSid,
 
1448
    WinCreatorGroupServerSid,
 
1449
    WinNtAuthoritySid,
 
1450
    WinDialupSid,
 
1451
    WinNetworkSid,
 
1452
    WinBatchSid,
 
1453
    WinInteractiveSid,
 
1454
    WinServiceSid,
 
1455
    WinAnonymousSid,
 
1456
    WinProxySid,
 
1457
    WinEnterpriseControllersSid,
 
1458
    WinSelfSid,
 
1459
    WinAuthenticatedUserSid,
 
1460
    WinRestrictedCodeSid,
 
1461
    WinTerminalServerSid,
 
1462
    WinRemoteLogonIdSid,
 
1463
    WinLogonIdsSid,
 
1464
    WinLocalSystemSid,
 
1465
    WinLocalServiceSid,
 
1466
    WinNetworkServiceSid,
 
1467
    WinBuiltinDomainSid,
 
1468
    WinBuiltinAdministratorsSid,
 
1469
    WinBuiltinUsersSid,
 
1470
    WinBuiltinGuestsSid,
 
1471
    WinBuiltinPowerUsersSid,
 
1472
    WinBuiltinAccountOperatorsSid,
 
1473
    WinBuiltinSystemOperatorsSid,
 
1474
    WinBuiltinPrintOperatorsSid,
 
1475
    WinBuiltinBackupOperatorsSid,
 
1476
    WinBuiltinReplicatorSid,
 
1477
    WinBuiltinPreWindows2000CompatibleAccessSid,
 
1478
    WinBuiltinRemoteDesktopUsersSid,
 
1479
    WinBuiltinNetworkConfigurationOperatorsSid,
 
1480
    WinAccountAdministratorSid,
 
1481
    WinAccountGuestSid,
 
1482
    WinAccountKrbtgtSid,
 
1483
    WinAccountDomainAdminsSid,
 
1484
    WinAccountDomainUsersSid,
 
1485
    WinAccountDomainGuestsSid,
 
1486
    WinAccountComputersSid,
 
1487
    WinAccountControllersSid,
 
1488
    WinAccountCertAdminsSid,
 
1489
    WinAccountSchemaAdminsSid,
 
1490
    WinAccountEnterpriseAdminsSid,
 
1491
    WinAccountPolicyAdminsSid,
 
1492
    WinAccountRasAndIasServersSid,
 
1493
    WinNTLMAuthenticationSid,
 
1494
    WinDigestAuthenticationSid,
 
1495
    WinSChannelAuthenticationSid,
 
1496
    WinThisOrganizationSid,
 
1497
    WinOtherOrganizationSid,
 
1498
    WinBuiltinIncomingForestTrustBuildersSid,
 
1499
    WinBuiltinPerfMonitoringUsersSid,
 
1500
    WinBuiltinPerfLoggingUsersSid,
 
1501
    WinBuiltinAuthorizationAccessSid,
 
1502
    WinBuiltinTerminalServerLicenseServersSid);
 
1503
  {$EXTERNALSYM WELL_KNOWN_SID_TYPE}
 
1504
  TWellKnownSidType = WELL_KNOWN_SID_TYPE;
 
1505
 
 
1506
//
 
1507
// Allocate the System Luid.  The first 1000 LUIDs are reserved.
 
1508
// Use #999 here (0x3E7 = 999)
 
1509
//
 
1510
 
 
1511
const
 
1512
  SYSTEM_LUID: LUID = (LowPart: $3E7; HighPart: $0);
 
1513
  {$EXTERNALSYM SYSTEM_LUID}
 
1514
  ANONYMOUS_LOGON_LUID: LUID = (LowPart: $3E6; HighPart: $0);
 
1515
  {$EXTERNALSYM ANONYMOUS_LOGON_LUID}
 
1516
  LOCALSERVICE_LUID: LUID = (LowPart: $3E5; HighPart: $0);
 
1517
  {$EXTERNALSYM LOCALSERVICE_LUID}
 
1518
  NETWORKSERVICE_LUID: LUID = (LowPart: $3E4; HighPart: $0);
 
1519
  {$EXTERNALSYM NETWORKSERVICE_LUID}
 
1520
 
 
1521
////////////////////////////////////////////////////////////////////////
 
1522
//                                                                    //
 
1523
//                          User and Group related SID attributes     //
 
1524
//                                                                    //
 
1525
////////////////////////////////////////////////////////////////////////
 
1526
 
 
1527
//
 
1528
// Group attributes
 
1529
//
 
1530
 
 
1531
  SE_GROUP_MANDATORY          = $00000001;
 
1532
  {$EXTERNALSYM SE_GROUP_MANDATORY}
 
1533
  SE_GROUP_ENABLED_BY_DEFAULT = $00000002;
 
1534
  {$EXTERNALSYM SE_GROUP_ENABLED_BY_DEFAULT}
 
1535
  SE_GROUP_ENABLED            = $00000004;
 
1536
  {$EXTERNALSYM SE_GROUP_ENABLED}
 
1537
  SE_GROUP_OWNER              = $00000008;
 
1538
  {$EXTERNALSYM SE_GROUP_OWNER}
 
1539
  SE_GROUP_USE_FOR_DENY_ONLY  = $00000010;
 
1540
  {$EXTERNALSYM SE_GROUP_USE_FOR_DENY_ONLY}
 
1541
  SE_GROUP_LOGON_ID           = $C0000000;
 
1542
  {$EXTERNALSYM SE_GROUP_LOGON_ID}
 
1543
  SE_GROUP_RESOURCE           = $20000000;
 
1544
  {$EXTERNALSYM SE_GROUP_RESOURCE}
 
1545
 
 
1546
//
 
1547
// User attributes
 
1548
//
 
1549
 
 
1550
// (None yet defined.)
 
1551
 
 
1552
////////////////////////////////////////////////////////////////////////
 
1553
//                                                                    //
 
1554
//                         ACL  and  ACE                              //
 
1555
//                                                                    //
 
1556
////////////////////////////////////////////////////////////////////////
 
1557
 
 
1558
//
 
1559
//  Define an ACL and the ACE format.  The structure of an ACL header
 
1560
//  followed by one or more ACEs.  Pictorally the structure of an ACL header
 
1561
//  is as follows:
 
1562
//
 
1563
//       3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 
1564
//       1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 
1565
//      +-------------------------------+---------------+---------------+
 
1566
//      |            AclSize            |      Sbz1     |  AclRevision  |
 
1567
//      +-------------------------------+---------------+---------------+
 
1568
//      |              Sbz2             |           AceCount            |
 
1569
//      +-------------------------------+-------------------------------+
 
1570
//
 
1571
//  The current AclRevision is defined to be ACL_REVISION.
 
1572
//
 
1573
//  AclSize is the size, in bytes, allocated for the ACL.  This includes
 
1574
//  the ACL header, ACES, and remaining free space in the buffer.
 
1575
//
 
1576
//  AceCount is the number of ACES in the ACL.
 
1577
//
 
1578
 
 
1579
// This is the *current* ACL revision
 
1580
 
 
1581
  ACL_REVISION    = 2;
 
1582
  {$EXTERNALSYM ACL_REVISION}
 
1583
  ACL_REVISION_DS = 4;
 
1584
  {$EXTERNALSYM ACL_REVISION_DS}
 
1585
 
 
1586
// This is the history of ACL revisions.  Add a new one whenever
 
1587
// ACL_REVISION is updated
 
1588
 
 
1589
  ACL_REVISION1    = 1;
 
1590
  {$EXTERNALSYM ACL_REVISION1}
 
1591
  ACL_REVISION2    = 2;
 
1592
  {$EXTERNALSYM ACL_REVISION2}
 
1593
  MIN_ACL_REVISION = ACL_REVISION2;
 
1594
  {$EXTERNALSYM MIN_ACL_REVISION}
 
1595
  ACL_REVISION3    = 3;
 
1596
  {$EXTERNALSYM ACL_REVISION3}
 
1597
  ACL_REVISION4    = 4;
 
1598
  {$EXTERNALSYM ACL_REVISION4}
 
1599
  MAX_ACL_REVISION = ACL_REVISION4;
 
1600
  {$EXTERNALSYM MAX_ACL_REVISION}
 
1601
 
 
1602
type
 
1603
  PACL = ^ACL;
 
1604
  {$EXTERNALSYM PACL}
 
1605
  _ACL = record
 
1606
    AclRevision: Byte;
 
1607
    Sbz1: Byte;
 
1608
    AclSize: Word;
 
1609
    AceCount: Word;
 
1610
    Sbz2: Word;
 
1611
  end;
 
1612
  {$EXTERNALSYM _ACL}
 
1613
  ACL = _ACL;
 
1614
  {$EXTERNALSYM ACL}
 
1615
  TAcl = ACL;
 
1616
 
 
1617
  PPACL = ^PAcl;
 
1618
  {$NODEFINE PPACL}
 
1619
 
 
1620
//
 
1621
//  The structure of an ACE is a common ace header followed by ace type
 
1622
//  specific data.  Pictorally the structure of the common ace header is
 
1623
//  as follows:
 
1624
//
 
1625
//       3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 
1626
//       1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 
1627
//      +---------------+-------+-------+---------------+---------------+
 
1628
//      |            AceSize            |    AceFlags   |     AceType   |
 
1629
//      +---------------+-------+-------+---------------+---------------+
 
1630
//
 
1631
//  AceType denotes the type of the ace, there are some predefined ace
 
1632
//  types
 
1633
//
 
1634
//  AceSize is the size, in bytes, of ace.
 
1635
//
 
1636
//  AceFlags are the Ace flags for audit and inheritance, defined shortly.
 
1637
 
 
1638
type
 
1639
  PACE_HEADER = ^ACE_HEADER;
 
1640
  {$EXTERNALSYM PACE_HEADER}
 
1641
  _ACE_HEADER = record
 
1642
    AceType: Byte;
 
1643
    AceFlags: Byte;
 
1644
    AceSize: Word;
 
1645
  end;
 
1646
  {$EXTERNALSYM _ACE_HEADER}
 
1647
  ACE_HEADER = _ACE_HEADER;
 
1648
  {$EXTERNALSYM ACE_HEADER}
 
1649
  TAceHeader = ACE_HEADER;
 
1650
  PAceHeader = PACE_HEADER;
 
1651
 
 
1652
//
 
1653
//  The following are the predefined ace types that go into the AceType
 
1654
//  field of an Ace header.
 
1655
//
 
1656
 
 
1657
const
 
1658
  ACCESS_MIN_MS_ACE_TYPE    = $0;
 
1659
  {$EXTERNALSYM ACCESS_MIN_MS_ACE_TYPE}
 
1660
  ACCESS_ALLOWED_ACE_TYPE   = $0;
 
1661
  {$EXTERNALSYM ACCESS_ALLOWED_ACE_TYPE}
 
1662
  ACCESS_DENIED_ACE_TYPE    = $1;
 
1663
  {$EXTERNALSYM ACCESS_DENIED_ACE_TYPE}
 
1664
  SYSTEM_AUDIT_ACE_TYPE     = $2;
 
1665
  {$EXTERNALSYM SYSTEM_AUDIT_ACE_TYPE}
 
1666
  SYSTEM_ALARM_ACE_TYPE     = $3;
 
1667
  {$EXTERNALSYM SYSTEM_ALARM_ACE_TYPE}
 
1668
  ACCESS_MAX_MS_V2_ACE_TYPE = $3;
 
1669
  {$EXTERNALSYM ACCESS_MAX_MS_V2_ACE_TYPE}
 
1670
 
 
1671
  ACCESS_ALLOWED_COMPOUND_ACE_TYPE = $4;
 
1672
  {$EXTERNALSYM ACCESS_ALLOWED_COMPOUND_ACE_TYPE}
 
1673
  ACCESS_MAX_MS_V3_ACE_TYPE        = $4;
 
1674
  {$EXTERNALSYM ACCESS_MAX_MS_V3_ACE_TYPE}
 
1675
 
 
1676
  ACCESS_MIN_MS_OBJECT_ACE_TYPE  = $5;
 
1677
  {$EXTERNALSYM ACCESS_MIN_MS_OBJECT_ACE_TYPE}
 
1678
  ACCESS_ALLOWED_OBJECT_ACE_TYPE = $5;
 
1679
  {$EXTERNALSYM ACCESS_ALLOWED_OBJECT_ACE_TYPE}
 
1680
  ACCESS_DENIED_OBJECT_ACE_TYPE  = $6;
 
1681
  {$EXTERNALSYM ACCESS_DENIED_OBJECT_ACE_TYPE}
 
1682
  SYSTEM_AUDIT_OBJECT_ACE_TYPE   = $7;
 
1683
  {$EXTERNALSYM SYSTEM_AUDIT_OBJECT_ACE_TYPE}
 
1684
  SYSTEM_ALARM_OBJECT_ACE_TYPE   = $8;
 
1685
  {$EXTERNALSYM SYSTEM_ALARM_OBJECT_ACE_TYPE}
 
1686
  ACCESS_MAX_MS_OBJECT_ACE_TYPE  = $8;
 
1687
  {$EXTERNALSYM ACCESS_MAX_MS_OBJECT_ACE_TYPE}
 
1688
 
 
1689
  ACCESS_MAX_MS_V4_ACE_TYPE = $8;
 
1690
  {$EXTERNALSYM ACCESS_MAX_MS_V4_ACE_TYPE}
 
1691
  ACCESS_MAX_MS_ACE_TYPE    = $8;
 
1692
  {$EXTERNALSYM ACCESS_MAX_MS_ACE_TYPE}
 
1693
 
 
1694
  ACCESS_ALLOWED_CALLBACK_ACE_TYPE        = $9;
 
1695
  {$EXTERNALSYM ACCESS_ALLOWED_CALLBACK_ACE_TYPE}
 
1696
  ACCESS_DENIED_CALLBACK_ACE_TYPE         = $A;
 
1697
  {$EXTERNALSYM ACCESS_DENIED_CALLBACK_ACE_TYPE}
 
1698
  ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE = $B;
 
1699
  {$EXTERNALSYM ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE}
 
1700
  ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE  = $C;
 
1701
  {$EXTERNALSYM ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE}
 
1702
  SYSTEM_AUDIT_CALLBACK_ACE_TYPE          = $D;
 
1703
  {$EXTERNALSYM SYSTEM_AUDIT_CALLBACK_ACE_TYPE}
 
1704
  SYSTEM_ALARM_CALLBACK_ACE_TYPE          = $E;
 
1705
  {$EXTERNALSYM SYSTEM_ALARM_CALLBACK_ACE_TYPE}
 
1706
  SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE   = $F;
 
1707
  {$EXTERNALSYM SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE}
 
1708
  SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE   = $10;
 
1709
  {$EXTERNALSYM SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE}
 
1710
 
 
1711
  ACCESS_MAX_MS_V5_ACE_TYPE               = $10;
 
1712
  {$EXTERNALSYM ACCESS_MAX_MS_V5_ACE_TYPE}
 
1713
 
 
1714
//
 
1715
//  The following are the inherit flags that go into the AceFlags field
 
1716
//  of an Ace header.
 
1717
//
 
1718
 
 
1719
  OBJECT_INHERIT_ACE       = $1;
 
1720
  {$EXTERNALSYM OBJECT_INHERIT_ACE}
 
1721
  CONTAINER_INHERIT_ACE    = $2;
 
1722
  {$EXTERNALSYM CONTAINER_INHERIT_ACE}
 
1723
  NO_PROPAGATE_INHERIT_ACE = $4;
 
1724
  {$EXTERNALSYM NO_PROPAGATE_INHERIT_ACE}
 
1725
  INHERIT_ONLY_ACE         = $8;
 
1726
  {$EXTERNALSYM INHERIT_ONLY_ACE}
 
1727
  INHERITED_ACE            = $10;
 
1728
  {$EXTERNALSYM INHERITED_ACE}
 
1729
  VALID_INHERIT_FLAGS      = $1F;
 
1730
  {$EXTERNALSYM VALID_INHERIT_FLAGS}
 
1731
 
 
1732
//  The following are the currently defined ACE flags that go into the
 
1733
//  AceFlags field of an ACE header.  Each ACE type has its own set of
 
1734
//  AceFlags.
 
1735
//
 
1736
//  SUCCESSFUL_ACCESS_ACE_FLAG - used only with system audit and alarm ACE
 
1737
//  types to indicate that a message is generated for successful accesses.
 
1738
//
 
1739
//  FAILED_ACCESS_ACE_FLAG - used only with system audit and alarm ACE types
 
1740
//  to indicate that a message is generated for failed accesses.
 
1741
//
 
1742
 
 
1743
//
 
1744
//  SYSTEM_AUDIT and SYSTEM_ALARM AceFlags
 
1745
//
 
1746
//  These control the signaling of audit and alarms for success or failure.
 
1747
//
 
1748
 
 
1749
  SUCCESSFUL_ACCESS_ACE_FLAG = $40;
 
1750
  {$EXTERNALSYM SUCCESSFUL_ACCESS_ACE_FLAG}
 
1751
  FAILED_ACCESS_ACE_FLAG     = $80;
 
1752
  {$EXTERNALSYM FAILED_ACCESS_ACE_FLAG}
 
1753
 
 
1754
//
 
1755
//  We'll define the structure of the predefined ACE types.  Pictorally
 
1756
//  the structure of the predefined ACE's is as follows:
 
1757
//
 
1758
//       3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 
1759
//       1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 
1760
//      +---------------+-------+-------+---------------+---------------+
 
1761
//      |    AceFlags   | Resd  |Inherit|    AceSize    |     AceType   |
 
1762
//      +---------------+-------+-------+---------------+---------------+
 
1763
//      |                              Mask                             |
 
1764
//      +---------------------------------------------------------------+
 
1765
//      |                                                               |
 
1766
//      +                                                               +
 
1767
//      |                                                               |
 
1768
//      +                              Sid                              +
 
1769
//      |                                                               |
 
1770
//      +                                                               +
 
1771
//      |                                                               |
 
1772
//      +---------------------------------------------------------------+
 
1773
//
 
1774
//  Mask is the access mask associated with the ACE.  This is either the
 
1775
//  access allowed, access denied, audit, or alarm mask.
 
1776
//
 
1777
//  Sid is the Sid associated with the ACE.
 
1778
//
 
1779
 
 
1780
//  The following are the four predefined ACE types.
 
1781
 
 
1782
//  Examine the AceType field in the Header to determine
 
1783
//  which structure is appropriate to use for casting.
 
1784
 
 
1785
type
 
1786
  PACCESS_ALLOWED_ACE = ^ACCESS_ALLOWED_ACE;
 
1787
  {$EXTERNALSYM PACCESS_ALLOWED_ACE}
 
1788
  _ACCESS_ALLOWED_ACE = record
 
1789
    Header: ACE_HEADER;
 
1790
    Mask: ACCESS_MASK;
 
1791
    SidStart: DWORD;
 
1792
  end;
 
1793
  {$EXTERNALSYM _ACCESS_ALLOWED_ACE}
 
1794
  ACCESS_ALLOWED_ACE = _ACCESS_ALLOWED_ACE;
 
1795
  {$EXTERNALSYM ACCESS_ALLOWED_ACE}
 
1796
  TAccessAllowedAce = ACCESS_ALLOWED_ACE;
 
1797
  PAccessAllowedAce = PACCESS_ALLOWED_ACE;
 
1798
 
 
1799
  PACCESS_DENIED_ACE = ^ACCESS_DENIED_ACE;
 
1800
  {$EXTERNALSYM PACCESS_DENIED_ACE}
 
1801
  _ACCESS_DENIED_ACE = record
 
1802
    Header: ACE_HEADER;
 
1803
    Mask: ACCESS_MASK;
 
1804
    SidStart: DWORD;
 
1805
  end;
 
1806
  {$EXTERNALSYM _ACCESS_DENIED_ACE}
 
1807
  ACCESS_DENIED_ACE = _ACCESS_DENIED_ACE;
 
1808
  {$EXTERNALSYM ACCESS_DENIED_ACE}
 
1809
  TAccessDeniedAce = ACCESS_DENIED_ACE;
 
1810
  PAccessDeniedAce = PACCESS_DENIED_ACE;
 
1811
 
 
1812
  PSYSTEM_AUDIT_ACE = ^SYSTEM_AUDIT_ACE;
 
1813
  {$EXTERNALSYM PSYSTEM_AUDIT_ACE}
 
1814
  _SYSTEM_AUDIT_ACE = record
 
1815
    Header: ACE_HEADER;
 
1816
    Mask: ACCESS_MASK;
 
1817
    SidStart: DWORD;
 
1818
  end;
 
1819
  {$EXTERNALSYM _SYSTEM_AUDIT_ACE}
 
1820
  SYSTEM_AUDIT_ACE = _SYSTEM_AUDIT_ACE;
 
1821
  {$EXTERNALSYM SYSTEM_AUDIT_ACE}
 
1822
  TSystemAuditAce = SYSTEM_AUDIT_ACE;
 
1823
  PSystemAuditAce = PSYSTEM_AUDIT_ACE;
 
1824
 
 
1825
  PSYSTEM_ALARM_ACE = ^SYSTEM_ALARM_ACE;
 
1826
  {$EXTERNALSYM PSYSTEM_ALARM_ACE}
 
1827
  _SYSTEM_ALARM_ACE = record
 
1828
    Header: ACE_HEADER;
 
1829
    Mask: ACCESS_MASK;
 
1830
    SidStart: DWORD;
 
1831
  end;
 
1832
  {$EXTERNALSYM _SYSTEM_ALARM_ACE}
 
1833
  SYSTEM_ALARM_ACE = _SYSTEM_ALARM_ACE;
 
1834
  {$EXTERNALSYM SYSTEM_ALARM_ACE}
 
1835
  TSystemAlarmAce = SYSTEM_ALARM_ACE;
 
1836
  PSystemAlarmAce = PSYSTEM_ALARM_ACE;
 
1837
 
 
1838
  PACCESS_ALLOWED_OBJECT_ACE = ^ACCESS_ALLOWED_OBJECT_ACE;
 
1839
  {$EXTERNALSYM PACCESS_ALLOWED_OBJECT_ACE}
 
1840
  _ACCESS_ALLOWED_OBJECT_ACE = record
 
1841
    Header: ACE_HEADER;
 
1842
    Mask: ACCESS_MASK;
 
1843
    Flags: DWORD;
 
1844
    ObjectType: GUID;
 
1845
    InheritedObjectType: GUID;
 
1846
    SidStart: DWORD;
 
1847
  end;
 
1848
  {$EXTERNALSYM _ACCESS_ALLOWED_OBJECT_ACE}
 
1849
  ACCESS_ALLOWED_OBJECT_ACE = _ACCESS_ALLOWED_OBJECT_ACE;
 
1850
  {$EXTERNALSYM ACCESS_ALLOWED_OBJECT_ACE}
 
1851
  TAccessAllowedObjectAce = ACCESS_ALLOWED_OBJECT_ACE;
 
1852
  PAccessAllowedObjectAce = PACCESS_ALLOWED_OBJECT_ACE;
 
1853
 
 
1854
  PACCESS_DENIED_OBJECT_ACE = ^ACCESS_DENIED_OBJECT_ACE;
 
1855
  {$EXTERNALSYM PACCESS_DENIED_OBJECT_ACE}
 
1856
  _ACCESS_DENIED_OBJECT_ACE = record
 
1857
    Header: ACE_HEADER;
 
1858
    Mask: ACCESS_MASK;
 
1859
    Flags: DWORD;
 
1860
    ObjectType: GUID;
 
1861
    InheritedObjectType: GUID;
 
1862
    SidStart: DWORD;
 
1863
  end;
 
1864
  {$EXTERNALSYM _ACCESS_DENIED_OBJECT_ACE}
 
1865
  ACCESS_DENIED_OBJECT_ACE = _ACCESS_DENIED_OBJECT_ACE;
 
1866
  {$EXTERNALSYM ACCESS_DENIED_OBJECT_ACE}
 
1867
  TAccessDeniedObjectAce = ACCESS_DENIED_OBJECT_ACE;
 
1868
  PAccessDeniedObjectAce = PACCESS_DENIED_OBJECT_ACE;
 
1869
 
 
1870
  PSYSTEM_AUDIT_OBJECT_ACE = ^SYSTEM_AUDIT_OBJECT_ACE;
 
1871
  {$EXTERNALSYM PSYSTEM_AUDIT_OBJECT_ACE}
 
1872
  _SYSTEM_AUDIT_OBJECT_ACE = record
 
1873
    Header: ACE_HEADER;
 
1874
    Mask: ACCESS_MASK;
 
1875
    Flags: DWORD;
 
1876
    ObjectType: GUID;
 
1877
    InheritedObjectType: GUID;
 
1878
    SidStart: DWORD;
 
1879
  end;
 
1880
  {$EXTERNALSYM _SYSTEM_AUDIT_OBJECT_ACE}
 
1881
  SYSTEM_AUDIT_OBJECT_ACE = _SYSTEM_AUDIT_OBJECT_ACE;
 
1882
  {$EXTERNALSYM SYSTEM_AUDIT_OBJECT_ACE}
 
1883
  TSystemAuditObjectAce = SYSTEM_AUDIT_OBJECT_ACE;
 
1884
  PSystemAuditObjectAce = PSYSTEM_AUDIT_OBJECT_ACE;
 
1885
 
 
1886
  PSYSTEM_ALARM_OBJECT_ACE = ^SYSTEM_ALARM_OBJECT_ACE;
 
1887
  {$EXTERNALSYM PSYSTEM_ALARM_OBJECT_ACE}
 
1888
  _SYSTEM_ALARM_OBJECT_ACE = record
 
1889
    Header: ACE_HEADER;
 
1890
    Mask: ACCESS_MASK;
 
1891
    Flags: DWORD;
 
1892
    ObjectType: GUID;
 
1893
    InheritedObjectType: GUID;
 
1894
    SidStart: DWORD;
 
1895
  end;
 
1896
  {$EXTERNALSYM _SYSTEM_ALARM_OBJECT_ACE}
 
1897
  SYSTEM_ALARM_OBJECT_ACE = _SYSTEM_ALARM_OBJECT_ACE;
 
1898
  {$EXTERNALSYM SYSTEM_ALARM_OBJECT_ACE}
 
1899
  TSystemAlarmObjectAce = SYSTEM_ALARM_OBJECT_ACE;
 
1900
  PSystemAlarmObjectAce = PSYSTEM_ALARM_OBJECT_ACE;
 
1901
 
 
1902
//
 
1903
// Callback ace support in post Win2000.
 
1904
// Resource managers can put their own data after Sidstart + Length of the sid
 
1905
//
 
1906
 
 
1907
  _ACCESS_ALLOWED_CALLBACK_ACE = record
 
1908
    Header: ACE_HEADER;
 
1909
    Mask: ACCESS_MASK;
 
1910
    SidStart: DWORD;
 
1911
    // Opaque resouce manager specific data
 
1912
  end;
 
1913
  {$EXTERNALSYM _ACCESS_ALLOWED_CALLBACK_ACE}
 
1914
  ACCESS_ALLOWED_CALLBACK_ACE = _ACCESS_ALLOWED_CALLBACK_ACE;
 
1915
  {$EXTERNALSYM ACCESS_ALLOWED_CALLBACK_ACE}
 
1916
  PACCESS_ALLOWED_CALLBACK_ACE = ^ACCESS_ALLOWED_CALLBACK_ACE;
 
1917
  {$EXTERNALSYM PACCESS_ALLOWED_CALLBACK_ACE}
 
1918
  TAccessAllowedCallBackAce = ACCESS_ALLOWED_CALLBACK_ACE;
 
1919
  PAccessAllowedCallBackAce = PACCESS_ALLOWED_CALLBACK_ACE;
 
1920
 
 
1921
  _ACCESS_DENIED_CALLBACK_ACE = record
 
1922
    Header: ACE_HEADER;
 
1923
    Mask: ACCESS_MASK;
 
1924
    SidStart: DWORD;
 
1925
    // Opaque resouce manager specific data
 
1926
  end;
 
1927
  {$EXTERNALSYM _ACCESS_DENIED_CALLBACK_ACE}
 
1928
  ACCESS_DENIED_CALLBACK_ACE = _ACCESS_DENIED_CALLBACK_ACE;
 
1929
  {$EXTERNALSYM ACCESS_DENIED_CALLBACK_ACE}
 
1930
  PACCESS_DENIED_CALLBACK_ACE = ^ACCESS_DENIED_CALLBACK_ACE;
 
1931
  {$EXTERNALSYM PACCESS_DENIED_CALLBACK_ACE}
 
1932
  TAccessDeniedCallBackAce = ACCESS_DENIED_CALLBACK_ACE;
 
1933
  PAccessDeniedCallBackAce = PACCESS_DENIED_CALLBACK_ACE;
 
1934
 
 
1935
  _SYSTEM_AUDIT_CALLBACK_ACE = record
 
1936
    Header: ACE_HEADER;
 
1937
    Mask: ACCESS_MASK;
 
1938
    SidStart: DWORD;
 
1939
    // Opaque resouce manager specific data
 
1940
  end;
 
1941
  {$EXTERNALSYM _SYSTEM_AUDIT_CALLBACK_ACE}
 
1942
  SYSTEM_AUDIT_CALLBACK_ACE = _SYSTEM_AUDIT_CALLBACK_ACE;
 
1943
  {$EXTERNALSYM SYSTEM_AUDIT_CALLBACK_ACE}
 
1944
  PSYSTEM_AUDIT_CALLBACK_ACE = ^SYSTEM_AUDIT_CALLBACK_ACE;
 
1945
  {$EXTERNALSYM PSYSTEM_AUDIT_CALLBACK_ACE}
 
1946
  TSystemAuditCallBackAce = SYSTEM_AUDIT_CALLBACK_ACE;
 
1947
  PSystemAuditCallBackAce = PSYSTEM_AUDIT_CALLBACK_ACE;
 
1948
 
 
1949
  _SYSTEM_ALARM_CALLBACK_ACE = record
 
1950
    Header: ACE_HEADER;
 
1951
    Mask: ACCESS_MASK;
 
1952
    SidStart: DWORD;
 
1953
    // Opaque resouce manager specific data
 
1954
  end;
 
1955
  {$EXTERNALSYM _SYSTEM_ALARM_CALLBACK_ACE}
 
1956
  SYSTEM_ALARM_CALLBACK_ACE = _SYSTEM_ALARM_CALLBACK_ACE;
 
1957
  {$EXTERNALSYM SYSTEM_ALARM_CALLBACK_ACE}
 
1958
  PSYSTEM_ALARM_CALLBACK_ACE = ^SYSTEM_ALARM_CALLBACK_ACE;
 
1959
  {$EXTERNALSYM PSYSTEM_ALARM_CALLBACK_ACE}
 
1960
  TSystemAlarmCallBackAce = SYSTEM_ALARM_CALLBACK_ACE;
 
1961
  PSystemAlarmCallBackAce = PSYSTEM_ALARM_CALLBACK_ACE;
 
1962
 
 
1963
  _ACCESS_ALLOWED_CALLBACK_OBJECT_ACE = record
 
1964
    Header: ACE_HEADER;
 
1965
    Mask: ACCESS_MASK;
 
1966
    Flags: DWORD;
 
1967
    ObjectType: GUID;
 
1968
    InheritedObjectType: GUID;
 
1969
    SidStart: DWORD;
 
1970
    // Opaque resouce manager specific data
 
1971
  end;
 
1972
  {$EXTERNALSYM _ACCESS_ALLOWED_CALLBACK_OBJECT_ACE}
 
1973
  ACCESS_ALLOWED_CALLBACK_OBJECT_ACE = _ACCESS_ALLOWED_CALLBACK_OBJECT_ACE;
 
1974
  {$EXTERNALSYM ACCESS_ALLOWED_CALLBACK_OBJECT_ACE}
 
1975
  PACCESS_ALLOWED_CALLBACK_OBJECT_ACE = ^ACCESS_ALLOWED_CALLBACK_OBJECT_ACE;
 
1976
  {$EXTERNALSYM PACCESS_ALLOWED_CALLBACK_OBJECT_ACE}
 
1977
  TAccessAllowedCallBackObjectAce = ACCESS_ALLOWED_CALLBACK_OBJECT_ACE;
 
1978
  PAccessAllowedCallBackObjectAce = PACCESS_ALLOWED_CALLBACK_OBJECT_ACE;
 
1979
 
 
1980
  _ACCESS_DENIED_CALLBACK_OBJECT_ACE = record
 
1981
    Header: ACE_HEADER;
 
1982
    Mask: ACCESS_MASK;
 
1983
    Flags: DWORD;
 
1984
    ObjectType: GUID;
 
1985
    InheritedObjectType: GUID;
 
1986
    SidStart: DWORD;
 
1987
    // Opaque resouce manager specific data
 
1988
  end;
 
1989
  {$EXTERNALSYM _ACCESS_DENIED_CALLBACK_OBJECT_ACE}
 
1990
  ACCESS_DENIED_CALLBACK_OBJECT_ACE = _ACCESS_DENIED_CALLBACK_OBJECT_ACE;
 
1991
  {$EXTERNALSYM ACCESS_DENIED_CALLBACK_OBJECT_ACE}
 
1992
  PACCESS_DENIED_CALLBACK_OBJECT_ACE = ^ACCESS_DENIED_CALLBACK_OBJECT_ACE;
 
1993
  {$EXTERNALSYM PACCESS_DENIED_CALLBACK_OBJECT_ACE}
 
1994
  TAccessDeniedCallBackObjectAce = ACCESS_DENIED_CALLBACK_OBJECT_ACE;
 
1995
  PAccessDeniedCallBackObjectAce = PACCESS_DENIED_CALLBACK_OBJECT_ACE;
 
1996
 
 
1997
  _SYSTEM_AUDIT_CALLBACK_OBJECT_ACE = record
 
1998
    Header: ACE_HEADER;
 
1999
    Mask: ACCESS_MASK;
 
2000
    Flags: DWORD;
 
2001
    ObjectType: GUID;
 
2002
    InheritedObjectType: GUID;
 
2003
    SidStart: DWORD;
 
2004
    // Opaque resouce manager specific data
 
2005
  end;
 
2006
  {$EXTERNALSYM _SYSTEM_AUDIT_CALLBACK_OBJECT_ACE}
 
2007
  SYSTEM_AUDIT_CALLBACK_OBJECT_ACE = _SYSTEM_AUDIT_CALLBACK_OBJECT_ACE;
 
2008
  {$EXTERNALSYM SYSTEM_AUDIT_CALLBACK_OBJECT_ACE}
 
2009
  PSYSTEM_AUDIT_CALLBACK_OBJECT_ACE = ^SYSTEM_AUDIT_CALLBACK_OBJECT_ACE;
 
2010
  {$EXTERNALSYM PSYSTEM_AUDIT_CALLBACK_OBJECT_ACE}
 
2011
  TSystemAuditCallBackObjectAce = SYSTEM_AUDIT_CALLBACK_OBJECT_ACE;
 
2012
  PSystemAuditCallBackObjectAce = PSYSTEM_AUDIT_CALLBACK_OBJECT_ACE;
 
2013
 
 
2014
  _SYSTEM_ALARM_CALLBACK_OBJECT_ACE = record
 
2015
    Header: ACE_HEADER;
 
2016
    Mask: ACCESS_MASK;
 
2017
    Flags: DWORD;
 
2018
    ObjectType: GUID;
 
2019
    InheritedObjectType: GUID;
 
2020
    SidStart: DWORD;
 
2021
    // Opaque resouce manager specific data
 
2022
  end;
 
2023
  {$EXTERNALSYM _SYSTEM_ALARM_CALLBACK_OBJECT_ACE}
 
2024
  SYSTEM_ALARM_CALLBACK_OBJECT_ACE = _SYSTEM_ALARM_CALLBACK_OBJECT_ACE;
 
2025
  {$EXTERNALSYM SYSTEM_ALARM_CALLBACK_OBJECT_ACE}
 
2026
  PSYSTEM_ALARM_CALLBACK_OBJECT_ACE = ^SYSTEM_ALARM_CALLBACK_OBJECT_ACE;
 
2027
  {$EXTERNALSYM PSYSTEM_ALARM_CALLBACK_OBJECT_ACE}
 
2028
  TSystemAlarmCallBackObjectAce = SYSTEM_ALARM_CALLBACK_OBJECT_ACE;
 
2029
  PSystemAlarmCallBackObjectAce = PSYSTEM_ALARM_CALLBACK_OBJECT_ACE;
 
2030
 
 
2031
//
 
2032
// Currently define Flags for "OBJECT" ACE types.
 
2033
//
 
2034
 
 
2035
const
 
2036
  ACE_OBJECT_TYPE_PRESENT           = $1;
 
2037
  {$EXTERNALSYM ACE_OBJECT_TYPE_PRESENT}
 
2038
  ACE_INHERITED_OBJECT_TYPE_PRESENT = $2;
 
2039
  {$EXTERNALSYM ACE_INHERITED_OBJECT_TYPE_PRESENT}
 
2040
 
 
2041
//
 
2042
//  The following declarations are used for setting and querying information
 
2043
//  about and ACL.  First are the various information classes available to
 
2044
//  the user.
 
2045
//
 
2046
 
 
2047
  AclRevisionInformation = 1;
 
2048
  {$EXTERNALSYM AclRevisionInformation}
 
2049
  AclSizeInformation = 2;
 
2050
  {$EXTERNALSYM AclSizeInformation}
 
2051
 
 
2052
type
 
2053
  _ACL_INFORMATION_CLASS = DWORD;
 
2054
  {$EXTERNALSYM _ACL_INFORMATION_CLASS}
 
2055
  ACL_INFORMATION_CLASS = _ACL_INFORMATION_CLASS;
 
2056
  {$EXTERNALSYM ACL_INFORMATION_CLASS}
 
2057
  TAclInformationClass = ACL_INFORMATION_CLASS;
 
2058
 
 
2059
//
 
2060
//  This record is returned/sent if the user is requesting/setting the
 
2061
//  AclRevisionInformation
 
2062
//
 
2063
 
 
2064
  PACL_REVISION_INFORMATION = ^ACL_REVISION_INFORMATION;
 
2065
  {$EXTERNALSYM PACL_REVISION_INFORMATION}
 
2066
  _ACL_REVISION_INFORMATION = record
 
2067
    AclRevision: DWORD;
 
2068
  end;
 
2069
  {$EXTERNALSYM _ACL_REVISION_INFORMATION}
 
2070
  ACL_REVISION_INFORMATION = _ACL_REVISION_INFORMATION;
 
2071
  {$EXTERNALSYM ACL_REVISION_INFORMATION}
 
2072
  TAclRevisionInformation = ACL_REVISION_INFORMATION;
 
2073
  PAclRevisionInformation = PACL_REVISION_INFORMATION;
 
2074
 
 
2075
//
 
2076
//  This record is returned if the user is requesting AclSizeInformation
 
2077
//
 
2078
 
 
2079
  PACL_SIZE_INFORMATION = ^ACL_SIZE_INFORMATION;
 
2080
  {$EXTERNALSYM PACL_SIZE_INFORMATION}
 
2081
  _ACL_SIZE_INFORMATION = record
 
2082
    AceCount: DWORD;
 
2083
    AclBytesInUse: DWORD;
 
2084
    AclBytesFree: DWORD;
 
2085
  end;
 
2086
  {$EXTERNALSYM _ACL_SIZE_INFORMATION}
 
2087
  ACL_SIZE_INFORMATION = _ACL_SIZE_INFORMATION;
 
2088
  {$EXTERNALSYM ACL_SIZE_INFORMATION}
 
2089
  TAclSizeInformation = ACL_SIZE_INFORMATION;
 
2090
  PAclSizeInformation = PACL_SIZE_INFORMATION;
 
2091
 
 
2092
////////////////////////////////////////////////////////////////////////
 
2093
//                                                                    //
 
2094
//                             SECURITY_DESCRIPTOR                    //
 
2095
//                                                                    //
 
2096
////////////////////////////////////////////////////////////////////////
 
2097
//
 
2098
//  Define the Security Descriptor and related data types.
 
2099
//  This is an opaque data structure.
 
2100
//
 
2101
 
 
2102
//
 
2103
// Current security descriptor revision value
 
2104
//
 
2105
 
 
2106
const
 
2107
  SECURITY_DESCRIPTOR_REVISION  = 1;
 
2108
  {$EXTERNALSYM SECURITY_DESCRIPTOR_REVISION}
 
2109
  SECURITY_DESCRIPTOR_REVISION1 = 1;
 
2110
  {$EXTERNALSYM SECURITY_DESCRIPTOR_REVISION1}
 
2111
 
 
2112
type
 
2113
  SECURITY_DESCRIPTOR_CONTROL = WORD;
 
2114
  {$EXTERNALSYM SECURITY_DESCRIPTOR_CONTROL}
 
2115
  PSECURITY_DESCRIPTOR_CONTROL = ^SECURITY_DESCRIPTOR_CONTROL;
 
2116
  {$EXTERNALSYM PSECURITY_DESCRIPTOR_CONTROL}
 
2117
  TSecurityDescriptorControl = SECURITY_DESCRIPTOR_CONTROL;
 
2118
  PSecurityDescriptorControl = PSECURITY_DESCRIPTOR_CONTROL;
 
2119
 
 
2120
const
 
2121
  SE_OWNER_DEFAULTED       = $0001;
 
2122
  {$EXTERNALSYM SE_OWNER_DEFAULTED}
 
2123
  SE_GROUP_DEFAULTED       = $0002;
 
2124
  {$EXTERNALSYM SE_GROUP_DEFAULTED}
 
2125
  SE_DACL_PRESENT          = $0004;
 
2126
  {$EXTERNALSYM SE_DACL_PRESENT}
 
2127
  SE_DACL_DEFAULTED        = $0008;
 
2128
  {$EXTERNALSYM SE_DACL_DEFAULTED}
 
2129
  SE_SACL_PRESENT          = $0010;
 
2130
  {$EXTERNALSYM SE_SACL_PRESENT}
 
2131
  SE_SACL_DEFAULTED        = $0020;
 
2132
  {$EXTERNALSYM SE_SACL_DEFAULTED}
 
2133
  SE_DACL_AUTO_INHERIT_REQ = $0100;
 
2134
  {$EXTERNALSYM SE_DACL_AUTO_INHERIT_REQ}
 
2135
  SE_SACL_AUTO_INHERIT_REQ = $0200;
 
2136
  {$EXTERNALSYM SE_SACL_AUTO_INHERIT_REQ}
 
2137
  SE_DACL_AUTO_INHERITED   = $0400;
 
2138
  {$EXTERNALSYM SE_DACL_AUTO_INHERITED}
 
2139
  SE_SACL_AUTO_INHERITED   = $0800;
 
2140
  {$EXTERNALSYM SE_SACL_AUTO_INHERITED}
 
2141
  SE_DACL_PROTECTED        = $1000;
 
2142
  {$EXTERNALSYM SE_DACL_PROTECTED}
 
2143
  SE_SACL_PROTECTED        = $2000;
 
2144
  {$EXTERNALSYM SE_SACL_PROTECTED}
 
2145
  SE_RM_CONTROL_VALID      = $4000;
 
2146
  {$EXTERNALSYM SE_RM_CONTROL_VALID}
 
2147
  SE_SELF_RELATIVE         = $8000;
 
2148
  {$EXTERNALSYM SE_SELF_RELATIVE}
 
2149
 
 
2150
//
 
2151
//  Where:
 
2152
//
 
2153
//      SE_OWNER_DEFAULTED - This boolean flag, when set, indicates that the
 
2154
//          SID pointed to by the Owner field was provided by a
 
2155
//          defaulting mechanism rather than explicitly provided by the
 
2156
//          original provider of the security descriptor.  This may
 
2157
//          affect the treatment of the SID with respect to inheritence
 
2158
//          of an owner.
 
2159
//
 
2160
//      SE_GROUP_DEFAULTED - This boolean flag, when set, indicates that the
 
2161
//          SID in the Group field was provided by a defaulting mechanism
 
2162
//          rather than explicitly provided by the original provider of
 
2163
//          the security descriptor.  This may affect the treatment of
 
2164
//          the SID with respect to inheritence of a primary group.
 
2165
//
 
2166
//      SE_DACL_PRESENT - This boolean flag, when set, indicates that the
 
2167
//          security descriptor contains a discretionary ACL.  If this
 
2168
//          flag is set and the Dacl field of the SECURITY_DESCRIPTOR is
 
2169
//          null, then a null ACL is explicitly being specified.
 
2170
//
 
2171
//      SE_DACL_DEFAULTED - This boolean flag, when set, indicates that the
 
2172
//          ACL pointed to by the Dacl field was provided by a defaulting
 
2173
//          mechanism rather than explicitly provided by the original
 
2174
//          provider of the security descriptor.  This may affect the
 
2175
//          treatment of the ACL with respect to inheritence of an ACL.
 
2176
//          This flag is ignored if the DaclPresent flag is not set.
 
2177
//
 
2178
//      SE_SACL_PRESENT - This boolean flag, when set,  indicates that the
 
2179
//          security descriptor contains a system ACL pointed to by the
 
2180
//          Sacl field.  If this flag is set and the Sacl field of the
 
2181
//          SECURITY_DESCRIPTOR is null, then an empty (but present)
 
2182
//          ACL is being specified.
 
2183
//
 
2184
//      SE_SACL_DEFAULTED - This boolean flag, when set, indicates that the
 
2185
//          ACL pointed to by the Sacl field was provided by a defaulting
 
2186
//          mechanism rather than explicitly provided by the original
 
2187
//          provider of the security descriptor.  This may affect the
 
2188
//          treatment of the ACL with respect to inheritence of an ACL.
 
2189
//          This flag is ignored if the SaclPresent flag is not set.
 
2190
//
 
2191
//      SE_SELF_RELATIVE - This boolean flag, when set, indicates that the
 
2192
//          security descriptor is in self-relative form.  In this form,
 
2193
//          all fields of the security descriptor are contiguous in memory
 
2194
//          and all pointer fields are expressed as offsets from the
 
2195
//          beginning of the security descriptor.  This form is useful
 
2196
//          for treating security descriptors as opaque data structures
 
2197
//          for transmission in communication protocol or for storage on
 
2198
//          secondary media.
 
2199
//
 
2200
//
 
2201
//
 
2202
// Pictorially the structure of a security descriptor is as follows:
 
2203
//
 
2204
//       3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 
2205
//       1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 
2206
//      +---------------------------------------------------------------+
 
2207
//      |            Control            |Reserved1 (SBZ)|   Revision    |
 
2208
//      +---------------------------------------------------------------+
 
2209
//      |                            Owner                              |
 
2210
//      +---------------------------------------------------------------+
 
2211
//      |                            Group                              |
 
2212
//      +---------------------------------------------------------------+
 
2213
//      |                            Sacl                               |
 
2214
//      +---------------------------------------------------------------+
 
2215
//      |                            Dacl                               |
 
2216
//      +---------------------------------------------------------------+
 
2217
//
 
2218
// In general, this data structure should be treated opaquely to ensure future
 
2219
// compatibility.
 
2220
//
 
2221
//
 
2222
 
 
2223
type
 
2224
  PSECURITY_DESCRIPTOR_RELATIVE = ^SECURITY_DESCRIPTOR_RELATIVE;
 
2225
  {$EXTERNALSYM PSECURITY_DESCRIPTOR_RELATIVE}
 
2226
  _SECURITY_DESCRIPTOR_RELATIVE = record
 
2227
    Revision: Byte;
 
2228
    Sbz1: Byte;
 
2229
    Control: SECURITY_DESCRIPTOR_CONTROL;
 
2230
    Owner: DWORD;
 
2231
    Group: DWORD;
 
2232
    Sacl: DWORD;
 
2233
    Dacl: DWORD;
 
2234
  end;
 
2235
  {$EXTERNALSYM _SECURITY_DESCRIPTOR_RELATIVE}
 
2236
  SECURITY_DESCRIPTOR_RELATIVE = _SECURITY_DESCRIPTOR_RELATIVE;
 
2237
  {$EXTERNALSYM SECURITY_DESCRIPTOR_RELATIVE}
 
2238
  TSecurityDescriptorRelative = SECURITY_DESCRIPTOR_RELATIVE;
 
2239
  PSecurityDescriptorRelative = PSECURITY_DESCRIPTOR_RELATIVE;
 
2240
 
 
2241
  PSECURITY_DESCRIPTOR = ^SECURITY_DESCRIPTOR;
 
2242
  {$EXTERNALSYM PSECURITY_DESCRIPTOR}
 
2243
  _SECURITY_DESCRIPTOR = record
 
2244
    Revision: Byte;
 
2245
    Sbz1: Byte;
 
2246
    Control: SECURITY_DESCRIPTOR_CONTROL;
 
2247
    Owner: PSID;
 
2248
    Group: PSID;
 
2249
    Sacl: PACL;
 
2250
    Dacl: PACL;
 
2251
  end;
 
2252
  {$EXTERNALSYM _SECURITY_DESCRIPTOR}
 
2253
  SECURITY_DESCRIPTOR = _SECURITY_DESCRIPTOR;
 
2254
  {$EXTERNALSYM SECURITY_DESCRIPTOR}
 
2255
  TSecurityDescriptor = SECURITY_DESCRIPTOR;
 
2256
  PSecurityDescriptor = PSECURITY_DESCRIPTOR;
 
2257
 
 
2258
  PPSECURITY_DESCRIPTOR = ^PSECURITY_DESCRIPTOR;
 
2259
  {$NODEFINE PPSECURITY_DESCRIPTOR}
 
2260
 
 
2261
const
 
2262
  SECURITY_DESCRIPTOR_MIN_LENGTH = SizeOf(SECURITY_DESCRIPTOR);
 
2263
  {$EXTERNALSYM SECURITY_DESCRIPTOR_MIN_LENGTH}
 
2264
 
 
2265
// Where:
 
2266
//
 
2267
//     Revision - Contains the revision level of the security
 
2268
//         descriptor.  This allows this structure to be passed between
 
2269
//         systems or stored on disk even though it is expected to
 
2270
//         change in the future.
 
2271
//
 
2272
//     Control - A set of flags which qualify the meaning of the
 
2273
//         security descriptor or individual fields of the security
 
2274
//         descriptor.
 
2275
//
 
2276
//     Owner - is a pointer to an SID representing an object's owner.
 
2277
//         If this field is null, then no owner SID is present in the
 
2278
//         security descriptor.  If the security descriptor is in
 
2279
//         self-relative form, then this field contains an offset to
 
2280
//         the SID, rather than a pointer.
 
2281
//
 
2282
//     Group - is a pointer to an SID representing an object's primary
 
2283
//         group.  If this field is null, then no primary group SID is
 
2284
//         present in the security descriptor.  If the security descriptor
 
2285
//         is in self-relative form, then this field contains an offset to
 
2286
//         the SID, rather than a pointer.
 
2287
//
 
2288
//     Sacl - is a pointer to a system ACL.  This field value is only
 
2289
//         valid if the DaclPresent control flag is set.  If the
 
2290
//         SaclPresent flag is set and this field is null, then a null
 
2291
//         ACL  is specified.  If the security descriptor is in
 
2292
//         self-relative form, then this field contains an offset to
 
2293
//         the ACL, rather than a pointer.
 
2294
//
 
2295
//     Dacl - is a pointer to a discretionary ACL.  This field value is
 
2296
//         only valid if the DaclPresent control flag is set.  If the
 
2297
//         DaclPresent flag is set and this field is null, then a null
 
2298
//         ACL (unconditionally granting access) is specified.  If the
 
2299
//         security descriptor is in self-relative form, then this field
 
2300
//         contains an offset to the ACL, rather than a pointer.
 
2301
//
 
2302
 
 
2303
////////////////////////////////////////////////////////////////////////
 
2304
//                                                                    //
 
2305
//               Object Type list for AccessCheckByType               //
 
2306
//                                                                    //
 
2307
////////////////////////////////////////////////////////////////////////
 
2308
 
 
2309
type
 
2310
  POBJECT_TYPE_LIST = ^OBJECT_TYPE_LIST;
 
2311
  {$EXTERNALSYM POBJECT_TYPE_LIST}
 
2312
  _OBJECT_TYPE_LIST = record
 
2313
    Level: Word;
 
2314
    Sbz: Word;
 
2315
    ObjectType: PGUID;
 
2316
  end;
 
2317
  {$EXTERNALSYM _OBJECT_TYPE_LIST}
 
2318
  OBJECT_TYPE_LIST = _OBJECT_TYPE_LIST;
 
2319
  {$EXTERNALSYM OBJECT_TYPE_LIST}
 
2320
  TObjectTypeList = OBJECT_TYPE_LIST;
 
2321
  PObjectTypeList = POBJECT_TYPE_LIST;
 
2322
 
 
2323
//
 
2324
// DS values for Level
 
2325
//
 
2326
 
 
2327
const
 
2328
  ACCESS_OBJECT_GUID       = 0;
 
2329
  {$EXTERNALSYM ACCESS_OBJECT_GUID}
 
2330
  ACCESS_PROPERTY_SET_GUID = 1;
 
2331
  {$EXTERNALSYM ACCESS_PROPERTY_SET_GUID}
 
2332
  ACCESS_PROPERTY_GUID     = 2;
 
2333
  {$EXTERNALSYM ACCESS_PROPERTY_GUID}
 
2334
 
 
2335
  ACCESS_MAX_LEVEL         = 4;
 
2336
  {$EXTERNALSYM ACCESS_MAX_LEVEL}
 
2337
 
 
2338
//
 
2339
// Parameters to NtAccessCheckByTypeAndAditAlarm
 
2340
//
 
2341
 
 
2342
type
 
2343
  _AUDIT_EVENT_TYPE = (AuditEventObjectAccess, AuditEventDirectoryServiceAccess);
 
2344
  {$EXTERNALSYM _AUDIT_EVENT_TYPE}
 
2345
  AUDIT_EVENT_TYPE = _AUDIT_EVENT_TYPE;
 
2346
  {$EXTERNALSYM AUDIT_EVENT_TYPE}
 
2347
  PAUDIT_EVENT_TYPE = ^AUDIT_EVENT_TYPE;
 
2348
  {$EXTERNALSYM PAUDIT_EVENT_TYPE}
 
2349
  TAuditEventType = AUDIT_EVENT_TYPE;
 
2350
  PAuditEventType = PAUDIT_EVENT_TYPE;
 
2351
 
 
2352
const
 
2353
  AUDIT_ALLOW_NO_PRIVILEGE = $1;
 
2354
  {$EXTERNALSYM AUDIT_ALLOW_NO_PRIVILEGE}
 
2355
 
 
2356
//
 
2357
// DS values for Source and ObjectTypeName
 
2358
//
 
2359
 
 
2360
  ACCESS_DS_SOURCE_A           = 'DS';
 
2361
  {$EXTERNALSYM ACCESS_DS_SOURCE_A}
 
2362
  ACCESS_DS_SOURCE_W           = WideString('DS');
 
2363
  {$EXTERNALSYM ACCESS_DS_SOURCE_W}
 
2364
  ACCESS_DS_OBJECT_TYPE_NAME_A = 'Directory Service Object';
 
2365
  {$EXTERNALSYM ACCESS_DS_OBJECT_TYPE_NAME_A}
 
2366
  ACCESS_DS_OBJECT_TYPE_NAME_W = WideString('Directory Service Object');
 
2367
  {$EXTERNALSYM ACCESS_DS_OBJECT_TYPE_NAME_W}
 
2368
 
 
2369
////////////////////////////////////////////////////////////////////////
 
2370
//                                                                    //
 
2371
//               Privilege Related Data Structures                    //
 
2372
//                                                                    //
 
2373
////////////////////////////////////////////////////////////////////////
 
2374
 
 
2375
//
 
2376
// Privilege attributes
 
2377
//
 
2378
 
 
2379
const
 
2380
  SE_PRIVILEGE_ENABLED_BY_DEFAULT = $00000001;
 
2381
  {$EXTERNALSYM SE_PRIVILEGE_ENABLED_BY_DEFAULT}
 
2382
  SE_PRIVILEGE_ENABLED            = $00000002;
 
2383
  {$EXTERNALSYM SE_PRIVILEGE_ENABLED}
 
2384
  SE_PRIVILEGE_REMOVED            = $00000004;
 
2385
  {$EXTERNALSYM SE_PRIVILEGE_REMOVED}
 
2386
  SE_PRIVILEGE_USED_FOR_ACCESS    = DWORD($80000000);
 
2387
  {$EXTERNALSYM SE_PRIVILEGE_USED_FOR_ACCESS}
 
2388
 
 
2389
//
 
2390
// Privilege Set Control flags
 
2391
//
 
2392
 
 
2393
  PRIVILEGE_SET_ALL_NECESSARY = 1;
 
2394
  {$EXTERNALSYM PRIVILEGE_SET_ALL_NECESSARY}
 
2395
 
 
2396
//
 
2397
//  Privilege Set - This is defined for a privilege set of one.
 
2398
//                  If more than one privilege is needed, then this structure
 
2399
//                  will need to be allocated with more space.
 
2400
//
 
2401
//  Note: don't change this structure without fixing the INITIAL_PRIVILEGE_SET
 
2402
//  structure (defined in se.h)
 
2403
//
 
2404
 
 
2405
type
 
2406
  PPRIVILEGE_SET = ^PRIVILEGE_SET;
 
2407
  {$EXTERNALSYM PPRIVILEGE_SET}
 
2408
  _PRIVILEGE_SET = record
 
2409
    PrivilegeCount: DWORD;
 
2410
    Control: DWORD;
 
2411
    Privilege: array [0..ANYSIZE_ARRAY - 1] of LUID_AND_ATTRIBUTES;
 
2412
    //Privilege: LUID_AND_ATTRIBUTES;
 
2413
  end;
 
2414
  {$EXTERNALSYM _PRIVILEGE_SET}
 
2415
  PRIVILEGE_SET = _PRIVILEGE_SET;
 
2416
  {$EXTERNALSYM PRIVILEGE_SET}
 
2417
  TPrivilegeSet = PRIVILEGE_SET;
 
2418
  PPrivilegeSet = PPRIVILEGE_SET;
 
2419
 
 
2420
////////////////////////////////////////////////////////////////////////
 
2421
//                                                                    //
 
2422
//               NT Defined Privileges                                //
 
2423
//                                                                    //
 
2424
////////////////////////////////////////////////////////////////////////
 
2425
 
 
2426
const
 
2427
  SE_CREATE_TOKEN_NAME        = 'SeCreateTokenPrivilege';
 
2428
  {$EXTERNALSYM SE_CREATE_TOKEN_NAME}
 
2429
  SE_ASSIGNPRIMARYTOKEN_NAME  = 'SeAssignPrimaryTokenPrivilege';
 
2430
  {$EXTERNALSYM SE_ASSIGNPRIMARYTOKEN_NAME}
 
2431
  SE_LOCK_MEMORY_NAME         = 'SeLockMemoryPrivilege';
 
2432
  {$EXTERNALSYM SE_LOCK_MEMORY_NAME}
 
2433
  SE_INCREASE_QUOTA_NAME      = 'SeIncreaseQuotaPrivilege';
 
2434
  {$EXTERNALSYM SE_INCREASE_QUOTA_NAME}
 
2435
  SE_UNSOLICITED_INPUT_NAME   = 'SeUnsolicitedInputPrivilege';
 
2436
  {$EXTERNALSYM SE_UNSOLICITED_INPUT_NAME}
 
2437
  SE_MACHINE_ACCOUNT_NAME     = 'SeMachineAccountPrivilege';
 
2438
  {$EXTERNALSYM SE_MACHINE_ACCOUNT_NAME}
 
2439
  SE_TCB_NAME                 = 'SeTcbPrivilege';
 
2440
  {$EXTERNALSYM SE_TCB_NAME}
 
2441
  SE_SECURITY_NAME            = 'SeSecurityPrivilege';
 
2442
  {$EXTERNALSYM SE_SECURITY_NAME}
 
2443
  SE_TAKE_OWNERSHIP_NAME      = 'SeTakeOwnershipPrivilege';
 
2444
  {$EXTERNALSYM SE_TAKE_OWNERSHIP_NAME}
 
2445
  SE_LOAD_DRIVER_NAME         = 'SeLoadDriverPrivilege';
 
2446
  {$EXTERNALSYM SE_LOAD_DRIVER_NAME}
 
2447
  SE_SYSTEM_PROFILE_NAME      = 'SeSystemProfilePrivilege';
 
2448
  {$EXTERNALSYM SE_SYSTEM_PROFILE_NAME}
 
2449
  SE_SYSTEMTIME_NAME          = 'SeSystemtimePrivilege';
 
2450
  {$EXTERNALSYM SE_SYSTEMTIME_NAME}
 
2451
  SE_PROF_SINGLE_PROCESS_NAME = 'SeProfileSingleProcessPrivilege';
 
2452
  {$EXTERNALSYM SE_PROF_SINGLE_PROCESS_NAME}
 
2453
  SE_INC_BASE_PRIORITY_NAME   = 'SeIncreaseBasePriorityPrivilege';
 
2454
  {$EXTERNALSYM SE_INC_BASE_PRIORITY_NAME}
 
2455
  SE_CREATE_PAGEFILE_NAME     = 'SeCreatePagefilePrivilege';
 
2456
  {$EXTERNALSYM SE_CREATE_PAGEFILE_NAME}
 
2457
  SE_CREATE_PERMANENT_NAME    = 'SeCreatePermanentPrivilege';
 
2458
  {$EXTERNALSYM SE_CREATE_PERMANENT_NAME}
 
2459
  SE_BACKUP_NAME              = 'SeBackupPrivilege';
 
2460
  {$EXTERNALSYM SE_BACKUP_NAME}
 
2461
  SE_RESTORE_NAME             = 'SeRestorePrivilege';
 
2462
  {$EXTERNALSYM SE_RESTORE_NAME}
 
2463
  SE_SHUTDOWN_NAME            = 'SeShutdownPrivilege';
 
2464
  {$EXTERNALSYM SE_SHUTDOWN_NAME}
 
2465
  SE_DEBUG_NAME               = 'SeDebugPrivilege';
 
2466
  {$EXTERNALSYM SE_DEBUG_NAME}
 
2467
  SE_AUDIT_NAME               = 'SeAuditPrivilege';
 
2468
  {$EXTERNALSYM SE_AUDIT_NAME}
 
2469
  SE_SYSTEM_ENVIRONMENT_NAME  = 'SeSystemEnvironmentPrivilege';
 
2470
  {$EXTERNALSYM SE_SYSTEM_ENVIRONMENT_NAME}
 
2471
  SE_CHANGE_NOTIFY_NAME       = 'SeChangeNotifyPrivilege';
 
2472
  {$EXTERNALSYM SE_CHANGE_NOTIFY_NAME}
 
2473
  SE_REMOTE_SHUTDOWN_NAME     = 'SeRemoteShutdownPrivilege';
 
2474
  {$EXTERNALSYM SE_REMOTE_SHUTDOWN_NAME}
 
2475
  SE_UNDOCK_NAME              = 'SeUndockPrivilege';
 
2476
  {$EXTERNALSYM SE_UNDOCK_NAME}
 
2477
  SE_SYNC_AGENT_NAME          = 'SeSyncAgentPrivilege';
 
2478
  {$EXTERNALSYM SE_SYNC_AGENT_NAME}
 
2479
  SE_ENABLE_DELEGATION_NAME   = 'SeEnableDelegationPrivilege';
 
2480
  {$EXTERNALSYM SE_ENABLE_DELEGATION_NAME}
 
2481
  SE_MANAGE_VOLUME_NAME       = 'SeManageVolumePrivilege';
 
2482
  {$EXTERNALSYM SE_MANAGE_VOLUME_NAME}
 
2483
  SE_IMPERSONATE_NAME         = 'SeImpersonatePrivilege';
 
2484
  {$EXTERNALSYM SE_IMPERSONATE_NAME}
 
2485
  SE_CREATE_GLOBAL_NAME       = 'SeCreateGlobalPrivilege';
 
2486
  {$EXTERNALSYM SE_CREATE_GLOBAL_NAME}
 
2487
 
 
2488
////////////////////////////////////////////////////////////////////
 
2489
//                                                                //
 
2490
//           Security Quality Of Service                          //
 
2491
//                                                                //
 
2492
//                                                                //
 
2493
////////////////////////////////////////////////////////////////////
 
2494
 
 
2495
//
 
2496
// Impersonation Level
 
2497
//
 
2498
// Impersonation level is represented by a pair of bits in Windows.
 
2499
// If a new impersonation level is added or lowest value is changed from
 
2500
// 0 to something else, fix the Windows CreateFile call.
 
2501
//
 
2502
 
 
2503
type
 
2504
  _SECURITY_IMPERSONATION_LEVEL = (SecurityAnonymous, SecurityIdentification,
 
2505
    SecurityImpersonation, SecurityDelegation);
 
2506
  {$EXTERNALSYM _SECURITY_IMPERSONATION_LEVEL}
 
2507
  SECURITY_IMPERSONATION_LEVEL = _SECURITY_IMPERSONATION_LEVEL;
 
2508
  {$EXTERNALSYM SECURITY_IMPERSONATION_LEVEL}
 
2509
  PSECURITY_IMPERSONATION_LEVEL = ^SECURITY_IMPERSONATION_LEVEL;
 
2510
  {$EXTERNALSYM PSECURITY_IMPERSONATION_LEVEL}
 
2511
  TSecurityImpersonationLevel = SECURITY_IMPERSONATION_LEVEL;
 
2512
  PSecurityImpersonationLevel = PSECURITY_IMPERSONATION_LEVEL;
 
2513
 
 
2514
const
 
2515
  SECURITY_MAX_IMPERSONATION_LEVEL = SecurityDelegation;
 
2516
  {$EXTERNALSYM SECURITY_MAX_IMPERSONATION_LEVEL}
 
2517
  SECURITY_MIN_IMPERSONATION_LEVEL = SecurityAnonymous;
 
2518
  {$EXTERNALSYM SECURITY_MIN_IMPERSONATION_LEVEL}
 
2519
  DEFAULT_IMPERSONATION_LEVEL      = SecurityImpersonation;
 
2520
  {$EXTERNALSYM DEFAULT_IMPERSONATION_LEVEL}
 
2521
 
 
2522
function VALID_IMPERSONATION_LEVEL(L: TSecurityImpersonationLevel): BOOL;
 
2523
{$EXTERNALSYM VALID_IMPERSONATION_LEVEL}
 
2524
 
 
2525
////////////////////////////////////////////////////////////////////
 
2526
//                                                                //
 
2527
//           Token Object Definitions                             //
 
2528
//                                                                //
 
2529
//                                                                //
 
2530
////////////////////////////////////////////////////////////////////
 
2531
 
 
2532
//
 
2533
// Token Specific Access Rights.
 
2534
//
 
2535
 
 
2536
const
 
2537
  TOKEN_ASSIGN_PRIMARY    = $0001;
 
2538
  {$EXTERNALSYM TOKEN_ASSIGN_PRIMARY}
 
2539
  TOKEN_DUPLICATE         = $0002;
 
2540
  {$EXTERNALSYM TOKEN_DUPLICATE}
 
2541
  TOKEN_IMPERSONATE       = $0004;
 
2542
  {$EXTERNALSYM TOKEN_IMPERSONATE}
 
2543
  TOKEN_QUERY             = $0008;
 
2544
  {$EXTERNALSYM TOKEN_QUERY}
 
2545
  TOKEN_QUERY_SOURCE      = $0010;
 
2546
  {$EXTERNALSYM TOKEN_QUERY_SOURCE}
 
2547
  TOKEN_ADJUST_PRIVILEGES = $0020;
 
2548
  {$EXTERNALSYM TOKEN_ADJUST_PRIVILEGES}
 
2549
  TOKEN_ADJUST_GROUPS     = $0040;
 
2550
  {$EXTERNALSYM TOKEN_ADJUST_GROUPS}
 
2551
  TOKEN_ADJUST_DEFAULT    = $0080;
 
2552
  {$EXTERNALSYM TOKEN_ADJUST_DEFAULT}
 
2553
  TOKEN_ADJUST_SESSIONID  = $0100;
 
2554
  {$EXTERNALSYM TOKEN_ADJUST_SESSIONID}
 
2555
 
 
2556
  TOKEN_ALL_ACCESS_P = STANDARD_RIGHTS_REQUIRED or TOKEN_ASSIGN_PRIMARY or
 
2557
    TOKEN_DUPLICATE or TOKEN_IMPERSONATE or TOKEN_QUERY or TOKEN_QUERY_SOURCE or
 
2558
    TOKEN_ADJUST_PRIVILEGES or TOKEN_ADJUST_GROUPS or TOKEN_ADJUST_DEFAULT;
 
2559
  {$EXTERNALSYM TOKEN_ALL_ACCESS_P}
 
2560
 
 
2561
  TOKEN_ALL_ACCESS = TOKEN_ALL_ACCESS_P or TOKEN_ADJUST_SESSIONID;
 
2562
  {$EXTERNALSYM TOKEN_ALL_ACCESS}
 
2563
 
 
2564
  TOKEN_READ = STANDARD_RIGHTS_READ or TOKEN_QUERY;
 
2565
  {$EXTERNALSYM TOKEN_READ}
 
2566
 
 
2567
  TOKEN_WRITE = (STANDARD_RIGHTS_WRITE or TOKEN_ADJUST_PRIVILEGES or
 
2568
    TOKEN_ADJUST_GROUPS or TOKEN_ADJUST_DEFAULT);
 
2569
  {$EXTERNALSYM TOKEN_WRITE}
 
2570
 
 
2571
  TOKEN_EXECUTE = STANDARD_RIGHTS_EXECUTE;
 
2572
  {$EXTERNALSYM TOKEN_EXECUTE}
 
2573
 
 
2574
//
 
2575
// Token Types
 
2576
//
 
2577
 
 
2578
type
 
2579
  _TOKEN_TYPE = (TokenTypePad0, TokenPrimary, TokenImpersonation);
 
2580
  {$EXTERNALSYM _TOKEN_TYPE}
 
2581
  TOKEN_TYPE = _TOKEN_TYPE;
 
2582
  {$EXTERNALSYM TOKEN_TYPE}
 
2583
  PTOKEN_TYPE = ^TOKEN_TYPE;
 
2584
  {$EXTERNALSYM PTOKEN_TYPE}
 
2585
 
 
2586
  TTokenType = TOKEN_TYPE;
 
2587
  PTokenType = PTOKEN_TYPE;
 
2588
 
 
2589
//
 
2590
// Token Information Classes.
 
2591
//
 
2592
 
 
2593
type
 
2594
  _TOKEN_INFORMATION_CLASS = (TokenInfoClassPad0, TokenUser, TokenGroups,
 
2595
    TokenPrivileges, TokenOwner, TokenPrimaryGroup, TokenDefaultDacl, TokenSource,
 
2596
    TokenType, TokenImpersonationLevel, TokenStatistics, TokenRestrictedSids,
 
2597
    TokenSessionId, TokenGroupsAndPrivileges, TokenSessionReference,
 
2598
    TokenSandBoxInert, TokenAuditPolicy, TokenOrigin,
 
2599
    MaxTokenInfoClass); {MaxTokenInfoClass should always be the last enum}
 
2600
  {$EXTERNALSYM _TOKEN_INFORMATION_CLASS}
 
2601
  TOKEN_INFORMATION_CLASS = _TOKEN_INFORMATION_CLASS;
 
2602
  {$EXTERNALSYM TOKEN_INFORMATION_CLASS}
 
2603
  PTOKEN_INFORMATION_CLASS = ^TOKEN_INFORMATION_CLASS;
 
2604
  {$EXTERNALSYM PTOKEN_INFORMATION_CLASS}
 
2605
 
 
2606
  TTokenInformationClass = TOKEN_INFORMATION_CLASS;
 
2607
  PTokenInformationClass = PTOKEN_INFORMATION_CLASS;
 
2608
 
 
2609
//
 
2610
// Token information class structures
 
2611
//
 
2612
 
 
2613
type
 
2614
  PTOKEN_USER = ^TOKEN_USER;
 
2615
  {$EXTERNALSYM PTOKEN_USER}
 
2616
  _TOKEN_USER = record
 
2617
    User: SID_AND_ATTRIBUTES;
 
2618
  end;
 
2619
  {$EXTERNALSYM _TOKEN_USER}
 
2620
  TOKEN_USER = _TOKEN_USER;
 
2621
  {$EXTERNALSYM TOKEN_USER}
 
2622
  TTokenUser = TOKEN_USER;
 
2623
  PTokenUser = PTOKEN_USER;
 
2624
 
 
2625
  PTOKEN_GROUPS = ^TOKEN_GROUPS;
 
2626
  {$EXTERNALSYM PTOKEN_GROUPS}
 
2627
  _TOKEN_GROUPS = record
 
2628
    GroupCount: DWORD;
 
2629
    Groups: array [0..ANYSIZE_ARRAY - 1] of SID_AND_ATTRIBUTES;
 
2630
  end;
 
2631
  {$EXTERNALSYM _TOKEN_GROUPS}
 
2632
  TOKEN_GROUPS = _TOKEN_GROUPS;
 
2633
  {$EXTERNALSYM TOKEN_GROUPS}
 
2634
  TTokenGroups = TOKEN_GROUPS;
 
2635
  PTokenGroups = PTOKEN_GROUPS;
 
2636
 
 
2637
  PTOKEN_PRIVILEGES = ^TOKEN_PRIVILEGES;
 
2638
  {$EXTERNALSYM PTOKEN_PRIVILEGES}
 
2639
  _TOKEN_PRIVILEGES = record
 
2640
    PrivilegeCount: DWORD;
 
2641
    Privileges: array [0..ANYSIZE_ARRAY - 1] of LUID_AND_ATTRIBUTES;
 
2642
  end;
 
2643
  {$EXTERNALSYM _TOKEN_PRIVILEGES}
 
2644
  TOKEN_PRIVILEGES = _TOKEN_PRIVILEGES;
 
2645
  {$EXTERNALSYM TOKEN_PRIVILEGES}
 
2646
  TTokenPrivileges = TOKEN_PRIVILEGES;
 
2647
  PTokenPrivileges = PTOKEN_PRIVILEGES;
 
2648
 
 
2649
  PTOKEN_OWNER = ^TOKEN_OWNER;
 
2650
  {$EXTERNALSYM PTOKEN_OWNER}
 
2651
  _TOKEN_OWNER = record
 
2652
    Owner: PSID;
 
2653
  end;
 
2654
  {$EXTERNALSYM _TOKEN_OWNER}
 
2655
  TOKEN_OWNER = _TOKEN_OWNER;
 
2656
  {$EXTERNALSYM TOKEN_OWNER}
 
2657
  TTokenOwner = TOKEN_OWNER;
 
2658
  PTokenOwner = PTOKEN_OWNER;
 
2659
 
 
2660
  PTOKEN_PRIMARY_GROUP = ^TOKEN_PRIMARY_GROUP;
 
2661
  {$EXTERNALSYM PTOKEN_PRIMARY_GROUP}
 
2662
  _TOKEN_PRIMARY_GROUP = record
 
2663
    PrimaryGroup: PSID;
 
2664
  end;
 
2665
  {$EXTERNALSYM _TOKEN_PRIMARY_GROUP}
 
2666
  TOKEN_PRIMARY_GROUP = _TOKEN_PRIMARY_GROUP;
 
2667
  {$EXTERNALSYM TOKEN_PRIMARY_GROUP}
 
2668
  TTokenPrimaryGroup = TOKEN_PRIMARY_GROUP;
 
2669
  PTokenPrimaryGroup = PTOKEN_PRIMARY_GROUP;
 
2670
 
 
2671
  PTOKEN_DEFAULT_DACL = ^TOKEN_DEFAULT_DACL;
 
2672
  {$EXTERNALSYM PTOKEN_DEFAULT_DACL}
 
2673
  _TOKEN_DEFAULT_DACL = record
 
2674
    DefaultDacl: PACL;
 
2675
  end;
 
2676
  {$EXTERNALSYM _TOKEN_DEFAULT_DACL}
 
2677
  TOKEN_DEFAULT_DACL = _TOKEN_DEFAULT_DACL;
 
2678
  {$EXTERNALSYM TOKEN_DEFAULT_DACL}
 
2679
  TTokenDefaultDacl = TOKEN_DEFAULT_DACL;
 
2680
  PTokenDefaultDacl = PTOKEN_DEFAULT_DACL;
 
2681
 
 
2682
  _TOKEN_GROUPS_AND_PRIVILEGES = record
 
2683
    SidCount: DWORD;
 
2684
    SidLength: DWORD;
 
2685
    Sids: PSID_AND_ATTRIBUTES;
 
2686
    RestrictedSidCount: DWORD;
 
2687
    RestrictedSidLength: DWORD;
 
2688
    RestrictedSids: PSID_AND_ATTRIBUTES;
 
2689
    PrivilegeCount: DWORD;
 
2690
    PrivilegeLength: DWORD;
 
2691
    Privileges: PLUID_AND_ATTRIBUTES;
 
2692
    AuthenticationId: LUID;
 
2693
  end;
 
2694
  {$EXTERNALSYM _TOKEN_GROUPS_AND_PRIVILEGES}
 
2695
  TOKEN_GROUPS_AND_PRIVILEGES = _TOKEN_GROUPS_AND_PRIVILEGES;
 
2696
  {$EXTERNALSYM TOKEN_GROUPS_AND_PRIVILEGES}
 
2697
  PTOKEN_GROUPS_AND_PRIVILEGES = ^TOKEN_GROUPS_AND_PRIVILEGES;
 
2698
  {$EXTERNALSYM PTOKEN_GROUPS_AND_PRIVILEGES}
 
2699
  TTokenGroupsAndPrivileges = TOKEN_GROUPS_AND_PRIVILEGES;
 
2700
  PTokenGroupsAndPrivileges = PTOKEN_GROUPS_AND_PRIVILEGES;
 
2701
 
 
2702
//
 
2703
// Valid bits for each TOKEN_AUDIT_POLICY policy mask field.
 
2704
//
 
2705
 
 
2706
const
 
2707
  TOKEN_AUDIT_SUCCESS_INCLUDE = $1;
 
2708
  {$EXTERNALSYM TOKEN_AUDIT_SUCCESS_INCLUDE}
 
2709
  TOKEN_AUDIT_SUCCESS_EXCLUDE = $2;
 
2710
  {$EXTERNALSYM TOKEN_AUDIT_SUCCESS_EXCLUDE}
 
2711
  TOKEN_AUDIT_FAILURE_INCLUDE = $4;
 
2712
  {$EXTERNALSYM TOKEN_AUDIT_FAILURE_INCLUDE}
 
2713
  TOKEN_AUDIT_FAILURE_EXCLUDE = $8;
 
2714
  {$EXTERNALSYM TOKEN_AUDIT_FAILURE_EXCLUDE}
 
2715
 
 
2716
  VALID_AUDIT_POLICY_BITS = (TOKEN_AUDIT_SUCCESS_INCLUDE or
 
2717
                             TOKEN_AUDIT_SUCCESS_EXCLUDE or
 
2718
                             TOKEN_AUDIT_FAILURE_INCLUDE or
 
2719
                             TOKEN_AUDIT_FAILURE_EXCLUDE);
 
2720
  {$EXTERNALSYM VALID_AUDIT_POLICY_BITS}
 
2721
 
 
2722
type
 
2723
  _TOKEN_AUDIT_POLICY_ELEMENT = record
 
2724
    Category: DWORD;
 
2725
    PolicyMask: DWORD;
 
2726
  end;
 
2727
  {$EXTERNALSYM _TOKEN_AUDIT_POLICY_ELEMENT}
 
2728
  TOKEN_AUDIT_POLICY_ELEMENT = _TOKEN_AUDIT_POLICY_ELEMENT;
 
2729
  {$EXTERNALSYM TOKEN_AUDIT_POLICY_ELEMENT}
 
2730
  PTOKEN_AUDIT_POLICY_ELEMENT = ^TOKEN_AUDIT_POLICY_ELEMENT;
 
2731
  {$EXTERNALSYM PTOKEN_AUDIT_POLICY_ELEMENT}
 
2732
  TTokenAuditPolicyElement = TOKEN_AUDIT_POLICY_ELEMENT;
 
2733
  PTokenAuditPolicyElement = PTOKEN_AUDIT_POLICY_ELEMENT;
 
2734
 
 
2735
// TODO Implementation references AuditEventMaxType, which isn't defined anywhere
 
2736
//function VALID_TOKEN_AUDIT_POLICY_ELEMENT(P: TOKEN_AUDIT_POLICY_ELEMENT): BOOL;
 
2737
//{$EXTERNALSYM VALID_TOKEN_AUDIT_POLICY_ELEMENT}
 
2738
 
 
2739
type
 
2740
  _TOKEN_AUDIT_POLICY = record
 
2741
    PolicyCount: DWORD;
 
2742
    Policy: array [0..ANYSIZE_ARRAY - 1] of TOKEN_AUDIT_POLICY_ELEMENT;
 
2743
  end;
 
2744
  {$EXTERNALSYM _TOKEN_AUDIT_POLICY}
 
2745
  TOKEN_AUDIT_POLICY = _TOKEN_AUDIT_POLICY;
 
2746
  {$EXTERNALSYM TOKEN_AUDIT_POLICY}
 
2747
  PTOKEN_AUDIT_POLICY = ^TOKEN_AUDIT_POLICY;
 
2748
  {$EXTERNALSYM PTOKEN_AUDIT_POLICY}
 
2749
  TTokenAuditPolicy = TOKEN_AUDIT_POLICY;
 
2750
  PTokenAuditPolicy = PTOKEN_AUDIT_POLICY;
 
2751
 
 
2752
function PER_USER_AUDITING_POLICY_SIZE(p: PTOKEN_AUDIT_POLICY): DWORD;
 
2753
{$EXTERNALSYM PER_USER_AUDITING_POLICY_SIZE}
 
2754
 
 
2755
function PER_USER_AUDITING_POLICY_SIZE_BY_COUNT(C: DWORD): DWORD;
 
2756
{$EXTERNALSYM PER_USER_AUDITING_POLICY_SIZE_BY_COUNT}
 
2757
 
 
2758
const
 
2759
  TOKEN_SOURCE_LENGTH = 8;
 
2760
  {$EXTERNALSYM TOKEN_SOURCE_LENGTH}
 
2761
 
 
2762
type
 
2763
  PTOKEN_SOURCE = ^TOKEN_SOURCE;
 
2764
  {$EXTERNALSYM PTOKEN_SOURCE}
 
2765
  _TOKEN_SOURCE = record
 
2766
    SourceName: array [0..TOKEN_SOURCE_LENGTH - 1] of CHAR;
 
2767
    SourceIdentifier: LUID;
 
2768
  end;
 
2769
  {$EXTERNALSYM _TOKEN_SOURCE}
 
2770
  TOKEN_SOURCE = _TOKEN_SOURCE;
 
2771
  {$EXTERNALSYM TOKEN_SOURCE}
 
2772
  TTokenSource = TOKEN_SOURCE;
 
2773
  PTokenSource = PTOKEN_SOURCE;
 
2774
 
 
2775
  PTOKEN_STATISTICS = ^TOKEN_STATISTICS;
 
2776
  {$EXTERNALSYM PTOKEN_STATISTICS}
 
2777
  _TOKEN_STATISTICS = record
 
2778
    TokenId: LUID;
 
2779
    AuthenticationId: LUID;
 
2780
    ExpirationTime: LARGE_INTEGER;
 
2781
    TokenType: TOKEN_TYPE;
 
2782
    ImpersonationLevel: SECURITY_IMPERSONATION_LEVEL;
 
2783
    DynamicCharged: DWORD;
 
2784
    DynamicAvailable: DWORD;
 
2785
    GroupCount: DWORD;
 
2786
    PrivilegeCount: DWORD;
 
2787
    ModifiedId: LUID;
 
2788
  end;
 
2789
  {$EXTERNALSYM _TOKEN_STATISTICS}
 
2790
  TOKEN_STATISTICS = _TOKEN_STATISTICS;
 
2791
  {$EXTERNALSYM TOKEN_STATISTICS}
 
2792
  TTokenStatistics = TOKEN_STATISTICS;
 
2793
  PTokenStatistics = PTOKEN_STATISTICS;
 
2794
 
 
2795
  PTOKEN_CONTROL = ^TOKEN_CONTROL;
 
2796
  {$EXTERNALSYM PTOKEN_CONTROL}
 
2797
  _TOKEN_CONTROL = record
 
2798
    TokenId: LUID;
 
2799
    AuthenticationId: LUID;
 
2800
    ModifiedId: LUID;
 
2801
    TokenSource: TOKEN_SOURCE;
 
2802
  end;
 
2803
  {$EXTERNALSYM _TOKEN_CONTROL}
 
2804
  TOKEN_CONTROL = _TOKEN_CONTROL;
 
2805
  {$EXTERNALSYM TOKEN_CONTROL}
 
2806
  TTokenControl = TOKEN_CONTROL;
 
2807
  PTokenControl = PTOKEN_CONTROL;
 
2808
 
 
2809
  _TOKEN_ORIGIN = record
 
2810
    OriginatingLogonSession: LUID;
 
2811
  end;
 
2812
  {$EXTERNALSYM _TOKEN_ORIGIN}
 
2813
  TOKEN_ORIGIN = _TOKEN_ORIGIN;
 
2814
  {$EXTERNALSYM TOKEN_ORIGIN}
 
2815
  PTOKEN_ORIGIN = ^TOKEN_ORIGIN;
 
2816
  {$EXTERNALSYM PTOKEN_ORIGIN}
 
2817
  TTokenOrigin = TOKEN_ORIGIN;
 
2818
  PTokenOrigin = PTOKEN_ORIGIN;
 
2819
 
 
2820
//
 
2821
// Security Tracking Mode
 
2822
//
 
2823
 
 
2824
const
 
2825
  SECURITY_DYNAMIC_TRACKING = True;
 
2826
  {$EXTERNALSYM SECURITY_DYNAMIC_TRACKING}
 
2827
  SECURITY_STATIC_TRACKING  = False;
 
2828
  {$EXTERNALSYM SECURITY_STATIC_TRACKING}
 
2829
 
 
2830
type
 
2831
  SECURITY_CONTEXT_TRACKING_MODE = ByteBool;
 
2832
  {$EXTERNALSYM SECURITY_CONTEXT_TRACKING_MODE}
 
2833
  PSECURITY_CONTEXT_TRACKING_MODE = ^SECURITY_CONTEXT_TRACKING_MODE;
 
2834
  {$EXTERNALSYM PSECURITY_CONTEXT_TRACKING_MODE}
 
2835
 
 
2836
//
 
2837
// Quality Of Service
 
2838
//
 
2839
 
 
2840
  PSECURITY_QUALITY_OF_SERVICE = ^SECURITY_QUALITY_OF_SERVICE;
 
2841
  {$EXTERNALSYM PSECURITY_QUALITY_OF_SERVICE}
 
2842
  _SECURITY_QUALITY_OF_SERVICE = record
 
2843
    Length: DWORD;
 
2844
    ImpersonationLevel: SECURITY_IMPERSONATION_LEVEL;
 
2845
    ContextTrackingMode: SECURITY_CONTEXT_TRACKING_MODE;
 
2846
    EffectiveOnly: ByteBool;
 
2847
  end;
 
2848
  {$EXTERNALSYM _SECURITY_QUALITY_OF_SERVICE}
 
2849
  SECURITY_QUALITY_OF_SERVICE = _SECURITY_QUALITY_OF_SERVICE;
 
2850
  {$EXTERNALSYM SECURITY_QUALITY_OF_SERVICE}
 
2851
  TSecurityQualityOfService = SECURITY_QUALITY_OF_SERVICE;
 
2852
  PSecurityQualityOfService = PSECURITY_QUALITY_OF_SERVICE;
 
2853
 
 
2854
//
 
2855
// Used to represent information related to a thread impersonation
 
2856
//
 
2857
 
 
2858
  PSE_IMPERSONATION_STATE = ^SE_IMPERSONATION_STATE;
 
2859
  {$EXTERNALSYM PSE_IMPERSONATION_STATE}
 
2860
  _SE_IMPERSONATION_STATE = record
 
2861
    Token: PACCESS_TOKEN;
 
2862
    CopyOnOpen: ByteBool;
 
2863
    EffectiveOnly: ByteBool;
 
2864
    Level: SECURITY_IMPERSONATION_LEVEL;
 
2865
  end;
 
2866
  {$EXTERNALSYM _SE_IMPERSONATION_STATE}
 
2867
  SE_IMPERSONATION_STATE = _SE_IMPERSONATION_STATE;
 
2868
  {$EXTERNALSYM SE_IMPERSONATION_STATE}
 
2869
  TSeImpersonationState = SE_IMPERSONATION_STATE;
 
2870
  PSeImpersonationState = PSE_IMPERSONATION_STATE;
 
2871
 
 
2872
const
 
2873
  DISABLE_MAX_PRIVILEGE = $1;
 
2874
  {$EXTERNALSYM DISABLE_MAX_PRIVILEGE}
 
2875
  SANDBOX_INERT         = $2;
 
2876
  {$EXTERNALSYM SANDBOX_INERT}
 
2877
 
 
2878
type
 
2879
  SECURITY_INFORMATION = DWORD;
 
2880
  {$EXTERNALSYM SECURITY_INFORMATION}
 
2881
  PSECURITY_INFORMATION = ^SECURITY_INFORMATION;
 
2882
  {$EXTERNALSYM PSECURITY_INFORMATION}
 
2883
  TSecurityInformation = SECURITY_INFORMATION;
 
2884
  PSecurityInformation = PSECURITY_INFORMATION;
 
2885
 
 
2886
const
 
2887
  OWNER_SECURITY_INFORMATION = $00000001;
 
2888
  {$EXTERNALSYM OWNER_SECURITY_INFORMATION}
 
2889
  GROUP_SECURITY_INFORMATION = $00000002;
 
2890
  {$EXTERNALSYM GROUP_SECURITY_INFORMATION}
 
2891
  DACL_SECURITY_INFORMATION  = $00000004;
 
2892
  {$EXTERNALSYM DACL_SECURITY_INFORMATION}
 
2893
  SACL_SECURITY_INFORMATION  = $00000008;
 
2894
  {$EXTERNALSYM SACL_SECURITY_INFORMATION}
 
2895
 
 
2896
  PROTECTED_DACL_SECURITY_INFORMATION   = $80000000;
 
2897
  {$EXTERNALSYM PROTECTED_DACL_SECURITY_INFORMATION}
 
2898
  PROTECTED_SACL_SECURITY_INFORMATION   = $40000000;
 
2899
  {$EXTERNALSYM PROTECTED_SACL_SECURITY_INFORMATION}
 
2900
  UNPROTECTED_DACL_SECURITY_INFORMATION = $20000000;
 
2901
  {$EXTERNALSYM UNPROTECTED_DACL_SECURITY_INFORMATION}
 
2902
  UNPROTECTED_SACL_SECURITY_INFORMATION = $10000000;
 
2903
  {$EXTERNALSYM UNPROTECTED_SACL_SECURITY_INFORMATION}
 
2904
 
 
2905
  PROCESS_TERMINATE         = $0001;
 
2906
  {$EXTERNALSYM PROCESS_TERMINATE}
 
2907
  PROCESS_CREATE_THREAD     = $0002;
 
2908
  {$EXTERNALSYM PROCESS_CREATE_THREAD}
 
2909
  PROCESS_SET_SESSIONID     = $0004;
 
2910
  {$EXTERNALSYM PROCESS_SET_SESSIONID}
 
2911
  PROCESS_VM_OPERATION      = $0008;
 
2912
  {$EXTERNALSYM PROCESS_VM_OPERATION}
 
2913
  PROCESS_VM_READ           = $0010;
 
2914
  {$EXTERNALSYM PROCESS_VM_READ}
 
2915
  PROCESS_VM_WRITE          = $0020;
 
2916
  {$EXTERNALSYM PROCESS_VM_WRITE}
 
2917
  PROCESS_DUP_HANDLE        = $0040;
 
2918
  {$EXTERNALSYM PROCESS_DUP_HANDLE}
 
2919
  PROCESS_CREATE_PROCESS    = $0080;
 
2920
  {$EXTERNALSYM PROCESS_CREATE_PROCESS}
 
2921
  PROCESS_SET_QUOTA         = $0100;
 
2922
  {$EXTERNALSYM PROCESS_SET_QUOTA}
 
2923
  PROCESS_SET_INFORMATION   = $0200;
 
2924
  {$EXTERNALSYM PROCESS_SET_INFORMATION}
 
2925
  PROCESS_QUERY_INFORMATION = $0400;
 
2926
  {$EXTERNALSYM PROCESS_QUERY_INFORMATION}
 
2927
  PROCESS_SUSPEND_RESUME    = $0800;
 
2928
  {$EXTERNALSYM PROCESS_SUSPEND_RESUME}
 
2929
  PROCESS_ALL_ACCESS        = STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $FFF;
 
2930
  {$EXTERNALSYM PROCESS_ALL_ACCESS}
 
2931
 
 
2932
  MAXIMUM_PROCESSORS = 32;
 
2933
  {$EXTERNALSYM MAXIMUM_PROCESSORS}
 
2934
 
 
2935
  THREAD_TERMINATE            = $0001;
 
2936
  {$EXTERNALSYM THREAD_TERMINATE}
 
2937
  THREAD_SUSPEND_RESUME       = $0002;
 
2938
  {$EXTERNALSYM THREAD_SUSPEND_RESUME}
 
2939
  THREAD_GET_CONTEXT          = $0008;
 
2940
  {$EXTERNALSYM THREAD_GET_CONTEXT}
 
2941
  THREAD_SET_CONTEXT          = $0010;
 
2942
  {$EXTERNALSYM THREAD_SET_CONTEXT}
 
2943
  THREAD_SET_INFORMATION      = $0020;
 
2944
  {$EXTERNALSYM THREAD_SET_INFORMATION}
 
2945
  THREAD_QUERY_INFORMATION    = $0040;
 
2946
  {$EXTERNALSYM THREAD_QUERY_INFORMATION}
 
2947
  THREAD_SET_THREAD_TOKEN     = $0080;
 
2948
  {$EXTERNALSYM THREAD_SET_THREAD_TOKEN}
 
2949
  THREAD_IMPERSONATE          = $0100;
 
2950
  {$EXTERNALSYM THREAD_IMPERSONATE}
 
2951
  THREAD_DIRECT_IMPERSONATION = $0200;
 
2952
  {$EXTERNALSYM THREAD_DIRECT_IMPERSONATION}
 
2953
 
 
2954
  THREAD_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $3FF;
 
2955
  {$EXTERNALSYM THREAD_ALL_ACCESS}
 
2956
 
 
2957
  JOB_OBJECT_ASSIGN_PROCESS          = $0001;
 
2958
  {$EXTERNALSYM JOB_OBJECT_ASSIGN_PROCESS}
 
2959
  JOB_OBJECT_SET_ATTRIBUTES          = $0002;
 
2960
  {$EXTERNALSYM JOB_OBJECT_SET_ATTRIBUTES}
 
2961
  JOB_OBJECT_QUERY                   = $0004;
 
2962
  {$EXTERNALSYM JOB_OBJECT_QUERY}
 
2963
  JOB_OBJECT_TERMINATE               = $0008;
 
2964
  {$EXTERNALSYM JOB_OBJECT_TERMINATE}
 
2965
  JOB_OBJECT_SET_SECURITY_ATTRIBUTES = $0010;
 
2966
  {$EXTERNALSYM JOB_OBJECT_SET_SECURITY_ATTRIBUTES}
 
2967
  JOB_OBJECT_ALL_ACCESS              = STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $1F ;
 
2968
  {$EXTERNALSYM JOB_OBJECT_ALL_ACCESS}
 
2969
 
 
2970
type
 
2971
  _JOB_SET_ARRAY = record
 
2972
    JobHandle: HANDLE;   // Handle to job object to insert
 
2973
    MemberLevel: DWORD;  // Level of this job in the set. Must be > 0. Can be sparse.
 
2974
    Flags: DWORD;        // Unused. Must be zero
 
2975
  end;
 
2976
  {$EXTERNALSYM _JOB_SET_ARRAY}
 
2977
  JOB_SET_ARRAY = _JOB_SET_ARRAY;
 
2978
  {$EXTERNALSYM JOB_SET_ARRAY}
 
2979
  PJOB_SET_ARRAY = ^JOB_SET_ARRAY;
 
2980
  {$EXTERNALSYM PJOB_SET_ARRAY}
 
2981
  TJobSetArray = JOB_SET_ARRAY;
 
2982
  PJobSetArray = PJOB_SET_ARRAY;
 
2983
 
 
2984
const
 
2985
  FLS_MAXIMUM_AVAILABLE = 128;
 
2986
  {$EXTERNALSYM FLS_MAXIMUM_AVAILABLE}
 
2987
  TLS_MINIMUM_AVAILABLE = 64;
 
2988
  {$EXTERNALSYM TLS_MINIMUM_AVAILABLE}
 
2989
 
 
2990
type
 
2991
  PEXCEPTION_REGISTRATION_RECORD = ^EXCEPTION_REGISTRATION_RECORD;
 
2992
  _EXCEPTION_REGISTRATION_RECORD = packed record
 
2993
    pNext: PEXCEPTION_REGISTRATION_RECORD;
 
2994
    pfnHandler: FARPROC;
 
2995
  end;
 
2996
  EXCEPTION_REGISTRATION_RECORD = _EXCEPTION_REGISTRATION_RECORD;
 
2997
  TExceptionRegistrationRecord = EXCEPTION_REGISTRATION_RECORD;
 
2998
  PExceptionRegistrationRecord = PEXCEPTION_REGISTRATION_RECORD;
 
2999
 
 
3000
  PNT_TIB = ^NT_TIB;
 
3001
  {$EXTERNALSYM PNT_TIB}
 
3002
  _NT_TIB = record
 
3003
    ExceptionList: PEXCEPTION_REGISTRATION_RECORD; // 00h Head of exception record list
 
3004
    StackBase: PVOID;     // 04h Top of user stack
 
3005
    StackLimit: PVOID;    // 08h Base of user stack
 
3006
 
 
3007
    //union                       // 0Ch (NT/Win95 differences)
 
3008
    //{
 
3009
    //    struct  // Win95 fields
 
3010
    //    {
 
3011
    //        WORD    pvTDB;         // 0Ch TDB
 
3012
    //        WORD    pvThunkSS;     // 0Eh SS selector used for thunking to 16 bits
 
3013
    //        DWORD   unknown1;      // 10h
 
3014
    //    } WIN95;
 
3015
    //
 
3016
    //    struct  // WinNT fields
 
3017
    //    {
 
3018
 
 
3019
    SubSystemTib: PVOID;     // 0Ch
 
3020
 
 
3021
    Union: record             // 10H
 
3022
    case Integer of
 
3023
      0: (FiberData: PVOID);
 
3024
      1: (Version: DWORD);
 
3025
    end;
 
3026
 
 
3027
    //    } WINNT;
 
3028
    //} TIB_UNION1;
 
3029
 
 
3030
    ArbitraryUserPointer: PVOID;      // 14h Available for application use
 
3031
    Self: PNT_TIB;          // 18h Linear address of TIB structure
 
3032
 
 
3033
    //union                       // 1Ch (NT/Win95 differences)
 
3034
    //{
 
3035
    //    struct  // Win95 fields
 
3036
    //    {
 
3037
    //        WORD    TIBFlags;           // 1Ch
 
3038
    //        WORD    Win16MutexCount;    // 1Eh
 
3039
    //        DWORD   DebugContext;       // 20h
 
3040
    //        DWORD   pCurrentPriority;   // 24h
 
3041
    //        DWORD   pvQueue;            // 28h Message Queue selector
 
3042
    //    } WIN95;
 
3043
    //
 
3044
    //    struct  // WinNT fields
 
3045
    //    {
 
3046
 
 
3047
    unknown1: DWORD;             // 1Ch
 
3048
    processID: DWORD;            // 20h
 
3049
    threadID: DWORD;             // 24h
 
3050
    unknown2: DWORD;             // 28h
 
3051
 
 
3052
    //    } WINNT;
 
3053
    //} TIB_UNION2;
 
3054
 
 
3055
    pvTLSArray: PVOID;          // (PPVOID!) 2Ch Thread Local Storage array
 
3056
 
 
3057
    //union                      // 30h (NT/Win95 differences)
 
3058
    //{
 
3059
    //    struct  // Win95 fields
 
3060
    //    {
 
3061
    //        PVOID*  pProcess;  // 30h Pointer to owning process database
 
3062
    //    } WIN95;
 
3063
    //} TIB_UNION3;
 
3064
  end;
 
3065
  {$EXTERNALSYM _NT_TIB}
 
3066
  NT_TIB = _NT_TIB;
 
3067
  {$EXTERNALSYM NT_TIB}
 
3068
  TNtTib = NT_TIB;
 
3069
  PNtTib = ^TNtTib;
 
3070
 
 
3071
//
 
3072
// 32 and 64 bit specific version for wow64 and the debugger
 
3073
//
 
3074
 
 
3075
  PNT_TIB32 = ^NT_TIB32;
 
3076
  {$EXTERNALSYM PNT_TIB32}
 
3077
  _NT_TIB32 = record
 
3078
    ExceptionList: DWORD;
 
3079
    StackBase: DWORD;
 
3080
    StackLimit: DWORD;
 
3081
    SubSystemTib: DWORD;
 
3082
    Union: record
 
3083
    case Integer of
 
3084
      0: (FiberData: DWORD);
 
3085
      1: (Version: DWORD);
 
3086
    end;
 
3087
    ArbitraryUserPointer: DWORD;
 
3088
    Self: DWORD;
 
3089
  end;
 
3090
  {$EXTERNALSYM _NT_TIB32}
 
3091
  NT_TIB32 = _NT_TIB32;
 
3092
  {$EXTERNALSYM NT_TIB32}
 
3093
  TNtTib32 = NT_TIB32;
 
3094
  PNtTib32 = ^TNtTib32;
 
3095
 
 
3096
  PNT_TIB64 = ^NT_TIB64;
 
3097
  {$EXTERNALSYM PNT_TIB64}
 
3098
  _NT_TIB64 = record
 
3099
    ExceptionList: DWORD64;
 
3100
    StackBase: DWORD64;
 
3101
    StackLimit: DWORD64;
 
3102
    SubSystemTib: DWORD64;
 
3103
    Union: record
 
3104
    case Integer of
 
3105
      0: (FiberData: DWORD64);
 
3106
      1: (Version: DWORD);
 
3107
    end;
 
3108
    ArbitraryUserPointer: DWORD64;
 
3109
    Self: DWORD64;
 
3110
  end;
 
3111
  {$EXTERNALSYM _NT_TIB64}
 
3112
  NT_TIB64 = _NT_TIB64;
 
3113
  {$EXTERNALSYM NT_TIB64}
 
3114
  TNtTib64 = NT_TIB64;
 
3115
  PNtTib64 = ^TNtTib64;
 
3116
 
 
3117
//
 
3118
// Define function to return the current Thread Environment Block
 
3119
//
 
3120
 
 
3121
function NtCurrentTeb: PNT_TIB;
 
3122
{$EXTERNALSYM NtCurrentTeb}
 
3123
 
 
3124
const
 
3125
  THREAD_BASE_PRIORITY_LOWRT = 15;         // value that gets a thread to LowRealtime-1
 
3126
  {$EXTERNALSYM THREAD_BASE_PRIORITY_LOWRT}
 
3127
  THREAD_BASE_PRIORITY_MAX   = 2;          // maximum thread base priority boost
 
3128
  {$EXTERNALSYM THREAD_BASE_PRIORITY_MAX}
 
3129
  THREAD_BASE_PRIORITY_MIN   = DWORD(-2);  // minimum thread base priority boost
 
3130
  {$EXTERNALSYM THREAD_BASE_PRIORITY_MIN}
 
3131
  THREAD_BASE_PRIORITY_IDLE  = DWORD(-15); // value that gets a thread to idle
 
3132
  {$EXTERNALSYM THREAD_BASE_PRIORITY_IDLE}
 
3133
 
 
3134
type
 
3135
  PQUOTA_LIMITS = ^QUOTA_LIMITS;
 
3136
  {$EXTERNALSYM PQUOTA_LIMITS}
 
3137
  _QUOTA_LIMITS = record
 
3138
    PagedPoolLimit: SIZE_T;
 
3139
    NonPagedPoolLimit: SIZE_T;
 
3140
    MinimumWorkingSetSize: SIZE_T;
 
3141
    MaximumWorkingSetSize: SIZE_T;
 
3142
    PagefileLimit: SIZE_T;
 
3143
    TimeLimit: LARGE_INTEGER;
 
3144
  end;
 
3145
  {$EXTERNALSYM _QUOTA_LIMITS}
 
3146
  QUOTA_LIMITS = _QUOTA_LIMITS;
 
3147
  {$EXTERNALSYM QUOTA_LIMITS}
 
3148
  TQuotaLimits = QUOTA_LIMITS;
 
3149
  PQuotaLimits = PQUOTA_LIMITS;
 
3150
 
 
3151
const
 
3152
  QUOTA_LIMITS_HARDWS_MIN_ENABLE  = $00000001;
 
3153
  {$EXTERNALSYM QUOTA_LIMITS_HARDWS_MIN_ENABLE}
 
3154
  QUOTA_LIMITS_HARDWS_MIN_DISABLE = $00000002;
 
3155
  {$EXTERNALSYM QUOTA_LIMITS_HARDWS_MIN_DISABLE}
 
3156
  QUOTA_LIMITS_HARDWS_MAX_ENABLE  = $00000004;
 
3157
  {$EXTERNALSYM QUOTA_LIMITS_HARDWS_MAX_ENABLE}
 
3158
  QUOTA_LIMITS_HARDWS_MAX_DISABLE = $00000008;
 
3159
  {$EXTERNALSYM QUOTA_LIMITS_HARDWS_MAX_DISABLE}
 
3160
 
 
3161
type
 
3162
  _QUOTA_LIMITS_EX = record
 
3163
    PagedPoolLimit: SIZE_T;
 
3164
    NonPagedPoolLimit: SIZE_T;
 
3165
    MinimumWorkingSetSize: SIZE_T;
 
3166
    MaximumWorkingSetSize: SIZE_T;
 
3167
    PagefileLimit: SIZE_T;
 
3168
    TimeLimit: LARGE_INTEGER;
 
3169
    Reserved1: SIZE_T;
 
3170
    Reserved2: SIZE_T;
 
3171
    Reserved3: SIZE_T;
 
3172
    Reserved4: SIZE_T;
 
3173
    Flags: DWORD;
 
3174
    Reserved5: DWORD;
 
3175
  end;
 
3176
  {$EXTERNALSYM _QUOTA_LIMITS_EX}
 
3177
  QUOTA_LIMITS_EX = _QUOTA_LIMITS_EX;
 
3178
  {$EXTERNALSYM QUOTA_LIMITS_EX}
 
3179
  PQUOTA_LIMITS_EX = ^QUOTA_LIMITS_EX;
 
3180
  {$EXTERNALSYM PQUOTA_LIMITS_EX}
 
3181
  TQuotaLimitsEx = QUOTA_LIMITS_EX;
 
3182
  PQuotaLimitsEx = PQUOTA_LIMITS_EX;
 
3183
 
 
3184
  PIO_COUNTERS = ^IO_COUNTERS;
 
3185
  {$EXTERNALSYM PIO_COUNTERS}
 
3186
  _IO_COUNTERS = record
 
3187
    ReadOperationCount: Int64;
 
3188
    WriteOperationCount: Int64;
 
3189
    OtherOperationCount: Int64;
 
3190
    ReadTransferCount: Int64;
 
3191
    WriteTransferCount: Int64;
 
3192
    OtherTransferCount: Int64;
 
3193
  end;
 
3194
  {$EXTERNALSYM _IO_COUNTERS}
 
3195
  IO_COUNTERS = _IO_COUNTERS;
 
3196
  {$EXTERNALSYM IO_COUNTERS}
 
3197
  TIoCounters = IO_COUNTERS;
 
3198
  PIoCounters = PIO_COUNTERS;
 
3199
 
 
3200
  PJOBOBJECT_BASIC_ACCOUNTING_INFORMATION = ^JOBOBJECT_BASIC_ACCOUNTING_INFORMATION;
 
3201
  {$EXTERNALSYM PJOBOBJECT_BASIC_ACCOUNTING_INFORMATION}
 
3202
  _JOBOBJECT_BASIC_ACCOUNTING_INFORMATION = record
 
3203
    TotalUserTime: LARGE_INTEGER;
 
3204
    TotalKernelTime: LARGE_INTEGER;
 
3205
    ThisPeriodTotalUserTime: LARGE_INTEGER;
 
3206
    ThisPeriodTotalKernelTime: LARGE_INTEGER;
 
3207
    TotalPageFaultCount: DWORD;
 
3208
    TotalProcesses: DWORD;
 
3209
    ActiveProcesses: DWORD;
 
3210
    TotalTerminatedProcesses: DWORD;
 
3211
  end;
 
3212
  {$EXTERNALSYM _JOBOBJECT_BASIC_ACCOUNTING_INFORMATION}
 
3213
  JOBOBJECT_BASIC_ACCOUNTING_INFORMATION = _JOBOBJECT_BASIC_ACCOUNTING_INFORMATION;
 
3214
  {$EXTERNALSYM JOBOBJECT_BASIC_ACCOUNTING_INFORMATION}
 
3215
  TJobObjectBasicAccountingInformation = JOBOBJECT_BASIC_ACCOUNTING_INFORMATION;
 
3216
  PJobObjectBasicAccountingInformation = PJOBOBJECT_BASIC_ACCOUNTING_INFORMATION;
 
3217
 
 
3218
  PJOBOBJECT_BASIC_LIMIT_INFORMATION = ^JOBOBJECT_BASIC_LIMIT_INFORMATION;
 
3219
  {$EXTERNALSYM PJOBOBJECT_BASIC_LIMIT_INFORMATION}
 
3220
  _JOBOBJECT_BASIC_LIMIT_INFORMATION = record
 
3221
    PerProcessUserTimeLimit: LARGE_INTEGER;
 
3222
    PerJobUserTimeLimit: LARGE_INTEGER;
 
3223
    LimitFlags: DWORD;
 
3224
    MinimumWorkingSetSize: SIZE_T;
 
3225
    MaximumWorkingSetSize: SIZE_T;
 
3226
    ActiveProcessLimit: DWORD;
 
3227
    Affinity: ULONG_PTR;
 
3228
    PriorityClass: DWORD;
 
3229
    SchedulingClass: DWORD;
 
3230
  end;
 
3231
  {$EXTERNALSYM _JOBOBJECT_BASIC_LIMIT_INFORMATION}
 
3232
  JOBOBJECT_BASIC_LIMIT_INFORMATION = _JOBOBJECT_BASIC_LIMIT_INFORMATION;
 
3233
  {$EXTERNALSYM JOBOBJECT_BASIC_LIMIT_INFORMATION}
 
3234
  TJobObjectBasicLimitInformation = JOBOBJECT_BASIC_LIMIT_INFORMATION;
 
3235
  PJobObjectBasicLimitInformation = PJOBOBJECT_BASIC_LIMIT_INFORMATION;
 
3236
 
 
3237
  PJOBOBJECT_EXTENDED_LIMIT_INFORMATION = ^JOBOBJECT_EXTENDED_LIMIT_INFORMATION;
 
3238
  {$EXTERNALSYM PJOBOBJECT_EXTENDED_LIMIT_INFORMATION}
 
3239
  _JOBOBJECT_EXTENDED_LIMIT_INFORMATION = record
 
3240
    BasicLimitInformation: JOBOBJECT_BASIC_LIMIT_INFORMATION;
 
3241
    IoInfo: IO_COUNTERS;
 
3242
    ProcessMemoryLimit: SIZE_T;
 
3243
    JobMemoryLimit: SIZE_T;
 
3244
    PeakProcessMemoryUsed: SIZE_T;
 
3245
    PeakJobMemoryUsed: SIZE_T;
 
3246
  end;
 
3247
  {$EXTERNALSYM _JOBOBJECT_EXTENDED_LIMIT_INFORMATION}
 
3248
  JOBOBJECT_EXTENDED_LIMIT_INFORMATION = _JOBOBJECT_EXTENDED_LIMIT_INFORMATION;
 
3249
  {$EXTERNALSYM JOBOBJECT_EXTENDED_LIMIT_INFORMATION}
 
3250
  TJobObjectExtendedLimitInformation = JOBOBJECT_EXTENDED_LIMIT_INFORMATION;
 
3251
  PJobObjectExtendedLimitInformation = PJOBOBJECT_EXTENDED_LIMIT_INFORMATION;
 
3252
 
 
3253
  PJOBOBJECT_BASIC_PROCESS_ID_LIST = ^JOBOBJECT_BASIC_PROCESS_ID_LIST;
 
3254
  {$EXTERNALSYM PJOBOBJECT_BASIC_PROCESS_ID_LIST}
 
3255
  _JOBOBJECT_BASIC_PROCESS_ID_LIST = record
 
3256
    NumberOfAssignedProcesses: DWORD;
 
3257
    NumberOfProcessIdsInList: DWORD;
 
3258
    ProcessIdList: array [0..0] of ULONG_PTR;
 
3259
  end;
 
3260
  {$EXTERNALSYM _JOBOBJECT_BASIC_PROCESS_ID_LIST}
 
3261
  JOBOBJECT_BASIC_PROCESS_ID_LIST = _JOBOBJECT_BASIC_PROCESS_ID_LIST;
 
3262
  {$EXTERNALSYM JOBOBJECT_BASIC_PROCESS_ID_LIST}
 
3263
  TJobObjectBasicProcessIdList = JOBOBJECT_BASIC_PROCESS_ID_LIST;
 
3264
  PJobObjectBasicProcessIdList = PJOBOBJECT_BASIC_PROCESS_ID_LIST;
 
3265
 
 
3266
  PJOBOBJECT_BASIC_UI_RESTRICTIONS = ^JOBOBJECT_BASIC_UI_RESTRICTIONS;
 
3267
  {$EXTERNALSYM PJOBOBJECT_BASIC_UI_RESTRICTIONS}
 
3268
  _JOBOBJECT_BASIC_UI_RESTRICTIONS = record
 
3269
    UIRestrictionsClass: DWORD;
 
3270
  end;
 
3271
  {$EXTERNALSYM _JOBOBJECT_BASIC_UI_RESTRICTIONS}
 
3272
  JOBOBJECT_BASIC_UI_RESTRICTIONS = _JOBOBJECT_BASIC_UI_RESTRICTIONS;
 
3273
  {$EXTERNALSYM JOBOBJECT_BASIC_UI_RESTRICTIONS}
 
3274
  TJobObjectBasicUiRestrictions = JOBOBJECT_BASIC_UI_RESTRICTIONS;
 
3275
  PJobObjectBasicUiRestrictions = PJOBOBJECT_BASIC_UI_RESTRICTIONS;
 
3276
 
 
3277
  PJOBOBJECT_SECURITY_LIMIT_INFORMATION = ^JOBOBJECT_SECURITY_LIMIT_INFORMATION;
 
3278
  {$EXTERNALSYM PJOBOBJECT_SECURITY_LIMIT_INFORMATION}
 
3279
  _JOBOBJECT_SECURITY_LIMIT_INFORMATION = record
 
3280
    SecurityLimitFlags : DWORD;
 
3281
    JobToken : THandle;
 
3282
    SidsToDisable : PTOKEN_GROUPS;
 
3283
    PrivilegesToDelete : PTOKEN_PRIVILEGES;
 
3284
    RestrictedSids : PTOKEN_GROUPS;
 
3285
  end;
 
3286
  {$EXTERNALSYM _JOBOBJECT_SECURITY_LIMIT_INFORMATION}
 
3287
  JOBOBJECT_SECURITY_LIMIT_INFORMATION = _JOBOBJECT_SECURITY_LIMIT_INFORMATION;
 
3288
  {$EXTERNALSYM JOBOBJECT_SECURITY_LIMIT_INFORMATION}
 
3289
  TJobObjectSecurityLimitInformation = JOBOBJECT_SECURITY_LIMIT_INFORMATION;
 
3290
  PJobObjectSecurityLimitInformation = PJOBOBJECT_SECURITY_LIMIT_INFORMATION;
 
3291
 
 
3292
  PJOBOBJECT_END_OF_JOB_TIME_INFORMATION = ^JOBOBJECT_END_OF_JOB_TIME_INFORMATION;
 
3293
  {$EXTERNALSYM PJOBOBJECT_END_OF_JOB_TIME_INFORMATION}
 
3294
  _JOBOBJECT_END_OF_JOB_TIME_INFORMATION = record
 
3295
    EndOfJobTimeAction: DWORD;
 
3296
  end;
 
3297
  {$EXTERNALSYM _JOBOBJECT_END_OF_JOB_TIME_INFORMATION}
 
3298
  JOBOBJECT_END_OF_JOB_TIME_INFORMATION = _JOBOBJECT_END_OF_JOB_TIME_INFORMATION;
 
3299
  {$EXTERNALSYM JOBOBJECT_END_OF_JOB_TIME_INFORMATION}
 
3300
  TJobObjectEndOfJobTimeInformation = JOBOBJECT_END_OF_JOB_TIME_INFORMATION;
 
3301
  PJobObjectEndOfJobTimeInformation = PJOBOBJECT_END_OF_JOB_TIME_INFORMATION;
 
3302
 
 
3303
  PJOBOBJECT_ASSOCIATE_COMPLETION_PORT = ^JOBOBJECT_ASSOCIATE_COMPLETION_PORT;
 
3304
  {$EXTERNALSYM PJOBOBJECT_ASSOCIATE_COMPLETION_PORT}
 
3305
  _JOBOBJECT_ASSOCIATE_COMPLETION_PORT = record
 
3306
    CompletionKey: Pointer;
 
3307
    CompletionPort: THandle;
 
3308
  end;
 
3309
  {$EXTERNALSYM _JOBOBJECT_ASSOCIATE_COMPLETION_PORT}
 
3310
  JOBOBJECT_ASSOCIATE_COMPLETION_PORT = _JOBOBJECT_ASSOCIATE_COMPLETION_PORT;
 
3311
  {$EXTERNALSYM JOBOBJECT_ASSOCIATE_COMPLETION_PORT}
 
3312
  TJobObjectAssociateCompletionPort = JOBOBJECT_ASSOCIATE_COMPLETION_PORT;
 
3313
  PJobObjectAssociateCompletionPort = PJOBOBJECT_ASSOCIATE_COMPLETION_PORT;
 
3314
 
 
3315
  PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION = ^JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION;
 
3316
  {$EXTERNALSYM PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION}
 
3317
  _JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION = record
 
3318
    BasicInfo: JOBOBJECT_BASIC_ACCOUNTING_INFORMATION;
 
3319
    IoInfo: IO_COUNTERS;
 
3320
  end;
 
3321
  {$EXTERNALSYM _JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION}
 
3322
  JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION = _JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION;
 
3323
  {$EXTERNALSYM JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION}
 
3324
  TJobObjectBasicAndIoAccountingInformation = JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION;
 
3325
  PJobObjectBasicAndIoAccountingInformation = PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION;
 
3326
 
 
3327
  _JOBOBJECT_JOBSET_INFORMATION = record
 
3328
    MemberLevel: DWORD;
 
3329
  end;
 
3330
  {$EXTERNALSYM _JOBOBJECT_JOBSET_INFORMATION}
 
3331
  JOBOBJECT_JOBSET_INFORMATION = _JOBOBJECT_JOBSET_INFORMATION;
 
3332
  {$EXTERNALSYM JOBOBJECT_JOBSET_INFORMATION}
 
3333
  PJOBOBJECT_JOBSET_INFORMATION = ^JOBOBJECT_JOBSET_INFORMATION;
 
3334
  {$EXTERNALSYM PJOBOBJECT_JOBSET_INFORMATION}
 
3335
  TJobObjectSetInformation = JOBOBJECT_JOBSET_INFORMATION;
 
3336
  PJobObjectSetInformation = PJOBOBJECT_JOBSET_INFORMATION;
 
3337
 
 
3338
const
 
3339
  JOB_OBJECT_TERMINATE_AT_END_OF_JOB = 0;
 
3340
  {$EXTERNALSYM JOB_OBJECT_TERMINATE_AT_END_OF_JOB}
 
3341
  JOB_OBJECT_POST_AT_END_OF_JOB      = 1;
 
3342
  {$EXTERNALSYM JOB_OBJECT_POST_AT_END_OF_JOB}
 
3343
 
 
3344
//
 
3345
// Completion Port Messages for job objects
 
3346
//
 
3347
// These values are returned via the lpNumberOfBytesTransferred parameter
 
3348
//
 
3349
 
 
3350
  JOB_OBJECT_MSG_END_OF_JOB_TIME       = 1;
 
3351
  {$EXTERNALSYM JOB_OBJECT_MSG_END_OF_JOB_TIME}
 
3352
  JOB_OBJECT_MSG_END_OF_PROCESS_TIME   = 2;
 
3353
  {$EXTERNALSYM JOB_OBJECT_MSG_END_OF_PROCESS_TIME}
 
3354
  JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT  = 3;
 
3355
  {$EXTERNALSYM JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT}
 
3356
  JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO   = 4;
 
3357
  {$EXTERNALSYM JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO}
 
3358
  JOB_OBJECT_MSG_NEW_PROCESS           = 6;
 
3359
  {$EXTERNALSYM JOB_OBJECT_MSG_NEW_PROCESS}
 
3360
  JOB_OBJECT_MSG_EXIT_PROCESS          = 7;
 
3361
  {$EXTERNALSYM JOB_OBJECT_MSG_EXIT_PROCESS}
 
3362
  JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS = 8;
 
3363
  {$EXTERNALSYM JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS}
 
3364
  JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT  = 9;
 
3365
  {$EXTERNALSYM JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT}
 
3366
  JOB_OBJECT_MSG_JOB_MEMORY_LIMIT      = 10;
 
3367
  {$EXTERNALSYM JOB_OBJECT_MSG_JOB_MEMORY_LIMIT}
 
3368
 
 
3369
//
 
3370
// Basic Limits
 
3371
//
 
3372
 
 
3373
  JOB_OBJECT_LIMIT_WORKINGSET        = $00000001;
 
3374
  {$EXTERNALSYM JOB_OBJECT_LIMIT_WORKINGSET}
 
3375
  JOB_OBJECT_LIMIT_PROCESS_TIME      = $00000002;
 
3376
  {$EXTERNALSYM JOB_OBJECT_LIMIT_PROCESS_TIME}
 
3377
  JOB_OBJECT_LIMIT_JOB_TIME          = $00000004;
 
3378
  {$EXTERNALSYM JOB_OBJECT_LIMIT_JOB_TIME}
 
3379
  JOB_OBJECT_LIMIT_ACTIVE_PROCESS    = $00000008;
 
3380
  {$EXTERNALSYM JOB_OBJECT_LIMIT_ACTIVE_PROCESS}
 
3381
  JOB_OBJECT_LIMIT_AFFINITY          = $00000010;
 
3382
  {$EXTERNALSYM JOB_OBJECT_LIMIT_AFFINITY}
 
3383
  JOB_OBJECT_LIMIT_PRIORITY_CLASS    = $00000020;
 
3384
  {$EXTERNALSYM JOB_OBJECT_LIMIT_PRIORITY_CLASS}
 
3385
  JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME = $00000040;
 
3386
  {$EXTERNALSYM JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME}
 
3387
  JOB_OBJECT_LIMIT_SCHEDULING_CLASS  = $00000080;
 
3388
  {$EXTERNALSYM JOB_OBJECT_LIMIT_SCHEDULING_CLASS}
 
3389
 
 
3390
//
 
3391
// Extended Limits
 
3392
//
 
3393
 
 
3394
  JOB_OBJECT_LIMIT_PROCESS_MEMORY             = $00000100;
 
3395
  {$EXTERNALSYM JOB_OBJECT_LIMIT_PROCESS_MEMORY}
 
3396
  JOB_OBJECT_LIMIT_JOB_MEMORY                 = $00000200;
 
3397
  {$EXTERNALSYM JOB_OBJECT_LIMIT_JOB_MEMORY}
 
3398
  JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION = $00000400;
 
3399
  {$EXTERNALSYM JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION}
 
3400
  JOB_OBJECT_LIMIT_BREAKAWAY_OK               = $00000800;
 
3401
  {$EXTERNALSYM JOB_OBJECT_LIMIT_BREAKAWAY_OK}
 
3402
  JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK        = $00001000;
 
3403
  {$EXTERNALSYM JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK}
 
3404
  JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE          = $00002000;
 
3405
  {$EXTERNALSYM JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE}
 
3406
 
 
3407
  JOB_OBJECT_LIMIT_RESERVED2 = $00004000;
 
3408
  {$EXTERNALSYM JOB_OBJECT_LIMIT_RESERVED2}
 
3409
  JOB_OBJECT_LIMIT_RESERVED3 = $00008000;
 
3410
  {$EXTERNALSYM JOB_OBJECT_LIMIT_RESERVED3}
 
3411
  JOB_OBJECT_LIMIT_RESERVED4 = $00010000;
 
3412
  {$EXTERNALSYM JOB_OBJECT_LIMIT_RESERVED4}
 
3413
  JOB_OBJECT_LIMIT_RESERVED5 = $00020000;
 
3414
  {$EXTERNALSYM JOB_OBJECT_LIMIT_RESERVED5}
 
3415
  JOB_OBJECT_LIMIT_RESERVED6 = $00040000;
 
3416
  {$EXTERNALSYM JOB_OBJECT_LIMIT_RESERVED6}
 
3417
 
 
3418
  JOB_OBJECT_LIMIT_VALID_FLAGS = $0007ffff;
 
3419
  {$EXTERNALSYM JOB_OBJECT_LIMIT_VALID_FLAGS}
 
3420
 
 
3421
  JOB_OBJECT_BASIC_LIMIT_VALID_FLAGS    = $000000ff;
 
3422
  {$EXTERNALSYM JOB_OBJECT_BASIC_LIMIT_VALID_FLAGS}
 
3423
  JOB_OBJECT_EXTENDED_LIMIT_VALID_FLAGS = $00003fff;
 
3424
  {$EXTERNALSYM JOB_OBJECT_EXTENDED_LIMIT_VALID_FLAGS}
 
3425
  JOB_OBJECT_RESERVED_LIMIT_VALID_FLAGS = $0007ffff;
 
3426
  {$EXTERNALSYM JOB_OBJECT_RESERVED_LIMIT_VALID_FLAGS}
 
3427
 
 
3428
//
 
3429
// UI restrictions for jobs
 
3430
//
 
3431
 
 
3432
  JOB_OBJECT_UILIMIT_NONE = $00000000;
 
3433
  {$EXTERNALSYM JOB_OBJECT_UILIMIT_NONE}
 
3434
 
 
3435
  JOB_OBJECT_UILIMIT_HANDLES          = $00000001;
 
3436
  {$EXTERNALSYM JOB_OBJECT_UILIMIT_HANDLES}
 
3437
  JOB_OBJECT_UILIMIT_READCLIPBOARD    = $00000002;
 
3438
  {$EXTERNALSYM JOB_OBJECT_UILIMIT_READCLIPBOARD}
 
3439
  JOB_OBJECT_UILIMIT_WRITECLIPBOARD   = $00000004;
 
3440
  {$EXTERNALSYM JOB_OBJECT_UILIMIT_WRITECLIPBOARD}
 
3441
  JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS = $00000008;
 
3442
  {$EXTERNALSYM JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS}
 
3443
  JOB_OBJECT_UILIMIT_DISPLAYSETTINGS  = $00000010;
 
3444
  {$EXTERNALSYM JOB_OBJECT_UILIMIT_DISPLAYSETTINGS}
 
3445
  JOB_OBJECT_UILIMIT_GLOBALATOMS      = $00000020;
 
3446
  {$EXTERNALSYM JOB_OBJECT_UILIMIT_GLOBALATOMS}
 
3447
  JOB_OBJECT_UILIMIT_DESKTOP          = $00000040;
 
3448
  {$EXTERNALSYM JOB_OBJECT_UILIMIT_DESKTOP}
 
3449
  JOB_OBJECT_UILIMIT_EXITWINDOWS      = $00000080;
 
3450
  {$EXTERNALSYM JOB_OBJECT_UILIMIT_EXITWINDOWS}
 
3451
 
 
3452
  JOB_OBJECT_UILIMIT_ALL = $000000FF;
 
3453
  {$EXTERNALSYM JOB_OBJECT_UILIMIT_ALL}
 
3454
 
 
3455
  JOB_OBJECT_UI_VALID_FLAGS = $000000FF;
 
3456
  {$EXTERNALSYM JOB_OBJECT_UI_VALID_FLAGS}
 
3457
 
 
3458
  JOB_OBJECT_SECURITY_NO_ADMIN         = $00000001;
 
3459
  {$EXTERNALSYM JOB_OBJECT_SECURITY_NO_ADMIN}
 
3460
  JOB_OBJECT_SECURITY_RESTRICTED_TOKEN = $00000002;
 
3461
  {$EXTERNALSYM JOB_OBJECT_SECURITY_RESTRICTED_TOKEN}
 
3462
  JOB_OBJECT_SECURITY_ONLY_TOKEN       = $00000004;
 
3463
  {$EXTERNALSYM JOB_OBJECT_SECURITY_ONLY_TOKEN}
 
3464
  JOB_OBJECT_SECURITY_FILTER_TOKENS    = $00000008;
 
3465
  {$EXTERNALSYM JOB_OBJECT_SECURITY_FILTER_TOKENS}
 
3466
 
 
3467
  JOB_OBJECT_SECURITY_VALID_FLAGS = $0000000f;
 
3468
  {$EXTERNALSYM JOB_OBJECT_SECURITY_VALID_FLAGS}
 
3469
 
 
3470
type
 
3471
  _JOBOBJECTINFOCLASS = (
 
3472
    JobObjectInfoClassPadding0,
 
3473
    JobObjectBasicAccountingInformation,
 
3474
    JobObjectBasicLimitInformation,
 
3475
    JobObjectBasicProcessIdList,
 
3476
    JobObjectBasicUIRestrictions,
 
3477
    JobObjectSecurityLimitInformation,
 
3478
    JobObjectEndOfJobTimeInformation,
 
3479
    JobObjectAssociateCompletionPortInformation,
 
3480
    JobObjectBasicAndIoAccountingInformation,
 
3481
    JobObjectExtendedLimitInformation,
 
3482
    JobObjectJobSetInformation,
 
3483
    MaxJobObjectInfoClass);
 
3484
  {$EXTERNALSYM _JOBOBJECTINFOCLASS}
 
3485
  JOBOBJECTINFOCLASS = _JOBOBJECTINFOCLASS;
 
3486
  {$EXTERNALSYM JOBOBJECTINFOCLASS}
 
3487
  TJobObjectInfoClass = JOBOBJECTINFOCLASS;
 
3488
 
 
3489
const
 
3490
  EVENT_MODIFY_STATE = $0002;
 
3491
  {$EXTERNALSYM EVENT_MODIFY_STATE}
 
3492
  EVENT_ALL_ACCESS   = STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $3;
 
3493
  {$EXTERNALSYM EVENT_ALL_ACCESS}
 
3494
  MUTANT_QUERY_STATE = $0001;
 
3495
  {$EXTERNALSYM MUTANT_QUERY_STATE}
 
3496
 
 
3497
  MUTANT_ALL_ACCESS      = STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or MUTANT_QUERY_STATE;
 
3498
  {$EXTERNALSYM MUTANT_ALL_ACCESS}
 
3499
  SEMAPHORE_MODIFY_STATE = $0002;
 
3500
  {$EXTERNALSYM SEMAPHORE_MODIFY_STATE}
 
3501
  SEMAPHORE_ALL_ACCESS   = STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $3;
 
3502
  {$EXTERNALSYM SEMAPHORE_ALL_ACCESS}
 
3503
 
 
3504
//
 
3505
// Timer Specific Access Rights.
 
3506
//
 
3507
 
 
3508
  TIMER_QUERY_STATE  = $0001;
 
3509
  {$EXTERNALSYM TIMER_QUERY_STATE}
 
3510
  TIMER_MODIFY_STATE = $0002;
 
3511
  {$EXTERNALSYM TIMER_MODIFY_STATE}
 
3512
 
 
3513
  TIMER_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or TIMER_QUERY_STATE or TIMER_MODIFY_STATE;
 
3514
  {$EXTERNALSYM TIMER_ALL_ACCESS}
 
3515
 
 
3516
  TIME_ZONE_ID_UNKNOWN  = 0;
 
3517
  {$EXTERNALSYM TIME_ZONE_ID_UNKNOWN}
 
3518
  TIME_ZONE_ID_STANDARD = 1;
 
3519
  {$EXTERNALSYM TIME_ZONE_ID_STANDARD}
 
3520
  TIME_ZONE_ID_DAYLIGHT = 2;
 
3521
  {$EXTERNALSYM TIME_ZONE_ID_DAYLIGHT}
 
3522
 
 
3523
type
 
3524
  _LOGICAL_PROCESSOR_RELATIONSHIP = (RelationProcessorCore, RelationNumaNode);
 
3525
  {$EXTERNALSYM _LOGICAL_PROCESSOR_RELATIONSHIP}
 
3526
  LOGICAL_PROCESSOR_RELATIONSHIP = _LOGICAL_PROCESSOR_RELATIONSHIP;
 
3527
  {$EXTERNALSYM LOGICAL_PROCESSOR_RELATIONSHIP}
 
3528
  TLogicalProcessorRelationship = LOGICAL_PROCESSOR_RELATIONSHIP;
 
3529
 
 
3530
const
 
3531
  LTP_PC_SMT = $1;
 
3532
  {$EXTERNALSYM LTP_PC_SMT}
 
3533
 
 
3534
type
 
3535
  _SYSTEM_LOGICAL_PROCESSOR_INFORMATION = record
 
3536
    ProcessorMask: ULONG_PTR;
 
3537
    Relationship: LOGICAL_PROCESSOR_RELATIONSHIP;
 
3538
    case Integer of
 
3539
      0: (Flags: BYTE); // ProcessorCore
 
3540
      1: (NodeNumber: DWORD); // NumaNode
 
3541
      2: (Reserved: array [0..1] of ULONGLONG);
 
3542
  end;
 
3543
  {$EXTERNALSYM _SYSTEM_LOGICAL_PROCESSOR_INFORMATION}
 
3544
  SYSTEM_LOGICAL_PROCESSOR_INFORMATION = _SYSTEM_LOGICAL_PROCESSOR_INFORMATION;
 
3545
  {$EXTERNALSYM SYSTEM_LOGICAL_PROCESSOR_INFORMATION}
 
3546
  PSYSTEM_LOGICAL_PROCESSOR_INFORMATION = ^SYSTEM_LOGICAL_PROCESSOR_INFORMATION;
 
3547
  TSystemLogicalProcessorInformation = SYSTEM_LOGICAL_PROCESSOR_INFORMATION;
 
3548
  PSystemLogicalProcessorInformation = PSYSTEM_LOGICAL_PROCESSOR_INFORMATION;
 
3549
 
 
3550
const
 
3551
  PROCESSOR_INTEL_386     = 386;
 
3552
  {$EXTERNALSYM PROCESSOR_INTEL_386}
 
3553
  PROCESSOR_INTEL_486     = 486;
 
3554
  {$EXTERNALSYM PROCESSOR_INTEL_486}
 
3555
  PROCESSOR_INTEL_PENTIUM = 586;
 
3556
  {$EXTERNALSYM PROCESSOR_INTEL_PENTIUM}
 
3557
  PROCESSOR_INTEL_IA64    = 2200;
 
3558
  {$EXTERNALSYM PROCESSOR_INTEL_IA64}
 
3559
  PROCESSOR_AMD_X8664     = 8664;
 
3560
  {$EXTERNALSYM PROCESSOR_AMD_X8664}
 
3561
  PROCESSOR_MIPS_R4000    = 4000; // incl R4101 & R3910 for Windows CE
 
3562
  {$EXTERNALSYM PROCESSOR_MIPS_R4000}
 
3563
  PROCESSOR_ALPHA_21064   = 21064;
 
3564
  {$EXTERNALSYM PROCESSOR_ALPHA_21064}
 
3565
  PROCESSOR_PPC_601       = 601;
 
3566
  {$EXTERNALSYM PROCESSOR_PPC_601}
 
3567
  PROCESSOR_PPC_603       = 603;
 
3568
  {$EXTERNALSYM PROCESSOR_PPC_603}
 
3569
  PROCESSOR_PPC_604       = 604;
 
3570
  {$EXTERNALSYM PROCESSOR_PPC_604}
 
3571
  PROCESSOR_PPC_620       = 620;
 
3572
  {$EXTERNALSYM PROCESSOR_PPC_620}
 
3573
  PROCESSOR_HITACHI_SH3   = 10003; // Windows CE
 
3574
  {$EXTERNALSYM PROCESSOR_HITACHI_SH3}
 
3575
  PROCESSOR_HITACHI_SH3E  = 10004; // Windows CE
 
3576
  {$EXTERNALSYM PROCESSOR_HITACHI_SH3E}
 
3577
  PROCESSOR_HITACHI_SH4   = 10005; // Windows CE
 
3578
  {$EXTERNALSYM PROCESSOR_HITACHI_SH4}
 
3579
  PROCESSOR_MOTOROLA_821  = 821; // Windows CE
 
3580
  {$EXTERNALSYM PROCESSOR_MOTOROLA_821}
 
3581
  PROCESSOR_SHx_SH3       = 103; // Windows CE
 
3582
  {$EXTERNALSYM PROCESSOR_SHx_SH3}
 
3583
  PROCESSOR_SHx_SH4       = 104; // Windows CE
 
3584
  {$EXTERNALSYM PROCESSOR_SHx_SH4}
 
3585
  PROCESSOR_STRONGARM     = 2577; // Windows CE - 0xA11
 
3586
  {$EXTERNALSYM PROCESSOR_STRONGARM}
 
3587
  PROCESSOR_ARM720        = 1824; // Windows CE - 0x720
 
3588
  {$EXTERNALSYM PROCESSOR_ARM720}
 
3589
  PROCESSOR_ARM820        = 2080; // Windows CE - 0x820
 
3590
  {$EXTERNALSYM PROCESSOR_ARM820}
 
3591
  PROCESSOR_ARM920        = 2336; // Windows CE - 0x920
 
3592
  {$EXTERNALSYM PROCESSOR_ARM920}
 
3593
  PROCESSOR_ARM_7TDMI     = 70001; // Windows CE
 
3594
  {$EXTERNALSYM PROCESSOR_ARM_7TDMI}
 
3595
  PROCESSOR_OPTIL         = $494f; // MSIL
 
3596
  {$EXTERNALSYM PROCESSOR_OPTIL}
 
3597
 
 
3598
  PROCESSOR_ARCHITECTURE_INTEL   = 0;
 
3599
  {$EXTERNALSYM PROCESSOR_ARCHITECTURE_INTEL}
 
3600
  PROCESSOR_ARCHITECTURE_MIPS    = 1;
 
3601
  {$EXTERNALSYM PROCESSOR_ARCHITECTURE_MIPS}
 
3602
  PROCESSOR_ARCHITECTURE_ALPHA   = 2;
 
3603
  {$EXTERNALSYM PROCESSOR_ARCHITECTURE_ALPHA}
 
3604
  PROCESSOR_ARCHITECTURE_PPC     = 3;
 
3605
  {$EXTERNALSYM PROCESSOR_ARCHITECTURE_PPC}
 
3606
  PROCESSOR_ARCHITECTURE_SHX     = 4;
 
3607
  {$EXTERNALSYM PROCESSOR_ARCHITECTURE_SHX}
 
3608
  PROCESSOR_ARCHITECTURE_ARM     = 5;
 
3609
  {$EXTERNALSYM PROCESSOR_ARCHITECTURE_ARM}
 
3610
  PROCESSOR_ARCHITECTURE_IA64    = 6;
 
3611
  {$EXTERNALSYM PROCESSOR_ARCHITECTURE_IA64}
 
3612
  PROCESSOR_ARCHITECTURE_ALPHA64 = 7;
 
3613
  {$EXTERNALSYM PROCESSOR_ARCHITECTURE_ALPHA64}
 
3614
  PROCESSOR_ARCHITECTURE_MSIL    = 8;
 
3615
  {$EXTERNALSYM PROCESSOR_ARCHITECTURE_MSIL}
 
3616
  PROCESSOR_ARCHITECTURE_AMD64         = 9;
 
3617
  {$EXTERNALSYM PROCESSOR_ARCHITECTURE_AMD64}
 
3618
  PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 = 10;
 
3619
  {$EXTERNALSYM PROCESSOR_ARCHITECTURE_IA32_ON_WIN64}
 
3620
 
 
3621
  PROCESSOR_ARCHITECTURE_UNKNOWN = $FFFF;
 
3622
  {$EXTERNALSYM PROCESSOR_ARCHITECTURE_UNKNOWN}
 
3623
 
 
3624
  PF_FLOATING_POINT_PRECISION_ERRATA = 0;
 
3625
  {$EXTERNALSYM PF_FLOATING_POINT_PRECISION_ERRATA}
 
3626
  PF_FLOATING_POINT_EMULATED         = 1;
 
3627
  {$EXTERNALSYM PF_FLOATING_POINT_EMULATED}
 
3628
  PF_COMPARE_EXCHANGE_DOUBLE         = 2;
 
3629
  {$EXTERNALSYM PF_COMPARE_EXCHANGE_DOUBLE}
 
3630
  PF_MMX_INSTRUCTIONS_AVAILABLE      = 3;
 
3631
  {$EXTERNALSYM PF_MMX_INSTRUCTIONS_AVAILABLE}
 
3632
  PF_PPC_MOVEMEM_64BIT_OK            = 4;
 
3633
  {$EXTERNALSYM PF_PPC_MOVEMEM_64BIT_OK}
 
3634
  PF_ALPHA_BYTE_INSTRUCTIONS         = 5;
 
3635
  {$EXTERNALSYM PF_ALPHA_BYTE_INSTRUCTIONS}
 
3636
  PF_XMMI_INSTRUCTIONS_AVAILABLE     = 6;
 
3637
  {$EXTERNALSYM PF_XMMI_INSTRUCTIONS_AVAILABLE}
 
3638
  PF_3DNOW_INSTRUCTIONS_AVAILABLE    = 7;
 
3639
  {$EXTERNALSYM PF_3DNOW_INSTRUCTIONS_AVAILABLE}
 
3640
  PF_RDTSC_INSTRUCTION_AVAILABLE     = 8;
 
3641
  {$EXTERNALSYM PF_RDTSC_INSTRUCTION_AVAILABLE}
 
3642
  PF_PAE_ENABLED                     = 9;
 
3643
  {$EXTERNALSYM PF_PAE_ENABLED}
 
3644
  PF_XMMI64_INSTRUCTIONS_AVAILABLE   = 10;
 
3645
  {$EXTERNALSYM PF_XMMI64_INSTRUCTIONS_AVAILABLE}
 
3646
 
 
3647
type
 
3648
  PMEMORY_BASIC_INFORMATION = ^MEMORY_BASIC_INFORMATION;
 
3649
  {$EXTERNALSYM PMEMORY_BASIC_INFORMATION}
 
3650
  _MEMORY_BASIC_INFORMATION = record
 
3651
    BaseAddress: Pointer;
 
3652
    AllocationBase: Pointer;
 
3653
    AllocationProtect: DWORD;
 
3654
    RegionSize: SIZE_T;
 
3655
    State: DWORD;
 
3656
    Protect: DWORD;
 
3657
    Type_: DWORD;
 
3658
  end;
 
3659
  {$EXTERNALSYM _MEMORY_BASIC_INFORMATION}
 
3660
  MEMORY_BASIC_INFORMATION = _MEMORY_BASIC_INFORMATION;
 
3661
  {$EXTERNALSYM MEMORY_BASIC_INFORMATION}
 
3662
  TMemoryBasicInformation = MEMORY_BASIC_INFORMATION;
 
3663
  PMemoryBasicInformation = PMEMORY_BASIC_INFORMATION;
 
3664
 
 
3665
  PMEMORY_BASIC_INFORMATION32 = ^MEMORY_BASIC_INFORMATION32;
 
3666
  {$EXTERNALSYM PMEMORY_BASIC_INFORMATION32}
 
3667
  _MEMORY_BASIC_INFORMATION32 = record
 
3668
    BaseAddress: DWORD;
 
3669
    AllocationBase: DWORD;
 
3670
    AllocationProtect: DWORD;
 
3671
    RegionSize: DWORD;
 
3672
    State: DWORD;
 
3673
    Protect: DWORD;
 
3674
    Type_: DWORD;
 
3675
  end;
 
3676
  {$EXTERNALSYM _MEMORY_BASIC_INFORMATION32}
 
3677
  MEMORY_BASIC_INFORMATION32 = _MEMORY_BASIC_INFORMATION32;
 
3678
  {$EXTERNALSYM MEMORY_BASIC_INFORMATION32}
 
3679
  TMemoryBasicInformation32 = MEMORY_BASIC_INFORMATION32;
 
3680
  PMemoryBasicInformation32 = PMEMORY_BASIC_INFORMATION32;
 
3681
 
 
3682
  PMEMORY_BASIC_INFORMATION64 = ^MEMORY_BASIC_INFORMATION64;
 
3683
  {$EXTERNALSYM PMEMORY_BASIC_INFORMATION64}
 
3684
  _MEMORY_BASIC_INFORMATION64 = record
 
3685
    BaseAddress: ULONGLONG;
 
3686
    AllocationBase: ULONGLONG;
 
3687
    AllocationProtect: DWORD;
 
3688
    __alignment1: DWORD;
 
3689
    RegionSize: ULONGLONG;
 
3690
    State: DWORD;
 
3691
    Protect: DWORD;
 
3692
    Type_: DWORD;
 
3693
    __alignment2: DWORD;
 
3694
  end;
 
3695
  {$EXTERNALSYM _MEMORY_BASIC_INFORMATION64}
 
3696
  MEMORY_BASIC_INFORMATION64 = _MEMORY_BASIC_INFORMATION64;
 
3697
  {$EXTERNALSYM MEMORY_BASIC_INFORMATION64}
 
3698
  TMemoryBasicInformation64 = MEMORY_BASIC_INFORMATION64;
 
3699
  PMemoryBasicInformation64 = PMEMORY_BASIC_INFORMATION64;
 
3700
 
 
3701
const
 
3702
  SECTION_QUERY       = $0001;
 
3703
  {$EXTERNALSYM SECTION_QUERY}
 
3704
  SECTION_MAP_WRITE   = $0002;
 
3705
  {$EXTERNALSYM SECTION_MAP_WRITE}
 
3706
  SECTION_MAP_READ    = $0004;
 
3707
  {$EXTERNALSYM SECTION_MAP_READ}
 
3708
  SECTION_MAP_EXECUTE = $0008;
 
3709
  {$EXTERNALSYM SECTION_MAP_EXECUTE}
 
3710
  SECTION_EXTEND_SIZE = $0010;
 
3711
  {$EXTERNALSYM SECTION_EXTEND_SIZE}
 
3712
 
 
3713
  SECTION_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED or SECTION_QUERY or
 
3714
    SECTION_MAP_WRITE or SECTION_MAP_READ or SECTION_MAP_EXECUTE or
 
3715
    SECTION_EXTEND_SIZE);
 
3716
  {$EXTERNALSYM SECTION_ALL_ACCESS}
 
3717
 
 
3718
  PAGE_NOACCESS          = $01;
 
3719
  {$EXTERNALSYM PAGE_NOACCESS}
 
3720
  PAGE_READONLY          = $02;
 
3721
  {$EXTERNALSYM PAGE_READONLY}
 
3722
  PAGE_READWRITE         = $04;
 
3723
  {$EXTERNALSYM PAGE_READWRITE}
 
3724
  PAGE_WRITECOPY         = $08;
 
3725
  {$EXTERNALSYM PAGE_WRITECOPY}
 
3726
  PAGE_EXECUTE           = $10;
 
3727
  {$EXTERNALSYM PAGE_EXECUTE}
 
3728
  PAGE_EXECUTE_READ      = $20;
 
3729
  {$EXTERNALSYM PAGE_EXECUTE_READ}
 
3730
  PAGE_EXECUTE_READWRITE = $40;
 
3731
  {$EXTERNALSYM PAGE_EXECUTE_READWRITE}
 
3732
  PAGE_EXECUTE_WRITECOPY = $80;
 
3733
  {$EXTERNALSYM PAGE_EXECUTE_WRITECOPY}
 
3734
  PAGE_GUARD             = $100;
 
3735
  {$EXTERNALSYM PAGE_GUARD}
 
3736
  PAGE_NOCACHE           = $200;
 
3737
  {$EXTERNALSYM PAGE_NOCACHE}
 
3738
  PAGE_WRITECOMBINE      = $400;
 
3739
  {$EXTERNALSYM PAGE_WRITECOMBINE}
 
3740
  MEM_COMMIT             = $1000;
 
3741
  {$EXTERNALSYM MEM_COMMIT}
 
3742
  MEM_RESERVE            = $2000;
 
3743
  {$EXTERNALSYM MEM_RESERVE}
 
3744
  MEM_DECOMMIT           = $4000;
 
3745
  {$EXTERNALSYM MEM_DECOMMIT}
 
3746
  MEM_RELEASE            = $8000;
 
3747
  {$EXTERNALSYM MEM_RELEASE}
 
3748
  MEM_FREE               = $10000;
 
3749
  {$EXTERNALSYM MEM_FREE}
 
3750
  MEM_PRIVATE            = $20000;
 
3751
  {$EXTERNALSYM MEM_PRIVATE}
 
3752
  MEM_MAPPED             = $40000;
 
3753
  {$EXTERNALSYM MEM_MAPPED}
 
3754
  MEM_RESET              = $80000;
 
3755
  {$EXTERNALSYM MEM_RESET}
 
3756
  MEM_TOP_DOWN           = $100000;
 
3757
  {$EXTERNALSYM MEM_TOP_DOWN}
 
3758
  MEM_WRITE_WATCH        = $200000;
 
3759
  {$EXTERNALSYM MEM_WRITE_WATCH}
 
3760
  MEM_PHYSICAL           = $400000;
 
3761
  {$EXTERNALSYM MEM_PHYSICAL}
 
3762
  MEM_LARGE_PAGES        = $20000000;
 
3763
  {$EXTERNALSYM MEM_LARGE_PAGES}
 
3764
  MEM_4MB_PAGES          = DWORD($80000000);
 
3765
  {$EXTERNALSYM MEM_4MB_PAGES}
 
3766
  SEC_FILE               = $800000;
 
3767
  {$EXTERNALSYM SEC_FILE}
 
3768
  SEC_IMAGE              = $1000000;
 
3769
  {$EXTERNALSYM SEC_IMAGE}
 
3770
  SEC_RESERVE            = $4000000;
 
3771
  {$EXTERNALSYM SEC_RESERVE}
 
3772
  SEC_COMMIT             = DWORD($8000000);
 
3773
  {$EXTERNALSYM SEC_COMMIT}
 
3774
  SEC_NOCACHE            = $10000000;
 
3775
  {$EXTERNALSYM SEC_NOCACHE}
 
3776
  MEM_IMAGE              = SEC_IMAGE;
 
3777
  {$EXTERNALSYM MEM_IMAGE}
 
3778
  WRITE_WATCH_FLAG_RESET = $01;
 
3779
  {$EXTERNALSYM WRITE_WATCH_FLAG_RESET}
 
3780
 
 
3781
//
 
3782
// Define access rights to files and directories
 
3783
//
 
3784
 
 
3785
//
 
3786
// The FILE_READ_DATA and FILE_WRITE_DATA constants are also defined in
 
3787
// devioctl.h as FILE_READ_ACCESS and FILE_WRITE_ACCESS. The values for these
 
3788
// constants *MUST* always be in sync.
 
3789
// The values are redefined in devioctl.h because they must be available to
 
3790
// both DOS and NT.
 
3791
//
 
3792
 
 
3793
  FILE_READ_DATA            = $0001; // file & pipe
 
3794
  {$EXTERNALSYM FILE_READ_DATA}
 
3795
  FILE_LIST_DIRECTORY       = $0001; // directory
 
3796
  {$EXTERNALSYM FILE_LIST_DIRECTORY}
 
3797
 
 
3798
  FILE_WRITE_DATA           = $0002; // file & pipe
 
3799
  {$EXTERNALSYM FILE_WRITE_DATA}
 
3800
  FILE_ADD_FILE             = $0002; // directory
 
3801
  {$EXTERNALSYM FILE_ADD_FILE}
 
3802
 
 
3803
  FILE_APPEND_DATA          = $0004; // file
 
3804
  {$EXTERNALSYM FILE_APPEND_DATA}
 
3805
  FILE_ADD_SUBDIRECTORY     = $0004; // directory
 
3806
  {$EXTERNALSYM FILE_ADD_SUBDIRECTORY}
 
3807
  FILE_CREATE_PIPE_INSTANCE = $0004; // named pipe
 
3808
  {$EXTERNALSYM FILE_CREATE_PIPE_INSTANCE}
 
3809
 
 
3810
  FILE_READ_EA = $0008; // file & directory
 
3811
  {$EXTERNALSYM FILE_READ_EA}
 
3812
 
 
3813
  FILE_WRITE_EA = $0010; // file & directory
 
3814
  {$EXTERNALSYM FILE_WRITE_EA}
 
3815
 
 
3816
  FILE_EXECUTE = $0020; // file
 
3817
  {$EXTERNALSYM FILE_EXECUTE}
 
3818
  FILE_TRAVERSE = $0020; // directory
 
3819
  {$EXTERNALSYM FILE_TRAVERSE}
 
3820
 
 
3821
  FILE_DELETE_CHILD = $0040; // directory
 
3822
  {$EXTERNALSYM FILE_DELETE_CHILD}
 
3823
 
 
3824
  FILE_READ_ATTRIBUTES = $0080; // all
 
3825
  {$EXTERNALSYM FILE_READ_ATTRIBUTES}
 
3826
 
 
3827
  FILE_WRITE_ATTRIBUTES = $0100; // all
 
3828
  {$EXTERNALSYM FILE_WRITE_ATTRIBUTES}
 
3829
 
 
3830
  FILE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $1FF;
 
3831
  {$EXTERNALSYM FILE_ALL_ACCESS}
 
3832
 
 
3833
  FILE_GENERIC_READ = (STANDARD_RIGHTS_READ or FILE_READ_DATA or
 
3834
    FILE_READ_ATTRIBUTES or FILE_READ_EA or SYNCHRONIZE);
 
3835
  {$EXTERNALSYM FILE_GENERIC_READ}
 
3836
 
 
3837
  FILE_GENERIC_WRITE = (STANDARD_RIGHTS_WRITE or FILE_WRITE_DATA or
 
3838
    FILE_WRITE_ATTRIBUTES or FILE_WRITE_EA or FILE_APPEND_DATA or SYNCHRONIZE);
 
3839
  {$EXTERNALSYM FILE_GENERIC_WRITE}
 
3840
 
 
3841
  FILE_GENERIC_EXECUTE = (STANDARD_RIGHTS_EXECUTE or FILE_READ_ATTRIBUTES or
 
3842
    FILE_EXECUTE or SYNCHRONIZE);
 
3843
  {$EXTERNALSYM FILE_GENERIC_EXECUTE}
 
3844
 
 
3845
  FILE_SHARE_READ                    = $00000001;
 
3846
  {$EXTERNALSYM FILE_SHARE_READ}
 
3847
  FILE_SHARE_WRITE                   = $00000002;
 
3848
  {$EXTERNALSYM FILE_SHARE_WRITE}
 
3849
  FILE_SHARE_DELETE                  = $00000004;
 
3850
  {$EXTERNALSYM FILE_SHARE_DELETE}
 
3851
  FILE_ATTRIBUTE_READONLY            = $00000001;
 
3852
  {$EXTERNALSYM FILE_ATTRIBUTE_READONLY}
 
3853
  FILE_ATTRIBUTE_HIDDEN              = $00000002;
 
3854
  {$EXTERNALSYM FILE_ATTRIBUTE_HIDDEN}
 
3855
  FILE_ATTRIBUTE_SYSTEM              = $00000004;
 
3856
  {$EXTERNALSYM FILE_ATTRIBUTE_SYSTEM}
 
3857
  FILE_ATTRIBUTE_DIRECTORY           = $00000010;
 
3858
  {$EXTERNALSYM FILE_ATTRIBUTE_DIRECTORY}
 
3859
  FILE_ATTRIBUTE_ARCHIVE             = $00000020;
 
3860
  {$EXTERNALSYM FILE_ATTRIBUTE_ARCHIVE}
 
3861
  FILE_ATTRIBUTE_DEVICE              = $00000040;
 
3862
  {$EXTERNALSYM FILE_ATTRIBUTE_DEVICE}
 
3863
  FILE_ATTRIBUTE_NORMAL              = $00000080;
 
3864
  {$EXTERNALSYM FILE_ATTRIBUTE_NORMAL}
 
3865
  FILE_ATTRIBUTE_TEMPORARY           = $00000100;
 
3866
  {$EXTERNALSYM FILE_ATTRIBUTE_TEMPORARY}
 
3867
  FILE_ATTRIBUTE_SPARSE_FILE         = $00000200;
 
3868
  {$EXTERNALSYM FILE_ATTRIBUTE_SPARSE_FILE}
 
3869
  FILE_ATTRIBUTE_REPARSE_POINT       = $00000400;
 
3870
  {$EXTERNALSYM FILE_ATTRIBUTE_REPARSE_POINT}
 
3871
  FILE_ATTRIBUTE_COMPRESSED          = $00000800;
 
3872
  {$EXTERNALSYM FILE_ATTRIBUTE_COMPRESSED}
 
3873
  FILE_ATTRIBUTE_OFFLINE             = $00001000;
 
3874
  {$EXTERNALSYM FILE_ATTRIBUTE_OFFLINE}
 
3875
  FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = $00002000;
 
3876
  {$EXTERNALSYM FILE_ATTRIBUTE_NOT_CONTENT_INDEXED}
 
3877
  FILE_ATTRIBUTE_ENCRYPTED           = $00004000;
 
3878
  {$EXTERNALSYM FILE_ATTRIBUTE_ENCRYPTED}
 
3879
  FILE_NOTIFY_CHANGE_FILE_NAME       = $00000001;
 
3880
  {$EXTERNALSYM FILE_NOTIFY_CHANGE_FILE_NAME}
 
3881
  FILE_NOTIFY_CHANGE_DIR_NAME        = $00000002;
 
3882
  {$EXTERNALSYM FILE_NOTIFY_CHANGE_DIR_NAME}
 
3883
  FILE_NOTIFY_CHANGE_ATTRIBUTES      = $00000004;
 
3884
  {$EXTERNALSYM FILE_NOTIFY_CHANGE_ATTRIBUTES}
 
3885
  FILE_NOTIFY_CHANGE_SIZE            = $00000008;
 
3886
  {$EXTERNALSYM FILE_NOTIFY_CHANGE_SIZE}
 
3887
  FILE_NOTIFY_CHANGE_LAST_WRITE      = $00000010;
 
3888
  {$EXTERNALSYM FILE_NOTIFY_CHANGE_LAST_WRITE}
 
3889
  FILE_NOTIFY_CHANGE_LAST_ACCESS     = $00000020;
 
3890
  {$EXTERNALSYM FILE_NOTIFY_CHANGE_LAST_ACCESS}
 
3891
  FILE_NOTIFY_CHANGE_CREATION        = $00000040;
 
3892
  {$EXTERNALSYM FILE_NOTIFY_CHANGE_CREATION}
 
3893
  FILE_NOTIFY_CHANGE_SECURITY        = $00000100;
 
3894
  {$EXTERNALSYM FILE_NOTIFY_CHANGE_SECURITY}
 
3895
  FILE_ACTION_ADDED                  = $00000001;
 
3896
  {$EXTERNALSYM FILE_ACTION_ADDED}
 
3897
  FILE_ACTION_REMOVED                = $00000002;
 
3898
  {$EXTERNALSYM FILE_ACTION_REMOVED}
 
3899
  FILE_ACTION_MODIFIED               = $00000003;
 
3900
  {$EXTERNALSYM FILE_ACTION_MODIFIED}
 
3901
  FILE_ACTION_RENAMED_OLD_NAME       = $00000004;
 
3902
  {$EXTERNALSYM FILE_ACTION_RENAMED_OLD_NAME}
 
3903
  FILE_ACTION_RENAMED_NEW_NAME       = $00000005;
 
3904
  {$EXTERNALSYM FILE_ACTION_RENAMED_NEW_NAME}
 
3905
  MAILSLOT_NO_MESSAGE                = DWORD(-1);
 
3906
  {$EXTERNALSYM MAILSLOT_NO_MESSAGE}
 
3907
  MAILSLOT_WAIT_FOREVER              = DWORD(-1);
 
3908
  {$EXTERNALSYM MAILSLOT_WAIT_FOREVER}
 
3909
  FILE_CASE_SENSITIVE_SEARCH         = $00000001;
 
3910
  {$EXTERNALSYM FILE_CASE_SENSITIVE_SEARCH}
 
3911
  FILE_CASE_PRESERVED_NAMES          = $00000002;
 
3912
  {$EXTERNALSYM FILE_CASE_PRESERVED_NAMES}
 
3913
  FILE_UNICODE_ON_DISK               = $00000004;
 
3914
  {$EXTERNALSYM FILE_UNICODE_ON_DISK}
 
3915
  FILE_PERSISTENT_ACLS               = $00000008;
 
3916
  {$EXTERNALSYM FILE_PERSISTENT_ACLS}
 
3917
  FILE_FILE_COMPRESSION              = $00000010;
 
3918
  {$EXTERNALSYM FILE_FILE_COMPRESSION}
 
3919
  FILE_VOLUME_QUOTAS                 = $00000020;
 
3920
  {$EXTERNALSYM FILE_VOLUME_QUOTAS}
 
3921
  FILE_SUPPORTS_SPARSE_FILES         = $00000040;
 
3922
  {$EXTERNALSYM FILE_SUPPORTS_SPARSE_FILES}
 
3923
  FILE_SUPPORTS_REPARSE_POINTS       = $00000080;
 
3924
  {$EXTERNALSYM FILE_SUPPORTS_REPARSE_POINTS}
 
3925
  FILE_SUPPORTS_REMOTE_STORAGE       = $00000100;
 
3926
  {$EXTERNALSYM FILE_SUPPORTS_REMOTE_STORAGE}
 
3927
  FILE_VOLUME_IS_COMPRESSED          = $00008000;
 
3928
  {$EXTERNALSYM FILE_VOLUME_IS_COMPRESSED}
 
3929
  FILE_SUPPORTS_OBJECT_IDS           = $00010000;
 
3930
  {$EXTERNALSYM FILE_SUPPORTS_OBJECT_IDS}
 
3931
  FILE_SUPPORTS_ENCRYPTION           = $00020000;
 
3932
  {$EXTERNALSYM FILE_SUPPORTS_ENCRYPTION}
 
3933
  FILE_NAMED_STREAMS                 = $00040000;
 
3934
  {$EXTERNALSYM FILE_NAMED_STREAMS}
 
3935
  FILE_READ_ONLY_VOLUME              = $00080000;
 
3936
  {$EXTERNALSYM FILE_READ_ONLY_VOLUME}
 
3937
 
 
3938
//
 
3939
// Define the file notification information structure
 
3940
//
 
3941
 
 
3942
type
 
3943
  PFILE_NOTIFY_INFORMATION = ^FILE_NOTIFY_INFORMATION;
 
3944
  {$EXTERNALSYM PFILE_NOTIFY_INFORMATION}
 
3945
  _FILE_NOTIFY_INFORMATION = record
 
3946
    NextEntryOffset: DWORD;
 
3947
    Action: DWORD;
 
3948
    FileNameLength: DWORD;
 
3949
    FileName: array [0..0] of WCHAR;
 
3950
  end;
 
3951
  {$EXTERNALSYM _FILE_NOTIFY_INFORMATION}
 
3952
  FILE_NOTIFY_INFORMATION = _FILE_NOTIFY_INFORMATION;
 
3953
  {$EXTERNALSYM FILE_NOTIFY_INFORMATION}
 
3954
  TFileNotifyInformation = FILE_NOTIFY_INFORMATION;
 
3955
  PFileNotifyInformation = PFILE_NOTIFY_INFORMATION;
 
3956
 
 
3957
//
 
3958
// Define segement buffer structure for scatter/gather read/write.
 
3959
//
 
3960
 
 
3961
type
 
3962
  PFILE_SEGMENT_ELEMENT = ^FILE_SEGMENT_ELEMENT;
 
3963
  {$EXTERNALSYM PFILE_SEGMENT_ELEMENT}
 
3964
  _FILE_SEGMENT_ELEMENT = record
 
3965
    case Integer of
 
3966
      0: (Buffer: PVOID64);
 
3967
      1: (Alignment: ULONGLONG);
 
3968
  end;
 
3969
  {$EXTERNALSYM _FILE_SEGMENT_ELEMENT}
 
3970
  FILE_SEGMENT_ELEMENT = _FILE_SEGMENT_ELEMENT;
 
3971
  {$EXTERNALSYM FILE_SEGMENT_ELEMENT}
 
3972
  TFileSegmentElement = FILE_SEGMENT_ELEMENT;
 
3973
  PFileSegmentElement = PFILE_SEGMENT_ELEMENT;
 
3974
 
 
3975
//
 
3976
// The reparse GUID structure is used by all 3rd party layered drivers to
 
3977
// store data in a reparse point. For non-Microsoft tags, The GUID field
 
3978
// cannot be GUID_NULL.
 
3979
// The constraints on reparse tags are defined below.
 
3980
// Microsoft tags can also be used with this format of the reparse point buffer.
 
3981
//
 
3982
  TGenericReparseBuffer = record
 
3983
    DataBuffer: array [0..0] of BYTE;
 
3984
  end;
 
3985
 
 
3986
  PREPARSE_GUID_DATA_BUFFER = ^REPARSE_GUID_DATA_BUFFER;
 
3987
  {$EXTERNALSYM PREPARSE_GUID_DATA_BUFFER}
 
3988
  _REPARSE_GUID_DATA_BUFFER = record
 
3989
    ReparseTag: DWORD;
 
3990
    ReparseDataLength: WORD;
 
3991
    Reserved: WORD;
 
3992
    ReparseGuid: GUID;
 
3993
    GenericReparseBuffer: TGenericReparseBuffer;
 
3994
  end;
 
3995
  {$EXTERNALSYM _REPARSE_GUID_DATA_BUFFER}
 
3996
  REPARSE_GUID_DATA_BUFFER = _REPARSE_GUID_DATA_BUFFER;
 
3997
  {$EXTERNALSYM REPARSE_GUID_DATA_BUFFER}
 
3998
  TReparseGuidDataBuffer = REPARSE_GUID_DATA_BUFFER;
 
3999
  PReparseGuidDataBuffer = PREPARSE_GUID_DATA_BUFFER;
 
4000
 
 
4001
const
 
4002
  REPARSE_GUID_DATA_BUFFER_HEADER_SIZE = 24;
 
4003
  {$EXTERNALSYM REPARSE_GUID_DATA_BUFFER_HEADER_SIZE}
 
4004
//
 
4005
// Maximum allowed size of the reparse data.
 
4006
//
 
4007
 
 
4008
const
 
4009
  MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 16 * 1024;
 
4010
  {$EXTERNALSYM MAXIMUM_REPARSE_DATA_BUFFER_SIZE}
 
4011
 
 
4012
//
 
4013
// Predefined reparse tags.
 
4014
// These tags need to avoid conflicting with IO_REMOUNT defined in ntos\inc\io.h
 
4015
//
 
4016
 
 
4017
  IO_REPARSE_TAG_RESERVED_ZERO = 0;
 
4018
  {$EXTERNALSYM IO_REPARSE_TAG_RESERVED_ZERO}
 
4019
  IO_REPARSE_TAG_RESERVED_ONE  = 1;
 
4020
  {$EXTERNALSYM IO_REPARSE_TAG_RESERVED_ONE}
 
4021
 
 
4022
//
 
4023
// The value of the following constant needs to satisfy the following conditions:
 
4024
//  (1) Be at least as large as the largest of the reserved tags.
 
4025
//  (2) Be strictly smaller than all the tags in use.
 
4026
//
 
4027
 
 
4028
  IO_REPARSE_TAG_RESERVED_RANGE = IO_REPARSE_TAG_RESERVED_ONE;
 
4029
  {$EXTERNALSYM IO_REPARSE_TAG_RESERVED_RANGE}
 
4030
 
 
4031
//
 
4032
// The reparse tags are a DWORD. The 32 bits are laid out as follows:
 
4033
//
 
4034
//   3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 
4035
//   1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
 
4036
//  +-+-+-+-+-----------------------+-------------------------------+
 
4037
//  |M|R|N|R|     Reserved bits     |       Reparse Tag Value       |
 
4038
//  +-+-+-+-+-----------------------+-------------------------------+
 
4039
//
 
4040
// M is the Microsoft bit. When set to 1, it denotes a tag owned by Microsoft.
 
4041
//   All ISVs must use a tag with a 0 in this position.
 
4042
//   Note: If a Microsoft tag is used by non-Microsoft software, the
 
4043
//   behavior is not defined.
 
4044
//
 
4045
// R is reserved.  Must be zero for non-Microsoft tags.
 
4046
//
 
4047
// N is name surrogate. When set to 1, the file represents another named
 
4048
//   entity in the system.
 
4049
//
 
4050
// The M and N bits are OR-able.
 
4051
// The following macros check for the M and N bit values:
 
4052
//
 
4053
 
 
4054
//
 
4055
// Macro to determine whether a reparse point tag corresponds to a tag
 
4056
// owned by Microsoft.
 
4057
//
 
4058
 
 
4059
function IsReparseTagMicrosoft(Tag: ULONG): Boolean;
 
4060
{$EXTERNALSYM IsReparseTagMicrosoft}
 
4061
 
 
4062
//
 
4063
// Macro to determine whether a reparse point tag corresponds to a file
 
4064
// that is to be displayed with the slow icon overlay.
 
4065
//
 
4066
 
 
4067
function IsReparseTagHighLatency(Tag: ULONG): Boolean;
 
4068
{$EXTERNALSYM IsReparseTagHighLatency}
 
4069
 
 
4070
//
 
4071
// Macro to determine whether a reparse point tag is a name surrogate
 
4072
//
 
4073
 
 
4074
function IsReparseTagNameSurrogate(Tag: ULONG): Boolean;
 
4075
{$EXTERNALSYM IsReparseTagNameSurrogate}
 
4076
 
 
4077
const
 
4078
  IO_REPARSE_TAG_MOUNT_POINT = DWORD($A0000003);
 
4079
  {$EXTERNALSYM IO_REPARSE_TAG_MOUNT_POINT}
 
4080
  IO_REPARSE_TAG_HSM         = DWORD($C0000004);
 
4081
  {$EXTERNALSYM IO_REPARSE_TAG_HSM}
 
4082
  IO_REPARSE_TAG_SIS         = DWORD($80000007);
 
4083
  {$EXTERNALSYM IO_REPARSE_TAG_SIS}
 
4084
  IO_REPARSE_TAG_DFS         = DWORD($8000000A);
 
4085
  {$EXTERNALSYM IO_REPARSE_TAG_DFS}
 
4086
  IO_REPARSE_TAG_FILTER_MANAGER = DWORD($8000000B);
 
4087
  {$EXTERNALSYM IO_REPARSE_TAG_FILTER_MANAGER}
 
4088
  IO_COMPLETION_MODIFY_STATE = $0002;
 
4089
  {$EXTERNALSYM IO_COMPLETION_MODIFY_STATE}
 
4090
  IO_COMPLETION_ALL_ACCESS   = DWORD(STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $3);
 
4091
  {$EXTERNALSYM IO_COMPLETION_ALL_ACCESS}
 
4092
  DUPLICATE_CLOSE_SOURCE     = $00000001;
 
4093
  {$EXTERNALSYM DUPLICATE_CLOSE_SOURCE}
 
4094
  DUPLICATE_SAME_ACCESS      = $00000002;
 
4095
  {$EXTERNALSYM DUPLICATE_SAME_ACCESS}
 
4096
 
 
4097
type
 
4098
  _SYSTEM_POWER_STATE = (
 
4099
    PowerSystemUnspecified,
 
4100
    PowerSystemWorking,
 
4101
    PowerSystemSleeping1,
 
4102
    PowerSystemSleeping2,
 
4103
    PowerSystemSleeping3,
 
4104
    PowerSystemHibernate,
 
4105
    PowerSystemShutdown,
 
4106
    PowerSystemMaximum);
 
4107
  {$EXTERNALSYM _SYSTEM_POWER_STATE}
 
4108
  SYSTEM_POWER_STATE = _SYSTEM_POWER_STATE;
 
4109
  {$EXTERNALSYM SYSTEM_POWER_STATE}
 
4110
  PSYSTEM_POWER_STATE = ^SYSTEM_POWER_STATE;
 
4111
  {$EXTERNALSYM PSYSTEM_POWER_STATE}
 
4112
  TSystemPowerState = SYSTEM_POWER_STATE;
 
4113
  PSystemPowerState = PSYSTEM_POWER_STATE;
 
4114
 
 
4115
const
 
4116
  POWER_SYSTEM_MAXIMUM = 7;
 
4117
  {$EXTERNALSYM POWER_SYSTEM_MAXIMUM}
 
4118
 
 
4119
type
 
4120
  POWER_ACTION = (
 
4121
    PowerActionNone,
 
4122
    PowerActionReserved,
 
4123
    PowerActionSleep,
 
4124
    PowerActionHibernate,
 
4125
    PowerActionShutdown,
 
4126
    PowerActionShutdownReset,
 
4127
    PowerActionShutdownOff,
 
4128
    PowerActionWarmEject);
 
4129
  {$EXTERNALSYM POWER_ACTION}
 
4130
  PPOWER_ACTION = ^POWER_ACTION;
 
4131
  {$EXTERNALSYM PPOWER_ACTION}
 
4132
  TPowerAction = POWER_ACTION;
 
4133
  PPowerAction = PPOWER_ACTION;
 
4134
 
 
4135
  _DEVICE_POWER_STATE = (
 
4136
    PowerDeviceUnspecified,
 
4137
    PowerDeviceD0,
 
4138
    PowerDeviceD1,
 
4139
    PowerDeviceD2,
 
4140
    PowerDeviceD3,
 
4141
    PowerDeviceMaximum);
 
4142
  {$EXTERNALSYM _DEVICE_POWER_STATE}
 
4143
  DEVICE_POWER_STATE = _DEVICE_POWER_STATE;
 
4144
  {$EXTERNALSYM DEVICE_POWER_STATE}
 
4145
  PDEVICE_POWER_STATE = ^DEVICE_POWER_STATE;
 
4146
  {$EXTERNALSYM PDEVICE_POWER_STATE}
 
4147
  TDevicePowerState = DEVICE_POWER_STATE;
 
4148
  PDevicePowerState = PDEVICE_POWER_STATE;
 
4149
 
 
4150
const
 
4151
  ES_SYSTEM_REQUIRED  = DWORD($00000001);
 
4152
  {$EXTERNALSYM ES_SYSTEM_REQUIRED}
 
4153
  ES_DISPLAY_REQUIRED = DWORD($00000002);
 
4154
  {$EXTERNALSYM ES_DISPLAY_REQUIRED}
 
4155
  ES_USER_PRESENT     = DWORD($00000004);
 
4156
  {$EXTERNALSYM ES_USER_PRESENT}
 
4157
  ES_CONTINUOUS       = DWORD($80000000);
 
4158
  {$EXTERNALSYM ES_CONTINUOUS}
 
4159
 
 
4160
type
 
4161
  EXECUTION_STATE = DWORD;
 
4162
  {$EXTERNALSYM EXECUTION_STATE}
 
4163
 
 
4164
  LATENCY_TIME = (LT_DONT_CARE, LT_LOWEST_LATENCY);
 
4165
  {$EXTERNALSYM LATENCY_TIME}
 
4166
  TLatencyTime = LATENCY_TIME;
 
4167
 
 
4168
//-----------------------------------------------------------------------------
 
4169
// Device Power Information
 
4170
// Accessable via CM_Get_DevInst_Registry_Property_Ex(CM_DRP_DEVICE_POWER_DATA)
 
4171
//-----------------------------------------------------------------------------
 
4172
 
 
4173
const
 
4174
  PDCAP_D0_SUPPORTED           = $00000001;
 
4175
  {$EXTERNALSYM PDCAP_D0_SUPPORTED}
 
4176
  PDCAP_D1_SUPPORTED           = $00000002;
 
4177
  {$EXTERNALSYM PDCAP_D1_SUPPORTED}
 
4178
  PDCAP_D2_SUPPORTED           = $00000004;
 
4179
  {$EXTERNALSYM PDCAP_D2_SUPPORTED}
 
4180
  PDCAP_D3_SUPPORTED           = $00000008;
 
4181
  {$EXTERNALSYM PDCAP_D3_SUPPORTED}
 
4182
  PDCAP_WAKE_FROM_D0_SUPPORTED = $00000010;
 
4183
  {$EXTERNALSYM PDCAP_WAKE_FROM_D0_SUPPORTED}
 
4184
  PDCAP_WAKE_FROM_D1_SUPPORTED = $00000020;
 
4185
  {$EXTERNALSYM PDCAP_WAKE_FROM_D1_SUPPORTED}
 
4186
  PDCAP_WAKE_FROM_D2_SUPPORTED = $00000040;
 
4187
  {$EXTERNALSYM PDCAP_WAKE_FROM_D2_SUPPORTED}
 
4188
  PDCAP_WAKE_FROM_D3_SUPPORTED = $00000080;
 
4189
  {$EXTERNALSYM PDCAP_WAKE_FROM_D3_SUPPORTED}
 
4190
  PDCAP_WARM_EJECT_SUPPORTED   = $00000100;
 
4191
  {$EXTERNALSYM PDCAP_WARM_EJECT_SUPPORTED}
 
4192
 
 
4193
type
 
4194
  CM_Power_Data_s = record
 
4195
    PD_Size: DWORD;
 
4196
    PD_MostRecentPowerState: DEVICE_POWER_STATE;
 
4197
    PD_Capabilities: DWORD;
 
4198
    PD_D1Latency: DWORD;
 
4199
    PD_D2Latency: DWORD;
 
4200
    PD_D3Latency: DWORD;
 
4201
    PD_PowerStateMapping: array [0..POWER_SYSTEM_MAXIMUM - 1] of DEVICE_POWER_STATE;
 
4202
    PD_DeepestSystemWake: SYSTEM_POWER_STATE;
 
4203
  end;
 
4204
  {$EXTERNALSYM CM_Power_Data_s}
 
4205
  CM_POWER_DATA = CM_Power_Data_s;
 
4206
  {$EXTERNALSYM CM_POWER_DATA}
 
4207
  PCM_POWER_DATA = ^CM_POWER_DATA;
 
4208
  {$EXTERNALSYM PCM_POWER_DATA}
 
4209
  TCmPowerData = CM_POWER_DATA;
 
4210
  PCmPowerData = PCM_POWER_DATA;
 
4211
 
 
4212
  POWER_INFORMATION_LEVEL = (
 
4213
    SystemPowerPolicyAc,
 
4214
    SystemPowerPolicyDc,
 
4215
    VerifySystemPolicyAc,
 
4216
    VerifySystemPolicyDc,
 
4217
    SystemPowerCapabilities,
 
4218
    SystemBatteryState,
 
4219
    SystemPowerStateHandler,
 
4220
    ProcessorStateHandler,
 
4221
    SystemPowerPolicyCurrent,
 
4222
    AdministratorPowerPolicy,
 
4223
    SystemReserveHiberFile,
 
4224
    ProcessorInformation,
 
4225
    SystemPowerInformation,
 
4226
    ProcessorStateHandler2,
 
4227
    LastWakeTime,                                   // Compare with KeQueryInterruptTime()
 
4228
    LastSleepTime,                                  // Compare with KeQueryInterruptTime()
 
4229
    SystemExecutionState,
 
4230
    SystemPowerStateNotifyHandler,
 
4231
    ProcessorPowerPolicyAc,
 
4232
    ProcessorPowerPolicyDc,
 
4233
    VerifyProcessorPowerPolicyAc,
 
4234
    VerifyProcessorPowerPolicyDc,
 
4235
    ProcessorPowerPolicyCurrent,
 
4236
    SystemPowerStateLogging,
 
4237
    SystemPowerLoggingEntry);
 
4238
  {$EXTERNALSYM POWER_INFORMATION_LEVEL}
 
4239
  TPowerInformationLevel = POWER_INFORMATION_LEVEL;
 
4240
 
 
4241
//
 
4242
// System power manager capabilities
 
4243
//
 
4244
 
 
4245
  BATTERY_REPORTING_SCALE = record
 
4246
    Granularity: DWORD;
 
4247
    Capacity: DWORD;
 
4248
  end;
 
4249
  {$EXTERNALSYM BATTERY_REPORTING_SCALE}
 
4250
  PBATTERY_REPORTING_SCALE = ^BATTERY_REPORTING_SCALE;
 
4251
  {$EXTERNALSYM PBATTERY_REPORTING_SCALE}
 
4252
  TBatteryReportingScale = BATTERY_REPORTING_SCALE;
 
4253
  PBatteryReportingScale = PBATTERY_REPORTING_SCALE;
 
4254
 
 
4255
// Power Policy Management interfaces
 
4256
//
 
4257
 
 
4258
  PPOWER_ACTION_POLICY = ^POWER_ACTION_POLICY;
 
4259
  {$EXTERNALSYM PPOWER_ACTION_POLICY}
 
4260
  POWER_ACTION_POLICY = record
 
4261
    Action: POWER_ACTION;
 
4262
    Flags: DWORD;
 
4263
    EventCode: DWORD;
 
4264
  end;
 
4265
  {$EXTERNALSYM POWER_ACTION_POLICY}
 
4266
  TPowerActionPolicy = POWER_ACTION_POLICY;
 
4267
  PPowerActionPolicy = PPOWER_ACTION_POLICY;
 
4268
 
 
4269
// POWER_ACTION_POLICY->Flags:
 
4270
 
 
4271
const
 
4272
  POWER_ACTION_QUERY_ALLOWED  = $00000001;
 
4273
  {$EXTERNALSYM POWER_ACTION_QUERY_ALLOWED}
 
4274
  POWER_ACTION_UI_ALLOWED     = $00000002;
 
4275
  {$EXTERNALSYM POWER_ACTION_UI_ALLOWED}
 
4276
  POWER_ACTION_OVERRIDE_APPS  = $00000004;
 
4277
  {$EXTERNALSYM POWER_ACTION_OVERRIDE_APPS}
 
4278
  POWER_ACTION_LIGHTEST_FIRST = $10000000;
 
4279
  {$EXTERNALSYM POWER_ACTION_LIGHTEST_FIRST}
 
4280
  POWER_ACTION_LOCK_CONSOLE   = $20000000;
 
4281
  {$EXTERNALSYM POWER_ACTION_LOCK_CONSOLE}
 
4282
  POWER_ACTION_DISABLE_WAKES  = $40000000;
 
4283
  {$EXTERNALSYM POWER_ACTION_DISABLE_WAKES}
 
4284
  POWER_ACTION_CRITICAL       = DWORD($80000000);
 
4285
  {$EXTERNALSYM POWER_ACTION_CRITICAL}
 
4286
 
 
4287
// POWER_ACTION_POLICY->EventCode flags
 
4288
 
 
4289
  POWER_LEVEL_USER_NOTIFY_TEXT  = $00000001;
 
4290
  {$EXTERNALSYM POWER_LEVEL_USER_NOTIFY_TEXT}
 
4291
  POWER_LEVEL_USER_NOTIFY_SOUND = $00000002;
 
4292
  {$EXTERNALSYM POWER_LEVEL_USER_NOTIFY_SOUND}
 
4293
  POWER_LEVEL_USER_NOTIFY_EXEC  = $00000004;
 
4294
  {$EXTERNALSYM POWER_LEVEL_USER_NOTIFY_EXEC}
 
4295
  POWER_USER_NOTIFY_BUTTON      = $00000008;
 
4296
  {$EXTERNALSYM POWER_USER_NOTIFY_BUTTON}
 
4297
  POWER_USER_NOTIFY_SHUTDOWN    = $00000010;
 
4298
  {$EXTERNALSYM POWER_USER_NOTIFY_SHUTDOWN}
 
4299
  POWER_FORCE_TRIGGER_RESET     = DWORD($80000000);
 
4300
  {$EXTERNALSYM POWER_FORCE_TRIGGER_RESET}
 
4301
 
 
4302
// system battery drain policies
 
4303
 
 
4304
type
 
4305
  PSYSTEM_POWER_LEVEL = ^SYSTEM_POWER_LEVEL;
 
4306
  {$EXTERNALSYM PSYSTEM_POWER_LEVEL}
 
4307
  SYSTEM_POWER_LEVEL = record
 
4308
    Enable: BOOLEAN;
 
4309
    Spare: array [0..3 - 1] of BYTE;
 
4310
    BatteryLevel: DWORD;
 
4311
    PowerPolicy: POWER_ACTION_POLICY;
 
4312
    MinSystemState: SYSTEM_POWER_STATE;
 
4313
  end;
 
4314
  {$EXTERNALSYM SYSTEM_POWER_LEVEL}
 
4315
  TSystemPowerLevel = SYSTEM_POWER_LEVEL;
 
4316
  PSystemPowerLevel = PSYSTEM_POWER_LEVEL;
 
4317
 
 
4318
// Discharge policy constants
 
4319
 
 
4320
const
 
4321
  NUM_DISCHARGE_POLICIES    = 4;
 
4322
  {$EXTERNALSYM NUM_DISCHARGE_POLICIES}
 
4323
  DISCHARGE_POLICY_CRITICAL = 0;
 
4324
  {$EXTERNALSYM DISCHARGE_POLICY_CRITICAL}
 
4325
  DISCHARGE_POLICY_LOW      = 1;
 
4326
  {$EXTERNALSYM DISCHARGE_POLICY_LOW}
 
4327
 
 
4328
//
 
4329
// Throttling policies
 
4330
//
 
4331
 
 
4332
  PO_THROTTLE_NONE     = 0;
 
4333
  {$EXTERNALSYM PO_THROTTLE_NONE}
 
4334
  PO_THROTTLE_CONSTANT = 1;
 
4335
  {$EXTERNALSYM PO_THROTTLE_CONSTANT}
 
4336
  PO_THROTTLE_DEGRADE  = 2;
 
4337
  {$EXTERNALSYM PO_THROTTLE_DEGRADE}
 
4338
  PO_THROTTLE_ADAPTIVE = 3;
 
4339
  {$EXTERNALSYM PO_THROTTLE_ADAPTIVE}
 
4340
  PO_THROTTLE_MAXIMUM  = 4; // not a policy, just a limit
 
4341
  {$EXTERNALSYM PO_THROTTLE_MAXIMUM}
 
4342
 
 
4343
// system power policies
 
4344
 
 
4345
type
 
4346
  PSYSTEM_POWER_POLICY = ^SYSTEM_POWER_POLICY;
 
4347
  {$EXTERNALSYM PSYSTEM_POWER_POLICY}
 
4348
  _SYSTEM_POWER_POLICY = record
 
4349
    Revision: DWORD; // 1
 
4350
    // events
 
4351
    PowerButton: POWER_ACTION_POLICY;
 
4352
    SleepButton: POWER_ACTION_POLICY;
 
4353
    LidClose: POWER_ACTION_POLICY;
 
4354
    LidOpenWake: SYSTEM_POWER_STATE;
 
4355
    Reserved: DWORD;
 
4356
    // "system idle" detection
 
4357
    Idle: POWER_ACTION_POLICY;
 
4358
    IdleTimeout: DWORD;
 
4359
    IdleSensitivity: BYTE;
 
4360
    // dynamic throttling policy
 
4361
    //      PO_THROTTLE_NONE, PO_THROTTLE_CONSTANT, PO_THROTTLE_DEGRADE, or PO_THROTTLE_ADAPTIVE
 
4362
    DynamicThrottle: BYTE;
 
4363
    Spare2: array [0..1] of BYTE;
 
4364
    // meaning of power action "sleep"
 
4365
    MinSleep: SYSTEM_POWER_STATE;
 
4366
    MaxSleep: SYSTEM_POWER_STATE;
 
4367
    ReducedLatencySleep: SYSTEM_POWER_STATE;
 
4368
    WinLogonFlags: DWORD;
 
4369
    // parameters for dozing
 
4370
    Spare3: DWORD;
 
4371
    DozeS4Timeout: DWORD;
 
4372
    // battery policies
 
4373
    BroadcastCapacityResolution: DWORD;
 
4374
    DischargePolicy: array [0..NUM_DISCHARGE_POLICIES - 1] of SYSTEM_POWER_LEVEL;
 
4375
    // video policies
 
4376
    VideoTimeout: DWORD;
 
4377
    VideoDimDisplay: BOOLEAN;
 
4378
    VideoReserved: array [0..2] of DWORD;
 
4379
    // hard disk policies
 
4380
    SpindownTimeout: DWORD;
 
4381
    // processor policies
 
4382
    OptimizeForPower: LongBool;
 
4383
    FanThrottleTolerance: BYTE;
 
4384
    ForcedThrottle: BYTE;
 
4385
    MinThrottle: BYTE;
 
4386
    OverThrottled: POWER_ACTION_POLICY;
 
4387
  end;
 
4388
  {$EXTERNALSYM _SYSTEM_POWER_POLICY}
 
4389
  SYSTEM_POWER_POLICY = _SYSTEM_POWER_POLICY;
 
4390
  {$EXTERNALSYM SYSTEM_POWER_POLICY}
 
4391
  TSystemPowerPolicy = SYSTEM_POWER_POLICY;
 
4392
  PSystemPowerPolicy = PSYSTEM_POWER_POLICY;
 
4393
 
 
4394
// processor power policy state
 
4395
 
 
4396
  PPROCESSOR_POWER_POLICY_INFO = ^PROCESSOR_POWER_POLICY_INFO;
 
4397
  {$EXTERNALSYM PPROCESSOR_POWER_POLICY_INFO}
 
4398
  _PROCESSOR_POWER_POLICY_INFO = record
 
4399
    // Time based information (will be converted to kernel units)
 
4400
    TimeCheck: DWORD; // in US
 
4401
    DemoteLimit: DWORD; // in US
 
4402
    PromoteLimit: DWORD; // in US
 
4403
    // Percentage based information
 
4404
    DemotePercent: BYTE;
 
4405
    PromotePercent: BYTE;
 
4406
    Spare: array [0..1] of BYTE;
 
4407
    // Flags
 
4408
    Flags: DWORD;
 
4409
    //DWORD                   AllowDemotion:1;
 
4410
    //DWORD                   AllowPromotion:1;
 
4411
    //DWORD                   Reserved:30;
 
4412
  end;
 
4413
  {$EXTERNALSYM _PROCESSOR_POWER_POLICY_INFO}
 
4414
  PROCESSOR_POWER_POLICY_INFO = _PROCESSOR_POWER_POLICY_INFO;
 
4415
  {$EXTERNALSYM PROCESSOR_POWER_POLICY_INFO}
 
4416
  TProcessorPowerPolicyInfo = PROCESSOR_POWER_POLICY_INFO;
 
4417
  PProcessorPowerPolicyInfo = PPROCESSOR_POWER_POLICY_INFO;
 
4418
 
 
4419
// processor power policy
 
4420
 
 
4421
  PPROCESSOR_POWER_POLICY = ^PROCESSOR_POWER_POLICY;
 
4422
  {$EXTERNALSYM PPROCESSOR_POWER_POLICY}
 
4423
  _PROCESSOR_POWER_POLICY = record
 
4424
    Revision: DWORD; // 1
 
4425
    // Dynamic Throttling Policy
 
4426
    DynamicThrottle: BYTE;
 
4427
    Spare: array [0..2] of BYTE;
 
4428
    // Flags
 
4429
    Reserved: DWORD;
 
4430
    //DWORD                       DisableCStates:1;
 
4431
    //DWORD                       Reserved:31;
 
4432
 
 
4433
    // System policy information
 
4434
    // The Array is last, in case it needs to be grown and the structure
 
4435
    // revision incremented.
 
4436
    PolicyCount: DWORD;
 
4437
    Policy: array [0..2] of PROCESSOR_POWER_POLICY_INFO;
 
4438
  end;
 
4439
  {$EXTERNALSYM _PROCESSOR_POWER_POLICY}
 
4440
  PROCESSOR_POWER_POLICY = _PROCESSOR_POWER_POLICY;
 
4441
  {$EXTERNALSYM PROCESSOR_POWER_POLICY}
 
4442
  TProcessorPowerPolicy = PROCESSOR_POWER_POLICY;
 
4443
  PProcessorPowerPolicy = PPROCESSOR_POWER_POLICY;
 
4444
 
 
4445
// administrator power policy overrides
 
4446
 
 
4447
  PADMINISTRATOR_POWER_POLICY = ^ADMINISTRATOR_POWER_POLICY;
 
4448
  {$EXTERNALSYM PADMINISTRATOR_POWER_POLICY}
 
4449
  _ADMINISTRATOR_POWER_POLICY = record
 
4450
    // meaning of power action "sleep"
 
4451
    MinSleep: SYSTEM_POWER_STATE;
 
4452
    MaxSleep: SYSTEM_POWER_STATE;
 
4453
    // video policies
 
4454
    MinVideoTimeout: DWORD;
 
4455
    MaxVideoTimeout: DWORD;
 
4456
    // disk policies
 
4457
    MinSpindownTimeout: DWORD;
 
4458
    MaxSpindownTimeout: DWORD;
 
4459
  end;
 
4460
  {$EXTERNALSYM _ADMINISTRATOR_POWER_POLICY}
 
4461
  ADMINISTRATOR_POWER_POLICY = _ADMINISTRATOR_POWER_POLICY;
 
4462
  {$EXTERNALSYM ADMINISTRATOR_POWER_POLICY}
 
4463
  TAdministratorPowerPolicy = ADMINISTRATOR_POWER_POLICY;
 
4464
  PAdministratorPowerPolicy = PADMINISTRATOR_POWER_POLICY;
 
4465
 
 
4466
  PSYSTEM_POWER_CAPABILITIES = ^SYSTEM_POWER_CAPABILITIES;
 
4467
  {$EXTERNALSYM PSYSTEM_POWER_CAPABILITIES}
 
4468
  SYSTEM_POWER_CAPABILITIES = record
 
4469
    // Misc supported system features
 
4470
    PowerButtonPresent: BOOLEAN;
 
4471
    SleepButtonPresent: BOOLEAN;
 
4472
    LidPresent: BOOLEAN;
 
4473
    SystemS1: BOOLEAN;
 
4474
    SystemS2: BOOLEAN;
 
4475
    SystemS3: BOOLEAN;
 
4476
    SystemS4: BOOLEAN; // hibernate
 
4477
    SystemS5: BOOLEAN; // off
 
4478
    HiberFilePresent: BOOLEAN;
 
4479
    FullWake: BOOLEAN;
 
4480
    VideoDimPresent: BOOLEAN;
 
4481
    ApmPresent: BOOLEAN;
 
4482
    UpsPresent: BOOLEAN;
 
4483
    // Processors
 
4484
    ThermalControl: BOOLEAN;
 
4485
    ProcessorThrottle: BOOLEAN;
 
4486
    ProcessorMinThrottle: BYTE;
 
4487
    ProcessorMaxThrottle: BYTE;
 
4488
    spare2: array [0..4 - 1] of BYTE;
 
4489
    // Disk
 
4490
    DiskSpinDown: BOOLEAN;
 
4491
    spare3: array [0..8 - 1] of BYTE;
 
4492
    // System Battery
 
4493
    SystemBatteriesPresent: BOOLEAN;
 
4494
    BatteriesAreShortTerm: BOOLEAN;
 
4495
    BatteryScale: array [0..3 - 1] of BATTERY_REPORTING_SCALE;
 
4496
    // Wake
 
4497
    AcOnLineWake: SYSTEM_POWER_STATE;
 
4498
    SoftLidWake: SYSTEM_POWER_STATE;
 
4499
    RtcWake: SYSTEM_POWER_STATE;
 
4500
    MinDeviceWakeState: SYSTEM_POWER_STATE; // note this may change on driver load
 
4501
    DefaultLowLatencyWake: SYSTEM_POWER_STATE;
 
4502
  end;
 
4503
  {$EXTERNALSYM SYSTEM_POWER_CAPABILITIES}
 
4504
  TSystemPowerCapabilities = SYSTEM_POWER_CAPABILITIES;
 
4505
  PSystemPowerCapabilities = PSYSTEM_POWER_CAPABILITIES;
 
4506
 
 
4507
  PSYSTEM_BATTERY_STATE = ^SYSTEM_BATTERY_STATE;
 
4508
  {$EXTERNALSYM PSYSTEM_BATTERY_STATE}
 
4509
  SYSTEM_BATTERY_STATE = record
 
4510
    AcOnLine: BOOLEAN;
 
4511
    BatteryPresent: BOOLEAN;
 
4512
    Charging: BOOLEAN;
 
4513
    Discharging: BOOLEAN;
 
4514
    Spare1: array [0..3] of BOOLEAN;
 
4515
    MaxCapacity: DWORD;
 
4516
    RemainingCapacity: DWORD;
 
4517
    Rate: DWORD;
 
4518
    EstimatedTime: DWORD;
 
4519
    DefaultAlert1: DWORD;
 
4520
    DefaultAlert2: DWORD;
 
4521
  end;
 
4522
  {$EXTERNALSYM SYSTEM_BATTERY_STATE}
 
4523
  TSystemBatteryState = SYSTEM_BATTERY_STATE;
 
4524
  PSystemBatteryState = PSYSTEM_BATTERY_STATE;
 
4525
 
 
4526
//
 
4527
// Image Format
 
4528
//
 
4529
 
 
4530
// #include "pshpack4.h"                   // 4 byte packing is the default
 
4531
 
 
4532
const
 
4533
  IMAGE_DOS_SIGNATURE    = $5A4D; // MZ
 
4534
  {$EXTERNALSYM IMAGE_DOS_SIGNATURE}
 
4535
  IMAGE_OS2_SIGNATURE    = $454E; // NE
 
4536
  {$EXTERNALSYM IMAGE_OS2_SIGNATURE}
 
4537
  IMAGE_OS2_SIGNATURE_LE = $454C; // LE
 
4538
  {$EXTERNALSYM IMAGE_OS2_SIGNATURE_LE}
 
4539
  IMAGE_VXD_SIGNATURE    = $454C; // LE
 
4540
  {$EXTERNALSYM IMAGE_VXD_SIGNATURE}
 
4541
  IMAGE_NT_SIGNATURE     = $00004550; // PE00
 
4542
  {$EXTERNALSYM IMAGE_NT_SIGNATURE}
 
4543
 
 
4544
// #include "pshpack2.h"                   // 16 bit headers are 2 byte packed
 
4545
 
 
4546
type
 
4547
 
 
4548
  // DOS .EXE header
 
4549
 
 
4550
  PIMAGE_DOS_HEADER = ^IMAGE_DOS_HEADER;
 
4551
  {$EXTERNALSYM PIMAGE_DOS_HEADER}
 
4552
  _IMAGE_DOS_HEADER = record
 
4553
    e_magic: Word;     // Magic number
 
4554
    e_cblp: Word;      // Bytes on last page of file
 
4555
    e_cp: Word;        // Pages in file
 
4556
    e_crlc: Word;      // Relocations
 
4557
    e_cparhdr: Word;   // Size of header in paragraphs
 
4558
    e_minalloc: Word;  // Minimum extra paragraphs needed
 
4559
    e_maxalloc: Word;  // Maximum extra paragraphs needed
 
4560
    e_ss: Word;        // Initial (relative) SS value
 
4561
    e_sp: Word;        // Initial SP value
 
4562
    e_csum: Word;      // Checksum
 
4563
    e_ip: Word;        // Initial IP value
 
4564
    e_cs: Word;        // Initial (relative) CS value
 
4565
    e_lfarlc: Word;    // File address of relocation table
 
4566
    e_ovno: Word;      // Overlay number
 
4567
    e_res: array [0..3] of Word;    // Reserved words
 
4568
    e_oemid: Word;     // OEM identifier (for e_oeminfo)
 
4569
    e_oeminfo: Word;   // OEM information; e_oemid specific
 
4570
    e_res2: array [0..9] of Word;  // Reserved words
 
4571
    e_lfanew: Longint; // File address of new exe header
 
4572
  end;
 
4573
  {$EXTERNALSYM _IMAGE_DOS_HEADER}
 
4574
  IMAGE_DOS_HEADER = _IMAGE_DOS_HEADER;
 
4575
  {$EXTERNALSYM IMAGE_DOS_HEADER}
 
4576
  TImageDosHeader = IMAGE_DOS_HEADER;
 
4577
  PImageDosHeader = PIMAGE_DOS_HEADER;
 
4578
 
 
4579
  // OS/2 .EXE header
 
4580
 
 
4581
  PIMAGE_OS2_HEADER = ^IMAGE_OS2_HEADER;
 
4582
  {$EXTERNALSYM PIMAGE_OS2_HEADER}
 
4583
  _IMAGE_OS2_HEADER = record
 
4584
    ne_magic: Word;        // Magic number
 
4585
    ne_ver: CHAR;          // Version number
 
4586
    ne_rev: CHAR;          // Revision number
 
4587
    ne_enttab: Word;       // Offset of Entry Table
 
4588
    ne_cbenttab: Word;     // Number of bytes in Entry Table
 
4589
    ne_crc: Longint;       // Checksum of whole file
 
4590
    ne_flags: Word;        // Flag word
 
4591
    ne_autodata: Word;     // Automatic data segment number
 
4592
    ne_heap: Word;         // Initial heap allocation
 
4593
    ne_stack: Word;        // Initial stack allocation
 
4594
    ne_csip: Longint;      // Initial CS:IP setting
 
4595
    ne_sssp: Longint;      // Initial SS:SP setting
 
4596
    ne_cseg: Word;         // Count of file segments
 
4597
    ne_cmod: Word;         // Entries in Module Reference Table
 
4598
    ne_cbnrestab: Word;    // Size of non-resident name table
 
4599
    ne_segtab: Word;       // Offset of Segment Table
 
4600
    ne_rsrctab: Word;      // Offset of Resource Table
 
4601
    ne_restab: Word;       // Offset of resident name table
 
4602
    ne_modtab: Word;       // Offset of Module Reference Table
 
4603
    ne_imptab: Word;       // Offset of Imported Names Table
 
4604
    ne_nrestab: Longint;   // Offset of Non-resident Names Table
 
4605
    ne_cmovent: Word;      // Count of movable entries
 
4606
    ne_align: Word;        // Segment alignment shift count
 
4607
    ne_cres: Word;         // Count of resource segments
 
4608
    ne_exetyp: Byte;       // Target Operating system
 
4609
    ne_flagsothers: Byte;  // Other .EXE flags
 
4610
    ne_pretthunks: Word;   // offset to return thunks
 
4611
    ne_psegrefbytes: Word; // offset to segment ref. bytes
 
4612
    ne_swaparea: Word;     // Minimum code swap area size
 
4613
    ne_expver: Word;       // Expected Windows version number
 
4614
  end;
 
4615
  {$EXTERNALSYM _IMAGE_OS2_HEADER}
 
4616
  IMAGE_OS2_HEADER = _IMAGE_OS2_HEADER;
 
4617
  {$EXTERNALSYM IMAGE_OS2_HEADER}
 
4618
  TImageOs2Header = IMAGE_OS2_HEADER;
 
4619
  PImageOs2Header = PIMAGE_OS2_HEADER;
 
4620
 
 
4621
  // Windows VXD header
 
4622
 
 
4623
  PIMAGE_VXD_HEADER = ^IMAGE_VXD_HEADER;
 
4624
  {$EXTERNALSYM PIMAGE_VXD_HEADER}
 
4625
  _IMAGE_VXD_HEADER = record
 
4626
    e32_magic: Word;         // Magic number
 
4627
    e32_border: Byte;        // The byte ordering for the VXD
 
4628
    e32_worder: Byte;        // The word ordering for the VXD
 
4629
    e32_level: DWORD;        // The EXE format level for now = 0
 
4630
    e32_cpu: Word;           // The CPU type
 
4631
    e32_os: Word;            // The OS type
 
4632
    e32_ver: DWORD;          // Module version
 
4633
    e32_mflags: DWORD;       // Module flags
 
4634
    e32_mpages: DWORD;       // Module # pages
 
4635
    e32_startobj: DWORD;     // Object # for instruction pointer
 
4636
    e32_eip: DWORD;          // Extended instruction pointer
 
4637
    e32_stackobj: DWORD;     // Object # for stack pointer
 
4638
    e32_esp: DWORD;          // Extended stack pointer
 
4639
    e32_pagesize: DWORD;     // VXD page size
 
4640
    e32_lastpagesize: DWORD; // Last page size in VXD
 
4641
    e32_fixupsize: DWORD;    // Fixup section size
 
4642
    e32_fixupsum: DWORD;     // Fixup section checksum
 
4643
    e32_ldrsize: DWORD;      // Loader section size
 
4644
    e32_ldrsum: DWORD;       // Loader section checksum
 
4645
    e32_objtab: DWORD;       // Object table offset
 
4646
    e32_objcnt: DWORD;       // Number of objects in module
 
4647
    e32_objmap: DWORD;       // Object page map offset
 
4648
    e32_itermap: DWORD;      // Object iterated data map offset
 
4649
    e32_rsrctab: DWORD;      // Offset of Resource Table
 
4650
    e32_rsrccnt: DWORD;      // Number of resource entries
 
4651
    e32_restab: DWORD;       // Offset of resident name table
 
4652
    e32_enttab: DWORD;       // Offset of Entry Table
 
4653
    e32_dirtab: DWORD;       // Offset of Module Directive Table
 
4654
    e32_dircnt: DWORD;       // Number of module directives
 
4655
    e32_fpagetab: DWORD;     // Offset of Fixup Page Table
 
4656
    e32_frectab: DWORD;      // Offset of Fixup Record Table
 
4657
    e32_impmod: DWORD;       // Offset of Import Module Name Table
 
4658
    e32_impmodcnt: DWORD;    // Number of entries in Import Module Name Table
 
4659
    e32_impproc: DWORD;      // Offset of Import Procedure Name Table
 
4660
    e32_pagesum: DWORD;      // Offset of Per-Page Checksum Table
 
4661
    e32_datapage: DWORD;     // Offset of Enumerated Data Pages
 
4662
    e32_preload: DWORD;      // Number of preload pages
 
4663
    e32_nrestab: DWORD;      // Offset of Non-resident Names Table
 
4664
    e32_cbnrestab: DWORD;    // Size of Non-resident Name Table
 
4665
    e32_nressum: DWORD;      // Non-resident Name Table Checksum
 
4666
    e32_autodata: DWORD;     // Object # for automatic data object
 
4667
    e32_debuginfo: DWORD;    // Offset of the debugging information
 
4668
    e32_debuglen: DWORD;     // The length of the debugging info. in bytes
 
4669
    e32_instpreload: DWORD;  // Number of instance pages in preload section of VXD file
 
4670
    e32_instdemand: DWORD;   // Number of instance pages in demand load section of VXD file
 
4671
    e32_heapsize: DWORD;     // Size of heap - for 16-bit apps
 
4672
    e32_res3: array [0..11] of Byte;      // Reserved words
 
4673
    e32_winresoff: DWORD;
 
4674
    e32_winreslen: DWORD;
 
4675
    e32_devid: Word;         // Device ID for VxD
 
4676
    e32_ddkver: Word;        // DDK version for VxD
 
4677
  end;
 
4678
  {$EXTERNALSYM _IMAGE_VXD_HEADER}
 
4679
  IMAGE_VXD_HEADER = _IMAGE_VXD_HEADER;
 
4680
  {$EXTERNALSYM IMAGE_VXD_HEADER}
 
4681
  TImageVxdHeader = IMAGE_VXD_HEADER;
 
4682
  PImageVxdHeader = PIMAGE_VXD_HEADER;
 
4683
 
 
4684
// #include "poppack.h"                    // Back to 4 byte packing
 
4685
 
 
4686
//
 
4687
// File header format.
 
4688
//
 
4689
 
 
4690
  PIMAGE_FILE_HEADER = ^IMAGE_FILE_HEADER;
 
4691
  {$EXTERNALSYM PIMAGE_FILE_HEADER}
 
4692
  _IMAGE_FILE_HEADER = record
 
4693
    Machine: WORD;
 
4694
    NumberOfSections: WORD;
 
4695
    TimeDateStamp: DWORD;
 
4696
    PointerToSymbolTable: DWORD;
 
4697
    NumberOfSymbols: DWORD;
 
4698
    SizeOfOptionalHeader: WORD;
 
4699
    Characteristics: WORD;
 
4700
  end;
 
4701
  {$EXTERNALSYM _IMAGE_FILE_HEADER}
 
4702
  IMAGE_FILE_HEADER = _IMAGE_FILE_HEADER;
 
4703
  {$EXTERNALSYM IMAGE_FILE_HEADER}
 
4704
  TImageFileHeader = IMAGE_FILE_HEADER;
 
4705
  PImageFileHeader = PIMAGE_FILE_HEADER;
 
4706
 
 
4707
const
 
4708
  IMAGE_SIZEOF_FILE_HEADER = 20;
 
4709
  {$EXTERNALSYM IMAGE_SIZEOF_FILE_HEADER}
 
4710
 
 
4711
  IMAGE_FILE_RELOCS_STRIPPED         = $0001; // Relocation info stripped from file.
 
4712
  {$EXTERNALSYM IMAGE_FILE_RELOCS_STRIPPED}
 
4713
  IMAGE_FILE_EXECUTABLE_IMAGE        = $0002; // File is executable  (i.e. no unresolved externel references).
 
4714
  {$EXTERNALSYM IMAGE_FILE_EXECUTABLE_IMAGE}
 
4715
  IMAGE_FILE_LINE_NUMS_STRIPPED      = $0004; // Line nunbers stripped from file.
 
4716
  {$EXTERNALSYM IMAGE_FILE_LINE_NUMS_STRIPPED}
 
4717
  IMAGE_FILE_LOCAL_SYMS_STRIPPED     = $0008; // Local symbols stripped from file.
 
4718
  {$EXTERNALSYM IMAGE_FILE_LOCAL_SYMS_STRIPPED}
 
4719
  IMAGE_FILE_AGGRESIVE_WS_TRIM       = $0010; // Agressively trim working set
 
4720
  {$EXTERNALSYM IMAGE_FILE_AGGRESIVE_WS_TRIM}
 
4721
  IMAGE_FILE_LARGE_ADDRESS_AWARE     = $0020; // App can handle >2gb addresses
 
4722
  {$EXTERNALSYM IMAGE_FILE_LARGE_ADDRESS_AWARE}
 
4723
  IMAGE_FILE_BYTES_REVERSED_LO       = $0080; // Bytes of machine word are reversed.
 
4724
  {$EXTERNALSYM IMAGE_FILE_BYTES_REVERSED_LO}
 
4725
  IMAGE_FILE_32BIT_MACHINE           = $0100; // 32 bit word machine.
 
4726
  {$EXTERNALSYM IMAGE_FILE_32BIT_MACHINE}
 
4727
  IMAGE_FILE_DEBUG_STRIPPED          = $0200; // Debugging info stripped from file in .DBG file
 
4728
  {$EXTERNALSYM IMAGE_FILE_DEBUG_STRIPPED}
 
4729
  IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP = $0400; // If Image is on removable media, copy and run from the swap file.
 
4730
  {$EXTERNALSYM IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP}
 
4731
  IMAGE_FILE_NET_RUN_FROM_SWAP       = $0800; // If Image is on Net, copy and run from the swap file.
 
4732
  {$EXTERNALSYM IMAGE_FILE_NET_RUN_FROM_SWAP}
 
4733
  IMAGE_FILE_SYSTEM                  = $1000; // System File.
 
4734
  {$EXTERNALSYM IMAGE_FILE_SYSTEM}
 
4735
  IMAGE_FILE_DLL                     = $2000; // File is a DLL.
 
4736
  {$EXTERNALSYM IMAGE_FILE_DLL}
 
4737
  IMAGE_FILE_UP_SYSTEM_ONLY          = $4000; // File should only be run on a UP machine
 
4738
  {$EXTERNALSYM IMAGE_FILE_UP_SYSTEM_ONLY}
 
4739
  IMAGE_FILE_BYTES_REVERSED_HI       = $8000; // Bytes of machine word are reversed.
 
4740
  {$EXTERNALSYM IMAGE_FILE_BYTES_REVERSED_HI}
 
4741
 
 
4742
  IMAGE_FILE_MACHINE_UNKNOWN   = 0;
 
4743
  {$EXTERNALSYM IMAGE_FILE_MACHINE_UNKNOWN}
 
4744
  IMAGE_FILE_MACHINE_I386      = $014c; // Intel 386.
 
4745
  {$EXTERNALSYM IMAGE_FILE_MACHINE_I386}
 
4746
  IMAGE_FILE_MACHINE_R3000     = $0162; // MIPS little-endian, 0x160 big-endian
 
4747
  {$EXTERNALSYM IMAGE_FILE_MACHINE_R3000}
 
4748
  IMAGE_FILE_MACHINE_R4000     = $0166; // MIPS little-endian
 
4749
  {$EXTERNALSYM IMAGE_FILE_MACHINE_R4000}
 
4750
  IMAGE_FILE_MACHINE_R10000    = $0168; // MIPS little-endian
 
4751
  {$EXTERNALSYM IMAGE_FILE_MACHINE_R10000}
 
4752
  IMAGE_FILE_MACHINE_WCEMIPSV2 = $0169; // MIPS little-endian WCE v2
 
4753
  {$EXTERNALSYM IMAGE_FILE_MACHINE_WCEMIPSV2}
 
4754
  IMAGE_FILE_MACHINE_ALPHA     = $0184; // Alpha_AXP
 
4755
  {$EXTERNALSYM IMAGE_FILE_MACHINE_ALPHA}
 
4756
  IMAGE_FILE_MACHINE_SH3       = $01a2; // SH3 little-endian
 
4757
  {$EXTERNALSYM IMAGE_FILE_MACHINE_SH3}
 
4758
  IMAGE_FILE_MACHINE_SH3DSP    = $01a3;
 
4759
  {$EXTERNALSYM IMAGE_FILE_MACHINE_SH3DSP}
 
4760
  IMAGE_FILE_MACHINE_SH3E      = $01a4; // SH3E little-endian
 
4761
  {$EXTERNALSYM IMAGE_FILE_MACHINE_SH3E}
 
4762
  IMAGE_FILE_MACHINE_SH4       = $01a6; // SH4 little-endian
 
4763
  {$EXTERNALSYM IMAGE_FILE_MACHINE_SH4}
 
4764
  IMAGE_FILE_MACHINE_SH5       = $01a8; // SH5
 
4765
  {$EXTERNALSYM IMAGE_FILE_MACHINE_SH5}
 
4766
  IMAGE_FILE_MACHINE_ARM       = $01c0; // ARM Little-Endian
 
4767
  {$EXTERNALSYM IMAGE_FILE_MACHINE_ARM}
 
4768
  IMAGE_FILE_MACHINE_THUMB     = $01c2;
 
4769
  {$EXTERNALSYM IMAGE_FILE_MACHINE_THUMB}
 
4770
  IMAGE_FILE_MACHINE_AM33      = $01d3;
 
4771
  {$EXTERNALSYM IMAGE_FILE_MACHINE_AM33}
 
4772
  IMAGE_FILE_MACHINE_POWERPC   = $01F0; // IBM PowerPC Little-Endian
 
4773
  {$EXTERNALSYM IMAGE_FILE_MACHINE_POWERPC}
 
4774
  IMAGE_FILE_MACHINE_POWERPCFP = $01f1;
 
4775
  {$EXTERNALSYM IMAGE_FILE_MACHINE_POWERPCFP}
 
4776
  IMAGE_FILE_MACHINE_IA64      = $0200; // Intel 64
 
4777
  {$EXTERNALSYM IMAGE_FILE_MACHINE_IA64}
 
4778
  IMAGE_FILE_MACHINE_MIPS16    = $0266; // MIPS
 
4779
  {$EXTERNALSYM IMAGE_FILE_MACHINE_MIPS16}
 
4780
  IMAGE_FILE_MACHINE_ALPHA64   = $0284; // ALPHA64
 
4781
  {$EXTERNALSYM IMAGE_FILE_MACHINE_ALPHA64}
 
4782
  IMAGE_FILE_MACHINE_MIPSFPU   = $0366; // MIPS
 
4783
  {$EXTERNALSYM IMAGE_FILE_MACHINE_MIPSFPU}
 
4784
  IMAGE_FILE_MACHINE_MIPSFPU16 = $0466; // MIPS
 
4785
  {$EXTERNALSYM IMAGE_FILE_MACHINE_MIPSFPU16}
 
4786
  IMAGE_FILE_MACHINE_AXP64     = IMAGE_FILE_MACHINE_ALPHA64;
 
4787
  {$EXTERNALSYM IMAGE_FILE_MACHINE_AXP64}
 
4788
  IMAGE_FILE_MACHINE_TRICORE   = $0520; // Infineon
 
4789
  {$EXTERNALSYM IMAGE_FILE_MACHINE_TRICORE}
 
4790
  IMAGE_FILE_MACHINE_CEF       = $0CEF;
 
4791
  {$EXTERNALSYM IMAGE_FILE_MACHINE_CEF}
 
4792
  IMAGE_FILE_MACHINE_EBC       = $0EBC; // EFI Byte Code
 
4793
  {$EXTERNALSYM IMAGE_FILE_MACHINE_EBC}
 
4794
  IMAGE_FILE_MACHINE_AMD64     = $8664; // AMD64 (K8)
 
4795
  {$EXTERNALSYM IMAGE_FILE_MACHINE_AMD64}
 
4796
  IMAGE_FILE_MACHINE_M32R      = $9041; // M32R little-endian
 
4797
  {$EXTERNALSYM IMAGE_FILE_MACHINE_M32R}
 
4798
  IMAGE_FILE_MACHINE_CEE       = $C0EE;
 
4799
  {$EXTERNALSYM IMAGE_FILE_MACHINE_CEE}
 
4800
 
 
4801
//
 
4802
// Directory format.
 
4803
//
 
4804
 
 
4805
type
 
4806
  PIMAGE_DATA_DIRECTORY = ^IMAGE_DATA_DIRECTORY;
 
4807
  {$EXTERNALSYM PIMAGE_DATA_DIRECTORY}
 
4808
  _IMAGE_DATA_DIRECTORY = record
 
4809
    VirtualAddress: DWORD;
 
4810
    Size: DWORD;
 
4811
  end;
 
4812
  {$EXTERNALSYM _IMAGE_DATA_DIRECTORY}
 
4813
  IMAGE_DATA_DIRECTORY = _IMAGE_DATA_DIRECTORY;
 
4814
  {$EXTERNALSYM IMAGE_DATA_DIRECTORY}
 
4815
  TImageDataDirectory = IMAGE_DATA_DIRECTORY;
 
4816
  PImageDataDirectory = PIMAGE_DATA_DIRECTORY;
 
4817
 
 
4818
const
 
4819
  IMAGE_NUMBEROF_DIRECTORY_ENTRIES = 16;
 
4820
  {$EXTERNALSYM IMAGE_NUMBEROF_DIRECTORY_ENTRIES}
 
4821
 
 
4822
//
 
4823
// Optional header format.
 
4824
//
 
4825
 
 
4826
type
 
4827
  PIMAGE_OPTIONAL_HEADER32 = ^IMAGE_OPTIONAL_HEADER32;
 
4828
  {$EXTERNALSYM PIMAGE_OPTIONAL_HEADER32}
 
4829
  _IMAGE_OPTIONAL_HEADER = record
 
4830
    //
 
4831
    // Standard fields.
 
4832
    //
 
4833
    Magic: Word;
 
4834
    MajorLinkerVersion: Byte;
 
4835
    MinorLinkerVersion: Byte;
 
4836
    SizeOfCode: DWORD;
 
4837
    SizeOfInitializedData: DWORD;
 
4838
    SizeOfUninitializedData: DWORD;
 
4839
    AddressOfEntryPoint: DWORD;
 
4840
    BaseOfCode: DWORD;
 
4841
    BaseOfData: DWORD;
 
4842
    //
 
4843
    // NT additional fields.
 
4844
    //
 
4845
    ImageBase: DWORD;
 
4846
    SectionAlignment: DWORD;
 
4847
    FileAlignment: DWORD;
 
4848
    MajorOperatingSystemVersion: Word;
 
4849
    MinorOperatingSystemVersion: Word;
 
4850
    MajorImageVersion: Word;
 
4851
    MinorImageVersion: Word;
 
4852
    MajorSubsystemVersion: Word;
 
4853
    MinorSubsystemVersion: Word;
 
4854
    Win32VersionValue: DWORD;
 
4855
    SizeOfImage: DWORD;
 
4856
    SizeOfHeaders: DWORD;
 
4857
    CheckSum: DWORD;
 
4858
    Subsystem: Word;
 
4859
    DllCharacteristics: Word;
 
4860
    SizeOfStackReserve: DWORD;
 
4861
    SizeOfStackCommit: DWORD;
 
4862
    SizeOfHeapReserve: DWORD;
 
4863
    SizeOfHeapCommit: DWORD;
 
4864
    LoaderFlags: DWORD;
 
4865
    NumberOfRvaAndSizes: DWORD;
 
4866
    DataDirectory: array [0..IMAGE_NUMBEROF_DIRECTORY_ENTRIES - 1] of IMAGE_DATA_DIRECTORY;
 
4867
  end;
 
4868
  {$EXTERNALSYM _IMAGE_OPTIONAL_HEADER}
 
4869
  IMAGE_OPTIONAL_HEADER32 = _IMAGE_OPTIONAL_HEADER;
 
4870
  {$EXTERNALSYM IMAGE_OPTIONAL_HEADER32}
 
4871
  TImageOptionalHeader32 = IMAGE_OPTIONAL_HEADER32;
 
4872
  PImageOptionalHeader32 = PIMAGE_OPTIONAL_HEADER32;
 
4873
 
 
4874
  PIMAGE_ROM_OPTIONAL_HEADER = ^IMAGE_ROM_OPTIONAL_HEADER;
 
4875
  {$EXTERNALSYM PIMAGE_ROM_OPTIONAL_HEADER}
 
4876
  _IMAGE_ROM_OPTIONAL_HEADER = record
 
4877
    Magic: Word;
 
4878
    MajorLinkerVersion: Byte;
 
4879
    MinorLinkerVersion: Byte;
 
4880
    SizeOfCode: DWORD;
 
4881
    SizeOfInitializedData: DWORD;
 
4882
    SizeOfUninitializedData: DWORD;
 
4883
    AddressOfEntryPoint: DWORD;
 
4884
    BaseOfCode: DWORD;
 
4885
    BaseOfData: DWORD;
 
4886
    BaseOfBss: DWORD;
 
4887
    GprMask: DWORD;
 
4888
    CprMask: array [0..3] of DWORD;
 
4889
    GpValue: DWORD;
 
4890
  end;
 
4891
  {$EXTERNALSYM _IMAGE_ROM_OPTIONAL_HEADER}
 
4892
  IMAGE_ROM_OPTIONAL_HEADER = _IMAGE_ROM_OPTIONAL_HEADER;
 
4893
  {$EXTERNALSYM IMAGE_ROM_OPTIONAL_HEADER}
 
4894
  TImageRomOptionalHeader = IMAGE_ROM_OPTIONAL_HEADER;
 
4895
  PImageRomOptionalHeader = PIMAGE_ROM_OPTIONAL_HEADER;
 
4896
 
 
4897
  PIMAGE_OPTIONAL_HEADER64 = ^IMAGE_OPTIONAL_HEADER64;
 
4898
  {$EXTERNALSYM PIMAGE_OPTIONAL_HEADER64}
 
4899
  _IMAGE_OPTIONAL_HEADER64 = record
 
4900
    Magic: Word;
 
4901
    MajorLinkerVersion: Byte;
 
4902
    MinorLinkerVersion: Byte;
 
4903
    SizeOfCode: DWORD;
 
4904
    SizeOfInitializedData: DWORD;
 
4905
    SizeOfUninitializedData: DWORD;
 
4906
    AddressOfEntryPoint: DWORD;
 
4907
    BaseOfCode: DWORD;
 
4908
    ImageBase: Int64;
 
4909
    SectionAlignment: DWORD;
 
4910
    FileAlignment: DWORD;
 
4911
    MajorOperatingSystemVersion: Word;
 
4912
    MinorOperatingSystemVersion: Word;
 
4913
    MajorImageVersion: Word;
 
4914
    MinorImageVersion: Word;
 
4915
    MajorSubsystemVersion: Word;
 
4916
    MinorSubsystemVersion: Word;
 
4917
    Win32VersionValue: DWORD;
 
4918
    SizeOfImage: DWORD;
 
4919
    SizeOfHeaders: DWORD;
 
4920
    CheckSum: DWORD;
 
4921
    Subsystem: Word;
 
4922
    DllCharacteristics: Word;
 
4923
    SizeOfStackReserve: Int64;
 
4924
    SizeOfStackCommit: Int64;
 
4925
    SizeOfHeapReserve: Int64;
 
4926
    SizeOfHeapCommit: Int64;
 
4927
    LoaderFlags: DWORD;
 
4928
    NumberOfRvaAndSizes: DWORD;
 
4929
    DataDirectory: array [0..IMAGE_NUMBEROF_DIRECTORY_ENTRIES - 1] of IMAGE_DATA_DIRECTORY;
 
4930
  end;
 
4931
  {$EXTERNALSYM _IMAGE_OPTIONAL_HEADER64}
 
4932
  IMAGE_OPTIONAL_HEADER64 = _IMAGE_OPTIONAL_HEADER64;
 
4933
  {$EXTERNALSYM IMAGE_OPTIONAL_HEADER64}
 
4934
  TImageOptionalHeader64 = IMAGE_OPTIONAL_HEADER64;
 
4935
  PImageOptionalHeader64 = PIMAGE_OPTIONAL_HEADER64;
 
4936
 
 
4937
const
 
4938
  IMAGE_SIZEOF_ROM_OPTIONAL_HEADER  = 56;
 
4939
  {$EXTERNALSYM IMAGE_SIZEOF_ROM_OPTIONAL_HEADER}
 
4940
  IMAGE_SIZEOF_STD_OPTIONAL_HEADER  = 28;
 
4941
  {$EXTERNALSYM IMAGE_SIZEOF_STD_OPTIONAL_HEADER}
 
4942
  IMAGE_SIZEOF_NT_OPTIONAL32_HEADER = 224;
 
4943
  {$EXTERNALSYM IMAGE_SIZEOF_NT_OPTIONAL32_HEADER}
 
4944
  IMAGE_SIZEOF_NT_OPTIONAL64_HEADER = 240;
 
4945
  {$EXTERNALSYM IMAGE_SIZEOF_NT_OPTIONAL64_HEADER}
 
4946
 
 
4947
  IMAGE_NT_OPTIONAL_HDR32_MAGIC = $10b;
 
4948
  {$EXTERNALSYM IMAGE_NT_OPTIONAL_HDR32_MAGIC}
 
4949
  IMAGE_NT_OPTIONAL_HDR64_MAGIC = $20b;
 
4950
  {$EXTERNALSYM IMAGE_NT_OPTIONAL_HDR64_MAGIC}
 
4951
  IMAGE_ROM_OPTIONAL_HDR_MAGIC  = $107;
 
4952
  {$EXTERNALSYM IMAGE_ROM_OPTIONAL_HDR_MAGIC}
 
4953
 
 
4954
type
 
4955
  IMAGE_OPTIONAL_HEADER = IMAGE_OPTIONAL_HEADER32;
 
4956
  {$EXTERNALSYM IMAGE_OPTIONAL_HEADER}
 
4957
  PIMAGE_OPTIONAL_HEADER = PIMAGE_OPTIONAL_HEADER32;
 
4958
  {$EXTERNALSYM PIMAGE_OPTIONAL_HEADER}
 
4959
 
 
4960
const
 
4961
  IMAGE_SIZEOF_NT_OPTIONAL_HEADER = IMAGE_SIZEOF_NT_OPTIONAL32_HEADER;
 
4962
  {$EXTERNALSYM IMAGE_SIZEOF_NT_OPTIONAL_HEADER}
 
4963
  IMAGE_NT_OPTIONAL_HDR_MAGIC     = IMAGE_NT_OPTIONAL_HDR32_MAGIC;
 
4964
  {$EXTERNALSYM IMAGE_NT_OPTIONAL_HDR_MAGIC}
 
4965
 
 
4966
type
 
4967
  PIMAGE_NT_HEADERS64 = ^IMAGE_NT_HEADERS64;
 
4968
  {$EXTERNALSYM PIMAGE_NT_HEADERS64}
 
4969
  _IMAGE_NT_HEADERS64 = record
 
4970
    Signature: DWORD;
 
4971
    FileHeader: IMAGE_FILE_HEADER;
 
4972
    OptionalHeader: IMAGE_OPTIONAL_HEADER64;
 
4973
  end;
 
4974
  {$EXTERNALSYM _IMAGE_NT_HEADERS64}
 
4975
  IMAGE_NT_HEADERS64 = _IMAGE_NT_HEADERS64;
 
4976
  {$EXTERNALSYM IMAGE_NT_HEADERS64}
 
4977
  TImageNtHeaders64 = IMAGE_NT_HEADERS64;
 
4978
  PImageNtHeaders64 = PIMAGE_NT_HEADERS64;
 
4979
 
 
4980
  PIMAGE_NT_HEADERS32 = ^IMAGE_NT_HEADERS32;
 
4981
  {$EXTERNALSYM PIMAGE_NT_HEADERS32}
 
4982
  _IMAGE_NT_HEADERS = record
 
4983
    Signature: DWORD;
 
4984
    FileHeader: IMAGE_FILE_HEADER;
 
4985
    OptionalHeader: IMAGE_OPTIONAL_HEADER32;
 
4986
  end;
 
4987
  {$EXTERNALSYM _IMAGE_NT_HEADERS}
 
4988
  IMAGE_NT_HEADERS32 = _IMAGE_NT_HEADERS;
 
4989
  {$EXTERNALSYM IMAGE_NT_HEADERS32}
 
4990
  TImageNtHeaders32 = IMAGE_NT_HEADERS32;
 
4991
  PImageNtHeaders32 = PIMAGE_NT_HEADERS32;
 
4992
 
 
4993
  PIMAGE_ROM_HEADERS = ^IMAGE_ROM_HEADERS;
 
4994
  {$EXTERNALSYM PIMAGE_ROM_HEADERS}
 
4995
  _IMAGE_ROM_HEADERS = record
 
4996
    FileHeader: IMAGE_FILE_HEADER;
 
4997
    OptionalHeader: IMAGE_ROM_OPTIONAL_HEADER;
 
4998
  end;
 
4999
  {$EXTERNALSYM _IMAGE_ROM_HEADERS}
 
5000
  IMAGE_ROM_HEADERS = _IMAGE_ROM_HEADERS;
 
5001
  {$EXTERNALSYM IMAGE_ROM_HEADERS}
 
5002
  TImageRomHeaders = IMAGE_ROM_HEADERS;
 
5003
  PImageRomHeaders = PIMAGE_ROM_HEADERS;
 
5004
 
 
5005
  IMAGE_NT_HEADERS = IMAGE_NT_HEADERS32;
 
5006
  {$EXTERNALSYM IMAGE_NT_HEADERS}
 
5007
  PIMAGE_NT_HEADERS = PIMAGE_NT_HEADERS32;
 
5008
  {$EXTERNALSYM PIMAGE_NT_HEADERS}
 
5009
 
 
5010
  PImageNtHeaders = PIMAGE_NT_HEADERS;
 
5011
 
 
5012
// Subsystem Values
 
5013
 
 
5014
const
 
5015
  IMAGE_SUBSYSTEM_UNKNOWN                 = 0; // Unknown subsystem.
 
5016
  {$EXTERNALSYM IMAGE_SUBSYSTEM_UNKNOWN}
 
5017
  IMAGE_SUBSYSTEM_NATIVE                  = 1; // Image doesn't require a subsystem.
 
5018
  {$EXTERNALSYM IMAGE_SUBSYSTEM_NATIVE}
 
5019
  IMAGE_SUBSYSTEM_WINDOWS_GUI             = 2; // Image runs in the Windows GUI subsystem.
 
5020
  {$EXTERNALSYM IMAGE_SUBSYSTEM_WINDOWS_GUI}
 
5021
  IMAGE_SUBSYSTEM_WINDOWS_CUI             = 3; // Image runs in the Windows character subsystem.
 
5022
  {$EXTERNALSYM IMAGE_SUBSYSTEM_WINDOWS_CUI}
 
5023
  IMAGE_SUBSYSTEM_OS2_CUI                 = 5; // image runs in the OS/2 character subsystem.
 
5024
  {$EXTERNALSYM IMAGE_SUBSYSTEM_OS2_CUI}
 
5025
  IMAGE_SUBSYSTEM_POSIX_CUI               = 7; // image runs in the Posix character subsystem.
 
5026
  {$EXTERNALSYM IMAGE_SUBSYSTEM_POSIX_CUI}
 
5027
  IMAGE_SUBSYSTEM_NATIVE_WINDOWS          = 8; // image is a native Win9x driver.
 
5028
  {$EXTERNALSYM IMAGE_SUBSYSTEM_NATIVE_WINDOWS}
 
5029
  IMAGE_SUBSYSTEM_WINDOWS_CE_GUI          = 9; // Image runs in the Windows CE subsystem.
 
5030
  {$EXTERNALSYM IMAGE_SUBSYSTEM_WINDOWS_CE_GUI}
 
5031
  IMAGE_SUBSYSTEM_EFI_APPLICATION         = 10;
 
5032
  {$EXTERNALSYM IMAGE_SUBSYSTEM_EFI_APPLICATION}
 
5033
  IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER = 11;
 
5034
  {$EXTERNALSYM IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER}
 
5035
  IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER      = 12;
 
5036
  {$EXTERNALSYM IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER}
 
5037
  IMAGE_SUBSYSTEM_EFI_ROM                 = 13;
 
5038
  {$EXTERNALSYM IMAGE_SUBSYSTEM_EFI_ROM}
 
5039
  IMAGE_SUBSYSTEM_XBOX                    = 14;
 
5040
  {$EXTERNALSYM IMAGE_SUBSYSTEM_XBOX}
 
5041
 
 
5042
// DllCharacteristics Entries
 
5043
 
 
5044
//      IMAGE_LIBRARY_PROCESS_INIT           0x0001     // Reserved.
 
5045
//      IMAGE_LIBRARY_PROCESS_TERM           0x0002     // Reserved.
 
5046
//      IMAGE_LIBRARY_THREAD_INIT            0x0004     // Reserved.
 
5047
//      IMAGE_LIBRARY_THREAD_TERM            0x0008     // Reserved.
 
5048
  IMAGE_DLLCHARACTERISTICS_NO_ISOLATION = $0200;    // Image understands isolation and doesn't want it
 
5049
  {$EXTERNALSYM IMAGE_DLLCHARACTERISTICS_NO_ISOLATION}
 
5050
  IMAGE_DLLCHARACTERISTICS_NO_SEH  = $0400; // Image does not use SEH.  No SE handler may reside in this image
 
5051
  {$EXTERNALSYM IMAGE_DLLCHARACTERISTICS_NO_SEH}
 
5052
  IMAGE_DLLCHARACTERISTICS_NO_BIND = $0800; // Do not bind this image.
 
5053
  {$EXTERNALSYM IMAGE_DLLCHARACTERISTICS_NO_BIND}
 
5054
 
 
5055
//                                           0x1000     // Reserved.
 
5056
 
 
5057
  IMAGE_DLLCHARACTERISTICS_WDM_DRIVER = $2000; // Driver uses WDM model
 
5058
  {$EXTERNALSYM IMAGE_DLLCHARACTERISTICS_WDM_DRIVER}
 
5059
 
 
5060
//                                           0x4000     // Reserved.
 
5061
 
 
5062
  IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = $8000;
 
5063
  {$EXTERNALSYM IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE}
 
5064
 
 
5065
// Directory Entries
 
5066
 
 
5067
  IMAGE_DIRECTORY_ENTRY_EXPORT    = 0; // Export Directory
 
5068
  {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_EXPORT}
 
5069
  IMAGE_DIRECTORY_ENTRY_IMPORT    = 1; // Import Directory
 
5070
  {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_IMPORT}
 
5071
  IMAGE_DIRECTORY_ENTRY_RESOURCE  = 2; // Resource Directory
 
5072
  {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_RESOURCE}
 
5073
  IMAGE_DIRECTORY_ENTRY_EXCEPTION = 3; // Exception Directory
 
5074
  {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_EXCEPTION}
 
5075
  IMAGE_DIRECTORY_ENTRY_SECURITY  = 4; // Security Directory
 
5076
  {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_SECURITY}
 
5077
  IMAGE_DIRECTORY_ENTRY_BASERELOC = 5; // Base Relocation Table
 
5078
  {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_BASERELOC}
 
5079
  IMAGE_DIRECTORY_ENTRY_DEBUG     = 6; // Debug Directory
 
5080
  {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_DEBUG}
 
5081
 
 
5082
//      IMAGE_DIRECTORY_ENTRY_COPYRIGHT       7   // (X86 usage)
 
5083
 
 
5084
  IMAGE_DIRECTORY_ENTRY_ARCHITECTURE   = 7; // Architecture Specific Data
 
5085
  {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_ARCHITECTURE}
 
5086
  IMAGE_DIRECTORY_ENTRY_GLOBALPTR      = 8; // RVA of GP
 
5087
  {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_GLOBALPTR}
 
5088
  IMAGE_DIRECTORY_ENTRY_TLS            = 9; // TLS Directory
 
5089
  {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_TLS}
 
5090
  IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG    = 10; // Load Configuration Directory
 
5091
  {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG}
 
5092
  IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT   = 11; // Bound Import Directory in headers
 
5093
  {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT}
 
5094
  IMAGE_DIRECTORY_ENTRY_IAT            = 12; // Import Address Table
 
5095
  {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_IAT}
 
5096
  IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT   = 13; // Delay Load Import Descriptors
 
5097
  {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT}
 
5098
  IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR = 14; // COM Runtime descriptor
 
5099
  {$EXTERNALSYM IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR}
 
5100
 
 
5101
//
 
5102
// Non-COFF Object file header
 
5103
//
 
5104
 
 
5105
type
 
5106
  PAnonObjectHeader = ^ANON_OBJECT_HEADER;
 
5107
  ANON_OBJECT_HEADER = record
 
5108
    Sig1: Word;        // Must be IMAGE_FILE_MACHINE_UNKNOWN
 
5109
    Sig2: Word;        // Must be 0xffff
 
5110
    Version: Word;     // >= 1 (implies the CLSID field is present)
 
5111
    Machine: Word;
 
5112
    TimeDateStamp: DWORD;
 
5113
    ClassID: CLSID;    // Used to invoke CoCreateInstance
 
5114
    SizeOfData: DWORD; // Size of data that follows the header
 
5115
  end;
 
5116
  {$EXTERNALSYM ANON_OBJECT_HEADER}
 
5117
  TAnonObjectHeader = ANON_OBJECT_HEADER;
 
5118
 
 
5119
//
 
5120
// Section header format.
 
5121
//
 
5122
 
 
5123
const
 
5124
  IMAGE_SIZEOF_SHORT_NAME = 8;
 
5125
  {$EXTERNALSYM IMAGE_SIZEOF_SHORT_NAME}
 
5126
 
 
5127
type
 
5128
  TImgSecHdrMisc = record
 
5129
    case Integer of
 
5130
      0: (PhysicalAddress: DWORD);
 
5131
      1: (VirtualSize: DWORD);
 
5132
  end;
 
5133
 
 
5134
  PIMAGE_SECTION_HEADER = ^IMAGE_SECTION_HEADER;
 
5135
  {$EXTERNALSYM PIMAGE_SECTION_HEADER}
 
5136
  _IMAGE_SECTION_HEADER = record
 
5137
    Name: array [0..IMAGE_SIZEOF_SHORT_NAME - 1] of BYTE;
 
5138
    Misc: TImgSecHdrMisc;
 
5139
    VirtualAddress: DWORD;
 
5140
    SizeOfRawData: DWORD;
 
5141
    PointerToRawData: DWORD;
 
5142
    PointerToRelocations: DWORD;
 
5143
    PointerToLinenumbers: DWORD;
 
5144
    NumberOfRelocations: WORD;
 
5145
    NumberOfLinenumbers: WORD;
 
5146
    Characteristics: DWORD;
 
5147
  end;
 
5148
  {$EXTERNALSYM _IMAGE_SECTION_HEADER}
 
5149
  IMAGE_SECTION_HEADER = _IMAGE_SECTION_HEADER;
 
5150
  {$EXTERNALSYM IMAGE_SECTION_HEADER}
 
5151
  TImageSectionHeader = IMAGE_SECTION_HEADER;
 
5152
  PImageSectionHeader = PIMAGE_SECTION_HEADER;
 
5153
 
 
5154
// IMAGE_FIRST_SECTION doesn't need 32/64 versions since the file header is the same either way.
 
5155
 
 
5156
function IMAGE_FIRST_SECTION(NtHeader: PImageNtHeaders): PImageSectionHeader;
 
5157
{$EXTERNALSYM IMAGE_FIRST_SECTION}
 
5158
 
 
5159
const
 
5160
  IMAGE_SIZEOF_SECTION_HEADER = 40;
 
5161
  {$EXTERNALSYM IMAGE_SIZEOF_SECTION_HEADER}
 
5162
 
 
5163
//
 
5164
// Section characteristics.
 
5165
//
 
5166
//      IMAGE_SCN_TYPE_REG                   0x00000000  // Reserved.
 
5167
//      IMAGE_SCN_TYPE_DSECT                 0x00000001  // Reserved.
 
5168
//      IMAGE_SCN_TYPE_NOLOAD                0x00000002  // Reserved.
 
5169
//      IMAGE_SCN_TYPE_GROUP                 0x00000004  // Reserved.
 
5170
 
 
5171
  IMAGE_SCN_TYPE_NO_PAD = $00000008; // Reserved.
 
5172
  {$EXTERNALSYM IMAGE_SCN_TYPE_NO_PAD}
 
5173
 
 
5174
//      IMAGE_SCN_TYPE_COPY                  0x00000010  // Reserved.
 
5175
 
 
5176
  IMAGE_SCN_CNT_CODE               = $00000020; // Section contains code.
 
5177
  {$EXTERNALSYM IMAGE_SCN_CNT_CODE}
 
5178
  IMAGE_SCN_CNT_INITIALIZED_DATA   = $00000040; // Section contains initialized data.
 
5179
  {$EXTERNALSYM IMAGE_SCN_CNT_INITIALIZED_DATA}
 
5180
  IMAGE_SCN_CNT_UNINITIALIZED_DATA = $00000080; // Section contains uninitialized data.
 
5181
  {$EXTERNALSYM IMAGE_SCN_CNT_UNINITIALIZED_DATA}
 
5182
 
 
5183
  IMAGE_SCN_LNK_OTHER = $00000100; // Reserved.
 
5184
  {$EXTERNALSYM IMAGE_SCN_LNK_OTHER}
 
5185
  IMAGE_SCN_LNK_INFO  = $00000200; // Section contains comments or some other type of information.
 
5186
  {$EXTERNALSYM IMAGE_SCN_LNK_INFO}
 
5187
 
 
5188
//      IMAGE_SCN_TYPE_OVER                  0x00000400  // Reserved.
 
5189
 
 
5190
  IMAGE_SCN_LNK_REMOVE = $00000800; // Section contents will not become part of image.
 
5191
  {$EXTERNALSYM IMAGE_SCN_LNK_REMOVE}
 
5192
  IMAGE_SCN_LNK_COMDAT = $00001000; // Section contents comdat.
 
5193
  {$EXTERNALSYM IMAGE_SCN_LNK_COMDAT}
 
5194
 
 
5195
//                                           0x00002000  // Reserved.
 
5196
//      IMAGE_SCN_MEM_PROTECTED - Obsolete   0x00004000
 
5197
 
 
5198
  IMAGE_SCN_NO_DEFER_SPEC_EXC = $00004000; // Reset speculative exceptions handling bits in the TLB entries for this section.
 
5199
  {$EXTERNALSYM IMAGE_SCN_NO_DEFER_SPEC_EXC}
 
5200
  IMAGE_SCN_GPREL             = $00008000; // Section content can be accessed relative to GP
 
5201
  {$EXTERNALSYM IMAGE_SCN_GPREL}
 
5202
  IMAGE_SCN_MEM_FARDATA       = $00008000;
 
5203
  {$EXTERNALSYM IMAGE_SCN_MEM_FARDATA}
 
5204
 
 
5205
//      IMAGE_SCN_MEM_SYSHEAP  - Obsolete    0x00010000
 
5206
 
 
5207
  IMAGE_SCN_MEM_PURGEABLE = $00020000;
 
5208
  {$EXTERNALSYM IMAGE_SCN_MEM_PURGEABLE}
 
5209
  IMAGE_SCN_MEM_16BIT     = $00020000;
 
5210
  {$EXTERNALSYM IMAGE_SCN_MEM_16BIT}
 
5211
  IMAGE_SCN_MEM_LOCKED    = $00040000;
 
5212
  {$EXTERNALSYM IMAGE_SCN_MEM_LOCKED}
 
5213
  IMAGE_SCN_MEM_PRELOAD   = $00080000;
 
5214
  {$EXTERNALSYM IMAGE_SCN_MEM_PRELOAD}
 
5215
 
 
5216
  IMAGE_SCN_ALIGN_1BYTES    = $00100000;
 
5217
  {$EXTERNALSYM IMAGE_SCN_ALIGN_1BYTES}
 
5218
  IMAGE_SCN_ALIGN_2BYTES    = $00200000;
 
5219
  {$EXTERNALSYM IMAGE_SCN_ALIGN_2BYTES}
 
5220
  IMAGE_SCN_ALIGN_4BYTES    = $00300000;
 
5221
  {$EXTERNALSYM IMAGE_SCN_ALIGN_4BYTES}
 
5222
  IMAGE_SCN_ALIGN_8BYTES    = $00400000;
 
5223
  {$EXTERNALSYM IMAGE_SCN_ALIGN_8BYTES}
 
5224
  IMAGE_SCN_ALIGN_16BYTES   = $00500000; // Default alignment if no others are specified.
 
5225
  {$EXTERNALSYM IMAGE_SCN_ALIGN_16BYTES}
 
5226
  IMAGE_SCN_ALIGN_32BYTES   = $00600000;
 
5227
  {$EXTERNALSYM IMAGE_SCN_ALIGN_32BYTES}
 
5228
  IMAGE_SCN_ALIGN_64BYTES   = $00700000;
 
5229
  {$EXTERNALSYM IMAGE_SCN_ALIGN_64BYTES}
 
5230
  IMAGE_SCN_ALIGN_128BYTES  = $00800000;
 
5231
  {$EXTERNALSYM IMAGE_SCN_ALIGN_128BYTES}
 
5232
  IMAGE_SCN_ALIGN_256BYTES  = $00900000;
 
5233
  {$EXTERNALSYM IMAGE_SCN_ALIGN_256BYTES}
 
5234
  IMAGE_SCN_ALIGN_512BYTES  = $00A00000;
 
5235
  {$EXTERNALSYM IMAGE_SCN_ALIGN_512BYTES}
 
5236
  IMAGE_SCN_ALIGN_1024BYTES = $00B00000;
 
5237
  {$EXTERNALSYM IMAGE_SCN_ALIGN_1024BYTES}
 
5238
  IMAGE_SCN_ALIGN_2048BYTES = $00C00000;
 
5239
  {$EXTERNALSYM IMAGE_SCN_ALIGN_2048BYTES}
 
5240
  IMAGE_SCN_ALIGN_4096BYTES = $00D00000;
 
5241
  {$EXTERNALSYM IMAGE_SCN_ALIGN_4096BYTES}
 
5242
  IMAGE_SCN_ALIGN_8192BYTES = $00E00000;
 
5243
  {$EXTERNALSYM IMAGE_SCN_ALIGN_8192BYTES}
 
5244
 
 
5245
// Unused                                    0x00F00000
 
5246
 
 
5247
  IMAGE_SCN_ALIGN_MASK = $00F00000;
 
5248
  {$EXTERNALSYM IMAGE_SCN_ALIGN_MASK}
 
5249
 
 
5250
  IMAGE_SCN_LNK_NRELOC_OVFL = $01000000; // Section contains extended relocations.
 
5251
  {$EXTERNALSYM IMAGE_SCN_LNK_NRELOC_OVFL}
 
5252
  IMAGE_SCN_MEM_DISCARDABLE = $02000000; // Section can be discarded.
 
5253
  {$EXTERNALSYM IMAGE_SCN_MEM_DISCARDABLE}
 
5254
  IMAGE_SCN_MEM_NOT_CACHED  = $04000000; // Section is not cachable.
 
5255
  {$EXTERNALSYM IMAGE_SCN_MEM_NOT_CACHED}
 
5256
  IMAGE_SCN_MEM_NOT_PAGED   = $08000000; // Section is not pageable.
 
5257
  {$EXTERNALSYM IMAGE_SCN_MEM_NOT_PAGED}
 
5258
  IMAGE_SCN_MEM_SHARED      = $10000000; // Section is shareable.
 
5259
  {$EXTERNALSYM IMAGE_SCN_MEM_SHARED}
 
5260
  IMAGE_SCN_MEM_EXECUTE     = $20000000; // Section is executable.
 
5261
  {$EXTERNALSYM IMAGE_SCN_MEM_EXECUTE}
 
5262
  IMAGE_SCN_MEM_READ        = $40000000; // Section is readable.
 
5263
  {$EXTERNALSYM IMAGE_SCN_MEM_READ}
 
5264
  IMAGE_SCN_MEM_WRITE       = DWORD($80000000); // Section is writeable.
 
5265
  {$EXTERNALSYM IMAGE_SCN_MEM_WRITE}
 
5266
 
 
5267
//
 
5268
// TLS Chaacteristic Flags
 
5269
//
 
5270
 
 
5271
  IMAGE_SCN_SCALE_INDEX = $00000001; // Tls index is scaled
 
5272
  {$EXTERNALSYM IMAGE_SCN_SCALE_INDEX}
 
5273
 
 
5274
// #include "pshpack2.h"                       // Symbols, relocs, and linenumbers are 2 byte packed
 
5275
 
 
5276
//
 
5277
// Symbol format.
 
5278
//
 
5279
 
 
5280
type
 
5281
  TImageSymbolN = record
 
5282
    case Integer of
 
5283
      0: (
 
5284
        ShortName: array [0..7] of BYTE);
 
5285
      1: (
 
5286
        Short: DWORD;     // if 0, use LongName
 
5287
        Long: DWORD);     // offset into string table
 
5288
      2: (
 
5289
        LongName: array [0..1] of DWORD);
 
5290
  end;
 
5291
 
 
5292
  PIMAGE_SYMBOL = ^IMAGE_SYMBOL;
 
5293
  {$EXTERNALSYM PIMAGE_SYMBOL}
 
5294
  _IMAGE_SYMBOL = record
 
5295
    N: TImageSymbolN;
 
5296
    Value: DWORD;
 
5297
    SectionNumber: SHORT;
 
5298
    Type_: WORD;
 
5299
    StorageClass: BYTE;
 
5300
    NumberOfAuxSymbols: BYTE;
 
5301
  end;
 
5302
  {$EXTERNALSYM _IMAGE_SYMBOL}
 
5303
  IMAGE_SYMBOL = _IMAGE_SYMBOL;
 
5304
  {$EXTERNALSYM IMAGE_SYMBOL}
 
5305
  TImageSymbol = IMAGE_SYMBOL;
 
5306
  PImageSymbol = PIMAGE_SYMBOL;
 
5307
 
 
5308
const
 
5309
  IMAGE_SIZEOF_SYMBOL = 18;
 
5310
  {$EXTERNALSYM IMAGE_SIZEOF_SYMBOL}
 
5311
 
 
5312
//
 
5313
// Section values.
 
5314
//
 
5315
// Symbols have a section number of the section in which they are
 
5316
// defined. Otherwise, section numbers have the following meanings:
 
5317
//
 
5318
 
 
5319
  IMAGE_SYM_UNDEFINED = SHORT(0);  // Symbol is undefined or is common.
 
5320
  {$EXTERNALSYM IMAGE_SYM_UNDEFINED}
 
5321
  IMAGE_SYM_ABSOLUTE  = SHORT(-1); // Symbol is an absolute value.
 
5322
  {$EXTERNALSYM IMAGE_SYM_ABSOLUTE}
 
5323
  IMAGE_SYM_DEBUG     = SHORT(-2); // Symbol is a special debug item.
 
5324
  {$EXTERNALSYM IMAGE_SYM_DEBUG}
 
5325
  IMAGE_SYM_SECTION_MAX = SHORT($FEFF ); // Values 0xFF00-0xFFFF are special
 
5326
  {$EXTERNALSYM IMAGE_SYM_SECTION_MAX}
 
5327
 
 
5328
//
 
5329
// Type (fundamental) values.
 
5330
//
 
5331
 
 
5332
  IMAGE_SYM_TYPE_NULL   = $0000; // no type.
 
5333
  {$EXTERNALSYM IMAGE_SYM_TYPE_NULL}
 
5334
  IMAGE_SYM_TYPE_VOID   = $0001;
 
5335
  {$EXTERNALSYM IMAGE_SYM_TYPE_VOID}
 
5336
  IMAGE_SYM_TYPE_CHAR   = $0002; // type character.
 
5337
  {$EXTERNALSYM IMAGE_SYM_TYPE_CHAR}
 
5338
  IMAGE_SYM_TYPE_SHORT  = $0003; // type short integer.
 
5339
  {$EXTERNALSYM IMAGE_SYM_TYPE_SHORT}
 
5340
  IMAGE_SYM_TYPE_INT    = $0004;
 
5341
  {$EXTERNALSYM IMAGE_SYM_TYPE_INT}
 
5342
  IMAGE_SYM_TYPE_LONG   = $0005;
 
5343
  {$EXTERNALSYM IMAGE_SYM_TYPE_LONG}
 
5344
  IMAGE_SYM_TYPE_FLOAT  = $0006;
 
5345
  {$EXTERNALSYM IMAGE_SYM_TYPE_FLOAT}
 
5346
  IMAGE_SYM_TYPE_DOUBLE = $0007;
 
5347
  {$EXTERNALSYM IMAGE_SYM_TYPE_DOUBLE}
 
5348
  IMAGE_SYM_TYPE_STRUCT = $0008;
 
5349
  {$EXTERNALSYM IMAGE_SYM_TYPE_STRUCT}
 
5350
  IMAGE_SYM_TYPE_UNION  = $0009;
 
5351
  {$EXTERNALSYM IMAGE_SYM_TYPE_UNION}
 
5352
  IMAGE_SYM_TYPE_ENUM   = $000A; // enumeration.
 
5353
  {$EXTERNALSYM IMAGE_SYM_TYPE_ENUM}
 
5354
  IMAGE_SYM_TYPE_MOE    = $000B; // member of enumeration.
 
5355
  {$EXTERNALSYM IMAGE_SYM_TYPE_MOE}
 
5356
  IMAGE_SYM_TYPE_BYTE   = $000C;
 
5357
  {$EXTERNALSYM IMAGE_SYM_TYPE_BYTE}
 
5358
  IMAGE_SYM_TYPE_WORD   = $000D;
 
5359
  {$EXTERNALSYM IMAGE_SYM_TYPE_WORD}
 
5360
  IMAGE_SYM_TYPE_UINT   = $000E;
 
5361
  {$EXTERNALSYM IMAGE_SYM_TYPE_UINT}
 
5362
  IMAGE_SYM_TYPE_DWORD  = $000F;
 
5363
  {$EXTERNALSYM IMAGE_SYM_TYPE_DWORD}
 
5364
  IMAGE_SYM_TYPE_PCODE  = $8000;
 
5365
  {$EXTERNALSYM IMAGE_SYM_TYPE_PCODE}
 
5366
 
 
5367
//
 
5368
// Type (derived) values.
 
5369
//
 
5370
 
 
5371
  IMAGE_SYM_DTYPE_NULL     = 0; // no derived type.
 
5372
  {$EXTERNALSYM IMAGE_SYM_DTYPE_NULL}
 
5373
  IMAGE_SYM_DTYPE_POINTER  = 1; // pointer.
 
5374
  {$EXTERNALSYM IMAGE_SYM_DTYPE_POINTER}
 
5375
  IMAGE_SYM_DTYPE_FUNCTION = 2; // function.
 
5376
  {$EXTERNALSYM IMAGE_SYM_DTYPE_FUNCTION}
 
5377
  IMAGE_SYM_DTYPE_ARRAY    = 3; // array.
 
5378
  {$EXTERNALSYM IMAGE_SYM_DTYPE_ARRAY}
 
5379
 
 
5380
//
 
5381
// Storage classes.
 
5382
//
 
5383
 
 
5384
  IMAGE_SYM_CLASS_END_OF_FUNCTION  = BYTE(-1);
 
5385
  {$EXTERNALSYM IMAGE_SYM_CLASS_END_OF_FUNCTION}
 
5386
  IMAGE_SYM_CLASS_NULL             = $0000;
 
5387
  {$EXTERNALSYM IMAGE_SYM_CLASS_NULL}
 
5388
  IMAGE_SYM_CLASS_AUTOMATIC        = $0001;
 
5389
  {$EXTERNALSYM IMAGE_SYM_CLASS_AUTOMATIC}
 
5390
  IMAGE_SYM_CLASS_EXTERNAL         = $0002;
 
5391
  {$EXTERNALSYM IMAGE_SYM_CLASS_EXTERNAL}
 
5392
  IMAGE_SYM_CLASS_STATIC           = $0003;
 
5393
  {$EXTERNALSYM IMAGE_SYM_CLASS_STATIC}
 
5394
  IMAGE_SYM_CLASS_REGISTER         = $0004;
 
5395
  {$EXTERNALSYM IMAGE_SYM_CLASS_REGISTER}
 
5396
  IMAGE_SYM_CLASS_EXTERNAL_DEF     = $0005;
 
5397
  {$EXTERNALSYM IMAGE_SYM_CLASS_EXTERNAL_DEF}
 
5398
  IMAGE_SYM_CLASS_LABEL            = $0006;
 
5399
  {$EXTERNALSYM IMAGE_SYM_CLASS_LABEL}
 
5400
  IMAGE_SYM_CLASS_UNDEFINED_LABEL  = $0007;
 
5401
  {$EXTERNALSYM IMAGE_SYM_CLASS_UNDEFINED_LABEL}
 
5402
  IMAGE_SYM_CLASS_MEMBER_OF_STRUCT = $0008;
 
5403
  {$EXTERNALSYM IMAGE_SYM_CLASS_MEMBER_OF_STRUCT}
 
5404
  IMAGE_SYM_CLASS_ARGUMENT         = $0009;
 
5405
  {$EXTERNALSYM IMAGE_SYM_CLASS_ARGUMENT}
 
5406
  IMAGE_SYM_CLASS_STRUCT_TAG       = $000A;
 
5407
  {$EXTERNALSYM IMAGE_SYM_CLASS_STRUCT_TAG}
 
5408
  IMAGE_SYM_CLASS_MEMBER_OF_UNION  = $000B;
 
5409
  {$EXTERNALSYM IMAGE_SYM_CLASS_MEMBER_OF_UNION}
 
5410
  IMAGE_SYM_CLASS_UNION_TAG        = $000C;
 
5411
  {$EXTERNALSYM IMAGE_SYM_CLASS_UNION_TAG}
 
5412
  IMAGE_SYM_CLASS_TYPE_DEFINITION  = $000D;
 
5413
  {$EXTERNALSYM IMAGE_SYM_CLASS_TYPE_DEFINITION}
 
5414
  IMAGE_SYM_CLASS_UNDEFINED_STATIC = $000E;
 
5415
  {$EXTERNALSYM IMAGE_SYM_CLASS_UNDEFINED_STATIC}
 
5416
  IMAGE_SYM_CLASS_ENUM_TAG         = $000F;
 
5417
  {$EXTERNALSYM IMAGE_SYM_CLASS_ENUM_TAG}
 
5418
  IMAGE_SYM_CLASS_MEMBER_OF_ENUM   = $0010;
 
5419
  {$EXTERNALSYM IMAGE_SYM_CLASS_MEMBER_OF_ENUM}
 
5420
  IMAGE_SYM_CLASS_REGISTER_PARAM   = $0011;
 
5421
  {$EXTERNALSYM IMAGE_SYM_CLASS_REGISTER_PARAM}
 
5422
  IMAGE_SYM_CLASS_BIT_FIELD        = $0012;
 
5423
  {$EXTERNALSYM IMAGE_SYM_CLASS_BIT_FIELD}
 
5424
 
 
5425
  IMAGE_SYM_CLASS_FAR_EXTERNAL = $0044;
 
5426
  {$EXTERNALSYM IMAGE_SYM_CLASS_FAR_EXTERNAL}
 
5427
 
 
5428
  IMAGE_SYM_CLASS_BLOCK         = $0064;
 
5429
  {$EXTERNALSYM IMAGE_SYM_CLASS_BLOCK}
 
5430
  IMAGE_SYM_CLASS_FUNCTION      = $0065;
 
5431
  {$EXTERNALSYM IMAGE_SYM_CLASS_FUNCTION}
 
5432
  IMAGE_SYM_CLASS_END_OF_STRUCT = $0066;
 
5433
  {$EXTERNALSYM IMAGE_SYM_CLASS_END_OF_STRUCT}
 
5434
  IMAGE_SYM_CLASS_FILE          = $0067;
 
5435
  {$EXTERNALSYM IMAGE_SYM_CLASS_FILE}
 
5436
 
 
5437
// new
 
5438
 
 
5439
  IMAGE_SYM_CLASS_SECTION       = $0068;
 
5440
  {$EXTERNALSYM IMAGE_SYM_CLASS_SECTION}
 
5441
  IMAGE_SYM_CLASS_WEAK_EXTERNAL = $0069;
 
5442
  {$EXTERNALSYM IMAGE_SYM_CLASS_WEAK_EXTERNAL}
 
5443
 
 
5444
  IMAGE_SYM_CLASS_CLR_TOKEN     = $006B;
 
5445
  {$EXTERNALSYM IMAGE_SYM_CLASS_CLR_TOKEN}
 
5446
 
 
5447
// type packing constants
 
5448
 
 
5449
  N_BTMASK = $000F;
 
5450
  {$EXTERNALSYM N_BTMASK}
 
5451
  N_TMASK  = $0030;
 
5452
  {$EXTERNALSYM N_TMASK}
 
5453
  N_TMASK1 = $00C0;
 
5454
  {$EXTERNALSYM N_TMASK1}
 
5455
  N_TMASK2 = $00F0;
 
5456
  {$EXTERNALSYM N_TMASK2}
 
5457
  N_BTSHFT = 4;
 
5458
  {$EXTERNALSYM N_BTSHFT}
 
5459
  N_TSHIFT = 2;
 
5460
  {$EXTERNALSYM N_TSHIFT}
 
5461
 
 
5462
// MACROS
 
5463
 
 
5464
// Basic Type of  x
 
5465
 
 
5466
function BTYPE(x: DWORD): DWORD;
 
5467
{$EXTERNALSYM BTYPE}
 
5468
 
 
5469
// Is x a pointer?
 
5470
 
 
5471
function ISPTR(x: DWORD): Boolean;
 
5472
{$EXTERNALSYM ISPTR}
 
5473
 
 
5474
// Is x a function?
 
5475
 
 
5476
function ISFCN(x: DWORD): Boolean;
 
5477
{$EXTERNALSYM ISFCN}
 
5478
 
 
5479
// Is x an array?
 
5480
 
 
5481
function ISARY(x: DWORD): Boolean;
 
5482
{$EXTERNALSYM ISARY}
 
5483
 
 
5484
// Is x a structure, union, or enumeration TAG?
 
5485
 
 
5486
function ISTAG(x: DWORD): Boolean;
 
5487
{$EXTERNALSYM ISTAG}
 
5488
 
 
5489
//
 
5490
// Auxiliary entry format.
 
5491
//
 
5492
 
 
5493
type
 
5494
  TImgAuzSymSymMisc = record
 
5495
    case Integer of
 
5496
      0: (
 
5497
        Linenumber: WORD;             // declaration line number
 
5498
        Size: WORD);                  // size of struct, union, or enum
 
5499
      1: (
 
5500
        TotalSize: DWORD);
 
5501
  end;
 
5502
 
 
5503
  TImgAuzSymSymFcnAry = record
 
5504
    case Integer of
 
5505
      0: ( // if ISFCN, tag, or .bb
 
5506
        PointerToLinenumber: DWORD;
 
5507
        PointerToNextFunction: DWORD);
 
5508
      1: ( // if ISARY, up to 4 dimen.
 
5509
        Dimension: array [0..3] of WORD);
 
5510
  end;
 
5511
 
 
5512
  TImgAuxSymSym = record
 
5513
    TagIndex: DWORD;                      // struct, union, or enum tag index
 
5514
    Misc: TImgAuzSymSymMisc;
 
5515
    FcnAry: TImgAuzSymSymFcnAry;
 
5516
    TvIndex: WORD;                        // tv index
 
5517
  end;
 
5518
 
 
5519
  TImgAuxSymFile = record
 
5520
    Name: array [0..IMAGE_SIZEOF_SYMBOL - 1] of BYTE;
 
5521
  end;
 
5522
 
 
5523
  TImgAuxSymSection = record
 
5524
    Length: DWORD;                         // section length
 
5525
    NumberOfRelocations: WORD;             // number of relocation entries
 
5526
    NumberOfLinenumbers: WORD;             // number of line numbers
 
5527
    CheckSum: DWORD;                       // checksum for communal
 
5528
    Number: SHORT;                         // section number to associate with
 
5529
    Selection: BYTE;                       // communal selection type
 
5530
  end;
 
5531
 
 
5532
  PIMAGE_AUX_SYMBOL = ^IMAGE_AUX_SYMBOL;
 
5533
  {$EXTERNALSYM PIMAGE_AUX_SYMBOL}
 
5534
  _IMAGE_AUX_SYMBOL = record
 
5535
    case Integer of
 
5536
      0: (Sym: TImgAuxSymSym);
 
5537
      1: (File_: TImgAuxSymFile);
 
5538
      2: (Section: TImgAuxSymSection);
 
5539
  end;
 
5540
  {$EXTERNALSYM _IMAGE_AUX_SYMBOL}
 
5541
  IMAGE_AUX_SYMBOL = _IMAGE_AUX_SYMBOL;
 
5542
  {$EXTERNALSYM IMAGE_AUX_SYMBOL}
 
5543
  TImageAuxSymbol = IMAGE_AUX_SYMBOL;
 
5544
  PImageAuxSymbol = PIMAGE_AUX_SYMBOL;
 
5545
 
 
5546
const
 
5547
  IMAGE_SIZEOF_AUX_SYMBOL = 18;
 
5548
  {$EXTERNALSYM IMAGE_SIZEOF_AUX_SYMBOL}
 
5549
 
 
5550
  IMAGE_AUX_SYMBOL_TYPE_TOKEN_DEF = 1;
 
5551
  {$EXTERNALSYM IMAGE_AUX_SYMBOL_TYPE_TOKEN_DEF}
 
5552
 
 
5553
type
 
5554
  IMAGE_AUX_SYMBOL_TYPE = DWORD;
 
5555
  {$EXTERNALSYM IMAGE_AUX_SYMBOL_TYPE}
 
5556
  TImageAuxSymbolType = IMAGE_AUX_SYMBOL_TYPE;
 
5557
 
 
5558
  IMAGE_AUX_SYMBOL_TOKEN_DEF = packed record
 
5559
    bAuxType: BYTE;                  // IMAGE_AUX_SYMBOL_TYPE
 
5560
    bReserved: BYTE;                 // Must be 0
 
5561
    SymbolTableIndex: DWORD;
 
5562
    rgbReserved: array [0..11] of BYTE;           // Must be 0
 
5563
  end;
 
5564
  {$EXTERNALSYM IMAGE_AUX_SYMBOL_TOKEN_DEF}
 
5565
  PIMAGE_AUX_SYMBOL_TOKEN_DEF = ^IMAGE_AUX_SYMBOL_TOKEN_DEF;
 
5566
  {$EXTERNALSYM PIMAGE_AUX_SYMBOL_TOKEN_DEF}
 
5567
  TImageAuxSymbolTokenDef = IMAGE_AUX_SYMBOL_TOKEN_DEF;
 
5568
  PImageAuxSymbolTokenDef = PIMAGE_AUX_SYMBOL_TOKEN_DEF;
 
5569
 
 
5570
//
 
5571
// Communal selection types.
 
5572
//
 
5573
 
 
5574
const
 
5575
  IMAGE_COMDAT_SELECT_NODUPLICATES = 1;
 
5576
  {$EXTERNALSYM IMAGE_COMDAT_SELECT_NODUPLICATES}
 
5577
  IMAGE_COMDAT_SELECT_ANY          = 2;
 
5578
  {$EXTERNALSYM IMAGE_COMDAT_SELECT_ANY}
 
5579
  IMAGE_COMDAT_SELECT_SAME_SIZE    = 3;
 
5580
  {$EXTERNALSYM IMAGE_COMDAT_SELECT_SAME_SIZE}
 
5581
  IMAGE_COMDAT_SELECT_EXACT_MATCH  = 4;
 
5582
  {$EXTERNALSYM IMAGE_COMDAT_SELECT_EXACT_MATCH}
 
5583
  IMAGE_COMDAT_SELECT_ASSOCIATIVE  = 5;
 
5584
  {$EXTERNALSYM IMAGE_COMDAT_SELECT_ASSOCIATIVE}
 
5585
  IMAGE_COMDAT_SELECT_LARGEST      = 6;
 
5586
  {$EXTERNALSYM IMAGE_COMDAT_SELECT_LARGEST}
 
5587
  IMAGE_COMDAT_SELECT_NEWEST       = 7;
 
5588
  {$EXTERNALSYM IMAGE_COMDAT_SELECT_NEWEST}
 
5589
 
 
5590
  IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY = 1;
 
5591
  {$EXTERNALSYM IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY}
 
5592
  IMAGE_WEAK_EXTERN_SEARCH_LIBRARY   = 2;
 
5593
  {$EXTERNALSYM IMAGE_WEAK_EXTERN_SEARCH_LIBRARY}
 
5594
  IMAGE_WEAK_EXTERN_SEARCH_ALIAS     = 3;
 
5595
  {$EXTERNALSYM IMAGE_WEAK_EXTERN_SEARCH_ALIAS}
 
5596
 
 
5597
//
 
5598
// Relocation format.
 
5599
//
 
5600
 
 
5601
type
 
5602
  TImgRelocUnion = record
 
5603
    case Integer of
 
5604
      0: (VirtualAddress: DWORD);
 
5605
      1: (RelocCount: DWORD);  // Set to the real count when IMAGE_SCN_LNK_NRELOC_OVFL is set
 
5606
  end;
 
5607
 
 
5608
  PIMAGE_RELOCATION = ^IMAGE_RELOCATION;
 
5609
  {$EXTERNALSYM PIMAGE_RELOCATION}
 
5610
  _IMAGE_RELOCATION = record
 
5611
    Union: TImgRelocUnion;
 
5612
    SymbolTableIndex: DWORD;
 
5613
    Type_: WORD;
 
5614
  end;
 
5615
  {$EXTERNALSYM _IMAGE_RELOCATION}
 
5616
  IMAGE_RELOCATION = _IMAGE_RELOCATION;
 
5617
  {$EXTERNALSYM IMAGE_RELOCATION}
 
5618
  TImageRelocation = IMAGE_RELOCATION;
 
5619
  PImageRelocation = PIMAGE_RELOCATION;
 
5620
 
 
5621
const
 
5622
  IMAGE_SIZEOF_RELOCATION = 10;
 
5623
  {$EXTERNALSYM IMAGE_SIZEOF_RELOCATION}
 
5624
 
 
5625
//
 
5626
// I386 relocation types.
 
5627
//
 
5628
 
 
5629
  IMAGE_REL_I386_ABSOLUTE = $0000; // Reference is absolute, no relocation is necessary
 
5630
  {$EXTERNALSYM IMAGE_REL_I386_ABSOLUTE}
 
5631
  IMAGE_REL_I386_DIR16    = $0001; // Direct 16-bit reference to the symbols virtual address
 
5632
  {$EXTERNALSYM IMAGE_REL_I386_DIR16}
 
5633
  IMAGE_REL_I386_REL16    = $0002; // PC-relative 16-bit reference to the symbols virtual address
 
5634
  {$EXTERNALSYM IMAGE_REL_I386_REL16}
 
5635
  IMAGE_REL_I386_DIR32    = $0006; // Direct 32-bit reference to the symbols virtual address
 
5636
  {$EXTERNALSYM IMAGE_REL_I386_DIR32}
 
5637
  IMAGE_REL_I386_DIR32NB  = $0007; // Direct 32-bit reference to the symbols virtual address, base not included
 
5638
  {$EXTERNALSYM IMAGE_REL_I386_DIR32NB}
 
5639
  IMAGE_REL_I386_SEG12    = $0009; // Direct 16-bit reference to the segment-selector bits of a 32-bit virtual address
 
5640
  {$EXTERNALSYM IMAGE_REL_I386_SEG12}
 
5641
  IMAGE_REL_I386_SECTION  = $000A;
 
5642
  {$EXTERNALSYM IMAGE_REL_I386_SECTION}
 
5643
  IMAGE_REL_I386_SECREL   = $000B;
 
5644
  {$EXTERNALSYM IMAGE_REL_I386_SECREL}
 
5645
  IMAGE_REL_MIPS_SECRELLO = $000C; // Low 16-bit section relative referemce (used for >32k TLS)
 
5646
  {$EXTERNALSYM IMAGE_REL_MIPS_SECRELLO}
 
5647
  IMAGE_REL_MIPS_SECRELHI = $000D; // High 16-bit section relative reference (used for >32k TLS)
 
5648
  {$EXTERNALSYM IMAGE_REL_MIPS_SECRELHI}
 
5649
  IMAGE_REL_I386_REL32    = $0014; // PC-relative 32-bit reference to the symbols virtual address
 
5650
  {$EXTERNALSYM IMAGE_REL_I386_REL32}
 
5651
 
 
5652
//
 
5653
// MIPS relocation types.
 
5654
//
 
5655
 
 
5656
  IMAGE_REL_MIPS_ABSOLUTE  = $0000; // Reference is absolute, no relocation is necessary
 
5657
  {$EXTERNALSYM IMAGE_REL_MIPS_ABSOLUTE}
 
5658
  IMAGE_REL_MIPS_REFHALF   = $0001;
 
5659
  {$EXTERNALSYM IMAGE_REL_MIPS_REFHALF}
 
5660
  IMAGE_REL_MIPS_REFWORD   = $0002;
 
5661
  {$EXTERNALSYM IMAGE_REL_MIPS_REFWORD}
 
5662
  IMAGE_REL_MIPS_JMPADDR   = $0003;
 
5663
  {$EXTERNALSYM IMAGE_REL_MIPS_JMPADDR}
 
5664
  IMAGE_REL_MIPS_REFHI     = $0004;
 
5665
  {$EXTERNALSYM IMAGE_REL_MIPS_REFHI}
 
5666
  IMAGE_REL_MIPS_REFLO     = $0005;
 
5667
  {$EXTERNALSYM IMAGE_REL_MIPS_REFLO}
 
5668
  IMAGE_REL_MIPS_GPREL     = $0006;
 
5669
  {$EXTERNALSYM IMAGE_REL_MIPS_GPREL}
 
5670
  IMAGE_REL_MIPS_LITERAL   = $0007;
 
5671
  {$EXTERNALSYM IMAGE_REL_MIPS_LITERAL}
 
5672
  IMAGE_REL_MIPS_SECTION   = $000A;
 
5673
  {$EXTERNALSYM IMAGE_REL_MIPS_SECTION}
 
5674
  IMAGE_REL_MIPS_SECREL    = $000B;
 
5675
  {$EXTERNALSYM IMAGE_REL_MIPS_SECREL}
 
5676
  //IMAGE_REL_MIPS_SECRELLO  = $000C; // Low 16-bit section relative referemce (used for >32k TLS)
 
5677
  //{$EXTERNALSYM IMAGE_REL_MIPS_SECRELLO}
 
5678
  //IMAGE_REL_MIPS_SECRELHI  = $000D; // High 16-bit section relative reference (used for >32k TLS)
 
5679
  //{$EXTERNALSYM IMAGE_REL_MIPS_SECRELHI}
 
5680
  IMAGE_REL_MIPS_TOKEN     = $000E; // clr token
 
5681
  {$EXTERNALSYM IMAGE_REL_MIPS_TOKEN}
 
5682
  IMAGE_REL_MIPS_JMPADDR16 = $0010;
 
5683
  {$EXTERNALSYM IMAGE_REL_MIPS_JMPADDR16}
 
5684
  IMAGE_REL_MIPS_REFWORDNB = $0022;
 
5685
  {$EXTERNALSYM IMAGE_REL_MIPS_REFWORDNB}
 
5686
  IMAGE_REL_MIPS_PAIR      = $0025;
 
5687
  {$EXTERNALSYM IMAGE_REL_MIPS_PAIR}
 
5688
 
 
5689
//
 
5690
// Alpha Relocation types.
 
5691
//
 
5692
 
 
5693
  IMAGE_REL_ALPHA_ABSOLUTE       = $0000;
 
5694
  {$EXTERNALSYM IMAGE_REL_ALPHA_ABSOLUTE}
 
5695
  IMAGE_REL_ALPHA_REFLONG        = $0001;
 
5696
  {$EXTERNALSYM IMAGE_REL_ALPHA_REFLONG}
 
5697
  IMAGE_REL_ALPHA_REFQUAD        = $0002;
 
5698
  {$EXTERNALSYM IMAGE_REL_ALPHA_REFQUAD}
 
5699
  IMAGE_REL_ALPHA_GPREL32        = $0003;
 
5700
  {$EXTERNALSYM IMAGE_REL_ALPHA_GPREL32}
 
5701
  IMAGE_REL_ALPHA_LITERAL        = $0004;
 
5702
  {$EXTERNALSYM IMAGE_REL_ALPHA_LITERAL}
 
5703
  IMAGE_REL_ALPHA_LITUSE         = $0005;
 
5704
  {$EXTERNALSYM IMAGE_REL_ALPHA_LITUSE}
 
5705
  IMAGE_REL_ALPHA_GPDISP         = $0006;
 
5706
  {$EXTERNALSYM IMAGE_REL_ALPHA_GPDISP}
 
5707
  IMAGE_REL_ALPHA_BRADDR         = $0007;
 
5708
  {$EXTERNALSYM IMAGE_REL_ALPHA_BRADDR}
 
5709
  IMAGE_REL_ALPHA_HINT           = $0008;
 
5710
  {$EXTERNALSYM IMAGE_REL_ALPHA_HINT}
 
5711
  IMAGE_REL_ALPHA_INLINE_REFLONG = $0009;
 
5712
  {$EXTERNALSYM IMAGE_REL_ALPHA_INLINE_REFLONG}
 
5713
  IMAGE_REL_ALPHA_REFHI          = $000A;
 
5714
  {$EXTERNALSYM IMAGE_REL_ALPHA_REFHI}
 
5715
  IMAGE_REL_ALPHA_REFLO          = $000B;
 
5716
  {$EXTERNALSYM IMAGE_REL_ALPHA_REFLO}
 
5717
  IMAGE_REL_ALPHA_PAIR           = $000C;
 
5718
  {$EXTERNALSYM IMAGE_REL_ALPHA_PAIR}
 
5719
  IMAGE_REL_ALPHA_MATCH          = $000D;
 
5720
  {$EXTERNALSYM IMAGE_REL_ALPHA_MATCH}
 
5721
  IMAGE_REL_ALPHA_SECTION        = $000E;
 
5722
  {$EXTERNALSYM IMAGE_REL_ALPHA_SECTION}
 
5723
  IMAGE_REL_ALPHA_SECREL         = $000F;
 
5724
  {$EXTERNALSYM IMAGE_REL_ALPHA_SECREL}
 
5725
  IMAGE_REL_ALPHA_REFLONGNB      = $0010;
 
5726
  {$EXTERNALSYM IMAGE_REL_ALPHA_REFLONGNB}
 
5727
  IMAGE_REL_ALPHA_SECRELLO       = $0011; // Low 16-bit section relative reference
 
5728
  {$EXTERNALSYM IMAGE_REL_ALPHA_SECRELLO}
 
5729
  IMAGE_REL_ALPHA_SECRELHI       = $0012; // High 16-bit section relative reference
 
5730
  {$EXTERNALSYM IMAGE_REL_ALPHA_SECRELHI}
 
5731
  IMAGE_REL_ALPHA_REFQ3          = $0013; // High 16 bits of 48 bit reference
 
5732
  {$EXTERNALSYM IMAGE_REL_ALPHA_REFQ3}
 
5733
  IMAGE_REL_ALPHA_REFQ2          = $0014; // Middle 16 bits of 48 bit reference
 
5734
  {$EXTERNALSYM IMAGE_REL_ALPHA_REFQ2}
 
5735
  IMAGE_REL_ALPHA_REFQ1          = $0015; // Low 16 bits of 48 bit reference
 
5736
  {$EXTERNALSYM IMAGE_REL_ALPHA_REFQ1}
 
5737
  IMAGE_REL_ALPHA_GPRELLO        = $0016; // Low 16-bit GP relative reference
 
5738
  {$EXTERNALSYM IMAGE_REL_ALPHA_GPRELLO}
 
5739
  IMAGE_REL_ALPHA_GPRELHI        = $0017; // High 16-bit GP relative reference
 
5740
  {$EXTERNALSYM IMAGE_REL_ALPHA_GPRELHI}
 
5741
 
 
5742
//
 
5743
// IBM PowerPC relocation types.
 
5744
//
 
5745
 
 
5746
  IMAGE_REL_PPC_ABSOLUTE = $0000; // NOP
 
5747
  {$EXTERNALSYM IMAGE_REL_PPC_ABSOLUTE}
 
5748
  IMAGE_REL_PPC_ADDR64   = $0001; // 64-bit address
 
5749
  {$EXTERNALSYM IMAGE_REL_PPC_ADDR64}
 
5750
  IMAGE_REL_PPC_ADDR32   = $0002; // 32-bit address
 
5751
  {$EXTERNALSYM IMAGE_REL_PPC_ADDR32}
 
5752
  IMAGE_REL_PPC_ADDR24   = $0003; // 26-bit address, shifted left 2 (branch absolute)
 
5753
  {$EXTERNALSYM IMAGE_REL_PPC_ADDR24}
 
5754
  IMAGE_REL_PPC_ADDR16   = $0004; // 16-bit address
 
5755
  {$EXTERNALSYM IMAGE_REL_PPC_ADDR16}
 
5756
  IMAGE_REL_PPC_ADDR14   = $0005; // 16-bit address, shifted left 2 (load doubleword)
 
5757
  {$EXTERNALSYM IMAGE_REL_PPC_ADDR14}
 
5758
  IMAGE_REL_PPC_REL24    = $0006; // 26-bit PC-relative offset, shifted left 2 (branch relative)
 
5759
  {$EXTERNALSYM IMAGE_REL_PPC_REL24}
 
5760
  IMAGE_REL_PPC_REL14    = $0007; // 16-bit PC-relative offset, shifted left 2 (br cond relative)
 
5761
  {$EXTERNALSYM IMAGE_REL_PPC_REL14}
 
5762
  IMAGE_REL_PPC_TOCREL16 = $0008; // 16-bit offset from TOC base
 
5763
  {$EXTERNALSYM IMAGE_REL_PPC_TOCREL16}
 
5764
  IMAGE_REL_PPC_TOCREL14 = $0009; // 16-bit offset from TOC base, shifted left 2 (load doubleword)
 
5765
  {$EXTERNALSYM IMAGE_REL_PPC_TOCREL14}
 
5766
 
 
5767
  IMAGE_REL_PPC_ADDR32NB = $000A; // 32-bit addr w/o image base
 
5768
  {$EXTERNALSYM IMAGE_REL_PPC_ADDR32NB}
 
5769
  IMAGE_REL_PPC_SECREL   = $000B; // va of containing section (as in an image sectionhdr)
 
5770
  {$EXTERNALSYM IMAGE_REL_PPC_SECREL}
 
5771
  IMAGE_REL_PPC_SECTION  = $000C; // sectionheader number
 
5772
  {$EXTERNALSYM IMAGE_REL_PPC_SECTION}
 
5773
  IMAGE_REL_PPC_IFGLUE   = $000D; // substitute TOC restore instruction iff symbol is glue code
 
5774
  {$EXTERNALSYM IMAGE_REL_PPC_IFGLUE}
 
5775
  IMAGE_REL_PPC_IMGLUE   = $000E; // symbol is glue code; virtual address is TOC restore instruction
 
5776
  {$EXTERNALSYM IMAGE_REL_PPC_IMGLUE}
 
5777
  IMAGE_REL_PPC_SECREL16 = $000F; // va of containing section (limited to 16 bits)
 
5778
  {$EXTERNALSYM IMAGE_REL_PPC_SECREL16}
 
5779
  IMAGE_REL_PPC_REFHI    = $0010;
 
5780
  {$EXTERNALSYM IMAGE_REL_PPC_REFHI}
 
5781
  IMAGE_REL_PPC_REFLO    = $0011;
 
5782
  {$EXTERNALSYM IMAGE_REL_PPC_REFLO}
 
5783
  IMAGE_REL_PPC_PAIR     = $0012;
 
5784
  {$EXTERNALSYM IMAGE_REL_PPC_PAIR}
 
5785
  IMAGE_REL_PPC_SECRELLO = $0013; // Low 16-bit section relative reference (used for >32k TLS)
 
5786
  {$EXTERNALSYM IMAGE_REL_PPC_SECRELLO}
 
5787
  IMAGE_REL_PPC_SECRELHI = $0014; // High 16-bit section relative reference (used for >32k TLS)
 
5788
  {$EXTERNALSYM IMAGE_REL_PPC_SECRELHI}
 
5789
  IMAGE_REL_PPC_GPREL    = $0015;
 
5790
  {$EXTERNALSYM IMAGE_REL_PPC_GPREL}
 
5791
  IMAGE_REL_PPC_TOKEN    = $0016; // clr token
 
5792
  {$EXTERNALSYM IMAGE_REL_PPC_TOKEN}
 
5793
 
 
5794
  IMAGE_REL_PPC_TYPEMASK = $00FF; // mask to isolate above values in IMAGE_RELOCATION.Type
 
5795
  {$EXTERNALSYM IMAGE_REL_PPC_TYPEMASK}
 
5796
 
 
5797
// Flag bits in IMAGE_RELOCATION.TYPE
 
5798
 
 
5799
  IMAGE_REL_PPC_NEG      = $0100; // subtract reloc value rather than adding it
 
5800
  {$EXTERNALSYM IMAGE_REL_PPC_NEG}
 
5801
  IMAGE_REL_PPC_BRTAKEN  = $0200; // fix branch prediction bit to predict branch taken
 
5802
  {$EXTERNALSYM IMAGE_REL_PPC_BRTAKEN}
 
5803
  IMAGE_REL_PPC_BRNTAKEN = $0400; // fix branch prediction bit to predict branch not taken
 
5804
  {$EXTERNALSYM IMAGE_REL_PPC_BRNTAKEN}
 
5805
  IMAGE_REL_PPC_TOCDEFN  = $0800; // toc slot defined in file (or, data in toc)
 
5806
  {$EXTERNALSYM IMAGE_REL_PPC_TOCDEFN}
 
5807
 
 
5808
//
 
5809
// Hitachi SH3 relocation types.
 
5810
//
 
5811
 
 
5812
  IMAGE_REL_SH3_ABSOLUTE        = $0000; // No relocation
 
5813
  {$EXTERNALSYM IMAGE_REL_SH3_ABSOLUTE}
 
5814
  IMAGE_REL_SH3_DIRECT16        = $0001; // 16 bit direct
 
5815
  {$EXTERNALSYM IMAGE_REL_SH3_DIRECT16}
 
5816
  IMAGE_REL_SH3_DIRECT32        = $0002; // 32 bit direct
 
5817
  {$EXTERNALSYM IMAGE_REL_SH3_DIRECT32}
 
5818
  IMAGE_REL_SH3_DIRECT8         = $0003; // 8 bit direct, -128..255
 
5819
  {$EXTERNALSYM IMAGE_REL_SH3_DIRECT8}
 
5820
  IMAGE_REL_SH3_DIRECT8_WORD    = $0004; // 8 bit direct .W (0 ext.)
 
5821
  {$EXTERNALSYM IMAGE_REL_SH3_DIRECT8_WORD}
 
5822
  IMAGE_REL_SH3_DIRECT8_LONG    = $0005; // 8 bit direct .L (0 ext.)
 
5823
  {$EXTERNALSYM IMAGE_REL_SH3_DIRECT8_LONG}
 
5824
  IMAGE_REL_SH3_DIRECT4         = $0006; // 4 bit direct (0 ext.)
 
5825
  {$EXTERNALSYM IMAGE_REL_SH3_DIRECT4}
 
5826
  IMAGE_REL_SH3_DIRECT4_WORD    = $0007; // 4 bit direct .W (0 ext.)
 
5827
  {$EXTERNALSYM IMAGE_REL_SH3_DIRECT4_WORD}
 
5828
  IMAGE_REL_SH3_DIRECT4_LONG    = $0008; // 4 bit direct .L (0 ext.)
 
5829
  {$EXTERNALSYM IMAGE_REL_SH3_DIRECT4_LONG}
 
5830
  IMAGE_REL_SH3_PCREL8_WORD     = $0009; // 8 bit PC relative .W
 
5831
  {$EXTERNALSYM IMAGE_REL_SH3_PCREL8_WORD}
 
5832
  IMAGE_REL_SH3_PCREL8_LONG     = $000A; // 8 bit PC relative .L
 
5833
  {$EXTERNALSYM IMAGE_REL_SH3_PCREL8_LONG}
 
5834
  IMAGE_REL_SH3_PCREL12_WORD    = $000B; // 12 LSB PC relative .W
 
5835
  {$EXTERNALSYM IMAGE_REL_SH3_PCREL12_WORD}
 
5836
  IMAGE_REL_SH3_STARTOF_SECTION = $000C; // Start of EXE section
 
5837
  {$EXTERNALSYM IMAGE_REL_SH3_STARTOF_SECTION}
 
5838
  IMAGE_REL_SH3_SIZEOF_SECTION  = $000D; // Size of EXE section
 
5839
  {$EXTERNALSYM IMAGE_REL_SH3_SIZEOF_SECTION}
 
5840
  IMAGE_REL_SH3_SECTION         = $000E; // Section table index
 
5841
  {$EXTERNALSYM IMAGE_REL_SH3_SECTION}
 
5842
  IMAGE_REL_SH3_SECREL          = $000F; // Offset within section
 
5843
  {$EXTERNALSYM IMAGE_REL_SH3_SECREL}
 
5844
  IMAGE_REL_SH3_DIRECT32_NB     = $0010; // 32 bit direct not based
 
5845
  {$EXTERNALSYM IMAGE_REL_SH3_DIRECT32_NB}
 
5846
  IMAGE_REL_SH3_GPREL4_LONG     = $0011; // GP-relative addressing
 
5847
  {$EXTERNALSYM IMAGE_REL_SH3_GPREL4_LONG}
 
5848
  IMAGE_REL_SH3_TOKEN           = $0012; // clr token
 
5849
  {$EXTERNALSYM IMAGE_REL_SH3_TOKEN}
 
5850
 
 
5851
  IMAGE_REL_ARM_ABSOLUTE = $0000; // No relocation required
 
5852
  {$EXTERNALSYM IMAGE_REL_ARM_ABSOLUTE}
 
5853
  IMAGE_REL_ARM_ADDR32   = $0001; // 32 bit address
 
5854
  {$EXTERNALSYM IMAGE_REL_ARM_ADDR32}
 
5855
  IMAGE_REL_ARM_ADDR32NB = $0002; // 32 bit address w/o image base
 
5856
  {$EXTERNALSYM IMAGE_REL_ARM_ADDR32NB}
 
5857
  IMAGE_REL_ARM_BRANCH24 = $0003; // 24 bit offset << 2 & sign ext.
 
5858
  {$EXTERNALSYM IMAGE_REL_ARM_BRANCH24}
 
5859
  IMAGE_REL_ARM_BRANCH11 = $0004; // Thumb: 2 11 bit offsets
 
5860
  {$EXTERNALSYM IMAGE_REL_ARM_BRANCH11}
 
5861
  IMAGE_REL_ARM_TOKEN    = $0005; // clr token
 
5862
  {$EXTERNALSYM IMAGE_REL_ARM_TOKEN}
 
5863
  IMAGE_REL_ARM_GPREL12  = $0006; // GP-relative addressing (ARM)
 
5864
  {$EXTERNALSYM IMAGE_REL_ARM_GPREL12}
 
5865
  IMAGE_REL_ARM_GPREL7   = $0007; // GP-relative addressing (Thumb)
 
5866
  {$EXTERNALSYM IMAGE_REL_ARM_GPREL7}
 
5867
  IMAGE_REL_ARM_BLX24    = $0008;
 
5868
  {$EXTERNALSYM IMAGE_REL_ARM_BLX24}
 
5869
  IMAGE_REL_ARM_BLX11    = $0009;
 
5870
  {$EXTERNALSYM IMAGE_REL_ARM_BLX11}
 
5871
  IMAGE_REL_ARM_SECTION  = $000E; // Section table index
 
5872
  {$EXTERNALSYM IMAGE_REL_ARM_SECTION}
 
5873
  IMAGE_REL_ARM_SECREL   = $000F; // Offset within section
 
5874
  {$EXTERNALSYM IMAGE_REL_ARM_SECREL}
 
5875
 
 
5876
  IMAGE_REL_AM_ABSOLUTE = $0000;
 
5877
  {$EXTERNALSYM IMAGE_REL_AM_ABSOLUTE}
 
5878
  IMAGE_REL_AM_ADDR32   = $0001;
 
5879
  {$EXTERNALSYM IMAGE_REL_AM_ADDR32}
 
5880
  IMAGE_REL_AM_ADDR32NB = $0002;
 
5881
  {$EXTERNALSYM IMAGE_REL_AM_ADDR32NB}
 
5882
  IMAGE_REL_AM_CALL32   = $0003;
 
5883
  {$EXTERNALSYM IMAGE_REL_AM_CALL32}
 
5884
  IMAGE_REL_AM_FUNCINFO = $0004;
 
5885
  {$EXTERNALSYM IMAGE_REL_AM_FUNCINFO}
 
5886
  IMAGE_REL_AM_REL32_1  = $0005;
 
5887
  {$EXTERNALSYM IMAGE_REL_AM_REL32_1}
 
5888
  IMAGE_REL_AM_REL32_2  = $0006;
 
5889
  {$EXTERNALSYM IMAGE_REL_AM_REL32_2}
 
5890
  IMAGE_REL_AM_SECREL   = $0007;
 
5891
  {$EXTERNALSYM IMAGE_REL_AM_SECREL}
 
5892
  IMAGE_REL_AM_SECTION  = $0008;
 
5893
  {$EXTERNALSYM IMAGE_REL_AM_SECTION}
 
5894
  IMAGE_REL_AM_TOKEN    = $0009;
 
5895
  {$EXTERNALSYM IMAGE_REL_AM_TOKEN}
 
5896
 
 
5897
//
 
5898
// X86-64 relocations
 
5899
//
 
5900
 
 
5901
  IMAGE_REL_AMD64_ABSOLUTE = $0000; // Reference is absolute, no relocation is necessary
 
5902
  {$EXTERNALSYM IMAGE_REL_AMD64_ABSOLUTE}
 
5903
  IMAGE_REL_AMD64_ADDR64   = $0001; // 64-bit address (VA).
 
5904
  {$EXTERNALSYM IMAGE_REL_AMD64_ADDR64}
 
5905
  IMAGE_REL_AMD64_ADDR32   = $0002; // 32-bit address (VA).
 
5906
  {$EXTERNALSYM IMAGE_REL_AMD64_ADDR32}
 
5907
  IMAGE_REL_AMD64_ADDR32NB = $0003; // 32-bit address w/o image base (RVA).
 
5908
  {$EXTERNALSYM IMAGE_REL_AMD64_ADDR32NB}
 
5909
  IMAGE_REL_AMD64_REL32    = $0004; // 32-bit relative address from byte following reloc
 
5910
  {$EXTERNALSYM IMAGE_REL_AMD64_REL32}
 
5911
  IMAGE_REL_AMD64_REL32_1  = $0005; // 32-bit relative address from byte distance 1 from reloc
 
5912
  {$EXTERNALSYM IMAGE_REL_AMD64_REL32_1}
 
5913
  IMAGE_REL_AMD64_REL32_2  = $0006; // 32-bit relative address from byte distance 2 from reloc
 
5914
  {$EXTERNALSYM IMAGE_REL_AMD64_REL32_2}
 
5915
  IMAGE_REL_AMD64_REL32_3  = $0007; // 32-bit relative address from byte distance 3 from reloc
 
5916
  {$EXTERNALSYM IMAGE_REL_AMD64_REL32_3}
 
5917
  IMAGE_REL_AMD64_REL32_4  = $0008; // 32-bit relative address from byte distance 4 from reloc
 
5918
  {$EXTERNALSYM IMAGE_REL_AMD64_REL32_4}
 
5919
  IMAGE_REL_AMD64_REL32_5  = $0009; // 32-bit relative address from byte distance 5 from reloc
 
5920
  {$EXTERNALSYM IMAGE_REL_AMD64_REL32_5}
 
5921
  IMAGE_REL_AMD64_SECTION  = $000A; // Section index
 
5922
  {$EXTERNALSYM IMAGE_REL_AMD64_SECTION}
 
5923
  IMAGE_REL_AMD64_SECREL   = $000B; // 32 bit offset from base of section containing target
 
5924
  {$EXTERNALSYM IMAGE_REL_AMD64_SECREL}
 
5925
  IMAGE_REL_AMD64_SECREL7  = $000C; // 7 bit unsigned offset from base of section containing target
 
5926
  {$EXTERNALSYM IMAGE_REL_AMD64_SECREL7}
 
5927
  IMAGE_REL_AMD64_TOKEN    = $000D; // 32 bit metadata token
 
5928
  {$EXTERNALSYM IMAGE_REL_AMD64_TOKEN}
 
5929
  IMAGE_REL_AMD64_SREL32   = $000E;  // 32 bit signed span-dependent value emitted into object
 
5930
  {$EXTERNALSYM IMAGE_REL_AMD64_SREL32}
 
5931
  IMAGE_REL_AMD64_PAIR     = $000F;
 
5932
  {$EXTERNALSYM IMAGE_REL_AMD64_PAIR}
 
5933
  IMAGE_REL_AMD64_SSPAN32  = $0010;  // 32 bit signed span-dependent value applied at link time
 
5934
  {$EXTERNALSYM IMAGE_REL_AMD64_SSPAN32}
 
5935
 
 
5936
//
 
5937
// IA64 relocation types.
 
5938
//
 
5939
 
 
5940
  IMAGE_REL_IA64_ABSOLUTE  = $0000;
 
5941
  {$EXTERNALSYM IMAGE_REL_IA64_ABSOLUTE}
 
5942
  IMAGE_REL_IA64_IMM14     = $0001;
 
5943
  {$EXTERNALSYM IMAGE_REL_IA64_IMM14}
 
5944
  IMAGE_REL_IA64_IMM22     = $0002;
 
5945
  {$EXTERNALSYM IMAGE_REL_IA64_IMM22}
 
5946
  IMAGE_REL_IA64_IMM64     = $0003;
 
5947
  {$EXTERNALSYM IMAGE_REL_IA64_IMM64}
 
5948
  IMAGE_REL_IA64_DIR32     = $0004;
 
5949
  {$EXTERNALSYM IMAGE_REL_IA64_DIR32}
 
5950
  IMAGE_REL_IA64_DIR64     = $0005;
 
5951
  {$EXTERNALSYM IMAGE_REL_IA64_DIR64}
 
5952
  IMAGE_REL_IA64_PCREL21B  = $0006;
 
5953
  {$EXTERNALSYM IMAGE_REL_IA64_PCREL21B}
 
5954
  IMAGE_REL_IA64_PCREL21M  = $0007;
 
5955
  {$EXTERNALSYM IMAGE_REL_IA64_PCREL21M}
 
5956
  IMAGE_REL_IA64_PCREL21F  = $0008;
 
5957
  {$EXTERNALSYM IMAGE_REL_IA64_PCREL21F}
 
5958
  IMAGE_REL_IA64_GPREL22   = $0009;
 
5959
  {$EXTERNALSYM IMAGE_REL_IA64_GPREL22}
 
5960
  IMAGE_REL_IA64_LTOFF22   = $000A;
 
5961
  {$EXTERNALSYM IMAGE_REL_IA64_LTOFF22}
 
5962
  IMAGE_REL_IA64_SECTION   = $000B;
 
5963
  {$EXTERNALSYM IMAGE_REL_IA64_SECTION}
 
5964
  IMAGE_REL_IA64_SECREL22  = $000C;
 
5965
  {$EXTERNALSYM IMAGE_REL_IA64_SECREL22}
 
5966
  IMAGE_REL_IA64_SECREL64I = $000D;
 
5967
  {$EXTERNALSYM IMAGE_REL_IA64_SECREL64I}
 
5968
  IMAGE_REL_IA64_SECREL32  = $000E;
 
5969
  {$EXTERNALSYM IMAGE_REL_IA64_SECREL32}
 
5970
 
 
5971
//
 
5972
 
 
5973
  IMAGE_REL_IA64_DIR32NB    = $0010;
 
5974
  {$EXTERNALSYM IMAGE_REL_IA64_DIR32NB}
 
5975
  IMAGE_REL_IA64_SREL14     = $0011;
 
5976
  {$EXTERNALSYM IMAGE_REL_IA64_SREL14}
 
5977
  IMAGE_REL_IA64_SREL22     = $0012;
 
5978
  {$EXTERNALSYM IMAGE_REL_IA64_SREL22}
 
5979
  IMAGE_REL_IA64_SREL32     = $0013;
 
5980
  {$EXTERNALSYM IMAGE_REL_IA64_SREL32}
 
5981
  IMAGE_REL_IA64_UREL32     = $0014;
 
5982
  {$EXTERNALSYM IMAGE_REL_IA64_UREL32}
 
5983
  IMAGE_REL_IA64_PCREL60X   = $0015; // This is always a BRL and never converted
 
5984
  {$EXTERNALSYM IMAGE_REL_IA64_PCREL60X}
 
5985
  IMAGE_REL_IA64_PCREL60B   = $0016; // If possible, convert to MBB bundle with NOP.B in slot 1
 
5986
  {$EXTERNALSYM IMAGE_REL_IA64_PCREL60B}
 
5987
  IMAGE_REL_IA64_PCREL60F   = $0017; // If possible, convert to MFB bundle with NOP.F in slot 1
 
5988
  {$EXTERNALSYM IMAGE_REL_IA64_PCREL60F}
 
5989
  IMAGE_REL_IA64_PCREL60I   = $0018; // If possible, convert to MIB bundle with NOP.I in slot 1
 
5990
  {$EXTERNALSYM IMAGE_REL_IA64_PCREL60I}
 
5991
  IMAGE_REL_IA64_PCREL60M   = $0019; // If possible, convert to MMB bundle with NOP.M in slot 1
 
5992
  {$EXTERNALSYM IMAGE_REL_IA64_PCREL60M}
 
5993
  IMAGE_REL_IA64_IMMGPREL64 = $001A;
 
5994
  {$EXTERNALSYM IMAGE_REL_IA64_IMMGPREL64}
 
5995
  IMAGE_REL_IA64_TOKEN      = $001B; // clr token
 
5996
  {$EXTERNALSYM IMAGE_REL_IA64_TOKEN}
 
5997
  IMAGE_REL_IA64_GPREL32    = $001C;
 
5998
  {$EXTERNALSYM IMAGE_REL_IA64_GPREL32}
 
5999
  IMAGE_REL_IA64_ADDEND     = $001F;
 
6000
  {$EXTERNALSYM IMAGE_REL_IA64_ADDEND}
 
6001
 
 
6002
//
 
6003
// CEF relocation types.
 
6004
//
 
6005
 
 
6006
  IMAGE_REL_CEF_ABSOLUTE = $0000; // Reference is absolute, no relocation is necessary
 
6007
  {$EXTERNALSYM IMAGE_REL_CEF_ABSOLUTE}
 
6008
  IMAGE_REL_CEF_ADDR32   = $0001; // 32-bit address (VA).
 
6009
  {$EXTERNALSYM IMAGE_REL_CEF_ADDR32}
 
6010
  IMAGE_REL_CEF_ADDR64   = $0002; // 64-bit address (VA).
 
6011
  {$EXTERNALSYM IMAGE_REL_CEF_ADDR64}
 
6012
  IMAGE_REL_CEF_ADDR32NB = $0003; // 32-bit address w/o image base (RVA).
 
6013
  {$EXTERNALSYM IMAGE_REL_CEF_ADDR32NB}
 
6014
  IMAGE_REL_CEF_SECTION  = $0004; // Section index
 
6015
  {$EXTERNALSYM IMAGE_REL_CEF_SECTION}
 
6016
  IMAGE_REL_CEF_SECREL   = $0005; // 32 bit offset from base of section containing target
 
6017
  {$EXTERNALSYM IMAGE_REL_CEF_SECREL}
 
6018
  IMAGE_REL_CEF_TOKEN    = $0006; // 32 bit metadata token
 
6019
  {$EXTERNALSYM IMAGE_REL_CEF_TOKEN}
 
6020
 
 
6021
//
 
6022
// clr relocation types.
 
6023
//
 
6024
 
 
6025
  IMAGE_REL_CEE_ABSOLUTE = $0000; // Reference is absolute, no relocation is necessary
 
6026
  {$EXTERNALSYM IMAGE_REL_CEE_ABSOLUTE}
 
6027
  IMAGE_REL_CEE_ADDR32   = $0001; // 32-bit address (VA).
 
6028
  {$EXTERNALSYM IMAGE_REL_CEE_ADDR32}
 
6029
  IMAGE_REL_CEE_ADDR64   = $0002; // 64-bit address (VA).
 
6030
  {$EXTERNALSYM IMAGE_REL_CEE_ADDR64}
 
6031
  IMAGE_REL_CEE_ADDR32NB = $0003; // 32-bit address w/o image base (RVA).
 
6032
  {$EXTERNALSYM IMAGE_REL_CEE_ADDR32NB}
 
6033
  IMAGE_REL_CEE_SECTION  = $0004; // Section index
 
6034
  {$EXTERNALSYM IMAGE_REL_CEE_SECTION}
 
6035
  IMAGE_REL_CEE_SECREL   = $0005; // 32 bit offset from base of section containing target
 
6036
  {$EXTERNALSYM IMAGE_REL_CEE_SECREL}
 
6037
  IMAGE_REL_CEE_TOKEN    = $0006; // 32 bit metadata token
 
6038
  {$EXTERNALSYM IMAGE_REL_CEE_TOKEN}
 
6039
 
 
6040
  IMAGE_REL_M32R_ABSOLUTE = $0000; // No relocation required
 
6041
  {$EXTERNALSYM IMAGE_REL_M32R_ABSOLUTE}
 
6042
  IMAGE_REL_M32R_ADDR32   = $0001; // 32 bit address
 
6043
  {$EXTERNALSYM IMAGE_REL_M32R_ADDR32}
 
6044
  IMAGE_REL_M32R_ADDR32NB = $0002; // 32 bit address w/o image base
 
6045
  {$EXTERNALSYM IMAGE_REL_M32R_ADDR32NB}
 
6046
  IMAGE_REL_M32R_ADDR24   = $0003; // 24 bit address
 
6047
  {$EXTERNALSYM IMAGE_REL_M32R_ADDR24}
 
6048
  IMAGE_REL_M32R_GPREL16  = $0004; // GP relative addressing
 
6049
  {$EXTERNALSYM IMAGE_REL_M32R_GPREL16}
 
6050
  IMAGE_REL_M32R_PCREL24  = $0005; // 24 bit offset << 2 & sign ext.
 
6051
  {$EXTERNALSYM IMAGE_REL_M32R_PCREL24}
 
6052
  IMAGE_REL_M32R_PCREL16  = $0006; // 16 bit offset << 2 & sign ext.
 
6053
  {$EXTERNALSYM IMAGE_REL_M32R_PCREL16}
 
6054
  IMAGE_REL_M32R_PCREL8   = $0007; // 8 bit offset << 2 & sign ext.
 
6055
  {$EXTERNALSYM IMAGE_REL_M32R_PCREL8}
 
6056
  IMAGE_REL_M32R_REFHALF  = $0008; // 16 MSBs
 
6057
  {$EXTERNALSYM IMAGE_REL_M32R_REFHALF}
 
6058
  IMAGE_REL_M32R_REFHI    = $0009; // 16 MSBs; adj for LSB sign ext.
 
6059
  {$EXTERNALSYM IMAGE_REL_M32R_REFHI}
 
6060
  IMAGE_REL_M32R_REFLO    = $000A; // 16 LSBs
 
6061
  {$EXTERNALSYM IMAGE_REL_M32R_REFLO}
 
6062
  IMAGE_REL_M32R_PAIR     = $000B; // Link HI and LO
 
6063
  {$EXTERNALSYM IMAGE_REL_M32R_PAIR}
 
6064
  IMAGE_REL_M32R_SECTION  = $000C; // Section table index
 
6065
  {$EXTERNALSYM IMAGE_REL_M32R_SECTION}
 
6066
  IMAGE_REL_M32R_SECREL32 = $000D; // 32 bit section relative reference
 
6067
  {$EXTERNALSYM IMAGE_REL_M32R_SECREL32}
 
6068
  IMAGE_REL_M32R_TOKEN    = $000E; // clr token
 
6069
  {$EXTERNALSYM IMAGE_REL_M32R_TOKEN}
 
6070
 
 
6071
// Please contact INTEL to get IA64-specific information
 
6072
 
 
6073
(* TODO
 
6074
#define EXT_IMM64(Value, Address, Size, InstPos, ValPos)
 
6075
    Value |= (((ULONGLONG)((*(Address) >> InstPos) & (((ULONGLONG)1 << Size) - 1))) << ValPos)  // Intel-IA64-Filler
 
6076
 
 
6077
#define INS_IMM64(Value, Address, Size, InstPos, ValPos)  /* Intel-IA64-Filler */\
 
6078
    *(PDWORD)Address = (*(PDWORD)Address & ~(((1 << Size) - 1) << InstPos)) | /* Intel-IA64-Filler */\
 
6079
          ((DWORD)((((ULONGLONG)Value >> ValPos) & (((ULONGLONG)1 << Size) - 1))) << InstPos)  // Intel-IA64-Filler
 
6080
*)
 
6081
 
 
6082
const
 
6083
  EMARCH_ENC_I17_IMM7B_INST_WORD_X     = 3; // Intel-IA64-Filler
 
6084
  {$EXTERNALSYM EMARCH_ENC_I17_IMM7B_INST_WORD_X}
 
6085
  EMARCH_ENC_I17_IMM7B_SIZE_X          = 7; // Intel-IA64-Filler
 
6086
  {$EXTERNALSYM EMARCH_ENC_I17_IMM7B_SIZE_X}
 
6087
  EMARCH_ENC_I17_IMM7B_INST_WORD_POS_X = 4; // Intel-IA64-Filler
 
6088
  {$EXTERNALSYM EMARCH_ENC_I17_IMM7B_INST_WORD_POS_X}
 
6089
  EMARCH_ENC_I17_IMM7B_VAL_POS_X       = 0; // Intel-IA64-Filler
 
6090
  {$EXTERNALSYM EMARCH_ENC_I17_IMM7B_VAL_POS_X}
 
6091
 
 
6092
  EMARCH_ENC_I17_IMM9D_INST_WORD_X     = 3; // Intel-IA64-Filler
 
6093
  {$EXTERNALSYM EMARCH_ENC_I17_IMM9D_INST_WORD_X}
 
6094
  EMARCH_ENC_I17_IMM9D_SIZE_X          = 9; // Intel-IA64-Filler
 
6095
  {$EXTERNALSYM EMARCH_ENC_I17_IMM9D_SIZE_X}
 
6096
  EMARCH_ENC_I17_IMM9D_INST_WORD_POS_X = 18; // Intel-IA64-Filler
 
6097
  {$EXTERNALSYM EMARCH_ENC_I17_IMM9D_INST_WORD_POS_X}
 
6098
  EMARCH_ENC_I17_IMM9D_VAL_POS_X       = 7; // Intel-IA64-Filler
 
6099
  {$EXTERNALSYM EMARCH_ENC_I17_IMM9D_VAL_POS_X}
 
6100
 
 
6101
  EMARCH_ENC_I17_IMM5C_INST_WORD_X     = 3; // Intel-IA64-Filler
 
6102
  {$EXTERNALSYM EMARCH_ENC_I17_IMM5C_INST_WORD_X}
 
6103
  EMARCH_ENC_I17_IMM5C_SIZE_X          = 5; // Intel-IA64-Filler
 
6104
  {$EXTERNALSYM EMARCH_ENC_I17_IMM5C_SIZE_X}
 
6105
  EMARCH_ENC_I17_IMM5C_INST_WORD_POS_X = 13; // Intel-IA64-Filler
 
6106
  {$EXTERNALSYM EMARCH_ENC_I17_IMM5C_INST_WORD_POS_X}
 
6107
  EMARCH_ENC_I17_IMM5C_VAL_POS_X       = 16; // Intel-IA64-Filler
 
6108
  {$EXTERNALSYM EMARCH_ENC_I17_IMM5C_VAL_POS_X}
 
6109
 
 
6110
  EMARCH_ENC_I17_IC_INST_WORD_X     = 3; // Intel-IA64-Filler
 
6111
  {$EXTERNALSYM EMARCH_ENC_I17_IC_INST_WORD_X}
 
6112
  EMARCH_ENC_I17_IC_SIZE_X          = 1; // Intel-IA64-Filler
 
6113
  {$EXTERNALSYM EMARCH_ENC_I17_IC_SIZE_X}
 
6114
  EMARCH_ENC_I17_IC_INST_WORD_POS_X = 12; // Intel-IA64-Filler
 
6115
  {$EXTERNALSYM EMARCH_ENC_I17_IC_INST_WORD_POS_X}
 
6116
  EMARCH_ENC_I17_IC_VAL_POS_X       = 21; // Intel-IA64-Filler
 
6117
  {$EXTERNALSYM EMARCH_ENC_I17_IC_VAL_POS_X}
 
6118
 
 
6119
  EMARCH_ENC_I17_IMM41a_INST_WORD_X     = 1; // Intel-IA64-Filler
 
6120
  {$EXTERNALSYM EMARCH_ENC_I17_IMM41a_INST_WORD_X}
 
6121
  EMARCH_ENC_I17_IMM41a_SIZE_X          = 10; // Intel-IA64-Filler
 
6122
  {$EXTERNALSYM EMARCH_ENC_I17_IMM41a_SIZE_X}
 
6123
  EMARCH_ENC_I17_IMM41a_INST_WORD_POS_X = 14; // Intel-IA64-Filler
 
6124
  {$EXTERNALSYM EMARCH_ENC_I17_IMM41a_INST_WORD_POS_X}
 
6125
  EMARCH_ENC_I17_IMM41a_VAL_POS_X       = 22; // Intel-IA64-Filler
 
6126
  {$EXTERNALSYM EMARCH_ENC_I17_IMM41a_VAL_POS_X}
 
6127
 
 
6128
  EMARCH_ENC_I17_IMM41b_INST_WORD_X     = 1; // Intel-IA64-Filler
 
6129
  {$EXTERNALSYM EMARCH_ENC_I17_IMM41b_INST_WORD_X}
 
6130
  EMARCH_ENC_I17_IMM41b_SIZE_X          = 8; // Intel-IA64-Filler
 
6131
  {$EXTERNALSYM EMARCH_ENC_I17_IMM41b_SIZE_X}
 
6132
  EMARCH_ENC_I17_IMM41b_INST_WORD_POS_X = 24; // Intel-IA64-Filler
 
6133
  {$EXTERNALSYM EMARCH_ENC_I17_IMM41b_INST_WORD_POS_X}
 
6134
  EMARCH_ENC_I17_IMM41b_VAL_POS_X       = 32; // Intel-IA64-Filler
 
6135
  {$EXTERNALSYM EMARCH_ENC_I17_IMM41b_VAL_POS_X}
 
6136
 
 
6137
  EMARCH_ENC_I17_IMM41c_INST_WORD_X     = 2; // Intel-IA64-Filler
 
6138
  {$EXTERNALSYM EMARCH_ENC_I17_IMM41c_INST_WORD_X}
 
6139
  EMARCH_ENC_I17_IMM41c_SIZE_X          = 23; // Intel-IA64-Filler
 
6140
  {$EXTERNALSYM EMARCH_ENC_I17_IMM41c_SIZE_X}
 
6141
  EMARCH_ENC_I17_IMM41c_INST_WORD_POS_X = 0; // Intel-IA64-Filler
 
6142
  {$EXTERNALSYM EMARCH_ENC_I17_IMM41c_INST_WORD_POS_X}
 
6143
  EMARCH_ENC_I17_IMM41c_VAL_POS_X       = 40; // Intel-IA64-Filler
 
6144
  {$EXTERNALSYM EMARCH_ENC_I17_IMM41c_VAL_POS_X}
 
6145
 
 
6146
  EMARCH_ENC_I17_SIGN_INST_WORD_X     = 3; // Intel-IA64-Filler
 
6147
  {$EXTERNALSYM EMARCH_ENC_I17_SIGN_INST_WORD_X}
 
6148
  EMARCH_ENC_I17_SIGN_SIZE_X          = 1; // Intel-IA64-Filler
 
6149
  {$EXTERNALSYM EMARCH_ENC_I17_SIGN_SIZE_X}
 
6150
  EMARCH_ENC_I17_SIGN_INST_WORD_POS_X = 27; // Intel-IA64-Filler
 
6151
  {$EXTERNALSYM EMARCH_ENC_I17_SIGN_INST_WORD_POS_X}
 
6152
  EMARCH_ENC_I17_SIGN_VAL_POS_X       = 63; // Intel-IA64-Filler
 
6153
  {$EXTERNALSYM EMARCH_ENC_I17_SIGN_VAL_POS_X}
 
6154
 
 
6155
//
 
6156
// Line number format.
 
6157
//
 
6158
 
 
6159
type
 
6160
  TImgLineNoType = record
 
6161
    case Integer of
 
6162
      0: (SymbolTableIndex: DWORD);               // Symbol table index of function name if Linenumber is 0.
 
6163
      1: (VirtualAddress: DWORD);                 // Virtual address of line number.
 
6164
  end;
 
6165
 
 
6166
  PIMAGE_LINENUMBER = ^IMAGE_LINENUMBER;
 
6167
  {$EXTERNALSYM PIMAGE_LINENUMBER}
 
6168
  _IMAGE_LINENUMBER = record
 
6169
    Type_: TImgLineNoType;
 
6170
    Linenumber: WORD;                         // Line number.
 
6171
  end;
 
6172
  {$EXTERNALSYM _IMAGE_LINENUMBER}
 
6173
  IMAGE_LINENUMBER = _IMAGE_LINENUMBER;
 
6174
  {$EXTERNALSYM IMAGE_LINENUMBER}
 
6175
  TImageLineNumber = IMAGE_LINENUMBER;
 
6176
  PImageLineNumber = PIMAGE_LINENUMBER;
 
6177
 
 
6178
const
 
6179
  IMAGE_SIZEOF_LINENUMBER = 6;
 
6180
  {$EXTERNALSYM IMAGE_SIZEOF_LINENUMBER}
 
6181
 
 
6182
// #include "poppack.h"                        // Back to 4 byte packing
 
6183
 
 
6184
//
 
6185
// Based relocation format.
 
6186
//
 
6187
 
 
6188
type
 
6189
  PIMAGE_BASE_RELOCATION = ^IMAGE_BASE_RELOCATION;
 
6190
  {$EXTERNALSYM PIMAGE_BASE_RELOCATION}
 
6191
  _IMAGE_BASE_RELOCATION = record
 
6192
    VirtualAddress: DWORD;
 
6193
    SizeOfBlock: DWORD;
 
6194
    //  WORD    TypeOffset[1];
 
6195
  end;
 
6196
  {$EXTERNALSYM _IMAGE_BASE_RELOCATION}
 
6197
  IMAGE_BASE_RELOCATION = _IMAGE_BASE_RELOCATION;
 
6198
  {$EXTERNALSYM IMAGE_BASE_RELOCATION}
 
6199
  TImageBaseRelocation = IMAGE_BASE_RELOCATION;
 
6200
  PImageBaseRelocation = PIMAGE_BASE_RELOCATION;
 
6201
 
 
6202
const
 
6203
  IMAGE_SIZEOF_BASE_RELOCATION = 8;
 
6204
  {$EXTERNALSYM IMAGE_SIZEOF_BASE_RELOCATION}
 
6205
 
 
6206
//
 
6207
// Based relocation types.
 
6208
//
 
6209
 
 
6210
  IMAGE_REL_BASED_ABSOLUTE     = 0;
 
6211
  {$EXTERNALSYM IMAGE_REL_BASED_ABSOLUTE}
 
6212
  IMAGE_REL_BASED_HIGH         = 1;
 
6213
  {$EXTERNALSYM IMAGE_REL_BASED_HIGH}
 
6214
  IMAGE_REL_BASED_LOW          = 2;
 
6215
  {$EXTERNALSYM IMAGE_REL_BASED_LOW}
 
6216
  IMAGE_REL_BASED_HIGHLOW      = 3;
 
6217
  {$EXTERNALSYM IMAGE_REL_BASED_HIGHLOW}
 
6218
  IMAGE_REL_BASED_HIGHADJ      = 4;
 
6219
  {$EXTERNALSYM IMAGE_REL_BASED_HIGHADJ}
 
6220
  IMAGE_REL_BASED_MIPS_JMPADDR = 5;
 
6221
  {$EXTERNALSYM IMAGE_REL_BASED_MIPS_JMPADDR}
 
6222
 
 
6223
  IMAGE_REL_BASED_MIPS_JMPADDR16 = 9;
 
6224
  {$EXTERNALSYM IMAGE_REL_BASED_MIPS_JMPADDR16}
 
6225
  IMAGE_REL_BASED_IA64_IMM64     = 9;
 
6226
  {$EXTERNALSYM IMAGE_REL_BASED_IA64_IMM64}
 
6227
  IMAGE_REL_BASED_DIR64          = 10;
 
6228
  {$EXTERNALSYM IMAGE_REL_BASED_DIR64}
 
6229
 
 
6230
//
 
6231
// Archive format.
 
6232
//
 
6233
 
 
6234
  IMAGE_ARCHIVE_START_SIZE       = 8;
 
6235
  {$EXTERNALSYM IMAGE_ARCHIVE_START_SIZE}
 
6236
  IMAGE_ARCHIVE_START            = '!<arch>'#10;
 
6237
  {$EXTERNALSYM IMAGE_ARCHIVE_START}
 
6238
  IMAGE_ARCHIVE_END              = '`'#10;
 
6239
  {$EXTERNALSYM IMAGE_ARCHIVE_END}
 
6240
  IMAGE_ARCHIVE_PAD              = #10;
 
6241
  {$EXTERNALSYM IMAGE_ARCHIVE_PAD}
 
6242
  IMAGE_ARCHIVE_LINKER_MEMBER    = '/               ';
 
6243
  {$EXTERNALSYM IMAGE_ARCHIVE_LINKER_MEMBER}
 
6244
  IMAGE_ARCHIVE_LONGNAMES_MEMBER = '//              ';
 
6245
  {$EXTERNALSYM IMAGE_ARCHIVE_LONGNAMES_MEMBER}
 
6246
 
 
6247
type
 
6248
  PIMAGE_ARCHIVE_MEMBER_HEADER = ^IMAGE_ARCHIVE_MEMBER_HEADER;
 
6249
  {$EXTERNALSYM PIMAGE_ARCHIVE_MEMBER_HEADER}
 
6250
  _IMAGE_ARCHIVE_MEMBER_HEADER = record
 
6251
    Name: array [0..15] of Byte; // File member name - `/' terminated.
 
6252
    Date: array [0..11] of Byte; // File member date - decimal.
 
6253
    UserID: array [0..5] of Byte; // File member user id - decimal.
 
6254
    GroupID: array [0..5] of Byte; // File member group id - decimal.
 
6255
    Mode: array [0..7] of Byte; // File member mode - octal.
 
6256
    Size: array [0..9] of Byte; // File member size - decimal.
 
6257
    EndHeader: array [0..1] of Byte; // String to end header.
 
6258
  end;
 
6259
  {$EXTERNALSYM _IMAGE_ARCHIVE_MEMBER_HEADER}
 
6260
  IMAGE_ARCHIVE_MEMBER_HEADER = _IMAGE_ARCHIVE_MEMBER_HEADER;
 
6261
  {$EXTERNALSYM IMAGE_ARCHIVE_MEMBER_HEADER}
 
6262
  TImageArchiveMemberHeader = IMAGE_ARCHIVE_MEMBER_HEADER;
 
6263
  PImageArchiveMemberHeader = PIMAGE_ARCHIVE_MEMBER_HEADER;
 
6264
 
 
6265
const
 
6266
  IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR = 60;
 
6267
  {$EXTERNALSYM IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR}
 
6268
 
 
6269
//
 
6270
// DLL support.
 
6271
//
 
6272
 
 
6273
//
 
6274
// Export Format
 
6275
//
 
6276
 
 
6277
type
 
6278
  PIMAGE_EXPORT_DIRECTORY = ^IMAGE_EXPORT_DIRECTORY;
 
6279
  {$EXTERNALSYM PIMAGE_EXPORT_DIRECTORY}
 
6280
  _IMAGE_EXPORT_DIRECTORY = record
 
6281
    Characteristics: DWORD;
 
6282
    TimeDateStamp: DWORD;
 
6283
    MajorVersion: Word;
 
6284
    MinorVersion: Word;
 
6285
    Name: DWORD;
 
6286
    Base: DWORD;
 
6287
    NumberOfFunctions: DWORD;
 
6288
    NumberOfNames: DWORD;
 
6289
    AddressOfFunctions: DWORD; // RVA from base of image
 
6290
    AddressOfNames: DWORD; // RVA from base of image
 
6291
    AddressOfNameOrdinals: DWORD; // RVA from base of image
 
6292
  end;
 
6293
  {$EXTERNALSYM _IMAGE_EXPORT_DIRECTORY}
 
6294
  IMAGE_EXPORT_DIRECTORY = _IMAGE_EXPORT_DIRECTORY;
 
6295
  {$EXTERNALSYM IMAGE_EXPORT_DIRECTORY}
 
6296
  TImageExportDirectory = IMAGE_EXPORT_DIRECTORY;
 
6297
  PImageExportDirectory = PIMAGE_EXPORT_DIRECTORY;
 
6298
 
 
6299
//
 
6300
// Import Format
 
6301
//
 
6302
 
 
6303
  PIMAGE_IMPORT_BY_NAME = ^IMAGE_IMPORT_BY_NAME;
 
6304
  {$EXTERNALSYM PIMAGE_IMPORT_BY_NAME}
 
6305
  _IMAGE_IMPORT_BY_NAME = record
 
6306
    Hint: Word;
 
6307
    Name: array [0..0] of Byte;
 
6308
  end;
 
6309
  {$EXTERNALSYM _IMAGE_IMPORT_BY_NAME}
 
6310
  IMAGE_IMPORT_BY_NAME = _IMAGE_IMPORT_BY_NAME;
 
6311
  {$EXTERNALSYM IMAGE_IMPORT_BY_NAME}
 
6312
  TImageImportByName = IMAGE_IMPORT_BY_NAME;
 
6313
  PImageImportByName = PIMAGE_IMPORT_BY_NAME;
 
6314
 
 
6315
// #include "pshpack8.h"                       // Use align 8 for the 64-bit IAT.
 
6316
 
 
6317
  PIMAGE_THUNK_DATA64 = ^IMAGE_THUNK_DATA64;
 
6318
  {$EXTERNALSYM PIMAGE_THUNK_DATA64}
 
6319
  _IMAGE_THUNK_DATA64 = record
 
6320
    case Integer of
 
6321
      0: (ForwarderString: ULONGLONG);   // PBYTE
 
6322
      1: (Function_: ULONGLONG);         // PDWORD
 
6323
      2: (Ordinal: ULONGLONG);
 
6324
      3: (AddressOfData: ULONGLONG);     // PIMAGE_IMPORT_BY_NAME
 
6325
  end;
 
6326
  {$EXTERNALSYM _IMAGE_THUNK_DATA64}
 
6327
  IMAGE_THUNK_DATA64 = _IMAGE_THUNK_DATA64;
 
6328
  {$EXTERNALSYM IMAGE_THUNK_DATA64}
 
6329
  TImageThunkData64 = IMAGE_THUNK_DATA64;
 
6330
  PImageThunkData64 = PIMAGE_THUNK_DATA64;
 
6331
 
 
6332
// #include "poppack.h"                        // Back to 4 byte packing
 
6333
 
 
6334
  PIMAGE_THUNK_DATA32 = ^IMAGE_THUNK_DATA32;
 
6335
  {$EXTERNALSYM PIMAGE_THUNK_DATA32}
 
6336
  _IMAGE_THUNK_DATA32 = record
 
6337
    case Integer of
 
6338
      0: (ForwarderString: DWORD);   // PBYTE
 
6339
      1: (Function_: DWORD);         // PDWORD
 
6340
      2: (Ordinal: DWORD);
 
6341
      3: (AddressOfData: DWORD);     // PIMAGE_IMPORT_BY_NAME
 
6342
  end;
 
6343
  {$EXTERNALSYM _IMAGE_THUNK_DATA32}
 
6344
  IMAGE_THUNK_DATA32 = _IMAGE_THUNK_DATA32;
 
6345
  {$EXTERNALSYM IMAGE_THUNK_DATA32}
 
6346
  TImageThunkData32 = IMAGE_THUNK_DATA32;
 
6347
  PImageThunkData32 = PIMAGE_THUNK_DATA32;
 
6348
 
 
6349
const
 
6350
  IMAGE_ORDINAL_FLAG64 = ULONGLONG($8000000000000000);
 
6351
  {$EXTERNALSYM IMAGE_ORDINAL_FLAG64}
 
6352
  IMAGE_ORDINAL_FLAG32 = DWORD($80000000);
 
6353
  {$EXTERNALSYM IMAGE_ORDINAL_FLAG32}
 
6354
 
 
6355
function IMAGE_ORDINAL64(Ordinal: ULONGLONG): ULONGLONG;
 
6356
{$EXTERNALSYM IMAGE_ORDINAL64}
 
6357
function IMAGE_ORDINAL32(Ordinal: DWORD): DWORD;
 
6358
{$EXTERNALSYM IMAGE_ORDINAL32}
 
6359
function IMAGE_SNAP_BY_ORDINAL64(Ordinal: ULONGLONG): Boolean;
 
6360
{$EXTERNALSYM IMAGE_SNAP_BY_ORDINAL64}
 
6361
function IMAGE_SNAP_BY_ORDINAL32(Ordinal: DWORD): Boolean;
 
6362
{$EXTERNALSYM IMAGE_SNAP_BY_ORDINAL32}
 
6363
 
 
6364
//
 
6365
// Thread Local Storage
 
6366
//
 
6367
 
 
6368
type
 
6369
  PIMAGE_TLS_CALLBACK = procedure(DllHandle: Pointer; Reason: DWORD; Reserved: Pointer); stdcall;
 
6370
  {$EXTERNALSYM PIMAGE_TLS_CALLBACK}
 
6371
  TImageTlsCallback = PIMAGE_TLS_CALLBACK;
 
6372
 
 
6373
  PIMAGE_TLS_DIRECTORY64 = ^IMAGE_TLS_DIRECTORY64;
 
6374
  {$EXTERNALSYM PIMAGE_TLS_DIRECTORY64}
 
6375
  _IMAGE_TLS_DIRECTORY64 = record
 
6376
    StartAddressOfRawData: ULONGLONG;
 
6377
    EndAddressOfRawData: ULONGLONG;
 
6378
    AddressOfIndex: ULONGLONG;         // PDWORD
 
6379
    AddressOfCallBacks: ULONGLONG;     // PIMAGE_TLS_CALLBACK *;
 
6380
    SizeOfZeroFill: DWORD;
 
6381
    Characteristics: DWORD;
 
6382
  end;
 
6383
  {$EXTERNALSYM _IMAGE_TLS_DIRECTORY64}
 
6384
  IMAGE_TLS_DIRECTORY64 = _IMAGE_TLS_DIRECTORY64;
 
6385
  {$EXTERNALSYM IMAGE_TLS_DIRECTORY64}
 
6386
  TImageTlsDirectory64 = IMAGE_TLS_DIRECTORY64;
 
6387
  PImageTlsDirectory64 = PIMAGE_TLS_DIRECTORY64;
 
6388
 
 
6389
  PIMAGE_TLS_DIRECTORY32 = ^IMAGE_TLS_DIRECTORY32;
 
6390
  {$EXTERNALSYM PIMAGE_TLS_DIRECTORY32}
 
6391
  _IMAGE_TLS_DIRECTORY32 = record
 
6392
    StartAddressOfRawData: DWORD;
 
6393
    EndAddressOfRawData: DWORD;
 
6394
    AddressOfIndex: DWORD;             // PDWORD
 
6395
    AddressOfCallBacks: DWORD;         // PIMAGE_TLS_CALLBACK *
 
6396
    SizeOfZeroFill: DWORD;
 
6397
    Characteristics: DWORD;
 
6398
  end;
 
6399
  {$EXTERNALSYM _IMAGE_TLS_DIRECTORY32}
 
6400
  IMAGE_TLS_DIRECTORY32 = _IMAGE_TLS_DIRECTORY32;
 
6401
  {$EXTERNALSYM IMAGE_TLS_DIRECTORY32}
 
6402
  TImageTlsDirectory32 = IMAGE_TLS_DIRECTORY32;
 
6403
  PImageTlsDirectory32 = PIMAGE_TLS_DIRECTORY32;
 
6404
 
 
6405
const
 
6406
  IMAGE_ORDINAL_FLAG = IMAGE_ORDINAL_FLAG32;
 
6407
  {$EXTERNALSYM IMAGE_ORDINAL_FLAG}
 
6408
 
 
6409
function IMAGE_ORDINAL(Ordinal: DWORD): DWORD;
 
6410
 
 
6411
type
 
6412
  IMAGE_THUNK_DATA = IMAGE_THUNK_DATA32;
 
6413
  {$EXTERNALSYM IMAGE_THUNK_DATA}
 
6414
  PIMAGE_THUNK_DATA = PIMAGE_THUNK_DATA32;
 
6415
  {$EXTERNALSYM PIMAGE_THUNK_DATA}
 
6416
  TImageThunkData = TImageThunkData32;
 
6417
  PImageThunkData = PImageThunkData32;
 
6418
 
 
6419
function IMAGE_SNAP_BY_ORDINAL(Ordinal: DWORD): Boolean;
 
6420
{$EXTERNALSYM IMAGE_SNAP_BY_ORDINAL}
 
6421
 
 
6422
type
 
6423
  IMAGE_TLS_DIRECTORY = IMAGE_TLS_DIRECTORY32;
 
6424
  {$EXTERNALSYM IMAGE_TLS_DIRECTORY}
 
6425
  PIMAGE_TLS_DIRECTORY = PIMAGE_TLS_DIRECTORY32;
 
6426
  {$EXTERNALSYM PIMAGE_TLS_DIRECTORY}
 
6427
  TImageTlsDirectory = TImageTlsDirectory32;
 
6428
  PImageTlsDirectory = PImageTlsDirectory32;
 
6429
 
 
6430
  TIIDUnion = record
 
6431
    case Integer of
 
6432
      0: (Characteristics: DWORD);         // 0 for terminating null import descriptor
 
6433
      1: (OriginalFirstThunk: DWORD);      // RVA to original unbound IAT (PIMAGE_THUNK_DATA)
 
6434
  end;
 
6435
 
 
6436
  PIMAGE_IMPORT_DESCRIPTOR = ^IMAGE_IMPORT_DESCRIPTOR;
 
6437
  {$EXTERNALSYM PIMAGE_IMPORT_DESCRIPTOR}
 
6438
  _IMAGE_IMPORT_DESCRIPTOR = record
 
6439
    Union: TIIDUnion;
 
6440
    TimeDateStamp: DWORD;                  // 0 if not bound,
 
6441
                                           // -1 if bound, and real date\time stamp
 
6442
                                           //     in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT (new BIND)
 
6443
                                           // O.W. date/time stamp of DLL bound to (Old BIND)
 
6444
 
 
6445
    ForwarderChain: DWORD;                 // -1 if no forwarders
 
6446
    Name: DWORD;
 
6447
    FirstThunk: DWORD;                     // RVA to IAT (if bound this IAT has actual addresses)
 
6448
  end;
 
6449
  {$EXTERNALSYM _IMAGE_IMPORT_DESCRIPTOR}
 
6450
  IMAGE_IMPORT_DESCRIPTOR = _IMAGE_IMPORT_DESCRIPTOR;
 
6451
  {$EXTERNALSYM IMAGE_IMPORT_DESCRIPTOR}
 
6452
  TImageImportDecriptor = IMAGE_IMPORT_DESCRIPTOR;
 
6453
  PImageImportDecriptor = PIMAGE_IMPORT_DESCRIPTOR;
 
6454
 
 
6455
//
 
6456
// New format import descriptors pointed to by DataDirectory[ IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT ]
 
6457
//
 
6458
 
 
6459
type
 
6460
  PIMAGE_BOUND_IMPORT_DESCRIPTOR = ^IMAGE_BOUND_IMPORT_DESCRIPTOR;
 
6461
  {$EXTERNALSYM PIMAGE_BOUND_IMPORT_DESCRIPTOR}
 
6462
  _IMAGE_BOUND_IMPORT_DESCRIPTOR = record
 
6463
    TimeDateStamp: DWORD;
 
6464
    OffsetModuleName: Word;
 
6465
    NumberOfModuleForwarderRefs: Word;
 
6466
    // Array of zero or more IMAGE_BOUND_FORWARDER_REF follows
 
6467
  end;
 
6468
  {$EXTERNALSYM _IMAGE_BOUND_IMPORT_DESCRIPTOR}
 
6469
  IMAGE_BOUND_IMPORT_DESCRIPTOR = _IMAGE_BOUND_IMPORT_DESCRIPTOR;
 
6470
  {$EXTERNALSYM IMAGE_BOUND_IMPORT_DESCRIPTOR}
 
6471
  TImageBoundImportDescriptor = IMAGE_BOUND_IMPORT_DESCRIPTOR;
 
6472
  PImageBoundImportDescriptor = PIMAGE_BOUND_IMPORT_DESCRIPTOR;
 
6473
 
 
6474
  PIMAGE_BOUND_FORWARDER_REF = ^IMAGE_BOUND_FORWARDER_REF;
 
6475
  {$EXTERNALSYM PIMAGE_BOUND_FORWARDER_REF}
 
6476
  _IMAGE_BOUND_FORWARDER_REF = record
 
6477
    TimeDateStamp: DWORD;
 
6478
    OffsetModuleName: Word;
 
6479
    Reserved: Word;
 
6480
  end;
 
6481
  {$EXTERNALSYM _IMAGE_BOUND_FORWARDER_REF}
 
6482
  IMAGE_BOUND_FORWARDER_REF = _IMAGE_BOUND_FORWARDER_REF;
 
6483
  {$EXTERNALSYM IMAGE_BOUND_FORWARDER_REF}
 
6484
  TImageBoundForwarderRef = IMAGE_BOUND_FORWARDER_REF;
 
6485
  PImageBoundForwarderRef = PIMAGE_BOUND_FORWARDER_REF;
 
6486
 
 
6487
//
 
6488
// Resource Format.
 
6489
//
 
6490
 
 
6491
//
 
6492
// Resource directory consists of two counts, following by a variable length
 
6493
// array of directory entries.  The first count is the number of entries at
 
6494
// beginning of the array that have actual names associated with each entry.
 
6495
// The entries are in ascending order, case insensitive strings.  The second
 
6496
// count is the number of entries that immediately follow the named entries.
 
6497
// This second count identifies the number of entries that have 16-bit integer
 
6498
// Ids as their name.  These entries are also sorted in ascending order.
 
6499
//
 
6500
// This structure allows fast lookup by either name or number, but for any
 
6501
// given resource entry only one form of lookup is supported, not both.
 
6502
// This is consistant with the syntax of the .RC file and the .RES file.
 
6503
//
 
6504
 
 
6505
  PIMAGE_RESOURCE_DIRECTORY = ^IMAGE_RESOURCE_DIRECTORY;
 
6506
  {$EXTERNALSYM PIMAGE_RESOURCE_DIRECTORY}
 
6507
  _IMAGE_RESOURCE_DIRECTORY = record
 
6508
    Characteristics: DWORD;
 
6509
    TimeDateStamp: DWORD;
 
6510
    MajorVersion: Word;
 
6511
    MinorVersion: Word;
 
6512
    NumberOfNamedEntries: Word;
 
6513
    NumberOfIdEntries: Word;
 
6514
    // IMAGE_RESOURCE_DIRECTORY_ENTRY DirectoryEntries[];
 
6515
  end;
 
6516
  {$EXTERNALSYM _IMAGE_RESOURCE_DIRECTORY}
 
6517
  IMAGE_RESOURCE_DIRECTORY = _IMAGE_RESOURCE_DIRECTORY;
 
6518
  {$EXTERNALSYM IMAGE_RESOURCE_DIRECTORY}
 
6519
  TImageResourceDirectory = IMAGE_RESOURCE_DIRECTORY;
 
6520
  PImageResourceDirectory = PIMAGE_RESOURCE_DIRECTORY;
 
6521
 
 
6522
const
 
6523
  IMAGE_RESOURCE_NAME_IS_STRING    = DWORD($80000000);
 
6524
  {$EXTERNALSYM IMAGE_RESOURCE_NAME_IS_STRING}
 
6525
  IMAGE_RESOURCE_DATA_IS_DIRECTORY = DWORD($80000000);
 
6526
  {$EXTERNALSYM IMAGE_RESOURCE_DATA_IS_DIRECTORY}
 
6527
 
 
6528
//
 
6529
// Each directory contains the 32-bit Name of the entry and an offset,
 
6530
// relative to the beginning of the resource directory of the data associated
 
6531
// with this directory entry.  If the name of the entry is an actual text
 
6532
// string instead of an integer Id, then the high order bit of the name field
 
6533
// is set to one and the low order 31-bits are an offset, relative to the
 
6534
// beginning of the resource directory of the string, which is of type
 
6535
// IMAGE_RESOURCE_DIRECTORY_STRING.  Otherwise the high bit is clear and the
 
6536
// low-order 16-bits are the integer Id that identify this resource directory
 
6537
// entry. If the directory entry is yet another resource directory (i.e. a
 
6538
// subdirectory), then the high order bit of the offset field will be
 
6539
// set to indicate this.  Otherwise the high bit is clear and the offset
 
6540
// field points to a resource data entry.
 
6541
//
 
6542
 
 
6543
type
 
6544
  TIRDEName = record
 
6545
    case Integer of
 
6546
      0: (
 
6547
        NameOffset: DWORD); // 0..30: NameOffset; 31: NameIsString
 
6548
      1: (
 
6549
        Name: DWORD);
 
6550
      2: (
 
6551
        Id: WORD);
 
6552
  end;
 
6553
 
 
6554
  TIRDEDirectory = record
 
6555
    case Integer of
 
6556
      0: (
 
6557
        OffsetToData: DWORD);
 
6558
      1: (
 
6559
        OffsetToDirectory: DWORD); // 0..30: OffsetToDirectory; 31: DataIsDirectory
 
6560
  end;
 
6561
 
 
6562
  PIMAGE_RESOURCE_DIRECTORY_ENTRY = ^IMAGE_RESOURCE_DIRECTORY_ENTRY;
 
6563
  {$EXTERNALSYM PIMAGE_RESOURCE_DIRECTORY_ENTRY}
 
6564
  _IMAGE_RESOURCE_DIRECTORY_ENTRY = record
 
6565
    Name: TIRDEName;
 
6566
    Directory: TIRDEDirectory;
 
6567
  end;
 
6568
  {$EXTERNALSYM _IMAGE_RESOURCE_DIRECTORY_ENTRY}
 
6569
  IMAGE_RESOURCE_DIRECTORY_ENTRY = _IMAGE_RESOURCE_DIRECTORY_ENTRY;
 
6570
  {$EXTERNALSYM IMAGE_RESOURCE_DIRECTORY_ENTRY}
 
6571
  TImageResourceDirectoryEntry = IMAGE_RESOURCE_DIRECTORY_ENTRY;
 
6572
  PImageResourceDirectoryEntry = PIMAGE_RESOURCE_DIRECTORY_ENTRY;
 
6573
 
 
6574
//
 
6575
// For resource directory entries that have actual string names, the Name
 
6576
// field of the directory entry points to an object of the following type.
 
6577
// All of these string objects are stored together after the last resource
 
6578
// directory entry and before the first resource data object.  This minimizes
 
6579
// the impact of these variable length objects on the alignment of the fixed
 
6580
// size directory entry objects.
 
6581
//
 
6582
 
 
6583
type
 
6584
  PIMAGE_RESOURCE_DIRECTORY_STRING = ^IMAGE_RESOURCE_DIRECTORY_STRING;
 
6585
  {$EXTERNALSYM PIMAGE_RESOURCE_DIRECTORY_STRING}
 
6586
  _IMAGE_RESOURCE_DIRECTORY_STRING = record
 
6587
    Length: Word;
 
6588
    NameString: array [0..0] of CHAR;
 
6589
  end;
 
6590
  {$EXTERNALSYM _IMAGE_RESOURCE_DIRECTORY_STRING}
 
6591
  IMAGE_RESOURCE_DIRECTORY_STRING = _IMAGE_RESOURCE_DIRECTORY_STRING;
 
6592
  {$EXTERNALSYM IMAGE_RESOURCE_DIRECTORY_STRING}
 
6593
  TImageResourceDirectoryString = IMAGE_RESOURCE_DIRECTORY_STRING;
 
6594
  PImageResourceDirectoryString = PIMAGE_RESOURCE_DIRECTORY_STRING;
 
6595
 
 
6596
  PIMAGE_RESOURCE_DIR_STRING_U = ^IMAGE_RESOURCE_DIR_STRING_U;
 
6597
  {$EXTERNALSYM PIMAGE_RESOURCE_DIR_STRING_U}
 
6598
  _IMAGE_RESOURCE_DIR_STRING_U = record
 
6599
    Length: Word;
 
6600
    NameString: array [0..0] of WCHAR;
 
6601
  end;
 
6602
  {$EXTERNALSYM _IMAGE_RESOURCE_DIR_STRING_U}
 
6603
  IMAGE_RESOURCE_DIR_STRING_U = _IMAGE_RESOURCE_DIR_STRING_U;
 
6604
  {$EXTERNALSYM IMAGE_RESOURCE_DIR_STRING_U}
 
6605
  TImageResourceDirStringU = IMAGE_RESOURCE_DIR_STRING_U;
 
6606
  PImageResourceDirStringU = PIMAGE_RESOURCE_DIR_STRING_U;
 
6607
 
 
6608
//
 
6609
// Each resource data entry describes a leaf node in the resource directory
 
6610
// tree.  It contains an offset, relative to the beginning of the resource
 
6611
// directory of the data for the resource, a size field that gives the number
 
6612
// of bytes of data at that offset, a CodePage that should be used when
 
6613
// decoding code point values within the resource data.  Typically for new
 
6614
// applications the code page would be the unicode code page.
 
6615
//
 
6616
 
 
6617
  PIMAGE_RESOURCE_DATA_ENTRY = ^IMAGE_RESOURCE_DATA_ENTRY;
 
6618
  {$EXTERNALSYM PIMAGE_RESOURCE_DATA_ENTRY}
 
6619
  _IMAGE_RESOURCE_DATA_ENTRY = record
 
6620
    OffsetToData: DWORD;
 
6621
    Size: DWORD;
 
6622
    CodePage: DWORD;
 
6623
    Reserved: DWORD;
 
6624
  end;
 
6625
  {$EXTERNALSYM _IMAGE_RESOURCE_DATA_ENTRY}
 
6626
  IMAGE_RESOURCE_DATA_ENTRY = _IMAGE_RESOURCE_DATA_ENTRY;
 
6627
  {$EXTERNALSYM IMAGE_RESOURCE_DATA_ENTRY}
 
6628
  TImageResourceDataEntry = IMAGE_RESOURCE_DATA_ENTRY;
 
6629
  PImageResourceDataEntry = PIMAGE_RESOURCE_DATA_ENTRY;
 
6630
 
 
6631
//
 
6632
// Load Configuration Directory Entry
 
6633
//
 
6634
 
 
6635
type
 
6636
  PIMAGE_LOAD_CONFIG_DIRECTORY32 = ^IMAGE_LOAD_CONFIG_DIRECTORY32;
 
6637
  {$EXTERNALSYM PIMAGE_LOAD_CONFIG_DIRECTORY32}
 
6638
  IMAGE_LOAD_CONFIG_DIRECTORY32 = record
 
6639
    Size: DWORD;
 
6640
    TimeDateStamp: DWORD;
 
6641
    MajorVersion: WORD;
 
6642
    MinorVersion: WORD;
 
6643
    GlobalFlagsClear: DWORD;
 
6644
    GlobalFlagsSet: DWORD;
 
6645
    CriticalSectionDefaultTimeout: DWORD;
 
6646
    DeCommitFreeBlockThreshold: DWORD;
 
6647
    DeCommitTotalFreeThreshold: DWORD;
 
6648
    LockPrefixTable: DWORD;            // VA
 
6649
    MaximumAllocationSize: DWORD;
 
6650
    VirtualMemoryThreshold: DWORD;
 
6651
    ProcessHeapFlags: DWORD;
 
6652
    ProcessAffinityMask: DWORD;
 
6653
    CSDVersion: WORD;
 
6654
    Reserved1: WORD;
 
6655
    EditList: DWORD;                   // VA
 
6656
    SecurityCookie: DWORD;             // VA
 
6657
    SEHandlerTable: DWORD;             // VA
 
6658
    SEHandlerCount: DWORD;
 
6659
  end;
 
6660
  {$EXTERNALSYM IMAGE_LOAD_CONFIG_DIRECTORY32}
 
6661
  TImageLoadConfigDirectory32 = IMAGE_LOAD_CONFIG_DIRECTORY32;
 
6662
  PImageLoadConfigDirectory32 = PIMAGE_LOAD_CONFIG_DIRECTORY32;
 
6663
 
 
6664
  PIMAGE_LOAD_CONFIG_DIRECTORY64 = ^IMAGE_LOAD_CONFIG_DIRECTORY64;
 
6665
  {$EXTERNALSYM PIMAGE_LOAD_CONFIG_DIRECTORY64}
 
6666
  IMAGE_LOAD_CONFIG_DIRECTORY64 = record
 
6667
    Size: DWORD;
 
6668
    TimeDateStamp: DWORD;
 
6669
    MajorVersion: WORD;
 
6670
    MinorVersion: WORD;
 
6671
    GlobalFlagsClear: DWORD;
 
6672
    GlobalFlagsSet: DWORD;
 
6673
    CriticalSectionDefaultTimeout: DWORD;
 
6674
    DeCommitFreeBlockThreshold: ULONGLONG;
 
6675
    DeCommitTotalFreeThreshold: ULONGLONG;
 
6676
    LockPrefixTable: ULONGLONG;         // VA
 
6677
    MaximumAllocationSize: ULONGLONG;
 
6678
    VirtualMemoryThreshold: ULONGLONG;
 
6679
    ProcessAffinityMask: ULONGLONG;
 
6680
    ProcessHeapFlags: DWORD;
 
6681
    CSDVersion: WORD;
 
6682
    Reserved1: WORD;
 
6683
    EditList: ULONGLONG;                // VA
 
6684
    SecurityCookie: ULONGLONG;             // VA
 
6685
    SEHandlerTable: ULONGLONG;             // VA
 
6686
    SEHandlerCount: ULONGLONG;
 
6687
  end;
 
6688
  {$EXTERNALSYM IMAGE_LOAD_CONFIG_DIRECTORY64}
 
6689
  TImageLoadConfigDirectory64 = IMAGE_LOAD_CONFIG_DIRECTORY64;
 
6690
  PImageLoadConfigDirectory64 = PIMAGE_LOAD_CONFIG_DIRECTORY64;
 
6691
 
 
6692
  IMAGE_LOAD_CONFIG_DIRECTORY = IMAGE_LOAD_CONFIG_DIRECTORY32;
 
6693
  {$EXTERNALSYM IMAGE_LOAD_CONFIG_DIRECTORY}
 
6694
  PIMAGE_LOAD_CONFIG_DIRECTORY = PIMAGE_LOAD_CONFIG_DIRECTORY32;
 
6695
  {$EXTERNALSYM PIMAGE_LOAD_CONFIG_DIRECTORY}
 
6696
  TImageLoadConfigDirectory = TImageLoadConfigDirectory32;
 
6697
  PImageLoadConfigDirectory = PImageLoadConfigDirectory32;
 
6698
 
 
6699
//
 
6700
// WIN CE Exception table format
 
6701
//
 
6702
 
 
6703
//
 
6704
// Function table entry format.  Function table is pointed to by the
 
6705
// IMAGE_DIRECTORY_ENTRY_EXCEPTION directory entry.
 
6706
//
 
6707
 
 
6708
type
 
6709
  PIMAGE_CE_RUNTIME_FUNCTION_ENTRY = ^IMAGE_CE_RUNTIME_FUNCTION_ENTRY;
 
6710
  {$EXTERNALSYM PIMAGE_CE_RUNTIME_FUNCTION_ENTRY}
 
6711
  _IMAGE_CE_RUNTIME_FUNCTION_ENTRY = record
 
6712
    FuncStart: DWORD;
 
6713
    Flags: DWORD;
 
6714
    //DWORD PrologLen : 8;
 
6715
    //DWORD FuncLen : 22;
 
6716
    //DWORD ThirtyTwoBit : 1;
 
6717
    //DWORD ExceptionFlag : 1;
 
6718
  end;
 
6719
  {$EXTERNALSYM _IMAGE_CE_RUNTIME_FUNCTION_ENTRY}
 
6720
  IMAGE_CE_RUNTIME_FUNCTION_ENTRY = _IMAGE_CE_RUNTIME_FUNCTION_ENTRY;
 
6721
  {$EXTERNALSYM IMAGE_CE_RUNTIME_FUNCTION_ENTRY}
 
6722
  TImageCERuntimeFunctionEntry = IMAGE_CE_RUNTIME_FUNCTION_ENTRY;
 
6723
  PImageCERuntimeFunctionEntry = PIMAGE_CE_RUNTIME_FUNCTION_ENTRY;
 
6724
 
 
6725
//
 
6726
// Debug Format
 
6727
//
 
6728
 
 
6729
type
 
6730
  PIMAGE_DEBUG_DIRECTORY = ^IMAGE_DEBUG_DIRECTORY;
 
6731
  {$EXTERNALSYM PIMAGE_DEBUG_DIRECTORY}
 
6732
  _IMAGE_DEBUG_DIRECTORY = record
 
6733
    Characteristics: DWORD;
 
6734
    TimeDateStamp: DWORD;
 
6735
    MajorVersion: Word;
 
6736
    MinorVersion: Word;
 
6737
    Type_: DWORD;
 
6738
    SizeOfData: DWORD;
 
6739
    AddressOfRawData: DWORD;
 
6740
    PointerToRawData: DWORD;
 
6741
  end;
 
6742
  {$EXTERNALSYM _IMAGE_DEBUG_DIRECTORY}
 
6743
  IMAGE_DEBUG_DIRECTORY = _IMAGE_DEBUG_DIRECTORY;
 
6744
  {$EXTERNALSYM IMAGE_DEBUG_DIRECTORY}
 
6745
  TImageDebugDirectory = IMAGE_DEBUG_DIRECTORY;
 
6746
  PImageDebugDirectory = PIMAGE_DEBUG_DIRECTORY;
 
6747
 
 
6748
const
 
6749
  IMAGE_DEBUG_TYPE_UNKNOWN       = 0;
 
6750
  {$EXTERNALSYM IMAGE_DEBUG_TYPE_UNKNOWN}
 
6751
  IMAGE_DEBUG_TYPE_COFF          = 1;
 
6752
  {$EXTERNALSYM IMAGE_DEBUG_TYPE_COFF}
 
6753
  IMAGE_DEBUG_TYPE_CODEVIEW      = 2;
 
6754
  {$EXTERNALSYM IMAGE_DEBUG_TYPE_CODEVIEW}
 
6755
  IMAGE_DEBUG_TYPE_FPO           = 3;
 
6756
  {$EXTERNALSYM IMAGE_DEBUG_TYPE_FPO}
 
6757
  IMAGE_DEBUG_TYPE_MISC          = 4;
 
6758
  {$EXTERNALSYM IMAGE_DEBUG_TYPE_MISC}
 
6759
  IMAGE_DEBUG_TYPE_EXCEPTION     = 5;
 
6760
  {$EXTERNALSYM IMAGE_DEBUG_TYPE_EXCEPTION}
 
6761
  IMAGE_DEBUG_TYPE_FIXUP         = 6;
 
6762
  {$EXTERNALSYM IMAGE_DEBUG_TYPE_FIXUP}
 
6763
  IMAGE_DEBUG_TYPE_OMAP_TO_SRC   = 7;
 
6764
  {$EXTERNALSYM IMAGE_DEBUG_TYPE_OMAP_TO_SRC}
 
6765
  IMAGE_DEBUG_TYPE_OMAP_FROM_SRC = 8;
 
6766
  {$EXTERNALSYM IMAGE_DEBUG_TYPE_OMAP_FROM_SRC}
 
6767
  IMAGE_DEBUG_TYPE_BORLAND       = 9;
 
6768
  {$EXTERNALSYM IMAGE_DEBUG_TYPE_BORLAND}
 
6769
  IMAGE_DEBUG_TYPE_RESERVED10    = 10;
 
6770
  {$EXTERNALSYM IMAGE_DEBUG_TYPE_RESERVED10}
 
6771
  IMAGE_DEBUG_TYPE_CLSID         = 11;
 
6772
  {$EXTERNALSYM IMAGE_DEBUG_TYPE_CLSID}
 
6773
 
 
6774
type
 
6775
  PIMAGE_COFF_SYMBOLS_HEADER = ^IMAGE_COFF_SYMBOLS_HEADER;
 
6776
  {$EXTERNALSYM PIMAGE_COFF_SYMBOLS_HEADER}
 
6777
  _IMAGE_COFF_SYMBOLS_HEADER = record
 
6778
    NumberOfSymbols: DWORD;
 
6779
    LvaToFirstSymbol: DWORD;
 
6780
    NumberOfLinenumbers: DWORD;
 
6781
    LvaToFirstLinenumber: DWORD;
 
6782
    RvaToFirstByteOfCode: DWORD;
 
6783
    RvaToLastByteOfCode: DWORD;
 
6784
    RvaToFirstByteOfData: DWORD;
 
6785
    RvaToLastByteOfData: DWORD;
 
6786
  end;
 
6787
  {$EXTERNALSYM _IMAGE_COFF_SYMBOLS_HEADER}
 
6788
  IMAGE_COFF_SYMBOLS_HEADER = _IMAGE_COFF_SYMBOLS_HEADER;
 
6789
  {$EXTERNALSYM IMAGE_COFF_SYMBOLS_HEADER}
 
6790
  TImageCoffSymbolsHeader = IMAGE_COFF_SYMBOLS_HEADER;
 
6791
  PImageCoffSymbolsHeader = PIMAGE_COFF_SYMBOLS_HEADER;
 
6792
 
 
6793
const
 
6794
  FRAME_FPO    = 0;
 
6795
  {$EXTERNALSYM FRAME_FPO}
 
6796
  FRAME_TRAP   = 1;
 
6797
  {$EXTERNALSYM FRAME_TRAP}
 
6798
  FRAME_TSS    = 2;
 
6799
  {$EXTERNALSYM FRAME_TSS}
 
6800
  FRAME_NONFPO = 3;
 
6801
  {$EXTERNALSYM FRAME_NONFPO}
 
6802
 
 
6803
  FPOFLAGS_PROLOG   = $00FF; // # bytes in prolog
 
6804
  FPOFLAGS_REGS     = $0700; // # regs saved
 
6805
  FPOFLAGS_HAS_SEH  = $0800; // TRUE if SEH in func
 
6806
  FPOFLAGS_USE_BP   = $1000; // TRUE if EBP has been allocated
 
6807
  FPOFLAGS_RESERVED = $2000; // reserved for future use
 
6808
  FPOFLAGS_FRAME    = $C000; // frame type
 
6809
 
 
6810
type
 
6811
  PFPO_DATA = ^FPO_DATA;
 
6812
  {$EXTERNALSYM PFPO_DATA}
 
6813
  _FPO_DATA = record
 
6814
    ulOffStart: DWORD;       // offset 1st byte of function code
 
6815
    cbProcSize: DWORD;       // # bytes in function
 
6816
    cdwLocals: DWORD;        // # bytes in locals/4
 
6817
    cdwParams: WORD;         // # bytes in params/4
 
6818
    Flags: WORD;
 
6819
  end;
 
6820
  {$EXTERNALSYM _FPO_DATA}
 
6821
  FPO_DATA = _FPO_DATA;
 
6822
  {$EXTERNALSYM FPO_DATA}
 
6823
  TFpoData = FPO_DATA;
 
6824
  PFpoData = PFPO_DATA;
 
6825
 
 
6826
const
 
6827
  SIZEOF_RFPO_DATA = 16;
 
6828
  {$EXTERNALSYM SIZEOF_RFPO_DATA}
 
6829
 
 
6830
  IMAGE_DEBUG_MISC_EXENAME = 1;
 
6831
  {$EXTERNALSYM IMAGE_DEBUG_MISC_EXENAME}
 
6832
 
 
6833
type
 
6834
  PIMAGE_DEBUG_MISC = ^IMAGE_DEBUG_MISC;
 
6835
  {$EXTERNALSYM PIMAGE_DEBUG_MISC}
 
6836
  _IMAGE_DEBUG_MISC = record
 
6837
    DataType: DWORD;   // type of misc data, see defines
 
6838
    Length: DWORD;     // total length of record, rounded to four byte multiple.
 
6839
    Unicode: ByteBool; // TRUE if data is unicode string
 
6840
    Reserved: array [0..2] of Byte;
 
6841
    Data: array [0..0] of Byte; // Actual data
 
6842
  end;
 
6843
  {$EXTERNALSYM _IMAGE_DEBUG_MISC}
 
6844
  IMAGE_DEBUG_MISC = _IMAGE_DEBUG_MISC;
 
6845
  {$EXTERNALSYM IMAGE_DEBUG_MISC}
 
6846
  TImageDebugMisc = IMAGE_DEBUG_MISC;
 
6847
  PImageDebugMisc = PIMAGE_DEBUG_MISC;
 
6848
 
 
6849
//
 
6850
// Function table extracted from MIPS/ALPHA/IA64 images.  Does not contain
 
6851
// information needed only for runtime support.  Just those fields for
 
6852
// each entry needed by a debugger.
 
6853
//
 
6854
 
 
6855
  PIMAGE_FUNCTION_ENTRY = ^IMAGE_FUNCTION_ENTRY;
 
6856
  {$EXTERNALSYM PIMAGE_FUNCTION_ENTRY}
 
6857
  _IMAGE_FUNCTION_ENTRY = record
 
6858
    StartingAddress: DWORD;
 
6859
    EndingAddress: DWORD;
 
6860
    EndOfPrologue: DWORD;
 
6861
  end;
 
6862
  {$EXTERNALSYM _IMAGE_FUNCTION_ENTRY}
 
6863
  IMAGE_FUNCTION_ENTRY = _IMAGE_FUNCTION_ENTRY;
 
6864
  {$EXTERNALSYM IMAGE_FUNCTION_ENTRY}
 
6865
  TImageFunctionEntry = IMAGE_FUNCTION_ENTRY;
 
6866
  PImageFunctionEntry = PIMAGE_FUNCTION_ENTRY;
 
6867
 
 
6868
  PIMAGE_FUNCTION_ENTRY64 = ^IMAGE_FUNCTION_ENTRY64;
 
6869
  {$EXTERNALSYM PIMAGE_FUNCTION_ENTRY64}
 
6870
  _IMAGE_FUNCTION_ENTRY64 = record
 
6871
    StartingAddress: ULONGLONG;
 
6872
    EndingAddress: ULONGLONG;
 
6873
    case Integer of
 
6874
      0: (EndOfPrologue: ULONGLONG);
 
6875
      1: (UnwindInfoAddress: ULONGLONG);
 
6876
  end;
 
6877
  {$EXTERNALSYM _IMAGE_FUNCTION_ENTRY64}
 
6878
  IMAGE_FUNCTION_ENTRY64 = _IMAGE_FUNCTION_ENTRY64;
 
6879
  {$EXTERNALSYM IMAGE_FUNCTION_ENTRY64}
 
6880
  TImageFunctionEntry64 = IMAGE_FUNCTION_ENTRY64;
 
6881
  PImageFunctionEntry64 = PIMAGE_FUNCTION_ENTRY64;
 
6882
 
 
6883
//
 
6884
// Debugging information can be stripped from an image file and placed
 
6885
// in a separate .DBG file, whose file name part is the same as the
 
6886
// image file name part (e.g. symbols for CMD.EXE could be stripped
 
6887
// and placed in CMD.DBG).  This is indicated by the IMAGE_FILE_DEBUG_STRIPPED
 
6888
// flag in the Characteristics field of the file header.  The beginning of
 
6889
// the .DBG file contains the following structure which captures certain
 
6890
// information from the image file.  This allows a debug to proceed even if
 
6891
// the original image file is not accessable.  This header is followed by
 
6892
// zero of more IMAGE_SECTION_HEADER structures, followed by zero or more
 
6893
// IMAGE_DEBUG_DIRECTORY structures.  The latter structures and those in
 
6894
// the image file contain file offsets relative to the beginning of the
 
6895
// .DBG file.
 
6896
//
 
6897
// If symbols have been stripped from an image, the IMAGE_DEBUG_MISC structure
 
6898
// is left in the image file, but not mapped.  This allows a debugger to
 
6899
// compute the name of the .DBG file, from the name of the image in the
 
6900
// IMAGE_DEBUG_MISC structure.
 
6901
//
 
6902
 
 
6903
  PIMAGE_SEPARATE_DEBUG_HEADER = ^IMAGE_SEPARATE_DEBUG_HEADER;
 
6904
  {$EXTERNALSYM PIMAGE_SEPARATE_DEBUG_HEADER}
 
6905
  _IMAGE_SEPARATE_DEBUG_HEADER = record
 
6906
    Signature: Word;
 
6907
    Flags: Word;
 
6908
    Machine: Word;
 
6909
    Characteristics: Word;
 
6910
    TimeDateStamp: DWORD;
 
6911
    CheckSum: DWORD;
 
6912
    ImageBase: DWORD;
 
6913
    SizeOfImage: DWORD;
 
6914
    NumberOfSections: DWORD;
 
6915
    ExportedNamesSize: DWORD;
 
6916
    DebugDirectorySize: DWORD;
 
6917
    SectionAlignment: DWORD;
 
6918
    Reserved: array [0..1] of DWORD;
 
6919
  end;
 
6920
  {$EXTERNALSYM _IMAGE_SEPARATE_DEBUG_HEADER}
 
6921
  IMAGE_SEPARATE_DEBUG_HEADER = _IMAGE_SEPARATE_DEBUG_HEADER;
 
6922
  {$EXTERNALSYM IMAGE_SEPARATE_DEBUG_HEADER}
 
6923
  TImageSeparateDebugHeader = IMAGE_SEPARATE_DEBUG_HEADER;
 
6924
  PImageSeparateDebugHeader = PIMAGE_SEPARATE_DEBUG_HEADER;
 
6925
 
 
6926
  _NON_PAGED_DEBUG_INFO = record
 
6927
    Signature: WORD;
 
6928
    Flags: WORD;
 
6929
    Size: DWORD;
 
6930
    Machine: WORD;
 
6931
    Characteristics: WORD;
 
6932
    TimeDateStamp: DWORD;
 
6933
    CheckSum: DWORD;
 
6934
    SizeOfImage: DWORD;
 
6935
    ImageBase: ULONGLONG;
 
6936
    //DebugDirectorySize
 
6937
    //IMAGE_DEBUG_DIRECTORY
 
6938
  end;
 
6939
  {$EXTERNALSYM _NON_PAGED_DEBUG_INFO}
 
6940
  NON_PAGED_DEBUG_INFO = _NON_PAGED_DEBUG_INFO;
 
6941
  {$EXTERNALSYM NON_PAGED_DEBUG_INFO}
 
6942
  PNON_PAGED_DEBUG_INFO = ^NON_PAGED_DEBUG_INFO;
 
6943
  {$EXTERNALSYM PNON_PAGED_DEBUG_INFO}
 
6944
 
 
6945
const
 
6946
  IMAGE_SEPARATE_DEBUG_SIGNATURE = $4944;
 
6947
  {$EXTERNALSYM IMAGE_SEPARATE_DEBUG_SIGNATURE}
 
6948
  NON_PAGED_DEBUG_SIGNATURE      = $494E;
 
6949
  {$EXTERNALSYM NON_PAGED_DEBUG_SIGNATURE}
 
6950
 
 
6951
  IMAGE_SEPARATE_DEBUG_FLAGS_MASK = $8000;
 
6952
  {$EXTERNALSYM IMAGE_SEPARATE_DEBUG_FLAGS_MASK}
 
6953
  IMAGE_SEPARATE_DEBUG_MISMATCH   = $8000; // when DBG was updated, the old checksum didn't match.
 
6954
  {$EXTERNALSYM IMAGE_SEPARATE_DEBUG_MISMATCH}
 
6955
 
 
6956
//
 
6957
//  The .arch section is made up of headers, each describing an amask position/value
 
6958
//  pointing to an array of IMAGE_ARCHITECTURE_ENTRY's.  Each "array" (both the header
 
6959
//  and entry arrays) are terminiated by a quadword of 0xffffffffL.
 
6960
//
 
6961
//  NOTE: There may be quadwords of 0 sprinkled around and must be skipped.
 
6962
//
 
6963
 
 
6964
const
 
6965
  IAHMASK_VALUE = $00000001; // 1 -> code section depends on mask bit
 
6966
                             // 0 -> new instruction depends on mask bit
 
6967
  IAHMASK_MBZ7  = $000000FE; // MBZ
 
6968
  IAHMASK_SHIFT = $0000FF00; // Amask bit in question for this fixup
 
6969
  IAHMASK_MBZ16 = DWORD($FFFF0000); // MBZ
 
6970
 
 
6971
type
 
6972
  PIMAGE_ARCHITECTURE_HEADER = ^IMAGE_ARCHITECTURE_HEADER;
 
6973
  {$EXTERNALSYM PIMAGE_ARCHITECTURE_HEADER}
 
6974
  _ImageArchitectureHeader = record
 
6975
    Mask: DWORD;
 
6976
    FirstEntryRVA: DWORD;    // RVA into .arch section to array of ARCHITECTURE_ENTRY's
 
6977
  end;
 
6978
  {$EXTERNALSYM _ImageArchitectureHeader}
 
6979
  IMAGE_ARCHITECTURE_HEADER = _ImageArchitectureHeader;
 
6980
  {$EXTERNALSYM IMAGE_ARCHITECTURE_HEADER}
 
6981
  TImageArchitectureHeader = IMAGE_ARCHITECTURE_HEADER;
 
6982
  PImageArchitectureHeader = PIMAGE_ARCHITECTURE_HEADER;
 
6983
 
 
6984
  PIMAGE_ARCHITECTURE_ENTRY = ^IMAGE_ARCHITECTURE_ENTRY;
 
6985
  {$EXTERNALSYM PIMAGE_ARCHITECTURE_ENTRY}
 
6986
  _ImageArchitectureEntry = record
 
6987
    FixupInstRVA: DWORD;                         // RVA of instruction to fixup
 
6988
    NewInst: DWORD;                              // fixup instruction (see alphaops.h)
 
6989
  end;
 
6990
  {$EXTERNALSYM _ImageArchitectureEntry}
 
6991
  IMAGE_ARCHITECTURE_ENTRY = _ImageArchitectureEntry;
 
6992
  {$EXTERNALSYM IMAGE_ARCHITECTURE_ENTRY}
 
6993
  TImageArchitectureEntry = IMAGE_ARCHITECTURE_ENTRY;
 
6994
  PImageArchitectureEntry = PIMAGE_ARCHITECTURE_ENTRY;
 
6995
 
 
6996
// #include "poppack.h"                // Back to the initial value
 
6997
 
 
6998
// The following structure defines the new import object.  Note the values of the first two fields,
 
6999
// which must be set as stated in order to differentiate old and new import members.
 
7000
// Following this structure, the linker emits two null-terminated strings used to recreate the
 
7001
// import at the time of use.  The first string is the import's name, the second is the dll's name.
 
7002
 
 
7003
const
 
7004
  IMPORT_OBJECT_HDR_SIG2 = $ffff;
 
7005
  {$EXTERNALSYM IMPORT_OBJECT_HDR_SIG2}
 
7006
 
 
7007
const
 
7008
  IOHFLAGS_TYPE = $0003;      // IMPORT_TYPE
 
7009
  IAHFLAGS_NAMETYPE = $001C;  // IMPORT_NAME_TYPE
 
7010
  IAHFLAGS_RESERVED = $FFE0;  // Reserved. Must be zero.
 
7011
 
 
7012
type
 
7013
  PImportObjectHeader = ^IMPORT_OBJECT_HEADER;
 
7014
  IMPORT_OBJECT_HEADER = record
 
7015
    Sig1: WORD;                       // Must be IMAGE_FILE_MACHINE_UNKNOWN
 
7016
    Sig2: WORD;                       // Must be IMPORT_OBJECT_HDR_SIG2.
 
7017
    Version: WORD;
 
7018
    Machine: WORD;
 
7019
    TimeDateStamp: DWORD;             // Time/date stamp
 
7020
    SizeOfData: DWORD;                // particularly useful for incremental links
 
7021
    OrdinalOrHint: record
 
7022
    case Integer of
 
7023
      0: (Ordinal: WORD);             // if grf & IMPORT_OBJECT_ORDINAL
 
7024
      1: (Flags: DWORD);
 
7025
    end;
 
7026
    Flags: WORD;
 
7027
    //WORD    Type : 2;                   // IMPORT_TYPE
 
7028
    //WORD    NameType : 3;               // IMPORT_NAME_TYPE
 
7029
    //WORD    Reserved : 11;              // Reserved. Must be zero.
 
7030
  end;
 
7031
  {$EXTERNALSYM IMPORT_OBJECT_HEADER}
 
7032
  TImportObjectHeader = IMPORT_OBJECT_HEADER;
 
7033
 
 
7034
  IMPORT_OBJECT_TYPE = (IMPORT_OBJECT_CODE, IMPORT_OBJECT_DATA, IMPORT_OBJECT_CONST);
 
7035
  {$EXTERNALSYM IMPORT_OBJECT_TYPE}
 
7036
  TImportObjectType = IMPORT_OBJECT_TYPE;
 
7037
 
 
7038
  IMPORT_OBJECT_NAME_TYPE = (
 
7039
    IMPORT_OBJECT_ORDINAL,          // Import by ordinal
 
7040
    IMPORT_OBJECT_NAME,             // Import name == public symbol name.
 
7041
    IMPORT_OBJECT_NAME_NO_PREFIX,   // Import name == public symbol name skipping leading ?, @, or optionally _.
 
7042
    IMPORT_OBJECT_NAME_UNDECORATE); // Import name == public symbol name skipping leading ?, @, or optionally _
 
7043
                                    // and truncating at first @
 
7044
  {$EXTERNALSYM IMPORT_OBJECT_NAME_TYPE}
 
7045
  TImportObjectNameType = IMPORT_OBJECT_NAME_TYPE;
 
7046
 
 
7047
  ReplacesCorHdrNumericDefines = DWORD;
 
7048
  {$EXTERNALSYM ReplacesCorHdrNumericDefines}
 
7049
 
 
7050
const
 
7051
 
 
7052
// COM+ Header entry point flags.
 
7053
 
 
7054
  COMIMAGE_FLAGS_ILONLY               = $00000001;
 
7055
  {$EXTERNALSYM COMIMAGE_FLAGS_ILONLY}
 
7056
  COMIMAGE_FLAGS_32BITREQUIRED        = $00000002;
 
7057
  {$EXTERNALSYM COMIMAGE_FLAGS_32BITREQUIRED}
 
7058
  COMIMAGE_FLAGS_IL_LIBRARY           = $00000004;
 
7059
  {$EXTERNALSYM COMIMAGE_FLAGS_IL_LIBRARY}
 
7060
  COMIMAGE_FLAGS_STRONGNAMESIGNED     = $00000008;
 
7061
  {$EXTERNALSYM COMIMAGE_FLAGS_STRONGNAMESIGNED}
 
7062
  COMIMAGE_FLAGS_TRACKDEBUGDATA       = $00010000;
 
7063
  {$EXTERNALSYM COMIMAGE_FLAGS_TRACKDEBUGDATA}
 
7064
 
 
7065
// Version flags for image.
 
7066
 
 
7067
  COR_VERSION_MAJOR_V2                = 2;
 
7068
  {$EXTERNALSYM COR_VERSION_MAJOR_V2}
 
7069
  COR_VERSION_MAJOR                   = COR_VERSION_MAJOR_V2;
 
7070
  {$EXTERNALSYM COR_VERSION_MAJOR}
 
7071
  COR_VERSION_MINOR                   = 0;
 
7072
  {$EXTERNALSYM COR_VERSION_MINOR}
 
7073
  COR_DELETED_NAME_LENGTH             = 8;
 
7074
  {$EXTERNALSYM COR_DELETED_NAME_LENGTH}
 
7075
  COR_VTABLEGAP_NAME_LENGTH           = 8;
 
7076
  {$EXTERNALSYM COR_VTABLEGAP_NAME_LENGTH}
 
7077
 
 
7078
// Maximum size of a NativeType descriptor.
 
7079
 
 
7080
  NATIVE_TYPE_MAX_CB                  = 1;
 
7081
  {$EXTERNALSYM NATIVE_TYPE_MAX_CB}
 
7082
  COR_ILMETHOD_SECT_SMALL_MAX_DATASIZE= $FF;
 
7083
  {$EXTERNALSYM COR_ILMETHOD_SECT_SMALL_MAX_DATASIZE}
 
7084
 
 
7085
// #defines for the MIH FLAGS
 
7086
 
 
7087
  IMAGE_COR_MIH_METHODRVA             = $01;
 
7088
  {$EXTERNALSYM IMAGE_COR_MIH_METHODRVA}
 
7089
  IMAGE_COR_MIH_EHRVA                 = $02;
 
7090
  {$EXTERNALSYM IMAGE_COR_MIH_EHRVA}
 
7091
  IMAGE_COR_MIH_BASICBLOCK            = $08;
 
7092
  {$EXTERNALSYM IMAGE_COR_MIH_BASICBLOCK}
 
7093
 
 
7094
// V-table constants
 
7095
 
 
7096
  COR_VTABLE_32BIT                    = $01;          // V-table slots are 32-bits in size.
 
7097
  {$EXTERNALSYM COR_VTABLE_32BIT}
 
7098
  COR_VTABLE_64BIT                    = $02;          // V-table slots are 64-bits in size.
 
7099
  {$EXTERNALSYM COR_VTABLE_64BIT}
 
7100
  COR_VTABLE_FROM_UNMANAGED           = $04;          // If set, transition from unmanaged.
 
7101
  {$EXTERNALSYM COR_VTABLE_FROM_UNMANAGED}
 
7102
  COR_VTABLE_CALL_MOST_DERIVED        = $10;          // Call most derived method described by
 
7103
  {$EXTERNALSYM COR_VTABLE_CALL_MOST_DERIVED}
 
7104
 
 
7105
// EATJ constants
 
7106
 
 
7107
  IMAGE_COR_EATJ_THUNK_SIZE           = 32;            // Size of a jump thunk reserved range.
 
7108
  {$EXTERNALSYM IMAGE_COR_EATJ_THUNK_SIZE}
 
7109
 
 
7110
// Max name lengths
 
7111
// Change to unlimited name lengths.
 
7112
 
 
7113
  MAX_CLASS_NAME                      = 1024;
 
7114
  {$EXTERNALSYM MAX_CLASS_NAME}
 
7115
  MAX_PACKAGE_NAME                    = 1024;
 
7116
  {$EXTERNALSYM MAX_PACKAGE_NAME}
 
7117
 
 
7118
// COM+ 2.0 header structure.
 
7119
 
 
7120
type
 
7121
  IMAGE_COR20_HEADER = record
 
7122
 
 
7123
    // Header versioning
 
7124
 
 
7125
    cb: DWORD;
 
7126
    MajorRuntimeVersion: WORD;
 
7127
    MinorRuntimeVersion: WORD;
 
7128
 
 
7129
    // Symbol table and startup information
 
7130
 
 
7131
    MetaData: IMAGE_DATA_DIRECTORY;
 
7132
    Flags: DWORD;
 
7133
    EntryPointToken: DWORD;
 
7134
 
 
7135
    // Binding information
 
7136
 
 
7137
    Resources: IMAGE_DATA_DIRECTORY;
 
7138
    StrongNameSignature: IMAGE_DATA_DIRECTORY;
 
7139
 
 
7140
    // Regular fixup and binding information
 
7141
 
 
7142
    CodeManagerTable: IMAGE_DATA_DIRECTORY;
 
7143
    VTableFixups: IMAGE_DATA_DIRECTORY;
 
7144
    ExportAddressTableJumps: IMAGE_DATA_DIRECTORY;
 
7145
 
 
7146
    // Precompiled image info (internal use only - set to zero)
 
7147
 
 
7148
    ManagedNativeHeader: IMAGE_DATA_DIRECTORY;
 
7149
  end;
 
7150
  {$EXTERNALSYM IMAGE_COR20_HEADER}
 
7151
  PIMAGE_COR20_HEADER = ^IMAGE_COR20_HEADER;
 
7152
  {$EXTERNALSYM PIMAGE_COR20_HEADER}
 
7153
  TImageCor20Header = IMAGE_COR20_HEADER;
 
7154
  PImageCor20Header = PIMAGE_COR20_HEADER;
 
7155
 
 
7156
//
 
7157
// End Image Format
 
7158
//
 
7159
 
 
7160
type
 
7161
  SLIST_ENTRY = SINGLE_LIST_ENTRY;
 
7162
  {$EXTERNALSYM SLIST_ENTRY}
 
7163
  _SLIST_ENTRY = _SINGLE_LIST_ENTRY;
 
7164
  {$EXTERNALSYM _SLIST_ENTRY}
 
7165
  PSLIST_ENTRY = PSINGLE_LIST_ENTRY;
 
7166
  {$EXTERNALSYM PSLIST_ENTRY}
 
7167
  TSListEntry = SLIST_ENTRY;
 
7168
  PSListEntry = PSLIST_ENTRY;
 
7169
 
 
7170
type
 
7171
  _SLIST_HEADER = record
 
7172
  case Integer of
 
7173
    0: (
 
7174
      Alignment: ULONGLONG);
 
7175
    1: (
 
7176
      Next: SLIST_ENTRY;
 
7177
      Depth: WORD;
 
7178
      Sequence: WORD);
 
7179
  end;
 
7180
  {$EXTERNALSYM _SLIST_HEADER}
 
7181
  SLIST_HEADER = _SLIST_HEADER;
 
7182
  {$EXTERNALSYM SLIST_HEADER}
 
7183
  PSLIST_HEADER = ^SLIST_HEADER;
 
7184
  {$EXTERNALSYM PSLIST_HEADER}
 
7185
  TSListHeader = SLIST_HEADER;
 
7186
  PSListHeader = PSLIST_HEADER;
 
7187
 
 
7188
procedure RtlInitializeSListHead(ListHead: PSLIST_HEADER); stdcall;
 
7189
{$EXTERNALSYM RtlInitializeSListHead}
 
7190
function RtlFirstEntrySList(ListHead: PSLIST_HEADER): PSLIST_ENTRY; stdcall;
 
7191
{$EXTERNALSYM RtlFirstEntrySList}
 
7192
function RtlInterlockedPopEntrySList(ListHead: PSLIST_HEADER): PSLIST_ENTRY; stdcall;
 
7193
{$EXTERNALSYM RtlInterlockedPopEntrySList}
 
7194
function RtlInterlockedPushEntrySList(ListHead, ListEntry: PSLIST_HEADER): PSLIST_ENTRY; stdcall;
 
7195
{$EXTERNALSYM RtlInterlockedPushEntrySList}
 
7196
function RtlInterlockedFlushSList(ListHead: PSLIST_HEADER): PSLIST_ENTRY; stdcall;
 
7197
{$EXTERNALSYM RtlInterlockedFlushSList}
 
7198
function RtlQueryDepthSList(ListHead: PSLIST_HEADER): WORD; stdcall;
 
7199
{$EXTERNALSYM RtlQueryDepthSList}
 
7200
 
 
7201
const
 
7202
  HEAP_NO_SERIALIZE             = $00000001;
 
7203
  {$EXTERNALSYM HEAP_NO_SERIALIZE}
 
7204
  HEAP_GROWABLE                 = $00000002;
 
7205
  {$EXTERNALSYM HEAP_GROWABLE}
 
7206
  HEAP_GENERATE_EXCEPTIONS      = $00000004;
 
7207
  {$EXTERNALSYM HEAP_GENERATE_EXCEPTIONS}
 
7208
  HEAP_ZERO_MEMORY              = $00000008;
 
7209
  {$EXTERNALSYM HEAP_ZERO_MEMORY}
 
7210
  HEAP_REALLOC_IN_PLACE_ONLY    = $00000010;
 
7211
  {$EXTERNALSYM HEAP_REALLOC_IN_PLACE_ONLY}
 
7212
  HEAP_TAIL_CHECKING_ENABLED    = $00000020;
 
7213
  {$EXTERNALSYM HEAP_TAIL_CHECKING_ENABLED}
 
7214
  HEAP_FREE_CHECKING_ENABLED    = $00000040;
 
7215
  {$EXTERNALSYM HEAP_FREE_CHECKING_ENABLED}
 
7216
  HEAP_DISABLE_COALESCE_ON_FREE = $00000080;
 
7217
  {$EXTERNALSYM HEAP_DISABLE_COALESCE_ON_FREE}
 
7218
  HEAP_CREATE_ALIGN_16          = $00010000;
 
7219
  {$EXTERNALSYM HEAP_CREATE_ALIGN_16}
 
7220
  HEAP_CREATE_ENABLE_TRACING    = $00020000;
 
7221
  {$EXTERNALSYM HEAP_CREATE_ENABLE_TRACING}
 
7222
  HEAP_MAXIMUM_TAG              = $0FFF;
 
7223
  {$EXTERNALSYM HEAP_MAXIMUM_TAG}
 
7224
  HEAP_PSEUDO_TAG_FLAG          = $8000;
 
7225
  {$EXTERNALSYM HEAP_PSEUDO_TAG_FLAG}
 
7226
  HEAP_TAG_SHIFT                = 18;
 
7227
  {$EXTERNALSYM HEAP_TAG_SHIFT}
 
7228
 
 
7229
function HEAP_MAKE_TAG_FLAGS(b, o: DWORD): DWORD;
 
7230
{$EXTERNALSYM HEAP_MAKE_TAG_FLAGS}
 
7231
 
 
7232
procedure RtlCaptureContext(ContextRecord: PCONTEXT); stdcall;
 
7233
{$EXTERNALSYM RtlCaptureContext}
 
7234
 
 
7235
const
 
7236
  IS_TEXT_UNICODE_ASCII16         = $0001;
 
7237
  {$EXTERNALSYM IS_TEXT_UNICODE_ASCII16}
 
7238
  IS_TEXT_UNICODE_REVERSE_ASCII16 = $0010;
 
7239
  {$EXTERNALSYM IS_TEXT_UNICODE_REVERSE_ASCII16}
 
7240
 
 
7241
  IS_TEXT_UNICODE_STATISTICS         = $0002;
 
7242
  {$EXTERNALSYM IS_TEXT_UNICODE_STATISTICS}
 
7243
  IS_TEXT_UNICODE_REVERSE_STATISTICS = $0020;
 
7244
  {$EXTERNALSYM IS_TEXT_UNICODE_REVERSE_STATISTICS}
 
7245
 
 
7246
  IS_TEXT_UNICODE_CONTROLS         = $0004;
 
7247
  {$EXTERNALSYM IS_TEXT_UNICODE_CONTROLS}
 
7248
  IS_TEXT_UNICODE_REVERSE_CONTROLS = $0040;
 
7249
  {$EXTERNALSYM IS_TEXT_UNICODE_REVERSE_CONTROLS}
 
7250
 
 
7251
  IS_TEXT_UNICODE_SIGNATURE         = $0008;
 
7252
  {$EXTERNALSYM IS_TEXT_UNICODE_SIGNATURE}
 
7253
  IS_TEXT_UNICODE_REVERSE_SIGNATURE = $0080;
 
7254
  {$EXTERNALSYM IS_TEXT_UNICODE_REVERSE_SIGNATURE}
 
7255
 
 
7256
  IS_TEXT_UNICODE_ILLEGAL_CHARS = $0100;
 
7257
  {$EXTERNALSYM IS_TEXT_UNICODE_ILLEGAL_CHARS}
 
7258
  IS_TEXT_UNICODE_ODD_LENGTH    = $0200;
 
7259
  {$EXTERNALSYM IS_TEXT_UNICODE_ODD_LENGTH}
 
7260
  IS_TEXT_UNICODE_DBCS_LEADBYTE = $0400;
 
7261
  {$EXTERNALSYM IS_TEXT_UNICODE_DBCS_LEADBYTE}
 
7262
  IS_TEXT_UNICODE_NULL_BYTES    = $1000;
 
7263
  {$EXTERNALSYM IS_TEXT_UNICODE_NULL_BYTES}
 
7264
 
 
7265
  IS_TEXT_UNICODE_UNICODE_MASK     = $000F;
 
7266
  {$EXTERNALSYM IS_TEXT_UNICODE_UNICODE_MASK}
 
7267
  IS_TEXT_UNICODE_REVERSE_MASK     = $00F0;
 
7268
  {$EXTERNALSYM IS_TEXT_UNICODE_REVERSE_MASK}
 
7269
  IS_TEXT_UNICODE_NOT_UNICODE_MASK = $0F00;
 
7270
  {$EXTERNALSYM IS_TEXT_UNICODE_NOT_UNICODE_MASK}
 
7271
  IS_TEXT_UNICODE_NOT_ASCII_MASK   = $F000;
 
7272
  {$EXTERNALSYM IS_TEXT_UNICODE_NOT_ASCII_MASK}
 
7273
 
 
7274
  COMPRESSION_FORMAT_NONE     = $0000;
 
7275
  {$EXTERNALSYM COMPRESSION_FORMAT_NONE}
 
7276
  COMPRESSION_FORMAT_DEFAULT  = $0001;
 
7277
  {$EXTERNALSYM COMPRESSION_FORMAT_DEFAULT}
 
7278
  COMPRESSION_FORMAT_LZNT1    = $0002;
 
7279
  {$EXTERNALSYM COMPRESSION_FORMAT_LZNT1}
 
7280
  COMPRESSION_ENGINE_STANDARD = $0000;
 
7281
  {$EXTERNALSYM COMPRESSION_ENGINE_STANDARD}
 
7282
  COMPRESSION_ENGINE_MAXIMUM  = $0100;
 
7283
  {$EXTERNALSYM COMPRESSION_ENGINE_MAXIMUM}
 
7284
  COMPRESSION_ENGINE_HIBER    = $0200;
 
7285
  {$EXTERNALSYM COMPRESSION_ENGINE_HIBER}
 
7286
 
 
7287
function RtlCompareMemory(const Source1, Source2: Pointer; Length: SIZE_T): SIZE_T; stdcall;
 
7288
{$EXTERNALSYM RtlCompareMemory}
 
7289
 
 
7290
type
 
7291
  PMESSAGE_RESOURCE_ENTRY = ^MESSAGE_RESOURCE_ENTRY;
 
7292
  {$EXTERNALSYM PMESSAGE_RESOURCE_ENTRY}
 
7293
  _MESSAGE_RESOURCE_ENTRY = record
 
7294
    Length: Word;
 
7295
    Flags: Word;
 
7296
    Text: array [0..0] of Byte;
 
7297
  end;
 
7298
  {$EXTERNALSYM _MESSAGE_RESOURCE_ENTRY}
 
7299
  MESSAGE_RESOURCE_ENTRY = _MESSAGE_RESOURCE_ENTRY;
 
7300
  {$EXTERNALSYM MESSAGE_RESOURCE_ENTRY}
 
7301
  TMessageResourceEntry = MESSAGE_RESOURCE_ENTRY;
 
7302
  PMessageResourceEntry = PMESSAGE_RESOURCE_ENTRY;
 
7303
 
 
7304
const
 
7305
  MESSAGE_RESOURCE_UNICODE = $0001;
 
7306
  {$EXTERNALSYM MESSAGE_RESOURCE_UNICODE}
 
7307
 
 
7308
type
 
7309
  PMESSAGE_RESOURCE_BLOCK = ^MESSAGE_RESOURCE_BLOCK;
 
7310
  {$EXTERNALSYM PMESSAGE_RESOURCE_BLOCK}
 
7311
  _MESSAGE_RESOURCE_BLOCK = record
 
7312
    LowId: DWORD;
 
7313
    HighId: DWORD;
 
7314
    OffsetToEntries: DWORD;
 
7315
  end;
 
7316
  {$EXTERNALSYM _MESSAGE_RESOURCE_BLOCK}
 
7317
  MESSAGE_RESOURCE_BLOCK = _MESSAGE_RESOURCE_BLOCK;
 
7318
  {$EXTERNALSYM MESSAGE_RESOURCE_BLOCK}
 
7319
  TMessageResourceBlock = MESSAGE_RESOURCE_BLOCK;
 
7320
  PMessageResourceBlock = PMESSAGE_RESOURCE_BLOCK;
 
7321
 
 
7322
  PMESSAGE_RESOURCE_DATA = ^MESSAGE_RESOURCE_DATA;
 
7323
  {$EXTERNALSYM PMESSAGE_RESOURCE_DATA}
 
7324
  _MESSAGE_RESOURCE_DATA = record
 
7325
    NumberOfBlocks: DWORD;
 
7326
    Blocks: array [0..0] of MESSAGE_RESOURCE_BLOCK;
 
7327
  end;
 
7328
  {$EXTERNALSYM _MESSAGE_RESOURCE_DATA}
 
7329
  MESSAGE_RESOURCE_DATA = _MESSAGE_RESOURCE_DATA;
 
7330
  {$EXTERNALSYM MESSAGE_RESOURCE_DATA}
 
7331
  TMessageResourceData = MESSAGE_RESOURCE_DATA;
 
7332
  PMessageResourceData = PMESSAGE_RESOURCE_DATA;
 
7333
 
 
7334
  LPOSVERSIONINFOA = ^OSVERSIONINFOA;
 
7335
  {$EXTERNALSYM LPOSVERSIONINFOA}
 
7336
  _OSVERSIONINFOA = record
 
7337
    dwOSVersionInfoSize: DWORD;
 
7338
    dwMajorVersion: DWORD;
 
7339
    dwMinorVersion: DWORD;
 
7340
    dwBuildNumber: DWORD;
 
7341
    dwPlatformId: DWORD;
 
7342
    szCSDVersion: array [0..127] of CHAR; // Maintenance string for PSS usage
 
7343
  end;
 
7344
  {$EXTERNALSYM _OSVERSIONINFOA}
 
7345
  OSVERSIONINFOA = _OSVERSIONINFOA;
 
7346
  {$EXTERNALSYM OSVERSIONINFOA}
 
7347
  TOsVersionInfoA = OSVERSIONINFOA;
 
7348
  POsVersionInfoA = LPOSVERSIONINFOA;
 
7349
 
 
7350
  LPOSVERSIONINFOW = ^OSVERSIONINFOW;
 
7351
  {$EXTERNALSYM LPOSVERSIONINFOW}
 
7352
  _OSVERSIONINFOW = record
 
7353
    dwOSVersionInfoSize: DWORD;
 
7354
    dwMajorVersion: DWORD;
 
7355
    dwMinorVersion: DWORD;
 
7356
    dwBuildNumber: DWORD;
 
7357
    dwPlatformId: DWORD;
 
7358
    szCSDVersion: array [0..127] of WCHAR; // Maintenance string for PSS usage
 
7359
  end;
 
7360
  {$EXTERNALSYM _OSVERSIONINFOW}
 
7361
  OSVERSIONINFOW = _OSVERSIONINFOW;
 
7362
  {$EXTERNALSYM OSVERSIONINFOW}
 
7363
  TOsVersionInfoW = OSVERSIONINFOW;
 
7364
  POsVersionInfoW = LPOSVERSIONINFOW;
 
7365
 
 
7366
  {$IFDEF UNICODE}
 
7367
  OSVERSIONINFO = OSVERSIONINFOW;
 
7368
  {$EXTERNALSYM OSVERSIONINFO}
 
7369
  POSVERSIONINFO = POSVERSIONINFOW;
 
7370
  {$EXTERNALSYM POSVERSIONINFO}
 
7371
  LPOSVERSIONINFO = LPOSVERSIONINFOW;
 
7372
  {$EXTERNALSYM LPOSVERSIONINFO}
 
7373
  TOSVersionInfo = TOSVersionInfoW;
 
7374
  {$ELSE}
 
7375
  OSVERSIONINFO = OSVERSIONINFOA;
 
7376
  {$EXTERNALSYM OSVERSIONINFO}
 
7377
  POSVERSIONINFO = POSVERSIONINFOA;
 
7378
  {$EXTERNALSYM POSVERSIONINFO}
 
7379
  LPOSVERSIONINFO = LPOSVERSIONINFOA;
 
7380
  {$EXTERNALSYM LPOSVERSIONINFO}
 
7381
  TOSVersionInfo = TOSVersionInfoA;
 
7382
  {$ENDIF UNICODE}
 
7383
 
 
7384
type
 
7385
  POSVERSIONINFOEXA = ^OSVERSIONINFOEXA;
 
7386
  {$EXTERNALSYM POSVERSIONINFOEXA}
 
7387
  _OSVERSIONINFOEXA = record
 
7388
    dwOSVersionInfoSize: DWORD;
 
7389
    dwMajorVersion: DWORD;
 
7390
    dwMinorVersion: DWORD;
 
7391
    dwBuildNumber: DWORD;
 
7392
    dwPlatformId: DWORD;
 
7393
    szCSDVersion: array [0..127] of CHAR;     // Maintenance string for PSS usage
 
7394
    wServicePackMajor: WORD;
 
7395
    wServicePackMinor: WORD;
 
7396
    wSuiteMask: WORD;
 
7397
    wProductType: BYTE;
 
7398
    wReserved: BYTE;
 
7399
  end;
 
7400
  {$EXTERNALSYM _OSVERSIONINFOEXA}
 
7401
  OSVERSIONINFOEXA = _OSVERSIONINFOEXA;
 
7402
  {$EXTERNALSYM OSVERSIONINFOEXA}
 
7403
  LPOSVERSIONINFOEXA = ^OSVERSIONINFOEXA;
 
7404
  {$EXTERNALSYM LPOSVERSIONINFOEXA}
 
7405
  TOSVersionInfoExA = _OSVERSIONINFOEXA;
 
7406
 
 
7407
  POSVERSIONINFOEXW = ^OSVERSIONINFOEXW;
 
7408
  {$EXTERNALSYM POSVERSIONINFOEXW}
 
7409
  _OSVERSIONINFOEXW = record
 
7410
    dwOSVersionInfoSize: DWORD;
 
7411
    dwMajorVersion: DWORD;
 
7412
    dwMinorVersion: DWORD;
 
7413
    dwBuildNumber: DWORD;
 
7414
    dwPlatformId: DWORD;
 
7415
    szCSDVersion: array [0..127] of WCHAR;     // Maintenance string for PSS usage
 
7416
    wServicePackMajor: WORD;
 
7417
    wServicePackMinor: WORD;
 
7418
    wSuiteMask: WORD;
 
7419
    wProductType: BYTE;
 
7420
    wReserved: BYTE;
 
7421
  end;
 
7422
  {$EXTERNALSYM _OSVERSIONINFOEXW}
 
7423
  OSVERSIONINFOEXW = _OSVERSIONINFOEXW;
 
7424
  {$EXTERNALSYM OSVERSIONINFOEXW}
 
7425
  LPOSVERSIONINFOEXW = ^OSVERSIONINFOEXW;
 
7426
  {$EXTERNALSYM LPOSVERSIONINFOEXW}
 
7427
  RTL_OSVERSIONINFOEXW = _OSVERSIONINFOEXW;
 
7428
  {$EXTERNALSYM RTL_OSVERSIONINFOEXW}
 
7429
  PRTL_OSVERSIONINFOEXW = ^RTL_OSVERSIONINFOEXW;
 
7430
  {$EXTERNALSYM PRTL_OSVERSIONINFOEXW}
 
7431
  TOSVersionInfoExW = _OSVERSIONINFOEXW;
 
7432
 
 
7433
  {$IFDEF UNICODE}
 
7434
  OSVERSIONINFOEX = OSVERSIONINFOEXW;
 
7435
  {$EXTERNALSYM OSVERSIONINFOEX}
 
7436
  POSVERSIONINFOEX = POSVERSIONINFOEXW;
 
7437
  {$EXTERNALSYM POSVERSIONINFOEX}
 
7438
  LPOSVERSIONINFOEX = LPOSVERSIONINFOEXW;
 
7439
  {$EXTERNALSYM LPOSVERSIONINFOEX}
 
7440
  TOSVersionInfoEx = TOSVersionInfoExW;
 
7441
  {$ELSE}
 
7442
  OSVERSIONINFOEX = OSVERSIONINFOEXA;
 
7443
  {$EXTERNALSYM OSVERSIONINFOEX}
 
7444
  POSVERSIONINFOEX = POSVERSIONINFOEXA;
 
7445
  {$EXTERNALSYM POSVERSIONINFOEX}
 
7446
  LPOSVERSIONINFOEX = LPOSVERSIONINFOEXA;
 
7447
  {$EXTERNALSYM LPOSVERSIONINFOEX}
 
7448
  TOSVersionInfoEx = TOSVersionInfoExA;
 
7449
  {$ENDIF UNICODE}
 
7450
 
 
7451
//
 
7452
// RtlVerifyVersionInfo() conditions
 
7453
//
 
7454
 
 
7455
const
 
7456
  VER_EQUAL         = 1;
 
7457
  {$EXTERNALSYM VER_EQUAL}
 
7458
  VER_GREATER       = 2;
 
7459
  {$EXTERNALSYM VER_GREATER}
 
7460
  VER_GREATER_EQUAL = 3;
 
7461
  {$EXTERNALSYM VER_GREATER_EQUAL}
 
7462
  VER_LESS          = 4;
 
7463
  {$EXTERNALSYM VER_LESS}
 
7464
  VER_LESS_EQUAL    = 5;
 
7465
  {$EXTERNALSYM VER_LESS_EQUAL}
 
7466
  VER_AND           = 6;
 
7467
  {$EXTERNALSYM VER_AND}
 
7468
  VER_OR            = 7;
 
7469
  {$EXTERNALSYM VER_OR}
 
7470
 
 
7471
  VER_CONDITION_MASK              = 7;
 
7472
  {$EXTERNALSYM VER_CONDITION_MASK}
 
7473
  VER_NUM_BITS_PER_CONDITION_MASK = 3;
 
7474
  {$EXTERNALSYM VER_NUM_BITS_PER_CONDITION_MASK}
 
7475
 
 
7476
//
 
7477
// RtlVerifyVersionInfo() type mask bits
 
7478
//
 
7479
 
 
7480
  VER_MINORVERSION     = $0000001;
 
7481
  {$EXTERNALSYM VER_MINORVERSION}
 
7482
  VER_MAJORVERSION     = $0000002;
 
7483
  {$EXTERNALSYM VER_MAJORVERSION}
 
7484
  VER_BUILDNUMBER      = $0000004;
 
7485
  {$EXTERNALSYM VER_BUILDNUMBER}
 
7486
  VER_PLATFORMID       = $0000008;
 
7487
  {$EXTERNALSYM VER_PLATFORMID}
 
7488
  VER_SERVICEPACKMINOR = $0000010;
 
7489
  {$EXTERNALSYM VER_SERVICEPACKMINOR}
 
7490
  VER_SERVICEPACKMAJOR = $0000020;
 
7491
  {$EXTERNALSYM VER_SERVICEPACKMAJOR}
 
7492
  VER_SUITENAME        = $0000040;
 
7493
  {$EXTERNALSYM VER_SUITENAME}
 
7494
  VER_PRODUCT_TYPE     = $0000080;
 
7495
  {$EXTERNALSYM VER_PRODUCT_TYPE}
 
7496
 
 
7497
//
 
7498
// RtlVerifyVersionInfo() os product type values
 
7499
//
 
7500
 
 
7501
  VER_NT_WORKSTATION       = $0000001;
 
7502
  {$EXTERNALSYM VER_NT_WORKSTATION}
 
7503
  VER_NT_DOMAIN_CONTROLLER = $0000002;
 
7504
  {$EXTERNALSYM VER_NT_DOMAIN_CONTROLLER}
 
7505
  VER_NT_SERVER            = $0000003;
 
7506
  {$EXTERNALSYM VER_NT_SERVER}
 
7507
 
 
7508
//
 
7509
// dwPlatformId defines:
 
7510
//
 
7511
 
 
7512
  VER_PLATFORM_WIN32s        = 0;
 
7513
  {$EXTERNALSYM VER_PLATFORM_WIN32s}
 
7514
  VER_PLATFORM_WIN32_WINDOWS = 1;
 
7515
  {$EXTERNALSYM VER_PLATFORM_WIN32_WINDOWS}
 
7516
  VER_PLATFORM_WIN32_NT      = 2;
 
7517
  {$EXTERNALSYM VER_PLATFORM_WIN32_NT}
 
7518
 
 
7519
//
 
7520
//
 
7521
// VerifyVersionInfo() macro to set the condition mask
 
7522
//
 
7523
// For documentation sakes here's the old version of the macro that got
 
7524
// changed to call an API
 
7525
// #define VER_SET_CONDITION(_m_,_t_,_c_)  _m_=(_m_|(_c_<<(1<<_t_)))
 
7526
//
 
7527
 
 
7528
procedure VER_SET_CONDITION(var Mask: DWORDLONG; TypeBitmask, ConditionMask: ULONG);
 
7529
{$EXTERNALSYM VER_SET_CONDITION}
 
7530
 
 
7531
function VerSetConditionMask(ConditionMask: ULONGLONG; TypeMask: DWORD;
 
7532
  Condition: BYTE): ULONGLONG; stdcall;
 
7533
{$EXTERNALSYM VerSetConditionMask}
 
7534
 
 
7535
type
 
7536
  PRTL_CRITICAL_SECTION_DEBUG = ^RTL_CRITICAL_SECTION_DEBUG;
 
7537
  {$EXTERNALSYM PRTL_CRITICAL_SECTION_DEBUG}
 
7538
  _RTL_CRITICAL_SECTION_DEBUG = record
 
7539
    _Type: WORD;
 
7540
    CreatorBackTraceIndex: WORD;
 
7541
    CriticalSection: PRTL_CRITICAL_SECTION_DEBUG;
 
7542
    ProcessLocksList: LIST_ENTRY;
 
7543
    EntryCount: DWORD;
 
7544
    ContentionCount: DWORD;
 
7545
    Spare: array [0..1] of DWORD;
 
7546
  end;
 
7547
  {$EXTERNALSYM _RTL_CRITICAL_SECTION_DEBUG}
 
7548
  RTL_CRITICAL_SECTION_DEBUG = _RTL_CRITICAL_SECTION_DEBUG;
 
7549
  {$EXTERNALSYM RTL_CRITICAL_SECTION_DEBUG}
 
7550
  TRtlCriticalSectionDebug = RTL_CRITICAL_SECTION_DEBUG;
 
7551
  PRtlCriticalSectionDebug = PRTL_CRITICAL_SECTION_DEBUG;
 
7552
  RTL_RESOURCE_DEBUG = _RTL_CRITICAL_SECTION_DEBUG;
 
7553
  {$EXTERNALSYM RTL_RESOURCE_DEBUG}
 
7554
  PRTL_RESOURCE_DEBUG = RTL_RESOURCE_DEBUG;
 
7555
  {$EXTERNALSYM PRTL_RESOURCE_DEBUG}
 
7556
  TRtlResourceDebug = RTL_CRITICAL_SECTION_DEBUG;
 
7557
  PRtlResourceDebug = PRTL_CRITICAL_SECTION_DEBUG;
 
7558
 
 
7559
const
 
7560
  RTL_CRITSECT_TYPE = 0;
 
7561
  {$EXTERNALSYM RTL_CRITSECT_TYPE}
 
7562
  RTL_RESOURCE_TYPE = 1;
 
7563
  {$EXTERNALSYM RTL_RESOURCE_TYPE}
 
7564
 
 
7565
type
 
7566
  PRTL_CRITICAL_SECTION = ^RTL_CRITICAL_SECTION;
 
7567
  {$EXTERNALSYM PRTL_CRITICAL_SECTION}
 
7568
  _RTL_CRITICAL_SECTION = record
 
7569
    DebugInfo: PRTL_CRITICAL_SECTION_DEBUG;
 
7570
 
 
7571
    //
 
7572
    //  The following three fields control entering and exiting the critical
 
7573
    //  section for the resource
 
7574
    //
 
7575
 
 
7576
    LockCount: LONG;
 
7577
    RecursionCount: LONG;
 
7578
    OwningThread: HANDLE;        // from the thread's ClientId->UniqueThread
 
7579
    LockSemaphore: HANDLE;
 
7580
    SpinCount: ULONG_PTR;        // force size on 64-bit systems when packed
 
7581
  end;
 
7582
  {$EXTERNALSYM _RTL_CRITICAL_SECTION}
 
7583
  RTL_CRITICAL_SECTION = _RTL_CRITICAL_SECTION;
 
7584
  {$EXTERNALSYM RTL_CRITICAL_SECTION}
 
7585
  TRtlCriticalSection = RTL_CRITICAL_SECTION;
 
7586
  PRtlCriticalSection = PRTL_CRITICAL_SECTION;
 
7587
 
 
7588
  RTL_VERIFIER_DLL_LOAD_CALLBACK = procedure(DllName: PWSTR; DllBase: PVOID; DllSize: SIZE_T;
 
7589
    Reserved: PVOID); stdcall;
 
7590
  {$EXTERNALSYM RTL_VERIFIER_DLL_LOAD_CALLBACK}
 
7591
 
 
7592
  RTL_VERIFIER_DLL_UNLOAD_CALLBACK = procedure(DllName: PWSTR; DllBase: PVOID; DllSize: SIZE_T;
 
7593
    Reserved: PVOID); stdcall;
 
7594
  {$EXTERNALSYM RTL_VERIFIER_DLL_UNLOAD_CALLBACK}
 
7595
 
 
7596
  RTL_VERIFIER_NTDLLHEAPFREE_CALLBACK = procedure(AllocationBase: PVOID; AllocationSize: SIZE_T); stdcall;
 
7597
  {$EXTERNALSYM RTL_VERIFIER_NTDLLHEAPFREE_CALLBACK}
 
7598
 
 
7599
  PRTL_VERIFIER_THUNK_DESCRIPTOR = ^RTL_VERIFIER_THUNK_DESCRIPTOR;
 
7600
  {$EXTERNALSYM PRTL_VERIFIER_THUNK_DESCRIPTOR}
 
7601
  _RTL_VERIFIER_THUNK_DESCRIPTOR = record
 
7602
    ThunkName: PCHAR;
 
7603
    ThunkOldAddress: PVOID;
 
7604
    ThunkNewAddress: PVOID;
 
7605
  end;
 
7606
  {$EXTERNALSYM _RTL_VERIFIER_THUNK_DESCRIPTOR}
 
7607
  RTL_VERIFIER_THUNK_DESCRIPTOR = _RTL_VERIFIER_THUNK_DESCRIPTOR;
 
7608
  {$EXTERNALSYM RTL_VERIFIER_THUNK_DESCRIPTOR}
 
7609
  TRtlVerifierThunkDescriptor = RTL_VERIFIER_THUNK_DESCRIPTOR;
 
7610
  PRtlVerifierThunkDescriptor = PRTL_VERIFIER_THUNK_DESCRIPTOR;
 
7611
 
 
7612
  PRTL_VERIFIER_DLL_DESCRIPTOR = ^RTL_VERIFIER_DLL_DESCRIPTOR;
 
7613
  {$EXTERNALSYM PRTL_VERIFIER_DLL_DESCRIPTOR}
 
7614
  _RTL_VERIFIER_DLL_DESCRIPTOR = record
 
7615
    DllName: PWCHAR;
 
7616
    DllFlags: DWORD;
 
7617
    DllAddress: PVOID;
 
7618
    DllThunks: PRTL_VERIFIER_THUNK_DESCRIPTOR;
 
7619
  end;
 
7620
  {$EXTERNALSYM _RTL_VERIFIER_DLL_DESCRIPTOR}
 
7621
  RTL_VERIFIER_DLL_DESCRIPTOR = _RTL_VERIFIER_DLL_DESCRIPTOR;
 
7622
  {$EXTERNALSYM RTL_VERIFIER_DLL_DESCRIPTOR}
 
7623
  TRtlVerifierDllDescriptor = RTL_VERIFIER_DLL_DESCRIPTOR;
 
7624
  PRtlVerifierDllDescriptor = PRTL_VERIFIER_DLL_DESCRIPTOR;
 
7625
 
 
7626
  PRTL_VERIFIER_PROVIDER_DESCRIPTOR = ^RTL_VERIFIER_PROVIDER_DESCRIPTOR;
 
7627
  {$EXTERNALSYM PRTL_VERIFIER_PROVIDER_DESCRIPTOR}
 
7628
  _RTL_VERIFIER_PROVIDER_DESCRIPTOR = record
 
7629
    //
 
7630
    // Filled by verifier provider DLL
 
7631
    //
 
7632
    Length: DWORD;
 
7633
    ProviderDlls: PRTL_VERIFIER_DLL_DESCRIPTOR;
 
7634
    ProviderDllLoadCallback: RTL_VERIFIER_DLL_LOAD_CALLBACK;
 
7635
    ProviderDllUnloadCallback: RTL_VERIFIER_DLL_UNLOAD_CALLBACK;
 
7636
    //
 
7637
    // Filled by verifier engine
 
7638
    //
 
7639
    VerifierImage: PWSTR;
 
7640
    VerifierFlags: DWORD;
 
7641
    VerifierDebug: DWORD;
 
7642
 
 
7643
    RtlpGetStackTraceAddress: PVOID;
 
7644
    RtlpDebugPageHeapCreate: PVOID;
 
7645
    RtlpDebugPageHeapDestroy: PVOID;
 
7646
 
 
7647
    //
 
7648
    // Filled by verifier provider DLL
 
7649
    //
 
7650
 
 
7651
    ProviderNtdllHeapFreeCallback: RTL_VERIFIER_NTDLLHEAPFREE_CALLBACK;
 
7652
  end;
 
7653
  {$EXTERNALSYM _RTL_VERIFIER_PROVIDER_DESCRIPTOR}
 
7654
  RTL_VERIFIER_PROVIDER_DESCRIPTOR = _RTL_VERIFIER_PROVIDER_DESCRIPTOR;
 
7655
  {$EXTERNALSYM RTL_VERIFIER_PROVIDER_DESCRIPTOR}
 
7656
  TRtlVerifierProviderDescriptor = RTL_VERIFIER_PROVIDER_DESCRIPTOR;
 
7657
  PRtlVerifierProviderDescriptor = PRTL_VERIFIER_PROVIDER_DESCRIPTOR;
 
7658
 
 
7659
//
 
7660
// Application verifier standard flags
 
7661
//
 
7662
 
 
7663
const
 
7664
  RTL_VRF_FLG_FULL_PAGE_HEAP                 = $00000001;
 
7665
  {$EXTERNALSYM RTL_VRF_FLG_FULL_PAGE_HEAP}
 
7666
  RTL_VRF_FLG_RESERVED_DONOTUSE              = $00000002; // old RTL_VRF_FLG_LOCK_CHECKS
 
7667
  {$EXTERNALSYM RTL_VRF_FLG_RESERVED_DONOTUSE}
 
7668
  RTL_VRF_FLG_HANDLE_CHECKS                  = $00000004;
 
7669
  {$EXTERNALSYM RTL_VRF_FLG_HANDLE_CHECKS}
 
7670
  RTL_VRF_FLG_STACK_CHECKS                   = $00000008;
 
7671
  {$EXTERNALSYM RTL_VRF_FLG_STACK_CHECKS}
 
7672
  RTL_VRF_FLG_APPCOMPAT_CHECKS               = $00000010;
 
7673
  {$EXTERNALSYM RTL_VRF_FLG_APPCOMPAT_CHECKS}
 
7674
  RTL_VRF_FLG_TLS_CHECKS                     = $00000020;
 
7675
  {$EXTERNALSYM RTL_VRF_FLG_TLS_CHECKS}
 
7676
  RTL_VRF_FLG_DIRTY_STACKS                   = $00000040;
 
7677
  {$EXTERNALSYM RTL_VRF_FLG_DIRTY_STACKS}
 
7678
  RTL_VRF_FLG_RPC_CHECKS                     = $00000080;
 
7679
  {$EXTERNALSYM RTL_VRF_FLG_RPC_CHECKS}
 
7680
  RTL_VRF_FLG_COM_CHECKS                     = $00000100;
 
7681
  {$EXTERNALSYM RTL_VRF_FLG_COM_CHECKS}
 
7682
  RTL_VRF_FLG_DANGEROUS_APIS                 = $00000200;
 
7683
  {$EXTERNALSYM RTL_VRF_FLG_DANGEROUS_APIS}
 
7684
  RTL_VRF_FLG_RACE_CHECKS                    = $00000400;
 
7685
  {$EXTERNALSYM RTL_VRF_FLG_RACE_CHECKS}
 
7686
  RTL_VRF_FLG_DEADLOCK_CHECKS                = $00000800;
 
7687
  {$EXTERNALSYM RTL_VRF_FLG_DEADLOCK_CHECKS}
 
7688
  RTL_VRF_FLG_FIRST_CHANCE_EXCEPTION_CHECKS  = $00001000;
 
7689
  {$EXTERNALSYM RTL_VRF_FLG_FIRST_CHANCE_EXCEPTION_CHECKS}
 
7690
  RTL_VRF_FLG_VIRTUAL_MEM_CHECKS             = $00002000;
 
7691
  {$EXTERNALSYM RTL_VRF_FLG_VIRTUAL_MEM_CHECKS}
 
7692
  RTL_VRF_FLG_ENABLE_LOGGING                 = $00004000;
 
7693
  {$EXTERNALSYM RTL_VRF_FLG_ENABLE_LOGGING}
 
7694
  RTL_VRF_FLG_FAST_FILL_HEAP                 = $00008000;
 
7695
  {$EXTERNALSYM RTL_VRF_FLG_FAST_FILL_HEAP}
 
7696
  RTL_VRF_FLG_VIRTUAL_SPACE_TRACKING         = $00010000;
 
7697
  {$EXTERNALSYM RTL_VRF_FLG_VIRTUAL_SPACE_TRACKING}
 
7698
  RTL_VRF_FLG_ENABLED_SYSTEM_WIDE            = $00020000;
 
7699
  {$EXTERNALSYM RTL_VRF_FLG_ENABLED_SYSTEM_WIDE}
 
7700
  RTL_VRF_FLG_MISCELLANEOUS_CHECKS           = $00020000;
 
7701
  {$EXTERNALSYM RTL_VRF_FLG_MISCELLANEOUS_CHECKS}
 
7702
  RTL_VRF_FLG_LOCK_CHECKS                    = $00040000;
 
7703
  {$EXTERNALSYM RTL_VRF_FLG_LOCK_CHECKS}
 
7704
 
 
7705
//
 
7706
// Application verifier standard stop codes
 
7707
//
 
7708
 
 
7709
  APPLICATION_VERIFIER_INTERNAL_ERROR    = DWORD($80000000);
 
7710
  {$EXTERNALSYM APPLICATION_VERIFIER_INTERNAL_ERROR}
 
7711
  APPLICATION_VERIFIER_INTERNAL_WARNING  = $40000000;
 
7712
  {$EXTERNALSYM APPLICATION_VERIFIER_INTERNAL_WARNING}
 
7713
  APPLICATION_VERIFIER_NO_BREAK          = $20000000;
 
7714
  {$EXTERNALSYM APPLICATION_VERIFIER_NO_BREAK}
 
7715
  APPLICATION_VERIFIER_CONTINUABLE_BREAK = $10000000;
 
7716
  {$EXTERNALSYM APPLICATION_VERIFIER_CONTINUABLE_BREAK}
 
7717
 
 
7718
  APPLICATION_VERIFIER_UNKNOWN_ERROR         = $0001;
 
7719
  {$EXTERNALSYM APPLICATION_VERIFIER_UNKNOWN_ERROR}
 
7720
  APPLICATION_VERIFIER_ACCESS_VIOLATION      = $0002;
 
7721
  {$EXTERNALSYM APPLICATION_VERIFIER_ACCESS_VIOLATION}
 
7722
  APPLICATION_VERIFIER_UNSYNCHRONIZED_ACCESS = $0003;
 
7723
  {$EXTERNALSYM APPLICATION_VERIFIER_UNSYNCHRONIZED_ACCESS}
 
7724
  APPLICATION_VERIFIER_EXTREME_SIZE_REQUEST  = $0004;
 
7725
  {$EXTERNALSYM APPLICATION_VERIFIER_EXTREME_SIZE_REQUEST}
 
7726
  APPLICATION_VERIFIER_BAD_HEAP_HANDLE       = $0005;
 
7727
  {$EXTERNALSYM APPLICATION_VERIFIER_BAD_HEAP_HANDLE}
 
7728
  APPLICATION_VERIFIER_SWITCHED_HEAP_HANDLE  = $0006;
 
7729
  {$EXTERNALSYM APPLICATION_VERIFIER_SWITCHED_HEAP_HANDLE}
 
7730
  APPLICATION_VERIFIER_DOUBLE_FREE           = $0007;
 
7731
  {$EXTERNALSYM APPLICATION_VERIFIER_DOUBLE_FREE}
 
7732
  APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK  = $0008;
 
7733
  {$EXTERNALSYM APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK}
 
7734
  APPLICATION_VERIFIER_DESTROY_PROCESS_HEAP  = $0009;
 
7735
  {$EXTERNALSYM APPLICATION_VERIFIER_DESTROY_PROCESS_HEAP}
 
7736
  APPLICATION_VERIFIER_UNEXPECTED_EXCEPTION  = $000A;
 
7737
  {$EXTERNALSYM APPLICATION_VERIFIER_UNEXPECTED_EXCEPTION}
 
7738
  APPLICATION_VERIFIER_STACK_OVERFLOW        = $000B;
 
7739
  {$EXTERNALSYM APPLICATION_VERIFIER_STACK_OVERFLOW}
 
7740
 
 
7741
  APPLICATION_VERIFIER_TERMINATE_THREAD_CALL = $0100;
 
7742
  {$EXTERNALSYM APPLICATION_VERIFIER_TERMINATE_THREAD_CALL}
 
7743
  APPLICATION_VERIFIER_INVALID_EXIT_PROCESS_CALL = $0101;
 
7744
  {$EXTERNALSYM APPLICATION_VERIFIER_INVALID_EXIT_PROCESS_CALL}
 
7745
 
 
7746
  APPLICATION_VERIFIER_EXIT_THREAD_OWNS_LOCK        = $0200;
 
7747
  {$EXTERNALSYM APPLICATION_VERIFIER_EXIT_THREAD_OWNS_LOCK}
 
7748
  APPLICATION_VERIFIER_LOCK_IN_UNLOADED_DLL         = $0201;
 
7749
  {$EXTERNALSYM APPLICATION_VERIFIER_LOCK_IN_UNLOADED_DLL}
 
7750
  APPLICATION_VERIFIER_LOCK_IN_FREED_HEAP           = $0202;
 
7751
  {$EXTERNALSYM APPLICATION_VERIFIER_LOCK_IN_FREED_HEAP}
 
7752
  APPLICATION_VERIFIER_LOCK_DOUBLE_INITIALIZE       = $0203;
 
7753
  {$EXTERNALSYM APPLICATION_VERIFIER_LOCK_DOUBLE_INITIALIZE}
 
7754
  APPLICATION_VERIFIER_LOCK_IN_FREED_MEMORY         = $0204;
 
7755
  {$EXTERNALSYM APPLICATION_VERIFIER_LOCK_IN_FREED_MEMORY}
 
7756
  APPLICATION_VERIFIER_LOCK_CORRUPTED               = $0205;
 
7757
  {$EXTERNALSYM APPLICATION_VERIFIER_LOCK_CORRUPTED}
 
7758
  APPLICATION_VERIFIER_LOCK_INVALID_OWNER           = $0206;
 
7759
  {$EXTERNALSYM APPLICATION_VERIFIER_LOCK_INVALID_OWNER}
 
7760
  APPLICATION_VERIFIER_LOCK_INVALID_RECURSION_COUNT = $0207;
 
7761
  {$EXTERNALSYM APPLICATION_VERIFIER_LOCK_INVALID_RECURSION_COUNT}
 
7762
  APPLICATION_VERIFIER_LOCK_INVALID_LOCK_COUNT      = $0208;
 
7763
  {$EXTERNALSYM APPLICATION_VERIFIER_LOCK_INVALID_LOCK_COUNT}
 
7764
  APPLICATION_VERIFIER_LOCK_OVER_RELEASED           = $0209;
 
7765
  {$EXTERNALSYM APPLICATION_VERIFIER_LOCK_OVER_RELEASED}
 
7766
  APPLICATION_VERIFIER_LOCK_NOT_INITIALIZED         = $0210;
 
7767
  {$EXTERNALSYM APPLICATION_VERIFIER_LOCK_NOT_INITIALIZED}
 
7768
  APPLICATION_VERIFIER_LOCK_ALREADY_INITIALIZED     = $0211;
 
7769
  {$EXTERNALSYM APPLICATION_VERIFIER_LOCK_ALREADY_INITIALIZED}
 
7770
 
 
7771
  APPLICATION_VERIFIER_INVALID_HANDLE      = $0300;
 
7772
  {$EXTERNALSYM APPLICATION_VERIFIER_INVALID_HANDLE}
 
7773
  APPLICATION_VERIFIER_INVALID_TLS_VALUE   = $0301;
 
7774
  {$EXTERNALSYM APPLICATION_VERIFIER_INVALID_TLS_VALUE}
 
7775
  APPLICATION_VERIFIER_INCORRECT_WAIT_CALL = $0302;
 
7776
  {$EXTERNALSYM APPLICATION_VERIFIER_INCORRECT_WAIT_CALL}
 
7777
  APPLICATION_VERIFIER_NULL_HANDLE         = $0303;
 
7778
  {$EXTERNALSYM APPLICATION_VERIFIER_NULL_HANDLE}
 
7779
  APPLICATION_VERIFIER_WAIT_IN_DLLMAIN     = $0304;
 
7780
  {$EXTERNALSYM APPLICATION_VERIFIER_WAIT_IN_DLLMAIN}
 
7781
 
 
7782
  APPLICATION_VERIFIER_COM_ERROR                   = $0400;
 
7783
  {$EXTERNALSYM APPLICATION_VERIFIER_COM_ERROR}
 
7784
  APPLICATION_VERIFIER_COM_API_IN_DLLMAIN          = $0401;
 
7785
  {$EXTERNALSYM APPLICATION_VERIFIER_COM_API_IN_DLLMAIN}
 
7786
  APPLICATION_VERIFIER_COM_UNHANDLED_EXCEPTION     = $0402;
 
7787
  {$EXTERNALSYM APPLICATION_VERIFIER_COM_UNHANDLED_EXCEPTION}
 
7788
  APPLICATION_VERIFIER_COM_UNBALANCED_COINIT       = $0403;
 
7789
  {$EXTERNALSYM APPLICATION_VERIFIER_COM_UNBALANCED_COINIT}
 
7790
  APPLICATION_VERIFIER_COM_UNBALANCED_OLEINIT      = $0404;
 
7791
  {$EXTERNALSYM APPLICATION_VERIFIER_COM_UNBALANCED_OLEINIT}
 
7792
  APPLICATION_VERIFIER_COM_UNBALANCED_SWC          = $0405;
 
7793
  {$EXTERNALSYM APPLICATION_VERIFIER_COM_UNBALANCED_SWC}
 
7794
  APPLICATION_VERIFIER_COM_NULL_DACL               = $0406;
 
7795
  {$EXTERNALSYM APPLICATION_VERIFIER_COM_NULL_DACL}
 
7796
  APPLICATION_VERIFIER_COM_UNSAFE_IMPERSONATION    = $0407;
 
7797
  {$EXTERNALSYM APPLICATION_VERIFIER_COM_UNSAFE_IMPERSONATION}
 
7798
  APPLICATION_VERIFIER_COM_SMUGGLED_WRAPPER        = $0408;
 
7799
  {$EXTERNALSYM APPLICATION_VERIFIER_COM_SMUGGLED_WRAPPER}
 
7800
  APPLICATION_VERIFIER_COM_SMUGGLED_PROXY          = $0409;
 
7801
  {$EXTERNALSYM APPLICATION_VERIFIER_COM_SMUGGLED_PROXY}
 
7802
  APPLICATION_VERIFIER_COM_CF_SUCCESS_WITH_NULL    = $040A;
 
7803
  {$EXTERNALSYM APPLICATION_VERIFIER_COM_CF_SUCCESS_WITH_NULL}
 
7804
  APPLICATION_VERIFIER_COM_GCO_SUCCESS_WITH_NULL   = $040B;
 
7805
  {$EXTERNALSYM APPLICATION_VERIFIER_COM_GCO_SUCCESS_WITH_NULL}
 
7806
  APPLICATION_VERIFIER_COM_OBJECT_IN_FREED_MEMORY  = $040C;
 
7807
  {$EXTERNALSYM APPLICATION_VERIFIER_COM_OBJECT_IN_FREED_MEMORY}
 
7808
  APPLICATION_VERIFIER_COM_OBJECT_IN_UNLOADED_DLL  = $040D;
 
7809
  {$EXTERNALSYM APPLICATION_VERIFIER_COM_OBJECT_IN_UNLOADED_DLL}
 
7810
  APPLICATION_VERIFIER_COM_VTBL_IN_FREED_MEMORY    = $040E;
 
7811
  {$EXTERNALSYM APPLICATION_VERIFIER_COM_VTBL_IN_FREED_MEMORY}
 
7812
  APPLICATION_VERIFIER_COM_VTBL_IN_UNLOADED_DLL    = $040F;
 
7813
  {$EXTERNALSYM APPLICATION_VERIFIER_COM_VTBL_IN_UNLOADED_DLL}
 
7814
  APPLICATION_VERIFIER_COM_HOLDING_LOCKS_ON_CALL   = $0410;
 
7815
  {$EXTERNALSYM APPLICATION_VERIFIER_COM_HOLDING_LOCKS_ON_CALL}
 
7816
 
 
7817
  APPLICATION_VERIFIER_RPC_ERROR                  = $0500;
 
7818
  {$EXTERNALSYM APPLICATION_VERIFIER_RPC_ERROR}
 
7819
 
 
7820
  APPLICATION_VERIFIER_INVALID_FREEMEM            = $0600;
 
7821
  {$EXTERNALSYM APPLICATION_VERIFIER_INVALID_FREEMEM}
 
7822
  APPLICATION_VERIFIER_INVALID_ALLOCMEM           = $0601;
 
7823
  {$EXTERNALSYM APPLICATION_VERIFIER_INVALID_ALLOCMEM}
 
7824
  APPLICATION_VERIFIER_INVALID_MAPVIEW            = $0602;
 
7825
  {$EXTERNALSYM APPLICATION_VERIFIER_INVALID_MAPVIEW}
 
7826
  APPLICATION_VERIFIER_PROBE_INVALID_ADDRESS        = $0603;
 
7827
  {$EXTERNALSYM APPLICATION_VERIFIER_PROBE_INVALID_ADDRESS}
 
7828
  APPLICATION_VERIFIER_PROBE_FREE_MEM               = $0604;
 
7829
  {$EXTERNALSYM APPLICATION_VERIFIER_PROBE_FREE_MEM}
 
7830
  APPLICATION_VERIFIER_PROBE_GUARD_PAGE             = $0605;
 
7831
  {$EXTERNALSYM APPLICATION_VERIFIER_PROBE_GUARD_PAGE}
 
7832
  APPLICATION_VERIFIER_PROBE_NULL                   = $0606;
 
7833
  {$EXTERNALSYM APPLICATION_VERIFIER_PROBE_NULL}
 
7834
  APPLICATION_VERIFIER_PROBE_INVALID_START_OR_SIZE  = $0607;
 
7835
  {$EXTERNALSYM APPLICATION_VERIFIER_PROBE_INVALID_START_OR_SIZE}
 
7836
 
 
7837
(* TODO
 
7838
#define VERIFIER_STOP(Code, Msg, P1, S1, P2, S2, P3, S3, P4, S4) {  \
 
7839
        RtlApplicationVerifierStop ((Code),                         \
 
7840
                                    (Msg),                          \
 
7841
                                    (ULONG_PTR)(P1),(S1),           \
 
7842
                                    (ULONG_PTR)(P2),(S2),           \
 
7843
                                    (ULONG_PTR)(P3),(S3),           \
 
7844
                                    (ULONG_PTR)(P4),(S4));          \
 
7845
  }
 
7846
 
 
7847
VOID NTAPI
 
7848
RtlApplicationVerifierStop (
 
7849
    ULONG_PTR Code,
 
7850
    PCHAR Message,
 
7851
    ULONG_PTR Param1, PCHAR Description1,
 
7852
    ULONG_PTR Param2, PCHAR Description2,
 
7853
    ULONG_PTR Param3, PCHAR Description3,
 
7854
    ULONG_PTR Param4, PCHAR Description4
 
7855
    );
 
7856
*)
 
7857
 
 
7858
type
 
7859
  PVECTORED_EXCEPTION_HANDLER = function(ExceptionInfo: PEXCEPTION_POINTERS): LONG; stdcall;
 
7860
  {$EXTERNALSYM PVECTORED_EXCEPTION_HANDLER}
 
7861
  PVectoredExceptionHandler = PVECTORED_EXCEPTION_HANDLER;
 
7862
 
 
7863
const
 
7864
  SEF_DACL_AUTO_INHERIT             = $01;
 
7865
  {$EXTERNALSYM SEF_DACL_AUTO_INHERIT}
 
7866
  SEF_SACL_AUTO_INHERIT             = $02;
 
7867
  {$EXTERNALSYM SEF_SACL_AUTO_INHERIT}
 
7868
  SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT = $04;
 
7869
  {$EXTERNALSYM SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT}
 
7870
  SEF_AVOID_PRIVILEGE_CHECK         = $08;
 
7871
  {$EXTERNALSYM SEF_AVOID_PRIVILEGE_CHECK}
 
7872
  SEF_AVOID_OWNER_CHECK             = $10;
 
7873
  {$EXTERNALSYM SEF_AVOID_OWNER_CHECK}
 
7874
  SEF_DEFAULT_OWNER_FROM_PARENT     = $20;
 
7875
  {$EXTERNALSYM SEF_DEFAULT_OWNER_FROM_PARENT}
 
7876
  SEF_DEFAULT_GROUP_FROM_PARENT     = $40;
 
7877
  {$EXTERNALSYM SEF_DEFAULT_GROUP_FROM_PARENT}
 
7878
 
 
7879
type
 
7880
  _HEAP_INFORMATION_CLASS = (HeapCompatibilityInformation);
 
7881
  {$EXTERNALSYM _HEAP_INFORMATION_CLASS}
 
7882
  HEAP_INFORMATION_CLASS = _HEAP_INFORMATION_CLASS;
 
7883
  {$EXTERNALSYM HEAP_INFORMATION_CLASS}
 
7884
  THeapInformationClass = HEAP_INFORMATION_CLASS;
 
7885
 
 
7886
{ TODO
 
7887
DWORD NTAPI
 
7888
RtlSetHeapInformation (
 
7889
    IN PVOID HeapHandle,
 
7890
    IN HEAP_INFORMATION_CLASS HeapInformationClass,
 
7891
    IN PVOID HeapInformation OPTIONAL,
 
7892
    IN SIZE_T HeapInformationLength OPTIONAL
 
7893
    );
 
7894
 
 
7895
DWORD NTAPI
 
7896
RtlQueryHeapInformation (
 
7897
    IN PVOID HeapHandle,
 
7898
    IN HEAP_INFORMATION_CLASS HeapInformationClass,
 
7899
    OUT PVOID HeapInformation OPTIONAL,
 
7900
    IN SIZE_T HeapInformationLength OPTIONAL,
 
7901
    OUT PSIZE_T ReturnLength OPTIONAL
 
7902
    );
 
7903
 
 
7904
//
 
7905
//  Multiple alloc-free APIS
 
7906
//
 
7907
 
 
7908
DWORD
 
7909
NTAPI
 
7910
RtlMultipleAllocateHeap (
 
7911
    IN PVOID HeapHandle,
 
7912
    IN DWORD Flags,
 
7913
    IN SIZE_T Size,
 
7914
    IN DWORD Count,
 
7915
    OUT PVOID * Array
 
7916
    );
 
7917
 
 
7918
DWORD
 
7919
NTAPI
 
7920
RtlMultipleFreeHeap (
 
7921
    IN PVOID HeapHandle,
 
7922
    IN DWORD Flags,
 
7923
    IN DWORD Count,
 
7924
    OUT PVOID * Array
 
7925
    );
 
7926
}
 
7927
 
 
7928
const
 
7929
  WT_EXECUTEDEFAULT                 = $00000000;
 
7930
  {$EXTERNALSYM WT_EXECUTEDEFAULT}
 
7931
  WT_EXECUTEINIOTHREAD              = $00000001;
 
7932
  {$EXTERNALSYM WT_EXECUTEINIOTHREAD}
 
7933
  WT_EXECUTEINUITHREAD              = $00000002;
 
7934
  {$EXTERNALSYM WT_EXECUTEINUITHREAD}
 
7935
  WT_EXECUTEINWAITTHREAD            = $00000004;
 
7936
  {$EXTERNALSYM WT_EXECUTEINWAITTHREAD}
 
7937
  WT_EXECUTEONLYONCE                = $00000008;
 
7938
  {$EXTERNALSYM WT_EXECUTEONLYONCE}
 
7939
  WT_EXECUTEINTIMERTHREAD           = $00000020;
 
7940
  {$EXTERNALSYM WT_EXECUTEINTIMERTHREAD}
 
7941
  WT_EXECUTELONGFUNCTION            = $00000010;
 
7942
  {$EXTERNALSYM WT_EXECUTELONGFUNCTION}
 
7943
  WT_EXECUTEINPERSISTENTIOTHREAD    = $00000040;
 
7944
  {$EXTERNALSYM WT_EXECUTEINPERSISTENTIOTHREAD}
 
7945
  WT_EXECUTEINPERSISTENTTHREAD      = $00000080;
 
7946
  {$EXTERNALSYM WT_EXECUTEINPERSISTENTTHREAD}
 
7947
  WT_TRANSFER_IMPERSONATION         = $00000100;
 
7948
  {$EXTERNALSYM WT_TRANSFER_IMPERSONATION}
 
7949
 
 
7950
function WT_SET_MAX_THREADPOOL_THREADS(var Flags: DWORD; Limit: DWORD): DWORD;
 
7951
{$EXTERNALSYM WT_SET_MAX_THREADPOOL_THREADS}
 
7952
 
 
7953
type
 
7954
  WAITORTIMERCALLBACKFUNC = procedure(P: PVOID; B: ByteBool); stdcall;
 
7955
  {$EXTERNALSYM WAITORTIMERCALLBACKFUNC}
 
7956
  WORKERCALLBACKFUNC = procedure(P: PVOID); stdcall;
 
7957
  {$EXTERNALSYM WORKERCALLBACKFUNC}
 
7958
  APC_CALLBACK_FUNCTION = procedure(D: DWORD; P1, P2: PVOID); stdcall;
 
7959
  {$EXTERNALSYM APC_CALLBACK_FUNCTION}
 
7960
 
 
7961
const
 
7962
  WT_EXECUTEINLONGTHREAD = $00000010;
 
7963
  {$EXTERNALSYM WT_EXECUTEINLONGTHREAD}
 
7964
  WT_EXECUTEDELETEWAIT   = $00000008;
 
7965
  {$EXTERNALSYM WT_EXECUTEDELETEWAIT}
 
7966
 
 
7967
type
 
7968
  _ACTIVATION_CONTEXT_INFO_CLASS = DWORD;
 
7969
  {$EXTERNALSYM _ACTIVATION_CONTEXT_INFO_CLASS}
 
7970
  ACTIVATION_CONTEXT_INFO_CLASS = _ACTIVATION_CONTEXT_INFO_CLASS;
 
7971
  {$EXTERNALSYM ACTIVATION_CONTEXT_INFO_CLASS}
 
7972
  TActivationContextInfoClass = ACTIVATION_CONTEXT_INFO_CLASS;
 
7973
 
 
7974
const
 
7975
  ActivationContextBasicInformation                       = 1;
 
7976
  {$EXTERNALSYM ActivationContextBasicInformation}
 
7977
  ActivationContextDetailedInformation                    = 2;
 
7978
  {$EXTERNALSYM ActivationContextDetailedInformation}
 
7979
  AssemblyDetailedInformationInActivationContxt           = 3;
 
7980
  {$EXTERNALSYM AssemblyDetailedInformationInActivationContxt}
 
7981
  FileInformationInAssemblyOfAssemblyInActivationContxt   = 4;
 
7982
  {$EXTERNALSYM FileInformationInAssemblyOfAssemblyInActivationContxt}
 
7983
  MaxActivationContextInfoClass                           = 5;
 
7984
  {$EXTERNALSYM MaxActivationContextInfoClass}
 
7985
 
 
7986
type
 
7987
  PACTIVATION_CONTEXT_QUERY_INDEX = ^ACTIVATION_CONTEXT_QUERY_INDEX;
 
7988
  {$EXTERNALSYM PACTIVATION_CONTEXT_QUERY_INDEX}
 
7989
  _ACTIVATION_CONTEXT_QUERY_INDEX = record
 
7990
    ulAssemblyIndex: DWORD;
 
7991
    ulFileIndexInAssembly: DWORD;
 
7992
  end;
 
7993
  {$EXTERNALSYM _ACTIVATION_CONTEXT_QUERY_INDEX}
 
7994
  ACTIVATION_CONTEXT_QUERY_INDEX = _ACTIVATION_CONTEXT_QUERY_INDEX;
 
7995
  {$EXTERNALSYM ACTIVATION_CONTEXT_QUERY_INDEX}
 
7996
  TActivationContextQueryIndex = ACTIVATION_CONTEXT_QUERY_INDEX;
 
7997
  PActivationContextQueryIndex = PACTIVATION_CONTEXT_QUERY_INDEX;
 
7998
 
 
7999
const
 
8000
  ACTIVATION_CONTEXT_PATH_TYPE_NONE        = 1;
 
8001
  {$EXTERNALSYM ACTIVATION_CONTEXT_PATH_TYPE_NONE}
 
8002
  ACTIVATION_CONTEXT_PATH_TYPE_WIN32_FILE  = 2;
 
8003
  {$EXTERNALSYM ACTIVATION_CONTEXT_PATH_TYPE_WIN32_FILE}
 
8004
  ACTIVATION_CONTEXT_PATH_TYPE_URL         = 3;
 
8005
  {$EXTERNALSYM ACTIVATION_CONTEXT_PATH_TYPE_URL}
 
8006
  ACTIVATION_CONTEXT_PATH_TYPE_ASSEMBLYREF = 4;
 
8007
  {$EXTERNALSYM ACTIVATION_CONTEXT_PATH_TYPE_ASSEMBLYREF}
 
8008
 
 
8009
type
 
8010
  PASSEMBLY_FILE_DETAILED_INFORMATION = ^ASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION;
 
8011
  {$EXTERNALSYM PASSEMBLY_FILE_DETAILED_INFORMATION}
 
8012
  _ASSEMBLY_FILE_DETAILED_INFORMATION = record
 
8013
    ulFlags: DWORD;
 
8014
    ulFilenameLength: DWORD;
 
8015
    ulPathLength: DWORD;
 
8016
    lpFileName: LPCWSTR;
 
8017
    lpFilePath: LPCWSTR;
 
8018
  end;
 
8019
  {$EXTERNALSYM _ASSEMBLY_FILE_DETAILED_INFORMATION}
 
8020
  ASSEMBLY_FILE_DETAILED_INFORMATION = _ASSEMBLY_FILE_DETAILED_INFORMATION;
 
8021
  {$EXTERNALSYM ASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION}
 
8022
  PCASSEMBLY_FILE_DETAILED_INFORMATION = PASSEMBLY_FILE_DETAILED_INFORMATION;
 
8023
  {$EXTERNALSYM PCASSEMBLY_FILE_DETAILED_INFORMATION}
 
8024
  TAssemblyFileDetailedInformation = ASSEMBLY_FILE_DETAILED_INFORMATION;
 
8025
  PAssemblyFileDetailedInformation = PASSEMBLY_FILE_DETAILED_INFORMATION;
 
8026
 
 
8027
//
 
8028
// compatibility with old names
 
8029
// The new names use "file" consistently.
 
8030
//
 
8031
 
 
8032
  _ASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION = _ASSEMBLY_FILE_DETAILED_INFORMATION;
 
8033
  {$EXTERNALSYM _ASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION}
 
8034
  ASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION = ASSEMBLY_FILE_DETAILED_INFORMATION;
 
8035
  {$EXTERNALSYM ASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION}
 
8036
  PASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION = PASSEMBLY_FILE_DETAILED_INFORMATION;
 
8037
  {$EXTERNALSYM PASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION}
 
8038
  PCASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION = PCASSEMBLY_FILE_DETAILED_INFORMATION;
 
8039
  {$EXTERNALSYM PCASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION}
 
8040
  TAssemblyDllRedirectionDetailedInformation = TAssemblyFileDetailedInformation;
 
8041
  PAssemblyDllRedirectionDetailedInformation = PAssemblyFileDetailedInformation;
 
8042
 
 
8043
  PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION = ^ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
 
8044
  {$EXTERNALSYM PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION}
 
8045
  _ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION = record
 
8046
    ulFlags: DWORD;
 
8047
    ulEncodedAssemblyIdentityLength: DWORD; // in bytes
 
8048
    ulManifestPathType: DWORD;              // ACTIVATION_CONTEXT_PATH_TYPE_*
 
8049
    ulManifestPathLength: DWORD;            // in bytes
 
8050
    liManifestLastWriteTime: LARGE_INTEGER; // FILETIME
 
8051
    ulPolicyPathType: DWORD;                // ACTIVATION_CONTEXT_PATH_TYPE_*
 
8052
    ulPolicyPathLength: DWORD;              // in bytes
 
8053
    liPolicyLastWriteTime: LARGE_INTEGER;   // FILETIME
 
8054
    ulMetadataSatelliteRosterIndex: DWORD;
 
8055
    ulManifestVersionMajor: DWORD;          // 1
 
8056
    ulManifestVersionMinor: DWORD;          // 0
 
8057
    ulPolicyVersionMajor: DWORD;            // 0
 
8058
    ulPolicyVersionMinor: DWORD;            // 0
 
8059
    ulAssemblyDirectoryNameLength: DWORD;   // in bytes
 
8060
    lpAssemblyEncodedAssemblyIdentity: LPCWSTR;
 
8061
    lpAssemblyManifestPath: LPCWSTR;
 
8062
    lpAssemblyPolicyPath: LPCWSTR;
 
8063
    lpAssemblyDirectoryName: LPCWSTR;
 
8064
    ulFileCount: DWORD;
 
8065
  end;
 
8066
  {$EXTERNALSYM _ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION}
 
8067
  ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION = _ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
 
8068
  {$EXTERNALSYM ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION}
 
8069
  TActivationContextAssemblyDetailedInformation = ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
 
8070
  PActivationContextAssemblyDetailedInformation = PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
 
8071
 
 
8072
  PACTIVATION_CONTEXT_DETAILED_INFORMATION = ^ACTIVATION_CONTEXT_DETAILED_INFORMATION;
 
8073
  {$EXTERNALSYM PACTIVATION_CONTEXT_DETAILED_INFORMATION}
 
8074
  _ACTIVATION_CONTEXT_DETAILED_INFORMATION = record
 
8075
    dwFlags: DWORD;
 
8076
    ulFormatVersion: DWORD;
 
8077
    ulAssemblyCount: DWORD;
 
8078
    ulRootManifestPathType: DWORD;
 
8079
    ulRootManifestPathChars: DWORD;
 
8080
    ulRootConfigurationPathType: DWORD;
 
8081
    ulRootConfigurationPathChars: DWORD;
 
8082
    ulAppDirPathType: DWORD;
 
8083
    ulAppDirPathChars: DWORD;
 
8084
    lpRootManifestPath: LPCWSTR;
 
8085
    lpRootConfigurationPath: LPCWSTR;
 
8086
    lpAppDirPath: LPCWSTR;
 
8087
  end;
 
8088
  {$EXTERNALSYM _ACTIVATION_CONTEXT_DETAILED_INFORMATION}
 
8089
  ACTIVATION_CONTEXT_DETAILED_INFORMATION = _ACTIVATION_CONTEXT_DETAILED_INFORMATION;
 
8090
  {$EXTERNALSYM ACTIVATION_CONTEXT_DETAILED_INFORMATION}
 
8091
  TActivationContextDetailedInformation = ACTIVATION_CONTEXT_DETAILED_INFORMATION;
 
8092
  PActivationContextDetailedInformation = PACTIVATION_CONTEXT_DETAILED_INFORMATION;
 
8093
 
 
8094
const
 
8095
  DLL_PROCESS_ATTACH     = 1;
 
8096
  {$EXTERNALSYM DLL_PROCESS_ATTACH}
 
8097
  DLL_THREAD_ATTACH      = 2;
 
8098
  {$EXTERNALSYM DLL_THREAD_ATTACH}
 
8099
  DLL_THREAD_DETACH      = 3;
 
8100
  {$EXTERNALSYM DLL_THREAD_DETACH}
 
8101
  DLL_PROCESS_DETACH     = 0;
 
8102
  {$EXTERNALSYM DLL_PROCESS_DETACH}
 
8103
  DLL_PROCESS_VERIFIER   = 4;
 
8104
  {$EXTERNALSYM DLL_PROCESS_VERIFIER}
 
8105
 
 
8106
//
 
8107
// Defines for the READ flags for Eventlogging
 
8108
//
 
8109
 
 
8110
  EVENTLOG_SEQUENTIAL_READ = $0001;
 
8111
  {$EXTERNALSYM EVENTLOG_SEQUENTIAL_READ}
 
8112
  EVENTLOG_SEEK_READ       = $0002;
 
8113
  {$EXTERNALSYM EVENTLOG_SEEK_READ}
 
8114
  EVENTLOG_FORWARDS_READ   = $0004;
 
8115
  {$EXTERNALSYM EVENTLOG_FORWARDS_READ}
 
8116
  EVENTLOG_BACKWARDS_READ  = $0008;
 
8117
  {$EXTERNALSYM EVENTLOG_BACKWARDS_READ}
 
8118
 
 
8119
//
 
8120
// The types of events that can be logged.
 
8121
//
 
8122
 
 
8123
  EVENTLOG_SUCCESS          = $0000;
 
8124
  {$EXTERNALSYM EVENTLOG_SUCCESS}
 
8125
  EVENTLOG_ERROR_TYPE       = $0001;
 
8126
  {$EXTERNALSYM EVENTLOG_ERROR_TYPE}
 
8127
  EVENTLOG_WARNING_TYPE     = $0002;
 
8128
  {$EXTERNALSYM EVENTLOG_WARNING_TYPE}
 
8129
  EVENTLOG_INFORMATION_TYPE = $0004;
 
8130
  {$EXTERNALSYM EVENTLOG_INFORMATION_TYPE}
 
8131
  EVENTLOG_AUDIT_SUCCESS    = $0008;
 
8132
  {$EXTERNALSYM EVENTLOG_AUDIT_SUCCESS}
 
8133
  EVENTLOG_AUDIT_FAILURE    = $0010;
 
8134
  {$EXTERNALSYM EVENTLOG_AUDIT_FAILURE}
 
8135
 
 
8136
//
 
8137
// Defines for the WRITE flags used by Auditing for paired events
 
8138
// These are not implemented in Product 1
 
8139
//
 
8140
 
 
8141
  EVENTLOG_START_PAIRED_EVENT    = $0001;
 
8142
  {$EXTERNALSYM EVENTLOG_START_PAIRED_EVENT}
 
8143
  EVENTLOG_END_PAIRED_EVENT      = $0002;
 
8144
  {$EXTERNALSYM EVENTLOG_END_PAIRED_EVENT}
 
8145
  EVENTLOG_END_ALL_PAIRED_EVENTS = $0004;
 
8146
  {$EXTERNALSYM EVENTLOG_END_ALL_PAIRED_EVENTS}
 
8147
  EVENTLOG_PAIRED_EVENT_ACTIVE   = $0008;
 
8148
  {$EXTERNALSYM EVENTLOG_PAIRED_EVENT_ACTIVE}
 
8149
  EVENTLOG_PAIRED_EVENT_INACTIVE = $0010;
 
8150
  {$EXTERNALSYM EVENTLOG_PAIRED_EVENT_INACTIVE}
 
8151
 
 
8152
//
 
8153
// Structure that defines the header of the Eventlog record. This is the
 
8154
// fixed-sized portion before all the variable-length strings, binary
 
8155
// data and pad bytes.
 
8156
//
 
8157
// TimeGenerated is the time it was generated at the client.
 
8158
// TimeWritten is the time it was put into the log at the server end.
 
8159
//
 
8160
 
 
8161
type
 
8162
  PEventlogrecord = ^EVENTLOGRECORD;
 
8163
  _EVENTLOGRECORD = record
 
8164
    Length: DWORD; // Length of full record
 
8165
    Reserved: DWORD; // Used by the service
 
8166
    RecordNumber: DWORD; // Absolute record number
 
8167
    TimeGenerated: DWORD; // Seconds since 1-1-1970
 
8168
    TimeWritten: DWORD; // Seconds since 1-1-1970
 
8169
    EventID: DWORD;
 
8170
    EventType: Word;
 
8171
    NumStrings: Word;
 
8172
    EventCategory: Word;
 
8173
    ReservedFlags: Word; // For use with paired events (auditing)
 
8174
    ClosingRecordNumber: DWORD; // For use with paired events (auditing)
 
8175
    StringOffset: DWORD; // Offset from beginning of record
 
8176
    UserSidLength: DWORD;
 
8177
    UserSidOffset: DWORD;
 
8178
    DataLength: DWORD;
 
8179
    DataOffset: DWORD; // Offset from beginning of record
 
8180
    //
 
8181
    // Then follow:
 
8182
    //
 
8183
    // WCHAR SourceName[]
 
8184
    // WCHAR Computername[]
 
8185
    // SID   UserSid
 
8186
    // WCHAR Strings[]
 
8187
    // BYTE  Data[]
 
8188
    // CHAR  Pad[]
 
8189
    // DWORD Length;
 
8190
    //
 
8191
  end;
 
8192
  {$EXTERNALSYM _EVENTLOGRECORD}
 
8193
  EVENTLOGRECORD = _EVENTLOGRECORD;
 
8194
  {$EXTERNALSYM EVENTLOGRECORD}
 
8195
  TEventlogrecord = EVENTLOGRECORD;
 
8196
 
 
8197
const
 
8198
  MAXLOGICALLOGNAMESIZE = 256;
 
8199
  {$EXTERNALSYM MAXLOGICALLOGNAMESIZE}
 
8200
 
 
8201
type
 
8202
  PEventsForLogFile = ^EVENTSFORLOGFILE;
 
8203
  _EVENTSFORLOGFILE = record
 
8204
    ulSize: DWORD;
 
8205
    szLogicalLogFile: array [0..MAXLOGICALLOGNAMESIZE - 1] of WCHAR; // name of the logical file-security/application/system
 
8206
    ulNumRecords: DWORD;
 
8207
    pEventLogRecords: array [0..0] of EVENTLOGRECORD;
 
8208
  end;
 
8209
  {$EXTERNALSYM _EVENTSFORLOGFILE}
 
8210
  EVENTSFORLOGFILE = _EVENTSFORLOGFILE;
 
8211
  {$EXTERNALSYM EVENTSFORLOGFILE}
 
8212
  TEventsForLogFile = EVENTSFORLOGFILE;
 
8213
 
 
8214
  PPackedEventInfo = ^PACKEDEVENTINFO;
 
8215
  _PACKEDEVENTINFO = record
 
8216
    ulSize: DWORD;                    // total size of the structure
 
8217
    ulNumEventsForLogFile: DWORD;     // number of EventsForLogFile structure that follow
 
8218
    ulOffsets: array [0..0] of DWORD; // the offsets from the start of this structure to the EVENTSFORLOGFILE structure
 
8219
  end;
 
8220
  {$EXTERNALSYM _PACKEDEVENTINFO}
 
8221
  PACKEDEVENTINFO = _PACKEDEVENTINFO;
 
8222
  {$EXTERNALSYM PACKEDEVENTINFO}
 
8223
  TPackedEventInfo = PACKEDEVENTINFO;
 
8224
 
 
8225
//
 
8226
// Registry Specific Access Rights.
 
8227
//
 
8228
 
 
8229
const
 
8230
  KEY_QUERY_VALUE        = $0001;
 
8231
  {$EXTERNALSYM KEY_QUERY_VALUE}
 
8232
  KEY_SET_VALUE          = $0002;
 
8233
  {$EXTERNALSYM KEY_SET_VALUE}
 
8234
  KEY_CREATE_SUB_KEY     = $0004;
 
8235
  {$EXTERNALSYM KEY_CREATE_SUB_KEY}
 
8236
  KEY_ENUMERATE_SUB_KEYS = $0008;
 
8237
  {$EXTERNALSYM KEY_ENUMERATE_SUB_KEYS}
 
8238
  KEY_NOTIFY             = $0010;
 
8239
  {$EXTERNALSYM KEY_NOTIFY}
 
8240
  KEY_CREATE_LINK        = $0020;
 
8241
  {$EXTERNALSYM KEY_CREATE_LINK}
 
8242
  KEY_WOW64_32KEY        = $0200;
 
8243
  {$EXTERNALSYM KEY_WOW64_32KEY}
 
8244
  KEY_WOW64_64KEY        = $0100;
 
8245
  {$EXTERNALSYM KEY_WOW64_64KEY}
 
8246
  KEY_WOW64_RES          = $0300;
 
8247
  {$EXTERNALSYM KEY_WOW64_RES}
 
8248
 
 
8249
  KEY_READ = STANDARD_RIGHTS_READ or KEY_QUERY_VALUE or KEY_ENUMERATE_SUB_KEYS or
 
8250
    KEY_NOTIFY  and (not SYNCHRONIZE);
 
8251
  {$EXTERNALSYM KEY_READ}
 
8252
 
 
8253
  KEY_WRITE = STANDARD_RIGHTS_WRITE or KEY_SET_VALUE or KEY_CREATE_SUB_KEY and
 
8254
    (not SYNCHRONIZE);
 
8255
  {$EXTERNALSYM KEY_WRITE}
 
8256
 
 
8257
  KEY_EXECUTE = KEY_READ and  (not SYNCHRONIZE);
 
8258
  {$EXTERNALSYM KEY_EXECUTE}
 
8259
 
 
8260
  KEY_ALL_ACCESS = STANDARD_RIGHTS_ALL or KEY_QUERY_VALUE or KEY_SET_VALUE or
 
8261
    KEY_CREATE_SUB_KEY or KEY_ENUMERATE_SUB_KEYS or KEY_NOTIFY or
 
8262
    KEY_CREATE_LINK and (not SYNCHRONIZE);
 
8263
  {$EXTERNALSYM KEY_ALL_ACCESS}
 
8264
 
 
8265
//
 
8266
// Open/Create Options
 
8267
//
 
8268
 
 
8269
  REG_OPTION_RESERVED = $00000000; // Parameter is reserved
 
8270
  {$EXTERNALSYM REG_OPTION_RESERVED}
 
8271
 
 
8272
  REG_OPTION_NON_VOLATILE = $00000000; // Key is preserved when system is rebooted
 
8273
  {$EXTERNALSYM REG_OPTION_NON_VOLATILE}
 
8274
 
 
8275
  REG_OPTION_VOLATILE = $00000001; // Key is not preserved when system is rebooted
 
8276
  {$EXTERNALSYM REG_OPTION_VOLATILE}
 
8277
 
 
8278
  REG_OPTION_CREATE_LINK = $00000002; // Created key is a symbolic link
 
8279
  {$EXTERNALSYM REG_OPTION_CREATE_LINK}
 
8280
 
 
8281
  REG_OPTION_BACKUP_RESTORE = $00000004; // open for backup or restore
 
8282
  {$EXTERNALSYM REG_OPTION_BACKUP_RESTORE}
 
8283
                                                    // special access rules
 
8284
                                                    // privilege required
 
8285
 
 
8286
  REG_OPTION_OPEN_LINK = $00000008; // Open symbolic link
 
8287
  {$EXTERNALSYM REG_OPTION_OPEN_LINK}
 
8288
 
 
8289
  REG_LEGAL_OPTION = REG_OPTION_RESERVED or REG_OPTION_NON_VOLATILE or
 
8290
    REG_OPTION_VOLATILE or REG_OPTION_CREATE_LINK or REG_OPTION_BACKUP_RESTORE or
 
8291
    REG_OPTION_OPEN_LINK;
 
8292
  {$EXTERNALSYM REG_LEGAL_OPTION}
 
8293
 
 
8294
//
 
8295
// Key creation/open disposition
 
8296
//
 
8297
 
 
8298
  REG_CREATED_NEW_KEY     = $00000001; // New Registry Key created
 
8299
  {$EXTERNALSYM REG_CREATED_NEW_KEY}
 
8300
  REG_OPENED_EXISTING_KEY = $00000002; // Existing Key opened
 
8301
  {$EXTERNALSYM REG_OPENED_EXISTING_KEY}
 
8302
 
 
8303
//
 
8304
// hive format to be used by Reg(Nt)SaveKeyEx
 
8305
//
 
8306
 
 
8307
  REG_STANDARD_FORMAT    = 1;
 
8308
  {$EXTERNALSYM REG_STANDARD_FORMAT}
 
8309
  REG_LATEST_FORMAT      = 2;
 
8310
  {$EXTERNALSYM REG_LATEST_FORMAT}
 
8311
  REG_NO_COMPRESSION     = 4;
 
8312
  {$EXTERNALSYM REG_NO_COMPRESSION}
 
8313
 
 
8314
//
 
8315
// Key restore flags
 
8316
//
 
8317
 
 
8318
  REG_WHOLE_HIVE_VOLATILE = $00000001; // Restore whole hive volatile
 
8319
  {$EXTERNALSYM REG_WHOLE_HIVE_VOLATILE}
 
8320
  REG_REFRESH_HIVE        = $00000002; // Unwind changes to last flush
 
8321
  {$EXTERNALSYM REG_REFRESH_HIVE}
 
8322
  REG_NO_LAZY_FLUSH       = $00000004; // Never lazy flush this hive
 
8323
  {$EXTERNALSYM REG_NO_LAZY_FLUSH}
 
8324
  REG_FORCE_RESTORE       = $00000008; // Force the restore process even when we have open handles on subkeys
 
8325
  {$EXTERNALSYM REG_FORCE_RESTORE}
 
8326
 
 
8327
//
 
8328
// Unload Flags
 
8329
//
 
8330
 
 
8331
  REG_FORCE_UNLOAD = 1;
 
8332
  {$EXTERNALSYM REG_FORCE_UNLOAD}
 
8333
 
 
8334
// end_ntddk end_wdm end_nthal
 
8335
 
 
8336
//
 
8337
// Notify filter values
 
8338
//
 
8339
 
 
8340
  REG_NOTIFY_CHANGE_NAME       = $00000001; // Create or delete (child)
 
8341
  {$EXTERNALSYM REG_NOTIFY_CHANGE_NAME}
 
8342
  REG_NOTIFY_CHANGE_ATTRIBUTES = $00000002;
 
8343
  {$EXTERNALSYM REG_NOTIFY_CHANGE_ATTRIBUTES}
 
8344
  REG_NOTIFY_CHANGE_LAST_SET   = $00000004; // time stamp
 
8345
  {$EXTERNALSYM REG_NOTIFY_CHANGE_LAST_SET}
 
8346
  REG_NOTIFY_CHANGE_SECURITY   = $00000008;
 
8347
  {$EXTERNALSYM REG_NOTIFY_CHANGE_SECURITY}
 
8348
 
 
8349
  REG_LEGAL_CHANGE_FILTER = REG_NOTIFY_CHANGE_NAME or REG_NOTIFY_CHANGE_ATTRIBUTES or
 
8350
    REG_NOTIFY_CHANGE_LAST_SET or REG_NOTIFY_CHANGE_SECURITY;
 
8351
  {$EXTERNALSYM REG_LEGAL_CHANGE_FILTER}
 
8352
 
 
8353
//
 
8354
//
 
8355
// Predefined Value Types.
 
8356
//
 
8357
 
 
8358
  REG_NONE      = 0; // No value type
 
8359
  {$EXTERNALSYM REG_NONE}
 
8360
  REG_SZ        = 1; // Unicode nul terminated string
 
8361
  {$EXTERNALSYM REG_SZ}
 
8362
  REG_EXPAND_SZ = 2; // Unicode nul terminated string
 
8363
  {$EXTERNALSYM REG_EXPAND_SZ}
 
8364
                                            // (with environment variable references)
 
8365
  REG_BINARY                     = 3; // Free form binary
 
8366
  {$EXTERNALSYM REG_BINARY}
 
8367
  REG_DWORD                      = 4; // 32-bit number
 
8368
  {$EXTERNALSYM REG_DWORD}
 
8369
  REG_DWORD_LITTLE_ENDIAN        = 4; // 32-bit number (same as REG_DWORD)
 
8370
  {$EXTERNALSYM REG_DWORD_LITTLE_ENDIAN}
 
8371
  REG_DWORD_BIG_ENDIAN           = 5; // 32-bit number
 
8372
  {$EXTERNALSYM REG_DWORD_BIG_ENDIAN}
 
8373
  REG_LINK                       = 6; // Symbolic Link (unicode)
 
8374
  {$EXTERNALSYM REG_LINK}
 
8375
  REG_MULTI_SZ                   = 7; // Multiple Unicode strings
 
8376
  {$EXTERNALSYM REG_MULTI_SZ}
 
8377
  REG_RESOURCE_LIST              = 8; // Resource list in the resource map
 
8378
  {$EXTERNALSYM REG_RESOURCE_LIST}
 
8379
  REG_FULL_RESOURCE_DESCRIPTOR   = 9; // Resource list in the hardware description
 
8380
  {$EXTERNALSYM REG_FULL_RESOURCE_DESCRIPTOR}
 
8381
  REG_RESOURCE_REQUIREMENTS_LIST = 10;
 
8382
  {$EXTERNALSYM REG_RESOURCE_REQUIREMENTS_LIST}
 
8383
  REG_QWORD                      = 11; // 64-bit number
 
8384
  {$EXTERNALSYM REG_QWORD}
 
8385
  REG_QWORD_LITTLE_ENDIAN        = 11; // 64-bit number (same as REG_QWORD)
 
8386
  {$EXTERNALSYM REG_QWORD_LITTLE_ENDIAN}
 
8387
 
 
8388
//
 
8389
// Service Types (Bit Mask)
 
8390
//
 
8391
 
 
8392
  SERVICE_KERNEL_DRIVER      = $00000001;
 
8393
  {$EXTERNALSYM SERVICE_KERNEL_DRIVER}
 
8394
  SERVICE_FILE_SYSTEM_DRIVER = $00000002;
 
8395
  {$EXTERNALSYM SERVICE_FILE_SYSTEM_DRIVER}
 
8396
  SERVICE_ADAPTER            = $00000004;
 
8397
  {$EXTERNALSYM SERVICE_ADAPTER}
 
8398
  SERVICE_RECOGNIZER_DRIVER  = $00000008;
 
8399
  {$EXTERNALSYM SERVICE_RECOGNIZER_DRIVER}
 
8400
 
 
8401
  SERVICE_DRIVER = SERVICE_KERNEL_DRIVER or SERVICE_FILE_SYSTEM_DRIVER or
 
8402
    SERVICE_RECOGNIZER_DRIVER;
 
8403
  {$EXTERNALSYM SERVICE_DRIVER}
 
8404
 
 
8405
  SERVICE_WIN32_OWN_PROCESS   = $00000010;
 
8406
  {$EXTERNALSYM SERVICE_WIN32_OWN_PROCESS}
 
8407
  SERVICE_WIN32_SHARE_PROCESS = $00000020;
 
8408
  {$EXTERNALSYM SERVICE_WIN32_SHARE_PROCESS}
 
8409
 
 
8410
  SERVICE_WIN32 = SERVICE_WIN32_OWN_PROCESS or SERVICE_WIN32_SHARE_PROCESS;
 
8411
  {$EXTERNALSYM SERVICE_WIN32}
 
8412
 
 
8413
  SERVICE_INTERACTIVE_PROCESS = $00000100;
 
8414
  {$EXTERNALSYM SERVICE_INTERACTIVE_PROCESS}
 
8415
 
 
8416
  SERVICE_TYPE_ALL = SERVICE_WIN32 or SERVICE_ADAPTER or SERVICE_DRIVER or
 
8417
    SERVICE_INTERACTIVE_PROCESS;
 
8418
  {$EXTERNALSYM SERVICE_TYPE_ALL}
 
8419
 
 
8420
//
 
8421
// Start Type
 
8422
//
 
8423
 
 
8424
  SERVICE_BOOT_START   = $00000000;
 
8425
  {$EXTERNALSYM SERVICE_BOOT_START}
 
8426
  SERVICE_SYSTEM_START = $00000001;
 
8427
  {$EXTERNALSYM SERVICE_SYSTEM_START}
 
8428
  SERVICE_AUTO_START   = $00000002;
 
8429
  {$EXTERNALSYM SERVICE_AUTO_START}
 
8430
  SERVICE_DEMAND_START = $00000003;
 
8431
  {$EXTERNALSYM SERVICE_DEMAND_START}
 
8432
  SERVICE_DISABLED     = $00000004;
 
8433
  {$EXTERNALSYM SERVICE_DISABLED}
 
8434
 
 
8435
//
 
8436
// Error control type
 
8437
//
 
8438
 
 
8439
  SERVICE_ERROR_IGNORE   = $00000000;
 
8440
  {$EXTERNALSYM SERVICE_ERROR_IGNORE}
 
8441
  SERVICE_ERROR_NORMAL   = $00000001;
 
8442
  {$EXTERNALSYM SERVICE_ERROR_NORMAL}
 
8443
  SERVICE_ERROR_SEVERE   = $00000002;
 
8444
  {$EXTERNALSYM SERVICE_ERROR_SEVERE}
 
8445
  SERVICE_ERROR_CRITICAL = $00000003;
 
8446
  {$EXTERNALSYM SERVICE_ERROR_CRITICAL}
 
8447
 
 
8448
//
 
8449
// Define the registry driver node enumerations
 
8450
//
 
8451
 
 
8452
const
 
8453
 
 
8454
//SERVICE_NODE_TYPE
 
8455
 
 
8456
  DriverType               = SERVICE_KERNEL_DRIVER;
 
8457
  FileSystemType           = SERVICE_FILE_SYSTEM_DRIVER;
 
8458
  Win32ServiceOwnProcess   = SERVICE_WIN32_OWN_PROCESS;
 
8459
  Win32ServiceShareProcess = SERVICE_WIN32_SHARE_PROCESS;
 
8460
  AdapterType              = SERVICE_ADAPTER;
 
8461
  RecognizerType           = SERVICE_RECOGNIZER_DRIVER;
 
8462
 
 
8463
//SERVICE_LOAD_TYPE
 
8464
 
 
8465
  BootLoad    = SERVICE_BOOT_START;
 
8466
  SystemLoad  = SERVICE_SYSTEM_START;
 
8467
  AutoLoad    = SERVICE_AUTO_START;
 
8468
  DemandLoad  = SERVICE_DEMAND_START;
 
8469
  DisableLoad = SERVICE_DISABLED;
 
8470
 
 
8471
//SERVICE_ERROR_TYPE
 
8472
 
 
8473
  IgnoreError   = SERVICE_ERROR_IGNORE;
 
8474
  NormalError   = SERVICE_ERROR_NORMAL;
 
8475
  SevereError   = SERVICE_ERROR_SEVERE;
 
8476
  CriticalError = SERVICE_ERROR_CRITICAL;
 
8477
 
 
8478
//
 
8479
// IOCTL_TAPE_ERASE definitions
 
8480
//
 
8481
 
 
8482
type
 
8483
  SERVICE_NODE_TYPE = DWORD;
 
8484
  {$EXTERNALSYM SERVICE_NODE_TYPE}
 
8485
  TServiceNodeType = SERVICE_NODE_TYPE;
 
8486
  SERVICE_LOAD_TYPE = DWORD;
 
8487
  {$EXTERNALSYM SERVICE_LOAD_TYPE}
 
8488
  TServiceLoadType = SERVICE_LOAD_TYPE;
 
8489
  SERVICE_ERROR_TYPE = DWORD;
 
8490
  {$EXTERNALSYM SERVICE_ERROR_TYPE}
 
8491
  TServiceErrorType = SERVICE_ERROR_TYPE;
 
8492
 
 
8493
const
 
8494
  TAPE_ERASE_SHORT = 0;
 
8495
  {$EXTERNALSYM TAPE_ERASE_SHORT}
 
8496
  TAPE_ERASE_LONG  = 1;
 
8497
  {$EXTERNALSYM TAPE_ERASE_LONG}
 
8498
 
 
8499
type
 
8500
  PTAPE_ERASE = ^TAPE_ERASE;
 
8501
  {$EXTERNALSYM PTAPE_ERASE}
 
8502
  _TAPE_ERASE = record
 
8503
    Type_: DWORD;
 
8504
    Immediate: ByteBool;
 
8505
  end;
 
8506
  {$EXTERNALSYM _TAPE_ERASE}
 
8507
  TAPE_ERASE = _TAPE_ERASE;
 
8508
  {$EXTERNALSYM TAPE_ERASE}
 
8509
  TTapeErase = TAPE_ERASE;
 
8510
  PTapeErase = PTAPE_ERASE;
 
8511
 
 
8512
//
 
8513
// IOCTL_TAPE_PREPARE definitions
 
8514
//
 
8515
 
 
8516
const
 
8517
  TAPE_LOAD    = 0;
 
8518
  {$EXTERNALSYM TAPE_LOAD}
 
8519
  TAPE_UNLOAD  = 1;
 
8520
  {$EXTERNALSYM TAPE_UNLOAD}
 
8521
  TAPE_TENSION = 2;
 
8522
  {$EXTERNALSYM TAPE_TENSION}
 
8523
  TAPE_LOCK    = 3;
 
8524
  {$EXTERNALSYM TAPE_LOCK}
 
8525
  TAPE_UNLOCK  = 4;
 
8526
  {$EXTERNALSYM TAPE_UNLOCK}
 
8527
  TAPE_FORMAT  = 5;
 
8528
  {$EXTERNALSYM TAPE_FORMAT}
 
8529
 
 
8530
type
 
8531
  PTAPE_PREPARE = ^TAPE_PREPARE;
 
8532
  {$EXTERNALSYM PTAPE_PREPARE}
 
8533
  _TAPE_PREPARE = record
 
8534
    Operation: DWORD;
 
8535
    Immediate: ByteBool;
 
8536
  end;
 
8537
  {$EXTERNALSYM _TAPE_PREPARE}
 
8538
  TAPE_PREPARE = _TAPE_PREPARE;
 
8539
  {$EXTERNALSYM TAPE_PREPARE}
 
8540
  TTapePrepare = TAPE_PREPARE;
 
8541
  PTapePrepare = PTAPE_PREPARE;
 
8542
 
 
8543
//
 
8544
// IOCTL_TAPE_WRITE_MARKS definitions
 
8545
//
 
8546
 
 
8547
const
 
8548
  TAPE_SETMARKS        = 0;
 
8549
  {$EXTERNALSYM TAPE_SETMARKS}
 
8550
  TAPE_FILEMARKS       = 1;
 
8551
  {$EXTERNALSYM TAPE_FILEMARKS}
 
8552
  TAPE_SHORT_FILEMARKS = 2;
 
8553
  {$EXTERNALSYM TAPE_SHORT_FILEMARKS}
 
8554
  TAPE_LONG_FILEMARKS  = 3;
 
8555
  {$EXTERNALSYM TAPE_LONG_FILEMARKS}
 
8556
 
 
8557
type
 
8558
  PTAPE_WRITE_MARKS = ^TAPE_WRITE_MARKS;
 
8559
  {$EXTERNALSYM PTAPE_WRITE_MARKS}
 
8560
  _TAPE_WRITE_MARKS = record
 
8561
    Type_: DWORD;
 
8562
    Count: DWORD;
 
8563
    Immediate: ByteBool;
 
8564
  end;
 
8565
  {$EXTERNALSYM _TAPE_WRITE_MARKS}
 
8566
  TAPE_WRITE_MARKS = _TAPE_WRITE_MARKS;
 
8567
  {$EXTERNALSYM TAPE_WRITE_MARKS}
 
8568
  TTapeWriteMarks = TAPE_WRITE_MARKS;
 
8569
  PTapeWriteMarks = PTAPE_WRITE_MARKS;
 
8570
 
 
8571
//
 
8572
// IOCTL_TAPE_GET_POSITION definitions
 
8573
//
 
8574
 
 
8575
const
 
8576
  TAPE_ABSOLUTE_POSITION       = 0;
 
8577
  {$EXTERNALSYM TAPE_ABSOLUTE_POSITION}
 
8578
  TAPE_LOGICAL_POSITION        = 1;
 
8579
  {$EXTERNALSYM TAPE_LOGICAL_POSITION}
 
8580
  TAPE_PSEUDO_LOGICAL_POSITION = 2;
 
8581
  {$EXTERNALSYM TAPE_PSEUDO_LOGICAL_POSITION}
 
8582
 
 
8583
type
 
8584
  PTAPE_GET_POSITION = ^TAPE_GET_POSITION;
 
8585
  {$EXTERNALSYM PTAPE_GET_POSITION}
 
8586
  _TAPE_GET_POSITION = record
 
8587
    Type_: DWORD;
 
8588
    Partition: DWORD;
 
8589
    Offset: LARGE_INTEGER;
 
8590
  end;
 
8591
  {$EXTERNALSYM _TAPE_GET_POSITION}
 
8592
  TAPE_GET_POSITION = _TAPE_GET_POSITION;
 
8593
  {$EXTERNALSYM TAPE_GET_POSITION}
 
8594
  TTapeGetPosition = TAPE_GET_POSITION;
 
8595
  PTapeGetPosition = PTAPE_GET_POSITION;
 
8596
 
 
8597
//
 
8598
// IOCTL_TAPE_SET_POSITION definitions
 
8599
//
 
8600
 
 
8601
const
 
8602
  TAPE_REWIND                = 0;
 
8603
  {$EXTERNALSYM TAPE_REWIND}
 
8604
  TAPE_ABSOLUTE_BLOCK        = 1;
 
8605
  {$EXTERNALSYM TAPE_ABSOLUTE_BLOCK}
 
8606
  TAPE_LOGICAL_BLOCK         = 2;
 
8607
  {$EXTERNALSYM TAPE_LOGICAL_BLOCK}
 
8608
  TAPE_PSEUDO_LOGICAL_BLOCK  = 3;
 
8609
  {$EXTERNALSYM TAPE_PSEUDO_LOGICAL_BLOCK}
 
8610
  TAPE_SPACE_END_OF_DATA     = 4;
 
8611
  {$EXTERNALSYM TAPE_SPACE_END_OF_DATA}
 
8612
  TAPE_SPACE_RELATIVE_BLOCKS = 5;
 
8613
  {$EXTERNALSYM TAPE_SPACE_RELATIVE_BLOCKS}
 
8614
  TAPE_SPACE_FILEMARKS       = 6;
 
8615
  {$EXTERNALSYM TAPE_SPACE_FILEMARKS}
 
8616
  TAPE_SPACE_SEQUENTIAL_FMKS = 7;
 
8617
  {$EXTERNALSYM TAPE_SPACE_SEQUENTIAL_FMKS}
 
8618
  TAPE_SPACE_SETMARKS        = 8;
 
8619
  {$EXTERNALSYM TAPE_SPACE_SETMARKS}
 
8620
  TAPE_SPACE_SEQUENTIAL_SMKS = 9;
 
8621
  {$EXTERNALSYM TAPE_SPACE_SEQUENTIAL_SMKS}
 
8622
 
 
8623
type
 
8624
  PTAPE_SET_POSITION = ^TAPE_SET_POSITION;
 
8625
  {$EXTERNALSYM PTAPE_SET_POSITION}
 
8626
  _TAPE_SET_POSITION = record
 
8627
    Method: DWORD;
 
8628
    Partition: DWORD;
 
8629
    Offset: LARGE_INTEGER;
 
8630
    Immediate: ByteBool;
 
8631
  end;
 
8632
  {$EXTERNALSYM _TAPE_SET_POSITION}
 
8633
  TAPE_SET_POSITION = _TAPE_SET_POSITION;
 
8634
  {$EXTERNALSYM TAPE_SET_POSITION}
 
8635
  TTapeSetPosition = TAPE_SET_POSITION;
 
8636
  PTapeSetPosition = PTAPE_SET_POSITION;
 
8637
 
 
8638
//
 
8639
// IOCTL_TAPE_GET_DRIVE_PARAMS definitions
 
8640
//
 
8641
 
 
8642
//
 
8643
// Definitions for FeaturesLow parameter
 
8644
//
 
8645
 
 
8646
const
 
8647
  TAPE_DRIVE_FIXED     = $00000001;
 
8648
  {$EXTERNALSYM TAPE_DRIVE_FIXED}
 
8649
  TAPE_DRIVE_SELECT    = $00000002;
 
8650
  {$EXTERNALSYM TAPE_DRIVE_SELECT}
 
8651
  TAPE_DRIVE_INITIATOR = $00000004;
 
8652
  {$EXTERNALSYM TAPE_DRIVE_INITIATOR}
 
8653
 
 
8654
  TAPE_DRIVE_ERASE_SHORT     = $00000010;
 
8655
  {$EXTERNALSYM TAPE_DRIVE_ERASE_SHORT}
 
8656
  TAPE_DRIVE_ERASE_LONG      = $00000020;
 
8657
  {$EXTERNALSYM TAPE_DRIVE_ERASE_LONG}
 
8658
  TAPE_DRIVE_ERASE_BOP_ONLY  = $00000040;
 
8659
  {$EXTERNALSYM TAPE_DRIVE_ERASE_BOP_ONLY}
 
8660
  TAPE_DRIVE_ERASE_IMMEDIATE = $00000080;
 
8661
  {$EXTERNALSYM TAPE_DRIVE_ERASE_IMMEDIATE}
 
8662
 
 
8663
  TAPE_DRIVE_TAPE_CAPACITY  = $00000100;
 
8664
  {$EXTERNALSYM TAPE_DRIVE_TAPE_CAPACITY}
 
8665
  TAPE_DRIVE_TAPE_REMAINING = $00000200;
 
8666
  {$EXTERNALSYM TAPE_DRIVE_TAPE_REMAINING}
 
8667
  TAPE_DRIVE_FIXED_BLOCK    = $00000400;
 
8668
  {$EXTERNALSYM TAPE_DRIVE_FIXED_BLOCK}
 
8669
  TAPE_DRIVE_VARIABLE_BLOCK = $00000800;
 
8670
  {$EXTERNALSYM TAPE_DRIVE_VARIABLE_BLOCK}
 
8671
 
 
8672
  TAPE_DRIVE_WRITE_PROTECT = $00001000;
 
8673
  {$EXTERNALSYM TAPE_DRIVE_WRITE_PROTECT}
 
8674
  TAPE_DRIVE_EOT_WZ_SIZE   = $00002000;
 
8675
  {$EXTERNALSYM TAPE_DRIVE_EOT_WZ_SIZE}
 
8676
 
 
8677
  TAPE_DRIVE_ECC         = $00010000;
 
8678
  {$EXTERNALSYM TAPE_DRIVE_ECC}
 
8679
  TAPE_DRIVE_COMPRESSION = $00020000;
 
8680
  {$EXTERNALSYM TAPE_DRIVE_COMPRESSION}
 
8681
  TAPE_DRIVE_PADDING     = $00040000;
 
8682
  {$EXTERNALSYM TAPE_DRIVE_PADDING}
 
8683
  TAPE_DRIVE_REPORT_SMKS = $00080000;
 
8684
  {$EXTERNALSYM TAPE_DRIVE_REPORT_SMKS}
 
8685
 
 
8686
  TAPE_DRIVE_GET_ABSOLUTE_BLK = $00100000;
 
8687
  {$EXTERNALSYM TAPE_DRIVE_GET_ABSOLUTE_BLK}
 
8688
  TAPE_DRIVE_GET_LOGICAL_BLK  = $00200000;
 
8689
  {$EXTERNALSYM TAPE_DRIVE_GET_LOGICAL_BLK}
 
8690
  TAPE_DRIVE_SET_EOT_WZ_SIZE  = $00400000;
 
8691
  {$EXTERNALSYM TAPE_DRIVE_SET_EOT_WZ_SIZE}
 
8692
 
 
8693
  TAPE_DRIVE_EJECT_MEDIA      = $01000000;
 
8694
  {$EXTERNALSYM TAPE_DRIVE_EJECT_MEDIA}
 
8695
  TAPE_DRIVE_CLEAN_REQUESTS   = $02000000;
 
8696
  {$EXTERNALSYM TAPE_DRIVE_CLEAN_REQUESTS}
 
8697
  TAPE_DRIVE_SET_CMP_BOP_ONLY = $04000000;
 
8698
  {$EXTERNALSYM TAPE_DRIVE_SET_CMP_BOP_ONLY}
 
8699
 
 
8700
  TAPE_DRIVE_RESERVED_BIT = DWORD($80000000); // don't use this bit!
 
8701
  {$EXTERNALSYM TAPE_DRIVE_RESERVED_BIT}
 
8702
  //                                              //can't be a low features bit!
 
8703
//                                              //reserved; high features only
 
8704
 
 
8705
//
 
8706
// Definitions for FeaturesHigh parameter
 
8707
//
 
8708
 
 
8709
  TAPE_DRIVE_LOAD_UNLOAD      = DWORD($80000001);
 
8710
  {$EXTERNALSYM TAPE_DRIVE_LOAD_UNLOAD}
 
8711
  TAPE_DRIVE_TENSION          = DWORD($80000002);
 
8712
  {$EXTERNALSYM TAPE_DRIVE_TENSION}
 
8713
  TAPE_DRIVE_LOCK_UNLOCK      = DWORD($80000004);
 
8714
  {$EXTERNALSYM TAPE_DRIVE_LOCK_UNLOCK}
 
8715
  TAPE_DRIVE_REWIND_IMMEDIATE = DWORD($80000008);
 
8716
  {$EXTERNALSYM TAPE_DRIVE_REWIND_IMMEDIATE}
 
8717
 
 
8718
  TAPE_DRIVE_SET_BLOCK_SIZE  = DWORD($80000010);
 
8719
  {$EXTERNALSYM TAPE_DRIVE_SET_BLOCK_SIZE}
 
8720
  TAPE_DRIVE_LOAD_UNLD_IMMED = DWORD($80000020);
 
8721
  {$EXTERNALSYM TAPE_DRIVE_LOAD_UNLD_IMMED}
 
8722
  TAPE_DRIVE_TENSION_IMMED   = DWORD($80000040);
 
8723
  {$EXTERNALSYM TAPE_DRIVE_TENSION_IMMED}
 
8724
  TAPE_DRIVE_LOCK_UNLK_IMMED = DWORD($80000080);
 
8725
  {$EXTERNALSYM TAPE_DRIVE_LOCK_UNLK_IMMED}
 
8726
 
 
8727
  TAPE_DRIVE_SET_ECC         = DWORD($80000100);
 
8728
  {$EXTERNALSYM TAPE_DRIVE_SET_ECC}
 
8729
  TAPE_DRIVE_SET_COMPRESSION = DWORD($80000200);
 
8730
  {$EXTERNALSYM TAPE_DRIVE_SET_COMPRESSION}
 
8731
  TAPE_DRIVE_SET_PADDING     = DWORD($80000400);
 
8732
  {$EXTERNALSYM TAPE_DRIVE_SET_PADDING}
 
8733
  TAPE_DRIVE_SET_REPORT_SMKS = DWORD($80000800);
 
8734
  {$EXTERNALSYM TAPE_DRIVE_SET_REPORT_SMKS}
 
8735
 
 
8736
  TAPE_DRIVE_ABSOLUTE_BLK  = DWORD($80001000);
 
8737
  {$EXTERNALSYM TAPE_DRIVE_ABSOLUTE_BLK}
 
8738
  TAPE_DRIVE_ABS_BLK_IMMED = DWORD($80002000);
 
8739
  {$EXTERNALSYM TAPE_DRIVE_ABS_BLK_IMMED}
 
8740
  TAPE_DRIVE_LOGICAL_BLK   = DWORD($80004000);
 
8741
  {$EXTERNALSYM TAPE_DRIVE_LOGICAL_BLK}
 
8742
  TAPE_DRIVE_LOG_BLK_IMMED = DWORD($80008000);
 
8743
  {$EXTERNALSYM TAPE_DRIVE_LOG_BLK_IMMED}
 
8744
 
 
8745
  TAPE_DRIVE_END_OF_DATA     = DWORD($80010000);
 
8746
  {$EXTERNALSYM TAPE_DRIVE_END_OF_DATA}
 
8747
  TAPE_DRIVE_RELATIVE_BLKS   = DWORD($80020000);
 
8748
  {$EXTERNALSYM TAPE_DRIVE_RELATIVE_BLKS}
 
8749
  TAPE_DRIVE_FILEMARKS       = DWORD($80040000);
 
8750
  {$EXTERNALSYM TAPE_DRIVE_FILEMARKS}
 
8751
  TAPE_DRIVE_SEQUENTIAL_FMKS = DWORD($80080000);
 
8752
  {$EXTERNALSYM TAPE_DRIVE_SEQUENTIAL_FMKS}
 
8753
 
 
8754
  TAPE_DRIVE_SETMARKS         = DWORD($80100000);
 
8755
  {$EXTERNALSYM TAPE_DRIVE_SETMARKS}
 
8756
  TAPE_DRIVE_SEQUENTIAL_SMKS  = DWORD($80200000);
 
8757
  {$EXTERNALSYM TAPE_DRIVE_SEQUENTIAL_SMKS}
 
8758
  TAPE_DRIVE_REVERSE_POSITION = DWORD($80400000);
 
8759
  {$EXTERNALSYM TAPE_DRIVE_REVERSE_POSITION}
 
8760
  TAPE_DRIVE_SPACE_IMMEDIATE  = DWORD($80800000);
 
8761
  {$EXTERNALSYM TAPE_DRIVE_SPACE_IMMEDIATE}
 
8762
 
 
8763
  TAPE_DRIVE_WRITE_SETMARKS   = DWORD($81000000);
 
8764
  {$EXTERNALSYM TAPE_DRIVE_WRITE_SETMARKS}
 
8765
  TAPE_DRIVE_WRITE_FILEMARKS  = DWORD($82000000);
 
8766
  {$EXTERNALSYM TAPE_DRIVE_WRITE_FILEMARKS}
 
8767
  TAPE_DRIVE_WRITE_SHORT_FMKS = DWORD($84000000);
 
8768
  {$EXTERNALSYM TAPE_DRIVE_WRITE_SHORT_FMKS}
 
8769
  TAPE_DRIVE_WRITE_LONG_FMKS  = DWORD($88000000);
 
8770
  {$EXTERNALSYM TAPE_DRIVE_WRITE_LONG_FMKS}
 
8771
 
 
8772
  TAPE_DRIVE_WRITE_MARK_IMMED = DWORD($90000000);
 
8773
  {$EXTERNALSYM TAPE_DRIVE_WRITE_MARK_IMMED}
 
8774
  TAPE_DRIVE_FORMAT           = DWORD($A0000000);
 
8775
  {$EXTERNALSYM TAPE_DRIVE_FORMAT}
 
8776
  TAPE_DRIVE_FORMAT_IMMEDIATE = DWORD($C0000000);
 
8777
  {$EXTERNALSYM TAPE_DRIVE_FORMAT_IMMEDIATE}
 
8778
  TAPE_DRIVE_HIGH_FEATURES    = DWORD($80000000); // mask for high features flag
 
8779
  {$EXTERNALSYM TAPE_DRIVE_HIGH_FEATURES}
 
8780
 
 
8781
type
 
8782
  PTAPE_GET_DRIVE_PARAMETERS = ^TAPE_GET_DRIVE_PARAMETERS;
 
8783
  {$EXTERNALSYM PTAPE_GET_DRIVE_PARAMETERS}
 
8784
  _TAPE_GET_DRIVE_PARAMETERS = record
 
8785
    ECC: ByteBool;
 
8786
    Compression: ByteBool;
 
8787
    DataPadding: ByteBool;
 
8788
    ReportSetmarks: ByteBool;
 
8789
    DefaultBlockSize: DWORD;
 
8790
    MaximumBlockSize: DWORD;
 
8791
    MinimumBlockSize: DWORD;
 
8792
    MaximumPartitionCount: DWORD;
 
8793
    FeaturesLow: DWORD;
 
8794
    FeaturesHigh: DWORD;
 
8795
    EOTWarningZoneSize: DWORD;
 
8796
  end;
 
8797
  {$EXTERNALSYM _TAPE_GET_DRIVE_PARAMETERS}
 
8798
  TAPE_GET_DRIVE_PARAMETERS = _TAPE_GET_DRIVE_PARAMETERS;
 
8799
  {$EXTERNALSYM TAPE_GET_DRIVE_PARAMETERS}
 
8800
  TTapeGetDriveParameters = TAPE_GET_DRIVE_PARAMETERS;
 
8801
  PTapeGetDriveParameters = PTAPE_GET_DRIVE_PARAMETERS;
 
8802
 
 
8803
//
 
8804
// IOCTL_TAPE_SET_DRIVE_PARAMETERS definitions
 
8805
//
 
8806
 
 
8807
  PTAPE_SET_DRIVE_PARAMETERS = ^TAPE_SET_DRIVE_PARAMETERS;
 
8808
  {$EXTERNALSYM PTAPE_SET_DRIVE_PARAMETERS}
 
8809
  _TAPE_SET_DRIVE_PARAMETERS = record
 
8810
    ECC: ByteBool;
 
8811
    Compression: ByteBool;
 
8812
    DataPadding: ByteBool;
 
8813
    ReportSetmarks: ByteBool;
 
8814
    EOTWarningZoneSize: DWORD;
 
8815
  end;
 
8816
  {$EXTERNALSYM _TAPE_SET_DRIVE_PARAMETERS}
 
8817
  TAPE_SET_DRIVE_PARAMETERS = _TAPE_SET_DRIVE_PARAMETERS;
 
8818
  {$EXTERNALSYM TAPE_SET_DRIVE_PARAMETERS}
 
8819
  TTapeSetDriveParameters = TAPE_SET_DRIVE_PARAMETERS;
 
8820
  PTapeSetDriveParameters = PTAPE_SET_DRIVE_PARAMETERS;
 
8821
 
 
8822
//
 
8823
// IOCTL_TAPE_GET_MEDIA_PARAMETERS definitions
 
8824
//
 
8825
 
 
8826
  PTAPE_GET_MEDIA_PARAMETERS = ^TAPE_GET_MEDIA_PARAMETERS;
 
8827
  {$EXTERNALSYM PTAPE_GET_MEDIA_PARAMETERS}
 
8828
  _TAPE_GET_MEDIA_PARAMETERS = record
 
8829
    Capacity: LARGE_INTEGER;
 
8830
    Remaining: LARGE_INTEGER;
 
8831
    BlockSize: DWORD;
 
8832
    PartitionCount: DWORD;
 
8833
    WriteProtected: ByteBool;
 
8834
  end;
 
8835
  {$EXTERNALSYM _TAPE_GET_MEDIA_PARAMETERS}
 
8836
  TAPE_GET_MEDIA_PARAMETERS = _TAPE_GET_MEDIA_PARAMETERS;
 
8837
  {$EXTERNALSYM TAPE_GET_MEDIA_PARAMETERS}
 
8838
  TTapeGetMediaParameters = TAPE_GET_MEDIA_PARAMETERS;
 
8839
  PTapeGetMediaParameters = PTAPE_GET_MEDIA_PARAMETERS;
 
8840
 
 
8841
//
 
8842
// IOCTL_TAPE_SET_MEDIA_PARAMETERS definitions
 
8843
//
 
8844
 
 
8845
  PTAPE_SET_MEDIA_PARAMETERS = ^TAPE_SET_MEDIA_PARAMETERS;
 
8846
  {$EXTERNALSYM PTAPE_SET_MEDIA_PARAMETERS}
 
8847
  _TAPE_SET_MEDIA_PARAMETERS = record
 
8848
    BlockSize: DWORD;
 
8849
  end;
 
8850
  {$EXTERNALSYM _TAPE_SET_MEDIA_PARAMETERS}
 
8851
  TAPE_SET_MEDIA_PARAMETERS = _TAPE_SET_MEDIA_PARAMETERS;
 
8852
  {$EXTERNALSYM TAPE_SET_MEDIA_PARAMETERS}
 
8853
  TTapeSetMediaParameters = TAPE_SET_MEDIA_PARAMETERS;
 
8854
  PTapeSetMediaParameters = PTAPE_SET_MEDIA_PARAMETERS;
 
8855
 
 
8856
//
 
8857
// IOCTL_TAPE_CREATE_PARTITION definitions
 
8858
//
 
8859
 
 
8860
const
 
8861
  TAPE_FIXED_PARTITIONS     = 0;
 
8862
  {$EXTERNALSYM TAPE_FIXED_PARTITIONS}
 
8863
  TAPE_SELECT_PARTITIONS    = 1;
 
8864
  {$EXTERNALSYM TAPE_SELECT_PARTITIONS}
 
8865
  TAPE_INITIATOR_PARTITIONS = 2;
 
8866
  {$EXTERNALSYM TAPE_INITIATOR_PARTITIONS}
 
8867
 
 
8868
type
 
8869
  PTAPE_CREATE_PARTITION = ^TAPE_CREATE_PARTITION;
 
8870
  {$EXTERNALSYM PTAPE_CREATE_PARTITION}
 
8871
  _TAPE_CREATE_PARTITION = record
 
8872
    Method: DWORD;
 
8873
    Count: DWORD;
 
8874
    Size: DWORD;
 
8875
  end;
 
8876
  {$EXTERNALSYM _TAPE_CREATE_PARTITION}
 
8877
  TAPE_CREATE_PARTITION = _TAPE_CREATE_PARTITION;
 
8878
  {$EXTERNALSYM TAPE_CREATE_PARTITION}
 
8879
  TTapeCreatePartition = TAPE_CREATE_PARTITION;
 
8880
  PTapeCreatePartition = PTAPE_CREATE_PARTITION;
 
8881
 
 
8882
//
 
8883
// WMI Methods
 
8884
//
 
8885
 
 
8886
const
 
8887
  TAPE_QUERY_DRIVE_PARAMETERS     = 0;
 
8888
  {$EXTERNALSYM TAPE_QUERY_DRIVE_PARAMETERS}
 
8889
  TAPE_QUERY_MEDIA_CAPACITY       = 1;
 
8890
  {$EXTERNALSYM TAPE_QUERY_MEDIA_CAPACITY}
 
8891
  TAPE_CHECK_FOR_DRIVE_PROBLEM    = 2;
 
8892
  {$EXTERNALSYM TAPE_CHECK_FOR_DRIVE_PROBLEM}
 
8893
  TAPE_QUERY_IO_ERROR_DATA        = 3;
 
8894
  {$EXTERNALSYM TAPE_QUERY_IO_ERROR_DATA}
 
8895
  TAPE_QUERY_DEVICE_ERROR_DATA    = 4;
 
8896
  {$EXTERNALSYM TAPE_QUERY_DEVICE_ERROR_DATA}
 
8897
 
 
8898
type
 
8899
  _TAPE_WMI_OPERATIONS = record
 
8900
    Method: DWORD;
 
8901
    DataBufferSize: DWORD;
 
8902
    DataBuffer: PVOID;
 
8903
  end;
 
8904
  {$EXTERNALSYM _TAPE_WMI_OPERATIONS}
 
8905
  TAPE_WMI_OPERATIONS = _TAPE_WMI_OPERATIONS;
 
8906
  {$EXTERNALSYM TAPE_WMI_OPERATIONS}
 
8907
  PTAPE_WMI_OPERATIONS = ^TAPE_WMI_OPERATIONS;
 
8908
  {$EXTERNALSYM PTAPE_WMI_OPERATIONS}
 
8909
  TTapeWMIOperations = TAPE_WMI_OPERATIONS;
 
8910
  PTapeWMIOperations = PTAPE_WMI_OPERATIONS;
 
8911
 
 
8912
//
 
8913
// Type of drive errors
 
8914
//
 
8915
 
 
8916
  _TAPE_DRIVE_PROBLEM_TYPE = (
 
8917
    TapeDriveProblemNone, TapeDriveReadWriteWarning,
 
8918
    TapeDriveReadWriteError, TapeDriveReadWarning,
 
8919
    TapeDriveWriteWarning, TapeDriveReadError,
 
8920
    TapeDriveWriteError, TapeDriveHardwareError,
 
8921
    TapeDriveUnsupportedMedia, TapeDriveScsiConnectionError,
 
8922
    TapeDriveTimetoClean, TapeDriveCleanDriveNow,
 
8923
    TapeDriveMediaLifeExpired, TapeDriveSnappedTape);
 
8924
  {$EXTERNALSYM _TAPE_DRIVE_PROBLEM_TYPE}
 
8925
  TAPE_DRIVE_PROBLEM_TYPE = _TAPE_DRIVE_PROBLEM_TYPE;
 
8926
  TTapeDriveProblemType = TAPE_DRIVE_PROBLEM_TYPE;
 
8927
 
 
8928
const
 
8929
  ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION         = 1;
 
8930
  {$EXTERNALSYM ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION}
 
8931
  ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION              = 2;
 
8932
  {$EXTERNALSYM ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION}
 
8933
  ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION     = 3;
 
8934
  {$EXTERNALSYM ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION}
 
8935
  ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION       = 4;
 
8936
  {$EXTERNALSYM ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION}
 
8937
  ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION    = 5;
 
8938
  {$EXTERNALSYM ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION}
 
8939
  ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION = 6;
 
8940
  {$EXTERNALSYM ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION}
 
8941
  ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION       = 7;
 
8942
  {$EXTERNALSYM ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION}
 
8943
  ACTIVATION_CONTEXT_SECTION_GLOBAL_OBJECT_RENAME_TABLE   = 8;
 
8944
  {$EXTERNALSYM ACTIVATION_CONTEXT_SECTION_GLOBAL_OBJECT_RENAME_TABLE}
 
8945
  ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES               = 9;
 
8946
  {$EXTERNALSYM ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES}
 
8947
 
 
8948
{$ENDIF JWA_INTERFACESECTION}
 
8949
 
 
8950
{$IFNDEF JWA_INCLUDEMODE}
 
8951
 
 
8952
implementation
 
8953
 
 
8954
uses
 
8955
  JwaWinDLLNames;
 
8956
 
 
8957
{$ENDIF !JWA_INCLUDEMODE}
 
8958
 
 
8959
{$IFDEF JWA_IMPLEMENTATIONSECTION}
 
8960
 
 
8961
function WT_SET_MAX_THREADPOOL_THREADS(var Flags: DWORD; Limit: DWORD): DWORD;
 
8962
begin
 
8963
  Flags := Flags or (Limit shl 16);
 
8964
  Result := Flags;
 
8965
end;
 
8966
 
 
8967
function VALID_IMPERSONATION_LEVEL(L: TSecurityImpersonationLevel): BOOL;
 
8968
begin
 
8969
  Result := (L >= SECURITY_MIN_IMPERSONATION_LEVEL) and (L <= SECURITY_MAX_IMPERSONATION_LEVEL);
 
8970
end;
 
8971
 
 
8972
{
 
8973
function VALID_TOKEN_AUDIT_POLICY_ELEMENT(P: TOKEN_AUDIT_POLICY_ELEMENT): BOOL;
 
8974
begin
 
8975
  Result := ((P.PolicyMask and (not VALID_AUDIT_POLICY_BITS) = 0) and (P.Category <= AuditEventMaxType);
 
8976
// ((((P).PolicyMask & ~VALID_AUDIT_POLICY_BITS) == 0) && \
 
8977
//                                             ((P).Category <= AuditEventMaxType))
 
8978
end;
 
8979
}
 
8980
 
 
8981
function PER_USER_AUDITING_POLICY_SIZE(p: PTOKEN_AUDIT_POLICY): DWORD;
 
8982
begin
 
8983
  Result := SizeOf(TOKEN_AUDIT_POLICY);
 
8984
  if p^.PolicyCount > ANYSIZE_ARRAY then
 
8985
    Result := Result + SizeOf(TOKEN_AUDIT_POLICY_ELEMENT) * (P^.PolicyCount - ANYSIZE_ARRAY);
 
8986
//  ( sizeof(TOKEN_AUDIT_POLICY) + (((p)->PolicyCount > ANYSIZE_ARRAY) ? (sizeof(TOKEN_AUDIT_POLICY_ELEMENT) * ((p)->PolicyCount - ANYSIZE_ARRAY)) : 0) )
 
8987
end;
 
8988
 
 
8989
function PER_USER_AUDITING_POLICY_SIZE_BY_COUNT(C: DWORD): DWORD;
 
8990
begin
 
8991
  Result := SizeOf(TOKEN_AUDIT_POLICY);
 
8992
  if C > ANYSIZE_ARRAY then
 
8993
    Result := Result + SizeOf(TOKEN_AUDIT_POLICY_ELEMENT) * (C - ANYSIZE_ARRAY);
 
8994
//    ( sizeof(TOKEN_AUDIT_POLICY) + (((C) > ANYSIZE_ARRAY) ? (sizeof(TOKEN_AUDIT_POLICY_ELEMENT) * ((C) - ANYSIZE_ARRAY)) : 0) )
 
8995
end;
 
8996
 
 
8997
function NtCurrentTeb: PNT_TIB;
 
8998
asm
 
8999
{$ifdef cpu386}
 
9000
        MOV     EAX, FS:[24]
 
9001
{$endif cpu386}
 
9002
{$ifdef cpux86_64}
 
9003
        movq     RAX, GS:[48]
 
9004
{$endif cpux86_64}
 
9005
end;
 
9006
 
 
9007
function GetFiberData: PVOID;
 
9008
asm
 
9009
{$ifdef cpu386}
 
9010
        MOV     EAX, FS:[16]
 
9011
        MOV     EAX, [EAX]
 
9012
{$endif cpu386}
 
9013
{$ifdef cpux86_64}
 
9014
        MOV     RAX, GS:[32]
 
9015
        MOV     RAX, [RAX]
 
9016
{$endif cpux86_64}
 
9017
end;
 
9018
 
 
9019
function GetCurrentFiber: PVOID;
 
9020
asm
 
9021
{$ifdef cpu386}
 
9022
        MOV     EAX, FS:[16]
 
9023
{$endif cpu386}
 
9024
{$ifdef cpux86_64}
 
9025
        MOV     RAX, GS:[32]
 
9026
{$endif cpux86_64}
 
9027
end;
 
9028
 
 
9029
{$IFNDEF JWA_INCLUDEMODE}
 
9030
 
 
9031
function Int32x32To64(a, b: LONG): LONGLONG;
 
9032
begin
 
9033
  Result := a * b;
 
9034
end;
 
9035
 
 
9036
function UInt32x32To64(a, b: DWORD): ULONGLONG;
 
9037
begin
 
9038
  Result := a * b;
 
9039
end;
 
9040
 
 
9041
{$ENDIF !JWA_INCLUDEMODE}
 
9042
 
 
9043
function MAKELANGID(PrimaryLang, SubLang: USHORT): WORD;
 
9044
begin
 
9045
  Result := (SubLang shl 10) or PrimaryLang;
 
9046
end;
 
9047
 
 
9048
function PRIMARYLANGID(LangId: WORD): WORD;
 
9049
begin
 
9050
  Result := LangId and $3FF;
 
9051
end;
 
9052
 
 
9053
function SUBLANGID(LangId: WORD): WORD;
 
9054
begin
 
9055
  Result := LangId shr 10;
 
9056
end;
 
9057
 
 
9058
function MAKELCID(LangId, SortId: WORD): DWORD;
 
9059
begin
 
9060
  Result := (DWORD(SortId) shl 16) or DWORD(LangId);
 
9061
end;
 
9062
 
 
9063
function MAKESORTLCID(LangId, SortId, SortVersion: WORD): DWORD;
 
9064
begin
 
9065
  Result := MAKELCID(LangId, SortId) or (SortVersion shl 20);
 
9066
end;
 
9067
 
 
9068
function LANGIDFROMLCID(LocaleId: LCID): WORD;
 
9069
begin
 
9070
  Result := WORD(LocaleId);
 
9071
end;
 
9072
 
 
9073
function SORTIDFROMLCID(LocaleId: LCID): WORD;
 
9074
begin
 
9075
  Result := WORD((DWORD(LocaleId) shr 16) and $F);
 
9076
end;
 
9077
 
 
9078
function SORTVERSIONFROMLCID(LocaleId: LCID): WORD;
 
9079
begin
 
9080
  Result := WORD((DWORD(LocaleId) shr 20) and $F);
 
9081
end;
 
9082
 
 
9083
function LANG_SYSTEM_DEFAULT: WORD;
 
9084
begin
 
9085
  Result := MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT);
 
9086
end;
 
9087
 
 
9088
function LANG_USER_DEFAULT: WORD;
 
9089
begin
 
9090
  Result := MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT);
 
9091
end;
 
9092
 
 
9093
function LOCALE_SYSTEM_DEFAULT: DWORD;
 
9094
begin
 
9095
  Result := MAKELCID(LANG_SYSTEM_DEFAULT, SORT_DEFAULT);
 
9096
end;
 
9097
 
 
9098
function LOCALE_USER_DEFAULT: DWORD;
 
9099
begin
 
9100
  Result := MAKELCID(LANG_USER_DEFAULT, SORT_DEFAULT);
 
9101
end;
 
9102
 
 
9103
function LOCALE_NEUTRAL: DWORD;
 
9104
begin
 
9105
  Result := MAKELCID(MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), SORT_DEFAULT);
 
9106
end;
 
9107
 
 
9108
function LOCALE_INVARIANT: DWORD;
 
9109
begin
 
9110
  Result := MAKELCID(MAKELANGID(LANG_INVARIANT, SUBLANG_NEUTRAL), SORT_DEFAULT);
 
9111
end;
 
9112
 
 
9113
function IsReparseTagMicrosoft(Tag: ULONG): Boolean;
 
9114
begin
 
9115
  Result := (Tag and ULONG($80000000)) <> 0;
 
9116
end;
 
9117
 
 
9118
function IsReparseTagHighLatency(Tag: ULONG): Boolean;
 
9119
begin
 
9120
  Result := (Tag and ULONG($40000000)) <> 0;
 
9121
end;
 
9122
 
 
9123
function IsReparseTagNameSurrogate(Tag: ULONG): Boolean;
 
9124
begin
 
9125
  Result := (Tag and ULONG($20000000)) <> 0;
 
9126
end;
 
9127
 
 
9128
// IMAGE_FIRST_SECTION by Nico Bendlin - supplied by Markus Fuchs
 
9129
 
 
9130
function FieldOffset(const Struc; const Field): Cardinal;
 
9131
begin
 
9132
  Result := Cardinal(@Field) - Cardinal(@Struc);
 
9133
end;
 
9134
 
 
9135
function IMAGE_FIRST_SECTION(NtHeader: PImageNtHeaders): PImageSectionHeader;
 
9136
begin
 
9137
  Result := PImageSectionHeader(Cardinal(NtHeader) +
 
9138
      FieldOffset(NtHeader^, NtHeader^.OptionalHeader) +
 
9139
      NtHeader^.FileHeader.SizeOfOptionalHeader);
 
9140
end;
 
9141
 
 
9142
function BTYPE(x: DWORD): DWORD;
 
9143
begin
 
9144
  Result := x and N_BTMASK;
 
9145
end;
 
9146
 
 
9147
function ISPTR(x: DWORD): Boolean;
 
9148
begin
 
9149
  Result := (x and N_TMASK) = (IMAGE_SYM_DTYPE_POINTER shl N_BTSHFT);
 
9150
end;
 
9151
 
 
9152
function ISFCN(x: DWORD): Boolean;
 
9153
begin
 
9154
  Result := (x and N_TMASK) = (IMAGE_SYM_DTYPE_FUNCTION shl N_BTSHFT);
 
9155
end;
 
9156
 
 
9157
function ISARY(x: DWORD): Boolean;
 
9158
begin
 
9159
  Result := (x and N_TMASK) = (IMAGE_SYM_DTYPE_ARRAY shl N_BTSHFT);
 
9160
end;
 
9161
 
 
9162
function ISTAG(x: DWORD): Boolean;
 
9163
begin
 
9164
  Result := (x = IMAGE_SYM_CLASS_STRUCT_TAG) or (x = IMAGE_SYM_CLASS_UNION_TAG) or
 
9165
    (x = IMAGE_SYM_CLASS_ENUM_TAG);
 
9166
end;
 
9167
 
 
9168
function IMAGE_ORDINAL64(Ordinal: ULONGLONG): ULONGLONG;
 
9169
begin
 
9170
  Result := (Ordinal and $ffff);
 
9171
end;
 
9172
 
 
9173
function IMAGE_ORDINAL32(Ordinal: DWORD): DWORD;
 
9174
begin
 
9175
  Result := (Ordinal and $ffff);
 
9176
end;
 
9177
 
 
9178
function IMAGE_ORDINAL(Ordinal: DWORD): DWORD;
 
9179
begin
 
9180
  Result := (Ordinal and $ffff);
 
9181
end;
 
9182
 
 
9183
function IMAGE_SNAP_BY_ORDINAL64(Ordinal: ULONGLONG): Boolean;
 
9184
begin
 
9185
  Result := ((Ordinal and IMAGE_ORDINAL_FLAG64) <> 0);
 
9186
end;
 
9187
 
 
9188
function IMAGE_SNAP_BY_ORDINAL32(Ordinal: DWORD): Boolean;
 
9189
begin
 
9190
  Result := ((Ordinal and IMAGE_ORDINAL_FLAG32) <> 0);
 
9191
end;
 
9192
 
 
9193
function IMAGE_SNAP_BY_ORDINAL(Ordinal: DWORD): Boolean;
 
9194
begin
 
9195
  Result := ((Ordinal and IMAGE_ORDINAL_FLAG32) <> 0);
 
9196
end;
 
9197
 
 
9198
function HEAP_MAKE_TAG_FLAGS(b, o: DWORD): DWORD;
 
9199
begin
 
9200
  Result := b + (o shl 18);
 
9201
end;
 
9202
 
 
9203
procedure VER_SET_CONDITION(var Mask: DWORDLONG; TypeBitmask, ConditionMask: ULONG);
 
9204
begin
 
9205
  Mask := VerSetConditionMask(Mask, TypeBitmask, ConditionMask);
 
9206
end;
 
9207
 
 
9208
{$IFDEF DYNAMIC_LINK}
 
9209
 
 
9210
var
 
9211
  _RtlCaptureContext: Pointer;
 
9212
 
 
9213
procedure RtlCaptureContext;
 
9214
begin
 
9215
  GetProcedureAddress(_RtlCaptureContext, ntdll, 'RtlCaptureContext');
 
9216
  asm
 
9217
        MOV     ESP, EBP
 
9218
        POP     EBP
 
9219
        JMP     [_RtlCaptureContext]
 
9220
  end;
 
9221
end;
 
9222
 
 
9223
var
 
9224
  _RtlCompareMemory: Pointer;
 
9225
 
 
9226
function RtlCompareMemory;
 
9227
begin
 
9228
  GetProcedureAddress(_RtlCompareMemory, ntdll, 'RtlCompareMemory');
 
9229
  asm
 
9230
        MOV     ESP, EBP
 
9231
        POP     EBP
 
9232
        JMP     [_RtlCompareMemory]
 
9233
  end;
 
9234
end;
 
9235
 
 
9236
var
 
9237
  _VerSetConditionMask: Pointer;
 
9238
 
 
9239
function VerSetConditionMask;
 
9240
begin
 
9241
  GetProcedureAddress(_VerSetConditionMask, kernel32, 'VerSetConditionMask');
 
9242
  asm
 
9243
        MOV     ESP, EBP
 
9244
        POP     EBP
 
9245
        JMP     [_VerSetConditionMask]
 
9246
  end;
 
9247
end;
 
9248
 
 
9249
var
 
9250
  _RtlInitializeSListHead: Pointer;
 
9251
 
 
9252
procedure RtlInitializeSListHead;
 
9253
begin
 
9254
  GetProcedureAddress(_RtlInitializeSListHead, 'ntdll.dll', 'RtlInitializeSListHead');
 
9255
  asm
 
9256
        MOV     ESP, EBP
 
9257
        POP     EBP
 
9258
        JMP     [_RtlInitializeSListHead]
 
9259
  end;
 
9260
end;
 
9261
 
 
9262
var
 
9263
  _RtlFirstEntrySList: Pointer;
 
9264
 
 
9265
function RtlFirstEntrySList;
 
9266
begin
 
9267
  GetProcedureAddress(_RtlFirstEntrySList, 'ntdll.dll', 'RtlFirstEntrySList');
 
9268
  asm
 
9269
        MOV     ESP, EBP
 
9270
        POP     EBP
 
9271
        JMP     [_RtlFirstEntrySList]
 
9272
  end;
 
9273
end;
 
9274
 
 
9275
var
 
9276
  _RtlInterlockedPopEntrySList: Pointer;
 
9277
 
 
9278
function RtlInterlockedPopEntrySList;
 
9279
begin
 
9280
  GetProcedureAddress(_RtlInterlockedPopEntrySList, 'ntdll.dll', 'RtlInterlockedPopEntrySList');
 
9281
  asm
 
9282
        MOV     ESP, EBP
 
9283
        POP     EBP
 
9284
        JMP     [_RtlInterlockedPopEntrySList]
 
9285
  end;
 
9286
end;
 
9287
 
 
9288
var
 
9289
  _RtlInterlockedPushEntrySList: Pointer;
 
9290
 
 
9291
function RtlInterlockedPushEntrySList;
 
9292
begin
 
9293
  GetProcedureAddress(_RtlInterlockedPushEntrySList, 'ntdll.dll', 'RtlInterlockedPushEntrySList');
 
9294
  asm
 
9295
        MOV     ESP, EBP
 
9296
        POP     EBP
 
9297
        JMP     [_RtlInterlockedPushEntrySList]
 
9298
  end;
 
9299
end;
 
9300
 
 
9301
var
 
9302
  _RtlInterlockedFlushSList: Pointer;
 
9303
 
 
9304
function RtlInterlockedFlushSList;
 
9305
begin
 
9306
  GetProcedureAddress(_RtlInterlockedFlushSList, 'ntdll.dll', 'RtlInterlockedFlushSList');
 
9307
  asm
 
9308
        MOV     ESP, EBP
 
9309
        POP     EBP
 
9310
        JMP     [_RtlInterlockedFlushSList]
 
9311
  end;
 
9312
end;
 
9313
 
 
9314
var
 
9315
  _RtlQueryDepthSList: Pointer;
 
9316
 
 
9317
function RtlQueryDepthSList;
 
9318
begin
 
9319
  GetProcedureAddress(_RtlQueryDepthSList, 'ntdll.dll', 'RtlQueryDepthSList');
 
9320
  asm
 
9321
        MOV     ESP, EBP
 
9322
        POP     EBP
 
9323
        JMP     [_RtlQueryDepthSList]
 
9324
  end;
 
9325
end;
 
9326
 
 
9327
{$ELSE}
 
9328
 
 
9329
procedure RtlCaptureContext; external ntdll name 'RtlCaptureContext';
 
9330
function RtlCompareMemory; external ntdll name 'RtlCompareMemory';
 
9331
function VerSetConditionMask; external kernel32 name 'VerSetConditionMask';
 
9332
procedure RtlInitializeSListHead; external 'ntdll.dll' name 'RtlInitializeSListHead';
 
9333
function RtlFirstEntrySList; external 'ntdll.dll' name 'RtlFirstEntrySList';
 
9334
function RtlInterlockedPopEntrySList; external 'ntdll.dll' name 'RtlInterlockedPopEntrySList';
 
9335
function RtlInterlockedPushEntrySList; external 'ntdll.dll' name 'RtlInterlockedPushEntrySList';
 
9336
function RtlInterlockedFlushSList; external 'ntdll.dll' name 'RtlInterlockedFlushSList';
 
9337
function RtlQueryDepthSList; external 'ntdll.dll' name 'RtlQueryDepthSList';
 
9338
 
 
9339
{$ENDIF DYNAMIC_LINK}
 
9340
 
 
9341
{$ENDIF JWA_IMPLEMENTATIONSECTION}
 
9342
 
 
9343
{$IFNDEF JWA_INCLUDEMODE}
 
9344
end.
 
9345
{$ENDIF !JWA_INCLUDEMODE}