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)
9 /* INCLUDES ******************************************************************/
11 #define LDR_HASH_TABLE_ENTRIES 32
13 /* LdrpUpdateLoadCount2 flags */
14 #define LDRP_UPDATE_REFCOUNT 0x01
15 #define LDRP_UPDATE_DEREFCOUNT 0x02
16 #define LDRP_UPDATE_PIN 0x03
19 #define IMAGE_LOADER_FLAGS_COMPLUS 0x00000001
20 #define IMAGE_LOADER_FLAGS_SYSTEM_GLOBAL 0x01000000
22 typedef struct _LDRP_TLS_DATA
25 IMAGE_TLS_DIRECTORY TlsDirectory
;
26 } LDRP_TLS_DATA
, *PLDRP_TLS_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
;
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
);
61 LdrpSnapThunk(IN PVOID ExportBase
,
63 IN PIMAGE_THUNK_DATA OriginalThunk
,
64 IN OUT PIMAGE_THUNK_DATA Thunk
,
65 IN PIMAGE_EXPORT_DIRECTORY ExportEntry
,
71 LdrpWalkImportDescriptor(IN LPWSTR DllPath OPTIONAL
,
72 IN PLDR_DATA_TABLE_ENTRY LdrEntry
);
77 LdrpGetProcedureAddress(IN PVOID BaseAddress
,
80 OUT PVOID
*ProcedureAddress
,
81 IN BOOLEAN ExecuteInit
);
83 PLDR_DATA_TABLE_ENTRY NTAPI
84 LdrpAllocateDataTableEntry(IN PVOID BaseAddress
);
87 LdrpInsertMemoryTableEntry(IN PLDR_DATA_TABLE_ENTRY LdrEntry
);
90 LdrpLoadDll(IN BOOLEAN Redirected
,
91 IN PWSTR DllPath OPTIONAL
,
92 IN PULONG DllCharacteristics OPTIONAL
,
93 IN PUNICODE_STRING DllName
,
94 OUT PVOID
*BaseAddress
,
98 LdrpUpdateLoadCount2(IN PLDR_DATA_TABLE_ENTRY LdrEntry
,
102 LdrpClearLoadInProgress();
106 LdrpSetProtection(PVOID ViewBase
,
111 LdrpCheckForLoadedDllHandle(IN PVOID Base
,
112 OUT PLDR_DATA_TABLE_ENTRY
*LdrEntry
);
115 LdrpCheckForLoadedDll(IN PWSTR DllPath
,
116 IN PUNICODE_STRING DllName
,
118 IN BOOLEAN RedirectedDll
,
119 OUT PLDR_DATA_TABLE_ENTRY
*LdrEntry
);
122 LdrpMapDll(IN PWSTR SearchPath OPTIONAL
,
124 IN PWSTR DllName OPTIONAL
,
125 IN PULONG DllCharacteristics
,
128 OUT PLDR_DATA_TABLE_ENTRY
*DataTableEntry
);
131 LdrpFetchAddressOfEntryPoint(PVOID ImageBase
);
134 LdrpFreeUnicodeString(PUNICODE_STRING String
);
137 /* FIXME: Cleanup this mess */
138 typedef NTSTATUS (NTAPI
*PEPFUNC
)(PPEB
);
139 NTSTATUS
LdrMapSections(HANDLE ProcessHandle
,
141 HANDLE SectionHandle
,
142 PIMAGE_NT_HEADERS NTHeaders
);
143 NTSTATUS
LdrMapNTDllForProcess(HANDLE ProcessHandle
,
144 PHANDLE NTDllSectionHandle
);
146 LdrpGetResidentSize(PIMAGE_NT_HEADERS NTHeaders
);
150 LdrpLoadImportModule(IN PWSTR DllPath OPTIONAL
,
153 OUT PLDR_DATA_TABLE_ENTRY
*DataTableEntry
,
154 OUT PBOOLEAN Existing
);
156 extern HANDLE WindowsApiPort
;