- Remove several assumptions that the default calling convention is stdcall (it isn...
[reactos.git] / reactos / 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 0x08800000
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_PIN_MODULE 0x00000001
70
71 //
72 // LdrLockLoaderLock Flags
73 //
74 #define LDR_LOCK_LOADER_LOCK_FLAG_RAISE_STATUS 0x00000001
75 #define LDR_LOCK_LOADER_LOCK_FLAG_TRY_ONLY 0x00000002
76
77 //
78 // FIXME: THIS SHOULD *NOT* BE USED!
79 //
80 #define IMAGE_SCN_TYPE_NOLOAD 0x00000002
81
82 //
83 // Loader Data stored in the PEB
84 //
85 typedef struct _PEB_LDR_DATA
86 {
87 ULONG Length;
88 BOOLEAN Initialized;
89 PVOID SsHandle;
90 LIST_ENTRY InLoadOrderModuleList;
91 LIST_ENTRY InMemoryOrderModuleList;
92 LIST_ENTRY InInitializationOrderModuleList;
93 PVOID EntryInProgress;
94 } PEB_LDR_DATA, *PPEB_LDR_DATA;
95
96 //
97 // Loader Data Table Entry
98 //
99 typedef struct _LDR_DATA_TABLE_ENTRY
100 {
101 LIST_ENTRY InLoadOrderLinks;
102 LIST_ENTRY InMemoryOrderModuleList;
103 LIST_ENTRY InInitializationOrderModuleList;
104 PVOID DllBase;
105 PVOID EntryPoint;
106 ULONG SizeOfImage;
107 UNICODE_STRING FullDllName;
108 UNICODE_STRING BaseDllName;
109 ULONG Flags;
110 USHORT LoadCount;
111 USHORT TlsIndex;
112 union
113 {
114 LIST_ENTRY HashLinks;
115 PVOID SectionPointer;
116 };
117 ULONG CheckSum;
118 union
119 {
120 ULONG TimeDateStamp;
121 PVOID LoadedImports;
122 };
123 PVOID EntryPointActivationContext;
124 PVOID PatchInformation;
125 } LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY;
126
127 //
128 // Loaded Imports Reference Counting in Kernel
129 //
130 typedef struct _LOAD_IMPORTS
131 {
132 SIZE_T Count;
133 PLDR_DATA_TABLE_ENTRY Entry[1];
134 } LOAD_IMPORTS, *PLOAD_IMPORTS;
135
136 //
137 // Loader Resource Information
138 //
139 typedef struct _LDR_RESOURCE_INFO
140 {
141 ULONG_PTR Type;
142 ULONG_PTR Name;
143 ULONG Language;
144 } LDR_RESOURCE_INFO, *PLDR_RESOURCE_INFO;
145
146 //
147 // DLL Notifications
148 //
149 typedef struct _LDR_DLL_LOADED_NOTIFICATION_DATA
150 {
151 ULONG Flags;
152 PUNICODE_STRING FullDllName;
153 PUNICODE_STRING BaseDllName;
154 PVOID DllBase;
155 ULONG SizeOfImage;
156 } LDR_DLL_LOADED_NOTIFICATION_DATA, *PLDR_DLL_LOADED_NOTIFICATION_DATA;
157
158 typedef VOID
159 (NTAPI *PLDR_DLL_LOADED_NOTIFICATION_CALLBACK)(
160 IN BOOLEAN Type,
161 IN struct _LDR_DLL_LOADED_NOTIFICATION_DATA *Data
162 );
163
164 typedef struct _LDR_DLL_LOADED_NOTIFICATION_ENTRY
165 {
166 LIST_ENTRY NotificationListEntry;
167 PLDR_DLL_LOADED_NOTIFICATION_CALLBACK Callback;
168 } LDR_DLL_LOADED_NOTIFICATION_ENTRY, *PLDR_DLL_LOADED_NOTIFICATION_ENTRY;
169
170 //
171 // Alternate Resources Support
172 //
173 typedef struct _ALT_RESOURCE_MODULE
174 {
175 LANGID LangId;
176 PVOID ModuleBase;
177 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
178 PVOID ModuleManifest;
179 #endif
180 PVOID AlternateModule;
181 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
182 HANDLE AlternateFileHandle;
183 ULONG ModuleCheckSum;
184 ULONG ErrorCode;
185 #endif
186 } ALT_RESOURCE_MODULE, *PALT_RESOURCE_MODULE;
187
188 #endif