[RTL] Fix GCC build.
[reactos.git] / sdk / include / ndk / ldrtypes.h
1 /*++ NDK Version: 0098
2
3 Copyright (c) Alex Ionescu. All rights reserved.
4
5 Header Name:
6
7 ldrtypes.h
8
9 Abstract:
10
11 Type definitions for the Loader.
12
13 Author:
14
15 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
16
17 --*/
18
19 #ifndef _LDRTYPES_H
20 #define _LDRTYPES_H
21
22 //
23 // Dependencies
24 //
25 #include <umtypes.h>
26
27 //
28 // Resource Type Levels
29 //
30 #define RESOURCE_TYPE_LEVEL 0
31 #define RESOURCE_NAME_LEVEL 1
32 #define RESOURCE_LANGUAGE_LEVEL 2
33 #define RESOURCE_DATA_LEVEL 3
34
35 //
36 // Loader Data Table Entry Flags
37 //
38 #define LDRP_STATIC_LINK 0x00000002
39 #define LDRP_IMAGE_DLL 0x00000004
40 #define LDRP_LOAD_IN_PROGRESS 0x00001000
41 #define LDRP_UNLOAD_IN_PROGRESS 0x00002000
42 #define LDRP_ENTRY_PROCESSED 0x00004000
43 #define LDRP_ENTRY_INSERTED 0x00008000
44 #define LDRP_CURRENT_LOAD 0x00010000
45 #define LDRP_FAILED_BUILTIN_LOAD 0x00020000
46 #define LDRP_DONT_CALL_FOR_THREADS 0x00040000
47 #define LDRP_PROCESS_ATTACH_CALLED 0x00080000
48 #define LDRP_DEBUG_SYMBOLS_LOADED 0x00100000
49 #define LDRP_IMAGE_NOT_AT_BASE 0x00200000
50 #define LDRP_COR_IMAGE 0x00400000
51 #define LDR_COR_OWNS_UNMAP 0x00800000
52 #define LDRP_SYSTEM_MAPPED 0x01000000
53 #define LDRP_IMAGE_VERIFYING 0x02000000
54 #define LDRP_DRIVER_DEPENDENT_DLL 0x04000000
55 #define LDRP_ENTRY_NATIVE 0x08000000
56 #define LDRP_REDIRECTED 0x10000000
57 #define LDRP_NON_PAGED_DEBUG_INFO 0x20000000
58 #define LDRP_MM_LOADED 0x40000000
59 #define LDRP_COMPAT_DATABASE_PROCESSED 0x80000000
60
61 //
62 // Dll Characteristics for LdrLoadDll
63 //
64 #define LDR_IGNORE_CODE_AUTHZ_LEVEL 0x00001000
65
66 //
67 // LdrAddRef Flags
68 //
69 #define LDR_ADDREF_DLL_PIN 0x00000001
70
71 //
72 // LdrLockLoaderLock Flags
73 //
74 #define LDR_LOCK_LOADER_LOCK_FLAG_RAISE_ON_ERRORS 0x00000001
75 #define LDR_LOCK_LOADER_LOCK_FLAG_TRY_ONLY 0x00000002
76
77 //
78 // LdrUnlockLoaderLock Flags
79 //
80 #define LDR_UNLOCK_LOADER_LOCK_FLAG_RAISE_ON_ERRORS 0x00000001
81
82 //
83 // LdrGetDllHandleEx Flags
84 //
85 #define LDR_GET_DLL_HANDLE_EX_UNCHANGED_REFCOUNT 0x00000001
86 #define LDR_GET_DLL_HANDLE_EX_PIN 0x00000002
87
88
89 #define LDR_LOCK_LOADER_LOCK_DISPOSITION_INVALID 0
90 #define LDR_LOCK_LOADER_LOCK_DISPOSITION_LOCK_ACQUIRED 1
91 #define LDR_LOCK_LOADER_LOCK_DISPOSITION_LOCK_NOT_ACQUIRED 2
92
93 //
94 // FIXME: THIS SHOULD *NOT* BE USED!
95 //
96 #define IMAGE_SCN_TYPE_NOLOAD 0x00000002
97
98 //
99 // Loader datafile/imagemapping macros
100 //
101 #define LDR_IS_DATAFILE(handle) (((ULONG_PTR)(handle)) & (ULONG_PTR)1)
102 #define LDR_IS_IMAGEMAPPING(handle) (((ULONG_PTR)(handle)) & (ULONG_PTR)2)
103 #define LDR_IS_RESOURCE(handle) (LDR_IS_IMAGEMAPPING(handle) || LDR_IS_DATAFILE(handle))
104
105 //
106 // Activation Context
107 //
108 typedef PVOID PACTIVATION_CONTEXT;
109
110 //
111 // Loader Data stored in the PEB
112 //
113 typedef struct _PEB_LDR_DATA
114 {
115 ULONG Length;
116 BOOLEAN Initialized;
117 PVOID SsHandle;
118 LIST_ENTRY InLoadOrderModuleList;
119 LIST_ENTRY InMemoryOrderModuleList;
120 LIST_ENTRY InInitializationOrderModuleList;
121 PVOID EntryInProgress;
122 #if (NTDDI_VERSION >= NTDDI_WIN7)
123 UCHAR ShutdownInProgress;
124 PVOID ShutdownThreadId;
125 #endif
126 } PEB_LDR_DATA, *PPEB_LDR_DATA;
127
128 //
129 // Loader Data Table Entry
130 //
131 // NOTE: The field 'InMemoryOrderLinks' MUST have that name.
132 // It's hard-coded into WinDbg for PEB dumping!
133 //
134 typedef struct _LDR_DATA_TABLE_ENTRY
135 {
136 LIST_ENTRY InLoadOrderLinks;
137 LIST_ENTRY InMemoryOrderLinks;
138 LIST_ENTRY InInitializationOrderLinks;
139 PVOID DllBase;
140 PVOID EntryPoint;
141 ULONG SizeOfImage;
142 UNICODE_STRING FullDllName;
143 UNICODE_STRING BaseDllName;
144 ULONG Flags;
145 USHORT LoadCount;
146 USHORT TlsIndex;
147 union
148 {
149 LIST_ENTRY HashLinks;
150 struct
151 {
152 PVOID SectionPointer;
153 ULONG CheckSum;
154 };
155 };
156 union
157 {
158 ULONG TimeDateStamp;
159 PVOID LoadedImports;
160 };
161 PACTIVATION_CONTEXT EntryPointActivationContext;
162 PVOID PatchInformation;
163 } LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY;
164
165 //
166 // Loaded Imports Reference Counting in Kernel
167 //
168 typedef struct _LOAD_IMPORTS
169 {
170 SIZE_T Count;
171 PLDR_DATA_TABLE_ENTRY Entry[1];
172 } LOAD_IMPORTS, *PLOAD_IMPORTS;
173
174 //
175 // Loader Resource Information
176 //
177 typedef struct _LDR_RESOURCE_INFO
178 {
179 ULONG_PTR Type;
180 ULONG_PTR Name;
181 ULONG_PTR Language;
182 } LDR_RESOURCE_INFO, *PLDR_RESOURCE_INFO;
183
184 typedef struct _LDR_ENUM_RESOURCE_INFO
185 {
186 ULONG_PTR Type;
187 ULONG_PTR Name;
188 ULONG_PTR Language;
189 PVOID Data;
190 SIZE_T Size;
191 ULONG_PTR Reserved;
192 } LDR_ENUM_RESOURCE_INFO, *PLDR_ENUM_RESOURCE_INFO;
193
194 //
195 // DLL Notifications
196 //
197 typedef struct _LDR_DLL_LOADED_NOTIFICATION_DATA
198 {
199 ULONG Flags;
200 PUNICODE_STRING FullDllName;
201 PUNICODE_STRING BaseDllName;
202 PVOID DllBase;
203 ULONG SizeOfImage;
204 } LDR_DLL_LOADED_NOTIFICATION_DATA, *PLDR_DLL_LOADED_NOTIFICATION_DATA;
205
206 typedef VOID
207 (NTAPI *PLDR_DLL_LOADED_NOTIFICATION_CALLBACK)(
208 _In_ BOOLEAN Type,
209 _In_ struct _LDR_DLL_LOADED_NOTIFICATION_DATA *Data
210 );
211
212 typedef struct _LDR_DLL_LOADED_NOTIFICATION_ENTRY
213 {
214 LIST_ENTRY NotificationListEntry;
215 PLDR_DLL_LOADED_NOTIFICATION_CALLBACK Callback;
216 } LDR_DLL_LOADED_NOTIFICATION_ENTRY, *PLDR_DLL_LOADED_NOTIFICATION_ENTRY;
217
218 //
219 // Alternate Resources Support
220 //
221 typedef struct _ALT_RESOURCE_MODULE
222 {
223 LANGID LangId;
224 PVOID ModuleBase;
225 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
226 PVOID ModuleManifest;
227 #endif
228 PVOID AlternateModule;
229 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
230 HANDLE AlternateFileHandle;
231 ULONG ModuleCheckSum;
232 ULONG ErrorCode;
233 #endif
234 } ALT_RESOURCE_MODULE, *PALT_RESOURCE_MODULE;
235
236 //
237 // Callback function for LdrEnumerateLoadedModules
238 //
239 typedef VOID (NTAPI LDR_ENUM_CALLBACK)(_In_ PLDR_DATA_TABLE_ENTRY ModuleInformation, _In_ PVOID Parameter, _Out_ BOOLEAN *Stop);
240 typedef LDR_ENUM_CALLBACK *PLDR_ENUM_CALLBACK;
241
242 //
243 // Manifest prober routine set via LdrSetDllManifestProber
244 //
245 typedef NTSTATUS (NTAPI LDR_MANIFEST_PROBER_ROUTINE)(_In_ PVOID DllHandle, _In_ PCWSTR FullDllName, _Out_ PVOID *ActCtx);
246 typedef LDR_MANIFEST_PROBER_ROUTINE *PLDR_MANIFEST_PROBER_ROUTINE;
247
248 //
249 // DLL Main Routine
250 //
251 typedef BOOLEAN
252 (NTAPI *PDLL_INIT_ROUTINE)(
253 _In_ PVOID DllHandle,
254 _In_ ULONG Reason,
255 _In_opt_ PCONTEXT Context
256 );
257
258 #endif