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
18 typedef struct _LDRP_TLS_DATA
21 IMAGE_TLS_DIRECTORY TlsDirectory
;
22 } LDRP_TLS_DATA
, *PLDRP_TLS_DATA
;
25 (NTAPI
*PDLLMAIN_FUNC
)(HANDLE hInst
,
26 ULONG ul_reason_for_call
,
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
;
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
LdrpTlsCallback(PVOID BaseAddress
, ULONG Reason
);
54 BOOLEAN NTAPI
LdrpCallDllEntry(PDLLMAIN_FUNC 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
);
62 LdrpSnapThunk(IN PVOID ExportBase
,
64 IN PIMAGE_THUNK_DATA OriginalThunk
,
65 IN OUT PIMAGE_THUNK_DATA Thunk
,
66 IN PIMAGE_EXPORT_DIRECTORY ExportEntry
,
72 LdrpWalkImportDescriptor(IN LPWSTR DllPath OPTIONAL
,
73 IN PLDR_DATA_TABLE_ENTRY LdrEntry
);
78 LdrpGetProcedureAddress(IN PVOID BaseAddress
,
81 OUT PVOID
*ProcedureAddress
,
82 IN BOOLEAN ExecuteInit
);
84 PLDR_DATA_TABLE_ENTRY NTAPI
85 LdrpAllocateDataTableEntry(IN PVOID BaseAddress
);
88 LdrpInsertMemoryTableEntry(IN PLDR_DATA_TABLE_ENTRY LdrEntry
);
91 LdrpLoadDll(IN BOOLEAN Redirected
,
92 IN PWSTR DllPath OPTIONAL
,
93 IN PULONG DllCharacteristics OPTIONAL
,
94 IN PUNICODE_STRING DllName
,
95 OUT PVOID
*BaseAddress
,
99 LdrpUpdateLoadCount2(IN PLDR_DATA_TABLE_ENTRY LdrEntry
,
103 LdrpClearLoadInProgress();
107 LdrpSetProtection(PVOID ViewBase
,
112 LdrpCheckForLoadedDllHandle(IN PVOID Base
,
113 OUT PLDR_DATA_TABLE_ENTRY
*LdrEntry
);
116 LdrpCheckForLoadedDll(IN PWSTR DllPath
,
117 IN PUNICODE_STRING DllName
,
119 IN BOOLEAN RedirectedDll
,
120 OUT PLDR_DATA_TABLE_ENTRY
*LdrEntry
);
123 LdrpMapDll(IN PWSTR SearchPath OPTIONAL
,
125 IN PWSTR DllName OPTIONAL
,
126 IN PULONG DllCharacteristics
,
129 OUT PLDR_DATA_TABLE_ENTRY
*DataTableEntry
);
132 LdrpFetchAddressOfEntryPoint(PVOID ImageBase
);
135 LdrpFreeUnicodeString(PUNICODE_STRING String
);
138 /* FIXME: Cleanup this mess */
139 typedef NTSTATUS (NTAPI
*PEPFUNC
)(PPEB
);
140 NTSTATUS
LdrMapSections(HANDLE ProcessHandle
,
142 HANDLE SectionHandle
,
143 PIMAGE_NT_HEADERS NTHeaders
);
144 NTSTATUS
LdrMapNTDllForProcess(HANDLE ProcessHandle
,
145 PHANDLE NTDllSectionHandle
);
147 LdrpGetResidentSize(PIMAGE_NT_HEADERS NTHeaders
);
149 extern HANDLE WindowsApiPort
;