xref: /reactos/dll/ntdll/include/ntdllp.h (revision 8540ab04)
1 /*
2  * COPYRIGHT:       See COPYING in the top level directory
3  * PROJECT:         ReactOS System Libraries
4  * FILE:            dll/ntdll/include/ntdllp.h
5  * PURPOSE:         Native Library Internal Header
6  * PROGRAMMER:      Alex Ionescu (alex@relsoft.net)
7  */
8 
9 #pragma once
10 
11 #define LDR_HASH_TABLE_ENTRIES 32
12 #define LDR_GET_HASH_ENTRY(x) (RtlUpcaseUnicodeChar((x)) & (LDR_HASH_TABLE_ENTRIES - 1))
13 
14 /* LdrpUpdateLoadCount2 flags */
15 #define LDRP_UPDATE_REFCOUNT   0x01
16 #define LDRP_UPDATE_DEREFCOUNT 0x02
17 #define LDRP_UPDATE_PIN        0x03
18 
19 /* Loader flags */
20 #define IMAGE_LOADER_FLAGS_COMPLUS 0x00000001
21 #define IMAGE_LOADER_FLAGS_SYSTEM_GLOBAL 0x01000000
22 
23 /* Page heap flags */
24 #define DPH_FLAG_DLL_NOTIFY 0x40
25 
26 typedef struct _LDRP_TLS_DATA
27 {
28     LIST_ENTRY TlsLinks;
29     IMAGE_TLS_DIRECTORY TlsDirectory;
30 } LDRP_TLS_DATA, *PLDRP_TLS_DATA;
31 
32 /* Global data */
33 extern RTL_CRITICAL_SECTION LdrpLoaderLock;
34 extern BOOLEAN LdrpInLdrInit;
35 extern LIST_ENTRY LdrpHashTable[LDR_HASH_TABLE_ENTRIES];
36 extern BOOLEAN ShowSnaps;
37 extern UNICODE_STRING LdrpDefaultPath;
38 extern HANDLE LdrpKnownDllObjectDirectory;
39 extern ULONG LdrpNumberOfProcessors;
40 extern ULONG LdrpFatalHardErrorCount;
41 extern PUNICODE_STRING LdrpTopLevelDllBeingLoaded;
42 extern PLDR_DATA_TABLE_ENTRY LdrpCurrentDllInitializer;
43 extern UNICODE_STRING LdrApiDefaultExtension;
44 extern BOOLEAN LdrpLdrDatabaseIsSetup;
45 extern ULONG LdrpActiveUnloadCount;
46 extern BOOLEAN LdrpShutdownInProgress;
47 extern UNICODE_STRING LdrpKnownDllPath;
48 extern PLDR_DATA_TABLE_ENTRY LdrpGetModuleHandleCache, LdrpLoadedDllHandleCache;
49 extern BOOLEAN RtlpPageHeapEnabled;
50 extern ULONG RtlpDphGlobalFlags;
51 extern BOOLEAN g_ShimsEnabled;
52 extern PVOID g_pShimEngineModule;
53 extern PVOID g_pfnSE_DllLoaded;
54 extern PVOID g_pfnSE_DllUnloaded;
55 extern PVOID g_pfnSE_InstallBeforeInit;
56 extern PVOID g_pfnSE_InstallAfterInit;
57 extern PVOID g_pfnSE_ProcessDying;
58 
59 /* ldrinit.c */
60 NTSTATUS NTAPI LdrpRunInitializeRoutines(IN PCONTEXT Context OPTIONAL);
61 VOID NTAPI LdrpInitializeThread(IN PCONTEXT Context);
62 NTSTATUS NTAPI LdrpInitializeTls(VOID);
63 NTSTATUS NTAPI LdrpAllocateTls(VOID);
64 VOID NTAPI LdrpFreeTls(VOID);
65 VOID NTAPI LdrpCallTlsInitializers(IN PLDR_DATA_TABLE_ENTRY LdrEntry, IN ULONG Reason);
66 BOOLEAN NTAPI LdrpCallInitRoutine(IN PDLL_INIT_ROUTINE EntryPoint, IN PVOID BaseAddress, IN ULONG Reason, IN PVOID Context);
67 NTSTATUS NTAPI LdrpInitializeProcess(IN PCONTEXT Context, IN PVOID SystemArgument1);
68 VOID NTAPI LdrpInitFailure(NTSTATUS Status);
69 VOID NTAPI LdrpValidateImageForMp(IN PLDR_DATA_TABLE_ENTRY LdrDataTableEntry);
70 VOID NTAPI LdrpEnsureLoaderLockIsHeld(VOID);
71 
72 /* ldrpe.c */
73 NTSTATUS
74 NTAPI
75 LdrpSnapThunk(IN PVOID ExportBase,
76               IN PVOID ImportBase,
77               IN PIMAGE_THUNK_DATA OriginalThunk,
78               IN OUT PIMAGE_THUNK_DATA Thunk,
79               IN PIMAGE_EXPORT_DIRECTORY ExportEntry,
80               IN ULONG ExportSize,
81               IN BOOLEAN Static,
82               IN LPSTR DllName);
83 
84 NTSTATUS NTAPI
85 LdrpWalkImportDescriptor(IN LPWSTR DllPath OPTIONAL,
86                          IN PLDR_DATA_TABLE_ENTRY LdrEntry);
87 
88 
89 /* ldrutils.c */
90 NTSTATUS NTAPI
91 LdrpGetProcedureAddress(IN PVOID BaseAddress,
92                         IN PANSI_STRING Name,
93                         IN ULONG Ordinal,
94                         OUT PVOID *ProcedureAddress,
95                         IN BOOLEAN ExecuteInit);
96 
97 PLDR_DATA_TABLE_ENTRY NTAPI
98 LdrpAllocateDataTableEntry(IN PVOID BaseAddress);
99 
100 VOID NTAPI
101 LdrpInsertMemoryTableEntry(IN PLDR_DATA_TABLE_ENTRY LdrEntry);
102 
103 NTSTATUS NTAPI
104 LdrpLoadDll(IN BOOLEAN Redirected,
105             IN PWSTR DllPath OPTIONAL,
106             IN PULONG DllCharacteristics OPTIONAL,
107             IN PUNICODE_STRING DllName,
108             OUT PVOID *BaseAddress,
109             IN BOOLEAN CallInit);
110 
111 VOID NTAPI
112 LdrpUpdateLoadCount2(IN PLDR_DATA_TABLE_ENTRY LdrEntry,
113                      IN ULONG Flags);
114 
115 ULONG NTAPI
116 LdrpClearLoadInProgress(VOID);
117 
118 NTSTATUS
119 NTAPI
120 LdrpSetProtection(PVOID ViewBase,
121                   BOOLEAN Restore);
122 
123 BOOLEAN
124 NTAPI
125 LdrpCheckForLoadedDllHandle(IN PVOID Base,
126                             OUT PLDR_DATA_TABLE_ENTRY *LdrEntry);
127 
128 BOOLEAN NTAPI
129 LdrpCheckForLoadedDll(IN PWSTR DllPath,
130                       IN PUNICODE_STRING DllName,
131                       IN BOOLEAN Flag,
132                       IN BOOLEAN RedirectedDll,
133                       OUT PLDR_DATA_TABLE_ENTRY *LdrEntry);
134 
135 NTSTATUS NTAPI
136 LdrpMapDll(IN PWSTR SearchPath OPTIONAL,
137            IN PWSTR DllPath2,
138            IN PWSTR DllName OPTIONAL,
139            IN PULONG DllCharacteristics,
140            IN BOOLEAN Static,
141            IN BOOLEAN Redirect,
142            OUT PLDR_DATA_TABLE_ENTRY *DataTableEntry);
143 
144 PVOID NTAPI
145 LdrpFetchAddressOfEntryPoint(PVOID ImageBase);
146 
147 VOID NTAPI
148 LdrpFreeUnicodeString(PUNICODE_STRING String);
149 
150 VOID NTAPI
151 LdrpGetShimEngineInterface(VOID);
152 
153 VOID
154 NTAPI
155 LdrpLoadShimEngine(IN PWSTR ImageName,
156                    IN PUNICODE_STRING ProcessImage,
157                    IN PVOID pShimData);
158 
159 VOID NTAPI
160 LdrpUnloadShimEngine(VOID);
161 
162 /* verifier.c */
163 
164 NTSTATUS NTAPI
165 LdrpInitializeApplicationVerifierPackage(IN HANDLE KeyHandle,
166                                          IN PPEB Peb,
167                                          IN BOOLEAN SystemWide,
168                                          IN BOOLEAN ReadAdvancedOptions);
169 
170 NTSTATUS NTAPI
171 AVrfInitializeVerifier(VOID);
172 
173 VOID NTAPI
174 AVrfDllLoadNotification(IN PLDR_DATA_TABLE_ENTRY LdrEntry);
175 
176 VOID NTAPI
177 AVrfDllUnloadNotification(IN PLDR_DATA_TABLE_ENTRY LdrEntry);
178 
179 VOID NTAPI
180 AVrfPageHeapDllNotification(IN PLDR_DATA_TABLE_ENTRY LdrEntry);
181 
182 
183 /* FIXME: Cleanup this mess */
184 typedef NTSTATUS (NTAPI *PEPFUNC)(PPEB);
185 NTSTATUS LdrMapSections(HANDLE ProcessHandle,
186                         PVOID ImageBase,
187                         HANDLE SectionHandle,
188                         PIMAGE_NT_HEADERS NTHeaders);
189 NTSTATUS LdrMapNTDllForProcess(HANDLE ProcessHandle,
190                                PHANDLE NTDllSectionHandle);
191 ULONG
192 LdrpGetResidentSize(PIMAGE_NT_HEADERS NTHeaders);
193 
194 NTSTATUS
195 NTAPI
196 LdrpLoadImportModule(IN PWSTR DllPath OPTIONAL,
197                      IN LPSTR ImportName,
198                      OUT PLDR_DATA_TABLE_ENTRY *DataTableEntry,
199                      OUT PBOOLEAN Existing);
200 
201 VOID
202 NTAPI
203 LdrpFinalizeAndDeallocateDataTableEntry(IN PLDR_DATA_TABLE_ENTRY Entry);
204 
205 /* EOF */
206