:pserver:cvsanon@mok.lvcm.com:/CVS/ReactOS reactos
[reactos.git] / 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
7 typedef NTSTATUS STDCALL (*PEPFUNC)(PPEB);
8
9 /* Type for a DLL's entry point */
10 typedef BOOL STDCALL
11 (* PDLLMAIN_FUNC)(HANDLE hInst,
12                   ULONG ul_reason_for_call,
13                   LPVOID lpReserved);
14
15 typedef struct _LDR_MODULE
16 {
17    LIST_ENTRY     InLoadOrderModuleList;
18    LIST_ENTRY     InMemoryOrderModuleList;              // not used
19    LIST_ENTRY     InInitializationOrderModuleList;      // not used
20    PVOID          BaseAddress;
21    ULONG          EntryPoint;
22    ULONG          SizeOfImage;
23    UNICODE_STRING FullDllName;
24    UNICODE_STRING BaseDllName;
25    ULONG          Flags;
26    SHORT          LoadCount;
27    SHORT          TlsIndex;
28    HANDLE         SectionHandle;
29    ULONG          CheckSum;
30    ULONG          TimeDateStamp;
31 #ifdef KDBG
32   IMAGE_SYMBOL_INFO SymbolInfo;
33 #endif /* KDBG */
34 } LDR_MODULE, *PLDR_MODULE;
35
36 typedef struct _LDR_SYMBOL_INFO {
37   PLDR_MODULE ModuleObject;
38   ULONG_PTR ImageBase;
39   PVOID SymbolsBuffer;
40   ULONG SymbolsBufferLength;
41   PVOID SymbolStringsBuffer;
42   ULONG SymbolStringsBufferLength;
43 } LDR_SYMBOL_INFO, *PLDR_SYMBOL_INFO;
44
45
46 #define RVA(m, b) ((ULONG)b + m)
47
48
49 typedef struct _MODULE_ENTRY
50 {
51   ULONG Unknown0;
52   ULONG Unknown1;
53   PVOID BaseAddress;
54   ULONG SizeOfImage;
55   ULONG Flags;
56   USHORT Unknown2;
57   USHORT Unknown3;
58   SHORT LoadCount;
59   USHORT PathLength;
60   CHAR ModuleName[256];
61 } MODULE_ENTRY, *PMODULE_ENTRY;
62
63 typedef struct _MODULE_INFORMATION
64 {
65   ULONG ModuleCount;
66   MODULE_ENTRY ModuleEntry[1];
67 } MODULE_INFORMATION, *PMODULE_INFORMATION;
68
69 #ifdef KDBG
70
71 VOID
72 LdrpLoadUserModuleSymbols(PLDR_MODULE LdrModule);
73
74 #endif
75
76 PEPFUNC LdrPEStartup (PVOID  ImageBase,
77                       HANDLE SectionHandle,
78                       PLDR_MODULE* Module,
79                       PWSTR FullDosName);
80 NTSTATUS LdrMapSections(HANDLE ProcessHandle,
81                         PVOID ImageBase,
82                         HANDLE SectionHandle,
83                         PIMAGE_NT_HEADERS NTHeaders);
84 NTSTATUS LdrMapNTDllForProcess(HANDLE ProcessHandle,
85                                PHANDLE NTDllSectionHandle);
86
87
88 NTSTATUS STDCALL
89 LdrDisableThreadCalloutsForDll(IN PVOID BaseAddress);
90
91 NTSTATUS STDCALL
92 LdrGetDllHandle(IN ULONG Unknown1,
93                 IN ULONG Unknown2,
94                 IN PUNICODE_STRING DllName,
95                 OUT PVOID *BaseAddress);
96
97 NTSTATUS STDCALL
98 LdrFindEntryForAddress(PVOID Address,
99                        PLDR_MODULE *Module);
100
101 NTSTATUS STDCALL
102 LdrGetProcedureAddress(IN PVOID BaseAddress,
103                        IN PANSI_STRING Name,
104                        IN ULONG Ordinal,
105                        OUT PVOID *ProcedureAddress);
106
107 VOID STDCALL
108 LdrInitializeThunk(ULONG Unknown1,
109                    ULONG Unknown2,
110                    ULONG Unknown3,
111                    ULONG Unknown4);
112
113 NTSTATUS STDCALL
114 LdrLoadDll(IN PWSTR SearchPath OPTIONAL,
115            IN ULONG LoadFlags,
116            IN PUNICODE_STRING Name,
117            OUT PVOID *BaseAddress OPTIONAL);
118
119 NTSTATUS STDCALL
120 LdrQueryProcessModuleInformation(IN PMODULE_INFORMATION ModuleInformation OPTIONAL,
121                                  IN ULONG Size OPTIONAL,
122                                  OUT PULONG ReturnedSize);
123
124 NTSTATUS STDCALL
125 LdrShutdownProcess(VOID);
126
127 NTSTATUS STDCALL
128 LdrShutdownThread(VOID);
129
130 NTSTATUS STDCALL
131 LdrUnloadDll(IN PVOID BaseAddress);
132
133 #endif /* __NTOSKRNL_INCLUDE_INTERNAL_LDR_H */
134
135 /* EOF */