3 Copyright (c) Alex Ionescu. All rights reserved.
11 Type definitions for the Loader.
15 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
28 // Resource Type Levels
30 #define RESOURCE_TYPE_LEVEL 0
31 #define RESOURCE_NAME_LEVEL 1
32 #define RESOURCE_LANGUAGE_LEVEL 2
33 #define RESOURCE_DATA_LEVEL 3
36 // Loader Data Table Entry Flags
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
62 // Dll Characteristics for LdrLoadDll
64 #define LDR_IGNORE_CODE_AUTHZ_LEVEL 0x00001000
69 #define LDR_PIN_MODULE 0x00000001
72 // LdrLockLoaderLock Flags
74 #define LDR_LOCK_LOADER_LOCK_FLAG_RAISE_STATUS 0x00000001
75 #define LDR_LOCK_LOADER_LOCK_FLAG_TRY_ONLY 0x00000002
78 // FIXME: THIS SHOULD *NOT* BE USED!
80 #define IMAGE_SCN_TYPE_NOLOAD 0x00000002
83 // Loader Data stored in the PEB
85 typedef struct _PEB_LDR_DATA
90 LIST_ENTRY InLoadOrderModuleList
;
91 LIST_ENTRY InMemoryOrderModuleList
;
92 LIST_ENTRY InInitializationOrderModuleList
;
93 PVOID EntryInProgress
;
94 } PEB_LDR_DATA
, *PPEB_LDR_DATA
;
97 // Loader Data Table Entry
99 typedef struct _LDR_DATA_TABLE_ENTRY
101 LIST_ENTRY InLoadOrderLinks
;
102 LIST_ENTRY InMemoryOrderModuleList
;
103 LIST_ENTRY InInitializationOrderModuleList
;
107 UNICODE_STRING FullDllName
;
108 UNICODE_STRING BaseDllName
;
114 LIST_ENTRY HashLinks
;
117 PVOID SectionPointer
;
126 PVOID EntryPointActivationContext
;
127 PVOID PatchInformation
;
128 } LDR_DATA_TABLE_ENTRY
, *PLDR_DATA_TABLE_ENTRY
;
131 // Loaded Imports Reference Counting in Kernel
133 typedef struct _LOAD_IMPORTS
136 PLDR_DATA_TABLE_ENTRY Entry
[1];
137 } LOAD_IMPORTS
, *PLOAD_IMPORTS
;
140 // Loader Resource Information
142 typedef struct _LDR_RESOURCE_INFO
147 } LDR_RESOURCE_INFO
, *PLDR_RESOURCE_INFO
;
152 typedef struct _LDR_DLL_LOADED_NOTIFICATION_DATA
155 PUNICODE_STRING FullDllName
;
156 PUNICODE_STRING BaseDllName
;
159 } LDR_DLL_LOADED_NOTIFICATION_DATA
, *PLDR_DLL_LOADED_NOTIFICATION_DATA
;
162 (NTAPI
*PLDR_DLL_LOADED_NOTIFICATION_CALLBACK
)(
164 IN
struct _LDR_DLL_LOADED_NOTIFICATION_DATA
*Data
167 typedef struct _LDR_DLL_LOADED_NOTIFICATION_ENTRY
169 LIST_ENTRY NotificationListEntry
;
170 PLDR_DLL_LOADED_NOTIFICATION_CALLBACK Callback
;
171 } LDR_DLL_LOADED_NOTIFICATION_ENTRY
, *PLDR_DLL_LOADED_NOTIFICATION_ENTRY
;
174 // Alternate Resources Support
176 typedef struct _ALT_RESOURCE_MODULE
180 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
181 PVOID ModuleManifest
;
183 PVOID AlternateModule
;
184 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
185 HANDLE AlternateFileHandle
;
186 ULONG ModuleCheckSum
;
189 } ALT_RESOURCE_MODULE
, *PALT_RESOURCE_MODULE
;