From ec9698366a6883d0bb2161ace21e64128bde858f Mon Sep 17 00:00:00 2001 From: Alex Ionescu Date: Sun, 6 Nov 2011 01:34:06 +0000 Subject: [PATCH] [NTDLL]: Export RtlImageNtHeaderEx and LodrLoadAlternateResourceModule. [NDK]: Add LdrLoadAlternateResourceModule. Fix RtlDosApplyFileIsolationRedirection_UStr and add flags. [NTDLL]: Halfplement LdrLoad/UnloadAlternateResourceModule. svn path=/trunk/; revision=54307 --- reactos/dll/ntdll/def/ntdll.spec | 6 ++-- reactos/dll/ntdll/ldr/ldrapi.c | 48 +++++++++++++++++++++++++++++--- reactos/dll/ntdll/rtl/libsupp.c | 24 ++++++++-------- reactos/include/ndk/ldrfuncs.h | 7 +++++ reactos/include/ndk/rtlfuncs.h | 14 +++++----- reactos/include/ndk/rtltypes.h | 5 ++++ 6 files changed, 78 insertions(+), 26 deletions(-) diff --git a/reactos/dll/ntdll/def/ntdll.spec b/reactos/dll/ntdll/def/ntdll.spec index a13854a9c6e..f8e11de514c 100644 --- a/reactos/dll/ntdll/def/ntdll.spec +++ b/reactos/dll/ntdll/def/ntdll.spec @@ -88,7 +88,7 @@ ;@ stdcall LdrHotPatchRoutine ;@ stdcall LdrInitShimEngineDynamic @ stdcall LdrInitializeThunk(long long long long) -;@ stdcall LdrLoadAlternateResourceModule +@ stdcall LdrLoadAlternateResourceModule(ptr ptr) @ stdcall LdrLoadDll(wstr long ptr ptr) @ stdcall LdrLockLoaderLock(long ptr ptr) ;@ stdcall LdrOpenImageFileOptionsKey ; 5.2 SP1 and higher @@ -566,7 +566,7 @@ @ stdcall RtlDllShutdownInProgress() @ stdcall RtlDnsHostNameToComputerName(ptr ptr long) @ stdcall RtlDoesFileExists_U(wstr) -;@ stdcall RtlDosApplyFileIsolationRedirection_Ustr +@ stdcall RtlDosApplyFileIsolationRedirection_Ustr(long ptr ptr ptr ptr ptr ptr ptr ptr) @ stdcall RtlDosPathNameToNtPathName_U(wstr ptr ptr ptr) ;@ stdcall RtlDosPathNameToNtPathName_U_WithStatus ; 5.2 SP1, and higher @ stdcall RtlDosPathNameToRelativeNtPathName_U(ptr ptr ptr ptr) ; CHECKME @@ -690,7 +690,7 @@ @ stdcall RtlIdentifierAuthoritySid(ptr) @ stdcall RtlImageDirectoryEntryToData(long long long ptr) @ stdcall RtlImageNtHeader(long) -;@ stdcall RtlImageNtHeaderEx +@ stdcall RtlImageNtHeaderEx(long ptr double ptr) @ stdcall RtlImageRvaToSection(ptr long long) @ stdcall RtlImageRvaToVa(ptr long long ptr) @ stdcall RtlImpersonateSelf(long) diff --git a/reactos/dll/ntdll/ldr/ldrapi.c b/reactos/dll/ntdll/ldr/ldrapi.c index f2bf1a603bb..114e2d10c4d 100644 --- a/reactos/dll/ntdll/ldr/ldrapi.c +++ b/reactos/dll/ntdll/ldr/ldrapi.c @@ -19,9 +19,18 @@ LIST_ENTRY LdrpUnloadHead; LONG LdrpLoaderLockAcquisitonCount; BOOLEAN LdrpShowRecursiveLoads, LdrpBreakOnRecursiveDllLoads; UNICODE_STRING LdrApiDefaultExtension = RTL_CONSTANT_STRING(L".DLL"); +ULONG AlternateResourceModuleCount; /* FUNCTIONS *****************************************************************/ +BOOLEAN +NTAPI +LdrAlternateResourcesEnabled(VOID) +{ + /* ReactOS does not support this */ + return FALSE; +} + ULONG_PTR FORCEINLINE LdrpMakeCookie(VOID) @@ -1524,15 +1533,46 @@ LdrProcessRelocationBlock(IN ULONG_PTR Address, } /* - * @unimplemented + * @implemented */ BOOLEAN NTAPI LdrUnloadAlternateResourceModule(IN PVOID BaseAddress) { - //static BOOLEAN WarnedOnce = FALSE; - //if (WarnedOnce == FALSE) { UNIMPLEMENTED; WarnedOnce = TRUE; } - return FALSE; + ULONG_PTR Cookie; + + /* Acquire the loader lock */ + LdrLockLoaderLock(TRUE, NULL, &Cookie); + + /* Check if there's any alternate resources loaded */ + if (AlternateResourceModuleCount) + { + UNIMPLEMENTED; + } + + /* Release the loader lock */ + LdrUnlockLoaderLock(1, Cookie); + + /* All done */ + return TRUE; } +/* FIXME: Add to ntstatus.mc */ +#define STATUS_MUI_FILE_NOT_FOUND ((NTSTATUS)0xC00B0001L) + +/* + * @implemented + */ +NTSTATUS +NTAPI +LdrLoadAlternateResourceModule(IN PVOID Module, + IN PWSTR Buffer) +{ + /* Is MUI Support enabled? */ + if (!LdrAlternateResourcesEnabled()) return STATUS_SUCCESS; + + UNIMPLEMENTED; + return STATUS_MUI_FILE_NOT_FOUND; +} + /* EOF */ diff --git a/reactos/dll/ntdll/rtl/libsupp.c b/reactos/dll/ntdll/rtl/libsupp.c index 5ca2f4899d2..69d42515bf7 100644 --- a/reactos/dll/ntdll/rtl/libsupp.c +++ b/reactos/dll/ntdll/rtl/libsupp.c @@ -518,21 +518,21 @@ RtlPcToFileHeader(IN PVOID PcValue, return ImageBase; } +/* + * @unimplemented + */ NTSYSAPI NTSTATUS NTAPI -RtlDosApplyFileIsolationRedirection_Ustr( - IN BOOLEAN Unknown, - IN PUNICODE_STRING OriginalName, - IN PUNICODE_STRING Extension, - IN OUT PUNICODE_STRING RedirectedName, - IN OUT PUNICODE_STRING RedirectedName2, - IN OUT PUNICODE_STRING *OriginalName2, - IN PVOID Unknown1, - IN PVOID Unknown2, - IN PVOID Unknown3 -) +RtlDosApplyFileIsolationRedirection_Ustr(IN ULONG Flags, + IN PUNICODE_STRING OriginalName, + IN PUNICODE_STRING Extension, + IN OUT PUNICODE_STRING StaticString, + IN OUT PUNICODE_STRING DynamicString, + IN OUT PUNICODE_STRING *NewName, + IN PULONG NewFlags, + IN PSIZE_T FileNameSize, + IN PSIZE_T RequiredLength) { return STATUS_SXS_KEY_NOT_FOUND; } - diff --git a/reactos/include/ndk/ldrfuncs.h b/reactos/include/ndk/ldrfuncs.h index 3c67e06cbd2..4d478384d8d 100644 --- a/reactos/include/ndk/ldrfuncs.h +++ b/reactos/include/ndk/ldrfuncs.h @@ -58,6 +58,13 @@ LdrFindResourceDirectory_U( OUT PIMAGE_RESOURCE_DIRECTORY *ResourceDirectory ); +NTSTATUS +NTAPI +LdrLoadAlternateResourceModule( + IN PVOID Module, + IN PWSTR Buffer +); + BOOLEAN NTAPI LdrUnloadAlternateResourceModule( diff --git a/reactos/include/ndk/rtlfuncs.h b/reactos/include/ndk/rtlfuncs.h index 30a3897e175..617f505c03d 100644 --- a/reactos/include/ndk/rtlfuncs.h +++ b/reactos/include/ndk/rtlfuncs.h @@ -3275,15 +3275,15 @@ NTSYSAPI NTSTATUS NTAPI RtlDosApplyFileIsolationRedirection_Ustr( - IN BOOLEAN Unknown, + IN ULONG Flags, IN PUNICODE_STRING OriginalName, IN PUNICODE_STRING Extension, - IN OUT PUNICODE_STRING RedirectedName, - IN OUT PUNICODE_STRING RedirectedName2, - IN OUT PUNICODE_STRING *OriginalName2, - IN PVOID Unknown1, - IN PVOID Unknown2, - IN PVOID Unknown3 + IN OUT PUNICODE_STRING StaticString, + IN OUT PUNICODE_STRING DynamicString, + IN OUT PUNICODE_STRING *NewName, + IN PULONG NewFlags, + IN PSIZE_T FileNameSize, + IN PSIZE_T RequiredLength ); NTSYSAPI diff --git a/reactos/include/ndk/rtltypes.h b/reactos/include/ndk/rtltypes.h index 67a45b8f22e..fd9724d0c96 100644 --- a/reactos/include/ndk/rtltypes.h +++ b/reactos/include/ndk/rtltypes.h @@ -251,6 +251,11 @@ C_ASSERT(HEAP_CREATE_VALID_MASK == 0x0007F0FF); // #define RTL_IMAGE_NT_HEADER_EX_FLAG_NO_RANGE_CHECK 0x00000001 +// +// RtlDosApplyFileIsolationRedirection_Ustr Flags +// +#define RTL_DOS_APPLY_FILE_REDIRECTION_USTR_FLAG_RESPECT_DOT_LOCAL 0x01 + // // Codepages //