From: Yuxuan Shui yshui@codeweavers.com
Reference: 4ea0354ecaf6c601d304cce4f7e5a4e6a8542490 --- dlls/kernel32/toolhelp.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
diff --git a/dlls/kernel32/toolhelp.c b/dlls/kernel32/toolhelp.c index 5e1ec84d100..d49e2a84cd2 100644 --- a/dlls/kernel32/toolhelp.c +++ b/dlls/kernel32/toolhelp.c @@ -71,6 +71,7 @@ static WCHAR *fetch_string( HANDLE hProcess, UNICODE_STRING* us)
static BOOL fetch_module( DWORD process, DWORD flags, LDR_DATA_TABLE_ENTRY **ldr_mod, ULONG *num ) { + OBJECT_BASIC_INFORMATION obi; HANDLE hProcess; PROCESS_BASIC_INFORMATION pbi; PPEB_LDR_DATA pLdrData; @@ -89,6 +90,15 @@ static BOOL fetch_module( DWORD process, DWORD flags, LDR_DATA_TABLE_ENTRY **ldr else hProcess = GetCurrentProcess();
+ if (hProcess != GetCurrentProcess() && + RtlIsCurrentProcess( hProcess ) && + !NtQueryObject(hProcess, ObjectBasicInformation, &obi, sizeof(obi), NULL) && + obi.GrantedAccess & PROCESS_VM_READ) + { + TRACE("same process.\n"); + hProcess = GetCurrentProcess(); + } + if (set_ntstatus( NtQueryInformationProcess( hProcess, ProcessBasicInformation, &pbi, sizeof(pbi), NULL ))) {