From bbe66391dc6738ba1b66bca547d70016d11aa35a Mon Sep 17 00:00:00 2001 From: Thomas Faber Date: Sun, 1 Mar 2015 15:34:06 +0000 Subject: [PATCH] [NTDLL:LDR] - Implement LdrSetDllManifestProber CORE-6354 CORE-9298 svn path=/trunk/; revision=66522 --- reactos/dll/ntdll/ldr/ldrapi.c | 6 ++++-- reactos/dll/ntdll/ldr/ldrpe.c | 2 +- reactos/include/ndk/ldrtypes.h | 15 +++++++++++++-- reactos/include/ndk/umfuncs.h | 5 +++++ 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/reactos/dll/ntdll/ldr/ldrapi.c b/reactos/dll/ntdll/ldr/ldrapi.c index e44cd794143..7fc53afea80 100644 --- a/reactos/dll/ntdll/ldr/ldrapi.c +++ b/reactos/dll/ntdll/ldr/ldrapi.c @@ -21,6 +21,7 @@ LONG LdrpLoaderLockAcquisitonCount; BOOLEAN LdrpShowRecursiveLoads, LdrpBreakOnRecursiveDllLoads; UNICODE_STRING LdrApiDefaultExtension = RTL_CONSTANT_STRING(L".DLL"); ULONG AlternateResourceModuleCount; +extern PLDR_MANIFEST_PROBER_ROUTINE LdrpManifestProberRoutine; /* FUNCTIONS *****************************************************************/ @@ -69,9 +70,10 @@ LdrAccessOutOfProcessResource(IN PVOID Unknown, VOID NTAPI -LdrSetDllManifestProber(IN PVOID ProberFunction) +LdrSetDllManifestProber( + _In_ PLDR_MANIFEST_PROBER_ROUTINE Routine) { - UNIMPLEMENTED; + LdrpManifestProberRoutine = Routine; } BOOLEAN diff --git a/reactos/dll/ntdll/ldr/ldrpe.c b/reactos/dll/ntdll/ldr/ldrpe.c index bd0600544d7..6c93c8d52f1 100644 --- a/reactos/dll/ntdll/ldr/ldrpe.c +++ b/reactos/dll/ntdll/ldr/ldrpe.c @@ -15,7 +15,7 @@ /* GLOBALS *******************************************************************/ -PVOID LdrpManifestProberRoutine; +PLDR_MANIFEST_PROBER_ROUTINE LdrpManifestProberRoutine; ULONG LdrpNormalSnap; /* FUNCTIONS *****************************************************************/ diff --git a/reactos/include/ndk/ldrtypes.h b/reactos/include/ndk/ldrtypes.h index 8cd6a7d8681..7169efbebc0 100644 --- a/reactos/include/ndk/ldrtypes.h +++ b/reactos/include/ndk/ldrtypes.h @@ -102,6 +102,11 @@ Author: #define LDR_IS_IMAGEMAPPING(handle) (((ULONG_PTR)(handle)) & (ULONG_PTR)2) #define LDR_IS_RESOURCE(handle) (LDR_IS_IMAGEMAPPING(handle) || LDR_IS_DATAFILE(handle)) +// +// Activation Context +// +typedef PVOID PACTIVATION_CONTEXT; + // // Loader Data stored in the PEB // @@ -150,7 +155,7 @@ typedef struct _LDR_DATA_TABLE_ENTRY ULONG TimeDateStamp; PVOID LoadedImports; }; - PVOID EntryPointActivationContext; + PACTIVATION_CONTEXT EntryPointActivationContext; PVOID PatchInformation; } LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY; @@ -228,9 +233,15 @@ typedef struct _ALT_RESOURCE_MODULE // // Callback function for LdrEnumerateLoadedModules // -typedef VOID (NTAPI LDR_ENUM_CALLBACK)(IN PLDR_DATA_TABLE_ENTRY ModuleInformation, _In_ PVOID Parameter, _Out_ BOOLEAN *Stop); +typedef VOID (NTAPI LDR_ENUM_CALLBACK)(_In_ PLDR_DATA_TABLE_ENTRY ModuleInformation, _In_ PVOID Parameter, _Out_ BOOLEAN *Stop); typedef LDR_ENUM_CALLBACK *PLDR_ENUM_CALLBACK; +// +// Manifest prober routine set via LdrSetDllManifestProber +// +typedef NTSTATUS (NTAPI LDR_MANIFEST_PROBER_ROUTINE)(_In_ PVOID DllHandle, _In_ PCWSTR FullDllName, _Out_ PVOID *ActCtx); +typedef LDR_MANIFEST_PROBER_ROUTINE *PLDR_MANIFEST_PROBER_ROUTINE; + // // DLL Main Routine // diff --git a/reactos/include/ndk/umfuncs.h b/reactos/include/ndk/umfuncs.h index bd4ee223f0f..5a94eae4417 100644 --- a/reactos/include/ndk/umfuncs.h +++ b/reactos/include/ndk/umfuncs.h @@ -191,6 +191,11 @@ LdrQueryProcessModuleInformation( _Out_ PULONG ReturnedSize ); +VOID +NTAPI +LdrSetDllManifestProber( + _In_ PLDR_MANIFEST_PROBER_ROUTINE Routine); + NTSTATUS NTAPI LdrShutdownProcess(