Akihiro Sagawa : taskmgr: Show whether the process is running under WOW64.
Alexandre Julliard
julliard at winehq.org
Mon May 12 15:35:48 CDT 2014
Module: wine
Branch: master
Commit: 776849987d34a8c77fef97b07cbb79091c0d5e46
URL: http://source.winehq.org/git/wine.git/?a=commit;h=776849987d34a8c77fef97b07cbb79091c0d5e46
Author: Akihiro Sagawa <sagawa.aki at gmail.com>
Date: Sun May 11 23:54:29 2014 +0900
taskmgr: Show whether the process is running under WOW64.
---
programs/taskmgr/perfdata.c | 8 ++++++++
programs/taskmgr/perfdata.h | 2 ++
2 files changed, 10 insertions(+)
diff --git a/programs/taskmgr/perfdata.c b/programs/taskmgr/perfdata.c
index 110fe5a..aa19914 100644
--- a/programs/taskmgr/perfdata.c
+++ b/programs/taskmgr/perfdata.c
@@ -33,6 +33,7 @@
static PROCNTQSI pNtQuerySystemInformation = NULL;
static PROCGGR pGetGuiResources = NULL;
static PROCGPIC pGetProcessIoCounters = NULL;
+static PROCISW64 pIsWow64Process = NULL;
static CRITICAL_SECTION PerfDataCriticalSection;
static PPERFDATA pPerfDataOld = NULL; /* Older perf data (saved to establish delta values) */
static PPERFDATA pPerfData = NULL; /* Most recent copy of perf data */
@@ -60,6 +61,7 @@ BOOL PerfDataInitialize(void)
pNtQuerySystemInformation = (PROCNTQSI)GetProcAddress(GetModuleHandleW(wszNtdll), "NtQuerySystemInformation");
pGetGuiResources = (PROCGGR)GetProcAddress(GetModuleHandleW(wszUser32), "GetGuiResources");
pGetProcessIoCounters = (PROCGPIC)GetProcAddress(GetModuleHandleW(wszKernel32), "GetProcessIoCounters");
+ pIsWow64Process = (PROCISW64)GetProcAddress(GetModuleHandleW(wszKernel32), "IsWow64Process");
InitializeCriticalSection(&PerfDataCriticalSection);
@@ -296,6 +298,8 @@ void PerfDataRefresh(void)
}
if (pGetProcessIoCounters)
pGetProcessIoCounters(hProcess, &pPerfData[Idx].IOCounters);
+ if (pIsWow64Process)
+ pIsWow64Process(hProcess, &pPerfData[Idx].Wow64Process);
CloseHandle(hProcess);
}
pPerfData[Idx].UserTime.QuadPart = pSPI->UserTime.QuadPart;
@@ -331,12 +335,16 @@ ULONG PerfDataGetProcessorSystemUsage(void)
BOOL PerfDataGetImageName(ULONG Index, LPWSTR lpImageName, int nMaxCount)
{
+ static const WCHAR proc32W[] = {' ','*','3','2',0};
BOOL bSuccessful;
EnterCriticalSection(&PerfDataCriticalSection);
if (Index < ProcessCount) {
wcsncpy(lpImageName, pPerfData[Index].ImageName, nMaxCount);
+ if (pPerfData[Index].Wow64Process &&
+ nMaxCount - lstrlenW(lpImageName) > 4 /* =lstrlenW(proc32W) */)
+ lstrcatW(lpImageName, proc32W);
bSuccessful = TRUE;
} else {
bSuccessful = FALSE;
diff --git a/programs/taskmgr/perfdata.h b/programs/taskmgr/perfdata.h
index be6b819..d6a1602 100644
--- a/programs/taskmgr/perfdata.h
+++ b/programs/taskmgr/perfdata.h
@@ -47,6 +47,7 @@ typedef struct _PERFDATA
TIME UserTime;
TIME KernelTime;
+ BOOL Wow64Process;
} PERFDATA, *PPERFDATA;
/* SystemPageFileInformation (18) */
@@ -68,6 +69,7 @@ struct _SYSTEM_PAGEFILE_INFORMATION
typedef LONG (WINAPI *PROCNTQSI)(UINT,PVOID,ULONG,PULONG);
typedef DWORD (WINAPI *PROCGGR)(HANDLE,DWORD);
typedef BOOL (WINAPI *PROCGPIC)(HANDLE,PIO_COUNTERS);
+typedef BOOL (WINAPI *PROCISW64)(HANDLE,PBOOL);
BOOL PerfDataInitialize(void);
void PerfDataRefresh(void);
More information about the wine-cvs
mailing list