source: Include/WinNT.ab @ 172

Last change on this file since 172 was 172, checked in by イグトランス (egtra), 16 years ago

レジストリAPIのコメントアウト解除ほか

File size: 217.5 KB
Line 
1' winnt.ab
2
3#ifndef _WINNT_
4#define _WINNT_
5
6'#include <ctype.h>
7Const ANYSIZE_ARRAY = 1
8
9'#include <specstrings.h>
10
11'RESTRICTED_POINTER
12
13'UNALIGNED
14'UNALIGNED64
15
16#ifdef _WIN64
17Const MAX_NATURAL_ALIGNMENT = SizeOf (QWord)
18Const MEMORY_ALLOCATION_ALIGNMENT = 16
19#else
20Const MAX_NATURAL_ALIGNMENT = SizeOf (DWord)
21Const MEMORY_ALLOCATION_ALIGNMENT = 8
22#endif
23
24'TYPE_ALIGNMENT
25'PROBE_ALIGNMENT
26'PROBE_ALIGNMENT32
27
28'Const C_ASSERT(e) = 0
29
30'#require <basetsd.ab>
31#ifdef _WIN64
32TypeDef LONG_PTR =  Int64
33TypeDef ULONG_PTR = QWord
34TypeDef HALF_PTR = Long
35TypeDef UHALF_PTR = DWord
36#else
37TypeDef LONG_PTR = Long
38TypeDef ULONG_PTR = DWord
39TypeDef HALF_PTR = Integer
40TypeDef UHALF_PTR = Word
41#endif
42TypeDef DWORD_PTR = ULONG_PTR
43
44TypeDef SIZE_T = ULONG_PTR
45TypeDef SSIZE_T = LONG_PTR
46
47Const SYSTEM_CACHE_ALIGNMENT_SIZE = 64
48
49Const DECLSPEC_CACHEALIGN = 4
50/*
51#ifdef DEPRECATE_DDK_FUNCTIONS
52#ifdef _NTDDK_
53#define DECLSPEC_DEPRECATED_DDK DECLSPEC_DEPRECATED
54#ifdef DEPRECATE_SUPPORTED
55#define PRAGMA_DEPRECATED_DDK 1
56#endif
57#else
58#define DECLSPEC_DEPRECATED_DDK
59#define PRAGMA_DEPRECATED_DDK 1
60#endif
61#else
62#define DECLSPEC_DEPRECATED_DDK
63#define PRAGMA_DEPRECATED_DDK 0
64#endif
65*/
66
67TypeDef PVOID = VoidPtr
68#ifdef _WIN64
69TypeDef PVOID64 = VoidPtr
70#else
71TypeDef PVOID64 = QWord
72#endif
73
74'#ifndef VOID
75'#define VOID void
76TypeDef CHAR = SByte
77'TypeDef SHORT = Integer
78'TypeDef LONG = Long
79'TypeDef INT = Long
80'#endif
81
82TypeDef WCHAR = Word
83
84TypeDef PWCHAR = *WCHAR
85TypeDef LPWCH = *WCHAR
86TypeDef PWCH = *WCHAR
87TypeDef LPCWCH = *WCHAR
88TypeDef NWPSTR = *WCHAR
89TypeDef LPWSTR = *WCHAR
90TypeDef PWSTR = *WCHAR
91TypeDef PZPWSTR = *PWSTR
92TypeDef PCZPWSTR = *PWSTR
93TypeDef LPUWSTR = *WCHAR
94TypeDef PUWSTR = *WCHAR
95TypeDef LPCWSTR = *WCHAR
96TypeDef PCWSTR = *WCHAR
97TypeDef PZPCWSTR = *PCWSTR
98TypeDef LPCUWSTR = *WCHAR
99TypeDef PCUWSTR = *WCHAR
100
101TypeDef LPCWCHAR = *WCHAR
102TypeDef PCWCHAR = *WCHAR
103TypeDef LPCUWCHAR = *WCHAR
104TypeDef PCUWCHAR = *WCHAR
105
106TypeDef UCSCHAR = DWord
107
108Const UCSCHAR_INVALID_CHARACTER = &hffffffff As UCSCHAR
109Const MIN_UCSCHAR = 0 As UCSCHAR
110Const MAX_UCSCHAR = &h0010ffff As UCSCHAR
111
112TypeDef PUCSCHAR = *UCSCHAR
113TypeDef PCUCSCHAR = *UCSCHAR
114
115TypeDef PUCSSTR = *UCSCHAR
116TypeDef PUUCSSTR = *UCSCHAR
117
118TypeDef PCUCSSTR = *UCSCHAR
119TypeDef PCUUCSSTR = *UCSCHAR
120
121TypeDef PUUCSCHAR = *UCSCHAR
122TypeDef PCUUCSCHAR = *UCSCHAR
123
124TypeDef PCHAR = *CHAR
125TypeDef LPCH = *CHAR
126TypeDef PCH = *CHAR
127TypeDef LPCCH = *CHAR
128TypeDef PCCH = *CHAR
129
130TypeDef NPSTR = *CHAR
131TypeDef LPSTR = *CHAR
132TypeDef PSTR = *CHAR
133TypeDef PZPSTR = *PSTR
134TypeDef PCZPSTR = *PSTR
135TypeDef PCSTR = *CHAR
136TypeDef LPCSTR = *CHAR
137TypeDef PZPCSTR = *PCSTR
138
139#ifdef UNICODE
140
141#ifndef _TCHAR_DEFINED
142TypeDef TCHAR = WCHAR
143TypeDef PTCHAR = *WCHAR
144TypeDef TBYTE = WCHAR
145TypeDef PTBYTE = *WCHAR
146#define _TCHAR_DEFINED
147#endif
148
149TypeDef PTCH = PWCH
150TypeDef LPTCH = LPWCH
151TypeDef PTSTR = PWSTR
152TypeDef LPTSTR = LPWSTR
153TypeDef PCTSTR = PCWSTR
154TypeDef LPCTSTR = LPCWSTR
155TypeDef PUTSTR = PUWSTR
156TypeDef LPUTSTR = LPUWSTR
157TypeDef PCUTSTR = PCUWSTR
158TypeDef LPCUTSTR = LPCUWSTR
159'TypeDef LP = LPWSTR
160
161#else
162
163#ifndef _TCHAR_DEFINED
164TypeDef TCHAR = Char
165TypeDef PTCHAR = *Char
166TypeDef TBYTE = Byte
167TypeDef PTBYTE = *Byte
168#define _TCHAR_DEFINED
169#endif
170
171TypeDef PTCH = PCH
172TypeDef LPTCH = LPCH
173TypeDef PTSTR = PSTR
174TypeDef LPTSTR = LPSTR
175TypeDef PUTSTR = PSTR
176TypeDef LPUTSTR = LPSTR
177TypeDef PCTSTR = PCSTR
178TypeDef LPCTSTR = LPCSTR
179TypeDef PCUTSTR = PCSTR
180TypeDef LPCUTSTR = LPCSTR
181#endif
182
183'TypeDef PSHORT = SHORT
184'TypeDef PLONG = *Long
185
186TypeDef HANDLE = VoidPtr
187TypeDef PHANDLE = *HANDLE
188
189TypeDef FCHAR = Byte
190TypeDef FSHORT = Word
191TypeDef FLONG = DWord
192
193#ifndef _HRESULT_DEFINED
194#define _HRESULT_DEFINED
195TypeDef HRESULT = Long
196#endif
197
198TypeDef CCHAR = CHAR
199TypeDef LCID = DWord
200TypeDef PLCID = *DWord
201TypeDef LANGID = Word
202Const APPLICATION_ERROR_MASK = &h20000000
203Const ERROR_SEVERITY_SUCCESS = &h00000000
204Const ERROR_SEVERITY_INFORMATIONAL = &h40000000
205Const ERROR_SEVERITY_WARNING = &h80000000
206Const ERROR_SEVERITY_ERROR = &hC0000000
207
208Type FLOAT128
209    LowPart As Int64
210    HighPart As Int64
211End Type
212TypeDef PFLOAT128 = FLOAT128
213
214'#define _ULONGLONG_
215'TypeDef LONGLONG = Int64
216'TypeDef ULONGLONG = QWord
217
218'Const MAXLONGLONG = (&h7fffffffffffffff)
219
220'TypeDef PLONGLONG = *LONGLONG
221'TypeDef PULONGLONG = *ULONGLONG
222
223TypeDef USN = LONGLONG
224
225Type LARGE_INTEGER
226    LowPart As DWord
227    HighPart As Long
228End Type
229TypeDef PLARGE_INTEGER = *LARGE_INTEGER
230
231Type ULARGE_INTEGER
232    LowPart As DWord
233    HighPart As DWord
234End Type
235TypeDef PULARGE_INTEGER = *ULARGE_INTEGER
236
237Type LUID
238    LowPart As DWord
239    HighPart As Long
240End Type
241TypeDef PLUID = *LUID
242
243'#define _DWORDLONG_
244'TypeDef DWORDLONG = ULONGLONG
245'TypeDef PDWORDLONG = DWORDLONG
246
247Const Int32x32To64(a, b) = (((a) As Long) As Int64 * ((b) As Long) As Int64)
248Const UInt32x32To64(a, b) = (((a) As DWord) As QWord * ((b) As DWord) As QWord)
249Const Int64ShllMod32(a, b) = ((a) As QWord << (b))
250Const Int64ShraMod32(a, b) = ((a) As Int64 >> (b))
251Const Int64ShrlMod32(a, b) = ((a) As QWord >> (b))
252
253Const ANSI_NULL = (0 As CHAR)
254Const UNICODE_NULL = (0 As WCHAR)
255Const UNICODE_STRING_MAX_BYTES = (65534 As Word)
256Const UNICODE_STRING_MAX_CHARS = (32767)
257TypeDef BOOLEAN = BYTE
258TypeDef PBOOLEAN = *BOOLEAN
259
260Type LIST_ENTRY
261    Flink As *LIST_ENTRY
262    Blink As *LIST_ENTRY
263End Type
264TypeDef PLIST_ENTRY = *PLIST_ENTRY
265TypeDef PRLIST_ENTRY = *PLIST_ENTRY
266
267Type SINGLE_LIST_ENTRY
268    Next As *SINGLE_LIST_ENTRY
269End Type
270TypeDef PSINGLE_LIST_ENTRY = *SINGLE_LIST_ENTRY
271
272Type LIST_ENTRY32
273    Flink As DWord
274    Blink As DWord
275End Type
276TypeDef PLIST_ENTRY32 = *LIST_ENTRY32
277
278Type LIST_ENTRY64
279    Flink As QWord
280    Blink As QWord
281End Type
282TypeDef PLIST_ENTRY64 = *LIST_ENTRY64
283
284#require <guiddef.ab>
285
286#ifndef __OBJECTID_DEFINED
287#define __OBJECTID_DEFINED
288
289Type OBJECTID
290    Lineage As GUID
291    Uniquifier As DWord
292End Type
293#endif
294
295Const MINCHAR = &h80
296Const MAXCHAR = &h7f
297Const MINSHORT = &h8000
298Const MAXSHORT = &h7fff
299Const MINLONG = &h80000000
300Const MAXLONG = &h7fffffff
301Const MAXBYTE = &hff
302Const MAXWORD = &hffff
303Const MAXDWORD = &hffffffff
304
305'FIELD_OFFSET
306'RTL_FIELD_SIZE
307'RTL_SIZEOF_THROUGH_FIELD
308'RTL_CONTAINS_FIELD
309Const RTL_NUMBER_OF_V1(A) = (Len (A) \ Len(A[0]))
310'RtlpNumberOf
311Const RTL_NUMBER_OF(A) = RTL_NUMBER_OF_V1(A)
312Const ARRAYSIZE(A) = RTL_NUMBER_OF_V1(A) 'RTL_NUMBER_OF_V2(A)
313Const _ARRAYSIZE(A) = RTL_NUMBER_OF_V1(A)
314'RTL_FIELD_TYPE
315'RTL_NUMBER_OF_FIELD
316'RTL_PADDING_BETWEEN_FIELDS
317'RTL_CONST_CAST
318'RTL_BITS_OF
319'RTL_BITS_OF_FIELD
320'CONTAINING_RECORD
321
322Const VER_SERVER_NT = &h80000000
323Const VER_WORKSTATION_NT = &h40000000
324Const VER_SUITE_SMALLBUSINESS = &h00000001
325Const VER_SUITE_ENTERPRISE = &h00000002
326Const VER_SUITE_BACKOFFICE = &h00000004
327Const VER_SUITE_COMMUNICATIONS = &h00000008
328Const VER_SUITE_TERMINAL = &h00000010
329Const VER_SUITE_SMALLBUSINESS_RESTRICTED = &h00000020
330Const VER_SUITE_EMBEDDEDNT = &h00000040
331Const VER_SUITE_DATACENTER = &h00000080
332Const VER_SUITE_SINGLEUSERTS = &h00000100
333Const VER_SUITE_PERSONAL = &h00000200
334Const VER_SUITE_BLADE = &h00000400
335Const VER_SUITE_EMBEDDED_RESTRICTED = &h00000800
336Const VER_SUITE_SECURITY_APPLIANCE = &h00001000
337Const VER_SUITE_STORAGE_SERVER = &h00002000
338Const VER_SUITE_COMPUTE_SERVER = &h00004000
339
340Const PRODUCT_UNDEFINED = &h00000000
341
342Const PRODUCT_ULTIMATE = &h00000001
343Const PRODUCT_HOME_BASIC = &h00000002
344Const PRODUCT_HOME_PREMIUM = &h00000003
345Const PRODUCT_ENTERPRISE = &h00000004
346Const PRODUCT_HOME_BASIC_N = &h00000005
347Const PRODUCT_BUSINESS = &h00000006
348Const PRODUCT_STANDARD_SERVER = &h00000007
349Const PRODUCT_DATACENTER_SERVER = &h00000008
350Const PRODUCT_SMALLBUSINESS_SERVER = &h00000009
351Const PRODUCT_ENTERPRISE_SERVER = &h0000000A
352Const PRODUCT_STARTER = &h0000000B
353Const PRODUCT_DATACENTER_SERVER_CORE = &h0000000C
354Const PRODUCT_STANDARD_SERVER_CORE = &h0000000D
355Const PRODUCT_ENTERPRISE_SERVER_CORE = &h0000000E
356Const PRODUCT_ENTERPRISE_SERVER_IA64 = &h0000000F
357Const PRODUCT_BUSINESS_N = &h00000010
358Const PRODUCT_WEB_SERVER = &h00000011
359Const PRODUCT_CLUSTER_SERVER = &h00000012
360Const PRODUCT_HOME_SERVER = &h00000013
361Const PRODUCT_STORAGE_EXPRESS_SERVER = &h00000014
362Const PRODUCT_STORAGE_STANDARD_SERVER = &h00000015
363Const PRODUCT_STORAGE_WORKGROUP_SERVER = &h00000016
364Const PRODUCT_STORAGE_ENTERPRISE_SERVER = &h00000017
365Const PRODUCT_SERVER_FOR_SMALLBUSINESS = &h00000018
366Const PRODUCT_SMALLBUSINESS_SERVER_PREMIUM = &h00000019
367
368Const PRODUCT_UNLICENSED = &hABCDABCD
369
370'#require <sdkddkver.ab>
371
372'  Primary language IDs.
373Const LANG_NEUTRAL = &h00
374Const LANG_INVARIANT = &h7f
375
376Const LANG_AFRIKAANS = &h36
377Const LANG_ALBANIAN = &h1c
378Const LANG_ALSATIAN = &h84
379Const LANG_AMHARIC = &h5e
380Const LANG_ARABIC = &h01
381Const LANG_ARMENIAN = &h2b
382Const LANG_ASSAMESE = &h4d
383Const LANG_AZERI = &h2c
384Const LANG_BASHKIR = &h6d
385Const LANG_BASQUE = &h2d
386Const LANG_BELARUSIAN = &h23
387Const LANG_BENGALI = &h45
388Const LANG_BRETON = &h7e
389Const LANG_BOSNIAN = &h1a
390Const LANG_BOSNIAN_NEUTRAL = &h781a
391Const LANG_BULGARIAN = &h02
392Const LANG_CATALAN = &h03
393Const LANG_CHINESE = &h04
394Const LANG_CHINESE_SIMPLIFIED = &h04
395Const LANG_CHINESE_TRADITIONAL = &h7c04
396Const LANG_CORSICAN = &h83
397Const LANG_CROATIAN = &h1a
398Const LANG_CZECH = &h05
399Const LANG_DANISH = &h06
400Const LANG_DARI = &h8c
401Const LANG_DIVEHI = &h65
402Const LANG_DUTCH = &h13
403Const LANG_ENGLISH = &h09
404Const LANG_ESTONIAN = &h25
405Const LANG_FAEROESE = &h38
406Const LANG_FARSI = &h29
407Const LANG_FILIPINO = &h64
408Const LANG_FINNISH = &h0b
409Const LANG_FRENCH = &h0c
410Const LANG_FRISIAN = &h62
411Const LANG_GALICIAN = &h56
412Const LANG_GEORGIAN = &h37
413Const LANG_GERMAN = &h07
414Const LANG_GREEK = &h08
415Const LANG_GREENLANDIC = &h6f
416Const LANG_GUJARATI = &h47
417Const LANG_HAUSA = &h68
418Const LANG_HEBREW = &h0d
419Const LANG_HINDI = &h39
420Const LANG_HUNGARIAN = &h0e
421Const LANG_ICELANDIC = &h0f
422Const LANG_IGBO = &h70
423Const LANG_INDONESIAN = &h21
424Const LANG_INUKTITUT = &h5d
425Const LANG_IRISH = &h3c
426Const LANG_ITALIAN = &h10
427Const LANG_JAPANESE = &h11
428Const LANG_KANNADA = &h4b
429Const LANG_KASHMIRI = &h60
430Const LANG_KAZAK = &h3f
431Const LANG_KHMER = &h53
432Const LANG_KICHE = &h86
433Const LANG_KINYARWANDA = &h87
434Const LANG_KONKANI = &h57
435Const LANG_KOREAN = &h12
436Const LANG_KYRGYZ = &h40
437Const LANG_LAO = &h54
438Const LANG_LATVIAN = &h26
439Const LANG_LITHUANIAN = &h27
440Const LANG_LOWER_SORBIAN = &h2e
441Const LANG_LUXEMBOURGISH = &h6e
442Const LANG_MACEDONIAN = &h2f
443Const LANG_MALAY = &h3e
444Const LANG_MALAYALAM = &h4c
445Const LANG_MALTESE = &h3a
446Const LANG_MANIPURI = &h58
447Const LANG_MAORI = &h81
448Const LANG_MAPUDUNGUN = &h7a
449Const LANG_MARATHI = &h4e
450Const LANG_MOHAWK = &h7c
451Const LANG_MONGOLIAN = &h50
452Const LANG_NEPALI = &h61
453Const LANG_NORWEGIAN = &h14
454Const LANG_OCCITAN = &h82
455Const LANG_ORIYA = &h48
456Const LANG_PASHTO = &h63
457Const LANG_PERSIAN = &h29
458Const LANG_POLISH = &h15
459Const LANG_PORTUGUESE = &h16
460Const LANG_PUNJABI = &h46
461Const LANG_QUECHUA = &h6b
462Const LANG_ROMANIAN = &h18
463Const LANG_ROMANSH = &h17
464Const LANG_RUSSIAN = &h19
465Const LANG_SAMI = &h3b
466Const LANG_SANSKRIT = &h4f
467Const LANG_SERBIAN = &h1a
468Const LANG_SERBIAN_NEUTRAL = &h7c1a
469Const LANG_SINDHI = &h59
470Const LANG_SINHALESE = &h5b
471Const LANG_SLOVAK = &h1b
472Const LANG_SLOVENIAN = &h24
473Const LANG_SOTHO = &h6c
474Const LANG_SPANISH = &h0a
475Const LANG_SWAHILI = &h41
476Const LANG_SWEDISH = &h1d
477Const LANG_SYRIAC = &h5a
478Const LANG_TAJIK = &h28
479Const LANG_TAMAZIGHT = &h5f
480Const LANG_TAMIL = &h49
481Const LANG_TATAR = &h44
482Const LANG_TELUGU = &h4a
483Const LANG_THAI = &h1e
484Const LANG_TIBETAN = &h51
485Const LANG_TIGRIGNA = &h73
486Const LANG_TSWANA = &h32
487Const LANG_TURKISH = &h1f
488Const LANG_TURKMEN = &h42
489Const LANG_UIGHUR = &h80
490Const LANG_UKRAINIAN = &h22
491Const LANG_UPPER_SORBIAN = &h2e
492Const LANG_URDU = &h20
493Const LANG_UZBEK = &h43
494Const LANG_VIETNAMESE = &h2a
495Const LANG_WELSH = &h52
496Const LANG_WOLOF = &h88
497Const LANG_XHOSA = &h34
498Const LANG_YAKUT = &h85
499Const LANG_YI = &h78
500Const LANG_YORUBA = &h6a
501Const LANG_ZULU = &h35
502
503' Sublanguage IDs.
504Const SUBLANG_NEUTRAL = &h00
505Const SUBLANG_DEFAULT = &h01
506Const SUBLANG_SYS_DEFAULT = &h02
507Const SUBLANG_CUSTOM_DEFAULT = &h03
508Const SUBLANG_CUSTOM_UNSPECIFIED = &h04
509Const SUBLANG_UI_CUSTOM_DEFAULT = &h05
510
511Const SUBLANG_AFRIKAANS_SOUTH_AFRICA = &h01
512Const SUBLANG_ALBANIAN_ALBANIA = &h01
513Const SUBLANG_ALSATIAN_FRANCE = &h01
514Const SUBLANG_AMHARIC_ETHIOPIA = &h01
515Const SUBLANG_ARABIC_SAUDI_ARABIA = &h01
516Const SUBLANG_ARABIC_IRAQ = &h02
517Const SUBLANG_ARABIC_EGYPT = &h03
518Const SUBLANG_ARABIC_LIBYA = &h04
519Const SUBLANG_ARABIC_ALGERIA = &h05
520Const SUBLANG_ARABIC_MOROCCO = &h06
521Const SUBLANG_ARABIC_TUNISIA = &h07
522Const SUBLANG_ARABIC_OMAN = &h08
523Const SUBLANG_ARABIC_YEMEN = &h09
524Const SUBLANG_ARABIC_SYRIA = &h0a
525Const SUBLANG_ARABIC_JORDAN = &h0b
526Const SUBLANG_ARABIC_LEBANON = &h0c
527Const SUBLANG_ARABIC_KUWAIT = &h0d
528Const SUBLANG_ARABIC_UAE = &h0e
529Const SUBLANG_ARABIC_BAHRAIN = &h0f
530Const SUBLANG_ARABIC_QATAR = &h10
531Const SUBLANG_ARMENIAN_ARMENIA = &h01
532Const SUBLANG_ASSAMESE_INDIA = &h01
533Const SUBLANG_AZERI_LATIN = &h01
534Const SUBLANG_AZERI_CYRILLIC = &h02
535Const SUBLANG_BASHKIR_RUSSIA = &h01
536Const SUBLANG_BASQUE_BASQUE = &h01
537Const SUBLANG_BELARUSIAN_BELARUS = &h01
538Const SUBLANG_BENGALI_INDIA = &h01
539Const SUBLANG_BENGALI_BANGLADESH = &h02
540Const SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN = &h05
541Const SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC = &h08
542Const SUBLANG_BRETON_FRANCE = &h01
543Const SUBLANG_BULGARIAN_BULGARIA = &h01
544Const SUBLANG_CATALAN_CATALAN = &h01
545Const SUBLANG_CHINESE_TRADITIONAL = &h01
546Const SUBLANG_CHINESE_SIMPLIFIED = &h02
547Const SUBLANG_CHINESE_HONGKONG = &h03
548Const SUBLANG_CHINESE_SINGAPORE = &h04
549Const SUBLANG_CHINESE_MACAU = &h05
550Const SUBLANG_CORSICAN_FRANCE = &h01
551Const SUBLANG_CZECH_CZECH_REPUBLIC = &h01
552Const SUBLANG_CROATIAN_CROATIA = &h01
553Const SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN = &h04
554Const SUBLANG_DANISH_DENMARK = &h01
555Const SUBLANG_DARI_AFGHANISTAN = &h01
556Const SUBLANG_DIVEHI_MALDIVES = &h01
557Const SUBLANG_DUTCH = &h01
558Const SUBLANG_DUTCH_BELGIAN = &h02
559Const SUBLANG_ENGLISH_US = &h01
560Const SUBLANG_ENGLISH_UK = &h02
561Const SUBLANG_ENGLISH_AUS = &h03
562Const SUBLANG_ENGLISH_CAN = &h04
563Const SUBLANG_ENGLISH_NZ = &h05
564Const SUBLANG_ENGLISH_EIRE = &h06
565Const SUBLANG_ENGLISH_SOUTH_AFRICA = &h07
566Const SUBLANG_ENGLISH_JAMAICA = &h08
567Const SUBLANG_ENGLISH_CARIBBEAN = &h09
568Const SUBLANG_ENGLISH_BELIZE = &h0a
569Const SUBLANG_ENGLISH_TRINIDAD = &h0b
570Const SUBLANG_ENGLISH_ZIMBABWE = &h0c
571Const SUBLANG_ENGLISH_PHILIPPINES = &h0d
572Const SUBLANG_ENGLISH_INDIA = &h10
573Const SUBLANG_ENGLISH_MALAYSIA = &h11
574Const SUBLANG_ENGLISH_SINGAPORE = &h12
575Const SUBLANG_ESTONIAN_ESTONIA = &h01
576Const SUBLANG_FAEROESE_FAROE_ISLANDS = &h01
577Const SUBLANG_FILIPINO_PHILIPPINES = &h01
578Const SUBLANG_FINNISH_FINLAND = &h01
579Const SUBLANG_FRENCH = &h01
580Const SUBLANG_FRENCH_BELGIAN = &h02
581Const SUBLANG_FRENCH_CANADIAN = &h03
582Const SUBLANG_FRENCH_SWISS = &h04
583Const SUBLANG_FRENCH_LUXEMBOURG = &h05
584Const SUBLANG_FRENCH_MONACO = &h06
585Const SUBLANG_FRISIAN_NETHERLANDS = &h01
586Const SUBLANG_GALICIAN_GALICIAN = &h01
587Const SUBLANG_GEORGIAN_GEORGIA = &h01
588Const SUBLANG_GERMAN = &h01
589Const SUBLANG_GERMAN_SWISS = &h02
590Const SUBLANG_GERMAN_AUSTRIAN = &h03
591Const SUBLANG_GERMAN_LUXEMBOURG = &h04
592Const SUBLANG_GERMAN_LIECHTENSTEIN = &h05
593Const SUBLANG_GREEK_GREECE = &h01
594Const SUBLANG_GREENLANDIC_GREENLAND = &h01
595Const SUBLANG_GUJARATI_INDIA = &h01
596Const SUBLANG_HAUSA_NIGERIA_LATIN = &h01
597Const SUBLANG_HEBREW_ISRAEL = &h01
598Const SUBLANG_HINDI_INDIA = &h01
599Const SUBLANG_HUNGARIAN_HUNGARY = &h01
600Const SUBLANG_ICELANDIC_ICELAND = &h01
601Const SUBLANG_IGBO_NIGERIA = &h01
602Const SUBLANG_INDONESIAN_INDONESIA = &h01
603Const SUBLANG_INUKTITUT_CANADA = &h01
604Const SUBLANG_INUKTITUT_CANADA_LATIN = &h02
605Const SUBLANG_IRISH_IRELAND = &h02
606Const SUBLANG_ITALIAN = &h01
607Const SUBLANG_ITALIAN_SWISS = &h02
608Const SUBLANG_JAPANESE_JAPAN = &h01
609Const SUBLANG_KANNADA_INDIA = &h01
610Const SUBLANG_KASHMIRI_SASIA = &h02
611Const SUBLANG_KASHMIRI_INDIA = &h02
612Const SUBLANG_KAZAK_KAZAKHSTAN = &h01
613Const SUBLANG_KHMER_CAMBODIA = &h01
614Const SUBLANG_KICHE_GUATEMALA = &h01
615Const SUBLANG_KINYARWANDA_RWANDA = &h01
616Const SUBLANG_KONKANI_INDIA = &h01
617Const SUBLANG_KOREAN = &h01
618Const SUBLANG_KYRGYZ_KYRGYZSTAN = &h01
619Const SUBLANG_LAO_LAO = &h01
620Const SUBLANG_LATVIAN_LATVIA = &h01
621Const SUBLANG_LITHUANIAN = &h01
622Const SUBLANG_LOWER_SORBIAN_GERM = &h02
623Const SUBLANG_LUXEMBOURGISH_LUXEMBOURG = &h01
624Const SUBLANG_MACEDONIAN_MACEDONIA = &h01
625Const SUBLANG_MALAY_MALAYSIA = &h01
626Const SUBLANG_MALAY_BRUNEI_DARUSSALAM = &h02
627Const SUBLANG_MALAYALAM_INDIA = &h01
628Const SUBLANG_MALTESE_MALTA = &h01
629Const SUBLANG_MAORI_NEW_ZEALAND = &h01
630Const SUBLANG_MAPUDUNGUN_CHILE = &h01
631Const SUBLANG_MARATHI_INDIA = &h01
632Const SUBLANG_MOHAWK_MOHAWK = &h01
633Const SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA = &h01
634Const SUBLANG_MONGOLIAN_PRC = &h02
635Const SUBLANG_NEPALI_INDIA = &h02
636Const SUBLANG_NEPALI_NEPAL = &h01
637Const SUBLANG_NORWEGIAN_BOKMAL = &h01
638Const SUBLANG_NORWEGIAN_NYNORSK = &h02
639Const SUBLANG_OCCITAN_FRANCE = &h01
640Const SUBLANG_ORIYA_INDIA = &h01
641Const SUBLANG_PASHTO_AFGHANISTAN = &h01
642Const SUBLANG_PERSIAN_IRAN = &h01
643Const SUBLANG_POLISH_POLAND = &h01
644Const SUBLANG_PORTUGUESE = &h02
645Const SUBLANG_PORTUGUESE_BRAZILIAN = &h01
646Const SUBLANG_PUNJABI_INDIA = &h01
647Const SUBLANG_QUECHUA_BOLIVIA = &h01
648Const SUBLANG_QUECHUA_ECUADOR = &h02
649Const SUBLANG_QUECHUA_PERU = &h03
650Const SUBLANG_ROMANIAN_ROMANIA = &h01
651Const SUBLANG_ROMANSH_SWITZERLAND = &h01
652Const SUBLANG_RUSSIAN_RUSSIA = &h01
653Const SUBLANG_SAMI_NORTHERN_NORWAY = &h01
654Const SUBLANG_SAMI_NORTHERN_SWEDEN = &h02
655Const SUBLANG_SAMI_NORTHERN_FINLAND = &h03
656Const SUBLANG_SAMI_LULE_NORWAY = &h04
657Const SUBLANG_SAMI_LULE_SWEDEN = &h05
658Const SUBLANG_SAMI_SOUTHERN_NORWAY = &h06
659Const SUBLANG_SAMI_SOUTHERN_SWEDEN = &h07
660Const SUBLANG_SAMI_SKOLT_FINLAND = &h08
661Const SUBLANG_SAMI_INARI_FINLAND = &h09
662Const SUBLANG_SANSKRIT_INDIA = &h01
663Const SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_LATIN = &h06
664Const SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_CYRILLIC = &h07
665Const SUBLANG_SERBIAN_CROATIA = &h01
666Const SUBLANG_SERBIAN_LATIN = &h02
667Const SUBLANG_SERBIAN_CYRILLIC = &h03
668Const SUBLANG_SINDHI_INDIA = &h01
669Const SUBLANG_SINDHI_PAKISTAN = &h02
670Const SUBLANG_SINDHI_AFGHANISTAN = &h02
671Const SUBLANG_SINHALESE_SRI_LANKA = &h01
672Const SUBLANG_SOTHO_NORTHERN_SOUTH_AFRICA = &h01
673Const SUBLANG_SLOVAK_SLOVAKIA = &h01
674Const SUBLANG_SLOVENIAN_SLOVENIA = &h01
675Const SUBLANG_SPANISH = &h01
676Const SUBLANG_SPANISH_MEXICAN = &h02
677Const SUBLANG_SPANISH_MODERN = &h03
678Const SUBLANG_SPANISH_GUATEMALA = &h04
679Const SUBLANG_SPANISH_COSTA_RICA = &h05
680Const SUBLANG_SPANISH_PANAMA = &h06
681Const SUBLANG_SPANISH_DOMINICAN_REPUBLIC = &h07
682Const SUBLANG_SPANISH_VENEZUELA = &h08
683Const SUBLANG_SPANISH_COLOMBIA = &h09
684Const SUBLANG_SPANISH_PERU = &h0a
685Const SUBLANG_SPANISH_ARGENTINA = &h0b
686Const SUBLANG_SPANISH_ECUADOR = &h0c
687Const SUBLANG_SPANISH_CHILE = &h0d
688Const SUBLANG_SPANISH_URUGUAY = &h0e
689Const SUBLANG_SPANISH_PARAGUAY = &h0f
690Const SUBLANG_SPANISH_BOLIVIA = &h10
691Const SUBLANG_SPANISH_EL_SALVADOR = &h11
692Const SUBLANG_SPANISH_HONDURAS = &h12
693Const SUBLANG_SPANISH_NICARAGUA = &h13
694Const SUBLANG_SPANISH_PUERTO_RICO = &h14
695Const SUBLANG_SPANISH_US = &h15
696Const SUBLANG_SWAHILI_KENYA = &h01
697Const SUBLANG_SWEDISH = &h01
698Const SUBLANG_SWEDISH_FINLAND = &h02
699Const SUBLANG_SYRIAC_SYRIA = &h01
700Const SUBLANG_TAJIK_TAJIKISTAN = &h01
701Const SUBLANG_TAMAZIGHT_ALGERIA_LATIN = &h02
702Const SUBLANG_TAMIL_INDIA = &h01
703Const SUBLANG_TATAR_RUSSIA = &h01
704Const SUBLANG_TELUGU_INDIA = &h01
705Const SUBLANG_THAI_THAILAND = &h01
706Const SUBLANG_TIBETAN_PRC = &h01
707Const SUBLANG_TIGRIGNA_ERITREA = &h02
708Const SUBLANG_TSWANA_SOUTH_AFRICA = &h01
709Const SUBLANG_TURKISH_TURKEY = &h01
710Const SUBLANG_TURKMEN_TURKMENISTAN = &h01
711Const SUBLANG_UIGHUR_PRC = &h01
712Const SUBLANG_UKRAINIAN_UKRAINE = &h01
713Const SUBLANG_UPPER_SORBIAN_GERMANY = &h01
714Const SUBLANG_URDU_PAKISTAN = &h01
715Const SUBLANG_URDU_INDIA = &h02
716Const SUBLANG_UZBEK_LATIN = &h01
717Const SUBLANG_UZBEK_CYRILLIC = &h02
718Const SUBLANG_VIETNAMESE_VIETNAM = &h01
719Const SUBLANG_WELSH_UNITED_KINGDOM = &h01
720Const SUBLANG_WOLOF_SENEGAL = &h01
721Const SUBLANG_XHOSA_SOUTH_AFRICA = &h01
722Const SUBLANG_YAKUT_RUSSIA = &h01
723Const SUBLANG_YI_PRC = &h01
724Const SUBLANG_YORUBA_NIGERIA = &h01
725Const SUBLANG_ZULU_SOUTH_AFRICA = &h01
726
727' Sorting IDs.
728Const SORT_DEFAULT = &h0
729
730Const SORT_INVARIANT_MATH = &h1
731
732Const SORT_JAPANESE_XJIS = &h0
733Const SORT_JAPANESE_UNICODE = &h1
734Const SORT_JAPANESE_RADICALSTROKE = &h4
735
736Const SORT_CHINESE_BIG5 = &h0
737Const SORT_CHINESE_PRCP = &h0
738Const SORT_CHINESE_UNICODE = &h1
739Const SORT_CHINESE_PRC = &h2
740Const SORT_CHINESE_BOPOMOFO = &h3
741
742Const SORT_KOREAN_KSC = &h0
743Const SORT_KOREAN_UNICODE = &h1
744
745Const SORT_GERMAN_PHONE_BOOK = &h1
746
747Const SORT_HUNGARIAN_DEFAULT = &h0
748Const SORT_HUNGARIAN_TECHNICAL = &h1
749
750Const SORT_GEORGIAN_TRADITIONAL = &h0
751Const SORT_GEORGIAN_MODERN = &h1
752
753Const MAKELANGID(p, s) = ((((s) As Word) << 10) Or (p) As Word)
754Const PRIMARYLANGID(lgid) = ((lgid) As Word And &h3ff)
755Const SUBLANGID(lgid) = ((lgid) As Word >> 10)
756
757Const NLS_VALID_LOCALE_MASK = &h000fffff
758
759Const MAKELCID(lgid, srtid) = ((((((srtid) As Word) As DWord) << 16) Or (((lgid) As Word) As DWord)) As DWord)
760Const MAKESORTLCID(lgid, srtid, ver) = (((MAKELCID(lgid, srtid)) Or ((((ver) As Word)) As DWord << 20)) As DWord)
761Const LANGIDFROMLCID(lcid) = ((lcid) As Word)
762Const SORTIDFROMLCID(lcid) = (((((lcid) As DWord) >> 16) And &hf) As Word)
763Const SORTVERSIONFROMLCID(lcid) = (((((lcid) As DWord) >> 20) And &hf) As Word)
764
765Const LOCALE_NAME_MAX_LENGTH = 85
766
767Const LANG_SYSTEM_DEFAULT = (MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT))
768Const LANG_USER_DEFAULT = (MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT))
769
770Const LOCALE_SYSTEM_DEFAULT = (MAKELCID(LANG_SYSTEM_DEFAULT, SORT_DEFAULT))
771Const LOCALE_USER_DEFAULT = (MAKELCID(LANG_USER_DEFAULT, SORT_DEFAULT))
772
773Const LOCALE_CUSTOM_DEFAULT = (MAKELCID(MAKELANGID(LANG_NEUTRAL, SUBLANG_CUSTOM_DEFAULT), SORT_DEFAULT))
774Const LOCALE_CUSTOM_UNSPECIFIED = (MAKELCID(MAKELANGID(LANG_NEUTRAL, SUBLANG_CUSTOM_UNSPECIFIED), SORT_DEFAULT))
775Const LOCALE_CUSTOM_UI_DEFAULT = (MAKELCID(MAKELANGID(LANG_NEUTRAL, SUBLANG_UI_CUSTOM_DEFAULT), SORT_DEFAULT))
776Const LOCALE_NEUTRAL = (MAKELCID(MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), SORT_DEFAULT))
777Const LOCALE_INVARIANT = (MAKELCID(MAKELANGID(LANG_INVARIANT, SUBLANG_NEUTRAL), SORT_DEFAULT))
778
779' DEFAULT_UNREACHABLE
780
781#ifndef WIN32_NO_STATUS
782Const STATUS_WAIT_0 = (&h00000000 As DWord)
783Const STATUS_ABANDONED_WAIT_0 = (&h00000080 As DWord)
784Const STATUS_USER_APC = (&h000000C0 As DWord)
785Const STATUS_TIMEOUT = (&h00000102 As DWord)
786Const STATUS_PENDING = (&h00000103 As DWord)
787Const DBG_EXCEPTION_HANDLED = (&h00010001 As DWord)
788Const DBG_CONTINUE = (&h00010002 As DWord)
789Const STATUS_SEGMENT_NOTIFICATION = (&h40000005 As DWord)
790Const DBG_TERMINATE_THREAD = (&h40010003 As DWord)
791Const DBG_TERMINATE_PROCESS = (&h40010004 As DWord)
792Const DBG_CONTROL_C = (&h40010005 As DWord)
793Const DBG_CONTROL_BREAK = (&h40010008 As DWord)
794Const DBG_COMMAND_EXCEPTION = (&h40010009 As DWord)
795Const STATUS_GUARD_PAGE_VIOLATION = (&h80000001 As DWord)
796Const STATUS_DATATYPE_MISALIGNMENT = (&h80000002 As DWord)
797Const STATUS_BREAKPOINT = (&h80000003 As DWord)
798Const STATUS_SINGLE_STEP = (&h80000004 As DWord)
799Const DBG_EXCEPTION_NOT_HANDLED = (&h80010001 As DWord)
800Const STATUS_ACCESS_VIOLATION = (&hC0000005 As DWord)
801Const STATUS_IN_PAGE_ERROR = (&hC0000006 As DWord)
802Const STATUS_INVALID_HANDLE = (&hC0000008 As DWord)
803Const STATUS_NO_MEMORY = (&hC0000017 As DWord)
804Const STATUS_ILLEGAL_INSTRUCTION = (&hC000001D As DWord)
805Const STATUS_NONCONTINUABLE_EXCEPTION = (&hC0000025 As DWord)
806Const STATUS_INVALID_DISPOSITION = (&hC0000026 As DWord)
807Const STATUS_ARRAY_BOUNDS_EXCEEDED = (&hC000008C As DWord)
808Const STATUS_FLOAT_DENORMAL_OPERAND = (&hC000008D As DWord)
809Const STATUS_FLOAT_DIVIDE_BY_ZERO = (&hC000008E As DWord)
810Const STATUS_FLOAT_INEXACT_RESULT = (&hC000008F As DWord)
811Const STATUS_FLOAT_INVALID_OPERATION = (&hC0000090 As DWord)
812Const STATUS_FLOAT_OVERFLOW = (&hC0000091 As DWord)
813Const STATUS_FLOAT_STACK_CHECK = (&hC0000092 As DWord)
814Const STATUS_FLOAT_UNDERFLOW = (&hC0000093 As DWord)
815Const STATUS_INTEGER_DIVIDE_BY_ZERO = (&hC0000094 As DWord)
816Const STATUS_INTEGER_OVERFLOW = (&hC0000095 As DWord)
817Const STATUS_PRIVILEGED_INSTRUCTION = (&hC0000096 As DWord)
818Const STATUS_STACK_OVERFLOW = (&hC00000FD As DWord)
819Const STATUS_CONTROL_C_EXIT = (&hC000013A As DWord)
820Const STATUS_FLOAT_MULTIPLE_FAULTS = (&hC00002B4 As DWord)
821Const STATUS_FLOAT_MULTIPLE_TRAPS = (&hC00002B5 As DWord)
822Const STATUS_REG_NAT_CONSUMPTION = (&hC00002C9 As DWord)
823'#if defined(STATUS_SUCCESS) || (_WIN32_WINNT > 0x0500) || (_WIN32_FUSION >= 0x0100)
824Const STATUS_SXS_EARLY_DEACTIVATION = (&hC015000F As DWord)
825Const STATUS_SXS_INVALID_DEACTIVATION = (&hC0150010 As DWord)
826'#endif
827#endif
828
829Const MAXIMUM_WAIT_OBJECTS = 64
830
831Const MAXIMUM_SUSPEND_COUNT = MAXCHAR
832
833TypeDef KSPIN_LOCK = ULONG_PTR
834TypeDef PKSPIN_LOCK = KSPIN_LOCK
835
836#ifdef _WIN64
837
838Const EXCEPTION_READ_FAULT = 0
839Const EXCEPTION_WRITE_FAULT = 1
840Const EXCEPTION_EXECUTE_FAULT = 8
841
842Const CONTEXT_AMD64 = &h100000
843
844Const CONTEXT_CONTROL = (CONTEXT_AMD64 Or &h1)
845Const CONTEXT_INTEGER = (CONTEXT_AMD64 Or &h2)
846Const CONTEXT_SEGMENTS = (CONTEXT_AMD64 Or &h4)
847Const CONTEXT_FLOATING_POINT  = (CONTEXT_AMD64 Or &h8)
848Const CONTEXT_DEBUG_REGISTERS = (CONTEXT_AMD64 Or &h10)
849
850Const CONTEXT_FULL = (CONTEXT_CONTROL Or CONTEXT_INTEGER Or CONTEXT_FLOATING_POINT)
851
852Const CONTEXT_ALL = (CONTEXT_CONTROL Or CONTEXT_INTEGER Or CONTEXT_SEGMENTS Or CONTEXT_FLOATING_POINT Or CONTEXT_DEBUG_REGISTERS)
853
854Const CONTEXT_EXCEPTION_ACTIVE = &h8000000
855Const CONTEXT_SERVICE_ACTIVE = &h10000000
856Const CONTEXT_EXCEPTION_REQUEST = &h40000000
857Const CONTEXT_EXCEPTION_REPORTING = &h80000000
858
859Const INITIAL_MXCSR = &h1f80
860Const INITIAL_FPCSR = &h027f
861
862Type Align(16) M128A
863    Low As QWord
864    High As Int64
865End Type
866TypeDef PM128A = *M128A
867
868Type XMM_SAVE_AREA32
869    ControlWord As Word
870    StatusWord As Word
871    TagWord As Byte
872    Reserved1 As Byte
873    ErrorOpcode As Word
874    ErrorOffset As DWord
875    ErrorSelector As Word
876    Reserved2 As Word
877    DataOffset As DWord
878    DataSelector As Word
879    Reserved3 As Word
880    MxCsr As DWord
881    MxCsr_Mask As DWord
882    FloatRegisters[ELM(8)] As M128A
883    XmmRegisters[ELM(16)] As M128A
884    Reserved4[ELM(96)] As Byte
885End Type
886TypeDef PXMM_SAVE_AREA32 = *XMM_SAVE_AREA32
887
888Const LEGACY_SAVE_AREA_LENGTH = SizeOf (XMM_SAVE_AREA32)
889
890Type Align(16) CONTEXT
891    'Register parameter home addresses.
892    P1Home As QWord
893    P2Home As QWord
894    P3Home As QWord
895    P4Home As QWord
896    P5Home As QWord
897    P6Home As QWord
898    'Control flags.
899    ContextFlags As DWord
900    MxCsr As DWord
901    'Segment Registers and processor flags.
902    SegCs As Word
903    SegDs As Word
904    SegEs As Word
905    SegFs As Word
906    SegGs As Word
907    SegSs As Word
908    EFlags As DWord
909    'Debug registers
910    Dr0 As QWord
911    Dr1 As QWord
912    Dr2 As QWord
913    Dr3 As QWord
914    Dr6 As QWord
915    Dr7 As QWord
916    'Integer registers.
917    Rax As QWord
918    Rcx As QWord
919    Rdx As QWord
920    Rbx As QWord
921    Rsp As QWord
922    Rbp As QWord
923    Rsi As QWord
924    Rdi As QWord
925    R8 As QWord
926    R9 As QWord
927    R10 As QWord
928    R11 As QWord
929    R12 As QWord
930    R13 As QWord
931    R14 As QWord
932    R15 As QWord
933    'Program counter.
934    Rip As QWord
935    'MMX/floating point state.
936    Header[ELM(2)] As M128
937    Legacy[ELM(8)] As M128
938    Xmm0 As M128
939    Xmm1 As M128
940    Xmm2 As M128
941    Xmm3 As M128
942    Xmm4 As M128
943    Xmm5 As M128
944    Xmm6 As M128
945    Xmm7 As M128
946    Xmm8 As M128
947    Xmm9 As M128
948    Xmm10 As M128
949    Xmm11 As M128
950    Xmm12 As M128
951    Xmm13 As M128
952    Xmm14 As M128
953    Xmm15 As M128
954    Reserve[ELM(96)] As Byte
955    'Vector registers
956    VectorRegisters[ELM(26)] As M128
957    VectorControl As QWord
958    'Special debug control registers.
959    DebugControl As QWord
960    LastBranchToRip As QWord
961    LastBranchFromRip As QWord
962    LastExceptionToRip As QWord
963    LastExceptionFromRip As QWord
964End Type
965TypeDef PCONTEXT = *CONTEXT
966
967Const RUNTIME_FUNCTION_INDIRECT = &h1
968
969Type RUNTIME_FUNCTION
970    BeginAddress As DWord
971    EndAddress As DWord
972    UnwindData As DWord
973End Type
974TypeDef PRUNTIME_FUNCTION = *RUNTIME_FUNCTION
975
976TypeDef PGET_RUNTIME_FUNCTION_CALLBACK = *Function(ControlPc As QWord, Context As PVOID) As PRUNTIME_FUNCTION
977
978TypeDef POUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK = *Function(Process As HANDLE, TableAddress As PVOID, Entries As *DWord, ByRef Functions As PRUNTIME_FUNCTION) As DWord
979
980Const OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME = "OutOfProcessFunctionTableCallback"
981
982Declare Sub RtlRestoreContext Lib "kernel32" (ByRef ContextRecord As CONTEXT, ExceptionRecord As *EXCEPTION_RECORD)
983Declare Function RtlAddFunctionTable Lib "kernel32" (FunctionTable As PRUNTIME_FUNCTION, EntryCount As DWord, BaseAddress As QWord) As BOOLEAN
984Declare Function RtlInstallFunctionTableCallback Lib "kernel32" (TableIdentifier As QWord, BaseAddress As QWord, Length As DWord, Callback As PGET_RUNTIME_FUNCTION_CALLBACK, Context As PVOID, OutOfProcessCallbackDll As PCWSTR) As BOOLEAN
985Declare Function RtlDeleteFunctionTable Lib "kernel32" (FunctionTable As PRUNTIME_FUNCTION) As BOOLEAN
986
987'#endif '_WIN64
988#else
989'#ifdef _WIN32
990'InterlockedBitTestAndSet
991'InterlockedBitTestAndReset
992'InterlockedBitTestAndComplement
993
994
995'MemoryBarrier
996'PreFetchCacheLine
997'ReadForWriteAccess
998
999'ReadPMC
1000'ReadTimeStampCounter
1001
1002'DbgRaiseAssertionFailure
1003
1004'GetFiberData
1005'GetCurrentFibe
1006
1007Const EXCEPTION_READ_FAULT = 0
1008Const EXCEPTION_WRITE_FAULT = 1
1009Const EXCEPTION_EXECUTE_FAULT = 8
1010
1011Const SIZE_OF_80387_REGISTERS = 80
1012
1013Const CONTEXT_i386 = &h00010000
1014Const CONTEXT_i486 = &h00010000
1015
1016Const CONTEXT_CONTROL = (CONTEXT_i386 Or &h00000001) ' SS:SP, CS:IP, FLAGS, BP
1017Const CONTEXT_INTEGER = (CONTEXT_i386 Or &h00000002) ' AX, BX, CX, DX, SI, DI
1018Const CONTEXT_SEGMENTS = (CONTEXT_i386 Or &h00000004) ' DS, ES, FS, GS
1019Const CONTEXT_FLOATING_POINT = (CONTEXT_i386 Or &h00000008) ' 387 state
1020Const CONTEXT_DEBUG_REGISTERS = (CONTEXT_i386 Or &h00000010) ' DB 0-3,6,7
1021Const CONTEXT_EXTENDED_REGISTERS = (CONTEXT_i386 Or &h00000020) ' cpu specific extensions
1022Const CONTEXT_FULL = (CONTEXT_CONTROL Or CONTEXT_INTEGER Or CONTEXT_SEGMENTS)
1023Const CONTEXT_ALL = (CONTEXT_CONTROL Or CONTEXT_INTEGER Or CONTEXT_SEGMENTS Or  CONTEXT_FLOATING_POINT Or CONTEXT_DEBUG_REGISTERS Or  CONTEXT_EXTENDED_REGISTERS)
1024
1025Const MAXIMUM_SUPPORTED_EXTENSION = 512
1026
1027Type FLOATING_SAVE_AREA
1028    ControlWord As DWord
1029    StatusWord As DWord
1030    TagWord As DWord
1031    ErrorOffset As DWord
1032    ErrorSelector As DWord
1033    DataOffset As DWord
1034    DataSelector As DWord
1035    RegisterArea[ELM(SIZE_OF_80387_REGISTERS)] As Byte
1036    Cr0NpxState As DWord
1037End Type
1038TypeDef PFLOATING_SAVE_AREA = FLOATING_SAVE_AREA
1039
1040Type CONTEXT
1041    ContextFlags As DWord
1042
1043    Dr0 As DWord
1044    Dr1 As DWord
1045    Dr2 As DWord
1046    Dr3 As DWord
1047    Dr6 As DWord
1048    Dr7 As DWord
1049
1050    FloatSave As FLOATING_SAVE_AREA
1051
1052    SegGs As DWord
1053    SegFs As DWord
1054    SegEs As DWord
1055    SegDs As DWord
1056
1057    Edi As DWord
1058    Esi As DWord
1059    Ebx As DWord
1060    Edx As DWord
1061    Ecx As DWord
1062    Eax As DWord
1063
1064    Ebp As DWord
1065    Eip As DWord
1066    SegCs As DWord
1067    EFlags As DWord
1068    Esp As DWord
1069    SegSs As DWord
1070
1071    ExtendedRegisters[ELM(MAXIMUM_SUPPORTED_EXTENSION)] As Byte
1072End Type
1073
1074TypeDef PCONTEXT = *CONTEXT
1075
1076#endif
1077
1078#ifndef _LDT_ENTRY_DEFINED
1079#define _LDT_ENTRY_DEFINED
1080
1081Type LDT_ENTRY
1082    LimitLow As Word
1083    BaseLow As Word
1084    BaseMid As Byte
1085    Flags1 As Byte
1086    Flags2 As Byte
1087    BaseHi As Byte
1088End Type
1089TypeDef PLDT_ENTRY = *LDT_ENTRY
1090
1091#endif
1092
1093Const WOW64_CONTEXT_i386 = &h00010000
1094Const WOW64_CONTEXT_i486 = &h00010000
1095
1096Const WOW64_CONTEXT_CONTROL = (WOW64_CONTEXT_i386 Or &h00000001) ' SS:SP, CS:IP, FLAGS, BP
1097Const WOW64_CONTEXT_INTEGER = (WOW64_CONTEXT_i386 Or &h00000002) ' AX, BX, CX, DX, SI, DI
1098Const WOW64_CONTEXT_SEGMENTS = (WOW64_CONTEXT_i386 Or &h00000004) ' DS, ES, FS, GS
1099Const WOW64_CONTEXT_FLOATING_POINT = (WOW64_CONTEXT_i386 Or &h00000008) ' 387 state
1100Const WOW64_CONTEXT_DEBUG_REGISTERS = (WOW64_CONTEXT_i386 Or &h00000010) ' DB 0-3,6,7
1101Const WOW64_CONTEXT_EXTENDED_REGISTERS = (WOW64_CONTEXT_i386 Or &h00000020) ' cpu specific extensions
1102Const WOW64_CONTEXT_FULL = (WOW64_CONTEXT_CONTROL Or WOW64_CONTEXT_INTEGER Or WOW64_CONTEXT_SEGMENTS)
1103Const WOW64_CONTEXT_ALL = (WOW64_CONTEXT_CONTROL Or WOW64_CONTEXT_INTEGER Or WOW64_CONTEXT_SEGMENTS Or WOW64_CONTEXT_FLOATING_POINT Or WOW64_CONTEXT_DEBUG_REGISTERS Or WOW64_CONTEXT_EXTENDED_REGISTERS)
1104
1105Const WOW64_SIZE_OF_80387_REGISTERS = 80
1106
1107Const WOW64_MAXIMUM_SUPPORTED_EXTENSION = 512
1108
1109Type WOW64_FLOATING_SAVE_AREA
1110    ControlWord As DWord
1111    StatusWord As DWord
1112    TagWord As DWord
1113    ErrorOffset As DWord
1114    ErrorSelector As DWord
1115    DataOffset As DWord
1116    DataSelector As DWord
1117    RegisterArea[ELM(WOW64_SIZE_OF_80387_REGISTERS)] As Byte
1118    Cr0NpxState As DWord
1119End Type
1120TypeDef PWOW64_FLOATING_SAVE_AREA = *WOW64_FLOATING_SAVE_AREA
1121
1122Type WOW64_CONTEXT
1123    ContextFlags As DWord
1124
1125    Dr0 As DWord
1126    Dr1 As DWord
1127    Dr2 As DWord
1128    Dr3 As DWord
1129    Dr6 As DWord
1130    Dr7 As DWord
1131
1132    FloatSave As WOW64_FLOATING_SAVE_AREA
1133
1134    SegGs As DWord
1135    SegFs As DWord
1136    SegEs As DWord
1137    SegDs As DWord
1138
1139    Edi As DWord
1140    Esi As DWord
1141    Ebx As DWord
1142    Edx As DWord
1143    Ecx As DWord
1144    Eax As DWord
1145
1146    Ebp As DWord
1147    Eip As DWord
1148    SegCs As DWord
1149    EFlags As DWord
1150    Esp As DWord
1151    SegSs As DWord
1152
1153    ExtendedRegisters[ELM(WOW64_MAXIMUM_SUPPORTED_EXTENSION)] As Byte
1154End Type
1155
1156TypeDef PWOW64_CONTEXT = *WOW64_CONTEXT
1157
1158Const EXCEPTION_NONCONTINUABLE = &h1
1159Const EXCEPTION_MAXIMUM_PARAMETERS = 15
1160
1161Type EXCEPTION_RECORD
1162    ExceptionCode As DWord
1163    ExceptionFlags As DWord
1164    ExceptionRecord As *EXCEPTION_RECORD
1165    ExceptionAddress As PVOID
1166    NumberParameters As DWord
1167    ExceptionInformation[ELM(EXCEPTION_MAXIMUM_PARAMETERS)] As ULONG_PTR
1168End Type
1169TypeDef PEXCEPTION_RECORD = *EXCEPTION_RECORD
1170
1171Type EXCEPTION_RECORD32
1172    ExceptionCode As DWord
1173    ExceptionFlags As DWord
1174    ExceptionRecord As DWord
1175    ExceptionAddress As DWord
1176    NumberParameters As DWord
1177    ExceptionInformation[ELM(EXCEPTION_MAXIMUM_PARAMETERS)] As DWord
1178End Type
1179TypeDef PEXCEPTION_RECORD32 = *EXCEPTION_RECORD32
1180
1181Type EXCEPTION_RECORD64
1182    ExceptionCode As DWord
1183    ExceptionFlags As DWord
1184    ExceptionRecord As QWord
1185    ExceptionAddress As QWord
1186    NumberParameters As DWord
1187    __unusedAlignment As DWord
1188    ExceptionInformation[ELM(EXCEPTION_MAXIMUM_PARAMETERS)] As QWord
1189End Type
1190TypeDef PEXCEPTION_RECORD64 = *EXCEPTION_RECORD64
1191
1192Type EXCEPTION_POINTERS
1193    ExceptionRecord As PEXCEPTION_RECORD
1194    ContextRecord As PCONTEXT
1195End Type
1196TypeDef PEXCEPTION_POINTERS = *EXCEPTION_POINTERS
1197
1198TypeDef PACCESS_TOKEN = PVOID
1199'TypeDef PSECURITY_DESCRIPTOR = PVOID
1200'TypeDef PSID = PVOID
1201
1202'ACCESS MASK
1203TypeDef ACCESS_MASK = DWord
1204TypeDef PACCESS_MASK = *ACCESS_MASK
1205
1206'ACCESS TYPES
1207
1208'Const DELETE = (&h00010000)
1209Const READ_CONTROL = (&h00020000)
1210Const WRITE_DAC = (&h00040000)
1211Const WRITE_OWNER = (&h00080000)
1212Const SYNCHRONIZE = (&h00100000)
1213
1214Const STANDARD_RIGHTS_REQUIRED = (&h000F0000)
1215
1216Const STANDARD_RIGHTS_READ = (READ_CONTROL)
1217Const STANDARD_RIGHTS_WRITE = (READ_CONTROL)
1218Const STANDARD_RIGHTS_EXECUTE = (READ_CONTROL)
1219
1220Const STANDARD_RIGHTS_ALL = (&h001F0000)
1221
1222Const SPECIFIC_RIGHTS_ALL = (&h0000FFFF)
1223
1224Const ACCESS_SYSTEM_SECURITY = (&h01000000)
1225
1226Const MAXIMUM_ALLOWED = (&h02000000)
1227
1228Const GENERIC_READ = (&h80000000)
1229Const GENERIC_WRITE = (&h40000000)
1230Const GENERIC_EXECUTE = (&h20000000)
1231Const GENERIC_ALL = (&h10000000)
1232
1233Type GENERIC_MAPPING
1234    GenericRead As ACCESS_MASK
1235    GenericWrite As ACCESS_MASK
1236    GenericExecute As ACCESS_MASK
1237    GenericAll As ACCESS_MASK
1238End Type
1239TypeDef PGENERIC_MAPPING = *GENERIC_MAPPING
1240
1241' LUID_AND_ATTRIBUTES
1242Type Align(4) LUID_AND_ATTRIBUTES
1243    Luid As LUID
1244    Attributes As DWord
1245End Type
1246'TypeDef LUID_AND_ATTRIBUTES_ARRAY = LUID_AND_ATTRIBUTES[ANYSIZE_ARRAY]
1247'TypeDef PLUID_AND_ATTRIBUTES_ARRAY = *LUID_AND_ATTRIBUTES_ARRAY
1248
1249' Security Id (SID)
1250
1251#ifndef SID_IDENTIFIER_AUTHORITY_DEFINED
1252#define SID_IDENTIFIER_AUTHORITY_DEFINED
1253Type SID_IDENTIFIER_AUTHORITY
1254    Value[ELM(6)] As Byte
1255End Type
1256TypeDef PSID_IDENTIFIER_AUTHORITY = *SID_IDENTIFIER_AUTHORITY
1257#endif
1258
1259#ifndef SID_DEFINED
1260#define SID_DEFINED
1261Type SID
1262    Revision As Byte
1263    SubAuthorityCount As Byte
1264    IdentifierAuthority As SID_IDENTIFIER_AUTHORITY
1265    SubAuthority[ELM(ANYSIZE_ARRAY)] As DWord
1266End Type
1267TypeDef PSID = *SID
1268#endif
1269
1270Const SID_REVISION = (1)
1271Const SID_MAX_SUB_AUTHORITIES = (15)
1272Const SID_RECOMMENDED_SUB_AUTHORITIES = (1)
1273
1274Const SECURITY_MAX_SID_SIZE = (SizeOf (SID) - SizeOf (DWord) + (SID_MAX_SUB_AUTHORITIES * SizeOf (DWord)))
1275
1276Enum SID_NAME_USE
1277    SidTypeUser = 1
1278    SidTypeGroup
1279    SidTypeDomain
1280    SidTypeAlias
1281    SidTypeWellKnownGroup
1282    SidTypeDeletedAccount
1283    SidTypeInvalid
1284    SidTypeUnknown
1285    SidTypeComputer
1286    SidTypeLabel
1287End Enum
1288TypeDef PSID_NAME_USE = *SID_NAME_USE
1289
1290Type SID_AND_ATTRIBUTES
1291    Sid As PSID
1292    Attributes As DWord
1293End Type
1294TypeDef PSID_AND_ATTRIBUTES = *SID_AND_ATTRIBUTES
1295
1296'TypeDef SID_AND_ATTRIBUTES_ARRAY = SID_AND_ATTRIBUTES[ANYSIZE_ARRAY]
1297'TypeDef PSID_AND_ATTRIBUTES_ARRAY = *SID_AND_ATTRIBUTES_ARRAY
1298
1299Const SID_HASH_SIZE = 32
1300TypeDef SID_HASH_ENTRY = ULONG_PTR
1301TypeDef PSID_HASH_ENTRY = *SID_HASH_ENTRY
1302
1303Type SID_AND_ATTRIBUTES_HASH
1304    SidCount As DWord
1305    SidAttr As PSID_AND_ATTRIBUTES
1306    Hash[ELM(SID_HASH_SIZE)] As SID_HASH_ENTRY
1307End Type
1308TypeDef PSID_AND_ATTRIBUTES_HASH = *SID_AND_ATTRIBUTES_HASH
1309
1310' Universal well-known SIDs
1311'Const SECURITY_NULL_SID_AUTHORITY = [0, 0, 0, 0, 0, 0] As SID_IDENTIFIER_AUTHORITY
1312'Const SECURITY_WORLD_SID_AUTHORITY = [0, 0, 0, 0, 0, 1] As SID_IDENTIFIER_AUTHORITY
1313'Const SECURITY_LOCAL_SID_AUTHORITY = [0, 0, 0, 0, 0, 2] As SID_IDENTIFIER_AUTHORITY
1314'Const SECURITY_CREATOR_SID_AUTHORITY = [0, 0, 0, 0, 0, 3] As SID_IDENTIFIER_AUTHORITY
1315'Const SECURITY_NON_UNIQUE_AUTHORITY = [0, 0, 0, 0, 0, 4] As SID_IDENTIFIER_AUTHORITY
1316'Const SECURITY_RESOURCE_MANAGER_AUTHORITY = [0, 0, 0, 0, 0, 9] As SID_IDENTIFIER_AUTHORITY
1317
1318Const SECURITY_NULL_RID = (&h00000000)
1319Const SECURITY_WORLD_RID = (&h00000000)
1320Const SECURITY_LOCAL_RID = (&h00000000)
1321
1322Const SECURITY_CREATOR_OWNER_RID = (&h00000000)
1323Const SECURITY_CREATOR_GROUP_RID = (&h00000001)
1324
1325Const SECURITY_CREATOR_OWNER_SERVER_RID = (&h00000002)
1326Const SECURITY_CREATOR_GROUP_SERVER_RID = (&h00000003)
1327
1328Const SECURITY_CREATOR_OWNER_RIGHTS_RID = (&h00000004)
1329
1330' NT well-known SIDs
1331'Const SECURITY_NT_AUTHORITY = [0, 0, 0, 0, 0, 9] As SID_IDENTIFIER_AUTHORITY
1332
1333Const SECURITY_DIALUP_RID = (&h00000001)
1334Const SECURITY_NETWORK_RID = (&h00000002)
1335Const SECURITY_BATCH_RID = (&h00000003)
1336Const SECURITY_INTERACTIVE_RID = (&h00000004)
1337Const SECURITY_LOGON_IDS_RID = (&h00000005)
1338Const SECURITY_LOGON_IDS_RID_COUNT = (3)
1339Const SECURITY_SERVICE_RID = (&h00000006)
1340Const SECURITY_ANONYMOUS_LOGON_RID = (&h00000007)
1341Const SECURITY_PROXY_RID = (&h00000008)
1342Const SECURITY_ENTERPRISE_CONTROLLERS_RID = (&h00000009)
1343Const SECURITY_SERVER_LOGON_RID = SECURITY_ENTERPRISE_CONTROLLERS_RID
1344Const SECURITY_PRINCIPAL_SELF_RID = (&h0000000A)
1345Const SECURITY_AUTHENTICATED_USER_RID = (&h0000000B)
1346Const SECURITY_RESTRICTED_CODE_RID = (&h0000000C)
1347Const SECURITY_TERMINAL_SERVER_RID = (&h0000000D)
1348Const SECURITY_REMOTE_LOGON_RID = (&h0000000E)
1349Const SECURITY_THIS_ORGANIZATION_RID = (&h0000000F)
1350Const SECURITY_IUSER_RID = (&h00000011)
1351Const SECURITY_LOCAL_SYSTEM_RID = (&h00000012)
1352Const SECURITY_LOCAL_SERVICE_RID = (&h00000013)
1353Const SECURITY_NETWORK_SERVICE_RID = (&h00000014)
1354
1355Const SECURITY_NT_NON_UNIQUE = (&h00000015)
1356Const SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT = (3)
1357
1358Const SECURITY_ENTERPRISE_READONLY_CONTROLLERS_RID = (&h00000016)
1359
1360Const SECURITY_BUILTIN_DOMAIN_RID = (&h00000020)
1361Const SECURITY_WRITE_RESTRICTED_CODE_RID = (&h00000021)
1362
1363
1364Const SECURITY_PACKAGE_BASE_RID = (&h00000040)
1365Const SECURITY_PACKAGE_RID_COUNT = (2)
1366Const SECURITY_PACKAGE_NTLM_RID = (&h0000000A)
1367Const SECURITY_PACKAGE_SCHANNEL_RID = (&h0000000E)
1368Const SECURITY_PACKAGE_DIGEST_RID = (&h00000015)
1369
1370Const SECURITY_SERVICE_ID_BASE_RID = (&h00000050)
1371Const SECURITY_SERVICE_ID_RID_COUNT = (6)
1372
1373Const SECURITY_RESERVED_ID_BASE_RID = (&h00000051)
1374
1375Const SECURITY_MAX_ALWAYS_FILTERED = (&h000003E7)
1376Const SECURITY_MIN_NEVER_FILTERED = (&h000003E8)
1377
1378Const SECURITY_OTHER_ORGANIZATION_RID = (&h000003E8)
1379
1380' well-known domain relative sub-authority values (RIDs)...
1381' Well-known users ...
1382Const FOREST_USER_RID_MAX = (&h000001F3)
1383
1384Const DOMAIN_USER_RID_ADMIN = (&h000001F4)
1385Const DOMAIN_USER_RID_GUEST = (&h000001F5)
1386Const DOMAIN_USER_RID_KRBTGT = (&h000001F6)
1387
1388Const DOMAIN_USER_RID_MAX = (&h000003E7)
1389
1390' well-known groups ...
1391Const DOMAIN_GROUP_RID_ADMINS = (&h00000200)
1392Const DOMAIN_GROUP_RID_USERS = (&h00000201)
1393Const DOMAIN_GROUP_RID_GUESTS = (&h00000202)
1394Const DOMAIN_GROUP_RID_COMPUTERS = (&h00000203)
1395Const DOMAIN_GROUP_RID_CONTROLLERS = (&h00000204)
1396Const DOMAIN_GROUP_RID_CERT_ADMINS = (&h00000205)
1397Const DOMAIN_GROUP_RID_SCHEMA_ADMINS = (&h00000206)
1398Const DOMAIN_GROUP_RID_ENTERPRISE_ADMINS = (&h00000207)
1399Const DOMAIN_GROUP_RID_POLICY_ADMINS = (&h00000208)
1400Const DOMAIN_GROUP_RID_READONLY_CONTROLLERS = (&h00000209)
1401
1402' well-known aliases ...
1403Const DOMAIN_ALIAS_RID_ADMINS = (&h00000220)
1404Const DOMAIN_ALIAS_RID_USERS = (&h00000221)
1405Const DOMAIN_ALIAS_RID_GUESTS = (&h00000222)
1406Const DOMAIN_ALIAS_RID_POWER_USERS = (&h00000223)
1407
1408Const DOMAIN_ALIAS_RID_ACCOUNT_OPS = (&h00000224)
1409Const DOMAIN_ALIAS_RID_SYSTEM_OPS = (&h00000225)
1410Const DOMAIN_ALIAS_RID_PRINT_OPS = (&h00000226)
1411Const DOMAIN_ALIAS_RID_BACKUP_OPS = (&h00000227)
1412
1413Const DOMAIN_ALIAS_RID_REPLICATOR = (&h00000228)
1414Const DOMAIN_ALIAS_RID_RAS_SERVERS = (&h00000229)
1415Const DOMAIN_ALIAS_RID_PREW2KCOMPACCESS = (&h0000022A)
1416Const DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS = (&h0000022B)
1417Const DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS = (&h0000022C)
1418Const DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS = (&h0000022D)
1419
1420Const DOMAIN_ALIAS_RID_MONITORING_USERS = (&h0000022E)
1421Const DOMAIN_ALIAS_RID_LOGGING_USERS = (&h0000022F)
1422Const DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS = (&h00000230)
1423Const DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS = (&h00000231)
1424Const DOMAIN_ALIAS_RID_DCOM_USERS = (&h00000232)
1425Const DOMAIN_ALIAS_RID_IUSERS = (&h00000238)
1426Const DOMAIN_ALIAS_RID_CRYPTO_OPERATORS = (&h00000239)
1427Const DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP = (&h0000023B)
1428Const DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP = (&h0000023C)
1429Const DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP = (&h0000023D)
1430
1431'Const SECURITY_MANDATORY_LABEL_AUTHORITY = [0, 0, 0, 0 ,0, 16] As SID_IDENTIFIER_AUTHORITY
1432Const SECURITY_MANDATORY_UNTRUSTED_RID = (&h00000000)
1433Const SECURITY_MANDATORY_LOW_RID = (&h00001000)
1434Const SECURITY_MANDATORY_MEDIUM_RID = (&h00002000)
1435Const SECURITY_MANDATORY_HIGH_RID = (&h00003000)
1436Const SECURITY_MANDATORY_SYSTEM_RID = (&h00004000)
1437Const SECURITY_MANDATORY_PROTECTED_PROCESS_RID = (&h00005000)
1438
1439
1440Const SECURITY_MANDATORY_MAXIMUM_USER_RID = SECURITY_MANDATORY_SYSTEM_RID
1441
1442Const MANDATORY_LEVEL_TO_MANDATORY_RID(I) = (I * &h1000)
1443
1444' Well known SID definitions for lookup.
1445Const Enum WELL_KNOWN_SID_TYPE
1446    WinNullSid = 0
1447    WinWorldSid = 1
1448    WinLocalSid = 2
1449    WinCreatorOwnerSid = 3
1450    WinCreatorGroupSid = 4
1451    WinCreatorOwnerServerSid = 5
1452    WinCreatorGroupServerSid = 6
1453    WinNtAuthoritySid = 7
1454    WinDialupSid = 8
1455    WinNetworkSid = 9
1456    WinBatchSid = 10
1457    WinInteractiveSid = 11
1458    WinServiceSid = 12
1459    WinAnonymousSid = 13
1460    WinProxySid = 14
1461    WinEnterpriseControllersSid = 15
1462    WinSelfSid = 16
1463    WinAuthenticatedUserSid = 17
1464    WinRestrictedCodeSid = 18
1465    WinTerminalServerSid = 19
1466    WinRemoteLogonIdSid = 20
1467    WinLogonIdsSid = 21
1468    WinLocalSystemSid = 22
1469    WinLocalServiceSid = 23
1470    WinNetworkServiceSid = 24
1471    WinBuiltinDomainSid = 25
1472    WinBuiltinAdministratorsSid = 26
1473    WinBuiltinUsersSid = 27
1474    WinBuiltinGuestsSid = 28
1475    WinBuiltinPowerUsersSid = 29
1476    WinBuiltinAccountOperatorsSid = 30
1477    WinBuiltinSystemOperatorsSid = 31
1478    WinBuiltinPrintOperatorsSid = 32
1479    WinBuiltinBackupOperatorsSid = 33
1480    WinBuiltinReplicatorSid = 34
1481    WinBuiltinPreWindows2000CompatibleAccessSid = 35
1482    WinBuiltinRemoteDesktopUsersSid = 36
1483    WinBuiltinNetworkConfigurationOperatorsSid = 37
1484    WinAccountAdministratorSid = 38
1485    WinAccountGuestSid = 39
1486    WinAccountKrbtgtSid = 40
1487    WinAccountDomainAdminsSid = 41
1488    WinAccountDomainUsersSid = 42
1489    WinAccountDomainGuestsSid = 43
1490    WinAccountComputersSid = 44
1491    WinAccountControllersSid = 45
1492    WinAccountCertAdminsSid = 46
1493    WinAccountSchemaAdminsSid = 47
1494    WinAccountEnterpriseAdminsSid = 48
1495    WinAccountPolicyAdminsSid = 49
1496    WinAccountRasAndIasServersSid = 50
1497    WinNTLMAuthenticationSid = 51
1498    WinDigestAuthenticationSid = 52
1499    WinSChannelAuthenticationSid = 53
1500    WinThisOrganizationSid = 54
1501    WinOtherOrganizationSid = 55
1502    WinBuiltinIncomingForestTrustBuildersSid = 56
1503    WinBuiltinPerfMonitoringUsersSid = 57
1504    WinBuiltinPerfLoggingUsersSid = 58
1505    WinBuiltinAuthorizationAccessSid = 59
1506    WinBuiltinTerminalServerLicenseServersSid = 60
1507    WinBuiltinDCOMUsersSid = 61
1508    WinBuiltinIUsersSid = 62
1509    WinIUserSid = 63
1510    WinBuiltinCryptoOperatorsSid = 64
1511    WinUntrustedLabelSid = 65
1512    WinLowLabelSid = 66
1513    WinMediumLabelSid = 67
1514    WinHighLabelSid = 68
1515    WinSystemLabelSid = 69
1516    WinWriteRestrictedCodeSid = 70
1517    WinCreatorOwnerRightsSid = 71
1518    WinCacheablePrincipalsGroupSid = 72
1519    WinNonCacheablePrincipalsGroupSid = 73
1520    WinEnterpriseReadonlyControllersSid = 74
1521    WinAccountReadonlyControllersSid = 75
1522    WinBuiltinEventLogReadersGroup = 76
1523End Enum
1524
1525'Const SYSTEM_LUID = [&h3e7, &h0] As LUID
1526'Const ANONYMOUS_LOGON_LUID = [&h3e6, &h0] As LUID
1527'Const LOCALSERVICE_LUID = [&h3e5, &h0] As LUID
1528'Const NETWORKSERVICE_LUID = [&h3e4, &h0] As LUID
1529'Const IUSER_LUID = [&h3e3, &h0] As LUID
1530
1531' User and Group related SID attributes
1532
1533' Group attributes
1534Const SE_GROUP_MANDATORY = (&h00000001)
1535Const SE_GROUP_ENABLED_BY_DEFAULT = (&h00000002)
1536Const SE_GROUP_ENABLED = (&h00000004)
1537Const SE_GROUP_OWNER = (&h00000008)
1538Const SE_GROUP_USE_FOR_DENY_ONLY = (&h00000010)
1539Const SE_GROUP_INTEGRITY = (&h00000020)
1540Const SE_GROUP_INTEGRITY_ENABLED = (&h00000040)
1541Const SE_GROUP_LOGON_ID = (&hC0000000)
1542Const SE_GROUP_RESOURCE = (&h20000000)
1543
1544Const SE_GROUP_VALID_ATTRIBUTES = (SE_GROUP_MANDATORY Or SE_GROUP_ENABLED_BY_DEFAULT Or SE_GROUP_ENABLED Or SE_GROUP_OWNER Or SE_GROUP_USE_FOR_DENY_ONLY Or SE_GROUP_LOGON_ID  Or SE_GROUP_RESOURCE Or SE_GROUP_INTEGRITY Or SE_GROUP_INTEGRITY_ENABLED)
1545
1546' ACL  and  ACE
1547Const ACL_REVISION = (2)
1548Const ACL_REVISION_DS = (4)
1549
1550Const ACL_REVISION1 = (1)
1551Const MIN_ACL_REVISION = ACL_REVISION2
1552Const ACL_REVISION2 = (2)
1553Const ACL_REVISION3 = (3)
1554Const ACL_REVISION4 = (4)
1555Const MAX_ACL_REVISION = ACL_REVISION4
1556
1557Type ACL
1558    AclRevision As Byte
1559    Sbz1 As Byte
1560    AclSize As Word
1561    AceCount As Word
1562    Sbz2 As Word
1563End Type
1564TypeDef PACL = ACL
1565
1566Type ACE_HEADER
1567    AceType As Byte
1568    AceFlags As Byte
1569    AceSize As Word
1570End Type
1571TypeDef PACE_HEADER = *ACE_HEADER
1572
1573Const ACCESS_MIN_MS_ACE_TYPE = (&h0)
1574Const ACCESS_ALLOWED_ACE_TYPE = (&h0)
1575Const ACCESS_DENIED_ACE_TYPE = (&h1)
1576Const SYSTEM_AUDIT_ACE_TYPE = (&h2)
1577Const SYSTEM_ALARM_ACE_TYPE = (&h3)
1578Const ACCESS_MAX_MS_V2_ACE_TYPE = (&h3)
1579
1580Const ACCESS_ALLOWED_COMPOUND_ACE_TYPE = (&h4)
1581Const ACCESS_MAX_MS_V3_ACE_TYPE = (&h4)
1582
1583Const ACCESS_MIN_MS_OBJECT_ACE_TYPE = (&h5)
1584Const ACCESS_ALLOWED_OBJECT_ACE_TYPE = (&h5)
1585Const ACCESS_DENIED_OBJECT_ACE_TYPE = (&h6)
1586Const SYSTEM_AUDIT_OBJECT_ACE_TYPE = (&h7)
1587Const SYSTEM_ALARM_OBJECT_ACE_TYPE = (&h8)
1588Const ACCESS_MAX_MS_OBJECT_ACE_TYPE = (&h8)
1589
1590Const ACCESS_MAX_MS_V4_ACE_TYPE = (&h8)
1591Const ACCESS_MAX_MS_ACE_TYPE = (&h8)
1592
1593Const ACCESS_ALLOWED_CALLBACK_ACE_TYPE = (&h9)
1594Const ACCESS_DENIED_CALLBACK_ACE_TYPE = (&hA)
1595Const ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE = (&hB)
1596Const ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE = (&hC)
1597Const SYSTEM_AUDIT_CALLBACK_ACE_TYPE = (&hD)
1598Const SYSTEM_ALARM_CALLBACK_ACE_TYPE = (&hE)
1599Const SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE = (&hF)
1600Const SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE = (&h10)
1601
1602Const SYSTEM_MANDATORY_LABEL_ACE_TYPE = (&h11)
1603Const ACCESS_MAX_MS_V5_ACE_TYPE = (&h11)
1604
1605Const OBJECT_INHERIT_ACE = (&h1)
1606Const CONTAINER_INHERIT_ACE = (&h2)
1607Const NO_PROPAGATE_INHERIT_ACE = (&h4)
1608Const INHERIT_ONLY_ACE = (&h8)
1609Const INHERITED_ACE = (&h10)
1610Const VALID_INHERIT_FLAGS = (&h1F)
1611
1612Const SUCCESSFUL_ACCESS_ACE_FLAG = (&h40)
1613Const FAILED_ACCESS_ACE_FLAG = (&h80)
1614
1615Type ACCESS_ALLOWED_ACE
1616    Header As ACE_HEADER
1617    Mask As ACCESS_MASK
1618    SidStart As DWord
1619End Type
1620TypeDef PACCESS_ALLOWED_ACE = *ACCESS_ALLOWED_ACE
1621
1622Type ACCESS_DENIED_ACE
1623    Header As ACE_HEADER
1624    Mask As ACCESS_MASK
1625    SidStart As DWord
1626End Type
1627TypeDef PACCESS_DENIED_ACE = *ACCESS_DENIED_ACE
1628
1629Type SYSTEM_AUDIT_ACE
1630    Header As ACE_HEADER
1631    Mask As ACCESS_MASK
1632    SidStart As DWord
1633End Type
1634TypeDef PSYSTEM_AUDIT_ACE = *SYSTEM_AUDIT_ACE
1635
1636Type SYSTEM_ALARM_ACE
1637    Header As ACE_HEADER
1638    Mask As ACCESS_MASK
1639    SidStart As DWord
1640End Type
1641TypeDef PSYSTEM_ALARM_ACE = *SYSTEM_ALARM_ACE
1642
1643Type SYSTEM_MANDATORY_LABEL_ACE
1644    Header As ACE_HEADER
1645    Mask As ACCESS_MASK
1646    SidStart As DWord
1647End Type
1648TypeDef PSYSTEM_MANDATORY_LABEL_ACE = *SYSTEM_MANDATORY_LABEL_ACE
1649
1650Const SYSTEM_MANDATORY_LABEL_NO_WRITE_UP = &h1
1651Const SYSTEM_MANDATORY_LABEL_NO_READ_UP = &h2
1652Const SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP = &h4
1653
1654Const SYSTEM_MANDATORY_LABEL_VALID_MASK = (SYSTEM_MANDATORY_LABEL_NO_WRITE_UP Or SYSTEM_MANDATORY_LABEL_NO_READ_UP Or SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP)
1655
1656Type ACCESS_ALLOWED_OBJECT_ACE
1657    Header As ACE_HEADER
1658    Mask As ACCESS_MASK
1659    Flags As DWord
1660    ObjectType As GUID
1661    InheritedObjectType As GUID
1662    SidStart As DWord
1663End Type
1664TypeDef PACCESS_ALLOWED_OBJECT_ACE = *ACCESS_ALLOWED_OBJECT_ACE
1665
1666Type ACCESS_DENIED_OBJECT_ACE
1667    Header As ACE_HEADER
1668    Mask As ACCESS_MASK
1669    Flags As DWord
1670    ObjectType As GUID
1671    InheritedObjectType As GUID
1672    SidStart As DWord
1673End Type
1674TypeDef PACCESS_DENIED_OBJECT_ACE = *ACCESS_DENIED_OBJECT_ACE
1675
1676Type SYSTEM_AUDIT_OBJECT_ACE
1677    Header As ACE_HEADER
1678    Mask As ACCESS_MASK
1679    Flags As DWord
1680    ObjectType As GUID
1681    InheritedObjectType As GUID
1682    SidStart As DWord
1683End Type
1684TypeDef PSYSTEM_AUDIT_OBJECT_ACE = *SYSTEM_AUDIT_OBJECT_ACE
1685
1686Type SYSTEM_ALARM_OBJECT_ACE
1687    Header As ACE_HEADER
1688    Mask As ACCESS_MASK
1689    Flags As DWord
1690    ObjectType As GUID
1691    InheritedObjectType As GUID
1692    SidStart As DWord
1693End Type
1694TypeDef PSYSTEM_ALARM_OBJECT_ACE = *SYSTEM_ALARM_OBJECT_ACE
1695
1696Type ACCESS_ALLOWED_CALLBACK_ACE
1697    Header As ACE_HEADER
1698    Mask As ACCESS_MASK
1699    SidStart As DWord
1700End Type
1701TypeDef PACCESS_ALLOWED_CALLBACK_ACE = *ACCESS_ALLOWED_CALLBACK_ACE
1702
1703Type ACCESS_DENIED_CALLBACK_ACE
1704    Header As ACE_HEADER
1705    Mask As ACCESS_MASK
1706    SidStart As DWord
1707End Type
1708TypeDef PACCESS_DENIED_CALLBACK_ACE = *ACCESS_DENIED_CALLBACK_ACE
1709
1710Type SYSTEM_AUDIT_CALLBACK_ACE
1711    Header As ACE_HEADER
1712    Mask As ACCESS_MASK
1713    SidStart As DWord
1714End Type
1715TypeDef PSYSTEM_AUDIT_CALLBACK_ACE = *SYSTEM_AUDIT_CALLBACK_ACE
1716
1717Type SYSTEM_ALARM_CALLBACK_ACE
1718    Header As ACE_HEADER
1719    Mask As ACCESS_MASK
1720    SidStart As DWord
1721End Type
1722TypeDef PSYSTEM_ALARM_CALLBACK_ACE = *SYSTEM_ALARM_CALLBACK_ACE
1723
1724Type ACCESS_ALLOWED_CALLBACK_OBJECT_ACE
1725    Header As ACE_HEADER
1726    Mask As ACCESS_MASK
1727    Flags As DWord
1728    ObjectType As GUID
1729    InheritedObjectType As GUID
1730    SidStart As DWord
1731End Type
1732TypeDef PACCESS_ALLOWED_CALLBACK_OBJECT_ACE = *ACCESS_ALLOWED_CALLBACK_OBJECT_ACE
1733
1734Type ACCESS_DENIED_CALLBACK_OBJECT_ACE
1735    Header As ACE_HEADER
1736    Mask As ACCESS_MASK
1737    Flags As DWord
1738    ObjectType As GUID
1739    InheritedObjectType As GUID
1740    SidStart As DWord
1741End Type
1742TypeDef PACCESS_DENIED_CALLBACK_OBJECT_ACE = *ACCESS_DENIED_CALLBACK_OBJECT_ACE
1743
1744Type SYSTEM_AUDIT_CALLBACK_OBJECT_ACE
1745    Header As ACE_HEADER
1746    Mask As ACCESS_MASK
1747    Flags As DWord
1748    ObjectType As GUID
1749    InheritedObjectType As GUID
1750    SidStart As DWord
1751End Type
1752TypeDef PSYSTEM_AUDIT_CALLBACK_OBJECT_ACE = *SYSTEM_AUDIT_CALLBACK_OBJECT_ACE
1753
1754Type SYSTEM_ALARM_CALLBACK_OBJECT_ACE
1755    Header As ACE_HEADER
1756    Mask As ACCESS_MASK
1757    Flags As DWord
1758    ObjectType As GUID
1759    InheritedObjectType As GUID
1760    SidStart As DWord
1761End Type
1762TypeDef PSYSTEM_ALARM_CALLBACK_OBJECT_ACE = *SYSTEM_ALARM_CALLBACK_OBJECT_ACE
1763
1764Const ACE_OBJECT_TYPE_PRESENT = &h1
1765Const ACE_INHERITED_OBJECT_TYPE_PRESENT = &h2
1766
1767Enum ACL_INFORMATION_CLASS
1768    AclRevisionInformation = 1
1769    AclSizeInformation
1770End Enum
1771
1772Type ACL_REVISION_INFORMATION
1773    AclRevision As DWord
1774End Type
1775TypeDef PACL_REVISION_INFORMATION = *ACL_REVISION_INFORMATION
1776
1777Type ACL_SIZE_INFORMATION
1778AceCount As DWord
1779AclBytesInUse As DWord
1780AclBytesFree As DWord
1781End Type
1782TypeDef PACL_SIZE_INFORMATION = *ACL_SIZE_INFORMATION
1783
1784' SECURITY_DESCRIPTOR
1785Const SECURITY_DESCRIPTOR_REVISION = (1)
1786Const SECURITY_DESCRIPTOR_REVISION1 = (1)
1787
1788Const SECURITY_DESCRIPTOR_MIN_LENGTH = (SizeOf (SECURITY_DESCRIPTOR))
1789
1790TypeDef SECURITY_DESCRIPTOR_CONTROL = Word
1791TypeDef PSECURITY_DESCRIPTOR_CONTROL = *SECURITY_DESCRIPTOR_CONTROL
1792
1793Const SE_OWNER_DEFAULTED = (&h0001)
1794Const SE_GROUP_DEFAULTED = (&h0002)
1795Const SE_DACL_PRESENT = (&h0004)
1796Const SE_DACL_DEFAULTED = (&h0008)
1797Const SE_SACL_PRESENT = (&h0010)
1798Const SE_SACL_DEFAULTED = (&h0020)
1799Const SE_DACL_AUTO_INHERIT_REQ = (&h0100)
1800Const SE_SACL_AUTO_INHERIT_REQ = (&h0200)
1801Const SE_DACL_AUTO_INHERITED = (&h0400)
1802Const SE_SACL_AUTO_INHERITED = (&h0800)
1803Const SE_DACL_PROTECTED = (&h1000)
1804Const SE_SACL_PROTECTED = (&h2000)
1805Const SE_RM_CONTROL_VALID = (&h4000)
1806Const SE_SELF_RELATIVE = (&h8000)
1807
1808Type SECURITY_DESCRIPTOR_RELATIVE
1809    Revision As Byte
1810    Sbz1 As Byte
1811    Control As SECURITY_DESCRIPTOR_CONTROL
1812    Owner As DWord
1813    Group As DWord
1814    Sacl As DWord
1815    Dacl As DWord
1816End Type
1817TypeDef PSECURITY_DESCRIPTOR_RELATIVE = *SECURITY_DESCRIPTOR_RELATIVE
1818
1819Type SECURITY_DESCRIPTOR
1820    Revision As Byte
1821    Sbz1 As Byte
1822    Control As SECURITY_DESCRIPTOR_CONTROL
1823    Owner As PSID
1824    Group As PSID
1825    Sacl As PACL
1826    Dacl As PACL
1827End Type
1828TypeDef PSECURITY_DESCRIPTOR = *SECURITY_DESCRIPTOR
1829
1830Type OBJECT_TYPE_LIST
1831    Level As Word
1832    Sbz As Word
1833    ObjectType As *GUID
1834End Type
1835TypeDef POBJECT_TYPE_LIST = *OBJECT_TYPE_LIST
1836
1837Const ACCESS_OBJECT_GUID = 0
1838Const ACCESS_PROPERTY_SET_GUID = 1
1839Const ACCESS_PROPERTY_GUID = 2
1840
1841Const ACCESS_MAX_LEVEL = 4
1842
1843Const Enum AUDIT_EVENT_TYPE
1844    AuditEventObjectAccess,
1845    AuditEventDirectoryServiceAccess
1846End Enum
1847TypeDef PAUDIT_EVENT_TYPE = *AUDIT_EVENT_TYPE
1848
1849Const AUDIT_ALLOW_NO_PRIVILEGE = &h1
1850
1851'Const ACCESS_DS_SOURCE_A = "DS"
1852'Const ACCESS_DS_SOURCE_W = L"DS"
1853'Const ACCESS_DS_OBJECT_TYPE_NAME_A = "Directory Service Object"
1854'Const ACCESS_DS_OBJECT_TYPE_NAME_W = L"Directory Service Object"
1855Const ACCESS_DS_SOURCE = "DS"
1856Const ACCESS_DS_OBJECT_TYPE_NAME = "Directory Service Object"
1857
1858Const SE_PRIVILEGE_ENABLED_BY_DEFAULT = (&h00000001)
1859Const SE_PRIVILEGE_ENABLED = (&h00000002)
1860Const SE_PRIVILEGE_REMOVED = (&h00000004)
1861Const SE_PRIVILEGE_USED_FOR_ACCESS = (&h80000000)
1862
1863Const SE_PRIVILEGE_VALID_ATTRIBUTES = (SE_PRIVILEGE_ENABLED_BY_DEFAULT Or SE_PRIVILEGE_ENABLED  Or SE_PRIVILEGE_REMOVED  Or SE_PRIVILEGE_USED_FOR_ACCESS)
1864
1865Const PRIVILEGE_SET_ALL_NECESSARY = (1)
1866
1867Type PRIVILEGE_SET
1868    PrivilegeCount As DWord
1869    Control As DWord
1870    Privilege[ELM(ANYSIZE_ARRAY)] As LUID_AND_ATTRIBUTES
1871End Type
1872TypeDef PPRIVILEGE_SET = *PRIVILEGE_SET
1873
1874' NT Defined Privileges
1875Const SE_CREATE_TOKEN_NAME = "SeCreateTokenPrivilege"
1876Const SE_ASSIGNPRIMARYTOKEN_NAME = "SeAssignPrimaryTokenPrivilege"
1877Const SE_LOCK_MEMORY_NAME = "SeLockMemoryPrivilege"
1878Const SE_INCREASE_QUOTA_NAME = "SeIncreaseQuotaPrivilege"
1879Const SE_UNSOLICITED_INPUT_NAME = "SeUnsolicitedInputPrivilege"
1880Const SE_MACHINE_ACCOUNT_NAME = "SeMachineAccountPrivilege"
1881Const SE_TCB_NAME = "SeTcbPrivilege"
1882Const SE_SECURITY_NAME = "SeSecurityPrivilege"
1883Const SE_TAKE_OWNERSHIP_NAME = "SeTakeOwnershipPrivilege"
1884Const SE_LOAD_DRIVER_NAME = "SeLoadDriverPrivilege"
1885Const SE_SYSTEM_PROFILE_NAME = "SeSystemProfilePrivilege"
1886Const SE_SYSTEMTIME_NAME = "SeSystemtimePrivilege"
1887Const SE_PROF_SINGLE_PROCESS_NAME = "SeProfileSingleProcessPrivilege"
1888Const SE_INC_BASE_PRIORITY_NAME = "SeIncreaseBasePriorityPrivilege"
1889Const SE_CREATE_PAGEFILE_NAME = "SeCreatePagefilePrivilege"
1890Const SE_CREATE_PERMANENT_NAME = "SeCreatePermanentPrivilege"
1891Const SE_BACKUP_NAME = "SeBackupPrivilege"
1892Const SE_RESTORE_NAME = "SeRestorePrivilege"
1893Const SE_SHUTDOWN_NAME = "SeShutdownPrivilege"
1894Const SE_DEBUG_NAME = "SeDebugPrivilege"
1895Const SE_AUDIT_NAME = "SeAuditPrivilege"
1896Const SE_SYSTEM_ENVIRONMENT_NAME = "SeSystemEnvironmentPrivilege"
1897Const SE_CHANGE_NOTIFY_NAME = "SeChangeNotifyPrivilege"
1898Const SE_REMOTE_SHUTDOWN_NAME = "SeRemoteShutdownPrivilege"
1899Const SE_UNDOCK_NAME = "SeUndockPrivilege"
1900Const SE_SYNC_AGENT_NAME = "SeSyncAgentPrivilege"
1901Const SE_ENABLE_DELEGATION_NAME = "SeEnableDelegationPrivilege"
1902Const SE_MANAGE_VOLUME_NAME = "SeManageVolumePrivilege"
1903Const SE_IMPERSONATE_NAME = "SeImpersonatePrivilege"
1904Const SE_CREATE_GLOBAL_NAME = "SeCreateGlobalPrivilege"
1905Const SE_TRUSTED_CREDMAN_ACCESS_NAME = "SeTrustedCredManAccessPrivilege"
1906Const SE_RELABEL_NAME = "SeRelabelPrivilege"
1907Const SE_INC_WORKING_SET_NAME = "SeIncreaseWorkingSetPrivilege"
1908Const SE_TIME_ZONE_NAME = "SeTimeZonePrivilege"
1909Const SE_CREATE_SYMBOLIC_LINK_NAME = "SeCreateSymbolicLinkPrivilege"
1910
1911' Security Quality Of Service
1912Const Enum SECURITY_IMPERSONATION_LEVEL
1913    SecurityAnonymous
1914    SecurityIdentification
1915    SecurityImpersonation
1916    SecurityDelegation
1917End Enum
1918TypeDef PSECURITY_IMPERSONATION_LEVEL = *SECURITY_IMPERSONATION_LEVEL
1919
1920Const SECURITY_MAX_IMPERSONATION_LEVEL = SecurityDelegation
1921Const SECURITY_MIN_IMPERSONATION_LEVEL = SecurityAnonymous
1922Const DEFAULT_IMPERSONATION_LEVEL = SecurityImpersonation
1923Const VALID_IMPERSONATION_LEVEL(L) = (((L) >= SECURITY_MIN_IMPERSONATION_LEVEL) And ((L) <= SECURITY_MAX_IMPERSONATION_LEVEL))
1924
1925' Token Object Definitions
1926
1927' Token Specific Access Rights.
1928Const TOKEN_ASSIGN_PRIMARY = (&h0001)
1929Const TOKEN_DUPLICATE = (&h0002)
1930Const TOKEN_IMPERSONATE = (&h0004)
1931Const TOKEN_QUERY = (&h0008)
1932Const TOKEN_QUERY_SOURCE = (&h0010)
1933Const TOKEN_ADJUST_PRIVILEGES = (&h0020)
1934Const TOKEN_ADJUST_GROUPS = (&h0040)
1935Const TOKEN_ADJUST_DEFAULT = (&h0080)
1936Const TOKEN_ADJUST_SESSIONID = (&h0100)
1937
1938Const TOKEN_ALL_ACCESS_P = (STANDARD_RIGHTS_REQUIRED Or TOKEN_ASSIGN_PRIMARY Or TOKEN_DUPLICATE  Or TOKEN_IMPERSONATE Or TOKEN_QUERY  Or TOKEN_QUERY_SOURCE Or TOKEN_ADJUST_PRIVILEGES Or TOKEN_ADJUST_GROUPS Or TOKEN_ADJUST_DEFAULT)
1939'#if ((defined(_WIN32_WINNT) And (_WIN32_WINNT > &h0400)) Or (!defined(_WIN32_WINNT)))
1940Const TOKEN_ALL_ACCESS = (TOKEN_ALL_ACCESS_P Or TOKEN_ADJUST_SESSIONID)
1941'#else
1942'Const TOKEN_ALL_ACCESS = (TOKEN_ALL_ACCESS_P)
1943'#endif
1944Const TOKEN_READ = (STANDARD_RIGHTS_READ Or TOKEN_QUERY)
1945Const TOKEN_WRITE = (STANDARD_RIGHTS_WRITE Or TOKEN_ADJUST_PRIVILEGES Or TOKEN_ADJUST_GROUPS Or TOKEN_ADJUST_DEFAULT)
1946Const TOKEN_EXECUTE = (STANDARD_RIGHTS_EXECUTE)
1947
1948' Token Types
1949Const Enum TOKEN_TYPE
1950    TokenPrimary = 1
1951    TokenImpersonation
1952End Enum
1953TypeDef PTOKEN_TYPE = *TOKEN_TYPE
1954
1955Const Enum TOKEN_ELEVATION_TYPE
1956    TokenElevationTypeDefault = 1
1957    TokenElevationTypeFull
1958    TokenElevationTypeLimited
1959End Enum
1960TypeDef PTOKEN_ELEVATION_TYPE = TOKEN_ELEVATION_TYPE
1961
1962' Token Information Classes.
1963Const Enum TOKEN_INFORMATION_CLASS
1964    TokenUser = 1
1965    TokenGroups
1966    TokenPrivileges
1967    TokenOwner
1968    TokenPrimaryGroup
1969    TokenDefaultDacl
1970    TokenSource
1971    TokenType
1972    TokenImpersonationLevel
1973    TokenStatistics
1974    TokenRestrictedSids
1975    TokenSessionId
1976    TokenGroupsAndPrivileges
1977    TokenSessionReference
1978    TokenSandBoxInert
1979    TokenAuditPolicy
1980    TokenOrigin
1981    TokenElevationType
1982    TokenLinkedToken
1983    TokenElevation
1984    TokenHasRestrictions
1985    TokenAccessInformation
1986    TokenVirtualizationAllowed
1987    TokenVirtualizationEnabled
1988    TokenIntegrityLevel
1989    TokenUIAccess
1990    TokenMandatoryPolicy
1991    TokenLogonSid
1992    MaxTokenInfoClass
1993End Enum
1994TypeDef PTOKEN_INFORMATION_CLASS = TOKEN_INFORMATION_CLASS
1995
1996Type TOKEN_USER
1997    User As SID_AND_ATTRIBUTES
1998End Type
1999TypeDef PTOKEN_USER = *TOKEN_USER
2000
2001Type TOKEN_GROUPS
2002    GroupCount As DWord
2003    Groups[ELM(ANYSIZE_ARRAY)] As SID_AND_ATTRIBUTES
2004End Type
2005TypeDef PTOKEN_GROUPS = *TOKEN_GROUPS
2006
2007Type TOKEN_PRIVILEGES
2008    PrivilegeCount As DWord
2009    Privileges[ELM(ANYSIZE_ARRAY)] As LUID_AND_ATTRIBUTES
2010End Type
2011TypeDef PTOKEN_PRIVILEGES = *TOKEN_PRIVILEGES
2012
2013Type TOKEN_OWNER
2014    Owner As PSID
2015End Type
2016TypeDef PTOKEN_OWNER = TOKEN_OWNER
2017
2018Type TOKEN_PRIMARY_GROUP
2019    PrimaryGroup As PSID
2020End Type
2021TypeDef PTOKEN_PRIMARY_GROUP = TOKEN_PRIMARY_GROUP
2022
2023Type TOKEN_DEFAULT_DACL
2024    DefaultDacl As PACL
2025End Type
2026TypeDef PTOKEN_DEFAULT_DACL = *TOKEN_DEFAULT_DACL
2027
2028Type TOKEN_GROUPS_AND_PRIVILEGES
2029    SidCount As DWord
2030    SidLength As DWord
2031    Sids As PSID_AND_ATTRIBUTES
2032    RestrictedSidCount As DWord
2033    RestrictedSidLength As DWord
2034    RestrictedSids As PSID_AND_ATTRIBUTES
2035    PrivilegeCount As DWord
2036    PrivilegeLength As DWord
2037    Privileges As VoidPtr 'PLUID_AND_ATTRIBUTES
2038    AuthenticationId As LUID
2039End Type
2040TypeDef PTOKEN_GROUPS_AND_PRIVILEGES = *TOKEN_GROUPS_AND_PRIVILEGES
2041
2042Type TOKEN_LINKED_TOKEN
2043    LinkedToken As HANDLE
2044End Type
2045TypeDef PTOKEN_LINKED_TOKEN = *TOKEN_LINKED_TOKEN
2046
2047Type TOKEN_ELEVATION
2048    TokenIsElevated As DWord
2049End Type
2050TypeDef PTOKEN_ELEVATION = *TOKEN_ELEVATION
2051
2052Type TOKEN_MANDATORY_LABEL
2053    Label As SID_AND_ATTRIBUTES
2054End Type
2055TypeDef PTOKEN_MANDATORY_LABEL = *TOKEN_MANDATORY_LABEL
2056
2057Const TOKEN_MANDATORY_POLICY_OFF = &h0
2058Const TOKEN_MANDATORY_POLICY_NO_WRITE_UP = &h1
2059Const TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN = &h2
2060
2061Const TOKEN_MANDATORY_POLICY_VALID_MASK = (TOKEN_MANDATORY_POLICY_NO_WRITE_UP Or TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN)
2062
2063Type TOKEN_MANDATORY_POLICY
2064    Policy As DWord
2065End Type
2066TypeDef PTOKEN_MANDATORY_POLICY = *TOKEN_MANDATORY_POLICY
2067
2068Type TOKEN_ACCESS_INFORMATION
2069    SidHash As PSID_AND_ATTRIBUTES_HASH
2070    RestrictedSidHash As PSID_AND_ATTRIBUTES_HASH
2071    Privileges As PTOKEN_PRIVILEGES
2072    AuthenticationId As LUID
2073    TokenType As TOKEN_TYPE
2074    ImpersonationLevel As SECURITY_IMPERSONATION_LEVEL
2075    MandatoryPolicy As TOKEN_MANDATORY_POLICY
2076    Flags As DWord
2077End Type
2078TypeDef PTOKEN_ACCESS_INFORMATION = *TOKEN_ACCESS_INFORMATION
2079
2080Const POLICY_AUDIT_SUBCATEGORY_COUNT = (50)
2081
2082Type TOKEN_AUDIT_POLICY
2083    PerUserPolicy[ELM(((POLICY_AUDIT_SUBCATEGORY_COUNT) >> 1) + 1)] As Byte
2084End Type
2085TypeDef PTOKEN_AUDIT_POLICY = TOKEN_AUDIT_POLICY
2086
2087Const TOKEN_SOURCE_LENGTH = 8
2088
2089Type TOKEN_SOURCE
2090    SourceName[ELM(TOKEN_SOURCE_LENGTH)] As CHAR
2091    SourceIdentifier As LUID
2092End Type
2093TypeDef PTOKEN_SOURCE = *TOKEN_SOURCE
2094
2095Type TOKEN_STATISTICS
2096    TokenId As LUID
2097    AuthenticationId As LUID
2098    ExpirationTime As LARGE_INTEGER
2099    TokenType As TOKEN_TYPE
2100    ImpersonationLevel As SECURITY_IMPERSONATION_LEVEL
2101    DynamicCharged As DWord
2102    DynamicAvailable As DWord
2103    GroupCount As DWord
2104    PrivilegeCount As DWord
2105    ModifiedId As LUID
2106End Type
2107TypeDef PTOKEN_STATISTICS = *TOKEN_STATISTICS
2108
2109Type TOKEN_CONTROL
2110    TokenId As LUID
2111    AuthenticationId As LUID
2112    ModifiedId As LUID
2113    TokenSource As TOKEN_SOURCE
2114End Type
2115TypeDef PTOKEN_CONTROL = *TOKEN_CONTROL
2116
2117Type TOKEN_ORIGIN
2118    OriginatingLogonSession As LUID
2119End Type
2120TypeDef PTOKEN_ORIGIN = *TOKEN_ORIGIN
2121
2122Const Enum MANDATORY_LEVEL
2123    MandatoryLevelUntrusted = 0
2124    MandatoryLevelLow
2125    MandatoryLevelMedium
2126    MandatoryLevelHigh
2127    MandatoryLevelSystem
2128    MandatoryLevelSecureProcess
2129    MandatoryLevelCount
2130End Enum
2131TypeDef PMANDATORY_LEVEL = *MANDATORY_LEVEL
2132
2133Const SECURITY_DYNAMIC_TRACKING = (TRUE)
2134Const SECURITY_STATIC_TRACKING = (FALSE)
2135
2136TypeDef SECURITY_CONTEXT_TRACKING_MODE = BOOLEAN
2137TypeDef PSECURITY_CONTEXT_TRACKING_MODE = *BOOLEAN
2138
2139Type SECURITY_QUALITY_OF_SERVICE
2140    Length As DWord
2141    ImpersonationLevel As SECURITY_IMPERSONATION_LEVEL
2142    ContextTrackingMode As SECURITY_CONTEXT_TRACKING_MODE
2143    EffectiveOnly As BOOLEAN
2144End Type
2145TypeDef PSECURITY_QUALITY_OF_SERVICE = *SECURITY_QUALITY_OF_SERVICE
2146
2147Type PSE_IMPERSONATION_STATE
2148    Token As PACCESS_TOKEN
2149    CopyOnOpen As BOOLEAN
2150    EffectiveOnly As BOOLEAN
2151    Level As SECURITY_IMPERSONATION_LEVEL
2152End Type
2153TypeDef PSE_IMPERSONATION_STATE = *SE_IMPERSONATION_STATE
2154
2155Const DISABLE_MAX_PRIVILEGE = &h1
2156Const SANDBOX_INERT = &h2
2157Const LUA_TOKEN = &h4
2158Const WRITE_RESTRICTED = &h8
2159
2160TypeDef SECURITY_INFORMATION = DWord
2161TypeDef PSECURITY_INFORMATION = *DWord
2162
2163Const OWNER_SECURITY_INFORMATION = (&h00000001)
2164Const GROUP_SECURITY_INFORMATION = (&h00000002)
2165Const DACL_SECURITY_INFORMATION = (&h00000004)
2166Const SACL_SECURITY_INFORMATION = (&h00000008)
2167Const LABEL_SECURITY_INFORMATION = (&h00000010)
2168
2169Const PROTECTED_DACL_SECURITY_INFORMATION = (&h80000000)
2170Const PROTECTED_SACL_SECURITY_INFORMATION = (&h40000000)
2171Const UNPROTECTED_DACL_SECURITY_INFORMATION = (&h20000000)
2172Const UNPROTECTED_SACL_SECURITY_INFORMATION = (&h10000000)
2173
2174Const PROCESS_TERMINATE = (&h0001)
2175Const PROCESS_CREATE_THREAD = (&h0002)
2176Const PROCESS_SET_SESSIONID = (&h0004)
2177Const PROCESS_VM_OPERATION = (&h0008)
2178Const PROCESS_VM_READ = (&h0010)
2179Const PROCESS_VM_WRITE = (&h0020)
2180Const PROCESS_DUP_HANDLE = (&h0040)
2181Const PROCESS_CREATE_PROCESS = (&h0080)
2182Const PROCESS_SET_QUOTA = (&h0100)
2183Const PROCESS_SET_INFORMATION = (&h0200)
2184Const PROCESS_QUERY_INFORMATION = (&h0400)
2185Const PROCESS_SUSPEND_RESUME = (&h0800)
2186Const PROCESS_QUERY_LIMITED_INFORMATION = (&h1000)
2187'#if (NTDDI_VERSION >= NTDDI_LONGHORN)
2188'Const PROCESS_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &hFFFF)
2189'#else
2190Const PROCESS_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &hFFF)
2191'#endif
2192
2193#ifdef _WIN64
2194Const MAXIMUM_PROCESSORS = 64
2195#else
2196Const MAXIMUM_PROCESSORS = 32
2197#endif
2198
2199Const THREAD_TERMINATE = (&h0001)
2200Const THREAD_SUSPEND_RESUME = (&h0002)
2201Const THREAD_GET_CONTEXT = (&h0008)
2202Const THREAD_SET_CONTEXT = (&h0010)
2203Const THREAD_QUERY_INFORMATION = (&h0040)
2204Const THREAD_SET_INFORMATION = (&h0020)
2205Const THREAD_SET_THREAD_TOKEN = (&h0080)
2206Const THREAD_IMPERSONATE = (&h0100)
2207Const THREAD_DIRECT_IMPERSONATION = (&h0200)
2208Const THREAD_SET_LIMITED_INFORMATION = (&h0400)
2209Const THREAD_QUERY_LIMITED_INFORMATION = (&h0800)
2210'#if (NTDDI_VERSION >= NTDDI_LONGHORN)
2211'Const THREAD_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &hFFFF)
2212'#else
2213Const THREAD_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &h3FF)
2214'#endif
2215Const JOB_OBJECT_ASSIGN_PROCESS = (&h0001)
2216Const JOB_OBJECT_SET_ATTRIBUTES = (&h0002)
2217Const JOB_OBJECT_QUERY = (&h0004)
2218Const JOB_OBJECT_TERMINATE = (&h0008)
2219Const JOB_OBJECT_SET_SECURITY_ATTRIBUTES = (&h0010)
2220Const JOB_OBJECT_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &h1F)
2221
2222Type JOB_SET_ARRAY
2223    JobHandle As HANDLE
2224    MemberLevel As DWord
2225    Flags As DWord
2226End Type
2227TypeDef PJOB_SET_ARRAY = *JOB_SET_ARRAY
2228
2229Const FLS_MAXIMUM_AVAILABLE = 128
2230Const TLS_MINIMUM_AVAILABLE = 64
2231
2232Type NT_TIB
2233    ExceptionList As VoidPtr '*EXCEPTION_REGISTRATION_RECORD
2234    StackBase As PVOID
2235    StackLimit As PVOID
2236    SubSystemTib As PVOID
2237'   Union
2238        FiberData As PVOID
2239'       Version As DWord
2240'   End Union
2241    PVOID ArbitraryUserPointer As PVOID
2242    Self As *NT_TIB
2243End Type
2244TypeDef PNT_TIB = *NT_TIB
2245
2246Type NT_TIB32
2247    ExceptionList As DWord
2248    StackBase As DWord
2249    StackLimit As DWord
2250    SubSystemTib As DWord
2251'   Union
2252        FiberData As DWord
2253'       Version As DWord
2254'   End Union
2255    ArbitraryUserPointer As DWord
2256    Self As DWord
2257End Type
2258TypeDef PNT_TIB32 = *NT_TIB32
2259
2260Type NT_TIB64
2261    ExceptionList As QWord
2262    StackBase As QWord
2263    StackLimit As QWord
2264    SubSystemTib As QWord
2265'   Union
2266        FiberData As QWord
2267'       Version As QWord
2268'   End Union
2269    ArbitraryUserPointer As QWord
2270    Self As QWord
2271End Type
2272TypeDef PNT_TIB64 = *NT_TIB64
2273
2274Const THREAD_BASE_PRIORITY_LOWRT = 15
2275Const THREAD_BASE_PRIORITY_MAX = 2
2276Const THREAD_BASE_PRIORITY_MIN = (-2)
2277Const THREAD_BASE_PRIORITY_IDLE = (-15)
2278
2279Type PQUOTA_LIMITS
2280    PagedPoolLimit As SIZE_T
2281    NonPagedPoolLimit As SIZE_T
2282    MinimumWorkingSetSize As SIZE_T
2283    MaximumWorkingSetSize As SIZE_T
2284    PagefileLimit As SIZE_T
2285    TimeLimit As LARGE_INTEGER
2286End Type
2287TypeDef PQUOTA_LIMITS = *QUOTA_LIMITS
2288
2289Const QUOTA_LIMITS_HARDWS_MIN_ENABLE = &h00000001
2290Const QUOTA_LIMITS_HARDWS_MIN_DISABLE = &h00000002
2291Const QUOTA_LIMITS_HARDWS_MAX_ENABLE = &h00000004
2292Const QUOTA_LIMITS_HARDWS_MAX_DISABLE = &h00000008
2293Const QUOTA_LIMITS_USE_DEFAULT_LIMITS = &h00000010
2294
2295Const PS_RATE_PHASE_BITS = 4
2296Const PS_RATE_PHASE_MASK = ((1 As DWord << PS_RATE_PHASE_BITS) - 1)
2297
2298Const Enum PS_RATE_PHASE
2299    PsRateOneSecond = 0
2300    PsRateTwoSecond
2301    PsRateThreeSecond
2302    PsRateMaxPhase
2303End Enum
2304
2305Type RATE_QUOTA_LIMIT
2306    RateData As DWord
2307    dummy As DWord
2308'   Type
2309'       DWORD RatePhase     : PS_RATE_PHASE_BITS;
2310'       DWORD RatePercent   : 28;
2311'   End Type
2312End Type
2313TypeDef PRATE_QUOTA_LIMIT = *RATE_QUOTA_LIMIT
2314
2315'#if !defined(SORTPP_PASS) && !defined(MIDL_PASS) && !defined(RC_INVOKED) && defined(_WIN64) && !defined(_X86AMD64_)
2316'C_ASSERT (sizeof (DWORD) * 8 - PS_RATE_PHASE_BITS == 28);
2317'#endif
2318
2319Type PQUOTA_LIMITS_EX
2320    PagedPoolLimit As SIZE_T
2321    NonPagedPoolLimit As SIZE_T
2322    MinimumWorkingSetSize As SIZE_T
2323    MaximumWorkingSetSize As SIZE_T
2324    PagefileLimit As SIZE_T
2325    TimeLimit As LARGE_INTEGER
2326    WorkingSetLimit As SIZE_T
2327    Reserved2 As SIZE_T
2328    Reserved3 As SIZE_T
2329    Reserved4 As SIZE_T
2330    Flags As DWord
2331    CpuRateLimit As RATE_QUOTA_LIMIT
2332End Type
2333TypeDef PQUOTA_LIMITS_EX = *QUOTA_LIMITS_EX
2334
2335Type IO_COUNTERS
2336    ReadOperationCount As QWord
2337    WriteOperationCount As QWord
2338    OtherOperationCount As QWord
2339    ReadTransferCount As QWord
2340    WriteTransferCount As QWord
2341    OtherTransferCount As QWord
2342End Type
2343TypeDef PIO_COUNTERS = IO_COUNTERS
2344
2345Type JOBOBJECT_BASIC_ACCOUNTING_INFORMATION
2346    TotalUserTime As LARGE_INTEGER
2347    TotalKernelTime As LARGE_INTEGER
2348    ThisPeriodTotalUserTime As LARGE_INTEGER
2349    ThisPeriodTotalKernelTime As LARGE_INTEGER
2350    TotalPageFaultCount As DWord
2351    TotalProcesses As DWord
2352    ActiveProcesses As DWord
2353    TotalTerminatedProcesses As DWord
2354End Type
2355TypeDef PJOBOBJECT_BASIC_ACCOUNTING_INFORMATION = *JOBOBJECT_BASIC_ACCOUNTING_INFORMATION
2356
2357Type JOBOBJECT_BASIC_LIMIT_INFORMATION
2358    PerProcessUserTimeLimit As LARGE_INTEGER
2359    PerJobUserTimeLimit As LARGE_INTEGER
2360    LimitFlags As DWord
2361    MinimumWorkingSetSize As SIZE_T
2362    MaximumWorkingSetSize As SIZE_T
2363    ActiveProcessLimit As DWord
2364    Affinity As ULONG_PTR
2365    PriorityClass As DWord
2366    SchedulingClass As DWord
2367End Type
2368TypeDef PJOBOBJECT_BASIC_LIMIT_INFORMATION = *JOBOBJECT_BASIC_LIMIT_INFORMATION
2369
2370Type JOBOBJECT_EXTENDED_LIMIT_INFORMATION
2371    BasicLimitInformation As JOBOBJECT_BASIC_LIMIT_INFORMATION
2372    IoInfo As IO_COUNTERS
2373    ProcessMemoryLimit As SIZE_T
2374    JobMemoryLimitt As SIZE_T
2375    PeakProcessMemoryUsedt As SIZE_T
2376    PeakJobMemoryUsedt As SIZE_T
2377End Type
2378TypeDef PJOBOBJECT_EXTENDED_LIMIT_INFORMATION = *JOBOBJECT_EXTENDED_LIMIT_INFORMATION
2379
2380Type JOBOBJECT_BASIC_PROCESS_ID_LIST
2381    NumberOfAssignedProcesses As DWord
2382    NumberOfProcessIdsInList As DWord
2383    ProcessIdList[1] As ULONG_PTR
2384End Type
2385TypeDef PJOBOBJECT_BASIC_PROCESS_ID_LIST = *JOBOBJECT_BASIC_PROCESS_ID_LIST
2386
2387Type JOBOBJECT_BASIC_UI_RESTRICTIONS
2388    UIRestrictionsClass As DWord
2389End Type
2390TypeDef PJOBOBJECT_BASIC_UI_RESTRICTIONS = *JOBOBJECT_BASIC_UI_RESTRICTIONS
2391
2392Type _JOBOBJECT_SECURITY_LIMIT_INFORMATION
2393    SecurityLimitFlags As DWord
2394    JobToken As HANDLE
2395    SidsToDisable As PTOKEN_GROUPS
2396    PrivilegesToDelete As PTOKEN_PRIVILEGES
2397    RestrictedSids As PTOKEN_GROUPS
2398End Type
2399TypeDef PJOBOBJECT_SECURITY_LIMIT_INFORMATION = *JOBOBJECT_SECURITY_LIMIT_INFORMATION
2400
2401Type JOBOBJECT_END_OF_JOB_TIME_INFORMATION
2402    EndOfJobTimeAction As DWord
2403End Type
2404TypeDef PJOBOBJECT_END_OF_JOB_TIME_INFORMATION = *JOBOBJECT_END_OF_JOB_TIME_INFORMATION
2405
2406Type JOBOBJECT_ASSOCIATE_COMPLETION_PORT
2407    CompletionKey As PVOID
2408    CompletionPort As HANDLE
2409End Type
2410TypeDef PJOBOBJECT_ASSOCIATE_COMPLETION_PORT = *JOBOBJECT_ASSOCIATE_COMPLETION_PORT
2411
2412Type JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION
2413    BasicInfo As JOBOBJECT_BASIC_ACCOUNTING_INFORMATION
2414    IoInfo As IO_COUNTERS
2415End Type
2416TypeDef PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION = *JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION
2417
2418Type JOBOBJECT_JOBSET_INFORMATION
2419    MemberLevel As DWord
2420End Type
2421TypeDef PJOBOBJECT_JOBSET_INFORMATION = *JOBOBJECT_JOBSET_INFORMATION
2422
2423Const JOB_OBJECT_TERMINATE_AT_END_OF_JOB = 0
2424Const JOB_OBJECT_POST_AT_END_OF_JOB = 1
2425
2426' Completion Port Messages for job objects
2427Const JOB_OBJECT_MSG_END_OF_JOB_TIME = 1
2428Const JOB_OBJECT_MSG_END_OF_PROCESS_TIME = 2
2429Const JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT = 3
2430Const JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO = 4
2431Const JOB_OBJECT_MSG_NEW_PROCESS = 6
2432Const JOB_OBJECT_MSG_EXIT_PROCESS = 7
2433Const JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS = 8
2434Const JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT = 9
2435Const JOB_OBJECT_MSG_JOB_MEMORY_LIMIT = 10
2436
2437' Basic Limits
2438Const JOB_OBJECT_LIMIT_WORKINGSET = &h00000001
2439Const JOB_OBJECT_LIMIT_PROCESS_TIME = &h00000002
2440Const JOB_OBJECT_LIMIT_JOB_TIME = &h00000004
2441Const JOB_OBJECT_LIMIT_ACTIVE_PROCESS = &h00000008
2442Const JOB_OBJECT_LIMIT_AFFINITY = &h00000010
2443Const JOB_OBJECT_LIMIT_PRIORITY_CLASS = &h00000020
2444Const JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME = &h00000040
2445Const JOB_OBJECT_LIMIT_SCHEDULING_CLASS = &h00000080
2446
2447' Extended Limits
2448Const JOB_OBJECT_LIMIT_PROCESS_MEMORY = &h00000100
2449Const JOB_OBJECT_LIMIT_JOB_MEMORY = &h00000200
2450Const JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION = &h00000400
2451Const JOB_OBJECT_LIMIT_BREAKAWAY_OK = &h00000800
2452Const JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK = &h00001000
2453Const JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE = &h00002000
2454
2455Const JOB_OBJECT_LIMIT_RESERVED2 = &h00004000
2456Const JOB_OBJECT_LIMIT_RESERVED3 = &h00008000
2457Const JOB_OBJECT_LIMIT_RESERVED4 = &h00010000
2458Const JOB_OBJECT_LIMIT_RESERVED5 = &h00020000
2459Const JOB_OBJECT_LIMIT_RESERVED6 = &h00040000
2460
2461
2462Const JOB_OBJECT_LIMIT_VALID_FLAGS = &h0007ffff
2463
2464Const JOB_OBJECT_BASIC_LIMIT_VALID_FLAGS = &h000000ff
2465Const JOB_OBJECT_EXTENDED_LIMIT_VALID_FLAGS = &h00003fff
2466Const JOB_OBJECT_RESERVED_LIMIT_VALID_FLAGS = &h0007ffff
2467
2468' UI restrictions for jobs
2469Const JOB_OBJECT_UILIMIT_NONE = &h00000000
2470
2471Const JOB_OBJECT_UILIMIT_HANDLES = &h00000001
2472Const JOB_OBJECT_UILIMIT_READCLIPBOARD = &h00000002
2473Const JOB_OBJECT_UILIMIT_WRITECLIPBOARD = &h00000004
2474Const JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS = &h00000008
2475Const JOB_OBJECT_UILIMIT_DISPLAYSETTINGS = &h00000010
2476Const JOB_OBJECT_UILIMIT_GLOBALATOMS = &h00000020
2477Const JOB_OBJECT_UILIMIT_DESKTOP = &h00000040
2478Const JOB_OBJECT_UILIMIT_EXITWINDOWS = &h00000080
2479
2480Const JOB_OBJECT_UILIMIT_ALL = &h000000FF
2481
2482Const JOB_OBJECT_UI_VALID_FLAGS = &h000000FF
2483
2484Const JOB_OBJECT_SECURITY_NO_ADMIN = &h00000001
2485Const JOB_OBJECT_SECURITY_RESTRICTED_TOKEN = &h00000002
2486Const JOB_OBJECT_SECURITY_ONLY_TOKEN = &h00000004
2487Const JOB_OBJECT_SECURITY_FILTER_TOKENS = &h00000008
2488
2489Const JOB_OBJECT_SECURITY_VALID_FLAGS = &h0000000f
2490
2491Enum JOBOBJECTINFOCLASS
2492    JobObjectBasicAccountingInformation = 1
2493    JobObjectBasicLimitInformation
2494    JobObjectBasicProcessIdList
2495    JobObjectBasicUIRestrictions
2496    JobObjectSecurityLimitInformation
2497    JobObjectEndOfJobTimeInformation
2498    JobObjectAssociateCompletionPortInformation
2499    JobObjectBasicAndIoAccountingInformation
2500    JobObjectExtendedLimitInformation
2501    JobObjectJobSetInformation
2502    MaxJobObjectInfoClass
2503End Enum
2504
2505Const EVENT_MODIFY_STATE = &h0002
2506Const EVENT_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &h3)
2507Const MUTANT_QUERY_STATE = &h0001
2508
2509Const MUTANT_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or MUTANT_QUERY_STATE)
2510Const SEMAPHORE_MODIFY_STATE = &h0002
2511Const SEMAPHORE_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &h3)
2512
2513' Timer Specific Access Rights.
2514Const TIMER_QUERY_STATE = &h0001
2515Const TIMER_MODIFY_STATE = &h0002
2516
2517Const TIMER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or TIMER_QUERY_STATE Or TIMER_MODIFY_STATE)
2518
2519Const TIME_ZONE_ID_UNKNOWN = 0
2520Const TIME_ZONE_ID_STANDARD = 1
2521Const TIME_ZONE_ID_DAYLIGHT = 2
2522
2523Enum LOGICAL_PROCESSOR_RELATIONSHIP
2524    RelationProcessorCore
2525    RelationNumaNode
2526    RelationCache
2527    RelationProcessorPackage
2528End Enum
2529
2530Const LTP_PC_SMT = 1
2531
2532Enum PROCESSOR_CACHE_TYPE
2533    CacheUnified
2534    CacheInstruction
2535    CacheData
2536    CacheTrace
2537End Enum
2538
2539Const CACHE_FULLY_ASSOCIATIVE = &hFF
2540
2541Type CACHE_DESCRIPTOR
2542    Level As Byte
2543    Associativity As Byte
2544    LineSize As Word
2545    Size As DWord
2546    Type_ As PROCESSOR_CACHE_TYPE
2547End Type
2548TypeDef PCACHE_DESCRIPTOR = *CACHE_DESCRIPTOR
2549
2550Type SYSTEM_LOGICAL_PROCESSOR_INFORMATION
2551    ProcessorMask As ULONG_PTR
2552    Relationship As LOGICAL_PROCESSOR_RELATIONSHIP
2553'   Union
2554'       struct {
2555'           Flags As Byte
2556'       } ProcessorCore;
2557'       struct {
2558'           NodeNumber As DWord
2559'       } NumaNode;
2560        Cache As CACHE_DESCRIPTOR
2561'       Reserved[ELM(2)] As ULONGLONG
2562'   End Union
2563End Type
2564TypeDef PSYSTEM_LOGICAL_PROCESSOR_INFORMATION = *SYSTEM_LOGICAL_PROCESSOR_INFORMATION
2565
2566Const PROCESSOR_INTEL_386 = 386
2567Const PROCESSOR_INTEL_486 = 486
2568Const PROCESSOR_INTEL_PENTIUM = 586
2569Const PROCESSOR_INTEL_IA64 = 2200
2570Const PROCESSOR_AMD_X8664 = 8664
2571Const PROCESSOR_MIPS_R4000 = 4000    ' incl R4101 & R3910 for Windows CE
2572Const PROCESSOR_ALPHA_21064 = 21064
2573Const PROCESSOR_PPC_601 = 601
2574Const PROCESSOR_PPC_603 = 603
2575Const PROCESSOR_PPC_604 = 604
2576Const PROCESSOR_PPC_620 = 620
2577Const PROCESSOR_HITACHI_SH3 = 10003   ' Windows CE
2578Const PROCESSOR_HITACHI_SH3E = 10004  ' Windows CE
2579Const PROCESSOR_HITACHI_SH4 = 10005   ' Windows CE
2580Const PROCESSOR_MOTOROLA_821 = 821    ' Windows CE
2581Const PROCESSOR_SHx_SH3 = 103         ' Windows CE
2582Const PROCESSOR_SHx_SH4 = 104         ' Windows CE
2583Const PROCESSOR_STRONGARM = 2577      ' Windows CE - 0xA11
2584Const PROCESSOR_ARM720 = 1824         ' Windows CE - 0x720
2585Const PROCESSOR_ARM820 = 2080         ' Windows CE - 0x820
2586Const PROCESSOR_ARM920 = 2336         ' Windows CE - 0x920
2587Const PROCESSOR_ARM_7TDMI = 70001     ' Windows CE
2588Const PROCESSOR_OPTIL = &h494f        ' MSIL
2589
2590Const PROCESSOR_ARCHITECTURE_INTEL = 0
2591Const PROCESSOR_ARCHITECTURE_MIPS = 1
2592Const PROCESSOR_ARCHITECTURE_ALPHA = 2
2593Const PROCESSOR_ARCHITECTURE_PPC = 3
2594Const PROCESSOR_ARCHITECTURE_SHX = 4
2595Const PROCESSOR_ARCHITECTURE_ARM = 5
2596Const PROCESSOR_ARCHITECTURE_IA64 = 6
2597Const PROCESSOR_ARCHITECTURE_ALPHA64 = 7
2598Const PROCESSOR_ARCHITECTURE_MSIL = 8
2599Const PROCESSOR_ARCHITECTURE_AMD64 = 9
2600Const PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 = 10
2601
2602Const PROCESSOR_ARCHITECTURE_UNKNOWN = &hFFFF
2603
2604Const PF_FLOATING_POINT_PRECISION_ERRATA = 0
2605Const PF_FLOATING_POINT_EMULATED = 1
2606Const PF_COMPARE_EXCHANGE_DOUBLE = 2
2607Const PF_MMX_INSTRUCTIONS_AVAILABLE = 3
2608Const PF_PPC_MOVEMEM_64BIT_OK = 4
2609Const PF_ALPHA_BYTE_INSTRUCTIONS = 5
2610Const PF_XMMI_INSTRUCTIONS_AVAILABLE = 6
2611Const PF_3DNOW_INSTRUCTIONS_AVAILABLE = 7
2612Const PF_RDTSC_INSTRUCTION_AVAILABLE = 8
2613Const PF_PAE_ENABLED = 9
2614Const PF_XMMI64_INSTRUCTIONS_AVAILABLE = 10
2615Const PF_SSE_DAZ_MODE_AVAILABLE = 11
2616Const PF_NX_ENABLED = 12
2617Const PF_SSE3_INSTRUCTIONS_AVAILABLE = 13
2618Const PF_COMPARE_EXCHANGE128 = 14
2619Const PF_COMPARE64_EXCHANGE128 = 15
2620Const PF_CHANNELS_ENABLED = 16
2621
2622Type MEMORY_BASIC_INFORMATION
2623    BaseAddress As VoidPtr
2624    AllocationBase As VoidPtr
2625    AllocationProtect As DWord
2626    RegionSize As SIZE_T
2627    State As DWord
2628    Protect As DWord
2629    MBIType As DWord
2630End Type
2631TypeDef PMEMORY_BASIC_INFORMATION = *MEMORY_BASIC_INFORMATION
2632
2633Type MEMORY_BASIC_INFORMATION32
2634    BaseAddress As DWord
2635    AllocationBase As DWord
2636    AllocationProtect As DWord
2637    RegionSize As DWord
2638    State As DWord
2639    Protect As DWord
2640    Type_ As DWord
2641End Type
2642TypeDef PMEMORY_BASIC_INFORMATION32 = *MEMORY_BASIC_INFORMATION32
2643
2644Type Align(16) MEMORY_BASIC_INFORMATION64
2645    BaseAddress As QWord
2646    AllocationBase As QWord
2647    AllocationProtect As DWord
2648    __alignment1 As DWord
2649    RegionSize As QWord
2650    State As DWord
2651    Protect As DWord
2652    Type_ As DWord
2653    __alignment2 As DWord
2654End Type
2655TypeDef PMEMORY_BASIC_INFORMATION64 = *MEMORY_BASIC_INFORMATION64
2656
2657Const SECTION_QUERY = &h0001
2658Const SECTION_MAP_WRITE = &h0002
2659Const SECTION_MAP_READ = &h0004
2660Const SECTION_MAP_EXECUTE = &h0008
2661Const SECTION_EXTEND_SIZE = &h0010
2662Const SECTION_MAP_EXECUTE_EXPLICIT = &h0020
2663
2664Const SECTION_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SECTION_QUERY Or SECTION_MAP_WRITE Or SECTION_MAP_READ Or SECTION_MAP_EXECUTE Or SECTION_EXTEND_SIZE)
2665
2666Const SESSION_QUERY_ACCESS = &h0001
2667Const SESSION_MODIFY_ACCESS = &h0002
2668
2669Const SESSION_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SESSION_QUERY_ACCESS Or SESSION_MODIFY_ACCESS)
2670
2671Const PAGE_NOACCESS = &h01
2672Const PAGE_READONLY = &h02
2673Const PAGE_READWRITE = &h04
2674Const PAGE_WRITECOPY = &h08
2675Const PAGE_EXECUTE = &h10
2676Const PAGE_EXECUTE_READ = &h20
2677Const PAGE_EXECUTE_READWRITE = &h40
2678Const PAGE_EXECUTE_WRITECOPY = &h80
2679Const PAGE_GUARD = &h100
2680Const PAGE_NOCACHE = &h200
2681Const PAGE_WRITECOMBINE = &h400
2682Const MEM_COMMIT = &h1000
2683Const MEM_RESERVE = &h2000
2684Const MEM_DECOMMIT = &h4000
2685Const MEM_RELEASE = &h8000
2686Const MEM_FREE = &h10000
2687Const MEM_PRIVATE = &h20000
2688Const MEM_MAPPED = &h40000
2689Const MEM_RESET = &h80000
2690Const MEM_TOP_DOWN = &h100000
2691Const MEM_WRITE_WATCH = &h200000
2692Const MEM_PHYSICAL = &h400000
2693Const MEM_ROTATE = &h800000
2694Const MEM_LARGE_PAGES = &h20000000
2695Const MEM_4MB_PAGES = &h80000000
2696Const SEC_FILE = &h800000
2697Const SEC_IMAGE = &h1000000
2698Const SEC_PROTECTED_IMAGE = &h2000000
2699Const SEC_RESERVE = &h4000000
2700Const SEC_COMMIT = &h8000000
2701Const SEC_NOCACHE = &h10000000
2702Const SEC_WRITECOMBINE = &h40000000
2703Const SEC_LARGE_PAGES = &h80000000
2704Const MEM_IMAGE = SEC_IMAGE
2705Const WRITE_WATCH_FLAG_RESET = &h01
2706
2707' Define access rights to files and directories
2708Const FILE_READ_DATA = &h0001                 ' file & pipe
2709Const FILE_LIST_DIRECTORY = &h0001            ' directory
2710
2711Const FILE_WRITE_DATA = &h0002                ' file & pipe
2712Const FILE_ADD_FILE = &h0002                  ' directory
2713
2714Const FILE_APPEND_DATA = &h0004               ' file
2715Const FILE_ADD_SUBDIRECTORY = &h0004          ' directory
2716Const FILE_CREATE_PIPE_INSTANCE = &h0004      ' named pipe
2717
2718
2719Const FILE_READ_EA = &h0008                   ' file & directory
2720
2721Const FILE_WRITE_EA = &h0010                  ' file & directory
2722
2723Const FILE_EXECUTE = &h0020                   ' file
2724Const FILE_TRAVERSE = &h0020                  ' directory
2725
2726Const FILE_DELETE_CHILD = &h0040              ' directory
2727
2728Const FILE_READ_ATTRIBUTES = &h0080           ' all
2729
2730Const FILE_WRITE_ATTRIBUTES = &h0100          ' all
2731
2732Const FILE_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &h1FF)
2733Const FILE_GENERIC_READ = (STANDARD_RIGHTS_READ Or FILE_READ_DATA Or FILE_READ_ATTRIBUTES Or FILE_READ_EA Or SYNCHRONIZE)
2734Const FILE_GENERIC_WRITE = (STANDARD_RIGHTS_WRITE Or FILE_WRITE_DATA Or FILE_WRITE_ATTRIBUTES Or FILE_WRITE_EA Or FILE_APPEND_DATA Or SYNCHRONIZE)
2735Const FILE_GENERIC_EXECUTE = (STANDARD_RIGHTS_EXECUTE Or FILE_READ_ATTRIBUTES Or FILE_EXECUTE Or SYNCHRONIZE)
2736
2737Const FILE_SHARE_READ = &h00000001
2738Const FILE_SHARE_WRITE = &h00000002
2739Const FILE_SHARE_DELETE = &h00000004
2740Const FILE_ATTRIBUTE_READONLY = &h00000001
2741Const FILE_ATTRIBUTE_HIDDEN = &h00000002
2742Const FILE_ATTRIBUTE_SYSTEM = &h00000004
2743Const FILE_ATTRIBUTE_DIRECTORY = &h00000010
2744Const FILE_ATTRIBUTE_ARCHIVE = &h00000020
2745Const FILE_ATTRIBUTE_DEVICE = &h00000040
2746Const FILE_ATTRIBUTE_NORMAL = &h00000080
2747Const FILE_ATTRIBUTE_TEMPORARY = &h00000100
2748Const FILE_ATTRIBUTE_SPARSE_FILE = &h00000200
2749Const FILE_ATTRIBUTE_REPARSE_POINT = &h00000400
2750Const FILE_ATTRIBUTE_COMPRESSED = &h00000800
2751Const FILE_ATTRIBUTE_OFFLINE = &h00001000
2752Const FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = &h00002000
2753Const FILE_ATTRIBUTE_ENCRYPTED = &h00004000
2754Const FILE_ATTRIBUTE_VIRTUAL = &h00010000
2755Const FILE_NOTIFY_CHANGE_FILE_NAME = &h00000001
2756Const FILE_NOTIFY_CHANGE_DIR_NAME = &h00000002
2757Const FILE_NOTIFY_CHANGE_ATTRIBUTES = &h00000004
2758Const FILE_NOTIFY_CHANGE_SIZE = &h00000008
2759Const FILE_NOTIFY_CHANGE_LAST_WRITE = &h00000010
2760Const FILE_NOTIFY_CHANGE_LAST_ACCESS = &h00000020
2761Const FILE_NOTIFY_CHANGE_CREATION = &h00000040
2762Const FILE_NOTIFY_CHANGE_SECURITY = &h00000100
2763Const FILE_ACTION_ADDED = &h00000001
2764Const FILE_ACTION_REMOVED = &h00000002
2765Const FILE_ACTION_MODIFIED = &h00000003
2766Const FILE_ACTION_RENAMED_OLD_NAME = &h00000004
2767Const FILE_ACTION_RENAMED_NEW_NAME = &h00000005
2768Const MAILSLOT_NO_MESSAGE = (-1 As DWord)
2769Const MAILSLOT_WAIT_FOREVER = (-1 As DWord)
2770Const FILE_CASE_SENSITIVE_SEARCH = &h00000001
2771Const FILE_CASE_PRESERVED_NAMES = &h00000002
2772Const FILE_UNICODE_ON_DISK = &h00000004
2773Const FILE_PERSISTENT_ACLS = &h00000008
2774Const FILE_FILE_COMPRESSION = &h00000010
2775Const FILE_VOLUME_QUOTAS = &h00000020
2776Const FILE_SUPPORTS_SPARSE_FILES = &h00000040
2777Const FILE_SUPPORTS_REPARSE_POINTS = &h00000080
2778Const FILE_SUPPORTS_REMOTE_STORAGE = &h00000100
2779Const FILE_VOLUME_IS_COMPRESSED = &h00008000
2780Const FILE_SUPPORTS_OBJECT_IDS = &h00010000
2781Const FILE_SUPPORTS_ENCRYPTION = &h00020000
2782Const FILE_NAMED_STREAMS = &h00040000
2783Const FILE_READ_ONLY_VOLUME = &h00080000
2784Const FILE_SEQUENTIAL_WRITE_ONCE = &h00100000
2785Const FILE_SUPPORTS_TRANSACTIONS = &h00200000
2786
2787Type FILE_NOTIFY_INFORMATION
2788    NextEntryOffset As DWord
2789    Action As DWord
2790    FileNameLength As DWord
2791    FileName[ELM(1)] As WCHAR
2792End Type
2793TypeDef PFILE_NOTIFY_INFORMATION = *FILE_NOTIFY_INFORMATION
2794
2795Type /*Union*/ FILE_SEGMENT_ELEMENT
2796    Buffer As PVOID64
2797'   Alignment As QWord
2798End Type 'Union
2799TypeDef PFILE_SEGMENT_ELEMENT = *FILE_SEGMENT_ELEMENT
2800
2801Type REPARSE_GUID_DATA_BUFFER
2802    ReparseTag As DWord
2803    ReparseDataLength As Word
2804    Reserved As Word
2805    ReparseGuid As GUID
2806'   struct {
2807        DataBuffer[ELM(1)] As Byte
2808'   } GenericReparseBuffer;
2809End Type
2810TypeDef PREPARSE_GUID_DATA_BUFFER = *REPARSE_GUID_DATA_BUFFER
2811
2812'Const REPARSE_GUID_DATA_BUFFER_HEADER_SIZE = FIELD_OFFSET(REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer)
2813
2814' Maximum allowed size of the reparse data.
2815Const MAXIMUM_REPARSE_DATA_BUFFER_SIZE = (16 * 1024)
2816
2817' Predefined reparse tags.
2818Const IO_REPARSE_TAG_RESERVED_ZERO = 0
2819Const IO_REPARSE_TAG_RESERVED_ONE = 1
2820
2821Const IO_REPARSE_TAG_RESERVED_RANGE = IO_REPARSE_TAG_RESERVED_ONE
2822
2823
2824Const IsReparseTagMicrosoft(_tag) = ((_tag) And &h80000000)
2825Const IsReparseTagNameSurrogate(_tag) = ((_tag) And &h0000000)
2826
2827Const IO_REPARSE_TAG_MOUNT_POINT = &hA0000003
2828Const IO_REPARSE_TAG_HSM = &hC0000004
2829Const IO_REPARSE_TAG_SIS = &h80000007
2830Const IO_REPARSE_TAG_DFS = &h8000000A
2831Const IO_REPARSE_TAG_SYMLINK = &hA000000C
2832Const IO_REPARSE_TAG_DFSR = &h80000012
2833
2834Const IO_COMPLETION_MODIFY_STATE = &h0002
2835Const IO_COMPLETION_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &h3)
2836
2837Const DUPLICATE_CLOSE_SOURCE = &h00000001
2838Const DUPLICATE_SAME_ACCESS = &h00000002
2839/*
2840' Define GUIDs which represent well-known power schemes
2841
2842DEFINE_GUID( GUID_MAX_POWER_SAVINGS, 0xA1841308, 0x3541, 0x4FAB, 0xBC, 0x81, 0xF7, 0x15, 0x56, 0xF2, 0x0B, 0x4A );
2843DEFINE_GUID( GUID_MIN_POWER_SAVINGS, 0x8C5E7FDA, 0xE8BF, 0x4A96, 0x9A, 0x85, 0xA6, 0xE2, 0x3A, 0x8C, 0x63, 0x5C );
2844DEFINE_GUID( GUID_TYPICAL_POWER_SAVINGS, 0x381B4222, 0xF694, 0x41F0, 0x96, 0x85, 0xFF, 0x5B, 0xB2, 0x60, 0xDF, 0x2E );
2845DEFINE_GUID( NO_SUBGROUP_GUID, 0xFEA3413E, 0x7E05, 0x4911, 0x9A, 0x71, 0x70, 0x03, 0x31, 0xF1, 0xC2, 0x94 );
2846DEFINE_GUID( ALL_POWERSCHEMES_GUID, 0x68A1E95E, 0x13EA, 0x41E1, 0x80, 0x11, 0x0C, 0x49, 0x6C, 0xA4, 0x90, 0xB0 );
2847DEFINE_GUID( GUID_POWERSCHEME_PERSONALITY, 0x245D8541, 0x3943, 0x4422, 0xB0, 0x25, 0x13, 0xA7, 0x84, 0xF6, 0x79, 0xB7 );
2848DEFINE_GUID( GUID_ACTIVE_POWERSCHEME, 0x31F9F286, 0x5084, 0x42FE, 0xB7, 0x20, 0x2B, 0x02, 0x64, 0x99, 0x37, 0x63 );
2849
2850' Define GUIDs which represent well-known power settings
2851
2852' Video settings
2853
2854DEFINE_GUID( GUID_VIDEO_SUBGROUP, 0x7516B95F, 0xF776, 0x4464, 0x8C, 0x53, 0x06, 0x16, 0x7F, 0x40, 0xCC, 0x99 );
2855DEFINE_GUID( GUID_VIDEO_POWERDOWN_TIMEOUT, 0x3C0BC021, 0xC8A8, 0x4E07, 0xA9, 0x73, 0x6B, 0x14, 0xCB, 0xCB, 0x2B, 0x7E );
2856DEFINE_GUID( GUID_VIDEO_ADAPTIVE_POWERDOWN, 0x90959D22, 0xD6A1, 0x49B9, 0xAF, 0x93, 0xBC, 0xE8, 0x85, 0xAD, 0x33, 0x5B );
2857DEFINE_GUID( GUID_MONITOR_POWER_ON, 0x02731015, 0x4510, 0x4526, 0x99, 0xE6, 0xE5, 0xA1, 0x7E, 0xBD, 0x1A, 0xEA );
2858
2859' Harddisk settings
2860DEFINE_GUID( GUID_DISK_SUBGROUP, 0x0012EE47, 0x9041, 0x4B5D, 0x9B, 0x77, 0x53, 0x5F, 0xBA, 0x8B, 0x14, 0x42 );
2861DEFINE_GUID( GUID_DISK_POWERDOWN_TIMEOUT, 0x6738E2C4, 0xE8A5, 0x4A42, 0xB1, 0x6A, 0xE0, 0x40, 0xE7, 0x69, 0x75, 0x6E );
2862DEFINE_GUID( GUID_DISK_ADAPTIVE_POWERDOWN, 0x396A32E1, 0x499A, 0x40B2, 0x91, 0x24, 0xA9, 0x6A, 0xFE, 0x70, 0x76, 0x67 );
2863
2864' System sleep settings
2865DEFINE_GUID( GUID_SLEEP_SUBGROUP, 0x238C9FA8, 0x0AAD, 0x41ED, 0x83, 0xF4, 0x97, 0xBE, 0x24, 0x2C, 0x8F, 0x20 );
2866DEFINE_GUID( GUID_SLEEP_IDLE_THRESHOLD, 0x81cd32e0, 0x7833, 0x44f3, 0x87, 0x37, 0x70, 0x81, 0xf3, 0x8d, 0x1f, 0x70 );
2867DEFINE_GUID( GUID_STANDBY_TIMEOUT, 0x29F6C1DB, 0x86DA, 0x48C5, 0x9F, 0xDB, 0xF2, 0xB6, 0x7B, 0x1F, 0x44, 0xDA );
2868DEFINE_GUID( GUID_HIBERNATE_TIMEOUT, 0x9D7815A6, 0x7EE4, 0x497E, 0x88, 0x88, 0x51, 0x5A, 0x05, 0xF0, 0x23, 0x64 );
2869DEFINE_GUID( GUID_HIBERNATE_FASTS4_POLICY, 0x94AC6D29, 0x73CE, 0x41A6, 0x80, 0x9F, 0x63, 0x63, 0xBA, 0x21, 0xB4, 0x7E );
2870DEFINE_GUID( GUID_CRITICAL_POWER_TRANSITION,  0xB7A27025, 0xE569, 0x46c2, 0xA5, 0x04, 0x2B, 0x96, 0xCA, 0xD2, 0x25, 0xA1);
2871DEFINE_GUID( GUID_SYSTEM_AWAYMODE, 0x98A7F580, 0x01F7, 0x48AA, 0x9C, 0x0F, 0x44, 0x35, 0x2C, 0x29, 0xE5, 0xC0 );
2872DEFINE_GUID( GUID_ALLOW_AWAYMODE, 0x25dfa149, 0x5dd1, 0x4736, 0xb5, 0xab, 0xe8, 0xa3, 0x7b, 0x5b, 0x81, 0x87 );
2873DEFINE_GUID( GUID_ALLOW_STANDBY_STATES, 0xabfc2519, 0x3608, 0x4c2a, 0x94, 0xea, 0x17, 0x1b, 0x0e, 0xd5, 0x46, 0xab );
2874DEFINE_GUID( GUID_ALLOW_RTC_WAKE, 0xBD3B718A, 0x0680, 0x4D9D, 0x8A, 0xB2, 0xE1, 0xD2, 0xB4, 0xAC, 0x80, 0x6D );
2875
2876' System button actions
2877DEFINE_GUID( GUID_SYSTEM_BUTTON_SUBGROUP, 0x4F971E89, 0xEEBD, 0x4455, 0xA8, 0xDE, 0x9E, 0x59, 0x04, 0x0E, 0x73, 0x47 );
2878DEFINE_GUID( GUID_POWERBUTTON_ACTION, 0x7648EFA3, 0xDD9C, 0x4E3E, 0xB5, 0x66, 0x50, 0xF9, 0x29, 0x38, 0x62, 0x80 );
2879DEFINE_GUID( GUID_POWERBUTTON_ACTION_FLAGS, 0x857E7FAC, 0x034B, 0x4704, 0xAB, 0xB1, 0xBC, 0xA5, 0x4A, 0xA3, 0x14, 0x78 );
2880DEFINE_GUID( GUID_SLEEPBUTTON_ACTION, 0x96996BC0, 0xAD50, 0x47EC, 0x92, 0x3B, 0x6F, 0x41, 0x87, 0x4D, 0xD9, 0xEB );
2881DEFINE_GUID( GUID_SLEEPBUTTON_ACTION_FLAGS, 0x2A160AB1, 0xB69D, 0x4743, 0xB7, 0x18, 0xBF, 0x14, 0x41, 0xD5, 0xE4, 0x93 );
2882DEFINE_GUID( GUID_USERINTERFACEBUTTON_ACTION, 0xA7066653, 0x8D6C, 0x40A8, 0x91, 0x0E, 0xA1, 0xF5, 0x4B, 0x84, 0xC7, 0xE5 );
2883DEFINE_GUID( GUID_LIDCLOSE_ACTION, 0x5CA83367, 0x6E45, 0x459F, 0xA2, 0x7B, 0x47, 0x6B, 0x1D, 0x01, 0xC9, 0x36 );
2884DEFINE_GUID( GUID_LIDCLOSE_ACTION_FLAGS, 0x97E969AC, 0x0D6C, 0x4D08, 0x92, 0x7C, 0xD7, 0xBD, 0x7A, 0xD7, 0x85, 0x7B );
2885DEFINE_GUID( GUID_LIDOPEN_POWERSTATE, 0x99FF10E7, 0x23B1, 0x4C07, 0xA9, 0xD1, 0x5C, 0x32, 0x06, 0xD7, 0x41, 0xB4 );
2886
2887' Battery Discharge Settings
2888DEFINE_GUID( GUID_BATTERY_SUBGROUP, 0xE73A048D, 0xBF27, 0x4F12, 0x97, 0x31, 0x8B, 0x20, 0x76, 0xE8, 0x89, 0x1F );
2889' 4 battery discharge alarm settings.
2890DEFINE_GUID( GUID_BATTERY_DISCHARGE_ACTION_0, 0x637EA02F, 0xBBCB, 0x4015, 0x8E, 0x2C, 0xA1, 0xC7, 0xB9, 0xC0, 0xB5, 0x46 );
2891DEFINE_GUID( GUID_BATTERY_DISCHARGE_LEVEL_0, 0x9A66D8D7, 0x4FF7, 0x4EF9, 0xB5, 0xA2, 0x5A, 0x32, 0x6C, 0xA2, 0xA4, 0x69 );
2892DEFINE_GUID( GUID_BATTERY_DISCHARGE_FLAGS_0, 0x5dbb7c9f, 0x38e9, 0x40d2, 0x97, 0x49, 0x4f, 0x8a, 0x0e, 0x9f, 0x64, 0x0f );
2893
2894DEFINE_GUID( GUID_BATTERY_DISCHARGE_ACTION_1, 0xD8742DCB, 0x3E6A, 0x4B3C, 0xB3, 0xFE, 0x37, 0x46, 0x23, 0xCD, 0xCF, 0x06 );
2895DEFINE_GUID( GUID_BATTERY_DISCHARGE_LEVEL_1, 0x8183BA9A, 0xE910, 0x48DA, 0x87, 0x69, 0x14, 0xAE, 0x6D, 0xC1, 0x17, 0x0A );
2896DEFINE_GUID( GUID_BATTERY_DISCHARGE_FLAGS_1, 0xbcded951, 0x187b, 0x4d05, 0xbc, 0xcc, 0xf7, 0xe5, 0x19, 0x60, 0xc2, 0x58 );
2897
2898DEFINE_GUID( GUID_BATTERY_DISCHARGE_ACTION_2, 0x421CBA38, 0x1A8E, 0x4881, 0xAC, 0x89, 0xE3, 0x3A, 0x8B, 0x04, 0xEC, 0xE4 );
2899DEFINE_GUID( GUID_BATTERY_DISCHARGE_LEVEL_2, 0x07A07CA2, 0xADAF, 0x40D7, 0xB0, 0x77, 0x53, 0x3A, 0xAD, 0xED, 0x1B, 0xFA );
2900DEFINE_GUID( GUID_BATTERY_DISCHARGE_FLAGS_2, 0x7fd2f0c4, 0xfeb7, 0x4da3, 0x81, 0x17, 0xe3, 0xfb, 0xed, 0xc4, 0x65, 0x82 );
2901
2902DEFINE_GUID( GUID_BATTERY_DISCHARGE_ACTION_3, 0x80472613, 0x9780, 0x455E, 0xB3, 0x08, 0x72, 0xD3, 0x00, 0x3C, 0xF2, 0xF8 );
2903DEFINE_GUID( GUID_BATTERY_DISCHARGE_LEVEL_3, 0x58AFD5A6, 0xC2DD, 0x47D2, 0x9F, 0xBF, 0xEF, 0x70, 0xCC, 0x5C, 0x59, 0x65 );
2904DEFINE_GUID( GUID_BATTERY_DISCHARGE_FLAGS_3, 0x73613ccf, 0xdbfa, 0x4279, 0x83, 0x56, 0x49, 0x35, 0xf6, 0xbf, 0x62, 0xf3 );
2905
2906' Processor power settings
2907DEFINE_GUID( GUID_PROCESSOR_SETTINGS_SUBGROUP, 0x54533251, 0x82BE, 0x4824, 0x96, 0xC1, 0x47, 0xB6, 0x0B, 0x74, 0x0D, 0x00 );
2908DEFINE_GUID( GUID_PROCESSOR_THROTTLE_POLICY, 0x57027304, 0x4AF6, 0x4104, 0x92, 0x60, 0xE3, 0xD9, 0x52, 0x48, 0xFC, 0x36 );
2909DEFINE_GUID( GUID_PROCESSOR_THROTTLE_MAXIMUM, 0xBC5038F7, 0x23E0, 0x4960, 0x96, 0xDA, 0x33, 0xAB, 0xAF, 0x59, 0x35, 0xEC );
2910DEFINE_GUID( GUID_PROCESSOR_THROTTLE_MINIMUM, 0x893DEE8E, 0x2BEF, 0x41E0, 0x89, 0xC6, 0xB5, 0x5D, 0x09, 0x29, 0x96, 0x4C );
2911DEFINE_GUID( GUID_PROCESSOR_IDLESTATE_POLICY, 0x68f262a7, 0xf621, 0x4069, 0xb9, 0xa5, 0x48, 0x74, 0x16, 0x9b, 0xe2, 0x3c);
2912DEFINE_GUID( GUID_PROCESSOR_PERFSTATE_POLICY, 0xBBDC3814, 0x18E9, 0x4463, 0x8A, 0x55, 0xD1, 0x97, 0x32, 0x7C, 0x45, 0xC0);
2913DEFINE_GUID( GUID_SYSTEM_COOLING_POLICY, 0x94D3A615, 0xA899, 0x4AC5, 0xAE, 0x2B, 0xE4, 0xD8, 0xF6, 0x34, 0x36, 0x7F);
2914
2915' Lock Console on Wake
2916DEFINE_GUID( GUID_LOCK_CONSOLE_ON_WAKE, 0x0E796BDB, 0x100D, 0x47D6, 0xA2, 0xD5, 0xF7, 0xD2, 0xDA, 0xA5, 0x1F, 0x51 );
2917
2918' AC/DC power source
2919DEFINE_GUID( GUID_ACDC_POWER_SOURCE, 0x5D3E9A59, 0xE9D5, 0x4B00, 0xA6, 0xBD, 0xFF, 0x34, 0xFF, 0x51, 0x65, 0x48 );
2920
2921' Lid state changes
2922DEFINE_GUID( GUID_LIDSWITCH_STATE_CHANGE,  0xBA3E0F4D, 0xB817, 0x4094, 0xA2, 0xD1, 0xD5, 0x63, 0x79, 0xE6, 0xA0, 0xF3 );
2923
2924' Battery life remaining
2925DEFINE_GUID( GUID_BATTERY_PERCENTAGE_REMAINING, 0xA7AD8041, 0xB45A, 0x4CAE, 0x87, 0xA3, 0xEE, 0xCB, 0xB4, 0x68, 0xA9, 0xE1 );
2926DEFINE_GUID( GUID_IDLE_BACKGROUND_TASK, 0x515C31D8, 0xF734, 0x163D, 0xA0, 0xFD, 0x11, 0xA0, 0x8C, 0x91, 0xE8, 0xF1 );
2927DEFINE_GUID( GUID_BACKGROUND_TASK_NOTIFICATION, 0xCF23F240, 0x2A54, 0x48D8, 0xB1, 0x14, 0xDE, 0x15, 0x18, 0xFF, 0x05, 0x2E );
2928DEFINE_GUID( GUID_APPLAUNCH_BUTTON, 0x1A689231, 0x7399, 0x4E9A, 0x8F, 0x99, 0xB7, 0x1F, 0x99, 0x9D, 0xB3, 0xFA );
2929DEFINE_GUID( GUID_PCIEXPRESS_SETTINGS_SUBGROUP, 0x501a4d13, 0x42af,0x4429, 0x9f, 0xd1, 0xa8, 0x21, 0x8c, 0x26, 0x8e, 0x20 );
2930DEFINE_GUID( GUID_PCIEXPRESS_ASPM_POLICY, 0xee12f906, 0xd277, 0x404b, 0xb6, 0xda, 0xe5, 0xfa, 0x1a, 0x57, 0x6d, 0xf5 );
2931*/
2932Enum SYSTEM_POWER_STATE
2933    PowerSystemUnspecified = 0
2934    PowerSystemWorking = 1
2935    PowerSystemSleeping1 = 2
2936    PowerSystemSleeping2 = 3
2937    PowerSystemSleeping3 = 4
2938    PowerSystemHibernate = 5
2939    PowerSystemShutdown = 6
2940    PowerSystemMaximum = 7
2941End Enum
2942TypeDef PSYSTEM_POWER_STATE = *SYSTEM_POWER_STATE
2943
2944Const POWER_SYSTEM_MAXIMUM = 7
2945
2946Enum POWER_ACTION
2947    PowerActionNone = 0
2948    PowerActionReserved
2949    PowerActionSleep
2950    PowerActionHibernate
2951    PowerActionShutdown
2952    PowerActionShutdownReset
2953    PowerActionShutdownOff
2954    PowerActionWarmEject
2955End Enum
2956TypeDef PPOWER_ACTION = *POWER_ACTION
2957
2958Enum DEVICE_POWER_STATE
2959    PowerDeviceUnspecified = 0
2960    PowerDeviceD0
2961    PowerDeviceD1
2962    PowerDeviceD2
2963    PowerDeviceD3
2964    PowerDeviceMaximum
2965End Enum
2966TypeDef PDEVICE_POWER_STATE = *DEVICE_POWER_STATE
2967
2968Const ES_SYSTEM_REQUIRED = (&h00000001 As DWord)
2969Const ES_DISPLAY_REQUIRED = (&h00000002 As DWord)
2970Const ES_USER_PRESENT = (&h00000004 As DWord)
2971Const ES_AWAYMODE_REQUIRED = (&h00000040 As DWord)
2972Const ES_CONTINUOUS = (&h80000000 As DWord)
2973
2974TypeDef EXECUTION_STATE = DWord
2975
2976Enum LATENCY_TIME
2977    LT_DONT_CARE
2978    LT_LOWEST_LATENCY
2979End Enum
2980
2981'#if (NTDDI_VERSION >= NTDDI_WINXP)
2982
2983' Device Power Information
2984Const PDCAP_D0_SUPPORTED = &h00000001
2985Const PDCAP_D1_SUPPORTED = &h00000002
2986Const PDCAP_D2_SUPPORTED = &h00000004
2987Const PDCAP_D3_SUPPORTED = &h00000008
2988Const PDCAP_WAKE_FROM_D0_SUPPORTED = &h00000010
2989Const PDCAP_WAKE_FROM_D1_SUPPORTED = &h00000020
2990Const PDCAP_WAKE_FROM_D2_SUPPORTED = &h00000040
2991Const PDCAP_WAKE_FROM_D3_SUPPORTED = &h00000080
2992Const PDCAP_WARM_EJECT_SUPPORTED = &h00000100
2993
2994Type CM_POWER_DATA
2995    PD_Size As DWord
2996    PD_MostRecentPowerState As DEVICE_POWER_STATE
2997    PD_Capabilities As DWord
2998    PD_D1Latency As DWord
2999    PD_D2Latency As DWord
3000    PD_D3Latency As DWord
3001    PD_PowerStateMapping[POWER_SYSTEM_MAXIMUM] As DEVICE_POWER_STATE
3002    PD_DeepestSystemWake As SYSTEM_POWER_STATE
3003End Type
3004TypeDef PCM_POWER_DATA = *CM_POWER_DATA
3005
3006'#endif // (NTDDI_VERSION >= NTDDI_WINXP)
3007
3008Enum POWER_INFORMATION_LEVEL
3009    SystemPowerPolicyAc
3010    SystemPowerPolicyDc
3011    VerifySystemPolicyAc
3012    VerifySystemPolicyDc
3013    SystemPowerCapabilities
3014    SystemBatteryState
3015    SystemPowerStateHandler
3016    ProcessorStateHandler
3017    SystemPowerPolicyCurrent
3018    AdministratorPowerPolicy
3019    SystemReserveHiberFile
3020    ProcessorInformation
3021    SystemPowerInformation
3022    ProcessorStateHandler2
3023    LastWakeTime                        ' Compare with KeQueryInterruptTime()
3024    LastSleepTime                       ' Compare with KeQueryInterruptTime()
3025    SystemExecutionState
3026    SystemPowerStateNotifyHandler
3027    ProcessorPowerPolicyAc
3028    ProcessorPowerPolicyDc
3029    VerifyProcessorPowerPolicyAc
3030    VerifyProcessorPowerPolicyDc
3031    ProcessorPowerPolicyCurrent
3032    SystemPowerStateLogging
3033    SystemPowerLoggingEntry
3034    SetPowerSettingValue
3035    NotifyUserPowerSetting
3036    GetPowerTransitionVetoes
3037    SetPowerTransitionVeto
3038    SystemVideoState
3039    TraceApplicationPowerMessage
3040    TraceApplicationPowerMessageEnd
3041    ProcessorPerfStates
3042    ProcessorIdleStates
3043    ProcessorThrottleStates
3044    SystemWakeSource
3045    SystemHiberFileInformation
3046    TraceServicePowerMessage
3047    ProcessorLoad
3048    PowerShutdownNotification
3049End Enum
3050
3051' Power Transition Vetos
3052Const PO_TRANSITION_VETO_TYPE_WINDOW = &h00000001
3053Const PO_TRANSITION_VETO_TYPE_SERVICE = &h00000002
3054'Const PO_TRANSITION_VETO_TYPE_DRIVER = &h00000004
3055
3056Const PO_TRANSITION_VETO_TYPE_ALL = (PO_TRANSITION_VETO_TYPE_WINDOW Or PO_TRANSITION_VETO_TYPE_SERVICE)
3057
3058Type PO_TRANSITION_VETO_REASON
3059    ResourceId As DWord
3060    ModuleNameOffset As DWord
3061End Type
3062TypeDef PPO_TRANSITION_VETO_REASON = *PO_TRANSITION_VETO_REASON
3063
3064Type PO_TRANSITION_VETO_WINDOW
3065    Handle As HANDLE
3066End Type
3067TypeDef PPO_TRANSITION_VETO_WINDOW = *PO_TRANSITION_VETO_WINDOW
3068
3069Type PO_TRANSITION_VETO_SERVICE
3070    ServiceNameOffset As DWord
3071End Type
3072TypeDef PPO_TRANSITION_VETO_SERVICE = *PO_TRANSITION_VETO_SERVICE
3073
3074/*
3075Type PO_TRANSITION_VETO_DRIVER
3076    InstancePathOffset As DWord
3077    DriverNameOffset As DWord
3078End Type
3079TypeDef PPO_TRANSITION_VETO_DRIVER = *PO_TRANSITION_VETO_DRIVER
3080*/
3081
3082Type PO_TRANSITION_VETO
3083    Type_ As DWord
3084    Reason As PO_TRANSITION_VETO_REASON
3085    ProcessId As DWord
3086'   Union
3087        Window_ As PO_TRANSITION_VETO_WINDOW
3088'       Service As PO_TRANSITION_VETO_SERVICE
3089'       ' Driver As PO_TRANSITION_VETO_DRIVER
3090'   End Union
3091End Type
3092TypeDef PPO_TRANSITION_VETO = *PO_TRANSITION_VETO
3093
3094Type PO_TRANSITION_VETOES
3095    Count As DWord
3096    Vetoes[ELM(ANYSIZE_ARRAY)] As PO_TRANSITION_VETO
3097End Type
3098TypeDef PPO_TRANSITION_VETOES = *PO_TRANSITION_VETOES
3099
3100Enum SYSTEM_POWER_CONDITION
3101    PoAc
3102    PoDc
3103    PoHot
3104    PoConditionMaximum
3105End Enum
3106
3107Type
3108    Version As DWord
3109    Guid As GUID
3110    PowerCondition As SYSTEM_POWER_CONDITION
3111    DataLength As DWord
3112    Data[ELM(ANYSIZE_ARRAY)] As Byte
3113End Type
3114TypeDef PSET_POWER_SETTING_VALUE = *SET_POWER_SETTING_VALUE
3115
3116Const POWER_SETTING_VALUE_VERSION = &h1
3117
3118Type NOTIFY_USER_POWER_SETTING
3119    Guid As GUID
3120End Type
3121TypeDef PNOTIFY_USER_POWER_SETTING = *NOTIFY_USER_POWER_SETTING
3122
3123Type APPLICATIONLAUNCH_SETTING_VALUE
3124    ActivationTime As LARGE_INTEGER
3125    Flags As DWord
3126    ButtonInstanceID As DWord
3127End Type
3128TypeDef PAPPLICATIONLAUNCH_SETTING_VALUE = *APPLICATIONLAUNCH_SETTING_VALUE
3129
3130Enum POWER_PLATFORM_ROLE
3131    PlatformRoleUnspecified = 0
3132    PlatformRoleDesktop
3133    PlatformRoleMobile
3134    PlatformRoleWorkstation
3135    PlatformRoleEnterpriseServer
3136    PlatformRoleSOHOServer
3137    PlatformRoleAppliancePC
3138    PlatformRolePerformanceServer
3139    PlatformRoleMaximum
3140End Enum
3141
3142Enum PO_WAKE_SOURCE_TYPE
3143    DeviceWakeSourceType
3144    FixedWakeSourceType
3145End Enum
3146TypeDef PPO_WAKE_SOURCE_TYPE = *PO_WAKE_SOURCE_TYPE
3147
3148Enum PO_FIXED_WAKE_SOURCE_TYPE
3149    FixedWakeSourcePowerButton
3150    FixedWakeSourceSleepButton
3151    FixedWakeSourceRtc
3152End Enum
3153TypeDef PPO_FIXED_WAKE_SOURCE_TYPE = *PO_FIXED_WAKE_SOURCE_TYPE
3154
3155Type PO_WAKE_SOURCE_HEADER
3156    Type_ As PO_WAKE_SOURCE_TYPE
3157    Size As DWord
3158End Type
3159TypeDef PPO_WAKE_SOURCE_HEADER = *PO_WAKE_SOURCE_HEADER
3160
3161Type PO_WAKE_SOURCE_DEVICE
3162    Header As PO_WAKE_SOURCE_HEADER
3163    InstancePath[ELM(ANYSIZE_ARRAY)] As WCHAR
3164End Type
3165TypeDef PPO_WAKE_SOURCE_DEVICE = *PO_WAKE_SOURCE_DEVICE
3166
3167Type PO_WAKE_SOURCE_FIXED
3168    Header As PO_WAKE_SOURCE_HEADER
3169    FixedWakeSourceType As PO_FIXED_WAKE_SOURCE_TYPE
3170End Type
3171TypeDef PPO_WAKE_SOURCE_FIXED = *PO_WAKE_SOURCE_FIXED
3172
3173Type PO_WAKE_SOURCE_INFO
3174    Count As DWord
3175    Offsets[ELM(ANYSIZE_ARRAY)] As DWord
3176End Type
3177TypeDef PPO_WAKE_SOURCE_INFO = *PO_WAKE_SOURCE_INFO
3178
3179Type PO_WAKE_SOURCE_HISTORY
3180    Count As DWord
3181    Offsets[ELM(ANYSIZE_ARRAY)] As DWord
3182End Type
3183TypeDef PPO_WAKE_SOURCE_HISTORY = *PO_WAKE_SOURCE_HISTORY
3184
3185'#if (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_)
3186Type BATTERY_REPORTING_SCALE
3187    Granularity As DWord
3188    Capacity As DWord
3189End Type
3190TypeDef PBATTERY_REPORTING_SCALE = *BATTERY_REPORTING_SCALE
3191'#endif
3192
3193Type PPM_SIMULATED_PROCESSOR_LOAD
3194    Enabled As BOOLEAN
3195    PercentBusy[ELM(MAXIMUM_PROCESSORS)] As Byte
3196End Type
3197TypeDef PPPM_SIMULATED_PROCESSOR_LOAD = *PPM_SIMULATED_PROCESSOR_LOAD
3198
3199Type PPM_WMI_LEGACY_PERFSTATE
3200    Frequency As DWord
3201    Flags As DWord
3202    PercentFrequency As DWord
3203End Type
3204TypeDef PPPM_WMI_LEGACY_PERFSTATE = *PPM_WMI_LEGACY_PERFSTATE
3205
3206Type PPM_WMI_IDLE_STATE
3207    Latency As DWord
3208    Power As DWord
3209    TimeCheck As DWord
3210    PromotePercent As Byte
3211    DemotePercent As Byte
3212    StateType As Byte
3213    Reserved As Byte
3214    StateFlags As DWord
3215    Context As DWord
3216    IdleHandler As DWord
3217    Reserved1 As DWord
3218End Type
3219TypeDef PPPM_WMI_IDLE_STATE = *PPM_WMI_IDLE_STATE
3220
3221Type PPM_WMI_IDLE_STATES
3222    Type_ As DWord
3223    Count As DWord
3224    TargetState As DWord
3225    OldState As DWord
3226    TargetProcessors As QWord
3227    State[ELM(ANYSIZE_ARRAY)] As PPM_WMI_IDLE_STATE
3228End Type
3229TypeDef PPPM_WMI_IDLE_STATES = *PPM_WMI_IDLE_STATES
3230
3231Type PPM_WMI_PERF_STATE
3232    Frequency As DWord
3233    Power As DWord
3234    PercentFrequency As Byte
3235    IncreaseLevel As Byte
3236    DecreaseLevel As Byte
3237    Type_  As Byte
3238    IncreaseTime As DWord
3239    DecreaseTime As DWord
3240    Control As QWord
3241    Status As QWord
3242    HitCount As DWord
3243    Reserved1 As DWord
3244    Reserved2 As QWord
3245    Reserved3 As QWord
3246End Type
3247TypeDef PPPM_WMI_PERF_STATE = *PPM_WMI_PERF_STATE
3248
3249Type PPM_WMI_PERF_STATES
3250    Count As DWord
3251    MaxFrequency As DWord
3252    CurrentState As DWord
3253    MaxPerfState As DWord
3254    MinPerfState As DWord
3255    LowestPerfState As DWord
3256    ThermalConstraint As DWord
3257    BusyAdjThreshold As Byte
3258    PolicyType As Byte
3259    Type_ As Byte
3260    Reserved As Byte
3261    TimerInterval As DWord
3262    TargetProcessors As QWord
3263    PStateHandler As DWord
3264    PStateContext As DWord
3265    TStateHandler As DWord
3266    TStateContext As DWord
3267    FeedbackHandler As DWord
3268    Reserved1 As DWord
3269    Reserved2 As QWord
3270    State[ELM(ANYSIZE_ARRAY)] As PPM_WMI_PERF_STATE
3271End Type
3272TypeDef PPPM_WMI_PERF_STATES = *PPM_WMI_PERF_STATES
3273
3274Const PROC_IDLE_BUCKET_COUNT = 6
3275
3276Type PPM_IDLE_STATE_ACCOUNTING
3277    IdleTransitions As DWord
3278    FailedTransitions As DWord
3279    InvalidBucketIndex As DWord
3280    TotalTime As QWord
3281    IdleTimeBuckets[ELM(PROC_IDLE_BUCKET_COUNT)] As DWord
3282End Type
3283TypeDef PPPM_IDLE_STATE_ACCOUNTING = *PPM_IDLE_STATE_ACCOUNTING
3284
3285Type PPM_IDLE_ACCOUNTING
3286    StateCount As DWord
3287    TotalTransitions As DWord
3288    ResetCount As DWord
3289    StartTime As QWord
3290    State[ELM(ANYSIZE_ARRAY)] As PPM_IDLE_STATE_ACCOUNTING
3291End Type
3292TypeDef PPPM_IDLE_ACCOUNTING = *PPM_IDLE_ACCOUNTING
3293
3294Const ACPI_PPM_SOFTWARE_ALL = &hFC
3295Const ACPI_PPM_SOFTWARE_ANY = &hFD
3296Const ACPI_PPM_HARDWARE_ALL = &hFE
3297
3298Const MS_PPM_SOFTWARE_ALL = &h1
3299
3300' Processor Power Management WMI interface.
3301/*
3302// {A5B32DDD-7F39-4abc-B892-900E43B59EBB}
3303DEFINE_GUID(PPM_PERFSTATE_CHANGE_GUID,
33040xa5b32ddd, 0x7f39, 0x4abc, 0xb8, 0x92, 0x90, 0xe, 0x43, 0xb5, 0x9e, 0xbb);
3305
3306// {995e6b7f-d653-497a-b978-36a30c29bf01}
3307DEFINE_GUID(PPM_PERFSTATE_DOMAIN_CHANGE_GUID,
33080x995e6b7f, 0xd653, 0x497a, 0xb9, 0x78, 0x36, 0xa3, 0xc, 0x29, 0xbf, 0x1);
3309
3310// {4838fe4f-f71c-4e51-9ecc-8430a7ac4c6c}
3311DEFINE_GUID(PPM_IDLESTATE_CHANGE_GUID,
33120x4838fe4f, 0xf71c, 0x4e51, 0x9e, 0xcc, 0x84, 0x30, 0xa7, 0xac, 0x4c, 0x6c);
3313
3314// {5708cc20-7d40-4bf4-b4aa-2b01338d0126}
3315DEFINE_GUID(PPM_PERFSTATES_DATA_GUID,
33160x5708cc20, 0x7d40, 0x4bf4, 0xb4, 0xaa, 0x2b, 0x01, 0x33, 0x8d, 0x01, 0x26);
3317
3318// {ba138e10-e250-4ad7-8616-cf1a7ad410e7}
3319DEFINE_GUID(PPM_IDLESTATES_DATA_GUID,
33200xba138e10, 0xe250, 0x4ad7, 0x86, 0x16, 0xcf, 0x1a, 0x7a, 0xd4, 0x10, 0xe7);
3321
3322// {e2a26f78-ae07-4ee0-a30f-ce354f5a94cd}
3323DEFINE_GUID(PPM_IDLE_ACCOUNTING_GUID,
33240xe2a26f78, 0xae07, 0x4ee0, 0xa3, 0x0f, 0xce, 0x54, 0xf5, 0x5a, 0x94, 0xcd);
3325
3326// {a852c2c8-1a4c-423b-8c2c-f30d82931a88}
3327DEFINE_GUID(PPM_THERMALCONSTRAINT_GUID,
33280xa852c2c8, 0x1a4c, 0x423b, 0x8c, 0x2c, 0xf3, 0x0d, 0x82, 0x93, 0x1a, 0x88);
3329
3330// {7fd18652-0cfe-40d2-b0a1-0b066a87759e}
3331DEFINE_GUID(PPM_PERFMON_PERFSTATE_GUID,
33320x7fd18652, 0xcfe, 0x40d2, 0xb0, 0xa1, 0xb, 0x6, 0x6a, 0x87, 0x75, 0x9e);
3333
3334// {48f377b8-6880-4c7b-8bdc-380176c6654d}
3335DEFINE_GUID(PPM_THERMAL_POLICY_CHANGE_GUID,
33360x48f377b8, 0x6880, 0x4c7b, 0x8b, 0xdc, 0x38, 0x1, 0x76, 0xc6, 0x65, 0x4d);
3337*/
3338Type PPM_PERFSTATE_EVENT
3339    State As DWord
3340    Status As DWord
3341    Latency As DWord
3342    Speed As DWord
3343    Processor As DWord
3344End Type
3345TypeDef PPPM_PERFSTATE_EVENT = *PPM_PERFSTATE_EVENT
3346
3347Type PPM_PERFSTATE_DOMAIN_EVENT
3348    State As DWord
3349    Latency As DWord
3350    Speed As DWord
3351    Processors As QWord
3352End Type
3353TypeDef PPPM_PERFSTATE_DOMAIN_EVENT = *PPM_PERFSTATE_DOMAIN_EVENT
3354
3355Type PPM_IDLESTATE_EVENT
3356    NewState As DWord
3357    OldState As DWord
3358    Processors As QWord
3359End Type
3360TypeDef PPPM_IDLESTATE_EVENT = *PPM_IDLESTATE_EVENT
3361
3362Type PPM_THERMALCHANGE_EVENT
3363    ThermalConstraint As DWord
3364    Processors As QWord
3365End Type
3366TypeDef PPPM_THERMALCHANGE_EVENT = *PPM_THERMALCHANGE_EVENT
3367
3368Type PPM_THERMAL_POLICY_EVENT
3369    Mode As Byte
3370    Processors As QWord
3371End Type
3372TypeDef PPPM_THERMAL_POLICY_EVENT = *PPM_THERMAL_POLICY_EVENT
3373
3374Type POWER_ACTION_POLICY
3375    Action As POWER_ACTION
3376    Flags As DWord
3377    EventCode As DWord
3378End Type
3379TypeDef PPOWER_ACTION_POLICY = *POWER_ACTION_POLICY
3380
3381' POWER_ACTION_POLICY->Flags:
3382Const POWER_ACTION_QUERY_ALLOWED = &h00000001
3383Const POWER_ACTION_UI_ALLOWED = &h00000002
3384Const POWER_ACTION_OVERRIDE_APPS = &h00000004
3385Const POWER_ACTION_LIGHTEST_FIRST = &h10000000
3386Const POWER_ACTION_LOCK_CONSOLE = &h20000000
3387Const POWER_ACTION_DISABLE_WAKES = &h40000000
3388Const POWER_ACTION_CRITICAL = &h80000000
3389
3390' POWER_ACTION_POLICY->EventCode flags
3391Const POWER_LEVEL_USER_NOTIFY_TEXT = &h00000001
3392Const POWER_LEVEL_USER_NOTIFY_SOUND = &h00000002
3393Const POWER_LEVEL_USER_NOTIFY_EXEC = &h00000004
3394Const POWER_USER_NOTIFY_BUTTON = &h00000008
3395Const POWER_USER_NOTIFY_SHUTDOWN = &h00000010
3396Const POWER_FORCE_TRIGGER_RESET = &h80000000
3397
3398Const BATTERY_DISCHARGE_FLAGS_EVENTCODE_MASK = &h00000007
3399Const BATTERY_DISCHARGE_FLAGS_ENABLE = &h80000000
3400
3401Type SYSTEM_POWER_LEVEL
3402    Enable As BOOLEAN
3403    Spare[ELM(3)] As Byte
3404    BatteryLevel As DWord
3405    PowerPolicy As POWER_ACTION_POLICY
3406    MinSystemState As POWER_ACTION_POLICY
3407End Type
3408TypeDef PSYSTEM_POWER_LEVEL = *SYSTEM_POWER_LEVEL
3409
3410Const NUM_DISCHARGE_POLICIES = 4
3411Const DISCHARGE_POLICY_CRITICAL= 0
3412Const DISCHARGE_POLICY_LOW = 1
3413
3414Type SYSTEM_POWER_POLICY
3415    Revision As DWord
3416
3417    PowerButton As POWER_ACTION_POLICY
3418    SleepButton As POWER_ACTION_POLICY
3419    LidClose As POWER_ACTION_POLICY
3420    LidOpenWake As SYSTEM_POWER_STATE
3421    Reserved As DWord
3422
3423    Idle As POWER_ACTION_POLICY
3424    IdleTimeout As DWord
3425    IdleSensitivity As Byte
3426
3427    DynamicThrottle As Byte
3428    Spare2[ELM(2)] As Byte
3429
3430    MinSleep As SYSTEM_POWER_STATE
3431    MaxSleep As SYSTEM_POWER_STATE
3432    ReducedLatencySleep As SYSTEM_POWER_STATE
3433    WinLogonFlags As DWord
3434
3435    Spare3 As DWord
3436
3437    DozeS4Timeout As DWord
3438
3439    BroadcastCapacityResolution; As DWord
3440    DischargePolicy[ELM(NUM_DISCHARGE_POLICIES)] As SYSTEM_POWER_LEVEL
3441
3442    VideoTimeout As DWord
3443    VideoDimDisplay As BOOLEAN
3444    VideoReserved[ELM(3)] As DWord
3445
3446    SpindownTimeout As DWord
3447
3448    OptimizeForPower As BOOLEAN
3449    FanThrottleTolerance As Byte
3450    ForcedThrottle As Byte
3451    MinThrottle As Byte
3452    OverThrottled As POWER_ACTION_POLICY
3453End Type
3454TypeDef PSYSTEM_POWER_POLICY = *SYSTEM_POWER_POLICY
3455
3456' processor power policy state
3457
3458Const PROCESSOR_IDLESTATE_POLICY_COUNT = &h3
3459
3460Type PROCESSOR_IDLESTATE_INFO
3461    TimeCheck As DWord
3462    DemotePercent As Byte
3463    PromotePercent As Byte
3464    Spare[ELM(2)] As Byte
3465End Type
3466TypeDef PPROCESSOR_IDLESTATE_INFO = *PROCESSOR_IDLESTATE_INFO
3467
3468Type PROCESSOR_IDLESTATE_POLICY
3469    Revision As Word
3470    FlagsAsWRORD As Word
3471'   Union
3472'       AsWORD As Word
3473'       struct {
3474'           WORD   AllowScaling : 1;
3475'           WORD   Disabled : 1;
3476'           WORD   Reserved : 14;
3477'       };
3478'   } Flags;
3479
3480    PolicyCount As DWord
3481    Policy[ELM(PROCESSOR_IDLESTATE_POLICY_COUNT)] As PROCESSOR_IDLESTATE_INFO
3482End Type
3483TypeDef PPROCESSOR_IDLESTATE_POLICY = *PROCESSOR_IDLESTATE_POLICY
3484
3485Const PO_THROTTLE_NONE = 0
3486Const PO_THROTTLE_CONSTANT = 1
3487Const PO_THROTTLE_DEGRADE = 2
3488Const PO_THROTTLE_ADAPTIVE = 3
3489Const PO_THROTTLE_MAXIMUM = 4
3490
3491Type PROCESSOR_POWER_POLICY_INFO
3492    TimeCheck As DWord
3493    DemoteLimit As DWord
3494    PromoteLimit As DWord
3495
3496    DemotePercent As Byte
3497    PromotePercent As Byte
3498    Spare[ELM(2)] As Byte
3499    Allow As DWord
3500'   AllowDemotion:1 As DWord
3501'   AllowPromotion:1 As DWord
3502'   Reserved:30 As DWord
3503End Type
3504TypeDef PPROCESSOR_POWER_POLICY_INFO = *PROCESSOR_POWER_POLICY_INFO
3505
3506Type PROCESSOR_POWER_POLICY
3507    Revision As DWord
3508
3509    DynamicThrottle As Byte
3510    Spare[ELM(3)] As Byte
3511
3512    DisableCStates/*:1*/ As DWord
3513'   Reserved:31 As DWord
3514
3515    PolicyCount As DWord
3516    Policy[ELM(3)] As PROCESSOR_POWER_POLICY_INFO
3517End Type
3518TypeDef PPROCESSOR_POWER_POLICY = *PROCESSOR_POWER_POLICY
3519
3520' Processor Perf State Policy.
3521Const PERFSTATE_POLICY_CHANGE_IDEAL = &h00
3522Const PERFSTATE_POLICY_CHANGE_SINGLE = &h01
3523Const PERFSTATE_POLICY_CHANGE_ROCKET = &h02
3524Const PERFSTATE_POLICY_CHANGE_MAX = PERFSTATE_POLICY_CHANGE_ROCKET
3525
3526Type PROCESSOR_PERFSTATE_POLICY 'アラインメント平気か?
3527    Revision As DWord
3528    MaxThrottle As Byte
3529    MinThrottle As Byte
3530    BusyAdjThreshold As Byte
3531    FlagsAsBYTE As Byte '下の共用体メンバの部分
3532'   Union
3533'       Spare As Byte
3534'       Union
3535'           AsBYTE As Byte
3536'           Type
3537'               NoDomainAccounting : 1 As Byte
3538'               IncreasePolicy: 2 As Byte
3539'               DecreasePolicy: 2 As Byte
3540'               Reserved : 3 As Byte
3541'           End Type
3542'       } Flags;
3543'   };
3544    TimeCheck As DWord
3545    IncreaseTime As DWord
3546    DecreaseTime As DWord
3547    IncreasePercent As DWord
3548    DecreasePercent As DWord
3549End Type
3550TypeDef PPROCESSOR_PERFSTATE_POLICY = *PROCESSOR_PERFSTATE_POLICY
3551
3552Type ADMINISTRATOR_POWER_POLICY
3553    MinSleep As SYSTEM_POWER_STATE
3554    MaxSleep As SYSTEM_POWER_STATE
3555
3556    MinVideoTimeout As DWord
3557    MaxVideoTimeout As DWord
3558
3559    MinSpindownTimeout As DWord
3560    MaxSpindownTimeout As DWord
3561End Type
3562TypeDef PADMINISTRATOR_POWER_POLICY = *ADMINISTRATOR_POWER_POLICY
3563
3564Type SYSTEM_POWER_CAPABILITIES
3565    PowerButtonPresent As BOOLEAN
3566    SleepButtonPresent As BOOLEAN
3567    LidPresent As BOOLEAN
3568    SystemS1 As BOOLEAN
3569    SystemS2 As BOOLEAN
3570    SystemS3 As BOOLEAN
3571    SystemS4 As BOOLEAN
3572    SystemS5 As BOOLEAN
3573    HiberFilePresent As BOOLEAN
3574    FullWake As BOOLEAN
3575    VideoDimPresent As BOOLEAN
3576    ApmPresent As BOOLEAN
3577    UpsPresent As BOOLEAN
3578
3579    ThermalControl As BOOLEAN
3580    ProcessorThrottle As BOOLEAN
3581    ProcessorMinThrottle As Byte
3582
3583'#if (NTDDI_VERSION < NTDDI_WINXP)
3584'   ProcessorThrottleScale As Byte
3585'   spare2[ELM(4)] As Byte
3586'#else
3587    ProcessorMaxThrottle As Byte
3588    FastSystemS4 As BOOLEAN
3589    spare2[(3)] As Byte
3590'#endif // (NTDDI_VERSION < NTDDI_WINXP)
3591
3592    DiskSpinDown As BOOLEAN
3593    spare3[ELM(8)] As Byte
3594
3595    SystemBatteriesPresent As BOOLEAN
3596    BatteriesAreShortTerm As BOOLEAN
3597    BatteryScale[ELM(3)] As BATTERY_REPORTING_SCALE
3598
3599    AcOnLineWake As SYSTEM_POWER_STATE
3600    SoftLidWake As SYSTEM_POWER_STATE
3601    RtcWake As SYSTEM_POWER_STATE
3602    MinDeviceWakeState As SYSTEM_POWER_STATE
3603    DefaultLowLatencyWake As SYSTEM_POWER_STATE
3604End Type
3605TypeDef PSYSTEM_POWER_CAPABILITIES = *SYSTEM_POWER_CAPABILITIES
3606
3607Type SYSTEM_BATTERY_STATE
3608    AcOnLine As BOOLEAN
3609    BatteryPresent As BOOLEAN
3610    Charging As BOOLEAN
3611    Discharging As BOOLEAN
3612    Spare1[ELM(4)] As BOOLEAN
3613
3614    MaxCapacity As DWord
3615    RemainingCapacity As DWord
3616    Rate As DWord
3617    EstimatedTime As DWord
3618
3619    DefaultAlert1 As DWord
3620    DefaultAlert2 As DWord
3621End Type
3622TypeDef PSYSTEM_BATTERY_STATE = *SYSTEM_BATTERY_STATE
3623
3624Const IMAGE_DOS_SIGNATURE = &h5A4D    ' MZ
3625Const IMAGE_OS2_SIGNATURE = &h454E    ' NE
3626Const IMAGE_OS2_SIGNATURE_LE = &h454C ' LE
3627Const IMAGE_VXD_SIGNATURE = &h454C    ' LE
3628Const IMAGE_NT_SIGNATURE = &h00004550 ' PE00
3629
3630Type Align(2) IMAGE_DOS_HEADER          ' DOS .EXE header
3631    e_magic As Word                     ' Magic number
3632    e_cblp As Word                      ' Bytes on last page of file
3633    e_cp As Word                        ' Pages in file
3634    e_crlc As Word                      ' Relocations
3635    e_cparhdr As Word                   ' Size of header in paragraphs
3636    e_minalloc As Word                  ' Minimum extra paragraphs needed
3637    e_maxalloc As Word                  ' Maximum extra paragraphs needed
3638    e_ss As Word                        ' Initial (relative) SS value
3639    e_sp As Word                        ' Initial SP value
3640    e_csum As Word                      ' Checksum
3641    e_ip As Word                        ' Initial IP value
3642    e_cs As Word                        ' Initial (relative) CS value
3643    e_lfarlc As Word                    ' File address of relocation table
3644    e_ovno As Word                      ' Overlay number
3645    e_res[ELM(4)] As Word               ' Reserved words
3646    e_oemid As Word                     ' OEM identifier (for e_oeminfo)
3647    e_oeminfo As Word                   ' OEM information; e_oemid specific
3648    e_res2[ELM(10)] As Word             ' Reserved words
3649    e_lfanew As Long                    ' File address of new exe header
3650End Type
3651TypeDef PIMAGE_DOS_HEADER = *IMAGE_DOS_HEADER
3652
3653Type Align(2) IMAGE_OS2_HEADER          ' OS/2 .EXE header
3654    ne_magic As Word                    ' Magic number
3655    ne_ver As CHAR                      ' Version number
3656    ne_rev As CHAR                      ' Revision number
3657    ne_enttab As Word                   ' Offset of Entry Table
3658    ne_cbenttab As Word                 ' Number of bytes in Entry Table
3659    ne_crc As Long                      ' Checksum of whole file
3660    ne_flags As Word                    ' Flag word
3661    ne_autodata As Word                 ' Automatic data segment number
3662    ne_heap As Word                     ' Initial heap allocation
3663    ne_stack As Word                    ' Initial stack allocation
3664    ne_csip As Long                     ' Initial CS:IP setting
3665    ne_sssp As Long                     ' Initial SS:SP setting
3666    ne_cseg As Word                     ' Count of file segments
3667    ne_cmod As Word                     ' Entries in Module Reference Table
3668    ne_cbnrestab As Word                ' Size of non-resident name table
3669    ne_segtab As Word                   ' Offset of Segment Table
3670    ne_rsrctab As Word                  ' Offset of Resource Table
3671    ne_restab As Word                   ' Offset of resident name table
3672    ne_modtab As Word                   ' Offset of Module Reference Table
3673    ne_imptab As Word                   ' Offset of Imported Names Table
3674    ne_nrestab As Long                  ' Offset of Non-resident Names Table
3675    ne_cmovent As Word                  ' Count of movable entries
3676    ne_align As Word                    ' Segment alignment shift count
3677    ne_cres As Word                     ' Count of resource segments
3678    ne_exetyp As Byte                   ' Target Operating system
3679    ne_flagsothers As Byte              ' Other .EXE flags
3680    ne_pretthunks As Word               ' offset to return thunks
3681    ne_psegrefbytes As Word             ' offset to segment ref. bytes
3682    ne_swaparea As Word                 ' Minimum code swap area size
3683    ne_expver As Word                   ' Expected Windows version number
3684End Type
3685TypeDef PIMAGE_OS2_HEADER = *IMAGE_OS2_HEADER
3686
3687Type Align(2) IMAGE_VXD_HEADER          ' Windows VXD header
3688    e32_magic As Word                   ' Magic number
3689    e32_border As Byte                  ' The byte ordering for the VXD
3690    e32_worder As Byte                  ' The word ordering for the VXD
3691    e32_level As DWord                  ' The EXE format level for now = 0
3692    e32_cpu As Word                     ' The CPU type
3693    e32_os As Word                      ' The OS type
3694    e32_ver As DWord                    ' Module version
3695    e32_mflags As DWord                 ' Module flags
3696    e32_mpages As DWord                 ' Module # pages
3697    e32_startobj As DWord               ' Object # for instruction pointer
3698    e32_eip As DWord                    ' Extended instruction pointer
3699    e32_stackobj As DWord               ' Object # for stack pointer
3700    e32_esp As DWord                    ' Extended stack pointer
3701    e32_pagesize As DWord               ' VXD page size
3702    e32_lastpagesize As DWord           ' Last page size in VXD
3703    e32_fixupsize As DWord              ' Fixup section size
3704    e32_fixupsum As DWord               ' Fixup section checksum
3705    e32_ldrsize As DWord                ' Loader section size
3706    e32_ldrsum As DWord                 ' Loader section checksum
3707    e32_objtab As DWord                 ' Object table offset
3708    e32_objcnt As DWord                 ' Number of objects in module
3709    e32_objmap As DWord                 ' Object page map offset
3710    e32_itermap As DWord                ' Object iterated data map offset
3711    e32_rsrctab As DWord                ' Offset of Resource Table
3712    e32_rsrccnt As DWord                ' Number of resource entries
3713    e32_restab As DWord                 ' Offset of resident name table
3714    e32_enttab As DWord                 ' Offset of Entry Table
3715    e32_dirtab As DWord                 ' Offset of Module Directive Table
3716    e32_dircnt As DWord                 ' Number of module directives
3717    e32_fpagetab As DWord               ' Offset of Fixup Page Table
3718    e32_frectab As DWord                ' Offset of Fixup Record Table
3719    e32_impmod As DWord                 ' Offset of Import Module Name Table
3720    e32_impmodcnt As DWord              ' Number of entries in Import Module Name Table
3721    e32_impproc As DWord                ' Offset of Import Procedure Name Table
3722    e32_pagesum As DWord                ' Offset of Per-Page Checksum Table
3723    e32_datapage As DWord               ' Offset of Enumerated Data Pages
3724    e32_preload As DWord                ' Number of preload pages
3725    e32_nrestab As DWord                ' Offset of Non-resident Names Table
3726    e32_cbnrestab As DWord              ' Size of Non-resident Name Table
3727    e32_nressum As DWord                ' Non-resident Name Table Checksum
3728    e32_autodata As DWord               ' Object # for automatic data object
3729    e32_debuginfo As DWord              ' Offset of the debugging information
3730    e32_debuglen As DWord               ' The length of the debugging info. in bytes
3731    e32_instpreload As DWord            ' Number of instance pages in preload section of VXD file
3732    e32_instdemand As DWord             ' Number of instance pages in demand load section of VXD file
3733    e32_heapsize As DWord               ' Size of heap - for 16-bit apps
3734    e32_res3[ELM(12)] As Byte           ' Reserved words
3735    e32_winresoff As DWord
3736    e32_winreslen As DWord
3737    e32_devid As Word                   ' Device ID for VxD
3738    e32_ddkver As Word                  ' DDK version for VxD
3739End Type
3740TypeDef PIMAGE_VXD_HEADER = *IMAGE_VXD_HEADER
3741
3742' File header format.
3743Type Align(4) IMAGE_FILE_HEADER
3744    Machine As Word
3745    NumberOfSections As Word
3746    TimeDateStamp As DWord
3747    PointerToSymbolTable As DWord
3748    NumberOfSymbols As DWord
3749    SizeOfOptionalHeader As Word
3750    Characteristics As Word
3751End Type
3752TypeDef PIMAGE_FILE_HEADER = *IMAGE_FILE_HEADER
3753
3754Const IMAGE_SIZEOF_FILE_HEADER = 20
3755
3756Const IMAGE_FILE_RELOCS_STRIPPED         = &h0001  ' Relocation info stripped from file.
3757Const IMAGE_FILE_EXECUTABLE_IMAGE        = &h0002  ' File is executable  (i.e. no unresolved externel references).
3758Const IMAGE_FILE_LINE_NUMS_STRIPPED      = &h0004  ' Line nunbers stripped from file.
3759Const IMAGE_FILE_LOCAL_SYMS_STRIPPED     = &h0008  ' Local symbols stripped from file.
3760Const IMAGE_FILE_AGGRESIVE_WS_TRIM       = &h0010  ' Agressively trim working set
3761Const IMAGE_FILE_LARGE_ADDRESS_AWARE     = &h0020  ' App can handle >2gb addresses
3762Const IMAGE_FILE_BYTES_REVERSED_LO       = &h0080  ' Bytes of machine word are reversed.
3763Const IMAGE_FILE_32BIT_MACHINE           = &h0100  ' 32 bit word machine.
3764Const IMAGE_FILE_DEBUG_STRIPPED          = &h0200  ' Debugging info stripped from file in .DBG file
3765Const IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP = &h0400  ' If Image is on removable media, copy and run from the swap file.
3766Const IMAGE_FILE_NET_RUN_FROM_SWAP       = &h0800  ' If Image is on Net, copy and run from the swap file.
3767Const IMAGE_FILE_SYSTEM                  = &h1000  ' System File.
3768Const IMAGE_FILE_DLL                     = &h2000  ' File is a DLL.
3769Const IMAGE_FILE_UP_SYSTEM_ONLY          = &h4000  ' File should only be run on a UP machine
3770Const IMAGE_FILE_BYTES_REVERSED_HI       = &h8000  ' Bytes of machine word are reversed.
3771
3772Const IMAGE_FILE_MACHINE_UNKNOWN         = 0
3773Const IMAGE_FILE_MACHINE_I386            = &h014c  ' Intel 386.
3774Const IMAGE_FILE_MACHINE_R3000           = &h0162  ' MIPS little-endian, 0x160 big-endian
3775Const IMAGE_FILE_MACHINE_R4000           = &h0166  ' MIPS little-endian
3776Const IMAGE_FILE_MACHINE_R10000          = &h0168  ' MIPS little-endian
3777Const IMAGE_FILE_MACHINE_WCEMIPSV2       = &h0169  ' MIPS little-endian WCE v2
3778Const IMAGE_FILE_MACHINE_ALPHA           = &h0184  ' Alpha_AXP
3779Const IMAGE_FILE_MACHINE_SH3             = &h01a2  ' SH3 little-endian
3780Const IMAGE_FILE_MACHINE_SH3DSP          = &h01a3
3781Const IMAGE_FILE_MACHINE_SH3E            = &h01a4  ' SH3E little-endian
3782Const IMAGE_FILE_MACHINE_SH4             = &h01a6  ' SH4 little-endian
3783Const IMAGE_FILE_MACHINE_SH5             = &h01a8  ' SH5
3784Const IMAGE_FILE_MACHINE_ARM             = &h01c0  ' ARM Little-Endian
3785Const IMAGE_FILE_MACHINE_THUMB           = &h01c2
3786Const IMAGE_FILE_MACHINE_AM33            = &h01d3
3787Const IMAGE_FILE_MACHINE_POWERPC         = &h01F0  ' IBM PowerPC Little-Endian
3788Const IMAGE_FILE_MACHINE_POWERPCFP       = &h01f1
3789Const IMAGE_FILE_MACHINE_IA64            = &h0200  ' Intel 64
3790Const IMAGE_FILE_MACHINE_MIPS16          = &h0266  ' MIPS
3791Const IMAGE_FILE_MACHINE_ALPHA64         = &h0284  ' ALPHA64
3792Const IMAGE_FILE_MACHINE_MIPSFPU         = &h0366  ' MIPS
3793Const IMAGE_FILE_MACHINE_MIPSFPU16       = &h0466  ' MIPS
3794Const IMAGE_FILE_MACHINE_AXP64           = IMAGE_FILE_MACHINE_ALPHA64
3795Const IMAGE_FILE_MACHINE_TRICORE         = &h0520  ' Infineon
3796Const IMAGE_FILE_MACHINE_CEF             = &h0CEF
3797Const IMAGE_FILE_MACHINE_EBC             = &h0EBC  ' EFI Byte Code
3798Const IMAGE_FILE_MACHINE_AMD64           = &h8664  ' AMD64 (K8)
3799Const IMAGE_FILE_MACHINE_M32R            = &h9041  ' M32R little-endian
3800Const IMAGE_FILE_MACHINE_CEE             = &hC0EE
3801
3802' Directory format.
3803Type IMAGE_DATA_DIRECTORY
3804    VirtualAddress As DWord
3805    Size As DWord
3806End Type
3807TypeDef PIMAGE_DATA_DIRECTORY = *IMAGE_DATA_DIRECTORY
3808
3809Const IMAGE_NUMBEROF_DIRECTORY_ENTRIES = 16
3810
3811' Optional header format.
3812Type IMAGE_OPTIONAL_HEADER32
3813    Magic As Word
3814    MajorLinkerVersion As Byte
3815    MinorLinkerVersion As Byte
3816    SizeOfCode As DWord
3817    SizeOfInitializedData As DWord
3818    SizeOfUninitializedData As DWord
3819    AddressOfEntryPoint As DWord
3820    BaseOfCode As DWord
3821    BaseOfData As DWord
3822
3823    ImageBase As DWord
3824    SectionAlignment As DWord
3825    FileAlignment As DWord
3826    MajorOperatingSystemVersion As Word
3827    MinorOperatingSystemVersion As Word
3828    MajorImageVersion As Word
3829    MinorImageVersion As Word
3830    MajorSubsystemVersion As Word
3831    MinorSubsystemVersion As Word
3832    Win32VersionValue As Word
3833    SizeOfImage As DWord
3834    SizeOfHeaders As DWord
3835    CheckSum As DWord
3836    Subsystem As Word
3837    DllCharacteristics As Word
3838    SizeOfStackReserve As DWord
3839    SizeOfStackCommit As DWord
3840    SizeOfHeapReserve As DWord
3841    SizeOfHeapCommit As DWord
3842    LoaderFlags As DWord
3843    NumberOfRvaAndSizes As DWord
3844    DataDirectory[ELM(IMAGE_NUMBEROF_DIRECTORY_ENTRIES)] As IMAGE_DATA_DIRECTORY
3845End Type
3846TypeDef PIMAGE_OPTIONAL_HEADER32 = *IMAGE_OPTIONAL_HEADER32
3847
3848Type IMAGE_ROM_OPTIONAL_HEADER
3849    Magic As Word
3850    MajorLinkerVersion As Byte
3851    MinorLinkerVersion As Byte
3852    SizeOfCode As DWord
3853    SizeOfInitializedData As DWord
3854    SizeOfUninitializedData As DWord
3855    AddressOfEntryPoint As DWord
3856    BaseOfCode As DWord
3857    BaseOfData As DWord
3858    BaseOfBss As DWord
3859    GprMask As DWord
3860    CprMask[ELM(4)] As DWord
3861    GpValue As DWord
3862End Type
3863TypeDef PIMAGE_ROM_OPTIONAL_HEADER = *IMAGE_ROM_OPTIONAL_HEADER
3864
3865Type IMAGE_OPTIONAL_HEADER64
3866    Magic As Word
3867    MajorLinkerVersion As Byte
3868    MinorLinkerVersion As Byte
3869    SizeOfCode As DWord
3870    SizeOfInitializedData As DWord
3871    SizeOfUninitializedData As DWord
3872    AddressOfEntryPoint As DWord
3873    BaseOfCode As DWord
3874    ImageBase As QWord
3875    SectionAlignment As DWord
3876    FileAlignment As DWord
3877    MajorOperatingSystemVersion As Word
3878    MinorOperatingSystemVersion As Word
3879    MajorImageVersion As Word
3880    MinorImageVersion As Word
3881    MajorSubsystemVersion As Word
3882    MinorSubsystemVersion As Word
3883    Win32VersionValue As DWord
3884    SizeOfImage As DWord
3885    SizeOfHeaders As DWord
3886    CheckSum As DWord
3887    Subsystem As Word
3888    DllCharacteristics As Word
3889    SizeOfStackReserve As QWord
3890    SizeOfStackCommit As QWord
3891    SizeOfHeapReserve As QWord
3892    SizeOfHeapCommit As QWord
3893    LoaderFlags As DWord
3894    NumberOfRvaAndSizes As DWord
3895    DataDirectory[ELM(IMAGE_NUMBEROF_DIRECTORY_ENTRIES)] As IMAGE_DATA_DIRECTORY
3896End Type
3897TypeDef PIMAGE_OPTIONAL_HEADER64 = *IMAGE_OPTIONAL_HEADER64
3898
3899Const IMAGE_NT_OPTIONAL_HDR32_MAGIC = &h10b
3900Const IMAGE_NT_OPTIONAL_HDR64_MAGIC = &h20b
3901Const IMAGE_ROM_OPTIONAL_HDR_MAGIC = &h107
3902
3903#ifdef _WIN64
3904TypeDef IMAGE_OPTIONAL_HEADER = IMAGE_OPTIONAL_HEADER64
3905TypeDef PIMAGE_OPTIONAL_HEADER = PIMAGE_OPTIONAL_HEADER64
3906Const IMAGE_NT_OPTIONAL_HDR_MAGIC = IMAGE_NT_OPTIONAL_HDR64_MAGIC
3907#else
3908TypeDef IMAGE_OPTIONAL_HEADER = IMAGE_OPTIONAL_HEADER32
3909TypeDef PIMAGE_OPTIONAL_HEADER = PIMAGE_OPTIONAL_HEADER32
3910Const IMAGE_NT_OPTIONAL_HDR_MAGIC = IMAGE_NT_OPTIONAL_HDR32_MAGIC
3911#endif
3912
3913Type IMAGE_NT_HEADERS64
3914    Signature As DWord
3915    FileHeader As IMAGE_FILE_HEADER
3916    OptionalHeader As IMAGE_OPTIONAL_HEADER64
3917End Type
3918TypeDef PIMAGE_NT_HEADERS64 = *IMAGE_NT_HEADERS64
3919
3920Type IMAGE_NT_HEADERS32
3921    Signature As DWord
3922    FileHeader As IMAGE_FILE_HEADER
3923    OptionalHeader As IMAGE_OPTIONAL_HEADER32
3924End Type
3925TypeDef PIMAGE_NT_HEADERS32 = *IMAGE_NT_HEADERS32
3926
3927Type IMAGE_ROM_HEADERS
3928    FileHeader As IMAGE_FILE_HEADER
3929    OptionalHeader As IMAGE_ROM_OPTIONAL_HEADER
3930End Type
3931TypeDef PIMAGE_ROM_HEADERS = *IMAGE_ROM_HEADERS
3932
3933#ifdef _WIN64
3934TypeDef IMAGE_NT_HEADERS = IMAGE_NT_HEADERS64
3935TypeDef PIMAGE_NT_HEADERS = PIMAGE_NT_HEADERS64
3936#else
3937TypeDef IMAGE_NT_HEADERS = IMAGE_NT_HEADERS32
3938TypeDef PIMAGE_NT_HEADERS = PIMAGE_NT_HEADERS32
3939#endif
3940/*
3941Const IMAGE_FIRST_SECTION( ntheader ) (        \_
3942    ((ntheader) As ULONG_PTR +                                              _
3943     FIELD_OFFSET( IMAGE_NT_HEADERS, OptionalHeader ) +                 _
3944     ((PIMAGE_NT_HEADERS)(ntheader))->FileHeader.SizeOfOptionalHeader   _
3945    ) As PIMAGE_SECTION_HEADER)
3946*/
3947Const IMAGE_SUBSYSTEM_UNKNOWN             = 0   ' Unknown subsystem.
3948Const IMAGE_SUBSYSTEM_NATIVE              = 1   ' Image doesn't require a subsystem.
3949Const IMAGE_SUBSYSTEM_WINDOWS_GUI         = 2   ' Image runs in the Windows GUI subsystem.
3950Const IMAGE_SUBSYSTEM_WINDOWS_CUI         = 3   ' Image runs in the Windows character subsystem.
3951Const IMAGE_SUBSYSTEM_OS2_CUI             = 5   ' image runs in the OS/2 character subsystem.
3952Const IMAGE_SUBSYSTEM_POSIX_CUI           = 7   ' image runs in the Posix character subsystem.
3953Const IMAGE_SUBSYSTEM_NATIVE_WINDOWS      = 8   ' image is a native Win9x driver.
3954Const IMAGE_SUBSYSTEM_WINDOWS_CE_GUI      = 9   ' Image runs in the Windows CE subsystem.
3955Const IMAGE_SUBSYSTEM_EFI_APPLICATION     = 10  '
3956Const IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER = 11   '
3957Const IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER  = 12  '
3958Const IMAGE_SUBSYSTEM_EFI_ROM             = 13
3959Const IMAGE_SUBSYSTEM_XBOX                = 14
3960Const IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION = 16
3961
3962'      IMAGE_LIBRARY_PROCESS_INIT           = &h0001    ' Reserved.
3963'      IMAGE_LIBRARY_PROCESS_TERM           = &h0002    ' Reserved.
3964'      IMAGE_LIBRARY_THREAD_INIT            = &h0004    ' Reserved.
3965'      IMAGE_LIBRARY_THREAD_TERM            = &h0008    ' Reserved.
3966Const IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE = &h0040     ' DLL can move.
3967Const IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY   = &h0080     ' Code Integrity Image
3968Const IMAGE_DLLCHARACTERISTICS_NX_COMPAT    = &h0100     ' Image is NX compatible
3969Const IMAGE_DLLCHARACTERISTICS_NO_ISOLATION = &h0200     ' Image understands isolation and doesn't want it
3970Const IMAGE_DLLCHARACTERISTICS_NO_SEH       = &h0400     ' Image does not use SEH.  No SE handler may reside in this image
3971Const IMAGE_DLLCHARACTERISTICS_NO_BIND      = &h0800     ' Do not bind this image.
3972'                                            = &h1000    ' Reserved.
3973Const IMAGE_DLLCHARACTERISTICS_WDM_DRIVER   = &h2000     ' Driver uses WDM model
3974'                                           = &h4000    ' Reserved.
3975Const IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE    = &h8000
3976
3977Const IMAGE_DIRECTORY_ENTRY_EXPORT         = 0   ' Export Directory
3978Const IMAGE_DIRECTORY_ENTRY_IMPORT         = 1   ' Import Directory
3979Const IMAGE_DIRECTORY_ENTRY_RESOURCE       = 2   ' Resource Directory
3980Const IMAGE_DIRECTORY_ENTRY_EXCEPTION      = 3   ' Exception Directory
3981Const IMAGE_DIRECTORY_ENTRY_SECURITY       = 4   ' Security Directory
3982Const IMAGE_DIRECTORY_ENTRY_BASERELOC      = 5   ' Base Relocation Table
3983Const IMAGE_DIRECTORY_ENTRY_DEBUG          = 6   ' Debug Directory
3984'      IMAGE_DIRECTORY_ENTRY_COPYRIGHT      = 7  ' (X86 usage)
3985Const IMAGE_DIRECTORY_ENTRY_ARCHITECTURE   = 7   ' Architecture Specific Data
3986Const IMAGE_DIRECTORY_ENTRY_GLOBALPTR      = 8   ' RVA of GP
3987Const IMAGE_DIRECTORY_ENTRY_TLS            = 9   ' TLS Directory
3988Const IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG   = 10   ' Load Configuration Directory
3989Const IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT  = 11   ' Bound Import Directory in headers
3990Const IMAGE_DIRECTORY_ENTRY_IAT           = 12   ' Import Address Table
3991Const IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT  = 13   ' Delay Load Import Descriptors
3992Const IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR = 14  ' COM Runtime descriptor
3993
3994' Non-COFF Object file header
3995Type ANON_OBJECT_HEADER
3996    Sig1 As Word             ' Must be IMAGE_FILE_MACHINE_UNKNOWN
3997    Sig2 As Word             ' Must be 0xffff
3998    Version As Word  ' >= 1 (implies the CLSID field is present)
3999    Machine As Word
4000    TimeDateStamp As DWord
4001    ClassID As CLSID       ' Used to invoke CoCreateInstance
4002    SizeOfData As DWord    ' Size of data that follows the header
4003End Type
4004
4005Type ANON_OBJECT_HEADER_V2
4006    Sig1 As Word            ' Must be IMAGE_FILE_MACHINE_UNKNOWN
4007    Sig2 As Word            ' Must be 0xffff
4008    Version As Word         ' >= 2 (implies the Flags field is present - otherwise V1)
4009    Machine As Word
4010    TimeDateStamp As DWord
4011    ClassID As CLSID         ' Used to invoke CoCreateInstance
4012    SizeOfData As DWord      ' Size of data that follows the header
4013    Flags As DWord           ' 0x1 -> contains metadata
4014    MetaDataSize As DWord    ' Size of CLR metadata
4015    MetaDataOffset As DWord  ' Offset of CLR metadata
4016End Type
4017
4018Const IMAGE_SIZEOF_SHORT_NAME = 8
4019
4020Type IMAGE_SECTION_HEADER
4021    Name[ELM(IMAGE_SIZEOF_SHORT_NAME)] As Byte
4022    'Union
4023        PhysicalAddress As DWord
4024'       VirtualSize As DWord
4025'   } Misc
4026    VirtualAddress As DWord
4027    SizeOfRawData As DWord
4028    PointerToRawData As DWord
4029    PointerToRelocations As DWord
4030    PointerToLinenumbers As DWord
4031    NumberOfRelocations As Word
4032    NumberOfLinenumbers As Word
4033    Characteristics As DWord
4034End Type
4035TypeDef PIMAGE_SECTION_HEADER = *IMAGE_SECTION_HEADER
4036
4037Const IMAGE_SIZEOF_SECTION_HEADER = 40
4038
4039' Section characteristics.
4040'      IMAGE_SCN_TYPE_REG                 = &h00000000 ' Reserved.
4041'      IMAGE_SCN_TYPE_DSECT               = &h00000001 ' Reserved.
4042'      IMAGE_SCN_TYPE_NOLOAD              = &h00000002 ' Reserved.
4043'      IMAGE_SCN_TYPE_GROUP               = &h00000004 ' Reserved.
4044Const IMAGE_SCN_TYPE_NO_PAD              = &h00000008  ' Reserved.
4045'      IMAGE_SCN_TYPE_COPY                = &h00000010 ' Reserved.
4046
4047Const IMAGE_SCN_CNT_CODE                 = &h00000020  ' Section contains code.
4048Const IMAGE_SCN_CNT_INITIALIZED_DATA     = &h00000040  ' Section contains initialized data.
4049Const IMAGE_SCN_CNT_UNINITIALIZED_DATA   = &h00000080  ' Section contains uninitialized data.
4050
4051Const IMAGE_SCN_LNK_OTHER                = &h00000100  ' Reserved.
4052Const IMAGE_SCN_LNK_INFO                 = &h00000200  ' Section contains comments or some other type of information.
4053'      IMAGE_SCN_TYPE_OVER                = &h00000400 ' Reserved.
4054Const IMAGE_SCN_LNK_REMOVE               = &h00000800  ' Section contents will not become part of image.
4055Const IMAGE_SCN_LNK_COMDAT               = &h00001000  ' Section contents comdat.
4056'                                         = &h00002000 ' Reserved.
4057'      IMAGE_SCN_MEM_PROTECTED - Obsolete = &h00004000
4058Const IMAGE_SCN_NO_DEFER_SPEC_EXC        = &h00004000  ' Reset speculative exceptions handling bits in the TLB entries for this section.
4059Const IMAGE_SCN_GPREL                    = &h00008000  ' Section content can be accessed relative to GP
4060Const IMAGE_SCN_MEM_FARDATA              = &h00008000
4061'      IMAGE_SCN_MEM_SYSHEAP  - Obsolete  = &h00010000
4062Const IMAGE_SCN_MEM_PURGEABLE            = &h00020000
4063Const IMAGE_SCN_MEM_16BIT                = &h00020000
4064Const IMAGE_SCN_MEM_LOCKED               = &h00040000
4065Const IMAGE_SCN_MEM_PRELOAD              = &h00080000
4066
4067Const IMAGE_SCN_ALIGN_1BYTES             = &h00100000  '
4068Const IMAGE_SCN_ALIGN_2BYTES             = &h00200000  '
4069Const IMAGE_SCN_ALIGN_4BYTES             = &h00300000  '
4070Const IMAGE_SCN_ALIGN_8BYTES             = &h00400000  '
4071Const IMAGE_SCN_ALIGN_16BYTES            = &h00500000  ' Default alignment if no others are specified.
4072Const IMAGE_SCN_ALIGN_32BYTES            = &h00600000  '
4073Const IMAGE_SCN_ALIGN_64BYTES            = &h00700000  '
4074Const IMAGE_SCN_ALIGN_128BYTES           = &h00800000  '
4075Const IMAGE_SCN_ALIGN_256BYTES           = &h00900000  '
4076Const IMAGE_SCN_ALIGN_512BYTES           = &h00A00000  '
4077Const IMAGE_SCN_ALIGN_1024BYTES          = &h00B00000  '
4078Const IMAGE_SCN_ALIGN_2048BYTES          = &h00C00000  '
4079Const IMAGE_SCN_ALIGN_4096BYTES          = &h00D00000  '
4080Const IMAGE_SCN_ALIGN_8192BYTES          = &h00E00000  '
4081' Unused                                  = &h00F00000
4082Const IMAGE_SCN_ALIGN_MASK               = &h00F00000
4083
4084Const IMAGE_SCN_LNK_NRELOC_OVFL          = &h01000000  ' Section contains extended relocations.
4085Const IMAGE_SCN_MEM_DISCARDABLE          = &h02000000  ' Section can be discarded.
4086Const IMAGE_SCN_MEM_NOT_CACHED           = &h04000000  ' Section is not cachable.
4087Const IMAGE_SCN_MEM_NOT_PAGED            = &h08000000  ' Section is not pageable.
4088Const IMAGE_SCN_MEM_SHARED               = &h10000000  ' Section is shareable.
4089Const IMAGE_SCN_MEM_EXECUTE              = &h20000000  ' Section is executable.
4090Const IMAGE_SCN_MEM_READ                 = &h40000000  ' Section is readable.
4091Const IMAGE_SCN_MEM_WRITE                = &h80000000  ' Section is writeable.
4092
4093' TLS Chaacteristic Flags
4094Const IMAGE_SCN_SCALE_INDEX              = &h00000001  ' Tls index is scaled
4095
4096' Symbol format.
4097Type Align(2) IMAGE_SYMBOL
4098'   Union
4099        ShortName[ELM(8)] As Byte
4100'       Type
4101'           Short As DWord
4102'           Long As DWord
4103'       } Name
4104'       LongName[ELM(2)] As DWord ' PBYTE [ELM(2)]
4105'   } N
4106    Value AS DWord
4107    SectionNumber As Integer
4108    Type_ As Word
4109    StorageClass As Byte
4110    NumberOfAuxSymbols As Byte
4111End Type
4112TypeDef PIMAGE_SYMBOL = * /*UNALIGNED*/ IMAGE_SYMBOL
4113
4114Const IMAGE_SIZEOF_SYMBOL  = 18
4115
4116' Section values.
4117Const IMAGE_SYM_UNDEFINED   = 0 As Integer         ' Symbol is undefined or is common.
4118Const IMAGE_SYM_ABSOLUTE    = -1 As Integer        ' Symbol is an absolute value.
4119Const IMAGE_SYM_DEBUG       = -2 As Integer        ' Symbol is a special debug item.
4120Const IMAGE_SYM_SECTION_MAX = &hFEFF               ' Values 0xFF00-0xFFFF are special
4121
4122' Type (fundamental) values.
4123
4124Const IMAGE_SYM_TYPE_NULL               = &h0000  ' no type.
4125Const IMAGE_SYM_TYPE_VOID               = &h0001  '
4126Const IMAGE_SYM_TYPE_CHAR               = &h0002  ' type character.
4127Const IMAGE_SYM_TYPE_SHORT              = &h0003  ' type short integer.
4128Const IMAGE_SYM_TYPE_INT                = &h0004  '
4129Const IMAGE_SYM_TYPE_LONG               = &h0005  '
4130Const IMAGE_SYM_TYPE_FLOAT              = &h0006  '
4131Const IMAGE_SYM_TYPE_DOUBLE             = &h0007  '
4132Const IMAGE_SYM_TYPE_STRUCT             = &h0008  '
4133Const IMAGE_SYM_TYPE_UNION              = &h0009  '
4134Const IMAGE_SYM_TYPE_ENUM               = &h000A  ' enumeration.
4135Const IMAGE_SYM_TYPE_MOE                = &h000B  ' member of enumeration.
4136Const IMAGE_SYM_TYPE_BYTE               = &h000C  '
4137Const IMAGE_SYM_TYPE_WORD               = &h000D  '
4138Const IMAGE_SYM_TYPE_UINT               = &h000E  '
4139Const IMAGE_SYM_TYPE_DWORD              = &h000F  '
4140Const IMAGE_SYM_TYPE_PCODE              = &h8000  '
4141
4142'Type (derived) values.
4143
4144Const IMAGE_SYM_DTYPE_NULL              = 0       ' no derived type.
4145Const IMAGE_SYM_DTYPE_POINTER           = 1       ' pointer.
4146Const IMAGE_SYM_DTYPE_FUNCTION          = 2       ' function.
4147Const IMAGE_SYM_DTYPE_ARRAY             = 3       ' array.
4148
4149' Storage classes.
4150Const IMAGE_SYM_CLASS_END_OF_FUNCTION = -1 As Byte
4151Const IMAGE_SYM_CLASS_NULL = &h0000
4152Const IMAGE_SYM_CLASS_AUTOMATIC = &h0001
4153Const IMAGE_SYM_CLASS_EXTERNAL = &h0002
4154Const IMAGE_SYM_CLASS_STATIC = &h0003
4155Const IMAGE_SYM_CLASS_REGISTER = &h0004
4156Const IMAGE_SYM_CLASS_EXTERNAL_DEF = &h0005
4157Const IMAGE_SYM_CLASS_LABEL = &h0006
4158Const IMAGE_SYM_CLASS_UNDEFINED_LABEL = &h0007
4159Const IMAGE_SYM_CLASS_MEMBER_OF_STRUCT = &h0008
4160Const IMAGE_SYM_CLASS_ARGUMENT = &h0009
4161Const IMAGE_SYM_CLASS_STRUCT_TAG = &h000A
4162Const IMAGE_SYM_CLASS_MEMBER_OF_UNION = &h000B
4163Const IMAGE_SYM_CLASS_UNION_TAG = &h000C
4164Const IMAGE_SYM_CLASS_TYPE_DEFINITION = &h000D
4165Const IMAGE_SYM_CLASS_UNDEFINED_STATIC = &h000E
4166Const IMAGE_SYM_CLASS_ENUM_TAG = &h000F
4167Const IMAGE_SYM_CLASS_MEMBER_OF_ENUM = &h0010
4168Const IMAGE_SYM_CLASS_REGISTER_PARAM = &h0011
4169Const IMAGE_SYM_CLASS_BIT_FIELD = &h0012
4170
4171Const IMAGE_SYM_CLASS_FAR_EXTERNAL = &h0044
4172
4173Const IMAGE_SYM_CLASS_BLOCK = &h0064
4174Const IMAGE_SYM_CLASS_FUNCTION = &h0065
4175Const IMAGE_SYM_CLASS_END_OF_STRUCT = &h0066
4176Const IMAGE_SYM_CLASS_FILE = &h0067
4177' new
4178Const IMAGE_SYM_CLASS_SECTION = &h0068
4179Const IMAGE_SYM_CLASS_WEAK_EXTERNAL = &h0069
4180
4181Const IMAGE_SYM_CLASS_CLR_TOKEN = &h006B
4182
4183' type packing constants
4184Const N_BTMASK = &h000F
4185Const N_TMASK = &h0030
4186Const N_TMASK1 = &h00C0
4187Const N_TMASK2 = &h00F0
4188Const N_BTSHFT = 4
4189Const N_TSHIFT = 2
4190
4191Const BTYPE(x) = ((x) And N_BTMASK)
4192
4193#ifndef ISPTR
4194#define ISPTR
4195Const ISPTR(x) = (((x) And N_TMASK) = (IMAGE_SYM_DTYPE_POINTER << N_BTSHFT))
4196#endif
4197
4198#ifndef ISFCN
4199#define ISFCN
4200Const ISFCN(x) = (((x) And N_TMASK) = (IMAGE_SYM_DTYPE_FUNCTION << N_BTSHFT))
4201#endif
4202
4203#ifndef ISARY
4204#define ISARY
4205Const ISARY(x) = (((x) And N_TMASK) = (IMAGE_SYM_DTYPE_ARRAY << N_BTSHFT))
4206#endif
4207
4208#ifndef ISTAG
4209#define ISTAG
4210Const ISTAG(x) = ((x) = IMAGE_SYM_CLASS_STRUCT_TAG Or (x) = IMAGE_SYM_CLASS_UNION_TAG Or (x) = IMAGE_SYM_CLASS_ENUM_TAG)
4211#endif
4212
4213#ifndef INCREF
4214#define INCREF
4215Const INCREF(x) = ((((x) And (Not N_BTMASK)) << N_TSHIFT) Or (IMAGE_SYM_DTYPE_POINTER << N_BTSHFT) Or ((x) And N_BTMASK))
4216#endif
4217
4218#ifndef DECREF
4219#define DECREF
4220Const DECREF(x) = ((((x) >> N_TSHIFT) And (Not N_BTMASK)) Or ((x) And N_BTMASK))
4221#endif
4222
4223' Auxiliary entry format.
4224Type /*Union*/ Align(2) IMAGE_AUX_SYMBOL
4225'   Type
4226'       TagIndex As DWord                     ' struct, union, or enum tag index
4227'       Union
4228'           Type
4229'               Linenumber As Word            ' declaration line number
4230'               Size As Word                  ' size of struct, union, or enum
4231'           } LnSz
4232'           TotalSize As DWord
4233'       } Misc
4234'       Union
4235'           Type                              ' if ISFCN, tag, or .bb
4236'           PointerToLinenumber As DWord
4237'               PointerToNextFunction As DWord
4238'           } Function
4239'           Type                              ' if ISARY, up to 4 dimen.
4240'               Dimension[ELM(4)] As Word
4241'           } Array
4242'       } FcnAry
4243'       TvIndex As Word                       ' tv index
4244'   } Sym
4245'   Type
4246'       Name[ELM(IMAGE_SIZEOF_SYMBOL)] As Byte
4247'   } File
4248'   Type
4249        Length As DWord                 ' section length
4250        NumberOfRelocations As Word     ' number of relocation entries
4251        NumberOfLinenumbers As Word     ' number of line numbers
4252        CheckSum As DWord               ' checksum for communal
4253        Number As Integer               ' section number to associate with
4254        Selection As Byte               ' communal selection type
4255'   } Section
4256End Type 'Union
4257TypeDef PIMAGE_AUX_SYMBOL = * /*UNALIGNED*/ IMAGE_AUX_SYMBOL
4258
4259Enum IMAGE_AUX_SYMBOL_TYPE
4260    IMAGE_AUX_SYMBOL_TYPE_TOKEN_DEF = 1
4261End Enum
4262
4263Type Align(2) IMAGE_AUX_SYMBOL_TOKEN_DEF
4264    bAuxType As Byte
4265    bReserved As Byte
4266    SymbolTableIndex As DWord
4267    rgbReserved[ELM(12)] As Byte
4268End Type
4269TypeDef PIMAGE_AUX_SYMBOL_TOKEN_DEF = * /*UNALIGNED*/ IMAGE_AUX_SYMBOL_TOKEN_DEF
4270
4271' Communal selection types.
4272Const IMAGE_COMDAT_SELECT_NODUPLICATES = 1
4273Const IMAGE_COMDAT_SELECT_ANY = 2
4274Const IMAGE_COMDAT_SELECT_SAME_SIZE = 3
4275Const IMAGE_COMDAT_SELECT_EXACT_MATCH = 4
4276Const IMAGE_COMDAT_SELECT_ASSOCIATIVE = 5
4277Const IMAGE_COMDAT_SELECT_LARGEST = 6
4278Const IMAGE_COMDAT_SELECT_NEWEST = 7
4279
4280Const IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY = 1
4281Const IMAGE_WEAK_EXTERN_SEARCH_LIBRARY = 2
4282Const IMAGE_WEAK_EXTERN_SEARCH_ALIAS = 3
4283
4284' Relocation format.
4285Type Align(2) IMAGE_RELOCATION
4286'   Union
4287'       VirtualAddress As DWord
4288        RelocCount As DWord
4289'   End Union
4290    SymbolTableIndex As DWord
4291    Type_ As Word
4292End Type
4293TypeDef PIMAGE_RELOCATION = * /*UNALIGNED*/ IMAGE_RELOCATION
4294
4295' I386 relocation types.
4296Const IMAGE_REL_I386_ABSOLUTE       = &h0000  ' Reference is absolute, no relocation is necessary
4297Const IMAGE_REL_I386_DIR16          = &h0001  ' Direct 16-bit reference to the symbols virtual address
4298Const IMAGE_REL_I386_REL16          = &h0002  ' PC-relative 16-bit reference to the symbols virtual address
4299Const IMAGE_REL_I386_DIR32          = &h0006  ' Direct 32-bit reference to the symbols virtual address
4300Const IMAGE_REL_I386_DIR32NB        = &h0007  ' Direct 32-bit reference to the symbols virtual address, base not included
4301Const IMAGE_REL_I386_SEG12          = &h0009  ' Direct 16-bit reference to the segment-selector bits of a 32-bit virtual address
4302Const IMAGE_REL_I386_SECTION        = &h000A
4303Const IMAGE_REL_I386_SECREL         = &h000B
4304Const IMAGE_REL_I386_TOKEN          = &h000C  ' clr token
4305Const IMAGE_REL_I386_SECREL7        = &h000D  ' 7 bit offset from base of section containing target
4306Const IMAGE_REL_I386_REL32          = &h0014  ' PC-relative 32-bit reference to the symbols virtual address
4307
4308' MIPS relocation types.
4309Const IMAGE_REL_MIPS_ABSOLUTE       = &h0000  ' Reference is absolute, no relocation is necessary
4310Const IMAGE_REL_MIPS_REFHALF        = &h0001
4311Const IMAGE_REL_MIPS_REFWORD        = &h0002
4312Const IMAGE_REL_MIPS_JMPADDR        = &h0003
4313Const IMAGE_REL_MIPS_REFHI          = &h0004
4314Const IMAGE_REL_MIPS_REFLO          = &h0005
4315Const IMAGE_REL_MIPS_GPREL          = &h0006
4316Const IMAGE_REL_MIPS_LITERAL        = &h0007
4317Const IMAGE_REL_MIPS_SECTION        = &h000A
4318Const IMAGE_REL_MIPS_SECREL         = &h000B
4319Const IMAGE_REL_MIPS_SECRELLO       = &h000C  ' Low 16-bit section relative referemce (used for >32k TLS)
4320Const IMAGE_REL_MIPS_SECRELHI       = &h000D  ' High 16-bit section relative reference (used for >32k TLS)
4321Const IMAGE_REL_MIPS_TOKEN          = &h000E  ' clr token
4322Const IMAGE_REL_MIPS_JMPADDR16      = &h0010
4323Const IMAGE_REL_MIPS_REFWORDNB      = &h0022
4324Const IMAGE_REL_MIPS_PAIR           = &h0025
4325
4326' Alpha Relocation types.
4327Const IMAGE_REL_ALPHA_ABSOLUTE      = &h0000
4328Const IMAGE_REL_ALPHA_REFLONG       = &h0001
4329Const IMAGE_REL_ALPHA_REFQUAD       = &h0002
4330Const IMAGE_REL_ALPHA_GPREL32       = &h0003
4331Const IMAGE_REL_ALPHA_LITERAL       = &h0004
4332Const IMAGE_REL_ALPHA_LITUSE        = &h0005
4333Const IMAGE_REL_ALPHA_GPDISP        = &h0006
4334Const IMAGE_REL_ALPHA_BRADDR        = &h0007
4335Const IMAGE_REL_ALPHA_HINT          = &h0008
4336Const IMAGE_REL_ALPHA_INLINE_REFLONG= &h0009
4337Const IMAGE_REL_ALPHA_REFHI         = &h000A
4338Const IMAGE_REL_ALPHA_REFLO         = &h000B
4339Const IMAGE_REL_ALPHA_PAIR          = &h000C
4340Const IMAGE_REL_ALPHA_MATCH         = &h000D
4341Const IMAGE_REL_ALPHA_SECTION       = &h000E
4342Const IMAGE_REL_ALPHA_SECREL        = &h000F
4343Const IMAGE_REL_ALPHA_REFLONGNB     = &h0010
4344Const IMAGE_REL_ALPHA_SECRELLO      = &h0011  ' Low 16-bit section relative reference
4345Const IMAGE_REL_ALPHA_SECRELHI      = &h0012  ' High 16-bit section relative reference
4346Const IMAGE_REL_ALPHA_REFQ3         = &h0013  ' High 16 bits of 48 bit reference
4347Const IMAGE_REL_ALPHA_REFQ2         = &h0014  ' Middle 16 bits of 48 bit reference
4348Const IMAGE_REL_ALPHA_REFQ1         = &h0015  ' Low 16 bits of 48 bit reference
4349Const IMAGE_REL_ALPHA_GPRELLO       = &h0016  ' Low 16-bit GP relative reference
4350Const IMAGE_REL_ALPHA_GPRELHI       = &h0017  ' High 16-bit GP relative reference
4351
4352' IBM PowerPC relocation types.
4353Const IMAGE_REL_PPC_ABSOLUTE        = &h0000  ' NOP
4354Const IMAGE_REL_PPC_ADDR64          = &h0001  ' 64-bit address
4355Const IMAGE_REL_PPC_ADDR32          = &h0002  ' 32-bit address
4356Const IMAGE_REL_PPC_ADDR24          = &h0003  ' 26-bit address, shifted left 2 (branch absolute)
4357Const IMAGE_REL_PPC_ADDR16          = &h0004  ' 16-bit address
4358Const IMAGE_REL_PPC_ADDR14          = &h0005  ' 16-bit address, shifted left 2 (load doubleword)
4359Const IMAGE_REL_PPC_REL24           = &h0006  ' 26-bit PC-relative offset, shifted left 2 (branch relative)
4360Const IMAGE_REL_PPC_REL14           = &h0007  ' 16-bit PC-relative offset, shifted left 2 (br cond relative)
4361Const IMAGE_REL_PPC_TOCREL16        = &h0008  ' 16-bit offset from TOC base
4362Const IMAGE_REL_PPC_TOCREL14        = &h0009  ' 16-bit offset from TOC base, shifted left 2 (load doubleword)
4363
4364Const IMAGE_REL_PPC_ADDR32NB        = &h000A  ' 32-bit addr w/o image base
4365Const IMAGE_REL_PPC_SECREL          = &h000B  ' va of containing section (as in an image sectionhdr)
4366Const IMAGE_REL_PPC_SECTION         = &h000C  ' sectionheader number
4367Const IMAGE_REL_PPC_IFGLUE          = &h000D  ' substitute TOC restore instruction iff symbol is glue code
4368Const IMAGE_REL_PPC_IMGLUE          = &h000E  ' symbol is glue code; virtual address is TOC restore instruction
4369Const IMAGE_REL_PPC_SECREL16        = &h000F  ' va of containing section (limited to 16 bits)
4370Const IMAGE_REL_PPC_REFHI           = &h0010
4371Const IMAGE_REL_PPC_REFLO           = &h0011
4372Const IMAGE_REL_PPC_PAIR            = &h0012
4373Const IMAGE_REL_PPC_SECRELLO        = &h0013  ' Low 16-bit section relative reference (used for >32k TLS)
4374Const IMAGE_REL_PPC_SECRELHI        = &h0014  ' High 16-bit section relative reference (used for >32k TLS)
4375Const IMAGE_REL_PPC_GPREL           = &h0015
4376Const IMAGE_REL_PPC_TOKEN           = &h0016  ' clr token
4377
4378Const IMAGE_REL_PPC_TYPEMASK        = &h00FF  ' mask to isolate above values in IMAGE_RELOCATION.Type
4379
4380' Flag bits in IMAGE_RELOCATION.TYPE
4381
4382Const IMAGE_REL_PPC_NEG             = &h0100  ' subtract reloc value rather than adding it
4383Const IMAGE_REL_PPC_BRTAKEN         = &h0200  ' fix branch prediction bit to predict branch taken
4384Const IMAGE_REL_PPC_BRNTAKEN        = &h0400  ' fix branch prediction bit to predict branch not taken
4385Const IMAGE_REL_PPC_TOCDEFN         = &h0800  ' toc slot defined in file (or, data in toc)
4386
4387' Hitachi SH3 relocation types.
4388Const IMAGE_REL_SH3_ABSOLUTE        = &h0000  ' No relocation
4389Const IMAGE_REL_SH3_DIRECT16        = &h0001  ' 16 bit direct
4390Const IMAGE_REL_SH3_DIRECT32        = &h0002  ' 32 bit direct
4391Const IMAGE_REL_SH3_DIRECT8         = &h0003  ' 8 bit direct, -128..255
4392Const IMAGE_REL_SH3_DIRECT8_WORD    = &h0004  ' 8 bit direct .W (0 ext.)
4393Const IMAGE_REL_SH3_DIRECT8_LONG    = &h0005  ' 8 bit direct .L (0 ext.)
4394Const IMAGE_REL_SH3_DIRECT4         = &h0006  ' 4 bit direct (0 ext.)
4395Const IMAGE_REL_SH3_DIRECT4_WORD    = &h0007  ' 4 bit direct .W (0 ext.)
4396Const IMAGE_REL_SH3_DIRECT4_LONG    = &h0008  ' 4 bit direct .L (0 ext.)
4397Const IMAGE_REL_SH3_PCREL8_WORD     = &h0009  ' 8 bit PC relative .W
4398Const IMAGE_REL_SH3_PCREL8_LONG     = &h000A  ' 8 bit PC relative .L
4399Const IMAGE_REL_SH3_PCREL12_WORD    = &h000B  ' 12 LSB PC relative .W
4400Const IMAGE_REL_SH3_STARTOF_SECTION = &h000C  ' Start of EXE section
4401Const IMAGE_REL_SH3_SIZEOF_SECTION  = &h000D  ' Size of EXE section
4402Const IMAGE_REL_SH3_SECTION         = &h000E  ' Section table index
4403Const IMAGE_REL_SH3_SECREL          = &h000F  ' Offset within section
4404Const IMAGE_REL_SH3_DIRECT32_NB     = &h0010  ' 32 bit direct not based
4405Const IMAGE_REL_SH3_GPREL4_LONG     = &h0011  ' GP-relative addressing
4406Const IMAGE_REL_SH3_TOKEN           = &h0012  ' clr token
4407Const IMAGE_REL_SHM_PCRELPT         = &h0013  ' Offset from current
4408                                                '  instruction in longwords
4409                                                '  if not NOMODE, insert the
4410                                                '  inverse of the low bit at
4411                                                '  bit 32 to select PTA/PTB
4412Const IMAGE_REL_SHM_REFLO           = &h0014  ' Low bits of 32-bit address
4413Const IMAGE_REL_SHM_REFHALF         = &h0015  ' High bits of 32-bit address
4414Const IMAGE_REL_SHM_RELLO           = &h0016  ' Low bits of relative reference
4415Const IMAGE_REL_SHM_RELHALF         = &h0017  ' High bits of relative reference
4416Const IMAGE_REL_SHM_PAIR            = &h0018  ' offset operand for relocation
4417
4418Const IMAGE_REL_SH_NOMODE           = &h8000  ' relocation ignores section mode
4419
4420
4421Const IMAGE_REL_ARM_ABSOLUTE        = &h0000  ' No relocation required
4422Const IMAGE_REL_ARM_ADDR32          = &h0001  ' 32 bit address
4423Const IMAGE_REL_ARM_ADDR32NB        = &h0002  ' 32 bit address w/o image base
4424Const IMAGE_REL_ARM_BRANCH24        = &h0003  ' 24 bit offset << 2 & sign ext.
4425Const IMAGE_REL_ARM_BRANCH11        = &h0004  ' Thumb: 2 11 bit offsets
4426Const IMAGE_REL_ARM_TOKEN           = &h0005  ' clr token
4427Const IMAGE_REL_ARM_GPREL12         = &h0006  ' GP-relative addressing (ARM)
4428Const IMAGE_REL_ARM_GPREL7          = &h0007  ' GP-relative addressing (Thumb)
4429Const IMAGE_REL_ARM_BLX24           = &h0008
4430Const IMAGE_REL_ARM_BLX11           = &h0009
4431Const IMAGE_REL_ARM_SECTION         = &h000E  ' Section table index
4432Const IMAGE_REL_ARM_SECREL          = &h000F  ' Offset within section
4433
4434Const IMAGE_REL_AM_ABSOLUTE         = &h0000
4435Const IMAGE_REL_AM_ADDR32           = &h0001
4436Const IMAGE_REL_AM_ADDR32NB         = &h0002
4437Const IMAGE_REL_AM_CALL32           = &h0003
4438Const IMAGE_REL_AM_FUNCINFO         = &h0004
4439Const IMAGE_REL_AM_REL32_1          = &h0005
4440Const IMAGE_REL_AM_REL32_2          = &h0006
4441Const IMAGE_REL_AM_SECREL           = &h0007
4442Const IMAGE_REL_AM_SECTION          = &h0008
4443Const IMAGE_REL_AM_TOKEN            = &h0009
4444
4445' x64 relocations
4446Const IMAGE_REL_AMD64_ABSOLUTE      = &h0000  ' Reference is absolute, no relocation is necessary
4447Const IMAGE_REL_AMD64_ADDR64        = &h0001  ' 64-bit address (VA).
4448Const IMAGE_REL_AMD64_ADDR32        = &h0002  ' 32-bit address (VA).
4449Const IMAGE_REL_AMD64_ADDR32NB      = &h0003  ' 32-bit address w/o image base (RVA).
4450Const IMAGE_REL_AMD64_REL32         = &h0004  ' 32-bit relative address from byte following reloc
4451Const IMAGE_REL_AMD64_REL32_1       = &h0005  ' 32-bit relative address from byte distance 1 from reloc
4452Const IMAGE_REL_AMD64_REL32_2       = &h0006  ' 32-bit relative address from byte distance 2 from reloc
4453Const IMAGE_REL_AMD64_REL32_3       = &h0007  ' 32-bit relative address from byte distance 3 from reloc
4454Const IMAGE_REL_AMD64_REL32_4       = &h0008  ' 32-bit relative address from byte distance 4 from reloc
4455Const IMAGE_REL_AMD64_REL32_5       = &h0009  ' 32-bit relative address from byte distance 5 from reloc
4456Const IMAGE_REL_AMD64_SECTION       = &h000A  ' Section index
4457Const IMAGE_REL_AMD64_SECREL        = &h000B  ' 32 bit offset from base of section containing target
4458Const IMAGE_REL_AMD64_SECREL7       = &h000C  ' 7 bit unsigned offset from base of section containing target
4459Const IMAGE_REL_AMD64_TOKEN         = &h000D  ' 32 bit metadata token
4460Const IMAGE_REL_AMD64_SREL32        = &h000E  ' 32 bit signed span-dependent value emitted into object
4461Const IMAGE_REL_AMD64_PAIR          = &h000F
4462Const IMAGE_REL_AMD64_SSPAN32       = &h0010  ' 32 bit signed span-dependent value applied at link time
4463
4464' IA64 relocation types.
4465
4466Const IMAGE_REL_IA64_ABSOLUTE       = &h0000
4467Const IMAGE_REL_IA64_IMM14          = &h0001
4468Const IMAGE_REL_IA64_IMM22          = &h0002
4469Const IMAGE_REL_IA64_IMM64          = &h0003
4470Const IMAGE_REL_IA64_DIR32          = &h0004
4471Const IMAGE_REL_IA64_DIR64          = &h0005
4472Const IMAGE_REL_IA64_PCREL21B       = &h0006
4473Const IMAGE_REL_IA64_PCREL21M       = &h0007
4474Const IMAGE_REL_IA64_PCREL21F       = &h0008
4475Const IMAGE_REL_IA64_GPREL22        = &h0009
4476Const IMAGE_REL_IA64_LTOFF22        = &h000A
4477Const IMAGE_REL_IA64_SECTION        = &h000B
4478Const IMAGE_REL_IA64_SECREL22       = &h000C
4479Const IMAGE_REL_IA64_SECREL64I      = &h000D
4480Const IMAGE_REL_IA64_SECREL32       = &h000E
4481'
4482Const IMAGE_REL_IA64_DIR32NB        = &h0010
4483Const IMAGE_REL_IA64_SREL14         = &h0011
4484Const IMAGE_REL_IA64_SREL22         = &h0012
4485Const IMAGE_REL_IA64_SREL32         = &h0013
4486Const IMAGE_REL_IA64_UREL32         = &h0014
4487Const IMAGE_REL_IA64_PCREL60X       = &h0015  ' This is always a BRL and never converted
4488Const IMAGE_REL_IA64_PCREL60B       = &h0016  ' If possible, convert to MBB bundle with NOP.B in slot 1
4489Const IMAGE_REL_IA64_PCREL60F       = &h0017  ' If possible, convert to MFB bundle with NOP.F in slot 1
4490Const IMAGE_REL_IA64_PCREL60I       = &h0018  ' If possible, convert to MIB bundle with NOP.I in slot 1
4491Const IMAGE_REL_IA64_PCREL60M       = &h0019  ' If possible, convert to MMB bundle with NOP.M in slot 1
4492Const IMAGE_REL_IA64_IMMGPREL64     = &h001A
4493Const IMAGE_REL_IA64_TOKEN          = &h001B  ' clr token
4494Const IMAGE_REL_IA64_GPREL32        = &h001C
4495Const IMAGE_REL_IA64_ADDEND         = &h001F
4496
4497' CEF relocation types.
4498Const IMAGE_REL_CEF_ABSOLUTE        = &h0000  ' Reference is absolute, no relocation is necessary
4499Const IMAGE_REL_CEF_ADDR32          = &h0001  ' 32-bit address (VA).
4500Const IMAGE_REL_CEF_ADDR64          = &h0002  ' 64-bit address (VA).
4501Const IMAGE_REL_CEF_ADDR32NB        = &h0003  ' 32-bit address w/o image base (RVA).
4502Const IMAGE_REL_CEF_SECTION         = &h0004  ' Section index
4503Const IMAGE_REL_CEF_SECREL          = &h0005  ' 32 bit offset from base of section containing target
4504Const IMAGE_REL_CEF_TOKEN           = &h0006  ' 32 bit metadata token
4505
4506' clr relocation types.
4507Const IMAGE_REL_CEE_ABSOLUTE        = &h0000  ' Reference is absolute, no relocation is necessary
4508Const IMAGE_REL_CEE_ADDR32          = &h0001  ' 32-bit address (VA).
4509Const IMAGE_REL_CEE_ADDR64          = &h0002  ' 64-bit address (VA).
4510Const IMAGE_REL_CEE_ADDR32NB        = &h0003  ' 32-bit address w/o image base (RVA).
4511Const IMAGE_REL_CEE_SECTION         = &h0004  ' Section index
4512Const IMAGE_REL_CEE_SECREL          = &h0005  ' 32 bit offset from base of section containing target
4513Const IMAGE_REL_CEE_TOKEN           = &h0006  ' 32 bit metadata token
4514
4515
4516Const IMAGE_REL_M32R_ABSOLUTE       = &h0000  ' No relocation required
4517Const IMAGE_REL_M32R_ADDR32         = &h0001  ' 32 bit address
4518Const IMAGE_REL_M32R_ADDR32NB       = &h0002  ' 32 bit address w/o image base
4519Const IMAGE_REL_M32R_ADDR24         = &h0003  ' 24 bit address
4520Const IMAGE_REL_M32R_GPREL16        = &h0004  ' GP relative addressing
4521Const IMAGE_REL_M32R_PCREL24        = &h0005  ' 24 bit offset << 2 & sign ext.
4522Const IMAGE_REL_M32R_PCREL16        = &h0006  ' 16 bit offset << 2 & sign ext.
4523Const IMAGE_REL_M32R_PCREL8         = &h0007  ' 8 bit offset << 2 & sign ext.
4524Const IMAGE_REL_M32R_REFHALF        = &h0008  ' 16 MSBs
4525Const IMAGE_REL_M32R_REFHI          = &h0009  ' 16 MSBs; adj for LSB sign ext.
4526Const IMAGE_REL_M32R_REFLO          = &h000A  ' 16 LSBs
4527Const IMAGE_REL_M32R_PAIR           = &h000B  ' Link HI and LO
4528Const IMAGE_REL_M32R_SECTION        = &h000C  ' Section table index
4529Const IMAGE_REL_M32R_SECREL32       = &h000D  ' 32 bit section relative reference
4530Const IMAGE_REL_M32R_TOKEN          = &h000E  ' clr token
4531
4532Const IMAGE_REL_EBC_ABSOLUTE        = &h0000  ' No relocation required
4533Const IMAGE_REL_EBC_ADDR32NB        = &h0001  ' 32 bit address w/o image base
4534Const IMAGE_REL_EBC_REL32           = &h0002  ' 32-bit relative address from byte following reloc
4535Const IMAGE_REL_EBC_SECTION         = &h0003  ' Section table index
4536Const IMAGE_REL_EBC_SECREL          = &h0004  ' Offset within section
4537
4538'Const EXT_IMM64(Value, Address, Size, InstPos, ValPos)  /* Intel-IA64-Filler * /           \
4539'    Value |= (((ULONGLONG)((*(Address) >> InstPos) & (((ULONGLONG)1 << Size) - 1))) << ValPos)  // Intel-IA64-Filler
4540
4541'Const INS_IMM64(Value, Address, Size, InstPos, ValPos)  /* Intel-IA64-Filler * /\
4542'    *(PDWORD)Address = (*(PDWORD)Address & ~(((1 << Size) - 1) << InstPos)) | /* Intel-IA64-Filler * /\
4543'          ((DWORD)((((ULONGLONG)Value >> ValPos) & (((ULONGLONG)1 << Size) - 1))) << InstPos)  // Intel-IA64-Filler
4544
4545Const EMARCH_ENC_I17_IMM7B_INST_WORD_X       = 3  ' Intel-IA64-Filler
4546Const EMARCH_ENC_I17_IMM7B_SIZE_X            = 7  ' Intel-IA64-Filler
4547Const EMARCH_ENC_I17_IMM7B_INST_WORD_POS_X   = 4  ' Intel-IA64-Filler
4548Const EMARCH_ENC_I17_IMM7B_VAL_POS_X         = 0  ' Intel-IA64-Filler
4549
4550Const EMARCH_ENC_I17_IMM9D_INST_WORD_X       = 3  ' Intel-IA64-Filler
4551Const EMARCH_ENC_I17_IMM9D_SIZE_X            = 9  ' Intel-IA64-Filler
4552Const EMARCH_ENC_I17_IMM9D_INST_WORD_POS_X   = 18 ' Intel-IA64-Filler
4553Const EMARCH_ENC_I17_IMM9D_VAL_POS_X         = 7  ' Intel-IA64-Filler
4554
4555Const EMARCH_ENC_I17_IMM5C_INST_WORD_X       = 3  ' Intel-IA64-Filler
4556Const EMARCH_ENC_I17_IMM5C_SIZE_X            = 5  ' Intel-IA64-Filler
4557Const EMARCH_ENC_I17_IMM5C_INST_WORD_POS_X   = 13 ' Intel-IA64-Filler
4558Const EMARCH_ENC_I17_IMM5C_VAL_POS_X         = 16 ' Intel-IA64-Filler
4559
4560Const EMARCH_ENC_I17_IC_INST_WORD_X          = 3  ' Intel-IA64-Filler
4561Const EMARCH_ENC_I17_IC_SIZE_X               = 1  ' Intel-IA64-Filler
4562Const EMARCH_ENC_I17_IC_INST_WORD_POS_X      = 12 ' Intel-IA64-Filler
4563Const EMARCH_ENC_I17_IC_VAL_POS_X            = 21 ' Intel-IA64-Filler
4564
4565Const EMARCH_ENC_I17_IMM41a_INST_WORD_X      = 1  ' Intel-IA64-Filler
4566Const EMARCH_ENC_I17_IMM41a_SIZE_X           = 10 ' Intel-IA64-Filler
4567Const EMARCH_ENC_I17_IMM41a_INST_WORD_POS_X  = 14 ' Intel-IA64-Filler
4568Const EMARCH_ENC_I17_IMM41a_VAL_POS_X        = 22 ' Intel-IA64-Filler
4569
4570Const EMARCH_ENC_I17_IMM41b_INST_WORD_X      = 1  ' Intel-IA64-Filler
4571Const EMARCH_ENC_I17_IMM41b_SIZE_X           = 8  ' Intel-IA64-Filler
4572Const EMARCH_ENC_I17_IMM41b_INST_WORD_POS_X  = 24 ' Intel-IA64-Filler
4573Const EMARCH_ENC_I17_IMM41b_VAL_POS_X        = 32 ' Intel-IA64-Filler
4574
4575Const EMARCH_ENC_I17_IMM41c_INST_WORD_X      = 2  ' Intel-IA64-Filler
4576Const EMARCH_ENC_I17_IMM41c_SIZE_X           = 23 ' Intel-IA64-Filler
4577Const EMARCH_ENC_I17_IMM41c_INST_WORD_POS_X  = 0  ' Intel-IA64-Filler
4578Const EMARCH_ENC_I17_IMM41c_VAL_POS_X        = 40 ' Intel-IA64-Filler
4579
4580Const EMARCH_ENC_I17_SIGN_INST_WORD_X        = 3  ' Intel-IA64-Filler
4581Const EMARCH_ENC_I17_SIGN_SIZE_X             = 1  ' Intel-IA64-Filler
4582Const EMARCH_ENC_I17_SIGN_INST_WORD_POS_X    = 27 ' Intel-IA64-Filler
4583Const EMARCH_ENC_I17_SIGN_VAL_POS_X          = 63 ' Intel-IA64-Filler
4584
4585Const X3_OPCODE_INST_WORD_X                  = 3  ' Intel-IA64-Filler
4586Const X3_OPCODE_SIZE_X                       = 4  ' Intel-IA64-Filler
4587Const X3_OPCODE_INST_WORD_POS_X              = 28 ' Intel-IA64-Filler
4588Const X3_OPCODE_SIGN_VAL_POS_X               = 0  ' Intel-IA64-Filler
4589
4590Const X3_I_INST_WORD_X                       = 3  ' Intel-IA64-Filler
4591Const X3_I_SIZE_X                            = 1  ' Intel-IA64-Filler
4592Const X3_I_INST_WORD_POS_X                   = 27 ' Intel-IA64-Filler
4593Const X3_I_SIGN_VAL_POS_X                    = 59 ' Intel-IA64-Filler
4594
4595Const X3_D_WH_INST_WORD_X                    = 3  ' Intel-IA64-Filler
4596Const X3_D_WH_SIZE_X                         = 3  ' Intel-IA64-Filler
4597Const X3_D_WH_INST_WORD_POS_X                = 24 ' Intel-IA64-Filler
4598Const X3_D_WH_SIGN_VAL_POS_X                 = 0  ' Intel-IA64-Filler
4599
4600Const X3_IMM20_INST_WORD_X                   = 3  ' Intel-IA64-Filler
4601Const X3_IMM20_SIZE_X                        = 20 ' Intel-IA64-Filler
4602Const X3_IMM20_INST_WORD_POS_X               = 4  ' Intel-IA64-Filler
4603Const X3_IMM20_SIGN_VAL_POS_X                = 0  ' Intel-IA64-Filler
4604
4605Const X3_IMM39_1_INST_WORD_X                 = 2  ' Intel-IA64-Filler
4606Const X3_IMM39_1_SIZE_X                      = 23 ' Intel-IA64-Filler
4607Const X3_IMM39_1_INST_WORD_POS_X             = 0  ' Intel-IA64-Filler
4608Const X3_IMM39_1_SIGN_VAL_POS_X              = 36 ' Intel-IA64-Filler
4609
4610Const X3_IMM39_2_INST_WORD_X                 = 1  ' Intel-IA64-Filler
4611Const X3_IMM39_2_SIZE_X                      = 16 ' Intel-IA64-Filler
4612Const X3_IMM39_2_INST_WORD_POS_X             = 16 ' Intel-IA64-Filler
4613Const X3_IMM39_2_SIGN_VAL_POS_X              = 20 ' Intel-IA64-Filler
4614
4615Const X3_P_INST_WORD_X                       = 3  ' Intel-IA64-Filler
4616Const X3_P_SIZE_X                            = 4  ' Intel-IA64-Filler
4617Const X3_P_INST_WORD_POS_X                   = 0  ' Intel-IA64-Filler
4618Const X3_P_SIGN_VAL_POS_X                    = 0  ' Intel-IA64-Filler
4619
4620Const X3_TMPLT_INST_WORD_X                   = 0  ' Intel-IA64-Filler
4621Const X3_TMPLT_SIZE_X                        = 4  ' Intel-IA64-Filler
4622Const X3_TMPLT_INST_WORD_POS_X               = 0  ' Intel-IA64-Filler
4623Const X3_TMPLT_SIGN_VAL_POS_X                = 0  ' Intel-IA64-Filler
4624
4625Const X3_BTYPE_QP_INST_WORD_X                = 2  ' Intel-IA64-Filler
4626Const X3_BTYPE_QP_SIZE_X                     = 9  ' Intel-IA64-Filler
4627Const X3_BTYPE_QP_INST_WORD_POS_X            = 23 ' Intel-IA64-Filler
4628Const X3_BTYPE_QP_INST_VAL_POS_X             = 0  ' Intel-IA64-Filler
4629
4630Const X3_EMPTY_INST_WORD_X                   = 1  ' Intel-IA64-Filler
4631Const X3_EMPTY_SIZE_X                        = 2  ' Intel-IA64-Filler
4632Const X3_EMPTY_INST_WORD_POS_X               = 14 ' Intel-IA64-Filler
4633Const X3_EMPTY_INST_VAL_POS_X                = 0  ' Intel-IA64-Filler
4634
4635' Line number format.
4636Type Align(2) IMAGE_LINENUMBER
4637'   Union
4638        SymbolTableIndex As DWord
4639'       VirtualAddress As DWord
4640'   End Union
4641    Linenumber As Word
4642End Type
4643TypeDef PIMAGE_LINENUMBER = * /*UNALIGNED*/ IMAGE_LINENUMBER
4644
4645' Based relocation format.
4646Type IMAGE_BASE_RELOCATION
4647    VirtualAddress As DWord
4648    SizeOfBlock As DWord
4649'   TypeOffset[ELM(1)] As Word
4650End Type
4651TypeDef PIMAGE_BASE_RELOCATION = * /*UNALIGNED*/ IMAGE_BASE_RELOCATION
4652
4653' Based relocation types.
4654Const IMAGE_REL_BASED_ABSOLUTE = 0
4655Const IMAGE_REL_BASED_HIGH = 1
4656Const IMAGE_REL_BASED_LOW = 2
4657Const IMAGE_REL_BASED_HIGHLOW = 3
4658Const IMAGE_REL_BASED_HIGHADJ = 4
4659Const IMAGE_REL_BASED_MIPS_JMPADDR = 5
4660Const IMAGE_REL_BASED_MIPS_JMPADDR16 = 9
4661Const IMAGE_REL_BASED_IA64_IMM64 = 9
4662Const IMAGE_REL_BASED_DIR64 = 10
4663
4664' Archive format.
4665Const IMAGE_ARCHIVE_START_SIZE = 8
4666Const IMAGE_ARCHIVE_START = Ex"!<arch>\n"
4667Const IMAGE_ARCHIVE_END = Ex"`\n"
4668Const IMAGE_ARCHIVE_PAD = Ex"\n"
4669Const IMAGE_ARCHIVE_LINKER_MEMBER = Ex"/               "
4670Const IMAGE_ARCHIVE_LONGNAMES_MEMBER = Ex"//              "
4671
4672Type PIMAGE_ARCHIVE_MEMBER_HEADER
4673    Name[ELM(16)] As Byte
4674    Date[ELM(12)] As Byte
4675    UserID[ELM(6)] As Byte
4676    GroupID[ELM(6)] As Byte
4677    Mode[ELM(8)] As Byte
4678    Size[ELM(10)] As Byte
4679    EndHeader[ELM(2)] As Byte
4680End Type
4681TypeDef PIMAGE_ARCHIVE_MEMBER_HEADER = *IMAGE_ARCHIVE_MEMBER_HEADER
4682
4683Const IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR = 60
4684
4685' DLL support.
4686
4687' Export Format
4688Type IMAGE_EXPORT_DIRECTORY
4689    Characteristics As DWord
4690    TimeDateStamp As DWord
4691    MajorVersion As DWord
4692    MinorVersion As DWord
4693    Name As Word
4694    Base As Word
4695    NumberOfFunctions As DWord
4696    NumberOfNames As DWord
4697    AddressOfFunctions As DWord
4698    AddressOfNames As DWord
4699    AddressOfNameOrdinals As DWord
4700End Type
4701TypeDef PIMAGE_EXPORT_DIRECTORY = *IMAGE_EXPORT_DIRECTORY
4702
4703' Import Format
4704Type IMAGE_IMPORT_BY_NAME
4705    Hint As Word
4706    Name[ELM(1)] As Byte
4707End Type
4708TypeDef PIMAGE_IMPORT_BY_NAME = *IMAGE_IMPORT_BY_NAME
4709
4710Type Align(8) IMAGE_THUNK_DATA64
4711'   Union
4712        ForwarderString As QWord 'PBYTE
4713'       Function_ As QWord 'PDWORD
4714'       Ordinal As QWord
4715'       AddressOfData As QWord 'PIMAGE_IMPORT_BY_NAME
4716'   } u1
4717End Type
4718TypeDef PIMAGE_THUNK_DATA64 = *IMAGE_THUNK_DATA64
4719
4720Type IMAGE_THUNK_DATA32
4721'   Union
4722        ForwarderString As DWORD 'PBYTE
4723'       Function_ As DWORD 'PDWORD
4724'       Ordinal As DWORD
4725'       AddressOfData As DWORD 'PIMAGE_IMPORT_BY_NAME
4726'   } u1
4727End Type
4728TypeDef PIMAGE_THUNK_DATA32 = *IMAGE_THUNK_DATA32
4729
4730Const IMAGE_ORDINAL_FLAG64 = &h8000000000000000
4731Const IMAGE_ORDINAL_FLAG32 = &h80000000
4732Const IMAGE_ORDINAL64(Ordinal) = (Ordinal And &hffff)
4733Const IMAGE_ORDINAL32(Ordinal) = (Ordinal And &hffff)
4734Const IMAGE_SNAP_BY_ORDINAL64(Ordinal) = ((Ordinal And IMAGE_ORDINAL_FLAG64) <> 0)
4735Const IMAGE_SNAP_BY_ORDINAL32(Ordinal) = ((Ordinal And IMAGE_ORDINAL_FLAG32) <> 0)
4736
4737' Thread Local Storage
4738TypeDef PIMAGE_TLS_CALLBACK = *Sub(DllHandle As PVOID, Reason As DWord, Reserved As PVOID)
4739
4740Type IMAGE_TLS_DIRECTORY64
4741    StartAddressOfRawData As QWord
4742    EndAddressOfRawData As QWord
4743    AddressOfIndex As QWord 'PDWORD
4744    AddressOfCallBacks As QWord 'PIMAGE_TLS_CALLBACK *
4745    SizeOfZeroFill As DWord
4746    Characteristics As DWord
4747End Type
4748TypeDef PIMAGE_TLS_DIRECTORY64 = *IMAGE_TLS_DIRECTORY64
4749
4750Type IMAGE_TLS_DIRECTORY32
4751    StartAddressOfRawData As DWord
4752    EndAddressOfRawData As DWord
4753    AddressOfIndex As DWord 'PDWORD
4754    AddressOfCallBacks As DWord 'PIMAGE_TLS_CALLBACK *
4755    SizeOfZeroFill As DWord
4756    Characteristics As DWord
4757End Type
4758TypeDef PIMAGE_TLS_DIRECTORY32 = *IMAGE_TLS_DIRECTORY32
4759
4760#ifdef _WIN64
4761Const IMAGE_ORDINAL_FLAG = IMAGE_ORDINAL_FLAG64
4762Const IMAGE_ORDINAL(Ordinal) = IMAGE_ORDINAL64(Ordinal)
4763TypeDef IMAGE_THUNK_DATA = IMAGE_THUNK_DATA64
4764TypeDef PIMAGE_THUNK_DATA = PIMAGE_THUNK_DATA64
4765Const IMAGE_SNAP_BY_ORDINAL(Ordinal) = IMAGE_SNAP_BY_ORDINAL64(Ordinal)
4766TypeDef IMAGE_TLS_DIRECTORY = IMAGE_TLS_DIRECTORY64
4767TypeDef PIMAGE_TLS_DIRECTORY = PIMAGE_TLS_DIRECTORY64
4768#else
4769Const IMAGE_ORDINAL_FLAG = IMAGE_ORDINAL_FLAG32
4770Const IMAGE_ORDINAL(Ordinal) = IMAGE_ORDINAL32(Ordinal)
4771TypeDef IMAGE_THUNK_DATA = IMAGE_THUNK_DAT32
4772TypeDef PIMAGE_THUNK_DATA = PIMAGE_THUNK_DATA32
4773Const IMAGE_SNAP_BY_ORDINAL(Ordinal) = IMAGE_SNAP_BY_ORDINAL32(Ordinal)
4774TypeDef IMAGE_TLS_DIRECTORY = IMAGE_TLS_DIRECTORY32
4775TypeDef PIMAGE_TLS_DIRECTORY = PIMAGE_TLS_DIRECTORY32
4776#endif
4777
4778Type IMAGE_IMPORT_DESCRIPTOR
4779'   Union
4780        Characteristics As DWord
4781'       OriginalFirstThunk As DWord
4782'   End Union
4783    TimeDateStamp As DWord
4784    ForwarderChain As DWord
4785    Name As DWord
4786    FirstThunk As DWord
4787End Type
4788TypeDef PIMAGE_IMPORT_DESCRIPTOR = * /*UNALIGNED*/ IMAGE_IMPORT_DESCRIPTOR
4789
4790' New format import descriptors pointed to by DataDirectory[ IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT ]
4791Type IMAGE_BOUND_IMPORT_DESCRIPTOR
4792    TimeDateStamp As DWord
4793    OffsetModuleName As Word
4794    NumberOfModuleForwarderRefs As Word
4795End Type
4796TypeDef PIMAGE_BOUND_IMPORT_DESCRIPTOR = IMAGE_BOUND_IMPORT_DESCRIPTOR
4797
4798Type IMAGE_BOUND_FORWARDER_REF
4799    TimeDateStamp As DWord
4800    OffsetModuleName As Word
4801    Reserved As Word
4802End Type
4803TypeDef PIMAGE_BOUND_FORWARDER_REF = *IMAGE_BOUND_FORWARDER_REF
4804
4805' Resource Format.
4806Type IMAGE_RESOURCE_DIRECTORY
4807    Characteristics As DWord
4808    TimeDateStamp As DWord
4809    MajorVersion As Word
4810    MinorVersion As Word
4811    NumberOfNamedEntries As Word
4812    NumberOfIdEntries As Word
4813End Type
4814TypeDef PIMAGE_RESOURCE_DIRECTORY = *IMAGE_RESOURCE_DIRECTORY
4815
4816Const IMAGE_RESOURCE_NAME_IS_STRING = &h80000000
4817Const IMAGE_RESOURCE_DATA_IS_DIRECTORY = &h80000000
4818
4819Type IMAGE_RESOURCE_DIRECTORY_ENTRY
4820'   Union
4821'       Type
4822'           NameOffset : 31 As DWord
4823'           NameIsString :  As DWord
4824'       End Type
4825        Name As DWord
4826'       Id As DWord
4827'   End Union
4828'   Union
4829        OffsetToData As DWord
4830'       Type
4831'           OffsetToDirectory : 31 As DWord
4832'           DataIsDirectory : 1 As DWord
4833'       End Type
4834'   End Union
4835End Type
4836TypeDef PIMAGE_RESOURCE_DIRECTORY_ENTRY = *IMAGE_RESOURCE_DIRECTORY_ENTRY
4837
4838Type IMAGE_RESOURCE_DIRECTORY_STRING
4839    Length As Word
4840    NameString[ELM(1)] As CHAR
4841End Type
4842TypeDef PIMAGE_RESOURCE_DIRECTORY_STRING = *IMAGE_RESOURCE_DIRECTORY_STRING
4843
4844Type IMAGE_RESOURCE_DIR_STRING_U
4845    Length As Word
4846    NameString[ELM(1)] As WCHAR
4847End Type
4848TypeDef PIMAGE_RESOURCE_DIR_STRING_U = *IMAGE_RESOURCE_DIR_STRING_U
4849
4850Type IMAGE_RESOURCE_DATA_ENTRY
4851    OffsetToData As DWord
4852    Size As DWord
4853    CodePage As DWord
4854    Reserved As DWord
4855End Type
4856TypeDef PIMAGE_RESOURCE_DATA_ENTRY = *IMAGE_RESOURCE_DATA_ENTRY
4857
4858' Load Configuration Directory Entry
4859
4860Type IMAGE_LOAD_CONFIG_DIRECTORY32
4861    Size As DWord
4862    TimeDateStamp As DWord
4863    MajorVersion As Word
4864    MinorVersion As Word
4865    GlobalFlagsClear As DWord
4866    GlobalFlagsSet As DWord
4867    CriticalSectionDefaultTimeout As DWord
4868    DeCommitFreeBlockThreshold As DWord
4869    DeCommitTotalFreeThreshold As DWord
4870    LockPrefixTable As DWord
4871    MaximumAllocationSize As DWord
4872    VirtualMemoryThreshold As DWord
4873    ProcessHeapFlags As DWord
4874    ProcessAffinityMask As DWord
4875    CSDVersion As Word
4876    Reserved1 As Word
4877    EditList As DWord
4878    SecurityCookie As DWord
4879    SEHandlerTable As DWord
4880    SEHandlerCount As DWord
4881End Type
4882TypeDef PIMAGE_LOAD_CONFIG_DIRECTORY32 = *IMAGE_LOAD_CONFIG_DIRECTORY32
4883
4884Type IMAGE_LOAD_CONFIG_DIRECTORY64
4885    Size As DWord
4886    TimeDateStamp As DWord
4887    MajorVersion As Word
4888    MinorVersion As Word
4889    GlobalFlagsClear As DWord
4890    GlobalFlagsSet As DWord
4891    CriticalSectionDefaultTimeout As DWord
4892    DeCommitFreeBlockThreshold As QWord
4893    DeCommitTotalFreeThreshold As QWord
4894    LockPrefixTable As QWord
4895    MaximumAllocationSize As QWord
4896    VirtualMemoryThreshold As QWord
4897    ProcessAffinityMask As QWord
4898    ProcessHeapFlags As DWord
4899    CSDVersion As Word
4900    Reserved1 As Word
4901    EditList As QWord
4902    SecurityCookie As QWord
4903    SEHandlerTable As QWord
4904    SEHandlerCount As QWord
4905End Type
4906TypeDef PIMAGE_LOAD_CONFIG_DIRECTORY64 = *IMAGE_LOAD_CONFIG_DIRECTORY64
4907
4908#ifdef _WIN64
4909TypeDef IMAGE_LOAD_CONFIG_DIRECTORY = IMAGE_LOAD_CONFIG_DIRECTORY64
4910TypeDef PIMAGE_LOAD_CONFIG_DIRECTORY = PIMAGE_LOAD_CONFIG_DIRECTORY64
4911#else
4912TypeDef IMAGE_LOAD_CONFIG_DIRECTORY = IMAGE_LOAD_CONFIG_DIRECTORY32
4913TypeDef PIMAGE_LOAD_CONFIG_DIRECTORY = PIMAGE_LOAD_CONFIG_DIRECTORY32
4914#endif
4915
4916' WIN CE Exception table format
4917
4918' Function table entry format
4919
4920Type IMAGE_CE_RUNTIME_FUNCTION_ENTRY
4921    FuncStart As DWord
4922    dummy As DWord
4923'   PrologLen : 8 As DWord
4924'   FuncLen : 22 As DWord
4925'   ThirtyTwoBit : 1 As DWord
4926'   ExceptionFlag : 1 As DWord
4927End Type
4928TypeDef PIMAGE_CE_RUNTIME_FUNCTION_ENTRY = *IMAGE_CE_RUNTIME_FUNCTION_ENTRY
4929
4930Type IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY
4931    BeginAddress As QWord
4932    EndAddress As QWord
4933    ExceptionHandler As QWord
4934    HandlerData As QWord
4935    PrologEndAddress As QWord
4936End Type
4937TypeDef PIMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY = *IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY
4938
4939Type IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY
4940    BeginAddress As DWord
4941    EndAddress As DWord
4942    ExceptionHandler As DWord
4943    HandlerData As DWord
4944    PrologEndAddress As DWord
4945End Type
4946TypeDef PIMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY = *IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY
4947
4948Type _IMAGE_RUNTIME_FUNCTION_ENTRY
4949    BeginAddress As DWord
4950    EndAddress As DWord
4951    UnwindInfoAddress As DWord
4952End Type
4953TypeDef _PIMAGE_RUNTIME_FUNCTION_ENTRY = *_IMAGE_RUNTIME_FUNCTION_ENTRY
4954
4955TypeDef IMAGE_IA64_RUNTIME_FUNCTION_ENTRY = _IMAGE_RUNTIME_FUNCTION_ENTRY
4956TypeDef PIMAGE_IA64_RUNTIME_FUNCTION_ENTRY = _PIMAGE_RUNTIME_FUNCTION_ENTRY
4957
4958TypeDef IMAGE_RUNTIME_FUNCTION_ENTRY = _IMAGE_RUNTIME_FUNCTION_ENTRY
4959TypeDef PIMAGE_RUNTIME_FUNCTION_ENTRY = _PIMAGE_RUNTIME_FUNCTION_ENTRY
4960
4961' Debug Format
4962Type IMAGE_DEBUG_DIRECTORY
4963    Characteristics As DWord
4964    TimeDateStamp As DWord
4965    MajorVersion As Word
4966    MinorVersion As Word
4967    Type_ As DWord
4968    SizeOfData As DWord
4969    AddressOfRawData As DWord
4970    PointerToRawData As DWord
4971End Type
4972TypeDef PIMAGE_DEBUG_DIRECTORY = *IMAGE_DEBUG_DIRECTORY
4973
4974Const IMAGE_DEBUG_TYPE_UNKNOWN = 0
4975Const IMAGE_DEBUG_TYPE_COFF = 1
4976Const IMAGE_DEBUG_TYPE_CODEVIEW = 2
4977Const IMAGE_DEBUG_TYPE_FPO = 3
4978Const IMAGE_DEBUG_TYPE_MISC = 4
4979Const IMAGE_DEBUG_TYPE_EXCEPTION = 5
4980Const IMAGE_DEBUG_TYPE_FIXUP = 6
4981Const IMAGE_DEBUG_TYPE_OMAP_TO_SRC = 7
4982Const IMAGE_DEBUG_TYPE_OMAP_FROM_SRC = 8
4983Const IMAGE_DEBUG_TYPE_BORLAND = 9
4984Const IMAGE_DEBUG_TYPE_RESERVED10 = 10
4985Const IMAGE_DEBUG_TYPE_CLSID = 11
4986
4987Type IMAGE_COFF_SYMBOLS_HEADER
4988    NumberOfSymbols As DWord
4989    LvaToFirstSymbol As DWord
4990    NumberOfLinenumbers As DWord
4991    LvaToFirstLinenumber As DWord
4992    RvaToFirstByteOfCode As DWord
4993    RvaToLastByteOfCode As DWord
4994    RvaToFirstByteOfData As DWord
4995    RvaToLastByteOfData As DWord
4996End Type
4997TypeDef PIMAGE_COFF_SYMBOLS_HEADER = *IMAGE_COFF_SYMBOLS_HEADER
4998
4999Const FRAME_FPO = 0
5000Const FRAME_TRAP = 1
5001Const FRAME_TSS = 2
5002Const FRAME_NONFPO = 3
5003
5004Type FPO_DATA
5005    ulOffStart As DWord
5006    cbProcSize As DWord
5007    cdwLocals As DWord
5008    cdwParams As Word
5009    dummy As Word
5010'   cbProlog : 8 As Word
5011'   cbRegs   : 3 As Word
5012'   fHasSEH  : 1 As Word
5013'   fUseBP   : 1 As Word
5014'   reserved : 1 As Word
5015'   cbFrame  : 2 As Word
5016End Type
5017TypeDef PFPO_DATA = *FPO_DATA
5018Const SIZEOF_RFPO_DATA = 16
5019
5020Const IMAGE_DEBUG_MISC_EXENAME = 1
5021
5022Type IMAGE_DEBUG_MISC
5023    DataType As DWord
5024    Length As DWord
5025    Unicode As BOOLEAN
5026    Reserved[ELM(3)] As Byte
5027    Data[ELM(1)] As Byte
5028End Type
5029TypeDef PIMAGE_DEBUG_MISC = *IMAGE_DEBUG_MISC
5030
5031Type IMAGE_FUNCTION_ENTRY
5032    StartingAddress As DWord
5033    EndingAddress As DWord
5034    EndOfPrologue As DWord
5035End Type
5036TypeDef PIMAGE_FUNCTION_ENTRY = *IMAGE_FUNCTION_ENTRY
5037
5038Type IMAGE_FUNCTION_ENTRY64
5039    StartingAddress As QWord
5040    EndingAddress As QWord
5041'   Union
5042        EndOfPrologue As QWord
5043'       UnwindInfoAddress As QWord
5044'End Union
5045End Type
5046TypeDef PIMAGE_FUNCTION_ENTRY64 = *IMAGE_FUNCTION_ENTRY64
5047
5048Type IMAGE_SEPARATE_DEBUG_HEADER
5049    Signature As Word
5050    Flags As Word
5051    Machine As Word
5052    Characteristics As Word
5053    TimeDateStamp As DWord
5054    CheckSum As DWord
5055    ImageBase As DWord
5056    SizeOfImage As DWord
5057    NumberOfSections As DWord
5058    ExportedNamesSize As DWord
5059    DebugDirectorySize As DWord
5060    SectionAlignment As DWord
5061    Reserved[ELM(2)] As DWord
5062End Type
5063TypeDef PIMAGE_SEPARATE_DEBUG_HEADER = *IMAGE_SEPARATE_DEBUG_HEADER
5064
5065Type NON_PAGED_DEBUG_INFO
5066    Signature As Word
5067    Flags As Word
5068    Size As DWord
5069    Machine As Word
5070    Characteristics As Word
5071    TimeDateStamp As DWord
5072    CheckSum As DWord
5073    SizeOfImage As DWord
5074    ImageBase As QWord
5075End Type
5076TypeDef PNON_PAGED_DEBUG_INFO = *NON_PAGED_DEBUG_INFO
5077
5078Const IMAGE_SEPARATE_DEBUG_SIGNATURE = &h4449 'DI
5079Const NON_PAGED_DEBUG_SIGNATURE = &h4E49 ' NI
5080
5081Const IMAGE_SEPARATE_DEBUG_FLAGS_MASK = &h8000
5082Const IMAGE_SEPARATE_DEBUG_MISMATCH = &h8000
5083
5084Type IMAGE_ARCHITECTURE_HEADER
5085    AmaskValue As Byte
5086'   AmaskValue: 1 As DWord
5087'   : 7 As Long
5088    AmaskShift As Byte
5089'   AmaskShift: 8 As DWord
5090    dummy As Word
5091'   : 16 As Long
5092    FirstEntryRVA As DWord
5093End Type
5094TypeDef PIMAGE_ARCHITECTURE_HEADER = *IMAGE_ARCHITECTURE_HEADER
5095
5096Type IMAGE_ARCHITECTURE_ENTRY
5097    FixupInstRVA As DWord
5098    NewInst As DWord
5099End Type
5100TypeDef PIMAGE_ARCHITECTURE_ENTRY = *IMAGE_ARCHITECTURE_ENTRY
5101
5102Const IMPORT_OBJECT_HDR_SIG2 = &hffff
5103
5104Type IMPORT_OBJECT_HEADER
5105    Sig1 As Word
5106    Sig2 As Word
5107    Version As Word
5108    Machine As Word
5109    TimeDateStamp As DWord
5110    SizeOfData As DWord
5111
5112'   Union
5113        Ordinal As Word
5114'       Hint As Word
5115'   End Union
5116
5117    Reserved As Word
5118'   Type : 2 As Word
5119'   NameType : 3 As Word
5120'   Reserved : 11 As Word
5121End Type
5122
5123Enum IMPORT_OBJECT_TYPE
5124    IMPORT_OBJECT_CODE = 0
5125    IMPORT_OBJECT_DATA = 1
5126    IMPORT_OBJECT_CONST = 2
5127End Enum
5128
5129Enum IMPORT_OBJECT_NAME_TYPE
5130    IMPORT_OBJECT_ORDINAL = 0
5131    IMPORT_OBJECT_NAME = 1
5132    IMPORT_OBJECT_NAME_NO_PREFIX = 2
5133    IMPORT_OBJECT_NAME_UNDECORATE = 3
5134End Enum
5135
5136#ifndef __IMAGE_COR20_HEADER_DEFINED__
5137#define __IMAGE_COR20_HEADER_DEFINED__
5138
5139Enum ReplacesCorHdrNumericDefines
5140' COM+ Header entry point flags.
5141    COMIMAGE_FLAGS_ILONLY               = &h00000001
5142    COMIMAGE_FLAGS_32BITREQUIRED        = &h00000002
5143    COMIMAGE_FLAGS_IL_LIBRARY           = &h00000004
5144    COMIMAGE_FLAGS_STRONGNAMESIGNED     = &h00000008
5145    COMIMAGE_FLAGS_TRACKDEBUGDATA       = &h00010000
5146' Version flags for image.
5147    COR_VERSION_MAJOR_V2                = 2
5148    COR_VERSION_MAJOR                   = COR_VERSION_MAJOR_V2
5149    COR_VERSION_MINOR                   = 0
5150    COR_DELETED_NAME_LENGTH             = 8
5151    COR_VTABLEGAP_NAME_LENGTH           = 8
5152' Maximum size of a NativeType descriptor.
5153    NATIVE_TYPE_MAX_CB                  = 1
5154    COR_ILMETHOD_SECT_SMALL_MAX_DATASIZE= &hFF
5155' Consts for the MIH FLAGS
5156    IMAGE_COR_MIH_METHODRVA             = &h01
5157    IMAGE_COR_MIH_EHRVA                 = &h02
5158    IMAGE_COR_MIH_BASICBLOCK            = &h08
5159' V-table constants
5160    COR_VTABLE_32BIT                    = &h01          ' V-table slots are 32-bits in size.
5161    COR_VTABLE_64BIT                    = &h02          ' V-table slots are 64-bits in size.
5162    COR_VTABLE_FROM_UNMANAGED           = &h04          ' If set, transition from unmanaged.
5163    COR_VTABLE_FROM_UNMANAGED_RETAIN_APPDOMAIN  = &h08  ' If set, transition from unmanaged with keeping the current appdomain.
5164    COR_VTABLE_CALL_MOST_DERIVED        = &h10          ' Call most derived method described by
5165' EATJ constants
5166    IMAGE_COR_EATJ_THUNK_SIZE           = 32            ' Size of a jump thunk reserved range.
5167' Max name lengths
5168    '@todo: Change to unlimited name lengths.
5169    MAX_CLASS_NAME                      = 1024
5170    MAX_PACKAGE_NAME                    = 1024
5171End Enum
5172
5173' CLR 2.0 header structure.
5174Type IMAGE_COR20_HEADER
5175    ' Header versioning
5176    cb As DWord
5177    MajorRuntimeVersion As Word
5178    MinorRuntimeVersion As Word
5179    ' Symbol table and startup information
5180    MetaData As IMAGE_DATA_DIRECTORY
5181    Flags As DWord
5182    EntryPointToken As DWord
5183    ' Binding information
5184    Resources As IMAGE_DATA_DIRECTORY
5185    StrongNameSignature As IMAGE_DATA_DIRECTORY
5186    ' Regular fixup and binding information
5187    CodeManagerTable As IMAGE_DATA_DIRECTORY
5188    VTableFixups As IMAGE_DATA_DIRECTORY
5189    ExportAddressTableJumps As IMAGE_DATA_DIRECTORY
5190    ' Precompiled image info (internal use only - set to zero)
5191    ManagedNativeHeader As IMAGE_DATA_DIRECTORY
5192End Type
5193TypeDef PIMAGE_COR20_HEADER = *IMAGE_COR20_HEADER
5194
5195#endif
5196
5197' for move macros
5198'#include <string.h>
5199
5200#ifndef _SLIST_HEADER_
5201#define _SLIST_HEADER_
5202
5203#ifdef _WIN64
5204Type Align(16) SLIST_ENTRY
5205    Next_ As *SLIST_ENTRY
5206End Type
5207TypeDef PSLIST_ENTRY = *SLIST_ENTRY
5208#else
5209TypeDef SLIST_ENTRY = SINGLE_LIST_ENTRY
5210'TypeDef _SLIST_ENTRY = _SINGLE_LIST_ENTRY
5211TypeDef PSLIST_ENTRY = PSINGLE_LIST_ENTRY
5212#endif
5213
5214#ifdef _WIN64
5215
5216Type /*Union*/ Align(16) SLIST_HEADER
5217'   Type ' original struct
5218        Alignment As QWord
5219        Region As QWord
5220'   End Type
5221'   Type ' 8-byte header
5222'       Depth:16 As QWord
5223'       Sequence:9 As QWord
5224'       NextEntry:39 As QWord
5225'       HeaderType:1 As QWord ' 0: 8-byte As QWord 1: 16-byte
5226'       Init:1 As QWord       ' 0: uninitialized As QWord 1: initialized
5227'       Reserved:59 As QWord
5228'       Region:3 As QWord
5229'   } Header8
5230'   Type ' 16-byte header
5231'       Depth:16 As QWord
5232'       Sequence:48 As QWord
5233'       HeaderType:1 As QWord ' 0: 8-byte As QWord 1: 16-byte
5234'       Init:1 As QWord       ' 0: uninitialized As QWord 1: initialized
5235'       Reserved:2 As QWord
5236'       NextEntry:60 As QWord ' last 4 bits are always 0's
5237'   } Header16
5238End Type 'Union
5239TypeDef PSLIST_HEADER = *SLIST_HEADER
5240
5241#else
5242
5243Type /*Union*/ SLIST_HEADER
5244'   Alignment As QWord
5245'   Type
5246        Next_ As SLIST_ENTRY
5247        Depth As Word
5248        Sequence As Word
5249'   End Type
5250End Type 'Union
5251TypeDef PSLIST_HEADER = *SLIST_HEADER
5252
5253#endif
5254
5255#endif
5256
5257Declare Sub RtlInitializeSListHead Lib "kernel32" (/*IN*/ ByRef ListHead As SLIST_HEADER)
5258Declare Function RtlFirstEntrySList Lib "kernel32" (/*IN*/ ByRef ListHead As /*Const*/ SLIST_HEADER) As PSLIST_ENTRY
5259Declare Function RtlInterlockedPopEntrySList Lib "kernel32" (/*IN*/ ByRef ListHead As SLIST_HEADER) As PSLIST_ENTRY
5260Declare Function RtlInterlockedPushEntrySList Lib "kernel32" (/*IN*/ ByRef ListHead As SLIST_HEADER, /*IN*/ ListEntry As PSLIST_ENTRY) As PSLIST_ENTRY
5261Declare Function RtlInterlockedFlushSList Lib "kernel32" (/*IN*/ ByRef ListHead As SLIST_HEADER) As PSLIST_ENTRY
5262Declare Function RtlQueryDepthSList Lib "kernel32" (/*IN*/ ByRef ListHead As SLIST_HEADER) As Word
5263
5264#ifndef _RTL_RUN_ONCE_DEF
5265#define _RTL_RUN_ONCE_DEF
5266
5267'Const RTL_RUN_ONCE_INIT {0} 'Static initializer
5268
5269Const RTL_RUN_ONCE_CHECK_ONLY = &h00000001
5270Const RTL_RUN_ONCE_ASYNC = &h00000002
5271Const RTL_RUN_ONCE_INIT_FAILED = &h00000004
5272
5273Const RTL_RUN_ONCE_CTX_RESERVED_BITS = 2
5274
5275Type /*Union*/ RTL_RUN_ONCE
5276    Ptr As VoidPtr
5277End Type 'Union
5278TypeDef PRTL_RUN_ONCE = *RTL_RUN_ONCE
5279
5280TypeDef PRTL_RUN_ONCE_INIT_FN = *Function(ByRef RunOnce As RTL_RUN_ONCE, Parameter As VoidPtr, ByRef Context As VoidPtr) 'LOGICAL
5281#endif
5282
5283Declare Sub RtlRunOnceInitialize Lib "kernel32" (ByRef RunOnce As RTL_RUN_ONCE)
5284Declare Function RtlRunOnceExecuteOnce Lib "kernel32" (ByRef RunOnce As RTL_RUN_ONCE, InitFn As PRTL_RUN_ONCE_INIT_FN, Parameter As PVOID, ByRef Context As PVOID) As DWord
5285Declare Function RtlRunOnceBeginInitialize Lib "kernel32" (ByRef RunOnce As RTL_RUN_ONCE, Flags As DWord, ByRef Context As PVOID) As DWord
5286Declare Function RtlRunOnceComplete Lib "kernel32" (ByRef RunOnce As RTL_RUN_ONCE, Flags As DWord, Context As PVOID) As DWord
5287
5288Const HEAP_NO_SERIALIZE = &h00000001
5289Const HEAP_GROWABLE = &h00000002
5290Const HEAP_GENERATE_EXCEPTIONS = &h00000004
5291Const HEAP_ZERO_MEMORY = &h00000008
5292Const HEAP_REALLOC_IN_PLACE_ONLY = &h00000010
5293Const HEAP_TAIL_CHECKING_ENABLED = &h00000020
5294Const HEAP_FREE_CHECKING_ENABLED = &h00000040
5295Const HEAP_DISABLE_COALESCE_ON_FREE = &h00000080
5296Const HEAP_CREATE_ALIGN_16 = &h00010000
5297Const HEAP_CREATE_ENABLE_TRACING = &h00020000
5298Const HEAP_CREATE_ENABLE_EXECUTE = &h00040000
5299Const HEAP_MAXIMUM_TAG = &h0FFF
5300Const HEAP_PSEUDO_TAG_FLAG = &h8000
5301Const HEAP_TAG_SHIFT = 18
5302
5303Const HEAP_MAKE_TAG_FLAGS (TagBase /*As DWord*/, Tag /*As DWord*/) /*As DWord*/ = (((TagBase) + ((Tag) << HEAP_TAG_SHIFT)) As DWord)
5304
5305'#if (NTDDI_VERSION > NTDDI_WINXP)
5306'Declare Function RtlCaptureStackBackTrace Lib "kernel32" (FramesToSkip As DWord, FramesToCapture A sDWord, ByRef BackTrace As PVOID, BackTraceHash As *DWord) As Word
5307'#endif
5308
5309'#if (NTDDI_VERSION > NTDDI_WIN2K)
5310'Declare Sub RtlCaptureContext Lib "kernel32" (ByRef ContextRecord As CONTEXT)
5311'#endif
5312
5313Const IS_TEXT_UNICODE_ASCII16 = &h0001
5314Const IS_TEXT_UNICODE_REVERSE_ASCII16 = &h0010
5315
5316Const IS_TEXT_UNICODE_STATISTICS = &h0002
5317Const IS_TEXT_UNICODE_REVERSE_STATISTICS = &h0020
5318
5319Const IS_TEXT_UNICODE_CONTROLS = &h0004
5320Const IS_TEXT_UNICODE_REVERSE_CONTROLS = &h0040
5321
5322Const IS_TEXT_UNICODE_SIGNATURE = &h0008
5323Const IS_TEXT_UNICODE_REVERSE_SIGNATURE = &h0080
5324
5325Const IS_TEXT_UNICODE_ILLEGAL_CHARS = &h0100
5326Const IS_TEXT_UNICODE_ODD_LENGTH = &h0200
5327Const IS_TEXT_UNICODE_DBCS_LEADBYTE = &h0400
5328Const IS_TEXT_UNICODE_NULL_BYTES = &h1000
5329
5330Const IS_TEXT_UNICODE_UNICODE_MASK = &h000F
5331Const IS_TEXT_UNICODE_REVERSE_MASK = &h00F0
5332Const IS_TEXT_UNICODE_NOT_UNICODE_MASK = &h0F00
5333Const IS_TEXT_UNICODE_NOT_ASCII_MASK = &hF000
5334
5335Const COMPRESSION_FORMAT_NONE = &h0000
5336Const COMPRESSION_FORMAT_DEFAULT = &h0001
5337Const COMPRESSION_FORMAT_LZNT1 = &h0002
5338Const COMPRESSION_ENGINE_STANDARD = &h0000
5339Const COMPRESSION_ENGINE_MAXIMUM = &h0100
5340Const COMPRESSION_ENGINE_HIBER = &h0200
5341
5342'#if _DBG_MEMCPY_INLINE_ && !defined(MIDL_PASS) && !defined(_MEMCPY_INLINE_) && !defined(_CRTBLD)
5343'#define _MEMCPY_INLINE_
5344/*
5345FORCEINLINE
5346PVOID
5347__cdecl
5348memcpy_inline (
5349    void *dst,
5350    const void *src,
5351    size_t size
5352    )
5353{
5354    if (((char *)dst > (char *)src) &&
5355        ((char *)dst < ((char *)src + size))) {
5356        __debugbreak();
5357    }
5358    return memcpy(dst, src, size);
5359}
5360Const memcpy memcpy_inline
5361*/
5362'#endif
5363
5364'#if (NTDDI_VERSION >= NTDDI_WIN2K)
5365'Declare Function RtlCompareMemory Lib "kernel32" (Source1 As VoidPtr, Source2 As VoidPtr, Length As SIZE_T) As SIZE_T
5366'#endif
5367/*
5368Const RtlEqualMemory(Destination,Source,Length) (!memcmp((Destination),(Source),(Length)))
5369Const RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length))
5370Const RtlCopyMemory(Destination,Source,Length) memcpy((Destination),(Source),(Length))
5371Const RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length))
5372Const RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
5373*/
5374Function RtlSecureZeroMemory(ptr As VoidPtr, cnt As SIZE_T) As VoidPtr
5375    Dim vptr = ptr As * /*Volatile*/ Byte
5376#ifdef _WIN64
5377    __stosb(vptr, 0, cnt)
5378#else
5379
5380    While (cnt > 0)
5381        vptr = 0
5382        vptr++
5383        cnt--
5384    Wend
5385#endif
5386    RtlSecureZeroMemory = ptr
5387End Function
5388
5389Const SEF_DACL_AUTO_INHERIT = &h01
5390Const SEF_SACL_AUTO_INHERIT = &h02
5391Const SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT = &h04
5392Const SEF_AVOID_PRIVILEGE_CHECK = &h08
5393Const SEF_AVOID_OWNER_CHECK = &h10
5394Const SEF_DEFAULT_OWNER_FROM_PARENT = &h20
5395Const SEF_DEFAULT_GROUP_FROM_PARENT = &h40
5396Const SEF_MACL_NO_WRITE_UP = &h100
5397Const SEF_MACL_NO_READ_UP = &h200
5398Const SEF_MACL_NO_EXECUTE_UP = &h400
5399Const SEF_AVOID_OWNER_RESTRICTION = &h1000
5400
5401Const SEF_MACL_VALID_FLAGS = (SEF_MACL_NO_WRITE_UP OR SEF_MACL_NO_READ_UP Or SEF_MACL_NO_EXECUTE_UP)
5402
5403Type MESSAGE_RESOURCE_ENTRY
5404    Length As Word
5405    Flags As Word
5406    Text[ELM(1)] As Byte
5407End Type
5408TypeDef PMESSAGE_RESOURCE_ENTRY = *MESSAGE_RESOURCE_ENTRY
5409
5410Const MESSAGE_RESOURCE_UNICODE = &h0001
5411
5412Type MESSAGE_RESOURCE_BLOCK
5413    LowId As DWord
5414    HighId As DWord
5415    OffsetToEntries As DWord
5416End Type
5417TypeDef PMESSAGE_RESOURCE_BLOCK = *MESSAGE_RESOURCE_BLOCK
5418
5419Type MESSAGE_RESOURCE_DATA
5420    NumberOfBlocks As DWord
5421    Blocks[ELM(1)] As MESSAGE_RESOURCE_BLOCK
5422End Type
5423TypeDef PMESSAGE_RESOURCE_DATA = *MESSAGE_RESOURCE_DATA
5424
5425Type OSVERSIONINFOA
5426    dwOSVersionInfoSize As DWord
5427    dwMajorVersion As DWord
5428    dwMinorVersion As DWord
5429    dwBuildNumber As DWord
5430    dwPlatformId As DWord
5431    szCSDVersion[ELM(128)] As CHAR
5432End Type
5433TypeDef POSVERSIONINFOA = *OSVERSIONINFOA
5434TypeDef LPOSVERSIONINFOA = *OSVERSIONINFOA
5435Type OSVERSIONINFOW
5436    dwOSVersionInfoSize As DWord
5437    dwMajorVersion As DWord
5438    dwMinorVersion As DWord
5439    dwBuildNumber As DWord
5440    dwPlatformId As DWord
5441    szCSDVersion[ELM(128)] As WCHAR
5442End Type
5443TypeDef POSVERSIONINFOW = *OSVERSIONINFOW
5444TypeDef LPOSVERSIONINFOW = *OSVERSIONINFOW
5445TypeDef RTL_OSVERSIONINFOW = OSVERSIONINFOW
5446TypeDef PRTL_OSVERSIONINFOW = *OSVERSIONINFOW
5447#ifdef UNICODE
5448TypeDef OSVERSIONINFO = OSVERSIONINFOW
5449TypeDef POSVERSIONINFO = POSVERSIONINFOW
5450TypeDef LPOSVERSIONINFO = LPOSVERSIONINFOW
5451#else
5452TypeDef OSVERSIONINFO = OSVERSIONINFOA
5453TypeDef POSVERSIONINFO = POSVERSIONINFOA
5454TypeDef LPOSVERSIONINFO = LPOSVERSIONINFOA
5455#endif
5456Type OSVERSIONINFOEXA
5457    dwOSVersionInfoSize As DWord
5458    dwMajorVersion As DWord
5459    dwMinorVersion As DWord
5460    dwBuildNumber As DWord
5461    dwPlatformId As DWord
5462    szCSDVersion[ELM(128)] As CHAR
5463    wServicePackMajor As Word
5464    wServicePackMinor As Word
5465    wSuiteMask As Word
5466    wProductType As Byte
5467    wReserved As Byte
5468End Type
5469TypeDef POSVERSIONINFOEXA = *OSVERSIONINFOEXA
5470TypeDef LPOSVERSIONINFOEXA = *OSVERSIONINFOEXA
5471Type OSVERSIONINFOEXW
5472    dwOSVersionInfoSize As DWord
5473    dwMajorVersion As DWord
5474    dwMinorVersion As DWord
5475    dwBuildNumber As DWord
5476    dwPlatformId As DWord
5477    szCSDVersion[ELM(128)] As WCHAR
5478    wServicePackMajor As Word
5479    wServicePackMinor As Word
5480    wSuiteMask As Word
5481    wProductType As Byte
5482    wReserved As Byte
5483End Type
5484TypeDef POSVERSIONINFOEXW = *OSVERSIONINFOEXW
5485TypeDef LPOSVERSIONINFOEXW = *OSVERSIONINFOEXW
5486TypeDef RTL_OSVERSIONINFOEXW = OSVERSIONINFOEXW
5487TypeDef PRTL_OSVERSIONINFOEXW = *OSVERSIONINFOEXW
5488#ifdef UNICODE
5489TypeDef OSVERSIONINFOEX = OSVERSIONINFOEXW
5490TypeDef POSVERSIONINFOEX = POSVERSIONINFOEXW
5491TypeDef LPOSVERSIONINFOEX = LPOSVERSIONINFOEXW
5492#else
5493TypeDef OSVERSIONINFOEX = OSVERSIONINFOEXA
5494TypeDef POSVERSIONINFOEX = POSVERSIONINFOEXA
5495TypeDef LPOSVERSIONINFOEX = LPOSVERSIONINFOEXA
5496#endif
5497
5498' RtlVerifyVersionInfo() conditions
5499Const VER_EQUAL = 1
5500Const VER_GREATER = 2
5501Const VER_GREATER_EQUAL = 3
5502Const VER_LESS = 4
5503Const VER_LESS_EQUAL = 5
5504Const VER_AND = 6
5505Const VER_OR = 7
5506
5507Const VER_CONDITION_MASK = 7
5508Const VER_NUM_BITS_PER_CONDITION_MASK = 3
5509
5510' RtlVerifyVersionInfo() type mask bits
5511Const VER_MINORVERSION = 0000001
5512Const VER_MAJORVERSION = 0000002
5513Const VER_BUILDNUMBER = 0000004
5514Const VER_PLATFORMID = 0000008
5515Const VER_SERVICEPACKMINOR = 0000010
5516Const VER_SERVICEPACKMAJOR = 0000020
5517Const VER_SUITENAME = 0000040
5518Const VER_PRODUCT_TYPE = 0000080
5519
5520' RtlVerifyVersionInfo() os product type values
5521Const VER_NT_WORKSTATION = 0000001
5522Const VER_NT_DOMAIN_CONTROLLER = 0000002
5523Const VER_NT_SERVER = 0000003
5524
5525' dwPlatformId defines:
5526Const VER_PLATFORM_WIN32s        = 0
5527Const VER_PLATFORM_WIN32_WINDOWS = 1
5528Const VER_PLATFORM_WIN32_NT      = 2
5529Const VER_PLATFORM_WIN32_CE      = 3
5530
5531' VerifyVersionInfo() macro to set the condition mask
5532' VER_SET_CONDITION
5533
5534'#if (NTDDI_VERSION >= NTDDI_WIN2K)
5535'Declare Function VerSetConditionMask Lib "kernel32" (ConditionMask As QWord, TypeMask As DWord, Condition As Byte) As QWord
5536'#endif
5537
5538'#if (NTDDI_VERSION >= NTDDI_LONGHORN)
5539'Declare Function RtlGetProductInfo Lib "kernel32" (OSMajorVersion As DWord, OSMinorVersion As DWord, SpMajorVersion As DWord, SpMinorVersion As DWord, ByRef ReturnedProductType As DWord) As BOOLEAN
5540'#endif
5541
5542Type RTL_CRITICAL_SECTION_DEBUG
5543    Type_ As Word
5544    CreatorBackTraceIndex As Word
5545    CriticalSection As VoidPtr '!*RTL_CRITICAL_SECTION
5546    ProcessLocksList As LIST_ENTRY
5547    EntryCount As DWord
5548    ContentionCount As DWord
5549    Flags As DWord
5550    CreatorBackTraceIndexHigh As Word
5551    SpareWORD As Word
5552End Type
5553TypeDef PRTL_CRITICAL_SECTION_DEBUG = *RTL_CRITICAL_SECTION_DEBUG
5554TypeDef RTL_RESOURCE_DEBUG = RTL_CRITICAL_SECTION_DEBUG
5555TypeDef PRTL_RESOURCE_DEBUG = *RTL_RESOURCE_DEBUG
5556
5557Const RTL_CRITSECT_TYPE = 0
5558Const RTL_RESOURCE_TYPE = 1
5559
5560Const RTL_CRITICAL_SECTION_FLAG_NO_DEBUG_INFO = &h01000000
5561Const RTL_CRITICAL_SECTION_FLAG_DYNAMIC_SPIN = &h02000000
5562Const RTL_CRITICAL_SECTION_FLAG_STATIC_INIT = &h04000000
5563Const RTL_CRITICAL_SECTION_ALL_FLAG_BITS = &hFF000000
5564Const RTL_CRITICAL_SECTION_FLAG_RESERVED = (RTL_CRITICAL_SECTION_ALL_FLAG_BITS And (Not (RTL_CRITICAL_SECTION_FLAG_NO_DEBUG_INFO Or RTL_CRITICAL_SECTION_FLAG_DYNAMIC_SPIN Or RTL_CRITICAL_SECTION_FLAG_STATIC_INIT)))
5565
5566Const RTL_CRITICAL_SECTION_DEBUG_FLAG_STATIC_INIT = &h00000001
5567
5568Type Align(8) RTL_CRITICAL_SECTION
5569     DebugInfo As PRTL_CRITICAL_SECTION_DEBUG
5570    LockCount As Long
5571    RecursionCount As Long
5572    OwningThread As HANDLE
5573    LockSemaphore As HANDLE
5574    SpinCount As ULONG_PTR
5575End Type
5576TypeDef PRTL_CRITICAL_SECTION = *RTL_CRITICAL_SECTION
5577
5578Type RTL_SRWLOCK
5579    Ptr As VoidPtr
5580End Type
5581TypeDef PRTL_SRWLOCK = *RTL_SRWLOCK
5582'Const RTL_SRWLOCK_INIT {0}
5583Type RTL_CONDITION_VARIABLE
5584    Ptr As VoidPtr
5585End Type
5586TypeDef PRTL_CONDITION_VARIABLE = *RTL_CONDITION_VARIABLE
5587'Const RTL_CONDITION_VARIABLE_INIT {0}
5588Const RTL_CONDITION_VARIABLE_LOCKMODE_SHARED = &h1
5589TypeDef PVECTORED_EXCEPTION_HANDLER = *Function(ByRef ExceptionInfo As EXCEPTION_POINTERS) As Long
5590
5591Enum HEAP_INFORMATION_CLASS
5592    HeapCompatibilityInformation
5593    HeapEnableTerminationOnCorruption
5594End Enum
5595
5596Const WT_EXECUTEDEFAULT = &h00000000
5597Const WT_EXECUTEINIOTHREAD = &h00000001
5598Const WT_EXECUTEINUITHREAD = &h00000002
5599Const WT_EXECUTEINWAITTHREAD = &h00000004
5600Const WT_EXECUTEONLYONCE = &h00000008
5601Const WT_EXECUTEINTIMERTHREAD = &h00000020
5602Const WT_EXECUTELONGFUNCTION = &h00000010
5603Const WT_EXECUTEINPERSISTENTIOTHREAD = &h00000040
5604Const WT_EXECUTEINPERSISTENTTHREAD = &h00000080
5605Const WT_TRANSFER_IMPERSONATION = &h00000100
5606'Const WT_SET_MAX_THREADPOOL_THREADS(Flags, Limit)  ((Flags) Or= (Limit)<<16)
5607TypeDef WAITORTIMERCALLBACKFUNC = *Sub(p As VoidPtr, b As BOOLEAN)
5608TypeDef WORKERCALLBACKFUNC = *Sub(p As VoidPtr)
5609TypeDef APC_CALLBACK_FUNCTION = *Sub(dw AS DWord, p1 As VoidPtr, p2 As VoidPtr)
5610TypeDef PFLS_CALLBACK_FUNCTION = *Sub(lpFlsData As VoidPtr)
5611Const WT_EXECUTEINLONGTHREAD = &h00000010
5612Const WT_EXECUTEDELETEWAIT = &h00000008
5613
5614Enum ACTIVATION_CONTEXT_INFO_CLASS
5615    ActivationContextBasicInformation = 1
5616    ActivationContextDetailedInformation = 2
5617    AssemblyDetailedInformationInActivationContext = 3
5618    FileInformationInAssemblyOfAssemblyInActivationContext = 4
5619    RunlevelInformationInActivationContext = 5
5620    MaxActivationContextInfoClass
5621    ' compatibility with old names
5622    AssemblyDetailedInformationInActivationContxt = 3
5623    FileInformationInAssemblyOfAssemblyInActivationContxt = 4
5624End Enum
5625
5626TypeDef ACTIVATIONCONTEXTINFOCLASS = ACTIVATION_CONTEXT_INFO_CLASS
5627
5628Type ACTIVATION_CONTEXT_QUERY_INDEX
5629    ulAssemblyIndex As DWord
5630    ulFileIndexInAssembly; As DWord
5631End Type
5632TypeDef PACTIVATION_CONTEXT_QUERY_INDEX = *ACTIVATION_CONTEXT_QUERY_INDEX
5633
5634TypeDef PCACTIVATION_CONTEXT_QUERY_INDEX = * /*Const*/ ACTIVATION_CONTEXT_QUERY_INDEX
5635
5636Const ACTIVATION_CONTEXT_PATH_TYPE_NONE = 1
5637Const ACTIVATION_CONTEXT_PATH_TYPE_WIN32_FILE = 2
5638Const ACTIVATION_CONTEXT_PATH_TYPE_URL = 3
5639Const ACTIVATION_CONTEXT_PATH_TYPE_ASSEMBLYREF = 4
5640
5641Type ASSEMBLY_FILE_DETAILED_INFORMATION
5642    ulFlags As DWord
5643    ulFilenameLength As PCWSTR
5644    ulPathLength As PCWSTR
5645    lpFileName As PCWSTR
5646    lpFilePath As PCWSTR
5647End Type
5648TypeDef PASSEMBLY_FILE_DETAILED_INFORMATION = *ASSEMBLY_FILE_DETAILED_INFORMATION
5649TypeDef PCASSEMBLY_FILE_DETAILED_INFORMATION = * /*Const*/ ASSEMBLY_FILE_DETAILED_INFORMATION
5650
5651' compatibility with old names
5652TypeDef  _ASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION =  _ASSEMBLY_FILE_DETAILED_INFORMATION
5653TypeDef   ASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION =   ASSEMBLY_FILE_DETAILED_INFORMATION
5654TypeDef  PASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION =  PASSEMBLY_FILE_DETAILED_INFORMATION
5655TypeDef PCASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION = PCASSEMBLY_FILE_DETAILED_INFORMATION
5656
5657Type ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION
5658    ulFlags As DWord
5659    ulEncodedAssemblyIdentityLength As DWord
5660    ulManifestPathType As DWord
5661    liManifestLastWriteTime As LARGE_INTEGER
5662    ulPolicyPathType As DWord
5663    ulPolicyPathLength As DWord
5664    liPolicyLastWriteTime As LARGE_INTEGER
5665    ulMetadataSatelliteRosterIndex As DWord
5666    ulManifestVersionMajor As DWord
5667    ulManifestVersionMinor As DWord
5668    ulPolicyVersionMajor As DWord
5669    ulPolicyVersionMinor As DWord
5670    ulAssemblyDirectoryNameLength As DWord
5671    lpAssemblyEncodedAssemblyIdentity As PCWSTR
5672    lpAssemblyManifestPath As PCWSTR
5673    lpAssemblyPolicyPath As PCWSTR
5674    lpAssemblyDirectoryName As PCWSTR
5675    ulFileCount As DWord
5676End Type
5677TypeDef PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION = *ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION
5678TypeDef PCACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION = * /*Const*/ ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION
5679
5680Enum ACTCTX_REQUESTED_RUN_LEVEL
5681    ACTCTX_RUN_LEVEL_UNSPECIFIED = 0
5682    ACTCTX_RUN_LEVEL_AS_INVOKER
5683    ACTCTX_RUN_LEVEL_HIGHEST_AVAILABLE
5684    ACTCTX_RUN_LEVEL_REQUIRE_ADMIN
5685    ACTCTX_RUN_LEVEL_NUMBERS
5686End Enum
5687
5688Type ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION
5689    ulFlags As DWord
5690    RunLevel As ACTCTX_REQUESTED_RUN_LEVEL
5691    UiAccess As DWord
5692End Type
5693TypeDef PACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION = ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION
5694TypeDef PCACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION = * /*Const*/ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION
5695
5696Type ACTIVATION_CONTEXT_DETAILED_INFORMATION
5697    dwFlags As DWord
5698    ulFormatVersion As DWord
5699    ulAssemblyCount As DWord
5700    ulRootManifestPathType As DWord
5701    ulRootManifestPathChars As DWord
5702    ulRootConfigurationPathType As DWord
5703    ulRootConfigurationPathChars As DWord
5704    ulAppDirPathType As DWord
5705    ulAppDirPathChars As DWord
5706    lpRootManifestPath As PCWSTR
5707    lpRootConfigurationPath As PCWSTR
5708    lpAppDirPath As PCWSTR
5709End Type
5710TypeDef PACTIVATION_CONTEXT_DETAILED_INFORMATION = *ACTIVATION_CONTEXT_DETAILED_INFORMATION
5711TypeDef PCACTIVATION_CONTEXT_DETAILED_INFORMATION = * /*Const*/ ACTIVATION_CONTEXT_DETAILED_INFORMATION
5712
5713Const DLL_PROCESS_ATTACH = 1
5714Const DLL_THREAD_ATTACH = 2
5715Const DLL_THREAD_DETACH = 3
5716Const DLL_PROCESS_DETACH = 0
5717
5718Const EVENTLOG_SEQUENTIAL_READ = &h0001
5719Const EVENTLOG_SEEK_READ = &h0002
5720Const EVENTLOG_FORWARDS_READ = &h0004
5721Const EVENTLOG_BACKWARDS_READ = &h0008
5722
5723Const EVENTLOG_SUCCESS = &h0000
5724Const EVENTLOG_ERROR_TYPE = &h0001
5725Const EVENTLOG_WARNING_TYPE = &h0002
5726Const EVENTLOG_INFORMATION_TYPE = &h0004
5727Const EVENTLOG_AUDIT_SUCCESS = &h0008
5728Const EVENTLOG_AUDIT_FAILURE = &h0010
5729
5730Const EVENTLOG_START_PAIRED_EVENT = &h0001
5731Const EVENTLOG_END_PAIRED_EVENT = &h0002
5732Const EVENTLOG_END_ALL_PAIRED_EVENTS = &h0004
5733Const EVENTLOG_PAIRED_EVENT_ACTIVE = &h0008
5734Const EVENTLOG_PAIRED_EVENT_INACTIVE = &h0010
5735
5736Type EVENTLOGRECORD
5737    Length As DWord
5738    Reserved As DWord
5739    RecordNumber As DWord
5740    TimeGenerated As DWord
5741    TimeWritten As DWord
5742    EventID As DWord
5743    EventType As Word
5744    NumStrings As Word
5745    EventCategory As Word
5746    ReservedFlags As Word
5747    ClosingRecordNumber As DWord
5748    StringOffset As DWord
5749    UserSidLength As DWord
5750    UserSidOffset As DWord
5751    DataLength As DWord
5752    DataOffset As DWord
5753    ' Then follow:
5754    ' WCHAR SourceName[]
5755    ' WCHAR Computername[]
5756    ' SID   UserSid
5757    ' WCHAR Strings[]
5758    ' BYTE  Data[]
5759    ' CHAR  Pad[]
5760    ' DWORD Length;
5761End Type
5762TypeDef PEVENTLOGRECORD = *EVENTLOGRECORD
5763
5764Const MAXLOGICALLOGNAMESIZE = 256
5765
5766Type EVENTSFORLOGFILE
5767    ulSize As DWord
5768    szLogicalLogFile[ELM(MAXLOGICALLOGNAMESIZE)] As WCHAR
5769    ulNumRecords As DWord
5770    pEventLogRecords[ELM(ANYSIZE_ARRAY)] As EVENTLOGRECORD 'pEventLogRecords[] As EVENTLOGRECORD
5771End Type
5772TypeDef PEVENTSFORLOGFILE = *EVENTSFORLOGFILE
5773
5774Type PACKEDEVENTINFO
5775    ulSize As DWord
5776    ulNumEventsForLogFile As DWord
5777    ulOffsets[ELM(ANYSIZE_ARRAY)] As DWord 'ulOffsets[] As DWord
5778End Type
5779TypeDef PPACKEDEVENTINFO = *PACKEDEVENTINFO
5780
5781Const KEY_QUERY_VALUE = &h0001
5782Const KEY_SET_VALUE = &h0002
5783Const KEY_CREATE_SUB_KEY = &h0004
5784Const KEY_ENUMERATE_SUB_KEYS = &h0008
5785Const KEY_NOTIFY = &h0010
5786Const KEY_CREATE_LINK = &h0020
5787Const KEY_WOW64_32KEY = &h0200
5788Const KEY_WOW64_64KEY = &h0100
5789Const KEY_WOW64_RES = &h0300
5790Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE))
5791Const KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE))
5792Const KEY_EXECUTE = ((KEY_READ) And (Not SYNCHRONIZE))
5793Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))
5794Const REG_OPTION_RESERVED = &h00000000
5795Const REG_OPTION_NON_VOLATILE = &h00000000
5796Const REG_OPTION_VOLATILE = &h00000001
5797Const REG_OPTION_CREATE_LINK = &h00000002
5798Const REG_OPTION_BACKUP_RESTORE = &h00000004
5799Const REG_OPTION_OPEN_LINK = &h00000008
5800Const REG_LEGAL_OPTION = (REG_OPTION_RESERVED Or REG_OPTION_NON_VOLATILE Or REG_OPTION_VOLATILE Or REG_OPTION_CREATE_LINK Or REG_OPTION_BACKUP_RESTORE Or REG_OPTION_OPEN_LINK)
5801Const REG_CREATED_NEW_KEY = &h00000001
5802Const REG_OPENED_EXISTING_KEY = &h00000002
5803
5804Const REG_STANDARD_FORMAT = 1
5805Const REG_LATEST_FORMAT = 2
5806Const REG_NO_COMPRESSION = 4
5807
5808Const REG_WHOLE_HIVE_VOLATILE = &h00000001
5809Const REG_REFRESH_HIVE = &h00000002
5810Const REG_NO_LAZY_FLUSH = &h00000004
5811Const REG_FORCE_RESTORE = &h00000008
5812Const REG_APP_HIVE = &h00000010
5813Const REG_PROCESS_PRIVATE = &h00000020
5814Const REG_START_JOURNAL = &h00000040
5815Const REG_HIVE_EXACT_FILE_GROWTH = &h00000080
5816Const REG_HIVE_NO_RM = &h00000100
5817Const REG_HIVE_SINGLE_LOG = &h00000200
5818
5819Const REG_FORCE_UNLOAD = 1
5820
5821Const REG_NOTIFY_CHANGE_NAME = &h00000001
5822Const REG_NOTIFY_CHANGE_ATTRIBUTES = &h00000002
5823Const REG_NOTIFY_CHANGE_LAST_SET = &h00000004
5824Const REG_NOTIFY_CHANGE_SECURITY = &h00000008
5825
5826Const REG_LEGAL_CHANGE_FILTER = (REG_NOTIFY_CHANGE_NAME Or REG_NOTIFY_CHANGE_ATTRIBUTES Or REG_NOTIFY_CHANGE_LAST_SET Or REG_NOTIFY_CHANGE_SECURITY)
5827
5828Const REG_NONE = 0
5829Const REG_SZ = 1
5830Const REG_EXPAND_SZ = 2
5831
5832Const REG_BINARY = 3
5833Const REG_DWORD = 4
5834Const REG_DWORD_LITTLE_ENDIAN = 4
5835Const REG_DWORD_BIG_ENDIAN = 5
5836Const REG_LINK = 6
5837Const REG_MULTI_SZ = 7
5838Const REG_RESOURCE_LIST = 8
5839Const REG_FULL_RESOURCE_DESCRIPTOR = 9
5840Const REG_RESOURCE_REQUIREMENTS_LIST = 10
5841Const REG_QWORD = 11
5842Const REG_QWORD_LITTLE_ENDIAN = 11
5843
5844Const SERVICE_KERNEL_DRIVER = &h00000001
5845Const SERVICE_FILE_SYSTEM_DRIVER = &h00000002
5846Const SERVICE_ADAPTER = &h00000004
5847Const SERVICE_RECOGNIZER_DRIVER = &h00000008
5848
5849Const SERVICE_DRIVER = (SERVICE_KERNEL_DRIVER Or SERVICE_FILE_SYSTEM_DRIVER Or SERVICE_RECOGNIZER_DRIVER)
5850
5851Const SERVICE_WIN32_OWN_PROCESS = &h00000010
5852Const SERVICE_WIN32_SHARE_PROCESS = &h00000020
5853Const SERVICE_WIN32 = (SERVICE_WIN32_OWN_PROCESS Or SERVICE_WIN32_SHARE_PROCESS)
5854
5855Const SERVICE_INTERACTIVE_PROCESS = &h00000100
5856
5857Const SERVICE_TYPE_ALL = (SERVICE_WIN32 Or SERVICE_ADAPTER Or SERVICE_DRIVER Or SERVICE_INTERACTIVE_PROCESS)
5858
5859Const SERVICE_BOOT_START = &h00000000
5860Const SERVICE_SYSTEM_START = &h00000001
5861Const SERVICE_AUTO_START = &h00000002
5862Const SERVICE_DEMAND_START = &h00000003
5863Const SERVICE_DISABLED = &h00000004
5864
5865Const SERVICE_ERROR_IGNORE = &h00000000
5866Const SERVICE_ERROR_NORMAL = &h00000001
5867Const SERVICE_ERROR_SEVERE = &h00000002
5868Const SERVICE_ERROR_CRITICAL = &h00000003
5869
5870Enum _SERVICE_NODE_TYPE
5871    DriverType = SERVICE_KERNEL_DRIVER
5872    FileSystemType = SERVICE_FILE_SYSTEM_DRIVER
5873    Win32ServiceOwnProcess = SERVICE_WIN32_OWN_PROCESS
5874    Win32ServiceShareProcess = SERVICE_WIN32_SHARE_PROCESS
5875    AdapterType = SERVICE_ADAPTER
5876    RecognizerType = SERVICE_RECOGNIZER_DRIVER
5877End Enum
5878
5879Enum SERVICE_LOAD_TYPE
5880    BootLoad = SERVICE_BOOT_START
5881    SystemLoad = SERVICE_SYSTEM_START
5882    AutoLoad = SERVICE_AUTO_START
5883    DemandLoad = SERVICE_DEMAND_START
5884    DisableLoad = SERVICE_DISABLED
5885End Enum
5886
5887Enum SERVICE_ERROR_TYPE
5888    IgnoreError = SERVICE_ERROR_IGNORE
5889    NormalError = SERVICE_ERROR_NORMAL
5890    SevereError = SERVICE_ERROR_SEVERE
5891    CriticalError = SERVICE_ERROR_CRITICAL
5892End Enum
5893
5894Const TAPE_ERASE_SHORT = 0
5895Const TAPE_ERASE_LONG = 1
5896
5897Type TAPE_ERASE
5898    Type_ As DWord
5899    Immediate As BOOLEAN
5900End Type
5901TypeDef PTAPE_ERASE = *TAPE_ERASE
5902
5903Const TAPE_LOAD = 0
5904Const TAPE_UNLOAD = 1
5905Const TAPE_TENSION = 2
5906Const TAPE_LOCK = 3
5907Const TAPE_UNLOCK = 4
5908Const TAPE_FORMAT = 5
5909
5910Type TAPE_PREPARE
5911    Operation As DWord
5912    Immediate As BOOLEAN
5913End Type
5914TypeDef PTAPE_PREPARE = *TAPE_PREPARE
5915
5916Const TAPE_SETMARKS = 0
5917Const TAPE_FILEMARKS = 1
5918Const TAPE_SHORT_FILEMARKS = 2
5919Const TAPE_LONG_FILEMARKS = 3
5920
5921Type TAPE_WRITE_MARKS
5922    Type_ As DWord
5923    Count As DWord
5924    Immediate As BOOLEAN
5925End Type
5926TypeDef PTAPE_WRITE_MARKS = *TAPE_WRITE_MARKS
5927
5928Const TAPE_ABSOLUTE_POSITION = 0
5929Const TAPE_LOGICAL_POSITION = 1
5930Const TAPE_PSEUDO_LOGICAL_POSITION = 2
5931
5932Type TAPE_GET_POSITION
5933    Type_ As DWord
5934    Partition As DWord
5935    Offset As LARGE_INTEGER
5936End Type
5937TypeDef PTAPE_GET_POSITION = *TAPE_GET_POSITION
5938
5939Const TAPE_REWIND = 0
5940Const TAPE_ABSOLUTE_BLOCK = 1
5941Const TAPE_LOGICAL_BLOCK = 2
5942Const TAPE_PSEUDO_LOGICAL_BLOCK = 3
5943Const TAPE_SPACE_END_OF_DATA = 4
5944Const TAPE_SPACE_RELATIVE_BLOCKS = 5
5945Const TAPE_SPACE_FILEMARKS = 6
5946Const TAPE_SPACE_SEQUENTIAL_FMKS = 7
5947Const TAPE_SPACE_SETMARKS = 8
5948Const TAPE_SPACE_SEQUENTIAL_SMKS = 9
5949
5950Type TAPE_SET_POSITION
5951    Method As DWord
5952    Partition As DWord
5953    Offset As LARGE_INTEGER
5954    Immediate As BOOLEAN
5955End Type
5956TypeDef PTAPE_SET_POSITION = *TAPE_SET_POSITION
5957
5958Const TAPE_DRIVE_FIXED = &h00000001
5959Const TAPE_DRIVE_SELECT = &h00000002
5960Const TAPE_DRIVE_INITIATOR = &h00000004
5961
5962Const TAPE_DRIVE_ERASE_SHORT = &h00000010
5963Const TAPE_DRIVE_ERASE_LONG = &h00000020
5964Const TAPE_DRIVE_ERASE_BOP_ONLY = &h00000040
5965Const TAPE_DRIVE_ERASE_IMMEDIATE = &h00000080
5966
5967Const TAPE_DRIVE_TAPE_CAPACITY = &h00000100
5968Const TAPE_DRIVE_TAPE_REMAINING = &h00000200
5969Const TAPE_DRIVE_FIXED_BLOCK = &h00000400
5970Const TAPE_DRIVE_VARIABLE_BLOCK = &h00000800
5971
5972Const TAPE_DRIVE_WRITE_PROTECT = &h00001000
5973Const TAPE_DRIVE_EOT_WZ_SIZE = &h00002000
5974
5975Const TAPE_DRIVE_ECC = &h00010000
5976Const TAPE_DRIVE_COMPRESSION = &h00020000
5977Const TAPE_DRIVE_PADDING = &h00040000
5978Const TAPE_DRIVE_REPORT_SMKS = &h00080000
5979
5980Const TAPE_DRIVE_GET_ABSOLUTE_BLK = &h00100000
5981Const TAPE_DRIVE_GET_LOGICAL_BLK = &h00200000
5982Const TAPE_DRIVE_SET_EOT_WZ_SIZE = &h00400000
5983
5984Const TAPE_DRIVE_EJECT_MEDIA = &h01000000
5985Const TAPE_DRIVE_CLEAN_REQUESTS = &h02000000
5986Const TAPE_DRIVE_SET_CMP_BOP_ONLY = &h04000000
5987
5988Const TAPE_DRIVE_RESERVED_BIT = &h80000000
5989
5990Const TAPE_DRIVE_LOAD_UNLOAD = &h80000001
5991Const TAPE_DRIVE_TENSION = &h80000002
5992Const TAPE_DRIVE_LOCK_UNLOCK = &h80000004
5993Const TAPE_DRIVE_REWIND_IMMEDIATE = &h80000008
5994
5995Const TAPE_DRIVE_SET_BLOCK_SIZE = &h80000010
5996Const TAPE_DRIVE_LOAD_UNLD_IMMED = &h80000020
5997Const TAPE_DRIVE_TENSION_IMMED = &h80000040
5998Const TAPE_DRIVE_LOCK_UNLK_IMMED = &h80000080
5999
6000Const TAPE_DRIVE_SET_ECC = &h80000100
6001Const TAPE_DRIVE_SET_COMPRESSION = &h80000200
6002Const TAPE_DRIVE_SET_PADDING = &h80000400
6003Const TAPE_DRIVE_SET_REPORT_SMKS = &h80000800
6004
6005Const TAPE_DRIVE_ABSOLUTE_BLK = &h80001000
6006Const TAPE_DRIVE_ABS_BLK_IMMED = &h80002000
6007Const TAPE_DRIVE_LOGICAL_BLK = &h80004000
6008Const TAPE_DRIVE_LOG_BLK_IMMED = &h80008000
6009
6010Const TAPE_DRIVE_END_OF_DATA = &h80010000
6011Const TAPE_DRIVE_RELATIVE_BLKS = &h80020000
6012Const TAPE_DRIVE_FILEMARKS = &h80040000
6013Const TAPE_DRIVE_SEQUENTIAL_FMKS = &h80080000
6014
6015Const TAPE_DRIVE_SETMARKS = &h80100000
6016Const TAPE_DRIVE_SEQUENTIAL_SMKS = &h80200000
6017Const TAPE_DRIVE_REVERSE_POSITION = &h80400000
6018Const TAPE_DRIVE_SPACE_IMMEDIATE = &h80800000
6019
6020Const TAPE_DRIVE_WRITE_SETMARKS = &h81000000
6021Const TAPE_DRIVE_WRITE_FILEMARKS = &h82000000
6022Const TAPE_DRIVE_WRITE_SHORT_FMKS = &h84000000
6023Const TAPE_DRIVE_WRITE_LONG_FMKS = &h88000000
6024
6025Const TAPE_DRIVE_WRITE_MARK_IMMED = &h90000000
6026Const TAPE_DRIVE_FORMAT = &hA0000000
6027Const TAPE_DRIVE_FORMAT_IMMEDIATE = &hC0000000
6028Const TAPE_DRIVE_HIGH_FEATURES = &h80000000
6029
6030Type TAPE_GET_DRIVE_PARAMETERS
6031    ECC As BOOLEAN
6032    Compression As BOOLEAN
6033    DataPadding As BOOLEAN
6034    ReportSetmarks As BOOLEAN
6035    DefaultBlockSize As DWord
6036    MaximumBlockSize As DWord
6037    MinimumBlockSize As DWord
6038    MaximumPartitionCount As DWord
6039    FeaturesLow As DWord
6040    FeaturesHigh As DWord
6041    EOTWarningZoneSize As DWord
6042End Type
6043TypeDef PTAPE_GET_DRIVE_PARAMETERS = *TAPE_GET_DRIVE_PARAMETERS
6044
6045Type TAPE_SET_DRIVE_PARAMETERS
6046    ECC As BOOLEAN
6047    Compression As BOOLEAN
6048    DataPadding As BOOLEAN
6049    ReportSetmarks As BOOLEAN
6050    EOTWarningZoneSize As DWord
6051End Type
6052TypeDef PTAPE_SET_DRIVE_PARAMETERS = *TAPE_SET_DRIVE_PARAMETERS
6053
6054Type TAPE_GET_MEDIA_PARAMETERS
6055    Capacity As LARGE_INTEGER
6056    Remaining As LARGE_INTEGER
6057    BlockSize As DWord
6058    PartitionCount As DWord
6059    WriteProtected As BOOLEAN
6060End Type
6061TypeDef PTAPE_GET_MEDIA_PARAMETERS = *TAPE_GET_MEDIA_PARAMETERS
6062
6063Type TAPE_SET_MEDIA_PARAMETERS
6064    BlockSize As DWord
6065End Type
6066TypeDef PTAPE_SET_MEDIA_PARAMETERS = *TAPE_SET_MEDIA_PARAMETERS
6067
6068Const TAPE_FIXED_PARTITIONS = 0
6069Const TAPE_SELECT_PARTITIONS = 1
6070Const TAPE_INITIATOR_PARTITIONS = 2
6071
6072Type TAPE_CREATE_PARTITION
6073    Method As DWord
6074    Count As DWord
6075    Size As DWord
6076End Type
6077TypeDef PTAPE_CREATE_PARTITION = *TAPE_CREATE_PARTITION
6078
6079Const TAPE_QUERY_DRIVE_PARAMETERS = 0
6080Const TAPE_QUERY_MEDIA_CAPACITY = 1
6081Const TAPE_CHECK_FOR_DRIVE_PROBLEM = 2
6082Const TAPE_QUERY_IO_ERROR_DATA = 3
6083Const TAPE_QUERY_DEVICE_ERROR_DATA = 4
6084
6085Type TAPE_WMI_OPERATIONS
6086    Method As DWord
6087    DataBufferSize As DWord
6088    DataBuffer As VoidPtr
6089End Type
6090TypeDef PTAPE_WMI_OPERATIONS = *TAPE_WMI_OPERATIONS
6091
6092Enum TAPE_DRIVE_PROBLEM_TYPE
6093    TapeDriveProblemNone
6094    TapeDriveReadWriteWarning
6095    TapeDriveReadWriteError
6096    TapeDriveReadWarning
6097    TapeDriveWriteWarning
6098    TapeDriveReadError
6099    TapeDriveWriteError
6100    TapeDriveHardwareError
6101    TapeDriveUnsupportedMedia
6102    TapeDriveScsiConnectionError
6103    TapeDriveTimetoClean
6104    TapeDriveCleanDriveNow
6105    TapeDriveMediaLifeExpired
6106    TapeDriveSnappedTape
6107End Enum
6108
6109#ifndef _NTTMAPI_
6110#define _NTTMAPI_
6111
6112'#include <ktmtypes.ab>
6113
6114' Types for Nt level TM calls
6115Const TRANSACTIONMANAGER_QUERY_INFORMATION = &h0001
6116Const TRANSACTIONMANAGER_SET_INFORMATION = &h0002
6117Const TRANSACTIONMANAGER_RECOVER = &h0004
6118Const TRANSACTIONMANAGER_RENAME = &h0008
6119Const TRANSACTIONMANAGER_CREATE_RM = &h0010
6120Const TRANSACTIONMANAGER_BIND_TRANSACTION = &h0020
6121Const TRANSACTIONMANAGER_GENERIC_READ = (STANDARD_RIGHTS_READ Or TRANSACTIONMANAGER_QUERY_INFORMATION)
6122Const TRANSACTIONMANAGER_GENERIC_WRITE = (STANDARD_RIGHTS_WRITE Or TRANSACTIONMANAGER_SET_INFORMATION Or TRANSACTIONMANAGER_RECOVER Or TRANSACTIONMANAGER_RENAME Or TRANSACTIONMANAGER_CREATE_RM)
6123Const TRANSACTIONMANAGER_GENERIC_EXECUTE = (STANDARD_RIGHTS_EXECUTE)
6124Const TRANSACTIONMANAGER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or TRANSACTIONMANAGER_GENERIC_READ Or TRANSACTIONMANAGER_GENERIC_WRITE Or TRANSACTIONMANAGER_GENERIC_EXECUTE Or TRANSACTIONMANAGER_BIND_TRANSACTION)
6125
6126Const TRANSACTION_QUERY_INFORMATION = &h0001
6127Const TRANSACTION_SET_INFORMATION = &h0002
6128Const TRANSACTION_ENLIST = &h0004
6129Const TRANSACTION_COMMIT = &h0008
6130Const TRANSACTION_ROLLBACK = &h0010
6131Const TRANSACTION_PROPAGATE = &h0020
6132Const TRANSACTION_SAVEPOINT = &h0040
6133Const TRANSACTION_MARSHALL = ( TRANSACTION_QUERY_INFORMATION )
6134Const TRANSACTION_GENERIC_READ = (STANDARD_RIGHTS_READ Or TRANSACTION_QUERY_INFORMATION Or SYNCHRONIZE)
6135Const TRANSACTION_GENERIC_WRITE = (STANDARD_RIGHTS_WRITE Or TRANSACTION_SET_INFORMATION Or TRANSACTION_COMMIT Or TRANSACTION_ENLIST Or TRANSACTION_ROLLBACK Or TRANSACTION_PROPAGATE Or TRANSACTION_SAVEPOINT Or SYNCHRONIZE)
6136Const TRANSACTION_GENERIC_EXECUTE = (STANDARD_RIGHTS_EXECUTE Or TRANSACTION_COMMIT Or TRANSACTION_ROLLBACK Or SYNCHRONIZE)
6137Const TRANSACTION_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or TRANSACTION_GENERIC_READ Or TRANSACTION_GENERIC_WRITE Or TRANSACTION_GENERIC_EXECUTE)
6138Const TRANSACTION_RESOURCE_MANAGER_RIGHTS = (TRANSACTION_GENERIC_READ Or STANDARD_RIGHTS_WRITE Or TRANSACTION_SET_INFORMATION Or TRANSACTION_ENLIST Or TRANSACTION_ROLLBACK Or TRANSACTION_PROPAGATE Or SYNCHRONIZE)
6139
6140Const RESOURCEMANAGER_QUERY_INFORMATION = &h0001
6141Const RESOURCEMANAGER_SET_INFORMATION = &h0002
6142Const RESOURCEMANAGER_RECOVER = &h0004
6143Const RESOURCEMANAGER_ENLIST = &h0008
6144Const RESOURCEMANAGER_GET_NOTIFICATION = &h0010
6145Const RESOURCEMANAGER_REGISTER_PROTOCOL = &h0020
6146Const RESOURCEMANAGER_COMPLETE_PROPAGATION = &h0040
6147Const RESOURCEMANAGER_GENERIC_READ = (STANDARD_RIGHTS_READ Or RESOURCEMANAGER_QUERY_INFORMATION Or SYNCHRONIZE)
6148Const RESOURCEMANAGER_GENERIC_WRITE = (STANDARD_RIGHTS_WRITE Or RESOURCEMANAGER_SET_INFORMATION Or RESOURCEMANAGER_RECOVER Or RESOURCEMANAGER_ENLIST Or RESOURCEMANAGER_GET_NOTIFICATION Or RESOURCEMANAGER_REGISTER_PROTOCOL Or RESOURCEMANAGER_COMPLETE_PROPAGATION Or SYNCHRONIZE)
6149Const RESOURCEMANAGER_GENERIC_EXECUTE = (STANDARD_RIGHTS_EXECUTE Or RESOURCEMANAGER_RECOVER Or RESOURCEMANAGER_ENLIST Or RESOURCEMANAGER_GET_NOTIFICATION Or RESOURCEMANAGER_COMPLETE_PROPAGATION Or SYNCHRONIZE)
6150Const RESOURCEMANAGER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or RESOURCEMANAGER_GENERIC_READ Or RESOURCEMANAGER_GENERIC_WRITE Or RESOURCEMANAGER_GENERIC_EXECUTE)
6151
6152
6153Const ENLISTMENT_QUERY_INFORMATION = &h0001
6154Const ENLISTMENT_SET_INFORMATION = &h0002
6155Const ENLISTMENT_RECOVER = &h0004
6156Const ENLISTMENT_SUBORDINATE_RIGHTS = &h0008
6157Const ENLISTMENT_SUPERIOR_RIGHTS = &h0010
6158Const ENLISTMENT_GENERIC_READ = (STANDARD_RIGHTS_READ Or ENLISTMENT_QUERY_INFORMATION)
6159Const ENLISTMENT_GENERIC_WRITE = (STANDARD_RIGHTS_WRITE Or ENLISTMENT_SET_INFORMATION Or ENLISTMENT_RECOVER Or ENLISTMENT_SUBORDINATE_RIGHTS Or ENLISTMENT_SUPERIOR_RIGHTS)
6160Const ENLISTMENT_GENERIC_EXECUTE = (STANDARD_RIGHTS_EXECUTE Or ENLISTMENT_RECOVER Or ENLISTMENT_SUBORDINATE_RIGHTS Or ENLISTMENT_SUPERIOR_RIGHTS)
6161Const ENLISTMENT_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or ENLISTMENT_GENERIC_READ Or ENLISTMENT_GENERIC_WRITE Or ENLISTMENT_GENERIC_EXECUTE)
6162
6163' Transaction outcomes.
6164
6165Enum TRANSACTION_OUTCOME
6166    TransactionOutcomeUndetermined = 1
6167    TransactionOutcomeCommitted
6168    TransactionOutcomeAborted
6169End Enum
6170
6171
6172Enum TRANSACTION_STATE
6173    TransactionStateNormal = 1
6174    TransactionStateIndoubt
6175    TransactionStateCommittedNotify
6176End Enum
6177
6178Type TRANSACTION_BASIC_INFORMATION
6179    TransactionId As GUID
6180    State As DWord
6181    Outcome As DWord
6182End Type
6183TypeDef PTRANSACTION_BASIC_INFORMATION = *TRANSACTION_BASIC_INFORMATION
6184
6185Type TRANSACTIONMANAGER_BASIC_INFORMATION
6186    TmIdentity As GUID
6187    VirtualClock As LARGE_INTEGER
6188End Type
6189TypeDef PTRANSACTIONMANAGER_BASIC_INFORMATION = *TRANSACTIONMANAGER_BASIC_INFORMATION
6190
6191Type TRANSACTIONMANAGER_LOG_INFORMATION
6192    LogIdentity As GUID
6193End Type
6194TypeDef PTRANSACTIONMANAGER_LOG_INFORMATION = *TRANSACTIONMANAGER_LOG_INFORMATION
6195
6196Type TRANSACTIONMANAGER_LOGPATH_INFORMATION
6197    LogPathLength As DWord
6198    /*__field_ecount(LogPathLength)*/ LogPath[ELM(1)] As WCHAR 'Variable size
6199'   Data[ELM(1)] 'Variable size data not declared
6200End Type
6201TypeDef PTRANSACTIONMANAGER_LOGPATH_INFORMATION = *TRANSACTIONMANAGER_LOGPATH_INFORMATION
6202
6203Type TRANSACTION_PROPERTIES_INFORMATION
6204    IsolationLevel As DWord
6205    IsolationFlags As DWord
6206    Timeout As LARGE_INTEGER
6207    Outcome As DWord
6208    DescriptionLength As DWord
6209    Description[ELM(1)] As WCHAR 'Variable size
6210'   Data[ELM(1)] 'Variable size data not declared
6211End Type
6212TypeDef PTRANSACTION_PROPERTIES_INFORMATION = *TRANSACTION_PROPERTIES_INFORMATION
6213
6214Type TRANSACTION_BIND_INFORMATION
6215    TmHandle As HANDLE
6216End Type
6217TypeDef PTRANSACTION_BIND_INFORMATION = *TRANSACTION_BIND_INFORMATION
6218
6219Type TRANSACTION_ENLISTMENT_PAIR
6220    EnlistmentId As GUID
6221    ResourceManagerId As GUID
6222End Type
6223TypeDef PTRANSACTION_ENLISTMENT_PAIR = *TRANSACTION_ENLISTMENT_PAIR
6224
6225Type TRANSACTION_ENLISTMENTS_INFORMATION
6226    NumberOfEnlistments As DWord
6227    EnlistmentPair[ELM(1)] As TRANSACTION_ENLISTMENT_PAIR 'Variable size
6228End Type
6229TypeDef PTRANSACTION_ENLISTMENTS_INFORMATION = *TRANSACTION_ENLISTMENTS_INFORMATION
6230
6231Type TRANSACTION_FULL_INFORMATION
6232    NameLength As DWord
6233End Type
6234TypeDef PTRANSACTION_FULL_INFORMATION = *TRANSACTION_FULL_INFORMATION
6235
6236Type RESOURCEMANAGER_BASIC_INFORMATION
6237    ResourceManagerId As GUID
6238    DescriptionLength As DWord
6239    Description[ELM(1)] As WCHAR 'Variable size
6240End Type
6241TypeDef PRESOURCEMANAGER_BASIC_INFORMATION = *RESOURCEMANAGER_BASIC_INFORMATION
6242
6243Type RESOURCEMANAGER_COMPLETION_INFORMATION
6244    IoCompletionPortHandle As HANDLE
6245    CompletionKey As ULONG_PTR
6246End Type
6247TypeDef PRESOURCEMANAGER_COMPLETION_INFORMATION = *RESOURCEMANAGER_COMPLETION_INFORMATION
6248
6249Type TRANSACTION_NAME_INFORMATION
6250    NameLength As DWord
6251    Name[ELM(1)] As WCHAR 'Variable length string
6252End Type
6253TypeDef PTRANSACTION_NAME_INFORMATION = *TRANSACTION_NAME_INFORMATION
6254
6255Enum TRANSACTION_INFORMATION_CLASS
6256    TransactionBasicInformation
6257    TransactionPropertiesInformation
6258    TransactionEnlistmentInformation
6259    TransactionFullInformation
6260    TransactionBindInformation
6261'   TransactionNameInformation
6262End Enum
6263
6264Enum TRANSACTIONMANAGER_INFORMATION_CLASS
6265    TransactionManagerBasicInformation
6266    TransactionManagerLogInformation
6267    TransactionManagerLogPathInformation
6268    TransactionManagerOnlineProbeInformation
6269End Enum
6270
6271Enum RESOURCEMANAGER_INFORMATION_CLASS
6272    ResourceManagerBasicInformation
6273    ResourceManagerCompletionInformation
6274    ResourceManagerFullInformation
6275    ResourceManagerNameInformation
6276End Enum
6277
6278Type ENLISTMENT_BASIC_INFORMATION
6279    EnlistmentId As GUID
6280    TransactionId As GUID
6281    ResourceManagerId As GUID
6282End Type
6283TypeDef PENLISTMENT_BASIC_INFORMATION = *ENLISTMENT_BASIC_INFORMATION
6284
6285Enum ENLISTMENT_INFORMATION_CLASS
6286    EnlistmentBasicInformation
6287    EnlistmentRecoveryInformation
6288    EnlistmentFullInformation
6289    EnlistmentNameInformation
6290End Enum
6291
6292Type TRANSACTION_LIST_ENTRY
6293'   UOW As UOW
6294End Type
6295
6296TypeDef PTRANSACTION_LIST_ENTRY = *TRANSACTION_LIST_ENTRY
6297
6298Type TRANSACTION_LIST_INFORMATION
6299    NumberOfTransactions As DWord
6300    TransactionInformation[ELM(1)] As TRANSACTION_LIST_ENTRY
6301End Type
6302TypeDef PTRANSACTION_LIST_INFORMATION = *TRANSACTION_LIST_INFORMATION
6303
6304' Types of objects known to the kernel transaction manager.
6305Enum KTMOBJECT_TYPE
6306    KTMOBJECT_TRANSACTION
6307    KTMOBJECT_TRANSACTION_MANAGER
6308    KTMOBJECT_RESOURCE_MANAGER
6309    KTMOBJECT_ENLISTMENT
6310    KTMOBJECT_INVALID
6311End Enum
6312TypeDef PKTMOBJECT_TYPE = *KTMOBJECT_TYPE
6313
6314' KTMOBJECT_CURSOR
6315Type KTMOBJECT_CURSOR
6316    LastQuery As GUID
6317    ObjectIdCount As DWord
6318    ObjectIds[ELM(1)] As GUID
6319End Type
6320TypeDef PKTMOBJECT_CURSOR = *KTMOBJECT_CURSOR
6321
6322#endif
6323
6324TypeDef TP_VERSION = DWord
6325TypeDef PTP_VERSION = *TP_VERSION
6326
6327TypeDef PTP_CALLBACK_INSTANCE = VoidPtr
6328'typedef struct _TP_CALLBACK_INSTANCE TP_CALLBACK_INSTANCE, *PTP_CALLBACK_INSTANCE;
6329
6330TypeDef PTP_SIMPLE_CALLBACK = *Sub(Instance As PTP_CALLBACK_INSTANCE, Context As VoidPtr)
6331TypeDef PTP_POOL = VoidPtr
6332'typedef struct _TP_POOL TP_POOL, *PTP_POOL;
6333TypeDef PTP_CLEANUP_GROUP = VoidPtr
6334'typedef struct _TP_CLEANUP_GROUP TP_CLEANUP_GROUP, *PTP_CLEANUP_GROUP;
6335TypeDef PTP_CLEANUP_GROUP_CANCEL_CALLBACK = *Sub(ObjectContext As VoidPtr, CleanupContext As VoidPtr)
6336
6337TypeDef PACTIVATION_CONTEXT = VoidPtr
6338
6339Type TP_CALLBACK_ENVIRON
6340    Version As TP_VERSION
6341    Pool As PTP_POOL
6342    CleanupGroup As PTP_CLEANUP_GROUP
6343    CleanupGroupCancelCallback As PTP_CLEANUP_GROUP_CANCEL_CALLBACK
6344    RaceDll As VoidPtr
6345    ActivationContext As PACTIVATION_CONTEXT
6346    FinalizationCallback As PTP_SIMPLE_CALLBACK
6347'   Union
6348        Flags As DWord
6349'       Type
6350'           LongFunction :  1 As DWord
6351'           Private_     : 31 As DWord
6352'       } s;
6353'   End Union
6354End Type
6355TypeDef PTP_CALLBACK_ENVIRON = *TP_CALLBACK_ENVIRON
6356
6357Sub /*FORCEINLINE*/ TpInitializeCallbackEnviron(ByRef CallbackEnviron As TP_CALLBACK_ENVIRON)
6358    With CallbackEnviron
6359        Version = 1
6360        Pool = NULL
6361        CleanupGroup = NULL
6362        CleanupGroupCancelCallback = NULL
6363        RaceDll = NULL
6364        ActivationContext = NULL
6365        FinalizationCallback = NULL
6366        Flags = 0
6367    End With
6368End Sub
6369
6370Sub /*FORCEINLINE*/ TpSetCallbackThreadpool(ByRef CallbackEnviron As TP_CALLBACK_ENVIRON, Pool As PTP_POOL)
6371    CallbackEnviron.Pool = Pool
6372End Sub
6373
6374Sub /*FORCEINLINE*/ TpSetCallbackCleanupGroup(ByRef CallbackEnviron As TP_CALLBACK_ENVIRON, CleanupGroup As PTP_CLEANUP_GROUP, CleanupGroupCancelCallback As PTP_CLEANUP_GROUP_CANCEL_CALLBACK)
6375    CallbackEnviron->CleanupGroup = CleanupGroup
6376    CallbackEnviron->CleanupGroupCancelCallback = CleanupGroupCancelCallback
6377End Sub
6378
6379Sub /*FORCEINLINE*/ TpSetCallbackActivationContext(ByRef CallbackEnviron As TP_CALLBACK_ENVIRON, ActivationContext As PACTIVATION_CONTEXT)
6380    CallbackEnviron->ActivationContext = ActivationContext
6381End Sub
6382
6383Sub /*FORCEINLINE*/ TpSetCallbackNoActivationContext(ByRef CallbackEnviron As TP_CALLBACK_ENVIRON)
6384    CallbackEnviron->ActivationContext = (-1 As LONG_PTR) As PACTIVATION_CONTEXT
6385End Sub
6386
6387Sub /*FORCEINLINE*/ TpSetCallbackLongFunction(ByRef CallbackEnviron As TP_CALLBACK_ENVIRON)
6388    CallbackEnviron->Flags = 1 'u.s.LongFunction = 1
6389End Sub
6390
6391Sub /*FORCEINLINE*/ TpSetCallbackRaceWithDll(ByRef CallbackEnviron As TP_CALLBACK_ENVIRON, DllHandle As VoidPtr)
6392    CallbackEnviron->RaceDll = DllHandle
6393End Sub
6394
6395Sub /*FORCEINLINE*/ TpSetCallbackFinalizationCallback(ByRef CallbackEnviron As TP_CALLBACK_ENVIRON, FinalizationCallback As PTP_SIMPLE_CALLBACK)
6396    CallbackEnviron->FinalizationCallback = FinalizationCallback
6397End Sub
6398
6399Sub /*FORCEINLINE*/ TpDestroyCallbackEnviron(ByRef CallbackEnviron As TP_CALLBACK_ENVIRON)
6400'   UNREFERENCED_PARAMETER(CallbackEnviron)
6401End Sub
6402
6403TypeDef PTP_WORK = VoidPtr
6404'typedef struct _TP_WORK TP_WORK, *PTP_WORK;
6405
6406TypeDef PTP_WORK_CALLBACK = *Sub(Instance As PTP_CALLBACK_INSTANCE, Context As VoidPtr, Work As PTP_WORK)
6407
6408TypeDef PTP_TIMER = *VoidPtr
6409'typedef struct _TP_TIMER TP_TIMER, *PTP_TIMER;
6410
6411TypeDef PTP_TIMER_CALLBACK = *Sub(Instance As PTP_CALLBACK_INSTANCE, Context As VoidPtr, Timer As PTP_TIMER)
6412
6413TypeDef TP_WAIT_RESULT = DWord
6414
6415TypeDef PTP_WAIT = VoidPtr
6416'typedef struct _TP_WAIT TP_WAIT, *PTP_WAIT;
6417
6418TypeDef PTP_WAIT_CALLBACK = *Sub(Instance As PTP_CALLBACK_INSTANCE, Context As VoidPtr, Wait As PTP_WAIT, WaitResult As TP_WAIT_RESULT)
6419
6420TypeDef PTP_IO = VoidPtr
6421'typedef struct _TP_IO TP_IO, *PTP_IO;
6422
6423'NtCurrentTeb()
6424'GetCurrentFiber()
6425'GetFiberData ()
6426
6427'#if (_WIN32_WINNT > 0x0500) Or (_WIN32_FUSION >= 0x0100) Or ISOLATION_AWARE_ENABLED
6428Const ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION = 1
6429Const ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION = 2
6430Const ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION = 3
6431Const ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION = 4
6432Const ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION = 5
6433Const ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION = 6
6434Const ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION = 7
6435Const ACTIVATION_CONTEXT_SECTION_GLOBAL_OBJECT_RENAME_TABLE = 8
6436Const ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES = 9
6437Const ACTIVATION_CONTEXT_SECTION_APPLICATION_SETTINGS = 10
6438'#endif // winnt_only
6439
6440#endif
Note: See TracBrowser for help on using the repository browser.