Author: tfaber Date: Sun Oct 12 11:35:11 2014 New Revision: 64690
URL: http://svn.reactos.org/svn/reactos?rev=64690&view=rev Log: [NTDLL:DBG] - Use NtReadVirtualMemory instead of dereferencing a pointer from a different process in DbgUiConvertStateChangeStructure. CORE-8622 #resolve
Modified: trunk/reactos/dll/ntdll/dbg/dbgui.c
Modified: trunk/reactos/dll/ntdll/dbg/dbgui.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/ntdll/dbg/dbgui.c?rev=6... ============================================================================== --- trunk/reactos/dll/ntdll/dbg/dbgui.c [iso-8859-1] (original) +++ trunk/reactos/dll/ntdll/dbg/dbgui.c [iso-8859-1] Sun Oct 12 11:35:11 2014 @@ -66,6 +66,9 @@ THREAD_BASIC_INFORMATION ThreadBasicInfo; LPDEBUG_EVENT DebugEvent = Win32DebugEvent; HANDLE ThreadHandle; + HANDLE ProcessHandle; + PTEB Teb; + PVOID Pointer;
/* Write common data */ DebugEvent->dwProcessId = (DWORD)WaitStateChange-> @@ -256,13 +259,31 @@ NtClose(ThreadHandle); }
- /* Check if we got thread information */ + /* If we got thread information, open the process */ if (NT_SUCCESS(Status)) { - /* Save the image name from the TIB */ - DebugEvent->u.LoadDll.lpImageName = - ((PTEB)ThreadBasicInfo.TebBaseAddress)-> - NtTib.ArbitraryUserPointer; + Status = NtOpenProcess(&ProcessHandle, + PROCESS_VM_READ, + &ObjectAttributes, + &WaitStateChange->AppClientId); + } + + if (NT_SUCCESS(Status)) + { + /* Read the image name from the TIB */ + Teb = ThreadBasicInfo.TebBaseAddress; + Status = NtReadVirtualMemory(ProcessHandle, + &Teb->NtTib.ArbitraryUserPointer, + &Pointer, + sizeof(Pointer), + NULL); + NtClose(ProcessHandle); + } + + if (NT_SUCCESS(Status)) + { + /* If everything was successful, set the image name */ + DebugEvent->u.LoadDll.lpImageName = Pointer; } else {