From 36ec703c2f06dbb8ff289962d23fde0473f99f3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torbj=C3=B6rn=20Svensson?= Date: Mon, 29 Jun 2020 20:59:38 +0200 Subject: [PATCH] Bug 521515 - List running tasks using JNA on win32 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As Eclipse only support 64-bit JRE on Windows, some legacy support has been dropped. * Dropped support for listing 16-bit applications using NTVDM.EXE process (was only supported on 32-bit WinNT based systems). * Dropped support for listing processes on non-WinNT based systems (Windows 9x/ME is 32-bit only). Signed-off-by: Torbjörn Svensson Change-Id: Ib827de6510a342c0de5c6eaca68a944b2f1d641e --- .../os/win32/x86_64/listtasks.exe | Bin 165888 -> 0 bytes .../META-INF/MANIFEST.MF | 2 + .../library/Makefile_x86_64.mk | 14 +- .../library/listtasks/StdAfx.cpp | 21 -- .../library/listtasks/StdAfx.h | 32 -- .../library/listtasks/listtasks.cpp | 349 ------------------ .../library/listtasks/listtasks.dsp | 117 ------ .../library/listtasks/listtasks.dsw | 29 -- .../library/listtasks/listtasks.h | 25 -- .../cdt/internal/core/win32/ProcessList.java | 146 ++++---- 10 files changed, 81 insertions(+), 654 deletions(-) delete mode 100755 core/org.eclipse.cdt.core.win32.x86_64/os/win32/x86_64/listtasks.exe delete mode 100644 core/org.eclipse.cdt.core.win32/library/listtasks/StdAfx.cpp delete mode 100644 core/org.eclipse.cdt.core.win32/library/listtasks/StdAfx.h delete mode 100644 core/org.eclipse.cdt.core.win32/library/listtasks/listtasks.cpp delete mode 100644 core/org.eclipse.cdt.core.win32/library/listtasks/listtasks.dsp delete mode 100644 core/org.eclipse.cdt.core.win32/library/listtasks/listtasks.dsw delete mode 100644 core/org.eclipse.cdt.core.win32/library/listtasks/listtasks.h diff --git a/core/org.eclipse.cdt.core.win32.x86_64/os/win32/x86_64/listtasks.exe b/core/org.eclipse.cdt.core.win32.x86_64/os/win32/x86_64/listtasks.exe deleted file mode 100755 index 56630eacb6245d8a4f0036ce2388b53cfaa82144..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165888 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

