Entwickler-Ecke

Windows API - Problem mit TMemory Stream


XtrmK3v0r - Do 20.02.03 19:07
Titel: Problem mit TMemory Stream
Hi! Ich hab da ein Problem mit dem MemoryStream. Die API Funktion ReadProcessMemory füllt meinen Buffer mit Daten, dieser wird also komplett gefüllt auch mit den richtigen Werten, nun versuch ich den Inhalt des Buffers in den MemoryStream zu bekommen aber irgendwie funktioniert das nicht. Kann mir jemand sagen weshalb? In meiner Memo wird nichts angezeigt!


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
Procedure TForm1.Lese_Speicher(id : LongInt);
var
 prozess_h: THandle;
 bytes_gelesen : Cardinal;
 buffer : array of byte;
 start, ende : LongInt;
 stream : TMemoryStream;
Begin
try
start:=StrToInt(Edit1.Text);
except Application.MessageBox('Gültige Startaddresse eingeben!','Falsche Eingabe',MB_OK);
end;
try
ende:=StrToInt(Edit2.Text);
except Application.MessageBox('Gültige Grenze eingeben!','Falsche Eingabe',MB_OK);
end;
// Buffergröße festlegen
SetLength(Buffer,ende-start);
// versuche den prozess zu öffnen
prozess_h:=OpenProcess(PROCESS_VM_READ,FALSE,id);
// Lese aus dem Speicher
if prozess_h<>0 then
if ReadProcessMemory(prozess_h,Ptr(start),buffer,ende-start,bytes_gelesen)=FALSE
 then Application.MessageBox('Konnte nich lesen','Fehler',MB_OK);
// Schließe den Prozeß
CloseHandle(prozess_h);
// Kopiere den Buffer in das Memofeld
stream:=TMemoryStream.Create;
stream.SetSize(sizeof(Buffer));
Move(Buffer,stream.memory^,stream.size);
// alternative: stream.Write(buffer,sizeof(buffer));
Memo1.Lines.LoadFromStream(stream);
stream.free;
end;


Wie gesagt der Buffer wird komplett mit den richtigen Werten gefüllt nur bekomm ich dessen Inhalt partout nicht in den Stream :(

Moderiert von user profile iconKlabautermann: Code-Tags hinzugefügt.


salsatigre - Fr 04.04.03 13:24

Probiers mal mit


Quelltext
1:
stream.Position := 0;                    

vor dem

Quelltext
1:
Memo1.Lines.LoadFromStream(stream);                    


da anscheinend der pointer am streamende steht;
hat selbst auch mal so ein problem

Viel spazz