Salve amici, ho appena sfornato questo bel codice:
codice:
#include <Windows.h>
#include <Psapi.h>
#define MAX_LENGTH 1000
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd){
HANDLE handle;
DWORD ProcessesId[MAX_LENGTH];
DWORD ProcessesSize;
EnumProcesses(&ProcessesId[0], MAX_LENGTH, &ProcessesSize);
int i = (MAX_LENGTH - (INT)ProcessesSize) / sizeof(DWORD);
for( int x = 0; x < i ; x++ ){
// Faccio qualcosa con ProcessesId[x]
}
/* Non badate a questo */
handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 2780);
TerminateProcess(handle, 0);
/* ENon badate a questo */
return 0;
}
La mia domanda è la seguente: Per quale strano motivo, nonostante io vada a sottrarre la dimensione massima del mio array di DWORD (MAX_LENGTH) al numero di byte ritornati dalla funzione EnumProcess, e a dividere successivamente tutto per la dimensione di una singola cella dell'array, non ottengo il numero dei processi attualmente in esecuzione?
La controprova ce l'ho quando il debugger, al 69° processo, comincia letteralmente a dare i numeri (Come è giusto che sia) Considerando il valore della cella ProcessesId[70] e le successive, come cifre casuali (78586688) o un numero non del tutto dissimile a questo.
HELP?
Dopodichè, posso continuare postando un'altra domanda sempre relativa all'argomento?
Ovvero, cosa faccio una volta ottenuti i PID [ // Faccio qualcosa con ProcessesId[x] ]