HQNMuLC)NVdHiSwotK}7>8S}4+&I_+l|ESQ`OCu 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

NPy#La%|F6m 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 Rk>>mA_^JlJssUXC{{`v!d+Y!J diff --git a/core/org.eclipse.cdt.core.win32/META-INF/MANIFEST.MF b/core/org.eclipse.cdt.core.win32/META-INF/MANIFEST.MF index c7552b26a3e..44e5fb77cb9 100644 --- a/core/org.eclipse.cdt.core.win32/META-INF/MANIFEST.MF +++ b/core/org.eclipse.cdt.core.win32/META-INF/MANIFEST.MF @@ -9,3 +9,5 @@ Bundle-Localization: plugin Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Eclipse-PlatformFilter: (osgi.os=win32) Automatic-Module-Name: org.eclipse.cdt.core.win32 +Require-Bundle: com.sun.jna;bundle-version="4.5.1", + com.sun.jna.platform;bundle-version="4.5.1" diff --git a/core/org.eclipse.cdt.core.win32/library/Makefile_x86_64.mk b/core/org.eclipse.cdt.core.win32/library/Makefile_x86_64.mk index 55609bf9911..1d8d016f8c3 100644 --- a/core/org.eclipse.cdt.core.win32/library/Makefile_x86_64.mk +++ b/core/org.eclipse.cdt.core.win32/library/Makefile_x86_64.mk @@ -36,19 +36,12 @@ OBJS_WINREG=winreg/winreg.obj EXE_STARTER = starter.exe OBJS_STARTER=starter/starter.obj -EXE_LISTTASKS = listtasks.exe -OBJS_LISTTASKS=listtasks/listtasks.obj listtasks/StdAfx.obj - .c.obj: cl /c $(CFLAGS_UNICODE) $*.c /Fo$@ .cpp.obj: cl /c $(CFLAGS_UNICODE) $*.cpp /Fo$@ -#TODO: Use unicode for listtasks, see bug 353460 -listtasks/listtasks.obj: - cl /c $(CFLAGS) $*.cpp /Fo$@ - spawner: $(OBJS_SPAWNER) link /dll /nologo /out:$(DLL_SPAWNER) $(OBJS_SPAWNER) User32.lib @@ -58,13 +51,10 @@ winreg: $(OBJS_WINREG) starter: $(OBJS_STARTER) link /nologo /out:$(EXE_STARTER) $(OBJS_STARTER) Psapi.Lib Shell32.lib -listtasks: $(OBJS_LISTTASKS) - link /nologo /out:$(EXE_LISTTASKS) $(OBJS_LISTTASKS) Psapi.Lib - -all: spawner winreg starter listtasks +all: spawner winreg starter clean: - del *.obj *.lib *.exp *.exe *.dll winreg\*.obj starter\*.obj listtasks\*.obj + del *.obj *.lib *.exp *.exe *.dll winreg\*.obj starter\*.obj rebuild: clean all diff --git a/core/org.eclipse.cdt.core.win32/library/listtasks/StdAfx.cpp b/core/org.eclipse.cdt.core.win32/library/listtasks/StdAfx.cpp deleted file mode 100644 index 7a38423ac3e..00000000000 --- a/core/org.eclipse.cdt.core.win32/library/listtasks/StdAfx.cpp +++ /dev/null @@ -1,21 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2002 - 2005 QNX Software Systems and others. - * - * This program and the accompanying materials - * are made available under the terms of the Eclipse Public License 2.0 - * which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * QNX Software Systems - initial API and implementation - *******************************************************************************/ -// stdafx.cpp : source file that includes just the standard includes -// ProcList.pch will be the pre-compiled header -// stdafx.obj will contain the pre-compiled type information - -#include "stdafx.h" - -// TODO: reference any additional headers you need in STDAFX.H -// and not in this file diff --git a/core/org.eclipse.cdt.core.win32/library/listtasks/StdAfx.h b/core/org.eclipse.cdt.core.win32/library/listtasks/StdAfx.h deleted file mode 100644 index 19ba7b65b6e..00000000000 --- a/core/org.eclipse.cdt.core.win32/library/listtasks/StdAfx.h +++ /dev/null @@ -1,32 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2002 - 2005 QNX Software Systems and others. - * - * This program and the accompanying materials - * are made available under the terms of the Eclipse Public License 2.0 - * which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * QNX Software Systems - initial API and implementation - *******************************************************************************/ -// stdafx.h : include file for standard system include files, -// or project specific include files that are used frequently, but -// are changed infrequently -// - -#if !defined(AFX_STDAFX_H__CB3B970F_AA1A_4B59_9F98_DDBEA28470AF__INCLUDED_) -#define AFX_STDAFX_H__CB3B970F_AA1A_4B59_9F98_DDBEA28470AF__INCLUDED_ - -#if _MSC_VER > 1000 -#pragma once -#endif // _MSC_VER > 1000 - - -// TODO: reference additional headers your program requires here - -//{{AFX_INSERT_LOCATION}} -// Microsoft Visual C++ will insert additional declarations immediately before the previous line. - -#endif // !defined(AFX_STDAFX_H__CB3B970F_AA1A_4B59_9F98_DDBEA28470AF__INCLUDED_) diff --git a/core/org.eclipse.cdt.core.win32/library/listtasks/listtasks.cpp b/core/org.eclipse.cdt.core.win32/library/listtasks/listtasks.cpp deleted file mode 100644 index 447406b9d13..00000000000 --- a/core/org.eclipse.cdt.core.win32/library/listtasks/listtasks.cpp +++ /dev/null @@ -1,349 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2002, 2011 QNX Software Systems and others. - * - * This program and the accompanying materials - * are made available under the terms of the Eclipse Public License 2.0 - * which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * QNX Software Systems - initial API and implementation - *******************************************************************************/ -// ProcList.cpp : Defines the entry point for the console application. -// - -#include "stdafx.h" - -#include "listtasks.h" -#include -#include -#include -#include - -using namespace std; - -typedef struct -{ - DWORD dwPID ; - PROCENUMPROC lpProc ; - DWORD lParam ; - BOOL bEnd ; -} EnumInfoStruct ; - -BOOL WINAPI Enum16( DWORD dwThreadId, WORD hMod16, WORD hTask16, - PSZ pszModName, PSZ pszFileName, LPARAM lpUserDefined ) ; - -BOOL CALLBACK OutProcInfo( DWORD pid, WORD, LPSTR procName, LPARAM ) ; - -int main(int argc, char* argv[]) -{ - EnumProcs(OutProcInfo, 0); - return 0; -} - - - -/********************* -EnumProc.cpp -*********************/ - -// The EnumProcs function takes a pointer to a callback function -// that will be called once per process in the system providing -// process EXE filename and process ID. -// Callback function definition: -// BOOL CALLBACK Proc( DWORD dw, LPCSTR lpstr, LPARAM lParam ) ; -// -// lpProc -- Address of callback routine. -// -// lParam -- A user-defined LPARAM value to be passed to -// the callback routine. -BOOL WINAPI EnumProcs( PROCENUMPROC lpProc, LPARAM lParam ) -{ - OSVERSIONINFO osver ; - HINSTANCE hInstLib ; - HINSTANCE hInstLib2 ; - HANDLE hSnapShot ; - PROCESSENTRY32 procentry ; - BOOL bFlag ; - LPDWORD lpdwPIDs ; - DWORD dwSize, dwSize2, dwIndex ; - HMODULE hMod ; - HANDLE hProcess ; - char szFileName[ MAX_PATH ] ; - EnumInfoStruct sInfo ; - - // ToolHelp Function Pointers. - HANDLE (WINAPI *lpfCreateToolhelp32Snapshot)(DWORD,DWORD) ; - BOOL (WINAPI *lpfProcess32First)(HANDLE,LPPROCESSENTRY32) ; - BOOL (WINAPI *lpfProcess32Next)(HANDLE,LPPROCESSENTRY32) ; - - // PSAPI Function Pointers. - BOOL (WINAPI *lpfEnumProcesses)( DWORD *, DWORD cb, DWORD * ); - BOOL (WINAPI *lpfEnumProcessModules)( HANDLE, HMODULE *, - DWORD, LPDWORD ); - DWORD (WINAPI *lpfGetModuleFileNameEx)( HANDLE, HMODULE, - LPTSTR, DWORD ); - - // VDMDBG Function Pointers. - INT (WINAPI *lpfVDMEnumTaskWOWEx)( DWORD, - TASKENUMPROCEX fp, LPARAM ); - - - // Check to see if were running under Windows95 or - // Windows NT. - osver.dwOSVersionInfoSize = sizeof( osver ) ; - if( !GetVersionEx( &osver ) ) - { - return FALSE ; - } - - // If Windows NT: - if( osver.dwPlatformId == VER_PLATFORM_WIN32_NT ) - { - - // Load library and get the procedures explicitly. We do - // this so that we don't have to worry about modules using - // this code failing to load under Windows 95, because - // it can't resolve references to the PSAPI.DLL. - hInstLib = LoadLibraryA( "PSAPI.DLL" ) ; - if( hInstLib == NULL ) - return FALSE ; - - SYSTEM_INFO systemInfo; - - GetSystemInfo(&systemInfo); - bool isWin64 = systemInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64; - - if(!isWin64) - { - hInstLib2 = LoadLibraryA( "VDMDBG.DLL" ) ; - if( hInstLib2 == NULL ) - return FALSE ; - } - - // Get procedure addresses. - lpfEnumProcesses = (BOOL(WINAPI *)(DWORD *,DWORD,DWORD*)) - GetProcAddress( hInstLib, "EnumProcesses" ) ; - lpfEnumProcessModules = (BOOL(WINAPI *)(HANDLE, HMODULE *, - DWORD, LPDWORD)) GetProcAddress( hInstLib, - "EnumProcessModules" ) ; - lpfGetModuleFileNameEx =(DWORD (WINAPI *)(HANDLE, HMODULE, - LPTSTR, DWORD )) GetProcAddress( hInstLib, - "GetModuleFileNameExA" ) ; - if(!isWin64) - { - lpfVDMEnumTaskWOWEx =(INT(WINAPI *)( DWORD, TASKENUMPROCEX, - LPARAM))GetProcAddress( hInstLib2, "VDMEnumTaskWOWEx" ); - } - if( lpfEnumProcesses == NULL || - lpfEnumProcessModules == NULL || - lpfGetModuleFileNameEx == NULL || - (!isWin64 && lpfVDMEnumTaskWOWEx == NULL)) - { - FreeLibrary( hInstLib ) ; - if(!isWin64) - { - FreeLibrary( hInstLib2 ) ; - } - return FALSE ; - } - - // Call the PSAPI function EnumProcesses to get all of the - // ProcID's currently in the system. - // NOTE: In the documentation, the third parameter of - // EnumProcesses is named cbNeeded, which implies that you - // can call the function once to find out how much space to - // allocate for a buffer and again to fill the buffer. - // This is not the case. The cbNeeded parameter returns - // the number of PIDs returned, so if your buffer size is - // zero cbNeeded returns zero. - // NOTE: The "HeapAlloc" loop here ensures that we - // actually allocate a buffer large enough for all the - // PIDs in the system. - dwSize2 = 256 * sizeof( DWORD ) ; - lpdwPIDs = NULL ; - do - { - if( lpdwPIDs ) - { - HeapFree( GetProcessHeap(), 0, lpdwPIDs ) ; - dwSize2 *= 2 ; - } - lpdwPIDs = (LPDWORD)HeapAlloc( GetProcessHeap(), 0, dwSize2 ); - if( lpdwPIDs == NULL ) - { - FreeLibrary( hInstLib ) ; - if(!isWin64) - { - FreeLibrary( hInstLib2 ) ; - } - return FALSE ; - } - if( !lpfEnumProcesses( lpdwPIDs, dwSize2, &dwSize ) ) - { - HeapFree( GetProcessHeap(), 0, lpdwPIDs ) ; - FreeLibrary( hInstLib ) ; - if(!isWin64) - { - FreeLibrary( hInstLib2 ) ; - } - return FALSE ; - } - }while( dwSize == dwSize2 ) ; - - // How many ProcID's did we get? - dwSize /= sizeof( DWORD ) ; - - // Loop through each ProcID. - for( dwIndex = 0 ; dwIndex < dwSize ; dwIndex++ ) - { - szFileName[0] = 0 ; - // Open the process (if we can... security does not - // permit every process in the system). - hProcess = OpenProcess( - PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, - FALSE, lpdwPIDs[ dwIndex ] ) ; - if( hProcess != NULL ) - { - // Here we call EnumProcessModules to get only the - // first module in the process this is important, - // because this will be the .EXE module for which we - // will retrieve the full path name in a second. - if( lpfEnumProcessModules( hProcess, &hMod, - sizeof( hMod ), &dwSize2 ) ) - { - // Get Full pathname: - if( !lpfGetModuleFileNameEx( hProcess, hMod, - szFileName, sizeof( szFileName ) ) ) - { - szFileName[0] = 0 ; - } - } - CloseHandle( hProcess ) ; - } - // Regardless of OpenProcess success or failure, we - // still call the enum func with the ProcID. - if(!lpProc( lpdwPIDs[dwIndex], 0, szFileName, lParam)) - break ; - - // Did we just bump into an NTVDM? - if(!isWin64 && _stricmp( szFileName+(strlen(szFileName)-9), - "NTVDM.EXE")==0) - { - // Fill in some info for the 16-bit enum proc. - sInfo.dwPID = lpdwPIDs[dwIndex] ; - sInfo.lpProc = lpProc ; - sInfo.lParam = lParam ; - sInfo.bEnd = FALSE ; - // Enum the 16-bit stuff. - lpfVDMEnumTaskWOWEx( lpdwPIDs[dwIndex], - (TASKENUMPROCEX) Enum16, - (LPARAM) &sInfo); - - // Did our main enum func say quit? - if(sInfo.bEnd) - break ; - } - } - - HeapFree( GetProcessHeap(), 0, lpdwPIDs ) ; - if(!isWin64) - { - FreeLibrary( hInstLib2 ) ; - } - - // If Windows 95: - }else if( osver.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS ) - { - - - hInstLib = LoadLibraryA( "Kernel32.DLL" ) ; - if( hInstLib == NULL ) - return FALSE ; - - // Get procedure addresses. - // We are linking to these functions of Kernel32 - // explicitly, because otherwise a module using - // this code would fail to load under Windows NT, - // which does not have the Toolhelp32 - // functions in the Kernel 32. - lpfCreateToolhelp32Snapshot= - (HANDLE(WINAPI *)(DWORD,DWORD)) - GetProcAddress( hInstLib, - "CreateToolhelp32Snapshot" ) ; - lpfProcess32First= - (BOOL(WINAPI *)(HANDLE,LPPROCESSENTRY32)) - GetProcAddress( hInstLib, "Process32First" ) ; - lpfProcess32Next= - (BOOL(WINAPI *)(HANDLE,LPPROCESSENTRY32)) - GetProcAddress( hInstLib, "Process32Next" ) ; - if( lpfProcess32Next == NULL || - lpfProcess32First == NULL || - lpfCreateToolhelp32Snapshot == NULL ) - { - FreeLibrary( hInstLib ) ; - return FALSE ; - } - - // Get a handle to a Toolhelp snapshot of the systems - // processes. - hSnapShot = lpfCreateToolhelp32Snapshot( - TH32CS_SNAPPROCESS, 0 ) ; - if( hSnapShot == INVALID_HANDLE_VALUE ) - { - FreeLibrary( hInstLib ) ; - return FALSE ; - } - - // Get the first process' information. - procentry.dwSize = sizeof(PROCESSENTRY32) ; - bFlag = lpfProcess32First( hSnapShot, &procentry ) ; - - // While there are processes, keep looping. - while( bFlag ) - { - // Call the enum func with the filename and ProcID. - if(lpProc( procentry.th32ProcessID, 0, - procentry.szExeFile, lParam )) - { - procentry.dwSize = sizeof(PROCESSENTRY32) ; - bFlag = lpfProcess32Next( hSnapShot, &procentry ); - }else - bFlag = FALSE ; - } - - - }else - return FALSE ; - - // Free the library. - FreeLibrary( hInstLib ) ; - - return TRUE ; -} - -BOOL WINAPI Enum16( DWORD dwThreadId, WORD hMod16, WORD hTask16, - PSZ pszModName, PSZ pszFileName, LPARAM lpUserDefined ) -{ - BOOL bRet ; - - EnumInfoStruct *psInfo = (EnumInfoStruct *)lpUserDefined ; - - bRet = psInfo->lpProc( psInfo->dwPID, hTask16, pszFileName, - psInfo->lParam ) ; - - if(!bRet) - { - psInfo->bEnd = TRUE ; - } - - return !bRet; -} - -BOOL CALLBACK OutProcInfo( DWORD pid, WORD, LPSTR procName, LPARAM ) -{ - cout << setw(10) << pid << '\t' << procName << '\n'; - return TRUE; -} diff --git a/core/org.eclipse.cdt.core.win32/library/listtasks/listtasks.dsp b/core/org.eclipse.cdt.core.win32/library/listtasks/listtasks.dsp deleted file mode 100644 index da100f1a4e5..00000000000 --- a/core/org.eclipse.cdt.core.win32/library/listtasks/listtasks.dsp +++ /dev/null @@ -1,117 +0,0 @@ -# Microsoft Developer Studio Project File - Name="listtasks" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=listtasks - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "listtasks.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "listtasks.mak" CFG="listtasks - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "listtasks - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "listtasks - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "listtasks - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /c -# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 - -!ELSEIF "$(CFG)" == "listtasks - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept - -!ENDIF - -# Begin Target - -# Name "listtasks - Win32 Release" -# Name "listtasks - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\listtasks.cpp -# End Source File -# Begin Source File - -SOURCE=.\StdAfx.cpp -# ADD CPP /Yc"stdafx.h" -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=.\listtasks.h -# End Source File -# Begin Source File - -SOURCE=.\StdAfx.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# Begin Source File - -SOURCE=.\ReadMe.txt -# End Source File -# End Target -# End Project diff --git a/core/org.eclipse.cdt.core.win32/library/listtasks/listtasks.dsw b/core/org.eclipse.cdt.core.win32/library/listtasks/listtasks.dsw deleted file mode 100644 index 914555a178f..00000000000 --- a/core/org.eclipse.cdt.core.win32/library/listtasks/listtasks.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "listtasks"=.\listtasks.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/core/org.eclipse.cdt.core.win32/library/listtasks/listtasks.h b/core/org.eclipse.cdt.core.win32/library/listtasks/listtasks.h deleted file mode 100644 index b2b12b52e77..00000000000 --- a/core/org.eclipse.cdt.core.win32/library/listtasks/listtasks.h +++ /dev/null @@ -1,25 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2002 - 2005 QNX Software Systems and others. - * - * This program and the accompanying materials - * are made available under the terms of the Eclipse Public License 2.0 - * which accompanies this distribution, and is available at - * https://www.eclipse.org/legal/epl-2.0/ - * - * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * QNX Software Systems - initial API and implementation - *******************************************************************************/ -#include - -#ifndef __LISTTASKS_H -#define __LISTTASKS_H - -typedef BOOL (CALLBACK *PROCENUMPROC)( DWORD, WORD, LPSTR, - LPARAM ) ; - -BOOL WINAPI EnumProcs( PROCENUMPROC lpProc, LPARAM lParam ) ; - - -#endif \ No newline at end of file diff --git a/core/org.eclipse.cdt.core.win32/src/org/eclipse/cdt/internal/core/win32/ProcessList.java b/core/org.eclipse.cdt.core.win32/src/org/eclipse/cdt/internal/core/win32/ProcessList.java index b96aff4047e..ba3af06c6c2 100644 --- a/core/org.eclipse.cdt.core.win32/src/org/eclipse/cdt/internal/core/win32/ProcessList.java +++ b/core/org.eclipse.cdt.core.win32/src/org/eclipse/cdt/internal/core/win32/ProcessList.java @@ -14,91 +14,99 @@ *******************************************************************************/ package org.eclipse.cdt.internal.core.win32; -import java.io.BufferedReader; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.URL; import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import org.eclipse.cdt.core.IProcessInfo; import org.eclipse.cdt.core.IProcessList; -import org.eclipse.cdt.internal.core.natives.CNativePlugin; -import org.eclipse.cdt.utils.spawner.ProcessFactory; -import org.eclipse.core.runtime.FileLocator; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.Platform; -import org.osgi.framework.Bundle; -/* - * Currently this will only work for Windows XP since tasklist - * is only shipped on XP. This could change to some JNI - * call out to get the list since the source to 'tlist' is - * on the msdn web site but that can be done later. - */ +import com.sun.jna.Native; +import com.sun.jna.platform.win32.Kernel32; +import com.sun.jna.platform.win32.Win32Exception; +import com.sun.jna.platform.win32.WinDef.DWORD; +import com.sun.jna.platform.win32.WinNT; +import com.sun.jna.platform.win32.WinNT.HANDLE; +import com.sun.jna.ptr.IntByReference; +import com.sun.jna.win32.W32APIOptions; public class ProcessList implements IProcessList { + // TODO: Remove this inner class when JNA 5.6 is available + private static abstract class PsapiUtil { + public interface Psapi extends com.sun.jna.platform.win32.Psapi { + Psapi INSTANCE = Native.loadLibrary("psapi", Psapi.class, W32APIOptions.DEFAULT_OPTIONS); //$NON-NLS-1$ + + boolean EnumProcesses(int[] lpidProcess, int cb, IntByReference lpcbNeeded); + } + + public static int[] enumProcesses() { + int size = 0; + int[] lpidProcess = null; + IntByReference lpcbNeeded = new IntByReference(); + do { + size += 1024; + lpidProcess = new int[size]; + if (!Psapi.INSTANCE.EnumProcesses(lpidProcess, size * DWORD.SIZE, lpcbNeeded)) { + throw new Win32Exception(Kernel32.INSTANCE.GetLastError()); + } + } while (size == lpcbNeeded.getValue() / DWORD.SIZE); + + return Arrays.copyOf(lpidProcess, lpcbNeeded.getValue() / DWORD.SIZE); + } + } + + // TODO: Remove this inner class when JNA 5.6 is available + private static abstract class Kernel32Util extends com.sun.jna.platform.win32.Kernel32Util { + public static final String QueryFullProcessImageName(int pid, int dwFlags) { + HANDLE hProcess = null; + Win32Exception we = null; + + try { + hProcess = Kernel32.INSTANCE.OpenProcess(WinNT.PROCESS_QUERY_INFORMATION | WinNT.PROCESS_VM_READ, false, + pid); + if (hProcess == null) { + throw new Win32Exception(Kernel32.INSTANCE.GetLastError()); + } + return QueryFullProcessImageName(hProcess, dwFlags); + } catch (Win32Exception e) { + we = e; + throw we; // re-throw to invoke finally block + } finally { + try { + closeHandle(hProcess); + } catch (Win32Exception e) { + if (we == null) { + we = e; + } else { + we.addSuppressed(e); + } + } + if (we != null) { + throw we; + } + } + } + } private IProcessInfo[] NOPROCESS = new IProcessInfo[0]; @Override public IProcessInfo[] getProcessList() { - Process p = null; - String command = null; - InputStream in = null; - Bundle bundle = Platform.getBundle(CNativePlugin.PLUGIN_ID); - IProcessInfo[] procInfos = NOPROCESS; - try { - URL url = FileLocator.find(bundle, new Path("$os$/listtasks.exe"), null); //$NON-NLS-1$ - if (url != null) { - url = FileLocator.resolve(url); - String path = url.getFile(); - File file = new File(path); - if (file.exists()) { - command = file.getCanonicalPath(); - if (command != null) { - try { - p = ProcessFactory.getFactory().exec(command); - in = p.getInputStream(); - InputStreamReader reader = new InputStreamReader(in); - procInfos = parseListTasks(reader); - } finally { - if (in != null) - in.close(); - if (p != null) - p.destroy(); - } - } + List processList = new ArrayList<>(); + + for (int pid : PsapiUtil.enumProcesses()) { + try { + String name = Kernel32Util.QueryFullProcessImageName(pid, 0); + processList.add(new ProcessInfo(pid, name)); + } catch (Win32Exception e) { + // Intentionally ignored exception. Probable cause is access denied. } } - } catch (IOException e) { - } - return procInfos; - } - public IProcessInfo[] parseListTasks(InputStreamReader reader) { - BufferedReader br = new BufferedReader(reader); - ArrayList processList = new ArrayList(); - try { - String line; - while ((line = br.readLine()) != null) { - int tab = line.indexOf('\t'); - if (tab != -1) { - String proc = line.substring(0, tab).trim(); - String name = line.substring(tab).trim(); - if (proc.length() > 0 && name.length() > 0) { - try { - int pid = Integer.parseInt(proc); - processList.add(new ProcessInfo(pid, name)); - } catch (NumberFormatException e) { - } - } - } - } - } catch (IOException e) { + return processList.toArray(new IProcessInfo[processList.size()]); + } catch (Win32Exception e) { + return NOPROCESS; } - return (IProcessInfo[]) processList.toArray(new IProcessInfo[processList.size()]); } }