# ASM - Strukturprob



## Akilein (2. März 2006)

```
.386
.model flat, stdcall
	
	option casemap: none
	include c:\masm32\include\kernel32.inc
	include c:\masm32\include\user32.inc
	include c:\masm32\include\windows.inc
	includelib c:\masm32\lib\kernel32.lib
	includelib c:\masm32\lib\user32.lib

.data?
	hInstance 	dd ?
	hIcon	  	dd ?
	hCursor	 	dd ?
	hSnapshot	dd ?
	processentry PROCESSENTRY32 <>
	

.code
start:	invoke GetModuleHandle, NULL
	mov hInstance, eax
	invoke LoadIcon, hInstance, IDI_APPLICATION
	mov hIcon, eax
	invoke LoadCursor, NULL, IDC_ARROW
	mov hCursor, eax

	invoke CreateToolhelp32Snapshot, TH32CS_SNAPPROCESS, NULL
	mov hSnapshot, eax
	invoke Process32First, hSnapshot, addr processentry
juhu:	invoke MessageBox, 0, addr processentry.szExeFile, addr processentry.szExeFile, MB_OK
	invoke Process32Next, hSnapshot, addr processentry
	cmp eax, 0
	jne juhu
	invoke CloseHandle, hSnapshot

	invoke ExitProcess, eax
end start
```

wer kann mir sagen, was der Fehler ist? über eine Funktion und LOCAL processentryROCESSENTRY32 ... funktionierts ... ich will es aber halt nicht über eine Funktion machen und auch nicht mit einer localen Variable ... thx


----------



## Matthias Reitinger (2. März 2006)

Wie wäre es mit ein paar mehr Infos? Was soll erreicht werden? Was genau funktioniert nicht? Wie äußert sich das?


----------



## Akilein (2. März 2006)

Hi,
es sollten alle Processe, die gerade laufen, nacheinander per Meldung ausgegeben werden ... ihre Exe-Namen zumindest
die Struktur PROCESSENTRY32 findet man in der windows.inc

wenn ich das ganze in eine Funktion verpacke und PROCESSENTRY32 dort innerhalb der Funktion und nicht oben mittels "LOCAL processentryROCESSENTRY32" deklaniere, funktioniert alles wunderbar ... wenn ich LOCAL wegnehme, kann ich die Datei schon mal nicht compilieren, was ich auch nicht verstehe, weil LOCAL heißt ja nur, dass die damit deklanierten Variablen, nur innerhalb dieser Funktion funktionieren sollen, wenn ich also LOCAL wegnehme, sollte noch alles funktionieren oder hab ich da etwas falsch verstanden?
auf jeden Fall, wenn ich versuche PROCESSENTRY32 oben bei .data? oder .data zu deklanieren, dann kann ich meine DAtei zwar comilieren, aber es wird lediglich eine einzige Meldung ausgegeben und die Funktion Process32First bzw. Process32Next gibt einen Fehler zurück ... ich schleiße darauß, dass ich irgendwas mit der Struktur falsch mache, denn wenn es innerhalb einer Funktion mit LOCAL funktioniert ... thx


----------



## Matthias Reitinger (2. März 2006)

Füg mal vor dem ersten Aufruf von Process32First noch ein mov processentry.dwSize, sizeof PROCESSENTRY32 ein, das sollte helfen.


----------

