Alexandre Julliard : taskmgr: Fetch the debug channels from the PEB memory block.
Alexandre Julliard
julliard at winehq.org
Mon May 24 15:59:53 CDT 2021
Module: wine
Branch: master
Commit: 0913e43bf976b5607665c416e979193a6078bd89
URL: https://source.winehq.org/git/wine.git/?a=commit;h=0913e43bf976b5607665c416e979193a6078bd89
Author: Alexandre Julliard <julliard at winehq.org>
Date: Mon May 24 21:32:11 2021 +0200
taskmgr: Fetch the debug channels from the PEB memory block.
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
programs/taskmgr/dbgchnl.c | 60 ++++++---------------------------------------
programs/taskmgr/procpage.c | 3 ---
programs/taskmgr/taskmgr.h | 2 --
3 files changed, 7 insertions(+), 58 deletions(-)
diff --git a/programs/taskmgr/dbgchnl.c b/programs/taskmgr/dbgchnl.c
index 7200eb476c7..2d160bf4b50 100644
--- a/programs/taskmgr/dbgchnl.c
+++ b/programs/taskmgr/dbgchnl.c
@@ -28,7 +28,6 @@
#include <windows.h>
#include <commctrl.h>
#include <winnt.h>
-#include <dbghelp.h>
#include "taskmgr.h"
#include "perfdata.h"
@@ -49,35 +48,6 @@
* setting for a fixme:s or err:s
*/
-static DWORD (WINAPI *pSymSetOptions)(DWORD);
-static BOOL (WINAPI *pSymInitialize)(HANDLE, PSTR, BOOL);
-static DWORD (WINAPI *pSymLoadModule)(HANDLE, HANDLE, PCSTR, PCSTR, DWORD, DWORD);
-static BOOL (WINAPI *pSymCleanup)(HANDLE);
-static BOOL (WINAPI *pSymFromName)(HANDLE, PCSTR, PSYMBOL_INFO);
-
-BOOL AreDebugChannelsSupported(void)
-{
- static HANDLE hDbgHelp /* = NULL */;
-
- static const WCHAR wszDbgHelp[] = {'D','B','G','H','E','L','P','.','D','L','L',0};
-
- if (hDbgHelp) return TRUE;
-
- if (!(hDbgHelp = LoadLibraryW(wszDbgHelp))) return FALSE;
- pSymSetOptions = (void*)GetProcAddress(hDbgHelp, "SymSetOptions");
- pSymInitialize = (void*)GetProcAddress(hDbgHelp, "SymInitialize");
- pSymLoadModule = (void*)GetProcAddress(hDbgHelp, "SymLoadModule");
- pSymFromName = (void*)GetProcAddress(hDbgHelp, "SymFromName");
- pSymCleanup = (void*)GetProcAddress(hDbgHelp, "SymCleanup");
- if (!pSymSetOptions || !pSymInitialize || !pSymLoadModule || !pSymCleanup || !pSymFromName)
- {
- FreeLibrary(hDbgHelp);
- hDbgHelp = NULL;
- return FALSE;
- }
- return TRUE;
-}
-
static DWORD get_selected_pid(void)
{
LVITEMW lvitem;
@@ -160,27 +130,6 @@ static int change_channel_CB(HANDLE hProcess, void* addr, struct __wine_debug_ch
return 1;
}
-static void* get_symbol(HANDLE hProcess, const char* name)
-{
- char buffer[sizeof(IMAGEHLP_SYMBOL) + 256];
- SYMBOL_INFO* si = (SYMBOL_INFO*)buffer;
- void* ret = NULL;
-
- /* also ask for wine extensions (loading symbols from ELF files) */
- pSymSetOptions(SYMOPT_DEFERRED_LOADS | SYMOPT_PUBLICS_ONLY | 0x40000000);
- /* FIXME: the TRUE option is due to the fact that dbghelp requires it
- * when loading an ELF module
- */
- if (pSymInitialize(hProcess, NULL, TRUE))
- {
- si->SizeOfStruct = sizeof(*si);
- si->MaxNameLen = sizeof(buffer) - sizeof(IMAGEHLP_SYMBOL);
- if (pSymFromName(hProcess, name, si))
- ret = (void*)(ULONG_PTR)si->Address;
- pSymCleanup(hProcess);
- }
- return ret;
-}
typedef int (*EnumChannelCB)(HANDLE, void*, struct __wine_debug_channel*, void*);
@@ -193,11 +142,16 @@ typedef int (*EnumChannelCB)(HANDLE, void*, struct __wine_debug_channel*, void*)
static int enum_channel(HANDLE hProcess, EnumChannelCB ce, void* user)
{
struct __wine_debug_channel channel;
+ PROCESS_BASIC_INFORMATION info;
int ret = 1;
void* addr;
- if (!(addr = get_symbol(hProcess, "libwine.so.1!debug_options"))) return -1;
-
+ NtQueryInformationProcess( hProcess, ProcessBasicInformation, &info, sizeof(info), NULL );
+#ifdef _WIN64
+ addr = (char *)info.PebBaseAddress + 0x2000;
+#else
+ addr = (char *)info.PebBaseAddress + 0x1000;
+#endif
while (ret && addr && ReadProcessMemory(hProcess, addr, &channel, sizeof(channel), NULL))
{
if (!channel.name[0]) break;
diff --git a/programs/taskmgr/procpage.c b/programs/taskmgr/procpage.c
index 5ea2e6b044f..baba6c6a06b 100644
--- a/programs/taskmgr/procpage.c
+++ b/programs/taskmgr/procpage.c
@@ -97,9 +97,6 @@ static void ProcessPageShowContextMenu(DWORD dwProcessId)
if (si.dwNumberOfProcessors < 2)
RemoveMenu(hSubMenu, ID_PROCESS_PAGE_SETAFFINITY, MF_BYCOMMAND);
-
- if (!AreDebugChannelsSupported())
- RemoveMenu(hSubMenu, ID_PROCESS_PAGE_DEBUGCHANNELS, MF_BYCOMMAND);
switch (dwProcessPriorityClass) {
case REALTIME_PRIORITY_CLASS:
diff --git a/programs/taskmgr/taskmgr.h b/programs/taskmgr/taskmgr.h
index ed220beebd2..b8c383d5f4d 100644
--- a/programs/taskmgr/taskmgr.h
+++ b/programs/taskmgr/taskmgr.h
@@ -157,8 +157,6 @@ LPWSTR GetLastErrorText( LPWSTR lpwszBuf, DWORD dwSize );
void OnAbout(void);
-BOOL AreDebugChannelsSupported(void);
-
void ProcessPage_OnSetAffinity(void);
void ProcessPage_OnDebug(void);
void ProcessPage_OnEndProcess(void);
More information about the wine-cvs
mailing list