[NTDLL]: More attempts at fixing up the loader, this time in the PE side of things.
[reactos.git] / reactos / dll / ntdll / include / ntdllp.h
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 Libary Internal Header
6 * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
7 */
8
9 /* INCLUDES ******************************************************************/
10
11 #define LDR_HASH_TABLE_ENTRIES 32
12
13 /* LdrpUpdateLoadCount2 flags */
14 #define LDRP_UPDATE_REFCOUNT 0x01
15 #define LDRP_UPDATE_DEREFCOUNT 0x02
16 #define LDRP_UPDATE_PIN 0x03
17
18 /* Loader flags */
19 #define IMAGE_LOADER_FLAGS_COMPLUS 0x00000001
20 #define IMAGE_LOADER_FLAGS_SYSTEM_GLOBAL 0x01000000
21
22 typedef struct _LDRP_TLS_DATA
23 {
24 LIST_ENTRY TlsLinks;
25 IMAGE_TLS_DIRECTORY TlsDirectory;
26 } LDRP_TLS_DATA, *PLDRP_TLS_DATA;
27
28 /* Global data */
29 extern RTL_CRITICAL_SECTION LdrpLoaderLock;
30 extern BOOLEAN LdrpInLdrInit;
31 extern LIST_ENTRY LdrpHashTable[LDR_HASH_TABLE_ENTRIES];
32 extern BOOLEAN ShowSnaps;
33 extern UNICODE_STRING LdrpDefaultPath;
34 extern HANDLE LdrpKnownDllObjectDirectory;
35 extern ULONG LdrpNumberOfProcessors;
36 extern ULONG LdrpFatalHardErrorCount;
37 extern PUNICODE_STRING LdrpTopLevelDllBeingLoaded;
38 extern PLDR_DATA_TABLE_ENTRY LdrpCurrentDllInitializer;
39 extern UNICODE_STRING LdrApiDefaultExtension;
40 extern BOOLEAN LdrpLdrDatabaseIsSetup;
41 extern ULONG LdrpActiveUnloadCount;
42 extern BOOLEAN LdrpShutdownInProgress;
43 extern UNICODE_STRING LdrpKnownDllPath;
44 extern PLDR_DATA_TABLE_ENTRY LdrpGetModuleHandleCache;
45
46 /* ldrinit.c */
47 NTSTATUS NTAPI LdrpRunInitializeRoutines(IN PCONTEXT Context OPTIONAL);
48 VOID NTAPI LdrpInitializeThread(IN PCONTEXT Context);
49 NTSTATUS NTAPI LdrpInitializeTls(VOID);
50 NTSTATUS NTAPI LdrpAllocateTls(VOID);
51 VOID NTAPI LdrpFreeTls(VOID);
52 VOID NTAPI LdrpCallTlsInitializers(PVOID BaseAddress, ULONG Reason);
53 BOOLEAN NTAPI LdrpCallInitRoutine(PDLL_INIT_ROUTINE EntryPoint, PVOID BaseAddress, ULONG Reason, PVOID Context);
54 NTSTATUS NTAPI LdrpInitializeProcess(PCONTEXT Context, PVOID SystemArgument1);
55 VOID NTAPI LdrpInitFailure(NTSTATUS Status);
56 VOID NTAPI LdrpValidateImageForMp(IN PLDR_DATA_TABLE_ENTRY LdrDataTableEntry);
57
58 /* ldrpe.c */
59 NTSTATUS
60 NTAPI
61 LdrpSnapThunk(IN PVOID ExportBase,
62 IN PVOID ImportBase,
63 IN PIMAGE_THUNK_DATA OriginalThunk,
64 IN OUT PIMAGE_THUNK_DATA Thunk,
65 IN PIMAGE_EXPORT_DIRECTORY ExportEntry,
66 IN ULONG ExportSize,
67 IN BOOLEAN Static,
68 IN LPSTR DllName);
69
70 NTSTATUS NTAPI
71 LdrpWalkImportDescriptor(IN LPWSTR DllPath OPTIONAL,
72 IN PLDR_DATA_TABLE_ENTRY LdrEntry);
73
74
75 /* ldrutils.c */
76 NTSTATUS NTAPI
77 LdrpGetProcedureAddress(IN PVOID BaseAddress,
78 IN PANSI_STRING Name,
79 IN ULONG Ordinal,
80 OUT PVOID *ProcedureAddress,
81 IN BOOLEAN ExecuteInit);
82
83 PLDR_DATA_TABLE_ENTRY NTAPI
84 LdrpAllocateDataTableEntry(IN PVOID BaseAddress);
85
86 VOID NTAPI
87 LdrpInsertMemoryTableEntry(IN PLDR_DATA_TABLE_ENTRY LdrEntry);
88
89 NTSTATUS NTAPI
90 LdrpLoadDll(IN BOOLEAN Redirected,
91 IN PWSTR DllPath OPTIONAL,
92 IN PULONG DllCharacteristics OPTIONAL,
93 IN PUNICODE_STRING DllName,
94 OUT PVOID *BaseAddress,
95 IN BOOLEAN CallInit);
96
97 VOID NTAPI
98 LdrpUpdateLoadCount2(IN PLDR_DATA_TABLE_ENTRY LdrEntry,
99 IN ULONG Flags);
100
101 ULONG NTAPI
102 LdrpClearLoadInProgress();
103
104 NTSTATUS
105 NTAPI
106 LdrpSetProtection(PVOID ViewBase,
107 BOOLEAN Restore);
108
109 BOOLEAN
110 NTAPI
111 LdrpCheckForLoadedDllHandle(IN PVOID Base,
112 OUT PLDR_DATA_TABLE_ENTRY *LdrEntry);
113
114 BOOLEAN NTAPI
115 LdrpCheckForLoadedDll(IN PWSTR DllPath,
116 IN PUNICODE_STRING DllName,
117 IN BOOLEAN Flag,
118 IN BOOLEAN RedirectedDll,
119 OUT PLDR_DATA_TABLE_ENTRY *LdrEntry);
120
121 NTSTATUS NTAPI
122 LdrpMapDll(IN PWSTR SearchPath OPTIONAL,
123 IN PWSTR DllPath2,
124 IN PWSTR DllName OPTIONAL,
125 IN PULONG DllCharacteristics,
126 IN BOOLEAN Static,
127 IN BOOLEAN Redirect,
128 OUT PLDR_DATA_TABLE_ENTRY *DataTableEntry);
129
130 PVOID NTAPI
131 LdrpFetchAddressOfEntryPoint(PVOID ImageBase);
132
133 VOID NTAPI
134 LdrpFreeUnicodeString(PUNICODE_STRING String);
135
136
137 /* FIXME: Cleanup this mess */
138 typedef NTSTATUS (NTAPI *PEPFUNC)(PPEB);
139 NTSTATUS LdrMapSections(HANDLE ProcessHandle,
140 PVOID ImageBase,
141 HANDLE SectionHandle,
142 PIMAGE_NT_HEADERS NTHeaders);
143 NTSTATUS LdrMapNTDllForProcess(HANDLE ProcessHandle,
144 PHANDLE NTDllSectionHandle);
145 ULONG
146 LdrpGetResidentSize(PIMAGE_NT_HEADERS NTHeaders);
147
148 NTSTATUS
149 NTAPI
150 LdrpLoadImportModule(IN PWSTR DllPath OPTIONAL,
151 IN LPSTR ImportName,
152 IN PVOID DllBase,
153 OUT PLDR_DATA_TABLE_ENTRY *DataTableEntry,
154 OUT PBOOLEAN Existing);
155
156 extern HANDLE WindowsApiPort;
157
158 /* EOF */