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