🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #13462

Re: Win32API - Path van draaiende EXE's zien in Win2k ?

#13462
From: Luc Kumps
Date: Sat, 14 Jul 2001 07:36
130 lines
4780 bytes
1. Haal de process IDs op met EnumProcesses
2. Open elk proces met flag PROCESS_QUERY_INFORMATION | PROCESS_VM_READ
3. EnumProcessModules
4. Vind de filenaam m.b.v. GetModuleFileNameEx(), waarbij je de handle van
de eerste module doorgeeft

Hieronder vind je de code in C

Luc

#include <windows.h>
#include <stdio.h>
#include <psapi.h>

void main(void) {
  DWORD pIds[5000];
  DWORD cbNeeded;

  if (!EnumProcesses(pIds, sizeof(pIds), &cbNeeded)) {
    printf("EnumProcesses returned %d\n", GetLastError());
    exit(1);
  }
  int numProcs;

  printf("%d processes returned\n", numProcs=cbNeeded/sizeof(DWORD));
  for (int i=0;i<numProcs;i++) {
    printf("Process ID %d ---", pIds[i]);
    HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ , false, pIds[i]);
    if (hProcess==NULL) {
      printf("OpenProcess returned %d\n", GetLastError());
      continue;
    }
    HMODULE hModules[5000];
    if (!EnumProcessModules(hProcess, hModules, sizeof(hModules),
&cbNeeded)) {
      printf("EnumProcessModules returned %d\n", GetLastError());
      CloseHandle(hProcess);
      continue;
    }
    char fileName[5000];
    if (!GetModuleFileNameEx(hProcess, hModules[0], fileName,
sizeof(fileName))) {
      printf("GetModuleFileNameEx returned %d\n", GetLastError());
      exit(1);
    }
    printf("%s\n", fileName);
  }
}


"BuiZe" <news@buize.cjb.net> wrote in message
news:lzS37.6808$Xy1.1294140@afrodite.telenet-ops.be...
> Met onderstaande code enum ik de EXE-name van alle lopende programma's.
> In Win9x krijg ik dan volledig path + filename te zien, bijvoorbeeld :
> c:\windows\explorer.exe
>
> In Windows 2000 echter krijg ik enkel de EXE-name te zien:
> explorer.exe
>
> Is er *een* manier om toch het path te zien van die EXE's ?
>
> Dank bij voorbaat,
>
> BuiZe
>
>
> '----------------------------------------------
>
> Const MAX_PATH& = 260
>
> Type PROCESSENTRY32
>     dwSize As Long
>     cntUsage As Long
>     th32ProcessID As Long
>     th32DefaultHeapID As Long
>     th32ModuleID As Long
>     cntThreads As Long
>     th32ParentProcessID As Long
>     pcPriClassBase As Long
>     dwFlags As Long
>     szexeFile As String * MAX_PATH
> End Type
>
> Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias
> "CreateToolhelp32Snapshot" (ByVal lFlags As Long, lProcessID As Long) As
> Long
>
> Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As
Long
>
> Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal
> hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
>
> Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal
> hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
>
> '----------------------------------------------
>
> Sub EnumPrograms()
>
>     Dim uProcess As PROCESSENTRY32
>     Dim rProcessFound As Long
>     Dim hSnapshot As Long
>     Dim szExename As String
>     Dim i As Integer
>
>     Const TH32CS_SNAPPROCESS As Long = 2&
>
>     uProcess.dwSize = Len(uProcess)
>
>     hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)
>
>     rProcessFound = ProcessFirst(hSnapshot, uProcess)
>
>     Do While rProcessFound
>         i = InStr(1, uProcess.szexeFile, Chr(0))
>         szExename = LCase$(Left$(uProcess.szexeFile, i - 1))
>         List1.AddItem (szExename)
>         rProcessFound = ProcessNext(hSnapshot, uProcess)
>     Loop
>
>     Call CloseHandle(hSnapshot)
>
>
> End Sub
>
> '----------------------------------------------
>
>
Technical Details
Message-ID: <QDS37.6815$Xy1.1294932@afrodite.telenet-ops.be>
Path: arc1-ca.pugleaf.net!archiver1.google.com!newsfeed.google.com!sn-xit-02!supernews.com!news.tele.dk!193.190.198.17!newsfeeds.belnet.be!news.belnet.be!afrodite.telenet-ops.be!not-for-mail
References: <lzS37.6808$Xy1.1294140@afrodite.telenet-ops.be>

Show Full Headers
Complete Article Headers
X-Google-Language: ENGLISH,ASCII-7-bit
X-Google-Thread: 107324,25c10eea564a11e5
X-Google-Attributes: gid107324,public
X-Google-Thread: fcea4,25c10eea564a11e5
X-Google-Attributes: gidfcea4,public
X-Google-ArrivalTime: 2001-07-14 00:38:27 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!newsfeed.google.com!sn-xit-02!supernews.com!news.tele.dk!193.190.198.17!newsfeeds.belnet.be!news.belnet.be!afrodite.telenet-ops.be!not-for-mail
From: "Luc Kumps" <NOkumpsSPAM@pandora.be>
Newsgroups: be.comp.programming,nl.comp.programmeren
References: <lzS37.6808$Xy1.1294140@afrodite.telenet-ops.be>
Subject: Re: Win32API - Path van draaiende EXE's zien in Win2k ?
Lines: 132
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 5.50.4133.2400
X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4133.2400
Message-ID: <QDS37.6815$Xy1.1294932@afrodite.telenet-ops.be>
Date: Sat, 14 Jul 2001 07:36:16 GMT
NNTP-Posting-Host: 213.118.65.188
X-Complaints-To: abuse@pandora.be
X-Trace: afrodite.telenet-ops.be 995096176 213.118.65.188 (Sat, 14 Jul 2001 09:36:16 MET DST)
NNTP-Posting-Date: Sat, 14 Jul 2001 09:36:16 MET DST
Organization: Telenet Internet