Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Applied: CDT_1_1 Fix attaching for Windows PR 27152

Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.win32/ChangeLog,v
retrieving revision 1.11
diff -u -r1.11 ChangeLog
--- ChangeLog	30 Apr 2003 16:06:25 -0000	1.11
+++ ChangeLog	30 Apr 2003 18:06:39 -0000
@@ -1,3 +1,14 @@
+2003-04-30 Alex Chapiro
+
+	* library/listtasks: new Folder
+	* library/listtasks/listtasks.cpp: New file.
+	* library/listtasks/listtasks.dsp: New file.
+	* library/listtasks/listtasks.dsw: New file.
+	* library/listtasks/listtasks.h: New file.
+	* library/listtasks/StdAfx.cpp: New file.
+	* library/listtasks/StdAfx.h: New file.
+	* os/win32/x86/listtasks.exe: Rebuild
+
 2003-04-30 Alain Magloire
 
 	* src/org/eclipse/cdt/internal/core/win32/ProcessList.java (parseTaskList):
Index: library/listtasks/StdAfx.cpp
===================================================================
RCS file: library/listtasks/StdAfx.cpp
diff -N library/listtasks/StdAfx.cpp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ library/listtasks/StdAfx.cpp	30 Apr 2003 18:06:39 -0000
@@ -0,0 +1,8 @@
+// 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
Index: library/listtasks/StdAfx.h
===================================================================
RCS file: library/listtasks/StdAfx.h
diff -N library/listtasks/StdAfx.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ library/listtasks/StdAfx.h	30 Apr 2003 18:06:39 -0000
@@ -0,0 +1,19 @@
+// 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_)
Index: library/listtasks/listtasks.cpp
===================================================================
RCS file: library/listtasks/listtasks.cpp
diff -N library/listtasks/listtasks.cpp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ library/listtasks/listtasks.cpp	30 Apr 2003 18:06:39 -0000
@@ -0,0 +1,313 @@
+// ProcList.cpp : Defines the entry point for the console application.
+//
+
+#include "stdafx.h"
+
+#include "listtasks.h"
+#include <tlhelp32.h>
+#include <vdmdbg.h>
+#include <iostream>
+#include <iomanip>
+
+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 ;
+
+     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" ) ;
+     lpfVDMEnumTaskWOWEx =(INT(WINAPI *)( DWORD, TASKENUMPROCEX,
+        LPARAM))GetProcAddress( hInstLib2, "VDMEnumTaskWOWEx" );
+     if( lpfEnumProcesses == NULL ||
+        lpfEnumProcessModules == NULL ||
+        lpfGetModuleFileNameEx == NULL ||
+        lpfVDMEnumTaskWOWEx == NULL)
+        {
+           FreeLibrary( hInstLib ) ;
+           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 ) ;
+           FreeLibrary( hInstLib2 ) ;
+           return FALSE ;
+        }
+        if( !lpfEnumProcesses( lpdwPIDs, dwSize2, &dwSize ) )
+        {
+           HeapFree( GetProcessHeap(), 0, lpdwPIDs ) ;
+           FreeLibrary( hInstLib ) ;
+           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( _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 ) ;
+     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;
+}
Index: library/listtasks/listtasks.dsp
===================================================================
RCS file: library/listtasks/listtasks.dsp
diff -N library/listtasks/listtasks.dsp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ library/listtasks/listtasks.dsp	30 Apr 2003 18:06:39 -0000
@@ -0,0 +1,117 @@
+# 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
Index: library/listtasks/listtasks.dsw
===================================================================
RCS file: library/listtasks/listtasks.dsw
diff -N library/listtasks/listtasks.dsw
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ library/listtasks/listtasks.dsw	30 Apr 2003 18:06:39 -0000
@@ -0,0 +1,29 @@
+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>
+{{{
+}}}
+
+###############################################################################
+
Index: library/listtasks/listtasks.h
===================================================================
RCS file: library/listtasks/listtasks.h
diff -N library/listtasks/listtasks.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ library/listtasks/listtasks.h	30 Apr 2003 18:06:39 -0000
@@ -0,0 +1,12 @@
+#include <windows.h>
+
+#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
Index: os/win32/x86/listtasks.exe
===================================================================
RCS file: os/win32/x86/listtasks.exe
diff -N os/win32/x86/listtasks.exe
Binary files /dev/null and listtasks.exe differ



Back to the top