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)
11 #define LDR_HASH_TABLE_ENTRIES 32
12 #define LDR_GET_HASH_ENTRY(x) (RtlUpcaseUnicodeChar((x)) & (LDR_HASH_TABLE_ENTRIES - 1))
14 /* LdrpUpdateLoadCount2 flags */
15 #define LDRP_UPDATE_REFCOUNT 0x01
16 #define LDRP_UPDATE_DEREFCOUNT 0x02
17 #define LDRP_UPDATE_PIN 0x03
20 #define IMAGE_LOADER_FLAGS_COMPLUS 0x00000001
21 #define IMAGE_LOADER_FLAGS_SYSTEM_GLOBAL 0x01000000
24 #define DPH_FLAG_DLL_NOTIFY 0x40
26 typedef struct _LDRP_TLS_DATA
29 IMAGE_TLS_DIRECTORY TlsDirectory
;
30 } LDRP_TLS_DATA
, *PLDRP_TLS_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
;
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
);
75 LdrpSnapThunk(IN PVOID ExportBase
,
77 IN PIMAGE_THUNK_DATA OriginalThunk
,
78 IN OUT PIMAGE_THUNK_DATA Thunk
,
79 IN PIMAGE_EXPORT_DIRECTORY ExportEntry
,
85 LdrpWalkImportDescriptor(IN LPWSTR DllPath OPTIONAL
,
86 IN PLDR_DATA_TABLE_ENTRY LdrEntry
);
91 LdrpGetProcedureAddress(IN PVOID BaseAddress
,
94 OUT PVOID
*ProcedureAddress
,
95 IN BOOLEAN ExecuteInit
);
97 PLDR_DATA_TABLE_ENTRY NTAPI
98 LdrpAllocateDataTableEntry(IN PVOID BaseAddress
);
101 LdrpInsertMemoryTableEntry(IN PLDR_DATA_TABLE_ENTRY LdrEntry
);
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
);
112 LdrpUpdateLoadCount2(IN PLDR_DATA_TABLE_ENTRY LdrEntry
,
116 LdrpClearLoadInProgress(VOID
);
120 LdrpSetProtection(PVOID ViewBase
,
125 LdrpCheckForLoadedDllHandle(IN PVOID Base
,
126 OUT PLDR_DATA_TABLE_ENTRY
*LdrEntry
);
129 LdrpCheckForLoadedDll(IN PWSTR DllPath
,
130 IN PUNICODE_STRING DllName
,
132 IN BOOLEAN RedirectedDll
,
133 OUT PLDR_DATA_TABLE_ENTRY
*LdrEntry
);
136 LdrpMapDll(IN PWSTR SearchPath OPTIONAL
,
138 IN PWSTR DllName OPTIONAL
,
139 IN PULONG DllCharacteristics
,
142 OUT PLDR_DATA_TABLE_ENTRY
*DataTableEntry
);
145 LdrpFetchAddressOfEntryPoint(PVOID ImageBase
);
148 LdrpFreeUnicodeString(PUNICODE_STRING String
);
151 LdrpGetShimEngineInterface(VOID
);
155 LdrpLoadShimEngine(IN PWSTR ImageName
,
156 IN PUNICODE_STRING ProcessImage
,
160 LdrpUnloadShimEngine(VOID
);
165 LdrpInitializeApplicationVerifierPackage(IN HANDLE KeyHandle
,
167 IN BOOLEAN SystemWide
,
168 IN BOOLEAN ReadAdvancedOptions
);
171 AVrfInitializeVerifier(VOID
);
174 AVrfDllLoadNotification(IN PLDR_DATA_TABLE_ENTRY LdrEntry
);
177 AVrfDllUnloadNotification(IN PLDR_DATA_TABLE_ENTRY LdrEntry
);
180 AVrfPageHeapDllNotification(IN PLDR_DATA_TABLE_ENTRY LdrEntry
);
183 /* FIXME: Cleanup this mess */
184 typedef NTSTATUS (NTAPI
*PEPFUNC
)(PPEB
);
185 NTSTATUS
LdrMapSections(HANDLE ProcessHandle
,
187 HANDLE SectionHandle
,
188 PIMAGE_NT_HEADERS NTHeaders
);
189 NTSTATUS
LdrMapNTDllForProcess(HANDLE ProcessHandle
,
190 PHANDLE NTDllSectionHandle
);
192 LdrpGetResidentSize(PIMAGE_NT_HEADERS NTHeaders
);
196 LdrpLoadImportModule(IN PWSTR DllPath OPTIONAL
,
198 OUT PLDR_DATA_TABLE_ENTRY
*DataTableEntry
,
199 OUT PBOOLEAN Existing
);
203 LdrpFinalizeAndDeallocateDataTableEntry(IN PLDR_DATA_TABLE_ENTRY Entry
);