[AVIFIL32]
[reactos.git] / reactos / dll / ntdll / include / ntdllp.h
index fcb04a9..606b5fc 100644 (file)
@@ -8,7 +8,20 @@
 
 /* INCLUDES ******************************************************************/
 
-extern BOOLEAN ShowSnaps;
+#define LDR_HASH_TABLE_ENTRIES 32
+#define LDR_GET_HASH_ENTRY(x) (RtlUpcaseUnicodeChar((x)) & (LDR_HASH_TABLE_ENTRIES - 1))
+
+/* LdrpUpdateLoadCount2 flags */
+#define LDRP_UPDATE_REFCOUNT   0x01
+#define LDRP_UPDATE_DEREFCOUNT 0x02
+#define LDRP_UPDATE_PIN        0x03
+
+/* Loader flags */
+#define IMAGE_LOADER_FLAGS_COMPLUS 0x00000001
+#define IMAGE_LOADER_FLAGS_SYSTEM_GLOBAL 0x01000000
+
+/* Page heap flags */
+#define DPH_FLAG_DLL_NOTIFY 0x40
 
 typedef struct _LDRP_TLS_DATA
 {
@@ -16,25 +29,37 @@ typedef struct _LDRP_TLS_DATA
     IMAGE_TLS_DIRECTORY TlsDirectory;
 } LDRP_TLS_DATA, *PLDRP_TLS_DATA;
 
-typedef BOOL
-(NTAPI *PDLLMAIN_FUNC)(HANDLE hInst,
-                       ULONG ul_reason_for_call,
-                       LPVOID lpReserved);
-
 /* Global data */
 extern RTL_CRITICAL_SECTION LdrpLoaderLock;
 extern BOOLEAN LdrpInLdrInit;
+extern LIST_ENTRY LdrpHashTable[LDR_HASH_TABLE_ENTRIES];
+extern BOOLEAN ShowSnaps;
+extern UNICODE_STRING LdrpDefaultPath;
+extern HANDLE LdrpKnownDllObjectDirectory;
+extern ULONG LdrpNumberOfProcessors;
+extern ULONG LdrpFatalHardErrorCount;
+extern PUNICODE_STRING LdrpTopLevelDllBeingLoaded;
+extern PLDR_DATA_TABLE_ENTRY LdrpCurrentDllInitializer;
+extern UNICODE_STRING LdrApiDefaultExtension;
+extern BOOLEAN LdrpLdrDatabaseIsSetup;
+extern ULONG LdrpActiveUnloadCount;
+extern BOOLEAN LdrpShutdownInProgress;
+extern UNICODE_STRING LdrpKnownDllPath;
+extern PLDR_DATA_TABLE_ENTRY LdrpGetModuleHandleCache, LdrpLoadedDllHandleCache;
+extern ULONG RtlpDphGlobalFlags;
 
 /* ldrinit.c */
 NTSTATUS NTAPI LdrpRunInitializeRoutines(IN PCONTEXT Context OPTIONAL);
-NTSTATUS NTAPI LdrpInitializeThread(IN PCONTEXT Context);
+VOID NTAPI LdrpInitializeThread(IN PCONTEXT Context);
 NTSTATUS NTAPI LdrpInitializeTls(VOID);
 NTSTATUS NTAPI LdrpAllocateTls(VOID);
 VOID NTAPI LdrpFreeTls(VOID);
-VOID NTAPI LdrpTlsCallback(PVOID BaseAddress, ULONG Reason);
-BOOLEAN NTAPI LdrpCallDllEntry(PDLLMAIN_FUNC EntryPoint, PVOID BaseAddress, ULONG Reason, PVOID Context);
+VOID NTAPI LdrpCallTlsInitializers(PVOID BaseAddress, ULONG Reason);
+BOOLEAN NTAPI LdrpCallInitRoutine(PDLL_INIT_ROUTINE EntryPoint, PVOID BaseAddress, ULONG Reason, PVOID Context);
 NTSTATUS NTAPI LdrpInitializeProcess(PCONTEXT Context, PVOID SystemArgument1);
-
+VOID NTAPI LdrpInitFailure(NTSTATUS Status);
+VOID NTAPI LdrpValidateImageForMp(IN PLDR_DATA_TABLE_ENTRY LdrDataTableEntry);
+VOID NTAPI LdrpEnsureLoaderLockIsHeld();
 
 /* ldrpe.c */
 NTSTATUS
@@ -48,6 +73,11 @@ LdrpSnapThunk(IN PVOID ExportBase,
               IN BOOLEAN Static,
               IN LPSTR DllName);
 
