2002-07-13 Casper S. Hornstrup <chorns@users.sourceforge.net>
[reactos.git] / reactos / include / ntdll / ldr.h
1 #include <ntos/kdbgsyms.h>
2 #include <roscfg.h>
3
4 typedef NTSTATUS STDCALL (*PEPFUNC)(PPEB);
5
6 typedef struct _LDR_MODULE
7 {
8 LIST_ENTRY InLoadOrderModuleList;
9 LIST_ENTRY InMemoryOrderModuleList; // not used
10 LIST_ENTRY InInitializationOrderModuleList; // not used
11 PVOID BaseAddress;
12 ULONG EntryPoint;
13 ULONG SizeOfImage;
14 UNICODE_STRING FullDllName;
15 UNICODE_STRING BaseDllName;
16 ULONG Flags;
17 SHORT LoadCount;
18 SHORT TlsIndex;
19 HANDLE SectionHandle;
20 ULONG CheckSum;
21 ULONG TimeDateStamp;
22 #ifdef DBG
23 IMAGE_SYMBOL_INFO SymbolInfo;
24 #endif /* DBG */
25 } LDR_MODULE, *PLDR_MODULE;
26
27 typedef struct _LDR_SYMBOL_INFO {
28 PLDR_MODULE ModuleObject;
29 ULONG_PTR ImageBase;
30 PVOID SymbolsBuffer;
31 ULONG SymbolsBufferLength;
32 PVOID SymbolStringsBuffer;
33 ULONG SymbolStringsBufferLength;
34 } LDR_SYMBOL_INFO, *PLDR_SYMBOL_INFO;
35
36
37 #define RVA(m, b) ((ULONG)b + m)
38
39
40 typedef struct _MODULE_ENTRY
41 {
42 ULONG Unknown0;
43 ULONG Unknown1;
44 PVOID BaseAddress;
45 ULONG SizeOfImage;
46 ULONG Flags;
47 USHORT Unknown2;
48 USHORT Unknown3;
49 SHORT LoadCount;
50 USHORT PathLength;
51 CHAR ModuleName[256];
52 } MODULE_ENTRY, *PMODULE_ENTRY;
53
54 typedef struct _MODULE_INFORMATION
55 {
56 ULONG ModuleCount;
57 MODULE_ENTRY ModuleEntry[1];
58 } MODULE_INFORMATION, *PMODULE_INFORMATION;
59
60 #ifdef DBG
61
62 VOID
63 LdrpLoadUserModuleSymbols(PLDR_MODULE LdrModule);
64
65 #endif
66
67 PEPFUNC LdrPEStartup(PVOID ImageBase, HANDLE SectionHandle);
68 NTSTATUS LdrMapSections(HANDLE ProcessHandle,
69 PVOID ImageBase,
70 HANDLE SectionHandle,
71 PIMAGE_NT_HEADERS NTHeaders);
72 NTSTATUS LdrMapNTDllForProcess(HANDLE ProcessHandle,
73 PHANDLE NTDllSectionHandle);
74
75
76 NTSTATUS STDCALL
77 LdrDisableThreadCalloutsForDll(IN PVOID BaseAddress);
78
79 NTSTATUS STDCALL
80 LdrGetDllHandle(IN ULONG Unknown1,
81 IN ULONG Unknown2,
82 IN PUNICODE_STRING DllName,
83 OUT PVOID *BaseAddress);
84
85 NTSTATUS STDCALL
86 LdrFindEntryForAddress(PVOID Address,
87 PLDR_MODULE *Module);
88
89 NTSTATUS STDCALL
90 LdrGetProcedureAddress(IN PVOID BaseAddress,
91 IN PANSI_STRING Name,
92 IN ULONG Ordinal,
93 OUT PVOID *ProcedureAddress);
94
95 VOID STDCALL
96 LdrInitializeThunk(ULONG Unknown1,
97 ULONG Unknown2,
98 ULONG Unknown3,
99 ULONG Unknown4);
100
101 NTSTATUS STDCALL
102 LdrLoadDll(IN PWSTR SearchPath OPTIONAL,
103 IN ULONG LoadFlags,
104 IN PUNICODE_STRING Name,
105 OUT PVOID *BaseAddress OPTIONAL);
106
107 NTSTATUS STDCALL
108 LdrQueryProcessModuleInformation(IN PMODULE_INFORMATION ModuleInformation OPTIONAL,
109 IN ULONG Size OPTIONAL,
110 OUT PULONG ReturnedSize);
111
112 NTSTATUS STDCALL
113 LdrShutdownProcess(VOID);
114
115 NTSTATUS STDCALL
116 LdrShutdownThread(VOID);
117
118 NTSTATUS STDCALL
119 LdrUnloadDll(IN PVOID BaseAddress);
120
121 /* EOF */