8075d53b200689fd3b53b91c98e009910acf8a0f
[reactos.git] / reactos / include / ntdll / ldr.h
1 #ifndef __NTOSKRNL_INCLUDE_INTERNAL_LDR_H
2 #define __NTOSKRNL_INCLUDE_INTERNAL_LDR_H
3
4 #include <ntos/kdbgsyms.h>
5 #include <roscfg.h>
6 #include <napi/teb.h>
7
8 typedef NTSTATUS STDCALL_FUNC (*PEPFUNC)(PPEB);
9
10 /* Type for a DLL's entry point */
11 typedef BOOL STDCALL_FUNC
12 (* PDLLMAIN_FUNC)(HANDLE hInst,
13 ULONG ul_reason_for_call,
14 LPVOID lpReserved);
15
16 /* Module flags */
17 #define IMAGE_DLL 0x00000004
18 #define LOAD_IN_PROGRESS 0x00001000
19 #define UNLOAD_IN_PROGRESS 0x00002000
20 #define ENTRY_PROCESSED 0x00004000
21 #define DONT_CALL_FOR_THREAD 0x00040000
22 #define PROCESS_ATTACH_CALLED 0x00080000
23 #define IMAGE_NOT_AT_BASE 0x00200000
24
25 typedef struct _LDR_MODULE
26 {
27 LIST_ENTRY InLoadOrderModuleList;
28 LIST_ENTRY InMemoryOrderModuleList; /* not used */
29 LIST_ENTRY InInitializationOrderModuleList; /* not used */
30 PVOID BaseAddress;
31 ULONG EntryPoint;
32 ULONG SizeOfImage;
33 UNICODE_STRING FullDllName;
34 UNICODE_STRING BaseDllName;
35 ULONG Flags;
36 SHORT LoadCount;
37 SHORT TlsIndex;
38 HANDLE SectionHandle;
39 ULONG CheckSum;
40 ULONG TimeDateStamp;
41 #ifdef KDBG
42 IMAGE_SYMBOL_INFO SymbolInfo;
43 #endif /* KDBG */
44 } LDR_MODULE, *PLDR_MODULE;
45
46 typedef struct _LDR_SYMBOL_INFO {
47 PLDR_MODULE ModuleObject;
48 ULONG_PTR ImageBase;
49 PVOID SymbolsBuffer;
50 ULONG SymbolsBufferLength;
51 PVOID SymbolStringsBuffer;
52 ULONG SymbolStringsBufferLength;
53 } LDR_SYMBOL_INFO, *PLDR_SYMBOL_INFO;
54
55
56 #define RVA(m, b) ((ULONG)b + m)
57
58
59 typedef struct _MODULE_ENTRY
60 {
61 ULONG Unknown0;
62 ULONG Unknown1;
63 PVOID BaseAddress;
64 ULONG SizeOfImage;
65 ULONG Flags;
66 USHORT Unknown2;
67 USHORT Unknown3;
68 SHORT LoadCount;
69 USHORT PathLength;
70 CHAR ModuleName[256];
71 } MODULE_ENTRY, *PMODULE_ENTRY;
72
73 typedef struct _MODULE_INFORMATION
74 {
75 ULONG ModuleCount;
76 MODULE_ENTRY ModuleEntry[1];
77 } MODULE_INFORMATION, *PMODULE_INFORMATION;
78
79 #ifdef KDBG
80
81 VOID
82 LdrpLoadUserModuleSymbols(PLDR_MODULE LdrModule);
83
84 #endif
85
86 PEPFUNC LdrPEStartup (PVOID ImageBase,
87 HANDLE SectionHandle,
88 PLDR_MODULE* Module,
89 PWSTR FullDosName);
90 NTSTATUS LdrMapSections(HANDLE ProcessHandle,
91 PVOID ImageBase,
92 HANDLE SectionHandle,
93 PIMAGE_NT_HEADERS NTHeaders);
94 NTSTATUS LdrMapNTDllForProcess(HANDLE ProcessHandle,
95 PHANDLE NTDllSectionHandle);
96
97
98 NTSTATUS STDCALL
99 LdrDisableThreadCalloutsForDll(IN PVOID BaseAddress);
100
101 NTSTATUS STDCALL
102 LdrGetDllHandle(IN PWCHAR Path OPTIONAL,
103 IN ULONG Unknown2,
104 IN PUNICODE_STRING DllName,
105 OUT PVOID *BaseAddress);
106
107 NTSTATUS STDCALL
108 LdrFindEntryForAddress(IN PVOID Address,
109 OUT PLDR_MODULE *Module);
110
111 NTSTATUS STDCALL
112 LdrGetProcedureAddress(IN PVOID BaseAddress,
113 IN PANSI_STRING Name,
114 IN ULONG Ordinal,
115 OUT PVOID *ProcedureAddress);
116
117 VOID STDCALL
118 LdrInitializeThunk(ULONG Unknown1,
119 ULONG Unknown2,
120 ULONG Unknown3,
121 ULONG Unknown4);
122
123 NTSTATUS STDCALL
124 LdrLoadDll(IN PWSTR SearchPath OPTIONAL,
125 IN ULONG LoadFlags,
126 IN PUNICODE_STRING Name,
127 OUT PVOID *BaseAddress OPTIONAL);
128
129 NTSTATUS STDCALL
130 LdrQueryImageFileExecutionOptions (IN PUNICODE_STRING SubKey,
131 IN PCWSTR ValueName,
132 IN ULONG ValueSize,
133 OUT PVOID Buffer,
134 IN ULONG BufferSize,
135 OUT PULONG RetunedLength OPTIONAL);
136
137 NTSTATUS STDCALL
138 LdrQueryProcessModuleInformation(IN PMODULE_INFORMATION ModuleInformation OPTIONAL,
139 IN ULONG Size OPTIONAL,
140 OUT PULONG ReturnedSize);
141
142 NTSTATUS STDCALL
143 LdrShutdownProcess(VOID);
144
145 NTSTATUS STDCALL
146 LdrShutdownThread(VOID);
147
148 NTSTATUS STDCALL
149 LdrUnloadDll(IN PVOID BaseAddress);
150
151 NTSTATUS STDCALL
152 LdrVerifyImageMatchesChecksum (IN HANDLE FileHandle,
153 ULONG Unknown1,
154 ULONG Unknown2,
155 ULONG Unknown3);
156
157 #endif /* __NTOSKRNL_INCLUDE_INTERNAL_LDR_H */
158
159 /* EOF */