+NTSTATUS NTAPI
+LdrpWalkImportDescriptor(IN LPWSTR DllPath OPTIONAL,
+                         IN PLDR_DATA_TABLE_ENTRY LdrEntry);
+
+
 /* ldrutils.c */
 NTSTATUS NTAPI
 LdrpGetProcedureAddress(IN PVOID BaseAddress,
@@ -55,6 +85,13 @@ LdrpGetProcedureAddress(IN PVOID BaseAddress,
                         IN ULONG Ordinal,
                         OUT PVOID *ProcedureAddress,
                         IN BOOLEAN ExecuteInit);
+
+PLDR_DATA_TABLE_ENTRY NTAPI
+LdrpAllocateDataTableEntry(IN PVOID BaseAddress);
+
+VOID NTAPI
+LdrpInsertMemoryTableEntry(IN PLDR_DATA_TABLE_ENTRY LdrEntry);
+
 NTSTATUS NTAPI
 LdrpLoadDll(IN BOOLEAN Redirected,
             IN PWSTR DllPath OPTIONAL,
@@ -63,25 +100,67 @@ LdrpLoadDll(IN BOOLEAN Redirected,
             OUT PVOID *BaseAddress,
             IN BOOLEAN CallInit);
 
+VOID NTAPI
+LdrpUpdateLoadCount2(IN PLDR_DATA_TABLE_ENTRY LdrEntry,
+                     IN ULONG Flags);
+
 ULONG NTAPI
 LdrpClearLoadInProgress();
 
+NTSTATUS
+NTAPI
+LdrpSetProtection(PVOID ViewBase,
+                  BOOLEAN Restore);
+
+BOOLEAN
+NTAPI
+LdrpCheckForLoadedDllHandle(IN PVOID Base,
+                            OUT PLDR_DATA_TABLE_ENTRY *LdrEntry);
+
+BOOLEAN NTAPI
+LdrpCheckForLoadedDll(IN PWSTR DllPath,
+                      IN PUNICODE_STRING DllName,
+                      IN BOOLEAN Flag,
+                      IN BOOLEAN RedirectedDll,
+                      OUT PLDR_DATA_TABLE_ENTRY *LdrEntry);
+
+NTSTATUS NTAPI
+LdrpMapDll(IN PWSTR SearchPath OPTIONAL,
+           IN PWSTR DllPath2,
+           IN PWSTR DllName OPTIONAL,
+           IN PULONG DllCharacteristics,
+           IN BOOLEAN Static,
+           IN BOOLEAN Redirect,
+           OUT PLDR_DATA_TABLE_ENTRY *DataTableEntry);
+
+PVOID NTAPI
+LdrpFetchAddressOfEntryPoint(PVOID ImageBase);
+
+VOID NTAPI
+LdrpFreeUnicodeString(PUNICODE_STRING String);
+
+
 /* FIXME: Cleanup this mess */
 typedef NTSTATUS (NTAPI *PEPFUNC)(PPEB);
 NTSTATUS LdrMapSections(HANDLE ProcessHandle,
-                       PVOID ImageBase,
-                       HANDLE SectionHandle,
-                       PIMAGE_NT_HEADERS NTHeaders);
+                        PVOID ImageBase,
+                        HANDLE SectionHandle,
+                        PIMAGE_NT_HEADERS NTHeaders);
 NTSTATUS LdrMapNTDllForProcess(HANDLE ProcessHandle,
-                              PHANDLE NTDllSectionHandle);
-BOOLEAN LdrMappedAsDataFile(PVOID *BaseAddress);
+                               PHANDLE NTDllSectionHandle);
 ULONG
 LdrpGetResidentSize(PIMAGE_NT_HEADERS NTHeaders);
-PEPFUNC LdrPEStartup (PVOID  ImageBase,
-                     HANDLE SectionHandle,
-                     PLDR_DATA_TABLE_ENTRY* Module,
-                     PWSTR FullDosName);
 
-extern HANDLE WindowsApiPort;
+NTSTATUS
+NTAPI
+LdrpLoadImportModule(IN PWSTR DllPath OPTIONAL,
+                     IN LPSTR ImportName,
+                     IN PVOID DllBase,
+                     OUT PLDR_DATA_TABLE_ENTRY *DataTableEntry,
+                     OUT PBOOLEAN Existing);
+                     
+VOID
+NTAPI
+LdrpFinalizeAndDeallocateDataTableEntry(IN PLDR_DATA_TABLE_ENTRY Entry);
 
 /* EOF */