1
{******************************************************************************}
3
{ Windows Types API interface Unit for Object Pascal }
5
{ Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft }
6
{ Corporation. All Rights Reserved. }
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). }
12
{ Portions created by Marcel van Brakel are Copyright (C) 1999-2001 }
13
{ Marcel van Brakel. All Rights Reserved. }
15
{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI) }
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 }
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 }
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. }
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. }
39
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
41
{******************************************************************************}
43
// $Id: JwaWinNT.pas,v 1.11 2005/09/06 16:36:51 marquardt Exp $
45
{$IFNDEF JWA_INCLUDEMODE}
58
{$ENDIF !JWA_INCLUDEMODE}
60
{$IFDEF JWA_INTERFACESECTION}
63
{$HPPEMIT '#include "winnt.h"'}
65
{$HPPEMIT 'typedef PACL *PPACL'}
66
{$HPPEMIT 'typedef PSID *PPSID'}
67
{$HPPEMIT 'typedef PSECURITY_DESCRIPTOR *PPSECURITY_DESCRIPTOR'}
72
{$EXTERNALSYM MAXBYTE}
73
MAXWORD = WORD($ffff);
74
{$EXTERNALSYM MAXWORD}
75
MAXDWORD = DWORD($ffffffff);
76
{$EXTERNALSYM MAXDWORD}
78
{$IFNDEF JWA_INCLUDEMODE}
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}
115
// The following two combinations of primary language ID and
116
// sublanguage ID have special semantics:
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
127
// Primary language IDs.
132
{$EXTERNALSYM LANG_NEUTRAL}
133
LANG_INVARIANT = $7f;
134
{$EXTERNALSYM LANG_INVARIANT}
136
LANG_AFRIKAANS = $36;
137
{$EXTERNALSYM LANG_AFRIKAANS}
139
{$EXTERNALSYM LANG_ALBANIAN}
141
{$EXTERNALSYM LANG_ARABIC}
143
{$EXTERNALSYM LANG_ARMENIAN}
145
{$EXTERNALSYM LANG_ASSAMESE}
147
{$EXTERNALSYM LANG_AZERI}
149
{$EXTERNALSYM LANG_BASQUE}
150
LANG_BELARUSIAN = $23;
151
{$EXTERNALSYM LANG_BELARUSIAN}
153
{$EXTERNALSYM LANG_BENGALI}
154
LANG_BULGARIAN = $02;
155
{$EXTERNALSYM LANG_BULGARIAN}
157
{$EXTERNALSYM LANG_CATALAN}
159
{$EXTERNALSYM LANG_CHINESE}
161
{$EXTERNALSYM LANG_CROATIAN}
163
{$EXTERNALSYM LANG_CZECH}
165
{$EXTERNALSYM LANG_DANISH}
167
{$EXTERNALSYM LANG_DIVEHI}
169
{$EXTERNALSYM LANG_DUTCH}
171
{$EXTERNALSYM LANG_ENGLISH}
173
{$EXTERNALSYM LANG_ESTONIAN}
175
{$EXTERNALSYM LANG_FAEROESE}
177
{$EXTERNALSYM LANG_FARSI}
179
{$EXTERNALSYM LANG_FINNISH}
181
{$EXTERNALSYM LANG_FRENCH}
183
{$EXTERNALSYM LANG_GALICIAN}
185
{$EXTERNALSYM LANG_GEORGIAN}
187
{$EXTERNALSYM LANG_GERMAN}
189
{$EXTERNALSYM LANG_GREEK}
191
{$EXTERNALSYM LANG_GUJARATI}
193
{$EXTERNALSYM LANG_HEBREW}
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}
203
{$EXTERNALSYM LANG_ITALIAN}
205
{$EXTERNALSYM LANG_JAPANESE}
207
{$EXTERNALSYM LANG_KANNADA}
209
{$EXTERNALSYM LANG_KASHMIRI}
211
{$EXTERNALSYM LANG_KAZAK}
213
{$EXTERNALSYM LANG_KONKANI}
215
{$EXTERNALSYM LANG_KOREAN}
217
{$EXTERNALSYM LANG_KYRGYZ}
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}
225
{$EXTERNALSYM LANG_MALAY}
226
LANG_MALAYALAM = $4c;
227
{$EXTERNALSYM LANG_MALAYALAM}
229
{$EXTERNALSYM LANG_MANIPURI}
231
{$EXTERNALSYM LANG_MARATHI}
232
LANG_MONGOLIAN = $50;
233
{$EXTERNALSYM LANG_MONGOLIAN}
235
{$EXTERNALSYM LANG_NEPALI}
236
LANG_NORWEGIAN = $14;
237
{$EXTERNALSYM LANG_NORWEGIAN}
239
{$EXTERNALSYM LANG_ORIYA}
241
{$EXTERNALSYM LANG_POLISH}
242
LANG_PORTUGUESE = $16;
243
{$EXTERNALSYM LANG_PORTUGUESE}
245
{$EXTERNALSYM LANG_PUNJABI}
247
{$EXTERNALSYM LANG_ROMANIAN}
249
{$EXTERNALSYM LANG_RUSSIAN}
251
{$EXTERNALSYM LANG_SANSKRIT}
253
{$EXTERNALSYM LANG_SERBIAN}
255
{$EXTERNALSYM LANG_SINDHI}
257
{$EXTERNALSYM LANG_SLOVAK}
258
LANG_SLOVENIAN = $24;
259
{$EXTERNALSYM LANG_SLOVENIAN}
261
{$EXTERNALSYM LANG_SPANISH}
263
{$EXTERNALSYM LANG_SWAHILI}
265
{$EXTERNALSYM LANG_SWEDISH}
267
{$EXTERNALSYM LANG_SYRIAC}
269
{$EXTERNALSYM LANG_TAMIL}
271
{$EXTERNALSYM LANG_TATAR}
273
{$EXTERNALSYM LANG_TELUGU}
275
{$EXTERNALSYM LANG_THAI}
277
{$EXTERNALSYM LANG_TURKISH}
278
LANG_UKRAINIAN = $22;
279
{$EXTERNALSYM LANG_UKRAINIAN}
281
{$EXTERNALSYM LANG_URDU}
283
{$EXTERNALSYM LANG_UZBEK}
284
LANG_VIETNAMESE = $2a;
285
{$EXTERNALSYM LANG_VIETNAMESE}
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.
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}
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}
487
SORT_DEFAULT = $0; // sorting default
488
{$EXTERNALSYM SORT_DEFAULT}
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}
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}
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}
511
SORT_GERMAN_PHONE_BOOK = $1; // German Phone Book order
512
{$EXTERNALSYM SORT_GERMAN_PHONE_BOOK}
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}
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}
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:
529
// +-----------------------+-------------------------+
530
// | Sublanguage ID | Primary Language ID |
531
// +-----------------------+-------------------------+
535
// Language ID creation/extraction macros:
537
// MAKELANGID - construct language id from a primary language id and
539
// PRIMARYLANGID - extract primary language id from a language id.
540
// SUBLANGID - extract sublanguage id from a language id.
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}
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:
555
// +-------------+---------+-------------------------+
556
// | Reserved | Sort ID | Language ID |
557
// +-------------+---------+-------------------------+
558
// 31 20 19 16 15 0 bit
561
// Locale ID creation/extraction macros:
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.
571
NLS_VALID_LOCALE_MASK = $000fffff;
572
{$EXTERNALSYM NLS_VALID_LOCALE_MASK}
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}
586
// Default System and User IDs for language and locale.
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}
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}
612
MAXIMUM_WAIT_OBJECTS = 64; // Maximum number of wait objects
613
{$EXTERNALSYM MAXIMUM_WAIT_OBJECTS}
615
MAXIMUM_SUSPEND_COUNT = MAXCHAR; // Maximum times thread can be suspended
616
{$EXTERNALSYM MAXIMUM_SUSPEND_COUNT}
619
KSPIN_LOCK = ULONG_PTR;
620
{$EXTERNALSYM KSPIN_LOCK}
621
PKSPIN_LOCK = ^KSPIN_LOCK;
622
{$EXTERNALSYM PKSPIN_LOCK}
625
// Define functions to get the address of the current fiber and the
626
// current fiber data.
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.
634
function GetFiberData: PVOID;
635
{$EXTERNALSYM GetFiberData}
637
function GetCurrentFiber: PVOID;
638
{$EXTERNALSYM GetCurrentFiber}
641
// Define the size of the 80387 save area, which is in the context frame.
645
SIZE_OF_80387_REGISTERS = 80;
646
{$EXTERNALSYM SIZE_OF_80387_REGISTERS}
649
// The following flags control the contents of the CONTEXT structure.
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}
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}
672
CONTEXT_FULL = CONTEXT_CONTROL or CONTEXT_INTEGER or CONTEXT_SEGMENTS;
673
{$EXTERNALSYM CONTEXT_FULL}
675
CONTEXT_ALL = CONTEXT_CONTROL or CONTEXT_INTEGER or CONTEXT_SEGMENTS or CONTEXT_FLOATING_POINT or CONTEXT_DEBUG_REGISTERS;
676
{$EXTERNALSYM CONTEXT_ALL}
679
// Define initial MxCsr control.
682
INITIAL_MXCSR = $1f80; // initial MXCSR value
683
{$EXTERNALSYM INITIAL_MXCSR}
685
MAXIMUM_SUPPORTED_EXTENSION = 512;
686
{$EXTERNALSYM MAXIMUM_SUPPORTED_EXTENSION}
689
PFLOATING_SAVE_AREA = ^FLOATING_SAVE_AREA;
690
{$EXTERNALSYM PFLOATING_SAVE_AREA}
691
_FLOATING_SAVE_AREA = record
696
ErrorSelector: DWORD;
699
RegisterArea: array [0..SIZE_OF_80387_REGISTERS - 1] of BYTE;
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;
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.
715
// The layout of the record conforms to a standard call frame.
723
// The flags values within this flag control the contents of
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.
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.
737
// The context record is never used as an OUT only parameter.
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.
756
// This section is specified/returned if the
757
// ContextFlags word contians the flag CONTEXT_FLOATING_POINT.
760
FloatSave: FLOATING_SAVE_AREA;
763
// This section is specified/returned if the
764
// ContextFlags word contians the flag CONTEXT_SEGMENTS.
773
// This section is specified/returned if the
774
// ContextFlags word contians the flag CONTEXT_INTEGER.
785
// This section is specified/returned if the
786
// ContextFlags word contians the flag CONTEXT_CONTROL.
791
SegCs: DWORD; // MUST BE SANITIZED
792
EFlags: DWORD; // MUST BE SANITIZED
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
802
ExtendedRegisters: array [0..MAXIMUM_SUPPORTED_EXTENSION - 1] of BYTE;
804
{$EXTERNALSYM _CONTEXT}
806
{$EXTERNALSYM CONTEXT}
810
LDTENTRY_FLAGS1_TYPE = $1F;
811
LDTENTRY_FLAGS1_DPL = $60;
812
LDTENTRY_FLAGS1_PRES = $80;
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;
821
PLDT_ENTRY = ^LDT_ENTRY;
822
{$EXTERNALSYM PLDT_ENTRY}
827
Flags1: BYTE; // Declare as bytes to avoid alignment
828
Flags2: BYTE; // Problems.
831
{$EXTERNALSYM _LDT_ENTRY}
832
LDT_ENTRY = _LDT_ENTRY;
833
{$EXTERNALSYM LDT_ENTRY}
834
TLdtEntry = LDT_ENTRY;
835
PLdtEntry = PLDT_ENTRY;
837
// Please contact INTEL to get IA64-specific information
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}
846
// Exception record definition.
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;
860
{$EXTERNALSYM _EXCEPTION_RECORD}
861
EXCEPTION_RECORD = _EXCEPTION_RECORD;
862
{$EXTERNALSYM EXCEPTION_RECORD}
863
TExceptionRecord = EXCEPTION_RECORD;
864
PExceptionRecord = PEXCEPTION_RECORD;
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;
876
{$EXTERNALSYM _EXCEPTION_RECORD32}
877
EXCEPTION_RECORD32 = _EXCEPTION_RECORD32;
878
{$EXTERNALSYM EXCEPTION_RECORD32}
879
TExceptionRecord32 = EXCEPTION_RECORD32;
880
PExceptionRecord32 = PEXCEPTION_RECORD32;
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;
893
{$EXTERNALSYM _EXCEPTION_RECORD64}
894
EXCEPTION_RECORD64 = _EXCEPTION_RECORD64;
895
{$EXTERNALSYM EXCEPTION_RECORD64}
896
TExceptionRecord64 = EXCEPTION_RECORD64;
897
PExceptionRecord64 = PEXCEPTION_RECORD64;
900
// Typedef for pointer returned by exception_info()
903
PEXCEPTION_POINTERS = ^EXCEPTION_POINTERS;
904
{$EXTERNALSYM PEXCEPTION_POINTERS}
905
_EXCEPTION_POINTERS = record
906
ExceptionRecord: PEXCEPTION_RECORD;
907
ContextRecord: PCONTEXT;
909
{$EXTERNALSYM _EXCEPTION_POINTERS}
910
EXCEPTION_POINTERS = _EXCEPTION_POINTERS;
911
{$EXTERNALSYM EXCEPTION_POINTERS}
912
TExceptionPointers = EXCEPTION_POINTERS;
913
PExceptionPointers = ^TExceptionPointers;
915
PACCESS_TOKEN = Pointer;
916
{$EXTERNALSYM PACCESS_TOKEN}
918
////////////////////////////////////////////////////////////////////////
922
////////////////////////////////////////////////////////////////////////
925
// Define the access mask as a longword sized structure divided up as
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 |
933
// +-+-------------+---------------+-------------------------------+
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;
945
// typedef ACCESS_MASK *PACCESS_MASK;
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
951
// DesiredAccess = DELETE | READ_CONTROL
953
// So we'll declare ACCESS_MASK as DWORD
958
{$EXTERNALSYM ACCESS_MASK}
959
PACCESS_MASK = ^ACCESS_MASK;
960
{$EXTERNALSYM PACCESS_MASK}
961
TAccessMask = ACCESS_MASK;
962
PAccessMask = PACCESS_MASK;
964
////////////////////////////////////////////////////////////////////////
968
////////////////////////////////////////////////////////////////////////
971
// The following are masks for the predefined standard access types
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}
986
STANDARD_RIGHTS_REQUIRED = $000F0000;
987
{$EXTERNALSYM STANDARD_RIGHTS_REQUIRED}
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}
996
STANDARD_RIGHTS_ALL = $001F0000;
997
{$EXTERNALSYM STANDARD_RIGHTS_ALL}
998
SPECIFIC_RIGHTS_ALL = $0000FFFF;
999
{$EXTERNALSYM SPECIFIC_RIGHTS_ALL}
1002
// AccessSystemAcl access type
1005
ACCESS_SYSTEM_SECURITY = $01000000;
1006
{$EXTERNALSYM ACCESS_SYSTEM_SECURITY}
1009
// MaximumAllowed access type
1012
MAXIMUM_ALLOWED = $02000000;
1013
{$EXTERNALSYM MAXIMUM_ALLOWED}
1016
// These are the generic rights.
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}
1029
// Define the generic mapping array. This is used to denote the
1030
// mapping of each generic access right to a specific access mask.
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;
1042
{$EXTERNALSYM _GENERIC_MAPPING}
1043
GENERIC_MAPPING = _GENERIC_MAPPING;
1044
{$EXTERNALSYM GENERIC_MAPPING}
1045
TGenericMapping = GENERIC_MAPPING;
1046
PGenericMapping = PGENERIC_MAPPING;
1048
////////////////////////////////////////////////////////////////////////
1050
// LUID_AND_ATTRIBUTES //
1052
////////////////////////////////////////////////////////////////////////
1056
//#include <pshpack4.h>
1058
PLUID_AND_ATTRIBUTES = ^LUID_AND_ATTRIBUTES;
1059
{$EXTERNALSYM PLUID_AND_ATTRIBUTES}
1060
_LUID_AND_ATTRIBUTES = record
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;
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;
1077
//#include <poppack.h>
1079
////////////////////////////////////////////////////////////////////////
1081
// Security Id (SID) //
1083
////////////////////////////////////////////////////////////////////////
1086
// Pictorially the structure of an SID is as follows:
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
// +---------------------------------------------------------------+
1100
// +- - - - - - - - SubAuthority[] - - - - - - - - -+
1102
// +---------------------------------------------------------------+
1107
PSID_IDENTIFIER_AUTHORITY = ^SID_IDENTIFIER_AUTHORITY;
1108
{$EXTERNALSYM PSID_IDENTIFIER_AUTHORITY}
1109
_SID_IDENTIFIER_AUTHORITY = record
1110
Value: array [0..5] of Byte;
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;
1121
SubAuthorityCount: Byte;
1122
IdentifierAuthority: SID_IDENTIFIER_AUTHORITY;
1123
SubAuthority: array [0..ANYSIZE_ARRAY - 1] of DWORD;
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}
1140
SECURITY_MAX_SID_SIZE = SizeOf(SID) - SizeOf(DWORD) + (SID_MAX_SUB_AUTHORITIES * SizeOf(DWORD));
1141
{$EXTERNALSYM SECURITY_MAX_SID_SIZE}
1144
{$EXTERNALSYM SidTypeUser}
1146
{$EXTERNALSYM SidTypeGroup}
1148
{$EXTERNALSYM SidTypeDomain}
1150
{$EXTERNALSYM SidTypeAlias}
1151
SidTypeWellKnownGroup = 5;
1152
{$EXTERNALSYM SidTypeWellKnownGroup}
1153
SidTypeDeletedAccount = 6;
1154
{$EXTERNALSYM SidTypeDeletedAccount}
1156
{$EXTERNALSYM SidTypeInvalid}
1158
{$EXTERNALSYM SidTypeUnknown}
1159
SidTypeComputer = 9;
1160
{$EXTERNALSYM SidTypeComputer}
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;
1172
PSID_AND_ATTRIBUTES = ^SID_AND_ATTRIBUTES;
1173
{$EXTERNALSYM PSID_AND_ATTRIBUTES}
1174
_SID_AND_ATTRIBUTES = record
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;
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;
1191
/////////////////////////////////////////////////////////////////////////////
1193
// Universal well-known SIDs //
1195
// Null SID S-1-0-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 //
1203
// (Non-unique IDs) S-1-4 //
1205
/////////////////////////////////////////////////////////////////////////////
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}
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}
1228
SECURITY_CREATOR_OWNER_RID = $00000000;
1229
{$EXTERNALSYM SECURITY_CREATOR_OWNER_RID}
1230
SECURITY_CREATOR_GROUP_RID = $00000001;
1231
{$EXTERNALSYM SECURITY_CREATOR_GROUP_RID}
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}
1238
/////////////////////////////////////////////////////////////////////////////
1240
// NT well-known SIDs //
1242
// NT Authority S-1-5 //
1243
// Dialup S-1-5-1 //
1245
// Network S-1-5-2 //
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) //
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 //
1260
// Local System S-1-5-18 //
1261
// Local Service S-1-5-19 //
1262
// Network Service S-1-5-20 //
1264
// (NT non-unique IDs) S-1-5-0x15-... (NT Domain Sids) //
1266
// (Built-in domain) S-1-5-0x20 //
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 //
1273
// Other Organization S-1-5-1000 (>=1000 can not be filtered) //
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" //
1281
///////////////////////////////////////////////////////////////////////////////
1284
SECURITY_NT_AUTHORITY: TSidIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5));
1285
{$EXTERNALSYM SECURITY_NT_AUTHORITY}
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}
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}
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}
1334
SECURITY_BUILTIN_DOMAIN_RID = $00000020;
1335
{$EXTERNALSYM SECURITY_BUILTIN_DOMAIN_RID}
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}
1348
SECURITY_MAX_ALWAYS_FILTERED = $000003E7;
1349
{$EXTERNALSYM SECURITY_MAX_ALWAYS_FILTERED}
1350
SECURITY_MIN_NEVER_FILTERED = $000003E8;
1351
{$EXTERNALSYM SECURITY_MIN_NEVER_FILTERED}
1353
SECURITY_OTHER_ORGANIZATION_RID = $000003E8;
1354
{$EXTERNALSYM SECURITY_OTHER_ORGANIZATION_RID}
1356
/////////////////////////////////////////////////////////////////////////////
1358
// well-known domain relative sub-authority values (RIDs)... //
1360
/////////////////////////////////////////////////////////////////////////////
1362
// Well-known users ...
1364
FOREST_USER_RID_MAX = $000001F3;
1365
{$EXTERNALSYM FOREST_USER_RID_MAX}
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}
1374
DOMAIN_USER_RID_MAX = $000003E7;
1375
{$EXTERNALSYM DOMAIN_USER_RID_MAX}
1377
// well-known groups ...
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}
1398
// well-known aliases ...
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}
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}
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}
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}
1441
WELL_KNOWN_SID_TYPE = (
1447
WinCreatorOwnerServerSid,
1448
WinCreatorGroupServerSid,
1457
WinEnterpriseControllersSid,
1459
WinAuthenticatedUserSid,
1460
WinRestrictedCodeSid,
1461
WinTerminalServerSid,
1462
WinRemoteLogonIdSid,
1466
WinNetworkServiceSid,
1467
WinBuiltinDomainSid,
1468
WinBuiltinAdministratorsSid,
1470
WinBuiltinGuestsSid,
1471
WinBuiltinPowerUsersSid,
1472
WinBuiltinAccountOperatorsSid,
1473
WinBuiltinSystemOperatorsSid,
1474
WinBuiltinPrintOperatorsSid,
1475
WinBuiltinBackupOperatorsSid,
1476
WinBuiltinReplicatorSid,
1477
WinBuiltinPreWindows2000CompatibleAccessSid,
1478
WinBuiltinRemoteDesktopUsersSid,
1479
WinBuiltinNetworkConfigurationOperatorsSid,
1480
WinAccountAdministratorSid,
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;
1507
// Allocate the System Luid. The first 1000 LUIDs are reserved.
1508
// Use #999 here (0x3E7 = 999)
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}
1521
////////////////////////////////////////////////////////////////////////
1523
// User and Group related SID attributes //
1525
////////////////////////////////////////////////////////////////////////
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}
1550
// (None yet defined.)
1552
////////////////////////////////////////////////////////////////////////
1556
////////////////////////////////////////////////////////////////////////
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
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
// +-------------------------------+-------------------------------+
1571
// The current AclRevision is defined to be ACL_REVISION.
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.
1576
// AceCount is the number of ACES in the ACL.
1579
// This is the *current* ACL revision
1582
{$EXTERNALSYM ACL_REVISION}
1583
ACL_REVISION_DS = 4;
1584
{$EXTERNALSYM ACL_REVISION_DS}
1586
// This is the history of ACL revisions. Add a new one whenever
1587
// ACL_REVISION is updated
1590
{$EXTERNALSYM ACL_REVISION1}
1592
{$EXTERNALSYM ACL_REVISION2}
1593
MIN_ACL_REVISION = ACL_REVISION2;
1594
{$EXTERNALSYM MIN_ACL_REVISION}
1596
{$EXTERNALSYM ACL_REVISION3}
1598
{$EXTERNALSYM ACL_REVISION4}
1599
MAX_ACL_REVISION = ACL_REVISION4;
1600
{$EXTERNALSYM MAX_ACL_REVISION}
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
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
// +---------------+-------+-------+---------------+---------------+
1631
// AceType denotes the type of the ace, there are some predefined ace
1634
// AceSize is the size, in bytes, of ace.
1636
// AceFlags are the Ace flags for audit and inheritance, defined shortly.
1639
PACE_HEADER = ^ACE_HEADER;
1640
{$EXTERNALSYM PACE_HEADER}
1641
_ACE_HEADER = record
1646
{$EXTERNALSYM _ACE_HEADER}
1647
ACE_HEADER = _ACE_HEADER;
1648
{$EXTERNALSYM ACE_HEADER}
1649
TAceHeader = ACE_HEADER;
1650
PAceHeader = PACE_HEADER;
1653
// The following are the predefined ace types that go into the AceType
1654
// field of an Ace header.
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}
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}
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}
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}
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}
1711
ACCESS_MAX_MS_V5_ACE_TYPE = $10;
1712
{$EXTERNALSYM ACCESS_MAX_MS_V5_ACE_TYPE}
1715
// The following are the inherit flags that go into the AceFlags field
1716
// of an Ace header.
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}
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
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.
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.
1744
// SYSTEM_AUDIT and SYSTEM_ALARM AceFlags
1746
// These control the signaling of audit and alarms for success or failure.
1749
SUCCESSFUL_ACCESS_ACE_FLAG = $40;
1750
{$EXTERNALSYM SUCCESSFUL_ACCESS_ACE_FLAG}
1751
FAILED_ACCESS_ACE_FLAG = $80;
1752
{$EXTERNALSYM FAILED_ACCESS_ACE_FLAG}
1755
// We'll define the structure of the predefined ACE types. Pictorally
1756
// the structure of the predefined ACE's is as follows:
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
// +---------------+-------+-------+---------------+---------------+
1764
// +---------------------------------------------------------------+
1772
// +---------------------------------------------------------------+
1774
// Mask is the access mask associated with the ACE. This is either the
1775
// access allowed, access denied, audit, or alarm mask.
1777
// Sid is the Sid associated with the ACE.
1780
// The following are the four predefined ACE types.
1782
// Examine the AceType field in the Header to determine
1783
// which structure is appropriate to use for casting.
1786
PACCESS_ALLOWED_ACE = ^ACCESS_ALLOWED_ACE;
1787
{$EXTERNALSYM PACCESS_ALLOWED_ACE}
1788
_ACCESS_ALLOWED_ACE = record
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;
1799
PACCESS_DENIED_ACE = ^ACCESS_DENIED_ACE;
1800
{$EXTERNALSYM PACCESS_DENIED_ACE}
1801
_ACCESS_DENIED_ACE = record
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;
1812
PSYSTEM_AUDIT_ACE = ^SYSTEM_AUDIT_ACE;
1813
{$EXTERNALSYM PSYSTEM_AUDIT_ACE}
1814
_SYSTEM_AUDIT_ACE = record
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;
1825
PSYSTEM_ALARM_ACE = ^SYSTEM_ALARM_ACE;
1826
{$EXTERNALSYM PSYSTEM_ALARM_ACE}
1827
_SYSTEM_ALARM_ACE = record
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;
1838
PACCESS_ALLOWED_OBJECT_ACE = ^ACCESS_ALLOWED_OBJECT_ACE;
1839
{$EXTERNALSYM PACCESS_ALLOWED_OBJECT_ACE}
1840
_ACCESS_ALLOWED_OBJECT_ACE = record
1845
InheritedObjectType: GUID;
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;
1854
PACCESS_DENIED_OBJECT_ACE = ^ACCESS_DENIED_OBJECT_ACE;
1855
{$EXTERNALSYM PACCESS_DENIED_OBJECT_ACE}
1856
_ACCESS_DENIED_OBJECT_ACE = record
1861
InheritedObjectType: GUID;
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;
1870
PSYSTEM_AUDIT_OBJECT_ACE = ^SYSTEM_AUDIT_OBJECT_ACE;
1871
{$EXTERNALSYM PSYSTEM_AUDIT_OBJECT_ACE}
1872
_SYSTEM_AUDIT_OBJECT_ACE = record
1877
InheritedObjectType: GUID;
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;
1886
PSYSTEM_ALARM_OBJECT_ACE = ^SYSTEM_ALARM_OBJECT_ACE;
1887
{$EXTERNALSYM PSYSTEM_ALARM_OBJECT_ACE}
1888
_SYSTEM_ALARM_OBJECT_ACE = record
1893
InheritedObjectType: GUID;
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;
1903
// Callback ace support in post Win2000.
1904
// Resource managers can put their own data after Sidstart + Length of the sid
1907
_ACCESS_ALLOWED_CALLBACK_ACE = record
1911
// Opaque resouce manager specific data
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;
1921
_ACCESS_DENIED_CALLBACK_ACE = record
1925
// Opaque resouce manager specific data
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;
1935
_SYSTEM_AUDIT_CALLBACK_ACE = record
1939
// Opaque resouce manager specific data
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;
1949
_SYSTEM_ALARM_CALLBACK_ACE = record
1953
// Opaque resouce manager specific data
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;
1963
_ACCESS_ALLOWED_CALLBACK_OBJECT_ACE = record
1968
InheritedObjectType: GUID;
1970
// Opaque resouce manager specific data
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;
1980
_ACCESS_DENIED_CALLBACK_OBJECT_ACE = record
1985
InheritedObjectType: GUID;
1987
// Opaque resouce manager specific data
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;
1997
_SYSTEM_AUDIT_CALLBACK_OBJECT_ACE = record
2002
InheritedObjectType: GUID;
2004
// Opaque resouce manager specific data
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;
2014
_SYSTEM_ALARM_CALLBACK_OBJECT_ACE = record
2019
InheritedObjectType: GUID;
2021
// Opaque resouce manager specific data
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;
2032
// Currently define Flags for "OBJECT" ACE types.
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}
2042
// The following declarations are used for setting and querying information
2043
// about and ACL. First are the various information classes available to
2047
AclRevisionInformation = 1;
2048
{$EXTERNALSYM AclRevisionInformation}
2049
AclSizeInformation = 2;
2050
{$EXTERNALSYM AclSizeInformation}
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;
2060
// This record is returned/sent if the user is requesting/setting the
2061
// AclRevisionInformation
2064
PACL_REVISION_INFORMATION = ^ACL_REVISION_INFORMATION;
2065
{$EXTERNALSYM PACL_REVISION_INFORMATION}
2066
_ACL_REVISION_INFORMATION = record
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;
2076
// This record is returned if the user is requesting AclSizeInformation
2079
PACL_SIZE_INFORMATION = ^ACL_SIZE_INFORMATION;
2080
{$EXTERNALSYM PACL_SIZE_INFORMATION}
2081
_ACL_SIZE_INFORMATION = record
2083
AclBytesInUse: DWORD;
2084
AclBytesFree: DWORD;
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;
2092
////////////////////////////////////////////////////////////////////////
2094
// SECURITY_DESCRIPTOR //
2096
////////////////////////////////////////////////////////////////////////
2098
// Define the Security Descriptor and related data types.
2099
// This is an opaque data structure.
2103
// Current security descriptor revision value
2107
SECURITY_DESCRIPTOR_REVISION = 1;
2108
{$EXTERNALSYM SECURITY_DESCRIPTOR_REVISION}
2109
SECURITY_DESCRIPTOR_REVISION1 = 1;
2110
{$EXTERNALSYM SECURITY_DESCRIPTOR_REVISION1}
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;
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}
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
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.
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.
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.
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.
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.
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
2202
// Pictorially the structure of a security descriptor is as follows:
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
// +---------------------------------------------------------------+
2210
// +---------------------------------------------------------------+
2212
// +---------------------------------------------------------------+
2214
// +---------------------------------------------------------------+
2216
// +---------------------------------------------------------------+
2218
// In general, this data structure should be treated opaquely to ensure future
2224
PSECURITY_DESCRIPTOR_RELATIVE = ^SECURITY_DESCRIPTOR_RELATIVE;
2225
{$EXTERNALSYM PSECURITY_DESCRIPTOR_RELATIVE}
2226
_SECURITY_DESCRIPTOR_RELATIVE = record
2229
Control: SECURITY_DESCRIPTOR_CONTROL;
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;
2241
PSECURITY_DESCRIPTOR = ^SECURITY_DESCRIPTOR;
2242
{$EXTERNALSYM PSECURITY_DESCRIPTOR}
2243
_SECURITY_DESCRIPTOR = record
2246
Control: SECURITY_DESCRIPTOR_CONTROL;
2252
{$EXTERNALSYM _SECURITY_DESCRIPTOR}
2253
SECURITY_DESCRIPTOR = _SECURITY_DESCRIPTOR;
2254
{$EXTERNALSYM SECURITY_DESCRIPTOR}
2255
TSecurityDescriptor = SECURITY_DESCRIPTOR;
2256
PSecurityDescriptor = PSECURITY_DESCRIPTOR;
2258
PPSECURITY_DESCRIPTOR = ^PSECURITY_DESCRIPTOR;
2259
{$NODEFINE PPSECURITY_DESCRIPTOR}
2262
SECURITY_DESCRIPTOR_MIN_LENGTH = SizeOf(SECURITY_DESCRIPTOR);
2263
{$EXTERNALSYM SECURITY_DESCRIPTOR_MIN_LENGTH}
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.
2272
// Control - A set of flags which qualify the meaning of the
2273
// security descriptor or individual fields of the security
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.
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.
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.
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.
2303
////////////////////////////////////////////////////////////////////////
2305
// Object Type list for AccessCheckByType //
2307
////////////////////////////////////////////////////////////////////////
2310
POBJECT_TYPE_LIST = ^OBJECT_TYPE_LIST;
2311
{$EXTERNALSYM POBJECT_TYPE_LIST}
2312
_OBJECT_TYPE_LIST = record
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;
2324
// DS values for Level
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}
2335
ACCESS_MAX_LEVEL = 4;
2336
{$EXTERNALSYM ACCESS_MAX_LEVEL}
2339
// Parameters to NtAccessCheckByTypeAndAditAlarm
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;
2353
AUDIT_ALLOW_NO_PRIVILEGE = $1;
2354
{$EXTERNALSYM AUDIT_ALLOW_NO_PRIVILEGE}
2357
// DS values for Source and ObjectTypeName
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}
2369
////////////////////////////////////////////////////////////////////////
2371
// Privilege Related Data Structures //
2373
////////////////////////////////////////////////////////////////////////
2376
// Privilege attributes
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}
2390
// Privilege Set Control flags
2393
PRIVILEGE_SET_ALL_NECESSARY = 1;
2394
{$EXTERNALSYM PRIVILEGE_SET_ALL_NECESSARY}
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.
2401
// Note: don't change this structure without fixing the INITIAL_PRIVILEGE_SET
2402
// structure (defined in se.h)
2406
PPRIVILEGE_SET = ^PRIVILEGE_SET;
2407
{$EXTERNALSYM PPRIVILEGE_SET}
2408
_PRIVILEGE_SET = record
2409
PrivilegeCount: DWORD;
2411
Privilege: array [0..ANYSIZE_ARRAY - 1] of LUID_AND_ATTRIBUTES;
2412
//Privilege: LUID_AND_ATTRIBUTES;
2414
{$EXTERNALSYM _PRIVILEGE_SET}
2415
PRIVILEGE_SET = _PRIVILEGE_SET;
2416
{$EXTERNALSYM PRIVILEGE_SET}
2417
TPrivilegeSet = PRIVILEGE_SET;
2418
PPrivilegeSet = PPRIVILEGE_SET;
2420
////////////////////////////////////////////////////////////////////////
2422
// NT Defined Privileges //
2424
////////////////////////////////////////////////////////////////////////
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}
2488
////////////////////////////////////////////////////////////////////
2490
// Security Quality Of Service //
2493
////////////////////////////////////////////////////////////////////
2496
// Impersonation Level
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.
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;
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}
2522
function VALID_IMPERSONATION_LEVEL(L: TSecurityImpersonationLevel): BOOL;
2523
{$EXTERNALSYM VALID_IMPERSONATION_LEVEL}
2525
////////////////////////////////////////////////////////////////////
2527
// Token Object Definitions //
2530
////////////////////////////////////////////////////////////////////
2533
// Token Specific Access Rights.
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}
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}
2561
TOKEN_ALL_ACCESS = TOKEN_ALL_ACCESS_P or TOKEN_ADJUST_SESSIONID;
2562
{$EXTERNALSYM TOKEN_ALL_ACCESS}
2564
TOKEN_READ = STANDARD_RIGHTS_READ or TOKEN_QUERY;
2565
{$EXTERNALSYM TOKEN_READ}
2567
TOKEN_WRITE = (STANDARD_RIGHTS_WRITE or TOKEN_ADJUST_PRIVILEGES or
2568
TOKEN_ADJUST_GROUPS or TOKEN_ADJUST_DEFAULT);
2569
{$EXTERNALSYM TOKEN_WRITE}
2571
TOKEN_EXECUTE = STANDARD_RIGHTS_EXECUTE;
2572
{$EXTERNALSYM TOKEN_EXECUTE}
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}
2586
TTokenType = TOKEN_TYPE;
2587
PTokenType = PTOKEN_TYPE;
2590
// Token Information Classes.
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}
2606
TTokenInformationClass = TOKEN_INFORMATION_CLASS;
2607
PTokenInformationClass = PTOKEN_INFORMATION_CLASS;
2610
// Token information class structures
2614
PTOKEN_USER = ^TOKEN_USER;
2615
{$EXTERNALSYM PTOKEN_USER}
2616
_TOKEN_USER = record
2617
User: SID_AND_ATTRIBUTES;
2619
{$EXTERNALSYM _TOKEN_USER}
2620
TOKEN_USER = _TOKEN_USER;
2621
{$EXTERNALSYM TOKEN_USER}
2622
TTokenUser = TOKEN_USER;
2623
PTokenUser = PTOKEN_USER;
2625
PTOKEN_GROUPS = ^TOKEN_GROUPS;
2626
{$EXTERNALSYM PTOKEN_GROUPS}
2627
_TOKEN_GROUPS = record
2629
Groups: array [0..ANYSIZE_ARRAY - 1] of SID_AND_ATTRIBUTES;
2631
{$EXTERNALSYM _TOKEN_GROUPS}
2632
TOKEN_GROUPS = _TOKEN_GROUPS;
2633
{$EXTERNALSYM TOKEN_GROUPS}
2634
TTokenGroups = TOKEN_GROUPS;
2635
PTokenGroups = PTOKEN_GROUPS;
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;
2643
{$EXTERNALSYM _TOKEN_PRIVILEGES}
2644
TOKEN_PRIVILEGES = _TOKEN_PRIVILEGES;
2645
{$EXTERNALSYM TOKEN_PRIVILEGES}
2646
TTokenPrivileges = TOKEN_PRIVILEGES;
2647
PTokenPrivileges = PTOKEN_PRIVILEGES;
2649
PTOKEN_OWNER = ^TOKEN_OWNER;
2650
{$EXTERNALSYM PTOKEN_OWNER}
2651
_TOKEN_OWNER = record
2654
{$EXTERNALSYM _TOKEN_OWNER}
2655
TOKEN_OWNER = _TOKEN_OWNER;
2656
{$EXTERNALSYM TOKEN_OWNER}
2657
TTokenOwner = TOKEN_OWNER;
2658
PTokenOwner = PTOKEN_OWNER;
2660
PTOKEN_PRIMARY_GROUP = ^TOKEN_PRIMARY_GROUP;
2661
{$EXTERNALSYM PTOKEN_PRIMARY_GROUP}
2662
_TOKEN_PRIMARY_GROUP = record
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;
2671
PTOKEN_DEFAULT_DACL = ^TOKEN_DEFAULT_DACL;
2672
{$EXTERNALSYM PTOKEN_DEFAULT_DACL}
2673
_TOKEN_DEFAULT_DACL = record
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;
2682
_TOKEN_GROUPS_AND_PRIVILEGES = record
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;
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;
2703
// Valid bits for each TOKEN_AUDIT_POLICY policy mask field.
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}
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}
2723
_TOKEN_AUDIT_POLICY_ELEMENT = record
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;
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}
2740
_TOKEN_AUDIT_POLICY = record
2742
Policy: array [0..ANYSIZE_ARRAY - 1] of TOKEN_AUDIT_POLICY_ELEMENT;
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;
2752
function PER_USER_AUDITING_POLICY_SIZE(p: PTOKEN_AUDIT_POLICY): DWORD;
2753
{$EXTERNALSYM PER_USER_AUDITING_POLICY_SIZE}
2755
function PER_USER_AUDITING_POLICY_SIZE_BY_COUNT(C: DWORD): DWORD;
2756
{$EXTERNALSYM PER_USER_AUDITING_POLICY_SIZE_BY_COUNT}
2759
TOKEN_SOURCE_LENGTH = 8;
2760
{$EXTERNALSYM TOKEN_SOURCE_LENGTH}
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;
2769
{$EXTERNALSYM _TOKEN_SOURCE}
2770
TOKEN_SOURCE = _TOKEN_SOURCE;
2771
{$EXTERNALSYM TOKEN_SOURCE}
2772
TTokenSource = TOKEN_SOURCE;
2773
PTokenSource = PTOKEN_SOURCE;
2775
PTOKEN_STATISTICS = ^TOKEN_STATISTICS;
2776
{$EXTERNALSYM PTOKEN_STATISTICS}
2777
_TOKEN_STATISTICS = record
2779
AuthenticationId: LUID;
2780
ExpirationTime: LARGE_INTEGER;
2781
TokenType: TOKEN_TYPE;
2782
ImpersonationLevel: SECURITY_IMPERSONATION_LEVEL;
2783
DynamicCharged: DWORD;
2784
DynamicAvailable: DWORD;
2786
PrivilegeCount: DWORD;
2789
{$EXTERNALSYM _TOKEN_STATISTICS}
2790
TOKEN_STATISTICS = _TOKEN_STATISTICS;
2791
{$EXTERNALSYM TOKEN_STATISTICS}
2792
TTokenStatistics = TOKEN_STATISTICS;
2793
PTokenStatistics = PTOKEN_STATISTICS;
2795
PTOKEN_CONTROL = ^TOKEN_CONTROL;
2796
{$EXTERNALSYM PTOKEN_CONTROL}
2797
_TOKEN_CONTROL = record
2799
AuthenticationId: LUID;
2801
TokenSource: TOKEN_SOURCE;
2803
{$EXTERNALSYM _TOKEN_CONTROL}
2804
TOKEN_CONTROL = _TOKEN_CONTROL;
2805
{$EXTERNALSYM TOKEN_CONTROL}
2806
TTokenControl = TOKEN_CONTROL;
2807
PTokenControl = PTOKEN_CONTROL;
2809
_TOKEN_ORIGIN = record
2810
OriginatingLogonSession: LUID;
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;
2821
// Security Tracking Mode
2825
SECURITY_DYNAMIC_TRACKING = True;
2826
{$EXTERNALSYM SECURITY_DYNAMIC_TRACKING}
2827
SECURITY_STATIC_TRACKING = False;
2828
{$EXTERNALSYM SECURITY_STATIC_TRACKING}
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}
2837
// Quality Of Service
2840
PSECURITY_QUALITY_OF_SERVICE = ^SECURITY_QUALITY_OF_SERVICE;
2841
{$EXTERNALSYM PSECURITY_QUALITY_OF_SERVICE}
2842
_SECURITY_QUALITY_OF_SERVICE = record
2844
ImpersonationLevel: SECURITY_IMPERSONATION_LEVEL;
2845
ContextTrackingMode: SECURITY_CONTEXT_TRACKING_MODE;
2846
EffectiveOnly: ByteBool;
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;
2855
// Used to represent information related to a thread impersonation
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;
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;
2873
DISABLE_MAX_PRIVILEGE = $1;
2874
{$EXTERNALSYM DISABLE_MAX_PRIVILEGE}
2876
{$EXTERNALSYM SANDBOX_INERT}
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;
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}
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}
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}
2932
MAXIMUM_PROCESSORS = 32;
2933
{$EXTERNALSYM MAXIMUM_PROCESSORS}
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}
2954
THREAD_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $3FF;
2955
{$EXTERNALSYM THREAD_ALL_ACCESS}
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}
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
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;
2985
FLS_MAXIMUM_AVAILABLE = 128;
2986
{$EXTERNALSYM FLS_MAXIMUM_AVAILABLE}
2987
TLS_MINIMUM_AVAILABLE = 64;
2988
{$EXTERNALSYM TLS_MINIMUM_AVAILABLE}
2991
PEXCEPTION_REGISTRATION_RECORD = ^EXCEPTION_REGISTRATION_RECORD;
2992
_EXCEPTION_REGISTRATION_RECORD = packed record
2993
pNext: PEXCEPTION_REGISTRATION_RECORD;
2994
pfnHandler: FARPROC;
2996
EXCEPTION_REGISTRATION_RECORD = _EXCEPTION_REGISTRATION_RECORD;
2997
TExceptionRegistrationRecord = EXCEPTION_REGISTRATION_RECORD;
2998
PExceptionRegistrationRecord = PEXCEPTION_REGISTRATION_RECORD;
3001
{$EXTERNALSYM PNT_TIB}
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
3007
//union // 0Ch (NT/Win95 differences)
3009
// struct // Win95 fields
3011
// WORD pvTDB; // 0Ch TDB
3012
// WORD pvThunkSS; // 0Eh SS selector used for thunking to 16 bits
3013
// DWORD unknown1; // 10h
3016
// struct // WinNT fields
3019
SubSystemTib: PVOID; // 0Ch
3021
Union: record // 10H
3023
0: (FiberData: PVOID);
3024
1: (Version: DWORD);
3030
ArbitraryUserPointer: PVOID; // 14h Available for application use
3031
Self: PNT_TIB; // 18h Linear address of TIB structure
3033
//union // 1Ch (NT/Win95 differences)
3035
// struct // Win95 fields
3037
// WORD TIBFlags; // 1Ch
3038
// WORD Win16MutexCount; // 1Eh
3039
// DWORD DebugContext; // 20h
3040
// DWORD pCurrentPriority; // 24h
3041
// DWORD pvQueue; // 28h Message Queue selector
3044
// struct // WinNT fields
3047
unknown1: DWORD; // 1Ch
3048
processID: DWORD; // 20h
3049
threadID: DWORD; // 24h
3050
unknown2: DWORD; // 28h
3055
pvTLSArray: PVOID; // (PPVOID!) 2Ch Thread Local Storage array
3057
//union // 30h (NT/Win95 differences)
3059
// struct // Win95 fields
3061
// PVOID* pProcess; // 30h Pointer to owning process database
3065
{$EXTERNALSYM _NT_TIB}
3067
{$EXTERNALSYM NT_TIB}
3072
// 32 and 64 bit specific version for wow64 and the debugger
3075
PNT_TIB32 = ^NT_TIB32;
3076
{$EXTERNALSYM PNT_TIB32}
3078
ExceptionList: DWORD;
3081
SubSystemTib: DWORD;
3084
0: (FiberData: DWORD);
3085
1: (Version: DWORD);
3087
ArbitraryUserPointer: DWORD;
3090
{$EXTERNALSYM _NT_TIB32}
3091
NT_TIB32 = _NT_TIB32;
3092
{$EXTERNALSYM NT_TIB32}
3093
TNtTib32 = NT_TIB32;
3094
PNtTib32 = ^TNtTib32;
3096
PNT_TIB64 = ^NT_TIB64;
3097
{$EXTERNALSYM PNT_TIB64}
3099
ExceptionList: DWORD64;
3101
StackLimit: DWORD64;
3102
SubSystemTib: DWORD64;
3105
0: (FiberData: DWORD64);
3106
1: (Version: DWORD);
3108
ArbitraryUserPointer: DWORD64;
3111
{$EXTERNALSYM _NT_TIB64}
3112
NT_TIB64 = _NT_TIB64;
3113
{$EXTERNALSYM NT_TIB64}
3114
TNtTib64 = NT_TIB64;
3115
PNtTib64 = ^TNtTib64;
3118
// Define function to return the current Thread Environment Block
3121
function NtCurrentTeb: PNT_TIB;
3122
{$EXTERNALSYM NtCurrentTeb}
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}
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;
3145
{$EXTERNALSYM _QUOTA_LIMITS}
3146
QUOTA_LIMITS = _QUOTA_LIMITS;
3147
{$EXTERNALSYM QUOTA_LIMITS}
3148
TQuotaLimits = QUOTA_LIMITS;
3149
PQuotaLimits = PQUOTA_LIMITS;
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}
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;
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;
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;
3194
{$EXTERNALSYM _IO_COUNTERS}
3195
IO_COUNTERS = _IO_COUNTERS;
3196
{$EXTERNALSYM IO_COUNTERS}
3197
TIoCounters = IO_COUNTERS;
3198
PIoCounters = PIO_COUNTERS;
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;
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;
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;
3224
MinimumWorkingSetSize: SIZE_T;
3225
MaximumWorkingSetSize: SIZE_T;
3226
ActiveProcessLimit: DWORD;
3227
Affinity: ULONG_PTR;
3228
PriorityClass: DWORD;
3229
SchedulingClass: DWORD;
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;
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;
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;
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;
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;
3266
PJOBOBJECT_BASIC_UI_RESTRICTIONS = ^JOBOBJECT_BASIC_UI_RESTRICTIONS;
3267
{$EXTERNALSYM PJOBOBJECT_BASIC_UI_RESTRICTIONS}
3268
_JOBOBJECT_BASIC_UI_RESTRICTIONS = record
3269
UIRestrictionsClass: DWORD;
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;
3277
PJOBOBJECT_SECURITY_LIMIT_INFORMATION = ^JOBOBJECT_SECURITY_LIMIT_INFORMATION;
3278
{$EXTERNALSYM PJOBOBJECT_SECURITY_LIMIT_INFORMATION}
3279
_JOBOBJECT_SECURITY_LIMIT_INFORMATION = record
3280
SecurityLimitFlags : DWORD;
3282
SidsToDisable : PTOKEN_GROUPS;
3283
PrivilegesToDelete : PTOKEN_PRIVILEGES;
3284
RestrictedSids : PTOKEN_GROUPS;
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;
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;
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;
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;
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;
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;
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;
3327
_JOBOBJECT_JOBSET_INFORMATION = record
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;
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}
3345
// Completion Port Messages for job objects
3347
// These values are returned via the lpNumberOfBytesTransferred parameter
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}
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}
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}
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}
3418
JOB_OBJECT_LIMIT_VALID_FLAGS = $0007ffff;
3419
{$EXTERNALSYM JOB_OBJECT_LIMIT_VALID_FLAGS}
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}
3429
// UI restrictions for jobs
3432
JOB_OBJECT_UILIMIT_NONE = $00000000;
3433
{$EXTERNALSYM JOB_OBJECT_UILIMIT_NONE}
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}
3452
JOB_OBJECT_UILIMIT_ALL = $000000FF;
3453
{$EXTERNALSYM JOB_OBJECT_UILIMIT_ALL}
3455
JOB_OBJECT_UI_VALID_FLAGS = $000000FF;
3456
{$EXTERNALSYM JOB_OBJECT_UI_VALID_FLAGS}
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}
3467
JOB_OBJECT_SECURITY_VALID_FLAGS = $0000000f;
3468
{$EXTERNALSYM JOB_OBJECT_SECURITY_VALID_FLAGS}
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;
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}
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}
3505
// Timer Specific Access Rights.
3508
TIMER_QUERY_STATE = $0001;
3509
{$EXTERNALSYM TIMER_QUERY_STATE}
3510
TIMER_MODIFY_STATE = $0002;
3511
{$EXTERNALSYM TIMER_MODIFY_STATE}
3513
TIMER_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or TIMER_QUERY_STATE or TIMER_MODIFY_STATE;
3514
{$EXTERNALSYM TIMER_ALL_ACCESS}
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}
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;
3532
{$EXTERNALSYM LTP_PC_SMT}
3535
_SYSTEM_LOGICAL_PROCESSOR_INFORMATION = record
3536
ProcessorMask: ULONG_PTR;
3537
Relationship: LOGICAL_PROCESSOR_RELATIONSHIP;
3539
0: (Flags: BYTE); // ProcessorCore
3540
1: (NodeNumber: DWORD); // NumaNode
3541
2: (Reserved: array [0..1] of ULONGLONG);
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;
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}
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}
3621
PROCESSOR_ARCHITECTURE_UNKNOWN = $FFFF;
3622
{$EXTERNALSYM PROCESSOR_ARCHITECTURE_UNKNOWN}
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}
3643
{$EXTERNALSYM PF_PAE_ENABLED}
3644
PF_XMMI64_INSTRUCTIONS_AVAILABLE = 10;
3645
{$EXTERNALSYM PF_XMMI64_INSTRUCTIONS_AVAILABLE}
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;
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;
3665
PMEMORY_BASIC_INFORMATION32 = ^MEMORY_BASIC_INFORMATION32;
3666
{$EXTERNALSYM PMEMORY_BASIC_INFORMATION32}
3667
_MEMORY_BASIC_INFORMATION32 = record
3669
AllocationBase: DWORD;
3670
AllocationProtect: DWORD;
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;
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;
3693
__alignment2: DWORD;
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;
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}
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}
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}
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}
3735
{$EXTERNALSYM PAGE_GUARD}
3736
PAGE_NOCACHE = $200;
3737
{$EXTERNALSYM PAGE_NOCACHE}
3738
PAGE_WRITECOMBINE = $400;
3739
{$EXTERNALSYM PAGE_WRITECOMBINE}
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}
3749
{$EXTERNALSYM MEM_FREE}
3750
MEM_PRIVATE = $20000;
3751
{$EXTERNALSYM MEM_PRIVATE}
3752
MEM_MAPPED = $40000;
3753
{$EXTERNALSYM MEM_MAPPED}
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}
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}
3782
// Define access rights to files and directories
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
3793
FILE_READ_DATA = $0001; // file & pipe
3794
{$EXTERNALSYM FILE_READ_DATA}
3795
FILE_LIST_DIRECTORY = $0001; // directory
3796
{$EXTERNALSYM FILE_LIST_DIRECTORY}
3798
FILE_WRITE_DATA = $0002; // file & pipe
3799
{$EXTERNALSYM FILE_WRITE_DATA}
3800
FILE_ADD_FILE = $0002; // directory
3801
{$EXTERNALSYM FILE_ADD_FILE}
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}
3810
FILE_READ_EA = $0008; // file & directory
3811
{$EXTERNALSYM FILE_READ_EA}
3813
FILE_WRITE_EA = $0010; // file & directory
3814
{$EXTERNALSYM FILE_WRITE_EA}
3816
FILE_EXECUTE = $0020; // file
3817
{$EXTERNALSYM FILE_EXECUTE}
3818
FILE_TRAVERSE = $0020; // directory
3819
{$EXTERNALSYM FILE_TRAVERSE}
3821
FILE_DELETE_CHILD = $0040; // directory
3822
{$EXTERNALSYM FILE_DELETE_CHILD}
3824
FILE_READ_ATTRIBUTES = $0080; // all
3825
{$EXTERNALSYM FILE_READ_ATTRIBUTES}
3827
FILE_WRITE_ATTRIBUTES = $0100; // all
3828
{$EXTERNALSYM FILE_WRITE_ATTRIBUTES}
3830
FILE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $1FF;
3831
{$EXTERNALSYM FILE_ALL_ACCESS}
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}
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}
3841
FILE_GENERIC_EXECUTE = (STANDARD_RIGHTS_EXECUTE or FILE_READ_ATTRIBUTES or
3842
FILE_EXECUTE or SYNCHRONIZE);
3843
{$EXTERNALSYM FILE_GENERIC_EXECUTE}
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}
3939
// Define the file notification information structure
3943
PFILE_NOTIFY_INFORMATION = ^FILE_NOTIFY_INFORMATION;
3944
{$EXTERNALSYM PFILE_NOTIFY_INFORMATION}
3945
_FILE_NOTIFY_INFORMATION = record
3946
NextEntryOffset: DWORD;
3948
FileNameLength: DWORD;
3949
FileName: array [0..0] of WCHAR;
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;
3958
// Define segement buffer structure for scatter/gather read/write.
3962
PFILE_SEGMENT_ELEMENT = ^FILE_SEGMENT_ELEMENT;
3963
{$EXTERNALSYM PFILE_SEGMENT_ELEMENT}
3964
_FILE_SEGMENT_ELEMENT = record
3966
0: (Buffer: PVOID64);
3967
1: (Alignment: ULONGLONG);
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;
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.
3982
TGenericReparseBuffer = record
3983
DataBuffer: array [0..0] of BYTE;
3986
PREPARSE_GUID_DATA_BUFFER = ^REPARSE_GUID_DATA_BUFFER;
3987
{$EXTERNALSYM PREPARSE_GUID_DATA_BUFFER}
3988
_REPARSE_GUID_DATA_BUFFER = record
3990
ReparseDataLength: WORD;
3993
GenericReparseBuffer: TGenericReparseBuffer;
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;
4002
REPARSE_GUID_DATA_BUFFER_HEADER_SIZE = 24;
4003
{$EXTERNALSYM REPARSE_GUID_DATA_BUFFER_HEADER_SIZE}
4005
// Maximum allowed size of the reparse data.
4009
MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 16 * 1024;
4010
{$EXTERNALSYM MAXIMUM_REPARSE_DATA_BUFFER_SIZE}
4013
// Predefined reparse tags.
4014
// These tags need to avoid conflicting with IO_REMOUNT defined in ntos\inc\io.h
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}
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.
4028
IO_REPARSE_TAG_RESERVED_RANGE = IO_REPARSE_TAG_RESERVED_ONE;
4029
{$EXTERNALSYM IO_REPARSE_TAG_RESERVED_RANGE}
4032
// The reparse tags are a DWORD. The 32 bits are laid out as follows:
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
// +-+-+-+-+-----------------------+-------------------------------+
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.
4045
// R is reserved. Must be zero for non-Microsoft tags.
4047
// N is name surrogate. When set to 1, the file represents another named
4048
// entity in the system.
4050
// The M and N bits are OR-able.
4051
// The following macros check for the M and N bit values:
4055
// Macro to determine whether a reparse point tag corresponds to a tag
4056
// owned by Microsoft.
4059
function IsReparseTagMicrosoft(Tag: ULONG): Boolean;
4060
{$EXTERNALSYM IsReparseTagMicrosoft}
4063
// Macro to determine whether a reparse point tag corresponds to a file
4064
// that is to be displayed with the slow icon overlay.
4067
function IsReparseTagHighLatency(Tag: ULONG): Boolean;
4068
{$EXTERNALSYM IsReparseTagHighLatency}
4071
// Macro to determine whether a reparse point tag is a name surrogate
4074
function IsReparseTagNameSurrogate(Tag: ULONG): Boolean;
4075
{$EXTERNALSYM IsReparseTagNameSurrogate}
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}
4098
_SYSTEM_POWER_STATE = (
4099
PowerSystemUnspecified,
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;
4116
POWER_SYSTEM_MAXIMUM = 7;
4117
{$EXTERNALSYM POWER_SYSTEM_MAXIMUM}
4122
PowerActionReserved,
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;
4135
_DEVICE_POWER_STATE = (
4136
PowerDeviceUnspecified,
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;
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}
4161
EXECUTION_STATE = DWORD;
4162
{$EXTERNALSYM EXECUTION_STATE}
4164
LATENCY_TIME = (LT_DONT_CARE, LT_LOWEST_LATENCY);
4165
{$EXTERNALSYM LATENCY_TIME}
4166
TLatencyTime = LATENCY_TIME;
4168
//-----------------------------------------------------------------------------
4169
// Device Power Information
4170
// Accessable via CM_Get_DevInst_Registry_Property_Ex(CM_DRP_DEVICE_POWER_DATA)
4171
//-----------------------------------------------------------------------------
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}
4194
CM_Power_Data_s = record
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;
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;
4212
POWER_INFORMATION_LEVEL = (
4213
SystemPowerPolicyAc,
4214
SystemPowerPolicyDc,
4215
VerifySystemPolicyAc,
4216
VerifySystemPolicyDc,
4217
SystemPowerCapabilities,
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;
4242
// System power manager capabilities
4245
BATTERY_REPORTING_SCALE = record
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;
4255
// Power Policy Management interfaces
4258
PPOWER_ACTION_POLICY = ^POWER_ACTION_POLICY;
4259
{$EXTERNALSYM PPOWER_ACTION_POLICY}
4260
POWER_ACTION_POLICY = record
4261
Action: POWER_ACTION;
4265
{$EXTERNALSYM POWER_ACTION_POLICY}
4266
TPowerActionPolicy = POWER_ACTION_POLICY;
4267
PPowerActionPolicy = PPOWER_ACTION_POLICY;
4269
// POWER_ACTION_POLICY->Flags:
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}
4287
// POWER_ACTION_POLICY->EventCode flags
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}
4302
// system battery drain policies
4305
PSYSTEM_POWER_LEVEL = ^SYSTEM_POWER_LEVEL;
4306
{$EXTERNALSYM PSYSTEM_POWER_LEVEL}
4307
SYSTEM_POWER_LEVEL = record
4309
Spare: array [0..3 - 1] of BYTE;
4310
BatteryLevel: DWORD;
4311
PowerPolicy: POWER_ACTION_POLICY;
4312
MinSystemState: SYSTEM_POWER_STATE;
4314
{$EXTERNALSYM SYSTEM_POWER_LEVEL}
4315
TSystemPowerLevel = SYSTEM_POWER_LEVEL;
4316
PSystemPowerLevel = PSYSTEM_POWER_LEVEL;
4318
// Discharge policy constants
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}
4329
// Throttling policies
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}
4343
// system power policies
4346
PSYSTEM_POWER_POLICY = ^SYSTEM_POWER_POLICY;
4347
{$EXTERNALSYM PSYSTEM_POWER_POLICY}
4348
_SYSTEM_POWER_POLICY = record
4349
Revision: DWORD; // 1
4351
PowerButton: POWER_ACTION_POLICY;
4352
SleepButton: POWER_ACTION_POLICY;
4353
LidClose: POWER_ACTION_POLICY;
4354
LidOpenWake: SYSTEM_POWER_STATE;
4356
// "system idle" detection
4357
Idle: POWER_ACTION_POLICY;
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
4371
DozeS4Timeout: DWORD;
4373
BroadcastCapacityResolution: DWORD;
4374
DischargePolicy: array [0..NUM_DISCHARGE_POLICIES - 1] of SYSTEM_POWER_LEVEL;
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;
4386
OverThrottled: POWER_ACTION_POLICY;
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;
4394
// processor power policy state
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;
4409
//DWORD AllowDemotion:1;
4410
//DWORD AllowPromotion:1;
4411
//DWORD Reserved:30;
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;
4419
// processor power policy
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;
4430
//DWORD DisableCStates:1;
4431
//DWORD Reserved:31;
4433
// System policy information
4434
// The Array is last, in case it needs to be grown and the structure
4435
// revision incremented.
4437
Policy: array [0..2] of PROCESSOR_POWER_POLICY_INFO;
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;
4445
// administrator power policy overrides
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;
4454
MinVideoTimeout: DWORD;
4455
MaxVideoTimeout: DWORD;
4457
MinSpindownTimeout: DWORD;
4458
MaxSpindownTimeout: DWORD;
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;
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;
4476
SystemS4: BOOLEAN; // hibernate
4477
SystemS5: BOOLEAN; // off
4478
HiberFilePresent: BOOLEAN;
4480
VideoDimPresent: BOOLEAN;
4481
ApmPresent: BOOLEAN;
4482
UpsPresent: BOOLEAN;
4484
ThermalControl: BOOLEAN;
4485
ProcessorThrottle: BOOLEAN;
4486
ProcessorMinThrottle: BYTE;
4487
ProcessorMaxThrottle: BYTE;
4488
spare2: array [0..4 - 1] of BYTE;
4490
DiskSpinDown: BOOLEAN;
4491
spare3: array [0..8 - 1] of BYTE;
4493
SystemBatteriesPresent: BOOLEAN;
4494
BatteriesAreShortTerm: BOOLEAN;
4495
BatteryScale: array [0..3 - 1] of BATTERY_REPORTING_SCALE;
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;
4503
{$EXTERNALSYM SYSTEM_POWER_CAPABILITIES}
4504
TSystemPowerCapabilities = SYSTEM_POWER_CAPABILITIES;
4505
PSystemPowerCapabilities = PSYSTEM_POWER_CAPABILITIES;
4507
PSYSTEM_BATTERY_STATE = ^SYSTEM_BATTERY_STATE;
4508
{$EXTERNALSYM PSYSTEM_BATTERY_STATE}
4509
SYSTEM_BATTERY_STATE = record
4511
BatteryPresent: BOOLEAN;
4513
Discharging: BOOLEAN;
4514
Spare1: array [0..3] of BOOLEAN;
4516
RemainingCapacity: DWORD;
4518
EstimatedTime: DWORD;
4519
DefaultAlert1: DWORD;
4520
DefaultAlert2: DWORD;
4522
{$EXTERNALSYM SYSTEM_BATTERY_STATE}
4523
TSystemBatteryState = SYSTEM_BATTERY_STATE;
4524
PSystemBatteryState = PSYSTEM_BATTERY_STATE;
4530
// #include "pshpack4.h" // 4 byte packing is the default
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}
4544
// #include "pshpack2.h" // 16 bit headers are 2 byte packed
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
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;
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
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;
4621
// Windows VXD header
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
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;
4684
// #include "poppack.h" // Back to 4 byte packing
4687
// File header format.
4690
PIMAGE_FILE_HEADER = ^IMAGE_FILE_HEADER;
4691
{$EXTERNALSYM PIMAGE_FILE_HEADER}
4692
_IMAGE_FILE_HEADER = record
4694
NumberOfSections: WORD;
4695
TimeDateStamp: DWORD;
4696
PointerToSymbolTable: DWORD;
4697
NumberOfSymbols: DWORD;
4698
SizeOfOptionalHeader: WORD;
4699
Characteristics: WORD;
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;
4708
IMAGE_SIZEOF_FILE_HEADER = 20;
4709
{$EXTERNALSYM IMAGE_SIZEOF_FILE_HEADER}
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}
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}
4802
// Directory format.
4806
PIMAGE_DATA_DIRECTORY = ^IMAGE_DATA_DIRECTORY;
4807
{$EXTERNALSYM PIMAGE_DATA_DIRECTORY}
4808
_IMAGE_DATA_DIRECTORY = record
4809
VirtualAddress: DWORD;
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;
4819
IMAGE_NUMBEROF_DIRECTORY_ENTRIES = 16;
4820
{$EXTERNALSYM IMAGE_NUMBEROF_DIRECTORY_ENTRIES}
4823
// Optional header format.
4827
PIMAGE_OPTIONAL_HEADER32 = ^IMAGE_OPTIONAL_HEADER32;
4828
{$EXTERNALSYM PIMAGE_OPTIONAL_HEADER32}
4829
_IMAGE_OPTIONAL_HEADER = record
4834
MajorLinkerVersion: Byte;
4835
MinorLinkerVersion: Byte;
4837
SizeOfInitializedData: DWORD;
4838
SizeOfUninitializedData: DWORD;
4839
AddressOfEntryPoint: DWORD;
4843
// NT additional fields.
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;
4856
SizeOfHeaders: DWORD;
4859
DllCharacteristics: Word;
4860
SizeOfStackReserve: DWORD;
4861
SizeOfStackCommit: DWORD;
4862
SizeOfHeapReserve: DWORD;
4863
SizeOfHeapCommit: DWORD;
4865
NumberOfRvaAndSizes: DWORD;
4866
DataDirectory: array [0..IMAGE_NUMBEROF_DIRECTORY_ENTRIES - 1] of IMAGE_DATA_DIRECTORY;
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;
4874
PIMAGE_ROM_OPTIONAL_HEADER = ^IMAGE_ROM_OPTIONAL_HEADER;
4875
{$EXTERNALSYM PIMAGE_ROM_OPTIONAL_HEADER}
4876
_IMAGE_ROM_OPTIONAL_HEADER = record
4878
MajorLinkerVersion: Byte;
4879
MinorLinkerVersion: Byte;
4881
SizeOfInitializedData: DWORD;
4882
SizeOfUninitializedData: DWORD;
4883
AddressOfEntryPoint: DWORD;
4888
CprMask: array [0..3] of DWORD;
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;
4897
PIMAGE_OPTIONAL_HEADER64 = ^IMAGE_OPTIONAL_HEADER64;
4898
{$EXTERNALSYM PIMAGE_OPTIONAL_HEADER64}
4899
_IMAGE_OPTIONAL_HEADER64 = record
4901
MajorLinkerVersion: Byte;
4902
MinorLinkerVersion: Byte;
4904
SizeOfInitializedData: DWORD;
4905
SizeOfUninitializedData: DWORD;
4906
AddressOfEntryPoint: DWORD;
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;
4919
SizeOfHeaders: DWORD;
4922
DllCharacteristics: Word;
4923
SizeOfStackReserve: Int64;
4924
SizeOfStackCommit: Int64;
4925
SizeOfHeapReserve: Int64;
4926
SizeOfHeapCommit: Int64;
4928
NumberOfRvaAndSizes: DWORD;
4929
DataDirectory: array [0..IMAGE_NUMBEROF_DIRECTORY_ENTRIES - 1] of IMAGE_DATA_DIRECTORY;
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;
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}
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}
4955
IMAGE_OPTIONAL_HEADER = IMAGE_OPTIONAL_HEADER32;
4956
{$EXTERNALSYM IMAGE_OPTIONAL_HEADER}
4957
PIMAGE_OPTIONAL_HEADER = PIMAGE_OPTIONAL_HEADER32;
4958
{$EXTERNALSYM PIMAGE_OPTIONAL_HEADER}
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}
4967
PIMAGE_NT_HEADERS64 = ^IMAGE_NT_HEADERS64;
4968
{$EXTERNALSYM PIMAGE_NT_HEADERS64}
4969
_IMAGE_NT_HEADERS64 = record
4971
FileHeader: IMAGE_FILE_HEADER;
4972
OptionalHeader: IMAGE_OPTIONAL_HEADER64;
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;
4980
PIMAGE_NT_HEADERS32 = ^IMAGE_NT_HEADERS32;
4981
{$EXTERNALSYM PIMAGE_NT_HEADERS32}
4982
_IMAGE_NT_HEADERS = record
4984
FileHeader: IMAGE_FILE_HEADER;
4985
OptionalHeader: IMAGE_OPTIONAL_HEADER32;
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;
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;
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;
5005
IMAGE_NT_HEADERS = IMAGE_NT_HEADERS32;
5006
{$EXTERNALSYM IMAGE_NT_HEADERS}
5007
PIMAGE_NT_HEADERS = PIMAGE_NT_HEADERS32;
5008
{$EXTERNALSYM PIMAGE_NT_HEADERS}
5010
PImageNtHeaders = PIMAGE_NT_HEADERS;
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}
5042
// DllCharacteristics Entries
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}
5055
// 0x1000 // Reserved.
5057
IMAGE_DLLCHARACTERISTICS_WDM_DRIVER = $2000; // Driver uses WDM model
5058
{$EXTERNALSYM IMAGE_DLLCHARACTERISTICS_WDM_DRIVER}
5060
// 0x4000 // Reserved.
5062
IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = $8000;
5063
{$EXTERNALSYM IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE}
5065
// Directory Entries
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}
5082
// IMAGE_DIRECTORY_ENTRY_COPYRIGHT 7 // (X86 usage)
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}
5102
// Non-COFF Object file header
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)
5112
TimeDateStamp: DWORD;
5113
ClassID: CLSID; // Used to invoke CoCreateInstance
5114
SizeOfData: DWORD; // Size of data that follows the header
5116
{$EXTERNALSYM ANON_OBJECT_HEADER}
5117
TAnonObjectHeader = ANON_OBJECT_HEADER;
5120
// Section header format.
5124
IMAGE_SIZEOF_SHORT_NAME = 8;
5125
{$EXTERNALSYM IMAGE_SIZEOF_SHORT_NAME}
5128
TImgSecHdrMisc = record
5130
0: (PhysicalAddress: DWORD);
5131
1: (VirtualSize: DWORD);
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;
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;
5154
// IMAGE_FIRST_SECTION doesn't need 32/64 versions since the file header is the same either way.
5156
function IMAGE_FIRST_SECTION(NtHeader: PImageNtHeaders): PImageSectionHeader;
5157
{$EXTERNALSYM IMAGE_FIRST_SECTION}
5160
IMAGE_SIZEOF_SECTION_HEADER = 40;
5161
{$EXTERNALSYM IMAGE_SIZEOF_SECTION_HEADER}
5164
// Section characteristics.
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.
5171
IMAGE_SCN_TYPE_NO_PAD = $00000008; // Reserved.
5172
{$EXTERNALSYM IMAGE_SCN_TYPE_NO_PAD}
5174
// IMAGE_SCN_TYPE_COPY 0x00000010 // Reserved.
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}
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}
5188
// IMAGE_SCN_TYPE_OVER 0x00000400 // Reserved.
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}
5195
// 0x00002000 // Reserved.
5196
// IMAGE_SCN_MEM_PROTECTED - Obsolete 0x00004000
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}
5205
// IMAGE_SCN_MEM_SYSHEAP - Obsolete 0x00010000
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}
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}
5245
// Unused 0x00F00000
5247
IMAGE_SCN_ALIGN_MASK = $00F00000;
5248
{$EXTERNALSYM IMAGE_SCN_ALIGN_MASK}
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}
5268
// TLS Chaacteristic Flags
5271
IMAGE_SCN_SCALE_INDEX = $00000001; // Tls index is scaled
5272
{$EXTERNALSYM IMAGE_SCN_SCALE_INDEX}
5274
// #include "pshpack2.h" // Symbols, relocs, and linenumbers are 2 byte packed
5281
TImageSymbolN = record
5284
ShortName: array [0..7] of BYTE);
5286
Short: DWORD; // if 0, use LongName
5287
Long: DWORD); // offset into string table
5289
LongName: array [0..1] of DWORD);
5292
PIMAGE_SYMBOL = ^IMAGE_SYMBOL;
5293
{$EXTERNALSYM PIMAGE_SYMBOL}
5294
_IMAGE_SYMBOL = record
5297
SectionNumber: SHORT;
5300
NumberOfAuxSymbols: BYTE;
5302
{$EXTERNALSYM _IMAGE_SYMBOL}
5303
IMAGE_SYMBOL = _IMAGE_SYMBOL;
5304
{$EXTERNALSYM IMAGE_SYMBOL}
5305
TImageSymbol = IMAGE_SYMBOL;
5306
PImageSymbol = PIMAGE_SYMBOL;
5309
IMAGE_SIZEOF_SYMBOL = 18;
5310
{$EXTERNALSYM IMAGE_SIZEOF_SYMBOL}
5315
// Symbols have a section number of the section in which they are
5316
// defined. Otherwise, section numbers have the following meanings:
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}
5329
// Type (fundamental) values.
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}
5368
// Type (derived) values.
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}
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}
5425
IMAGE_SYM_CLASS_FAR_EXTERNAL = $0044;
5426
{$EXTERNALSYM IMAGE_SYM_CLASS_FAR_EXTERNAL}
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}
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}
5444
IMAGE_SYM_CLASS_CLR_TOKEN = $006B;
5445
{$EXTERNALSYM IMAGE_SYM_CLASS_CLR_TOKEN}
5447
// type packing constants
5450
{$EXTERNALSYM N_BTMASK}
5452
{$EXTERNALSYM N_TMASK}
5454
{$EXTERNALSYM N_TMASK1}
5456
{$EXTERNALSYM N_TMASK2}
5458
{$EXTERNALSYM N_BTSHFT}
5460
{$EXTERNALSYM N_TSHIFT}
5466
function BTYPE(x: DWORD): DWORD;
5467
{$EXTERNALSYM BTYPE}
5471
function ISPTR(x: DWORD): Boolean;
5472
{$EXTERNALSYM ISPTR}
5476
function ISFCN(x: DWORD): Boolean;
5477
{$EXTERNALSYM ISFCN}
5481
function ISARY(x: DWORD): Boolean;
5482
{$EXTERNALSYM ISARY}
5484
// Is x a structure, union, or enumeration TAG?
5486
function ISTAG(x: DWORD): Boolean;
5487
{$EXTERNALSYM ISTAG}
5490
// Auxiliary entry format.
5494
TImgAuzSymSymMisc = record
5497
Linenumber: WORD; // declaration line number
5498
Size: WORD); // size of struct, union, or enum
5503
TImgAuzSymSymFcnAry = record
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);
5512
TImgAuxSymSym = record
5513
TagIndex: DWORD; // struct, union, or enum tag index
5514
Misc: TImgAuzSymSymMisc;
5515
FcnAry: TImgAuzSymSymFcnAry;
5516
TvIndex: WORD; // tv index
5519
TImgAuxSymFile = record
5520
Name: array [0..IMAGE_SIZEOF_SYMBOL - 1] of BYTE;
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
5532
PIMAGE_AUX_SYMBOL = ^IMAGE_AUX_SYMBOL;
5533
{$EXTERNALSYM PIMAGE_AUX_SYMBOL}
5534
_IMAGE_AUX_SYMBOL = record
5536
0: (Sym: TImgAuxSymSym);
5537
1: (File_: TImgAuxSymFile);
5538
2: (Section: TImgAuxSymSection);
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;
5547
IMAGE_SIZEOF_AUX_SYMBOL = 18;
5548
{$EXTERNALSYM IMAGE_SIZEOF_AUX_SYMBOL}
5550
IMAGE_AUX_SYMBOL_TYPE_TOKEN_DEF = 1;
5551
{$EXTERNALSYM IMAGE_AUX_SYMBOL_TYPE_TOKEN_DEF}
5554
IMAGE_AUX_SYMBOL_TYPE = DWORD;
5555
{$EXTERNALSYM IMAGE_AUX_SYMBOL_TYPE}
5556
TImageAuxSymbolType = IMAGE_AUX_SYMBOL_TYPE;
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
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;
5571
// Communal selection types.
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}
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}
5598
// Relocation format.
5602
TImgRelocUnion = record
5604
0: (VirtualAddress: DWORD);
5605
1: (RelocCount: DWORD); // Set to the real count when IMAGE_SCN_LNK_NRELOC_OVFL is set
5608
PIMAGE_RELOCATION = ^IMAGE_RELOCATION;
5609
{$EXTERNALSYM PIMAGE_RELOCATION}
5610
_IMAGE_RELOCATION = record
5611
Union: TImgRelocUnion;
5612
SymbolTableIndex: DWORD;
5615
{$EXTERNALSYM _IMAGE_RELOCATION}
5616
IMAGE_RELOCATION = _IMAGE_RELOCATION;
5617
{$EXTERNALSYM IMAGE_RELOCATION}
5618
TImageRelocation = IMAGE_RELOCATION;
5619
PImageRelocation = PIMAGE_RELOCATION;
5622
IMAGE_SIZEOF_RELOCATION = 10;
5623
{$EXTERNALSYM IMAGE_SIZEOF_RELOCATION}
5626
// I386 relocation types.
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}
5653
// MIPS relocation types.
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}
5690
// Alpha Relocation types.
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}
5743
// IBM PowerPC relocation types.
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}
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}
5794
IMAGE_REL_PPC_TYPEMASK = $00FF; // mask to isolate above values in IMAGE_RELOCATION.Type
5795
{$EXTERNALSYM IMAGE_REL_PPC_TYPEMASK}
5797
// Flag bits in IMAGE_RELOCATION.TYPE
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}
5809
// Hitachi SH3 relocation types.
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}
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}
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}
5898
// X86-64 relocations
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}
5937
// IA64 relocation types.
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}
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}
6003
// CEF relocation types.
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}
6022
// clr relocation types.
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}
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}
6071
// Please contact INTEL to get IA64-specific information
6074
#define EXT_IMM64(Value, Address, Size, InstPos, ValPos)
6075
Value |= (((ULONGLONG)((*(Address) >> InstPos) & (((ULONGLONG)1 << Size) - 1))) << ValPos) // Intel-IA64-Filler
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
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}
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}
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}
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}
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}
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}
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}
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}
6156
// Line number format.
6160
TImgLineNoType = record
6162
0: (SymbolTableIndex: DWORD); // Symbol table index of function name if Linenumber is 0.
6163
1: (VirtualAddress: DWORD); // Virtual address of line number.
6166
PIMAGE_LINENUMBER = ^IMAGE_LINENUMBER;
6167
{$EXTERNALSYM PIMAGE_LINENUMBER}
6168
_IMAGE_LINENUMBER = record
6169
Type_: TImgLineNoType;
6170
Linenumber: WORD; // Line number.
6172
{$EXTERNALSYM _IMAGE_LINENUMBER}
6173
IMAGE_LINENUMBER = _IMAGE_LINENUMBER;
6174
{$EXTERNALSYM IMAGE_LINENUMBER}
6175
TImageLineNumber = IMAGE_LINENUMBER;
6176
PImageLineNumber = PIMAGE_LINENUMBER;
6179
IMAGE_SIZEOF_LINENUMBER = 6;
6180
{$EXTERNALSYM IMAGE_SIZEOF_LINENUMBER}
6182
// #include "poppack.h" // Back to 4 byte packing
6185
// Based relocation format.
6189
PIMAGE_BASE_RELOCATION = ^IMAGE_BASE_RELOCATION;
6190
{$EXTERNALSYM PIMAGE_BASE_RELOCATION}
6191
_IMAGE_BASE_RELOCATION = record
6192
VirtualAddress: DWORD;
6194
// WORD TypeOffset[1];
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;
6203
IMAGE_SIZEOF_BASE_RELOCATION = 8;
6204
{$EXTERNALSYM IMAGE_SIZEOF_BASE_RELOCATION}
6207
// Based relocation types.
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}
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}
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}
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.
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;
6266
IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR = 60;
6267
{$EXTERNALSYM IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR}
6278
PIMAGE_EXPORT_DIRECTORY = ^IMAGE_EXPORT_DIRECTORY;
6279
{$EXTERNALSYM PIMAGE_EXPORT_DIRECTORY}
6280
_IMAGE_EXPORT_DIRECTORY = record
6281
Characteristics: DWORD;
6282
TimeDateStamp: 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
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;
6303
PIMAGE_IMPORT_BY_NAME = ^IMAGE_IMPORT_BY_NAME;
6304
{$EXTERNALSYM PIMAGE_IMPORT_BY_NAME}
6305
_IMAGE_IMPORT_BY_NAME = record
6307
Name: array [0..0] of Byte;
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;
6315
// #include "pshpack8.h" // Use align 8 for the 64-bit IAT.
6317
PIMAGE_THUNK_DATA64 = ^IMAGE_THUNK_DATA64;
6318
{$EXTERNALSYM PIMAGE_THUNK_DATA64}
6319
_IMAGE_THUNK_DATA64 = record
6321
0: (ForwarderString: ULONGLONG); // PBYTE
6322
1: (Function_: ULONGLONG); // PDWORD
6323
2: (Ordinal: ULONGLONG);
6324
3: (AddressOfData: ULONGLONG); // PIMAGE_IMPORT_BY_NAME
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;
6332
// #include "poppack.h" // Back to 4 byte packing
6334
PIMAGE_THUNK_DATA32 = ^IMAGE_THUNK_DATA32;
6335
{$EXTERNALSYM PIMAGE_THUNK_DATA32}
6336
_IMAGE_THUNK_DATA32 = record
6338
0: (ForwarderString: DWORD); // PBYTE
6339
1: (Function_: DWORD); // PDWORD
6340
2: (Ordinal: DWORD);
6341
3: (AddressOfData: DWORD); // PIMAGE_IMPORT_BY_NAME
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;
6350
IMAGE_ORDINAL_FLAG64 = ULONGLONG($8000000000000000);
6351
{$EXTERNALSYM IMAGE_ORDINAL_FLAG64}
6352
IMAGE_ORDINAL_FLAG32 = DWORD($80000000);
6353
{$EXTERNALSYM IMAGE_ORDINAL_FLAG32}
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}
6365
// Thread Local Storage
6369
PIMAGE_TLS_CALLBACK = procedure(DllHandle: Pointer; Reason: DWORD; Reserved: Pointer); stdcall;
6370
{$EXTERNALSYM PIMAGE_TLS_CALLBACK}
6371
TImageTlsCallback = PIMAGE_TLS_CALLBACK;
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;
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;
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;
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;
6406
IMAGE_ORDINAL_FLAG = IMAGE_ORDINAL_FLAG32;
6407
{$EXTERNALSYM IMAGE_ORDINAL_FLAG}
6409
function IMAGE_ORDINAL(Ordinal: DWORD): DWORD;
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;
6419
function IMAGE_SNAP_BY_ORDINAL(Ordinal: DWORD): Boolean;
6420
{$EXTERNALSYM IMAGE_SNAP_BY_ORDINAL}
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;
6432
0: (Characteristics: DWORD); // 0 for terminating null import descriptor
6433
1: (OriginalFirstThunk: DWORD); // RVA to original unbound IAT (PIMAGE_THUNK_DATA)
6436
PIMAGE_IMPORT_DESCRIPTOR = ^IMAGE_IMPORT_DESCRIPTOR;
6437
{$EXTERNALSYM PIMAGE_IMPORT_DESCRIPTOR}
6438
_IMAGE_IMPORT_DESCRIPTOR = record
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)
6445
ForwarderChain: DWORD; // -1 if no forwarders
6447
FirstThunk: DWORD; // RVA to IAT (if bound this IAT has actual addresses)
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;
6456
// New format import descriptors pointed to by DataDirectory[ IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT ]
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
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;
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;
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;
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.
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.
6505
PIMAGE_RESOURCE_DIRECTORY = ^IMAGE_RESOURCE_DIRECTORY;
6506
{$EXTERNALSYM PIMAGE_RESOURCE_DIRECTORY}
6507
_IMAGE_RESOURCE_DIRECTORY = record
6508
Characteristics: DWORD;
6509
TimeDateStamp: DWORD;
6512
NumberOfNamedEntries: Word;
6513
NumberOfIdEntries: Word;
6514
// IMAGE_RESOURCE_DIRECTORY_ENTRY DirectoryEntries[];
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;
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}
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.
6547
NameOffset: DWORD); // 0..30: NameOffset; 31: NameIsString
6554
TIRDEDirectory = record
6557
OffsetToData: DWORD);
6559
OffsetToDirectory: DWORD); // 0..30: OffsetToDirectory; 31: DataIsDirectory
6562
PIMAGE_RESOURCE_DIRECTORY_ENTRY = ^IMAGE_RESOURCE_DIRECTORY_ENTRY;
6563
{$EXTERNALSYM PIMAGE_RESOURCE_DIRECTORY_ENTRY}
6564
_IMAGE_RESOURCE_DIRECTORY_ENTRY = record
6566
Directory: TIRDEDirectory;
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;
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.
6584
PIMAGE_RESOURCE_DIRECTORY_STRING = ^IMAGE_RESOURCE_DIRECTORY_STRING;
6585
{$EXTERNALSYM PIMAGE_RESOURCE_DIRECTORY_STRING}
6586
_IMAGE_RESOURCE_DIRECTORY_STRING = record
6588
NameString: array [0..0] of CHAR;
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;
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
6600
NameString: array [0..0] of WCHAR;
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;
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.
6617
PIMAGE_RESOURCE_DATA_ENTRY = ^IMAGE_RESOURCE_DATA_ENTRY;
6618
{$EXTERNALSYM PIMAGE_RESOURCE_DATA_ENTRY}
6619
_IMAGE_RESOURCE_DATA_ENTRY = record
6620
OffsetToData: DWORD;
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;
6632
// Load Configuration Directory Entry
6636
PIMAGE_LOAD_CONFIG_DIRECTORY32 = ^IMAGE_LOAD_CONFIG_DIRECTORY32;
6637
{$EXTERNALSYM PIMAGE_LOAD_CONFIG_DIRECTORY32}
6638
IMAGE_LOAD_CONFIG_DIRECTORY32 = record
6640
TimeDateStamp: DWORD;
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;
6655
EditList: DWORD; // VA
6656
SecurityCookie: DWORD; // VA
6657
SEHandlerTable: DWORD; // VA
6658
SEHandlerCount: DWORD;
6660
{$EXTERNALSYM IMAGE_LOAD_CONFIG_DIRECTORY32}
6661
TImageLoadConfigDirectory32 = IMAGE_LOAD_CONFIG_DIRECTORY32;
6662
PImageLoadConfigDirectory32 = PIMAGE_LOAD_CONFIG_DIRECTORY32;
6664
PIMAGE_LOAD_CONFIG_DIRECTORY64 = ^IMAGE_LOAD_CONFIG_DIRECTORY64;
6665
{$EXTERNALSYM PIMAGE_LOAD_CONFIG_DIRECTORY64}
6666
IMAGE_LOAD_CONFIG_DIRECTORY64 = record
6668
TimeDateStamp: DWORD;
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;
6683
EditList: ULONGLONG; // VA
6684
SecurityCookie: ULONGLONG; // VA
6685
SEHandlerTable: ULONGLONG; // VA
6686
SEHandlerCount: ULONGLONG;
6688
{$EXTERNALSYM IMAGE_LOAD_CONFIG_DIRECTORY64}
6689
TImageLoadConfigDirectory64 = IMAGE_LOAD_CONFIG_DIRECTORY64;
6690
PImageLoadConfigDirectory64 = PIMAGE_LOAD_CONFIG_DIRECTORY64;
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;
6700
// WIN CE Exception table format
6704
// Function table entry format. Function table is pointed to by the
6705
// IMAGE_DIRECTORY_ENTRY_EXCEPTION directory entry.
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
6714
//DWORD PrologLen : 8;
6715
//DWORD FuncLen : 22;
6716
//DWORD ThirtyTwoBit : 1;
6717
//DWORD ExceptionFlag : 1;
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;
6730
PIMAGE_DEBUG_DIRECTORY = ^IMAGE_DEBUG_DIRECTORY;
6731
{$EXTERNALSYM PIMAGE_DEBUG_DIRECTORY}
6732
_IMAGE_DEBUG_DIRECTORY = record
6733
Characteristics: DWORD;
6734
TimeDateStamp: DWORD;
6739
AddressOfRawData: DWORD;
6740
PointerToRawData: DWORD;
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;
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}
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;
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;
6795
{$EXTERNALSYM FRAME_FPO}
6797
{$EXTERNALSYM FRAME_TRAP}
6799
{$EXTERNALSYM FRAME_TSS}
6801
{$EXTERNALSYM FRAME_NONFPO}
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
6811
PFPO_DATA = ^FPO_DATA;
6812
{$EXTERNALSYM PFPO_DATA}
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
6820
{$EXTERNALSYM _FPO_DATA}
6821
FPO_DATA = _FPO_DATA;
6822
{$EXTERNALSYM FPO_DATA}
6823
TFpoData = FPO_DATA;
6824
PFpoData = PFPO_DATA;
6827
SIZEOF_RFPO_DATA = 16;
6828
{$EXTERNALSYM SIZEOF_RFPO_DATA}
6830
IMAGE_DEBUG_MISC_EXENAME = 1;
6831
{$EXTERNALSYM IMAGE_DEBUG_MISC_EXENAME}
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
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;
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.
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;
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;
6868
PIMAGE_FUNCTION_ENTRY64 = ^IMAGE_FUNCTION_ENTRY64;
6869
{$EXTERNALSYM PIMAGE_FUNCTION_ENTRY64}
6870
_IMAGE_FUNCTION_ENTRY64 = record
6871
StartingAddress: ULONGLONG;
6872
EndingAddress: ULONGLONG;
6874
0: (EndOfPrologue: ULONGLONG);
6875
1: (UnwindInfoAddress: ULONGLONG);
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;
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
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.
6903
PIMAGE_SEPARATE_DEBUG_HEADER = ^IMAGE_SEPARATE_DEBUG_HEADER;
6904
{$EXTERNALSYM PIMAGE_SEPARATE_DEBUG_HEADER}
6905
_IMAGE_SEPARATE_DEBUG_HEADER = record
6909
Characteristics: Word;
6910
TimeDateStamp: DWORD;
6914
NumberOfSections: DWORD;
6915
ExportedNamesSize: DWORD;
6916
DebugDirectorySize: DWORD;
6917
SectionAlignment: DWORD;
6918
Reserved: array [0..1] of DWORD;
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;
6926
_NON_PAGED_DEBUG_INFO = record
6931
Characteristics: WORD;
6932
TimeDateStamp: DWORD;
6935
ImageBase: ULONGLONG;
6936
//DebugDirectorySize
6937
//IMAGE_DEBUG_DIRECTORY
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}
6946
IMAGE_SEPARATE_DEBUG_SIGNATURE = $4944;
6947
{$EXTERNALSYM IMAGE_SEPARATE_DEBUG_SIGNATURE}
6948
NON_PAGED_DEBUG_SIGNATURE = $494E;
6949
{$EXTERNALSYM NON_PAGED_DEBUG_SIGNATURE}
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}
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.
6961
// NOTE: There may be quadwords of 0 sprinkled around and must be skipped.
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
6972
PIMAGE_ARCHITECTURE_HEADER = ^IMAGE_ARCHITECTURE_HEADER;
6973
{$EXTERNALSYM PIMAGE_ARCHITECTURE_HEADER}
6974
_ImageArchitectureHeader = record
6976
FirstEntryRVA: DWORD; // RVA into .arch section to array of ARCHITECTURE_ENTRY's
6978
{$EXTERNALSYM _ImageArchitectureHeader}
6979
IMAGE_ARCHITECTURE_HEADER = _ImageArchitectureHeader;
6980
{$EXTERNALSYM IMAGE_ARCHITECTURE_HEADER}
6981
TImageArchitectureHeader = IMAGE_ARCHITECTURE_HEADER;
6982
PImageArchitectureHeader = PIMAGE_ARCHITECTURE_HEADER;
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)
6990
{$EXTERNALSYM _ImageArchitectureEntry}
6991
IMAGE_ARCHITECTURE_ENTRY = _ImageArchitectureEntry;
6992
{$EXTERNALSYM IMAGE_ARCHITECTURE_ENTRY}
6993
TImageArchitectureEntry = IMAGE_ARCHITECTURE_ENTRY;
6994
PImageArchitectureEntry = PIMAGE_ARCHITECTURE_ENTRY;
6996
// #include "poppack.h" // Back to the initial value
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.
7004
IMPORT_OBJECT_HDR_SIG2 = $ffff;
7005
{$EXTERNALSYM IMPORT_OBJECT_HDR_SIG2}
7008
IOHFLAGS_TYPE = $0003; // IMPORT_TYPE
7009
IAHFLAGS_NAMETYPE = $001C; // IMPORT_NAME_TYPE
7010
IAHFLAGS_RESERVED = $FFE0; // Reserved. Must be zero.
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.
7019
TimeDateStamp: DWORD; // Time/date stamp
7020
SizeOfData: DWORD; // particularly useful for incremental links
7021
OrdinalOrHint: record
7023
0: (Ordinal: WORD); // if grf & IMPORT_OBJECT_ORDINAL
7027
//WORD Type : 2; // IMPORT_TYPE
7028
//WORD NameType : 3; // IMPORT_NAME_TYPE
7029
//WORD Reserved : 11; // Reserved. Must be zero.
7031
{$EXTERNALSYM IMPORT_OBJECT_HEADER}
7032
TImportObjectHeader = IMPORT_OBJECT_HEADER;
7034
IMPORT_OBJECT_TYPE = (IMPORT_OBJECT_CODE, IMPORT_OBJECT_DATA, IMPORT_OBJECT_CONST);
7035
{$EXTERNALSYM IMPORT_OBJECT_TYPE}
7036
TImportObjectType = IMPORT_OBJECT_TYPE;
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;
7047
ReplacesCorHdrNumericDefines = DWORD;
7048
{$EXTERNALSYM ReplacesCorHdrNumericDefines}
7052
// COM+ Header entry point flags.
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}
7065
// Version flags for image.
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}
7078
// Maximum size of a NativeType descriptor.
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}
7085
// #defines for the MIH FLAGS
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}
7094
// V-table constants
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}
7107
IMAGE_COR_EATJ_THUNK_SIZE = 32; // Size of a jump thunk reserved range.
7108
{$EXTERNALSYM IMAGE_COR_EATJ_THUNK_SIZE}
7111
// Change to unlimited name lengths.
7113
MAX_CLASS_NAME = 1024;
7114
{$EXTERNALSYM MAX_CLASS_NAME}
7115
MAX_PACKAGE_NAME = 1024;
7116
{$EXTERNALSYM MAX_PACKAGE_NAME}
7118
// COM+ 2.0 header structure.
7121
IMAGE_COR20_HEADER = record
7123
// Header versioning
7126
MajorRuntimeVersion: WORD;
7127
MinorRuntimeVersion: WORD;
7129
// Symbol table and startup information
7131
MetaData: IMAGE_DATA_DIRECTORY;
7133
EntryPointToken: DWORD;
7135
// Binding information
7137
Resources: IMAGE_DATA_DIRECTORY;
7138
StrongNameSignature: IMAGE_DATA_DIRECTORY;
7140
// Regular fixup and binding information
7142
CodeManagerTable: IMAGE_DATA_DIRECTORY;
7143
VTableFixups: IMAGE_DATA_DIRECTORY;
7144
ExportAddressTableJumps: IMAGE_DATA_DIRECTORY;
7146
// Precompiled image info (internal use only - set to zero)
7148
ManagedNativeHeader: IMAGE_DATA_DIRECTORY;
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;
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;
7171
_SLIST_HEADER = record
7174
Alignment: ULONGLONG);
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;
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}
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}
7229
function HEAP_MAKE_TAG_FLAGS(b, o: DWORD): DWORD;
7230
{$EXTERNALSYM HEAP_MAKE_TAG_FLAGS}
7232
procedure RtlCaptureContext(ContextRecord: PCONTEXT); stdcall;
7233
{$EXTERNALSYM RtlCaptureContext}
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}
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}
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}
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}
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}
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}
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}
7287
function RtlCompareMemory(const Source1, Source2: Pointer; Length: SIZE_T): SIZE_T; stdcall;
7288
{$EXTERNALSYM RtlCompareMemory}
7291
PMESSAGE_RESOURCE_ENTRY = ^MESSAGE_RESOURCE_ENTRY;
7292
{$EXTERNALSYM PMESSAGE_RESOURCE_ENTRY}
7293
_MESSAGE_RESOURCE_ENTRY = record
7296
Text: array [0..0] of Byte;
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;
7305
MESSAGE_RESOURCE_UNICODE = $0001;
7306
{$EXTERNALSYM MESSAGE_RESOURCE_UNICODE}
7309
PMESSAGE_RESOURCE_BLOCK = ^MESSAGE_RESOURCE_BLOCK;
7310
{$EXTERNALSYM PMESSAGE_RESOURCE_BLOCK}
7311
_MESSAGE_RESOURCE_BLOCK = record
7314
OffsetToEntries: DWORD;
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;
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;
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;
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
7344
{$EXTERNALSYM _OSVERSIONINFOA}
7345
OSVERSIONINFOA = _OSVERSIONINFOA;
7346
{$EXTERNALSYM OSVERSIONINFOA}
7347
TOsVersionInfoA = OSVERSIONINFOA;
7348
POsVersionInfoA = LPOSVERSIONINFOA;
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
7360
{$EXTERNALSYM _OSVERSIONINFOW}
7361
OSVERSIONINFOW = _OSVERSIONINFOW;
7362
{$EXTERNALSYM OSVERSIONINFOW}
7363
TOsVersionInfoW = OSVERSIONINFOW;
7364
POsVersionInfoW = LPOSVERSIONINFOW;
7367
OSVERSIONINFO = OSVERSIONINFOW;
7368
{$EXTERNALSYM OSVERSIONINFO}
7369
POSVERSIONINFO = POSVERSIONINFOW;
7370
{$EXTERNALSYM POSVERSIONINFO}
7371
LPOSVERSIONINFO = LPOSVERSIONINFOW;
7372
{$EXTERNALSYM LPOSVERSIONINFO}
7373
TOSVersionInfo = TOSVersionInfoW;
7375
OSVERSIONINFO = OSVERSIONINFOA;
7376
{$EXTERNALSYM OSVERSIONINFO}
7377
POSVERSIONINFO = POSVERSIONINFOA;
7378
{$EXTERNALSYM POSVERSIONINFO}
7379
LPOSVERSIONINFO = LPOSVERSIONINFOA;
7380
{$EXTERNALSYM LPOSVERSIONINFO}
7381
TOSVersionInfo = TOSVersionInfoA;
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;
7400
{$EXTERNALSYM _OSVERSIONINFOEXA}
7401
OSVERSIONINFOEXA = _OSVERSIONINFOEXA;
7402
{$EXTERNALSYM OSVERSIONINFOEXA}
7403
LPOSVERSIONINFOEXA = ^OSVERSIONINFOEXA;
7404
{$EXTERNALSYM LPOSVERSIONINFOEXA}
7405
TOSVersionInfoExA = _OSVERSIONINFOEXA;
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;
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;
7434
OSVERSIONINFOEX = OSVERSIONINFOEXW;
7435
{$EXTERNALSYM OSVERSIONINFOEX}
7436
POSVERSIONINFOEX = POSVERSIONINFOEXW;
7437
{$EXTERNALSYM POSVERSIONINFOEX}
7438
LPOSVERSIONINFOEX = LPOSVERSIONINFOEXW;
7439
{$EXTERNALSYM LPOSVERSIONINFOEX}
7440
TOSVersionInfoEx = TOSVersionInfoExW;
7442
OSVERSIONINFOEX = OSVERSIONINFOEXA;
7443
{$EXTERNALSYM OSVERSIONINFOEX}
7444
POSVERSIONINFOEX = POSVERSIONINFOEXA;
7445
{$EXTERNALSYM POSVERSIONINFOEX}
7446
LPOSVERSIONINFOEX = LPOSVERSIONINFOEXA;
7447
{$EXTERNALSYM LPOSVERSIONINFOEX}
7448
TOSVersionInfoEx = TOSVersionInfoExA;
7452
// RtlVerifyVersionInfo() conditions
7457
{$EXTERNALSYM VER_EQUAL}
7459
{$EXTERNALSYM VER_GREATER}
7460
VER_GREATER_EQUAL = 3;
7461
{$EXTERNALSYM VER_GREATER_EQUAL}
7463
{$EXTERNALSYM VER_LESS}
7465
{$EXTERNALSYM VER_LESS_EQUAL}
7467
{$EXTERNALSYM VER_AND}
7469
{$EXTERNALSYM VER_OR}
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}
7477
// RtlVerifyVersionInfo() type mask bits
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}
7498
// RtlVerifyVersionInfo() os product type values
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}
7509
// dwPlatformId defines:
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}
7521
// VerifyVersionInfo() macro to set the condition mask
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_)))
7528
procedure VER_SET_CONDITION(var Mask: DWORDLONG; TypeBitmask, ConditionMask: ULONG);
7529
{$EXTERNALSYM VER_SET_CONDITION}
7531
function VerSetConditionMask(ConditionMask: ULONGLONG; TypeMask: DWORD;
7532
Condition: BYTE): ULONGLONG; stdcall;
7533
{$EXTERNALSYM VerSetConditionMask}
7536
PRTL_CRITICAL_SECTION_DEBUG = ^RTL_CRITICAL_SECTION_DEBUG;
7537
{$EXTERNALSYM PRTL_CRITICAL_SECTION_DEBUG}
7538
_RTL_CRITICAL_SECTION_DEBUG = record
7540
CreatorBackTraceIndex: WORD;
7541
CriticalSection: PRTL_CRITICAL_SECTION_DEBUG;
7542
ProcessLocksList: LIST_ENTRY;
7544
ContentionCount: DWORD;
7545
Spare: array [0..1] of DWORD;
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;
7560
RTL_CRITSECT_TYPE = 0;
7561
{$EXTERNALSYM RTL_CRITSECT_TYPE}
7562
RTL_RESOURCE_TYPE = 1;
7563
{$EXTERNALSYM RTL_RESOURCE_TYPE}
7566
PRTL_CRITICAL_SECTION = ^RTL_CRITICAL_SECTION;
7567
{$EXTERNALSYM PRTL_CRITICAL_SECTION}
7568
_RTL_CRITICAL_SECTION = record
7569
DebugInfo: PRTL_CRITICAL_SECTION_DEBUG;
7572
// The following three fields control entering and exiting the critical
7573
// section for the resource
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
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;
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}
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}
7596
RTL_VERIFIER_NTDLLHEAPFREE_CALLBACK = procedure(AllocationBase: PVOID; AllocationSize: SIZE_T); stdcall;
7597
{$EXTERNALSYM RTL_VERIFIER_NTDLLHEAPFREE_CALLBACK}
7599
PRTL_VERIFIER_THUNK_DESCRIPTOR = ^RTL_VERIFIER_THUNK_DESCRIPTOR;
7600
{$EXTERNALSYM PRTL_VERIFIER_THUNK_DESCRIPTOR}
7601
_RTL_VERIFIER_THUNK_DESCRIPTOR = record
7603
ThunkOldAddress: PVOID;
7604
ThunkNewAddress: PVOID;
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;
7612
PRTL_VERIFIER_DLL_DESCRIPTOR = ^RTL_VERIFIER_DLL_DESCRIPTOR;
7613
{$EXTERNALSYM PRTL_VERIFIER_DLL_DESCRIPTOR}
7614
_RTL_VERIFIER_DLL_DESCRIPTOR = record
7618
DllThunks: PRTL_VERIFIER_THUNK_DESCRIPTOR;
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;
7626
PRTL_VERIFIER_PROVIDER_DESCRIPTOR = ^RTL_VERIFIER_PROVIDER_DESCRIPTOR;
7627
{$EXTERNALSYM PRTL_VERIFIER_PROVIDER_DESCRIPTOR}
7628
_RTL_VERIFIER_PROVIDER_DESCRIPTOR = record
7630
// Filled by verifier provider DLL
7633
ProviderDlls: PRTL_VERIFIER_DLL_DESCRIPTOR;
7634
ProviderDllLoadCallback: RTL_VERIFIER_DLL_LOAD_CALLBACK;
7635
ProviderDllUnloadCallback: RTL_VERIFIER_DLL_UNLOAD_CALLBACK;
7637
// Filled by verifier engine
7639
VerifierImage: PWSTR;
7640
VerifierFlags: DWORD;
7641
VerifierDebug: DWORD;
7643
RtlpGetStackTraceAddress: PVOID;
7644
RtlpDebugPageHeapCreate: PVOID;
7645
RtlpDebugPageHeapDestroy: PVOID;
7648
// Filled by verifier provider DLL
7651
ProviderNtdllHeapFreeCallback: RTL_VERIFIER_NTDLLHEAPFREE_CALLBACK;
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;
7660
// Application verifier standard flags
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}
7706
// Application verifier standard stop codes
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}
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}
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}
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}
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}
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}
7817
APPLICATION_VERIFIER_RPC_ERROR = $0500;
7818
{$EXTERNALSYM APPLICATION_VERIFIER_RPC_ERROR}
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}
7838
#define VERIFIER_STOP(Code, Msg, P1, S1, P2, S2, P3, S3, P4, S4) { \
7839
RtlApplicationVerifierStop ((Code), \
7841
(ULONG_PTR)(P1),(S1), \
7842
(ULONG_PTR)(P2),(S2), \
7843
(ULONG_PTR)(P3),(S3), \
7844
(ULONG_PTR)(P4),(S4)); \
7848
RtlApplicationVerifierStop (
7851
ULONG_PTR Param1, PCHAR Description1,
7852
ULONG_PTR Param2, PCHAR Description2,
7853
ULONG_PTR Param3, PCHAR Description3,
7854
ULONG_PTR Param4, PCHAR Description4
7859
PVECTORED_EXCEPTION_HANDLER = function(ExceptionInfo: PEXCEPTION_POINTERS): LONG; stdcall;
7860
{$EXTERNALSYM PVECTORED_EXCEPTION_HANDLER}
7861
PVectoredExceptionHandler = PVECTORED_EXCEPTION_HANDLER;
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}
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;
7888
RtlSetHeapInformation (
7889
IN PVOID HeapHandle,
7890
IN HEAP_INFORMATION_CLASS HeapInformationClass,
7891
IN PVOID HeapInformation OPTIONAL,
7892
IN SIZE_T HeapInformationLength OPTIONAL
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
7905
// Multiple alloc-free APIS
7910
RtlMultipleAllocateHeap (
7911
IN PVOID HeapHandle,
7920
RtlMultipleFreeHeap (
7921
IN PVOID HeapHandle,
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}
7950
function WT_SET_MAX_THREADPOOL_THREADS(var Flags: DWORD; Limit: DWORD): DWORD;
7951
{$EXTERNALSYM WT_SET_MAX_THREADPOOL_THREADS}
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}
7962
WT_EXECUTEINLONGTHREAD = $00000010;
7963
{$EXTERNALSYM WT_EXECUTEINLONGTHREAD}
7964
WT_EXECUTEDELETEWAIT = $00000008;
7965
{$EXTERNALSYM WT_EXECUTEDELETEWAIT}
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;
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}
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;
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;
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}
8010
PASSEMBLY_FILE_DETAILED_INFORMATION = ^ASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION;
8011
{$EXTERNALSYM PASSEMBLY_FILE_DETAILED_INFORMATION}
8012
_ASSEMBLY_FILE_DETAILED_INFORMATION = record
8014
ulFilenameLength: DWORD;
8015
ulPathLength: DWORD;
8016
lpFileName: LPCWSTR;
8017
lpFilePath: LPCWSTR;
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;
8028
// compatibility with old names
8029
// The new names use "file" consistently.
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;
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
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;
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;
8072
PACTIVATION_CONTEXT_DETAILED_INFORMATION = ^ACTIVATION_CONTEXT_DETAILED_INFORMATION;
8073
{$EXTERNALSYM PACTIVATION_CONTEXT_DETAILED_INFORMATION}
8074
_ACTIVATION_CONTEXT_DETAILED_INFORMATION = record
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;
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;
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}
8107
// Defines for the READ flags for Eventlogging
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}
8120
// The types of events that can be logged.
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}
8137
// Defines for the WRITE flags used by Auditing for paired events
8138
// These are not implemented in Product 1
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}
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.
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.
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
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;
8179
DataOffset: DWORD; // Offset from beginning of record
8183
// WCHAR SourceName[]
8184
// WCHAR Computername[]
8192
{$EXTERNALSYM _EVENTLOGRECORD}
8193
EVENTLOGRECORD = _EVENTLOGRECORD;
8194
{$EXTERNALSYM EVENTLOGRECORD}
8195
TEventlogrecord = EVENTLOGRECORD;
8198
MAXLOGICALLOGNAMESIZE = 256;
8199
{$EXTERNALSYM MAXLOGICALLOGNAMESIZE}
8202
PEventsForLogFile = ^EVENTSFORLOGFILE;
8203
_EVENTSFORLOGFILE = record
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;
8209
{$EXTERNALSYM _EVENTSFORLOGFILE}
8210
EVENTSFORLOGFILE = _EVENTSFORLOGFILE;
8211
{$EXTERNALSYM EVENTSFORLOGFILE}
8212
TEventsForLogFile = EVENTSFORLOGFILE;
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
8220
{$EXTERNALSYM _PACKEDEVENTINFO}
8221
PACKEDEVENTINFO = _PACKEDEVENTINFO;
8222
{$EXTERNALSYM PACKEDEVENTINFO}
8223
TPackedEventInfo = PACKEDEVENTINFO;
8226
// Registry Specific Access Rights.
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}
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}
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}
8253
KEY_WRITE = STANDARD_RIGHTS_WRITE or KEY_SET_VALUE or KEY_CREATE_SUB_KEY and
8255
{$EXTERNALSYM KEY_WRITE}
8257
KEY_EXECUTE = KEY_READ and (not SYNCHRONIZE);
8258
{$EXTERNALSYM KEY_EXECUTE}
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}
8266
// Open/Create Options
8269
REG_OPTION_RESERVED = $00000000; // Parameter is reserved
8270
{$EXTERNALSYM REG_OPTION_RESERVED}
8272
REG_OPTION_NON_VOLATILE = $00000000; // Key is preserved when system is rebooted
8273
{$EXTERNALSYM REG_OPTION_NON_VOLATILE}
8275
REG_OPTION_VOLATILE = $00000001; // Key is not preserved when system is rebooted
8276
{$EXTERNALSYM REG_OPTION_VOLATILE}
8278
REG_OPTION_CREATE_LINK = $00000002; // Created key is a symbolic link
8279
{$EXTERNALSYM REG_OPTION_CREATE_LINK}
8281
REG_OPTION_BACKUP_RESTORE = $00000004; // open for backup or restore
8282
{$EXTERNALSYM REG_OPTION_BACKUP_RESTORE}
8283
// special access rules
8284
// privilege required
8286
REG_OPTION_OPEN_LINK = $00000008; // Open symbolic link
8287
{$EXTERNALSYM REG_OPTION_OPEN_LINK}
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}
8295
// Key creation/open disposition
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}
8304
// hive format to be used by Reg(Nt)SaveKeyEx
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}
8315
// Key restore flags
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}
8331
REG_FORCE_UNLOAD = 1;
8332
{$EXTERNALSYM REG_FORCE_UNLOAD}
8334
// end_ntddk end_wdm end_nthal
8337
// Notify filter values
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}
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}
8355
// Predefined Value Types.
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}
8389
// Service Types (Bit Mask)
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}
8401
SERVICE_DRIVER = SERVICE_KERNEL_DRIVER or SERVICE_FILE_SYSTEM_DRIVER or
8402
SERVICE_RECOGNIZER_DRIVER;
8403
{$EXTERNALSYM SERVICE_DRIVER}
8405
SERVICE_WIN32_OWN_PROCESS = $00000010;
8406
{$EXTERNALSYM SERVICE_WIN32_OWN_PROCESS}
8407
SERVICE_WIN32_SHARE_PROCESS = $00000020;
8408
{$EXTERNALSYM SERVICE_WIN32_SHARE_PROCESS}
8410
SERVICE_WIN32 = SERVICE_WIN32_OWN_PROCESS or SERVICE_WIN32_SHARE_PROCESS;
8411
{$EXTERNALSYM SERVICE_WIN32}
8413
SERVICE_INTERACTIVE_PROCESS = $00000100;
8414
{$EXTERNALSYM SERVICE_INTERACTIVE_PROCESS}
8416
SERVICE_TYPE_ALL = SERVICE_WIN32 or SERVICE_ADAPTER or SERVICE_DRIVER or
8417
SERVICE_INTERACTIVE_PROCESS;
8418
{$EXTERNALSYM SERVICE_TYPE_ALL}
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}
8436
// Error control type
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}
8449
// Define the registry driver node enumerations
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;
8465
BootLoad = SERVICE_BOOT_START;
8466
SystemLoad = SERVICE_SYSTEM_START;
8467
AutoLoad = SERVICE_AUTO_START;
8468
DemandLoad = SERVICE_DEMAND_START;
8469
DisableLoad = SERVICE_DISABLED;
8471
//SERVICE_ERROR_TYPE
8473
IgnoreError = SERVICE_ERROR_IGNORE;
8474
NormalError = SERVICE_ERROR_NORMAL;
8475
SevereError = SERVICE_ERROR_SEVERE;
8476
CriticalError = SERVICE_ERROR_CRITICAL;
8479
// IOCTL_TAPE_ERASE definitions
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;
8494
TAPE_ERASE_SHORT = 0;
8495
{$EXTERNALSYM TAPE_ERASE_SHORT}
8496
TAPE_ERASE_LONG = 1;
8497
{$EXTERNALSYM TAPE_ERASE_LONG}
8500
PTAPE_ERASE = ^TAPE_ERASE;
8501
{$EXTERNALSYM PTAPE_ERASE}
8502
_TAPE_ERASE = record
8504
Immediate: ByteBool;
8506
{$EXTERNALSYM _TAPE_ERASE}
8507
TAPE_ERASE = _TAPE_ERASE;
8508
{$EXTERNALSYM TAPE_ERASE}
8509
TTapeErase = TAPE_ERASE;
8510
PTapeErase = PTAPE_ERASE;
8513
// IOCTL_TAPE_PREPARE definitions
8518
{$EXTERNALSYM TAPE_LOAD}
8520
{$EXTERNALSYM TAPE_UNLOAD}
8522
{$EXTERNALSYM TAPE_TENSION}
8524
{$EXTERNALSYM TAPE_LOCK}
8526
{$EXTERNALSYM TAPE_UNLOCK}
8528
{$EXTERNALSYM TAPE_FORMAT}
8531
PTAPE_PREPARE = ^TAPE_PREPARE;
8532
{$EXTERNALSYM PTAPE_PREPARE}
8533
_TAPE_PREPARE = record
8535
Immediate: ByteBool;
8537
{$EXTERNALSYM _TAPE_PREPARE}
8538
TAPE_PREPARE = _TAPE_PREPARE;
8539
{$EXTERNALSYM TAPE_PREPARE}
8540
TTapePrepare = TAPE_PREPARE;
8541
PTapePrepare = PTAPE_PREPARE;
8544
// IOCTL_TAPE_WRITE_MARKS definitions
8549
{$EXTERNALSYM TAPE_SETMARKS}
8551
{$EXTERNALSYM TAPE_FILEMARKS}
8552
TAPE_SHORT_FILEMARKS = 2;
8553
{$EXTERNALSYM TAPE_SHORT_FILEMARKS}
8554
TAPE_LONG_FILEMARKS = 3;
8555
{$EXTERNALSYM TAPE_LONG_FILEMARKS}
8558
PTAPE_WRITE_MARKS = ^TAPE_WRITE_MARKS;
8559
{$EXTERNALSYM PTAPE_WRITE_MARKS}
8560
_TAPE_WRITE_MARKS = record
8563
Immediate: ByteBool;
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;
8572
// IOCTL_TAPE_GET_POSITION definitions
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}
8584
PTAPE_GET_POSITION = ^TAPE_GET_POSITION;
8585
{$EXTERNALSYM PTAPE_GET_POSITION}
8586
_TAPE_GET_POSITION = record
8589
Offset: LARGE_INTEGER;
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;
8598
// IOCTL_TAPE_SET_POSITION definitions
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}
8624
PTAPE_SET_POSITION = ^TAPE_SET_POSITION;
8625
{$EXTERNALSYM PTAPE_SET_POSITION}
8626
_TAPE_SET_POSITION = record
8629
Offset: LARGE_INTEGER;
8630
Immediate: ByteBool;
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;
8639
// IOCTL_TAPE_GET_DRIVE_PARAMS definitions
8643
// Definitions for FeaturesLow parameter
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}
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}
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}
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}
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}
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}
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}
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
8706
// Definitions for FeaturesHigh parameter
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}
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}
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}
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}
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}
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}
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}
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}
8782
PTAPE_GET_DRIVE_PARAMETERS = ^TAPE_GET_DRIVE_PARAMETERS;
8783
{$EXTERNALSYM PTAPE_GET_DRIVE_PARAMETERS}
8784
_TAPE_GET_DRIVE_PARAMETERS = record
8786
Compression: ByteBool;
8787
DataPadding: ByteBool;
8788
ReportSetmarks: ByteBool;
8789
DefaultBlockSize: DWORD;
8790
MaximumBlockSize: DWORD;
8791
MinimumBlockSize: DWORD;
8792
MaximumPartitionCount: DWORD;
8794
FeaturesHigh: DWORD;
8795
EOTWarningZoneSize: DWORD;
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;
8804
// IOCTL_TAPE_SET_DRIVE_PARAMETERS definitions
8807
PTAPE_SET_DRIVE_PARAMETERS = ^TAPE_SET_DRIVE_PARAMETERS;
8808
{$EXTERNALSYM PTAPE_SET_DRIVE_PARAMETERS}
8809
_TAPE_SET_DRIVE_PARAMETERS = record
8811
Compression: ByteBool;
8812
DataPadding: ByteBool;
8813
ReportSetmarks: ByteBool;
8814
EOTWarningZoneSize: DWORD;
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;
8823
// IOCTL_TAPE_GET_MEDIA_PARAMETERS definitions
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;
8832
PartitionCount: DWORD;
8833
WriteProtected: ByteBool;
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;
8842
// IOCTL_TAPE_SET_MEDIA_PARAMETERS definitions
8845
PTAPE_SET_MEDIA_PARAMETERS = ^TAPE_SET_MEDIA_PARAMETERS;
8846
{$EXTERNALSYM PTAPE_SET_MEDIA_PARAMETERS}
8847
_TAPE_SET_MEDIA_PARAMETERS = record
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;
8857
// IOCTL_TAPE_CREATE_PARTITION definitions
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}
8869
PTAPE_CREATE_PARTITION = ^TAPE_CREATE_PARTITION;
8870
{$EXTERNALSYM PTAPE_CREATE_PARTITION}
8871
_TAPE_CREATE_PARTITION = record
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;
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}
8899
_TAPE_WMI_OPERATIONS = record
8901
DataBufferSize: DWORD;
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;
8913
// Type of drive errors
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;
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}
8948
{$ENDIF JWA_INTERFACESECTION}
8950
{$IFNDEF JWA_INCLUDEMODE}
8957
{$ENDIF !JWA_INCLUDEMODE}
8959
{$IFDEF JWA_IMPLEMENTATIONSECTION}
8961
function WT_SET_MAX_THREADPOOL_THREADS(var Flags: DWORD; Limit: DWORD): DWORD;
8963
Flags := Flags or (Limit shl 16);
8967
function VALID_IMPERSONATION_LEVEL(L: TSecurityImpersonationLevel): BOOL;
8969
Result := (L >= SECURITY_MIN_IMPERSONATION_LEVEL) and (L <= SECURITY_MAX_IMPERSONATION_LEVEL);
8973
function VALID_TOKEN_AUDIT_POLICY_ELEMENT(P: TOKEN_AUDIT_POLICY_ELEMENT): BOOL;
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))
8981
function PER_USER_AUDITING_POLICY_SIZE(p: PTOKEN_AUDIT_POLICY): DWORD;
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) )
8989
function PER_USER_AUDITING_POLICY_SIZE_BY_COUNT(C: DWORD): DWORD;
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) )
8997
function NtCurrentTeb: PNT_TIB;
9007
function GetFiberData: PVOID;
9019
function GetCurrentFiber: PVOID;
9029
{$IFNDEF JWA_INCLUDEMODE}
9031
function Int32x32To64(a, b: LONG): LONGLONG;
9036
function UInt32x32To64(a, b: DWORD): ULONGLONG;
9041
{$ENDIF !JWA_INCLUDEMODE}
9043
function MAKELANGID(PrimaryLang, SubLang: USHORT): WORD;
9045
Result := (SubLang shl 10) or PrimaryLang;
9048
function PRIMARYLANGID(LangId: WORD): WORD;
9050
Result := LangId and $3FF;
9053
function SUBLANGID(LangId: WORD): WORD;
9055
Result := LangId shr 10;
9058
function MAKELCID(LangId, SortId: WORD): DWORD;
9060
Result := (DWORD(SortId) shl 16) or DWORD(LangId);
9063
function MAKESORTLCID(LangId, SortId, SortVersion: WORD): DWORD;
9065
Result := MAKELCID(LangId, SortId) or (SortVersion shl 20);
9068
function LANGIDFROMLCID(LocaleId: LCID): WORD;
9070
Result := WORD(LocaleId);
9073
function SORTIDFROMLCID(LocaleId: LCID): WORD;
9075
Result := WORD((DWORD(LocaleId) shr 16) and $F);
9078
function SORTVERSIONFROMLCID(LocaleId: LCID): WORD;
9080
Result := WORD((DWORD(LocaleId) shr 20) and $F);
9083
function LANG_SYSTEM_DEFAULT: WORD;
9085
Result := MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT);
9088
function LANG_USER_DEFAULT: WORD;
9090
Result := MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT);
9093
function LOCALE_SYSTEM_DEFAULT: DWORD;
9095
Result := MAKELCID(LANG_SYSTEM_DEFAULT, SORT_DEFAULT);
9098
function LOCALE_USER_DEFAULT: DWORD;
9100
Result := MAKELCID(LANG_USER_DEFAULT, SORT_DEFAULT);
9103
function LOCALE_NEUTRAL: DWORD;
9105
Result := MAKELCID(MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), SORT_DEFAULT);
9108
function LOCALE_INVARIANT: DWORD;
9110
Result := MAKELCID(MAKELANGID(LANG_INVARIANT, SUBLANG_NEUTRAL), SORT_DEFAULT);
9113
function IsReparseTagMicrosoft(Tag: ULONG): Boolean;
9115
Result := (Tag and ULONG($80000000)) <> 0;
9118
function IsReparseTagHighLatency(Tag: ULONG): Boolean;
9120
Result := (Tag and ULONG($40000000)) <> 0;
9123
function IsReparseTagNameSurrogate(Tag: ULONG): Boolean;
9125
Result := (Tag and ULONG($20000000)) <> 0;
9128
// IMAGE_FIRST_SECTION by Nico Bendlin - supplied by Markus Fuchs
9130
function FieldOffset(const Struc; const Field): Cardinal;
9132
Result := Cardinal(@Field) - Cardinal(@Struc);
9135
function IMAGE_FIRST_SECTION(NtHeader: PImageNtHeaders): PImageSectionHeader;
9137
Result := PImageSectionHeader(Cardinal(NtHeader) +
9138
FieldOffset(NtHeader^, NtHeader^.OptionalHeader) +
9139
NtHeader^.FileHeader.SizeOfOptionalHeader);
9142
function BTYPE(x: DWORD): DWORD;
9144
Result := x and N_BTMASK;
9147
function ISPTR(x: DWORD): Boolean;
9149
Result := (x and N_TMASK) = (IMAGE_SYM_DTYPE_POINTER shl N_BTSHFT);
9152
function ISFCN(x: DWORD): Boolean;
9154
Result := (x and N_TMASK) = (IMAGE_SYM_DTYPE_FUNCTION shl N_BTSHFT);
9157
function ISARY(x: DWORD): Boolean;
9159
Result := (x and N_TMASK) = (IMAGE_SYM_DTYPE_ARRAY shl N_BTSHFT);
9162
function ISTAG(x: DWORD): Boolean;
9164
Result := (x = IMAGE_SYM_CLASS_STRUCT_TAG) or (x = IMAGE_SYM_CLASS_UNION_TAG) or
9165
(x = IMAGE_SYM_CLASS_ENUM_TAG);
9168
function IMAGE_ORDINAL64(Ordinal: ULONGLONG): ULONGLONG;
9170
Result := (Ordinal and $ffff);
9173
function IMAGE_ORDINAL32(Ordinal: DWORD): DWORD;
9175
Result := (Ordinal and $ffff);
9178
function IMAGE_ORDINAL(Ordinal: DWORD): DWORD;
9180
Result := (Ordinal and $ffff);
9183
function IMAGE_SNAP_BY_ORDINAL64(Ordinal: ULONGLONG): Boolean;
9185
Result := ((Ordinal and IMAGE_ORDINAL_FLAG64) <> 0);
9188
function IMAGE_SNAP_BY_ORDINAL32(Ordinal: DWORD): Boolean;
9190
Result := ((Ordinal and IMAGE_ORDINAL_FLAG32) <> 0);
9193
function IMAGE_SNAP_BY_ORDINAL(Ordinal: DWORD): Boolean;
9195
Result := ((Ordinal and IMAGE_ORDINAL_FLAG32) <> 0);
9198
function HEAP_MAKE_TAG_FLAGS(b, o: DWORD): DWORD;
9200
Result := b + (o shl 18);
9203
procedure VER_SET_CONDITION(var Mask: DWORDLONG; TypeBitmask, ConditionMask: ULONG);
9205
Mask := VerSetConditionMask(Mask, TypeBitmask, ConditionMask);
9208
{$IFDEF DYNAMIC_LINK}
9211
_RtlCaptureContext: Pointer;
9213
procedure RtlCaptureContext;
9215
GetProcedureAddress(_RtlCaptureContext, ntdll, 'RtlCaptureContext');
9219
JMP [_RtlCaptureContext]
9224
_RtlCompareMemory: Pointer;
9226
function RtlCompareMemory;
9228
GetProcedureAddress(_RtlCompareMemory, ntdll, 'RtlCompareMemory');
9232
JMP [_RtlCompareMemory]
9237
_VerSetConditionMask: Pointer;
9239
function VerSetConditionMask;
9241
GetProcedureAddress(_VerSetConditionMask, kernel32, 'VerSetConditionMask');
9245
JMP [_VerSetConditionMask]
9250
_RtlInitializeSListHead: Pointer;
9252
procedure RtlInitializeSListHead;
9254
GetProcedureAddress(_RtlInitializeSListHead, 'ntdll.dll', 'RtlInitializeSListHead');
9258
JMP [_RtlInitializeSListHead]
9263
_RtlFirstEntrySList: Pointer;
9265
function RtlFirstEntrySList;
9267
GetProcedureAddress(_RtlFirstEntrySList, 'ntdll.dll', 'RtlFirstEntrySList');
9271
JMP [_RtlFirstEntrySList]
9276
_RtlInterlockedPopEntrySList: Pointer;
9278
function RtlInterlockedPopEntrySList;
9280
GetProcedureAddress(_RtlInterlockedPopEntrySList, 'ntdll.dll', 'RtlInterlockedPopEntrySList');
9284
JMP [_RtlInterlockedPopEntrySList]
9289
_RtlInterlockedPushEntrySList: Pointer;
9291
function RtlInterlockedPushEntrySList;
9293
GetProcedureAddress(_RtlInterlockedPushEntrySList, 'ntdll.dll', 'RtlInterlockedPushEntrySList');
9297
JMP [_RtlInterlockedPushEntrySList]
9302
_RtlInterlockedFlushSList: Pointer;
9304
function RtlInterlockedFlushSList;
9306
GetProcedureAddress(_RtlInterlockedFlushSList, 'ntdll.dll', 'RtlInterlockedFlushSList');
9310
JMP [_RtlInterlockedFlushSList]
9315
_RtlQueryDepthSList: Pointer;
9317
function RtlQueryDepthSList;
9319
GetProcedureAddress(_RtlQueryDepthSList, 'ntdll.dll', 'RtlQueryDepthSList');
9323
JMP [_RtlQueryDepthSList]
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';
9339
{$ENDIF DYNAMIC_LINK}
9341
{$ENDIF JWA_IMPLEMENTATIONSECTION}
9343
{$IFNDEF JWA_INCLUDEMODE}
9345
{$ENDIF !JWA_INCLUDEMODE}