mirror of
https://github.com/reactos/reactos.git
synced 2025-06-10 20:34:59 +00:00
Implemented LdrFindEntryForAddress() and LdrQueryProcessModuleInformation().
svn path=/trunk/; revision=2239
This commit is contained in:
parent
bdea50f54c
commit
3920464d8e
5 changed files with 276 additions and 92 deletions
|
@ -28,6 +28,28 @@ typedef struct _LDR_MODULE
|
||||||
#define RVA(m, b) ((ULONG)b + m)
|
#define RVA(m, b) ((ULONG)b + m)
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct _MODULE_ENTRY
|
||||||
|
{
|
||||||
|
ULONG Unknown0;
|
||||||
|
ULONG Unknown1;
|
||||||
|
PVOID BaseAddress;
|
||||||
|
ULONG SizeOfImage;
|
||||||
|
ULONG Flags;
|
||||||
|
USHORT Unknown2;
|
||||||
|
USHORT Unknown3;
|
||||||
|
SHORT LoadCount;
|
||||||
|
USHORT PathLength;
|
||||||
|
CHAR ModuleName[256];
|
||||||
|
} MODULE_ENTRY, *PMODULE_ENTRY;
|
||||||
|
|
||||||
|
typedef struct _MODULE_INFORMATION
|
||||||
|
{
|
||||||
|
ULONG ModuleCount;
|
||||||
|
MODULE_ENTRY ModuleEntry[1];
|
||||||
|
} MODULE_INFORMATION, *PMODULE_INFORMATION;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
PEPFUNC LdrPEStartup(PVOID ImageBase, HANDLE SectionHandle);
|
PEPFUNC LdrPEStartup(PVOID ImageBase, HANDLE SectionHandle);
|
||||||
NTSTATUS LdrMapSections(HANDLE ProcessHandle,
|
NTSTATUS LdrMapSections(HANDLE ProcessHandle,
|
||||||
PVOID ImageBase,
|
PVOID ImageBase,
|
||||||
|
@ -36,44 +58,53 @@ NTSTATUS LdrMapSections(HANDLE ProcessHandle,
|
||||||
NTSTATUS LdrMapNTDllForProcess(HANDLE ProcessHandle,
|
NTSTATUS LdrMapNTDllForProcess(HANDLE ProcessHandle,
|
||||||
PHANDLE NTDllSectionHandle);
|
PHANDLE NTDllSectionHandle);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
NTSTATUS STDCALL
|
|
||||||
LdrDisableThreadCalloutsForDll (IN PVOID BaseAddress);
|
|
||||||
|
|
||||||
NTSTATUS STDCALL
|
|
||||||
LdrGetDllHandle (IN ULONG Unknown1,
|
|
||||||
IN ULONG Unknown2,
|
|
||||||
IN PUNICODE_STRING DllName,
|
|
||||||
OUT PVOID *BaseAddress);
|
|
||||||
|
|
||||||
NTSTATUS STDCALL
|
|
||||||
LdrGetProcedureAddress (IN PVOID BaseAddress,
|
|
||||||
IN PANSI_STRING Name,
|
|
||||||
IN ULONG Ordinal,
|
|
||||||
OUT PVOID *ProcedureAddress);
|
|
||||||
|
|
||||||
VOID STDCALL
|
|
||||||
LdrInitializeThunk (ULONG Unknown1,
|
|
||||||
ULONG Unknown2,
|
|
||||||
ULONG Unknown3,
|
|
||||||
ULONG Unknown4);
|
|
||||||
|
|
||||||
NTSTATUS STDCALL
|
|
||||||
LdrLoadDll (IN PWSTR SearchPath OPTIONAL,
|
|
||||||
IN ULONG LoadFlags,
|
|
||||||
IN PUNICODE_STRING Name,
|
|
||||||
OUT PVOID *BaseAddress OPTIONAL);
|
|
||||||
|
|
||||||
NTSTATUS STDCALL
|
|
||||||
LdrShutdownProcess (VOID);
|
|
||||||
|
|
||||||
NTSTATUS STDCALL
|
|
||||||
LdrShutdownThread (VOID);
|
|
||||||
|
|
||||||
NTSTATUS STDCALL
|
|
||||||
LdrUnloadDll (IN PVOID BaseAddress);
|
|
||||||
|
|
||||||
VOID LdrLoadModuleSymbols(PLDR_MODULE ModuleObject);
|
VOID LdrLoadModuleSymbols(PLDR_MODULE ModuleObject);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
NTSTATUS STDCALL
|
||||||
|
LdrDisableThreadCalloutsForDll(IN PVOID BaseAddress);
|
||||||
|
|
||||||
|
NTSTATUS STDCALL
|
||||||
|
LdrGetDllHandle(IN ULONG Unknown1,
|
||||||
|
IN ULONG Unknown2,
|
||||||
|
IN PUNICODE_STRING DllName,
|
||||||
|
OUT PVOID *BaseAddress);
|
||||||
|
|
||||||
|
NTSTATUS STDCALL
|
||||||
|
LdrFindEntryForAddress(PVOID Address,
|
||||||
|
PLDR_MODULE *Module);
|
||||||
|
|
||||||
|
NTSTATUS STDCALL
|
||||||
|
LdrGetProcedureAddress(IN PVOID BaseAddress,
|
||||||
|
IN PANSI_STRING Name,
|
||||||
|
IN ULONG Ordinal,
|
||||||
|
OUT PVOID *ProcedureAddress);
|
||||||
|
|
||||||
|
VOID STDCALL
|
||||||
|
LdrInitializeThunk(ULONG Unknown1,
|
||||||
|
ULONG Unknown2,
|
||||||
|
ULONG Unknown3,
|
||||||
|
ULONG Unknown4);
|
||||||
|
|
||||||
|
NTSTATUS STDCALL
|
||||||
|
LdrLoadDll(IN PWSTR SearchPath OPTIONAL,
|
||||||
|
IN ULONG LoadFlags,
|
||||||
|
IN PUNICODE_STRING Name,
|
||||||
|
OUT PVOID *BaseAddress OPTIONAL);
|
||||||
|
|
||||||
|
NTSTATUS STDCALL
|
||||||
|
LdrQueryProcessModuleInformation(IN PMODULE_INFORMATION ModuleInformation OPTIONAL,
|
||||||
|
IN ULONG Size OPTIONAL,
|
||||||
|
OUT PULONG ReturnedSize);
|
||||||
|
|
||||||
|
NTSTATUS STDCALL
|
||||||
|
LdrShutdownProcess(VOID);
|
||||||
|
|
||||||
|
NTSTATUS STDCALL
|
||||||
|
LdrShutdownThread(VOID);
|
||||||
|
|
||||||
|
NTSTATUS STDCALL
|
||||||
|
LdrUnloadDll(IN PVOID BaseAddress);
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
; $Id: ntdll.def,v 1.78 2001/06/19 15:09:16 ekohl Exp $
|
; $Id: ntdll.def,v 1.79 2001/09/08 12:05:30 ekohl Exp $
|
||||||
;
|
;
|
||||||
; ReactOS Operating System
|
; ReactOS Operating System
|
||||||
;
|
;
|
||||||
|
@ -34,17 +34,17 @@ KiUserCallbackDispatcher
|
||||||
KiUserExceptionDispatcher
|
KiUserExceptionDispatcher
|
||||||
LdrAccessResource@16
|
LdrAccessResource@16
|
||||||
LdrDisableThreadCalloutsForDll@4
|
LdrDisableThreadCalloutsForDll@4
|
||||||
;LdrEnumResources
|
;LdrEnumResources@20
|
||||||
;LdrFindEntryForAddress
|
LdrFindEntryForAddress@8
|
||||||
;LdrFindResourceDirectory_U
|
;LdrFindResourceDirectory_U@16
|
||||||
LdrFindResource_U@16
|
LdrFindResource_U@16
|
||||||
LdrGetDllHandle@16
|
LdrGetDllHandle@16
|
||||||
LdrGetProcedureAddress@16
|
LdrGetProcedureAddress@16
|
||||||
LdrInitializeThunk@16
|
LdrInitializeThunk@16
|
||||||
LdrLoadDll@16
|
LdrLoadDll@16
|
||||||
;LdrProcessRelocationBlock
|
;LdrProcessRelocationBlock@16
|
||||||
;LdrQueryImageFileExecutionOptions
|
;LdrQueryImageFileExecutionOptions@24
|
||||||
;LdrQueryProcessModuleInformation
|
LdrQueryProcessModuleInformation@12
|
||||||
LdrShutdownProcess@0
|
LdrShutdownProcess@0
|
||||||
LdrShutdownThread@0
|
LdrShutdownThread@0
|
||||||
LdrUnloadDll@4
|
LdrUnloadDll@4
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
; $Id: ntdll.edf,v 1.67 2001/06/19 15:09:16 ekohl Exp $
|
; $Id: ntdll.edf,v 1.68 2001/09/08 12:05:30 ekohl Exp $
|
||||||
;
|
;
|
||||||
; ReactOS Operating System
|
; ReactOS Operating System
|
||||||
;
|
;
|
||||||
|
@ -35,7 +35,7 @@ KiUserExceptionDispatcher=KiUserExceptionDispatcher@8
|
||||||
LdrAccessResource=LdrAccessResource@16
|
LdrAccessResource=LdrAccessResource@16
|
||||||
LdrDisableThreadCalloutsForDll=LdrDisableThreadCalloutsForDll@4
|
LdrDisableThreadCalloutsForDll=LdrDisableThreadCalloutsForDll@4
|
||||||
;LdrEnumResources
|
;LdrEnumResources
|
||||||
;LdrFindEntryForAddress
|
LdrFindEntryForAddress=LdrFindEntryForAddress@8
|
||||||
;LdrFindResourceDirectory_U
|
;LdrFindResourceDirectory_U
|
||||||
LdrFindResource_U=LdrFindResource_U@16
|
LdrFindResource_U=LdrFindResource_U@16
|
||||||
LdrGetDllHandle=LdrGetDllHandle@16
|
LdrGetDllHandle=LdrGetDllHandle@16
|
||||||
|
@ -44,7 +44,7 @@ LdrInitializeThunk=LdrInitializeThunk@16
|
||||||
LdrLoadDll=LdrLoadDll@16
|
LdrLoadDll=LdrLoadDll@16
|
||||||
;LdrProcessRelocationBlock
|
;LdrProcessRelocationBlock
|
||||||
;LdrQueryImageFileExecutionOptions
|
;LdrQueryImageFileExecutionOptions
|
||||||
;LdrQueryProcessModuleInformation
|
LdrQueryProcessModuleInformation=LdrQueryProcessModuleInformation@12
|
||||||
LdrShutdownProcess=LdrShutdownProcess@0
|
LdrShutdownProcess=LdrShutdownProcess@0
|
||||||
LdrShutdownThread=LdrShutdownThread@0
|
LdrShutdownThread=LdrShutdownThread@0
|
||||||
LdrUnloadDll=LdrUnloadDll@4
|
LdrUnloadDll=LdrUnloadDll@4
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: utils.c,v 1.47 2001/09/01 19:36:30 rex Exp $
|
/* $Id: utils.c,v 1.48 2001/09/08 12:06:33 ekohl Exp $
|
||||||
*
|
*
|
||||||
* COPYRIGHT: See COPYING in the top level directory
|
* COPYRIGHT: See COPYING in the top level directory
|
||||||
* PROJECT: ReactOS kernel
|
* PROJECT: ReactOS kernel
|
||||||
|
@ -36,16 +36,12 @@
|
||||||
|
|
||||||
|
|
||||||
/* Type for a DLL's entry point */
|
/* Type for a DLL's entry point */
|
||||||
typedef
|
typedef WINBOOL STDCALL
|
||||||
WINBOOL
|
(* PDLLMAIN_FUNC)(HANDLE hInst,
|
||||||
STDCALL
|
ULONG ul_reason_for_call,
|
||||||
(* PDLLMAIN_FUNC) (
|
LPVOID lpReserved);
|
||||||
HANDLE hInst,
|
|
||||||
ULONG ul_reason_for_call,
|
|
||||||
LPVOID lpReserved
|
|
||||||
);
|
|
||||||
|
|
||||||
static NTSTATUS LdrFindDll(PLDR_MODULE *Dll,PUNICODE_STRING Name);
|
static NTSTATUS LdrFindEntryForName(PUNICODE_STRING Name, PLDR_MODULE *Module);
|
||||||
static PVOID LdrFixupForward(PCHAR ForwardName);
|
static PVOID LdrFixupForward(PCHAR ForwardName);
|
||||||
static PVOID LdrGetExportByName(PVOID BaseAddress, PUCHAR SymbolName, USHORT Hint);
|
static PVOID LdrGetExportByName(PVOID BaseAddress, PUCHAR SymbolName, USHORT Hint);
|
||||||
|
|
||||||
|
@ -209,7 +205,7 @@ LdrLoadDll (IN PWSTR SearchPath OPTIONAL,
|
||||||
/*
|
/*
|
||||||
* Test if dll is already loaded.
|
* Test if dll is already loaded.
|
||||||
*/
|
*/
|
||||||
if (LdrFindDll(&Module, &AdjustedName) == STATUS_SUCCESS)
|
if (LdrFindEntryForName(&AdjustedName, &Module) == STATUS_SUCCESS)
|
||||||
{
|
{
|
||||||
DPRINT("DLL %wZ already loaded.\n", &AdjustedName);
|
DPRINT("DLL %wZ already loaded.\n", &AdjustedName);
|
||||||
if (Module->LoadCount != -1)
|
if (Module->LoadCount != -1)
|
||||||
|
@ -444,8 +440,8 @@ LdrLoadDll (IN PWSTR SearchPath OPTIONAL,
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
* NAME LOCAL
|
* NAME EXPORTED
|
||||||
* LdrFindDll
|
* LdrFindEntryForAddress
|
||||||
*
|
*
|
||||||
* DESCRIPTION
|
* DESCRIPTION
|
||||||
*
|
*
|
||||||
|
@ -458,42 +454,104 @@ LdrLoadDll (IN PWSTR SearchPath OPTIONAL,
|
||||||
* NOTE
|
* NOTE
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static NTSTATUS LdrFindDll(PLDR_MODULE *Dll, PUNICODE_STRING Name)
|
NTSTATUS STDCALL
|
||||||
|
LdrFindEntryForAddress(PVOID Address,
|
||||||
|
PLDR_MODULE *Module)
|
||||||
{
|
{
|
||||||
PLIST_ENTRY ModuleListHead;
|
PLIST_ENTRY ModuleListHead;
|
||||||
PLIST_ENTRY Entry;
|
PLIST_ENTRY Entry;
|
||||||
PLDR_MODULE Module;
|
PLDR_MODULE ModulePtr;
|
||||||
|
|
||||||
DPRINT("NTDLL.LdrFindDll(Name %wZ)\n", Name);
|
DPRINT("NTDLL.LdrFindEntryForAddress(Address %p)\n", Address);
|
||||||
|
|
||||||
ModuleListHead = &NtCurrentPeb()->Ldr->InLoadOrderModuleList;
|
if (NtCurrentPeb()->Ldr == NULL)
|
||||||
Entry = ModuleListHead->Flink;
|
return(STATUS_NO_MORE_ENTRIES);
|
||||||
|
|
||||||
// NULL is the current process
|
ModuleListHead = &NtCurrentPeb()->Ldr->InLoadOrderModuleList;
|
||||||
if ( Name == NULL )
|
Entry = ModuleListHead->Flink;
|
||||||
{
|
if (Entry == ModuleListHead)
|
||||||
*Dll = CONTAINING_RECORD(Entry, LDR_MODULE, InLoadOrderModuleList);
|
return(STATUS_NO_MORE_ENTRIES);
|
||||||
return STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (Entry != ModuleListHead)
|
while (Entry != ModuleListHead)
|
||||||
{
|
{
|
||||||
Module = CONTAINING_RECORD(Entry, LDR_MODULE, InLoadOrderModuleList);
|
ModulePtr = CONTAINING_RECORD(Entry, LDR_MODULE, InLoadOrderModuleList);
|
||||||
|
|
||||||
DPRINT("Scanning %wZ %wZ\n", &Module->BaseDllName, Name);
|
DPRINT("Scanning %wZ at %p\n", &ModulePtr->BaseDllName, ModulePtr->BaseAddress);
|
||||||
|
|
||||||
if (RtlCompareUnicodeString(&Module->BaseDllName, Name, TRUE) == 0)
|
if ((Address >= ModulePtr->BaseAddress) &&
|
||||||
{
|
(Address <= (ModulePtr->BaseAddress + ModulePtr->SizeOfImage)))
|
||||||
*Dll = Module;
|
{
|
||||||
return STATUS_SUCCESS;
|
*Module = ModulePtr;
|
||||||
}
|
return(STATUS_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
Entry = Entry->Flink;
|
Entry = Entry->Flink;
|
||||||
}
|
}
|
||||||
|
|
||||||
DPRINT("Failed to find dll %wZ\n", Name);
|
DPRINT("Failed to find module entry.\n");
|
||||||
|
|
||||||
return STATUS_UNSUCCESSFUL;
|
return(STATUS_NO_MORE_ENTRIES);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
* NAME LOCAL
|
||||||
|
* LdrFindEntryForName
|
||||||
|
*
|
||||||
|
* DESCRIPTION
|
||||||
|
*
|
||||||
|
* ARGUMENTS
|
||||||
|
*
|
||||||
|
* RETURN VALUE
|
||||||
|
*
|
||||||
|
* REVISIONS
|
||||||
|
*
|
||||||
|
* NOTE
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static NTSTATUS
|
||||||
|
LdrFindEntryForName(PUNICODE_STRING Name,
|
||||||
|
PLDR_MODULE *Module)
|
||||||
|
{
|
||||||
|
PLIST_ENTRY ModuleListHead;
|
||||||
|
PLIST_ENTRY Entry;
|
||||||
|
PLDR_MODULE ModulePtr;
|
||||||
|
|
||||||
|
DPRINT("NTDLL.LdrFindEntryForName(Name %wZ)\n", Name);
|
||||||
|
|
||||||
|
if (NtCurrentPeb()->Ldr == NULL)
|
||||||
|
return(STATUS_NO_MORE_ENTRIES);
|
||||||
|
|
||||||
|
ModuleListHead = &NtCurrentPeb()->Ldr->InLoadOrderModuleList;
|
||||||
|
Entry = ModuleListHead->Flink;
|
||||||
|
if (Entry == ModuleListHead)
|
||||||
|
return(STATUS_NO_MORE_ENTRIES);
|
||||||
|
|
||||||
|
// NULL is the current process
|
||||||
|
if (Name == NULL)
|
||||||
|
{
|
||||||
|
*Module = CONTAINING_RECORD(Entry, LDR_MODULE, InLoadOrderModuleList);
|
||||||
|
return(STATUS_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
while (Entry != ModuleListHead)
|
||||||
|
{
|
||||||
|
ModulePtr = CONTAINING_RECORD(Entry, LDR_MODULE, InLoadOrderModuleList);
|
||||||
|
|
||||||
|
DPRINT("Scanning %wZ %wZ\n", &ModulePtr->BaseDllName, Name);
|
||||||
|
|
||||||
|
if (RtlCompareUnicodeString(&ModulePtr->BaseDllName, Name, TRUE) == 0)
|
||||||
|
{
|
||||||
|
*Module = ModulePtr;
|
||||||
|
return(STATUS_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
Entry = Entry->Flink;
|
||||||
|
}
|
||||||
|
|
||||||
|
DPRINT("Failed to find dll %wZ\n", Name);
|
||||||
|
|
||||||
|
return(STATUS_NO_MORE_ENTRIES);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
|
@ -1658,4 +1716,104 @@ LdrShutdownThread (VOID)
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
* NAME EXPORTED
|
||||||
|
* LdrQueryProcessModuleInformation
|
||||||
|
*
|
||||||
|
* DESCRIPTION
|
||||||
|
*
|
||||||
|
* ARGUMENTS
|
||||||
|
*
|
||||||
|
* RETURN VALUE
|
||||||
|
*
|
||||||
|
* REVISIONS
|
||||||
|
*
|
||||||
|
* NOTE
|
||||||
|
*/
|
||||||
|
NTSTATUS STDCALL
|
||||||
|
LdrQueryProcessModuleInformation(IN PMODULE_INFORMATION ModuleInformation OPTIONAL,
|
||||||
|
IN ULONG Size OPTIONAL,
|
||||||
|
OUT PULONG ReturnedSize)
|
||||||
|
|
||||||
|
{
|
||||||
|
PLIST_ENTRY ModuleListHead;
|
||||||
|
PLIST_ENTRY Entry;
|
||||||
|
PLDR_MODULE Module;
|
||||||
|
PMODULE_ENTRY ModulePtr = NULL;
|
||||||
|
NTSTATUS Status = STATUS_SUCCESS;
|
||||||
|
ULONG UsedSize = sizeof(ULONG);
|
||||||
|
ANSI_STRING AnsiString;
|
||||||
|
PCHAR p;
|
||||||
|
|
||||||
|
DPRINT("LdrQueryProcessModuleInformation() called\n");
|
||||||
|
|
||||||
|
RtlEnterCriticalSection (NtCurrentPeb()->LoaderLock);
|
||||||
|
|
||||||
|
if (ModuleInformation == NULL || Size == 0)
|
||||||
|
{
|
||||||
|
Status = STATUS_INFO_LENGTH_MISMATCH;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ModuleInformation->ModuleCount = 0;
|
||||||
|
ModulePtr = &ModuleInformation->ModuleEntry[0];
|
||||||
|
Status = STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
ModuleListHead = &NtCurrentPeb()->Ldr->InLoadOrderModuleList;
|
||||||
|
Entry = ModuleListHead->Flink;
|
||||||
|
|
||||||
|
while (Entry != ModuleListHead)
|
||||||
|
{
|
||||||
|
Module = CONTAINING_RECORD(Entry, LDR_MODULE, InLoadOrderModuleList);
|
||||||
|
|
||||||
|
DPRINT(" Module %wZ\n",
|
||||||
|
&Module->FullDllName);
|
||||||
|
|
||||||
|
if (UsedSize > Size)
|
||||||
|
{
|
||||||
|
Status = STATUS_INFO_LENGTH_MISMATCH;
|
||||||
|
}
|
||||||
|
else if (ModuleInformation != NULL)
|
||||||
|
{
|
||||||
|
ModulePtr->Unknown0 = 0; // FIXME: ??
|
||||||
|
ModulePtr->Unknown1 = 0; // FIXME: ??
|
||||||
|
ModulePtr->BaseAddress = Module->BaseAddress;
|
||||||
|
ModulePtr->SizeOfImage = Module->SizeOfImage;
|
||||||
|
ModulePtr->Flags = Module->Flags;
|
||||||
|
ModulePtr->Unknown2 = 0; // FIXME: load order index ??
|
||||||
|
ModulePtr->Unknown3 = 0; // FIXME: ??
|
||||||
|
ModulePtr->LoadCount = Module->LoadCount;
|
||||||
|
|
||||||
|
AnsiString.Length = 0;
|
||||||
|
AnsiString.MaximumLength = 256;
|
||||||
|
AnsiString.Buffer = ModulePtr->ModuleName;
|
||||||
|
RtlUnicodeStringToAnsiString(&AnsiString,
|
||||||
|
&Module->FullDllName,
|
||||||
|
FALSE);
|
||||||
|
p = strrchr(ModulePtr->ModuleName, '\\');
|
||||||
|
if (p != NULL)
|
||||||
|
ModulePtr->PathLength = p - ModulePtr->ModuleName + 1;
|
||||||
|
else
|
||||||
|
ModulePtr->PathLength = 0;
|
||||||
|
|
||||||
|
ModulePtr++;
|
||||||
|
ModuleInformation->ModuleCount++;
|
||||||
|
}
|
||||||
|
UsedSize += sizeof(MODULE_ENTRY);
|
||||||
|
|
||||||
|
Entry = Entry->Flink;
|
||||||
|
}
|
||||||
|
|
||||||
|
RtlLeaveCriticalSection (NtCurrentPeb()->LoaderLock);
|
||||||
|
|
||||||
|
if (ReturnedSize != 0)
|
||||||
|
*ReturnedSize = UsedSize;
|
||||||
|
|
||||||
|
DPRINT("LdrQueryProcessModuleInformation() done\n");
|
||||||
|
|
||||||
|
return(Status);
|
||||||
|
}
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
|
@ -12,11 +12,9 @@
|
||||||
STUB(KiRaiseUserExceptionDispatcher)
|
STUB(KiRaiseUserExceptionDispatcher)
|
||||||
|
|
||||||
STUB(LdrEnumResources)
|
STUB(LdrEnumResources)
|
||||||
STUB(LdrFindEntryForAddress)
|
|
||||||
STUB(LdrFindResourceDirectory_U)
|
STUB(LdrFindResourceDirectory_U)
|
||||||
STUB(LdrProcessRelocationBlock)
|
STUB(LdrProcessRelocationBlock)
|
||||||
STUB(LdrQueryImageFileExecutionOptions)
|
STUB(LdrQueryImageFileExecutionOptions)
|
||||||
STUB(LdrQueryProcessModuleInformation)
|
|
||||||
STUB(LdrVerifyImageMatchesChecksum)
|
STUB(LdrVerifyImageMatchesChecksum)
|
||||||
STUB(NPXEMULATORTABLE)
|
STUB(NPXEMULATORTABLE)
|
||||||
STUB(PfxFindPrefix)
|
STUB(PfxFindPrefix)
|
||||||
|
@ -26,9 +24,6 @@ STUB(PfxRemovePrefix)
|
||||||
STUB(RestoreEm87Context)
|
STUB(RestoreEm87Context)
|
||||||
STUB(RtlWalkHeap)
|
STUB(RtlWalkHeap)
|
||||||
STUB(RtlZeroHeap)
|
STUB(RtlZeroHeap)
|
||||||
STUB(RtlpNtEnumerateSubKey)
|
|
||||||
STUB(RtlpNtQueryValueKey)
|
|
||||||
STUB(RtlpNtSetValueKey)
|
|
||||||
STUB(RtlpUnWaitCriticalSection)
|
STUB(RtlpUnWaitCriticalSection)
|
||||||
STUB(RtlpWaitForCriticalSection)
|
STUB(RtlpWaitForCriticalSection)
|
||||||
STUB(SaveEm87Context)
|
STUB(SaveEm87Context)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue