![]() |
Speichern von Pointerinhalten in eine Datei
Hallo,
ich habe ein Problem und bitte Euch um Hilfe. Vielleicht ist die Lösung einfach und ich habe mich beim lesen unterschiedlicher Foren und Quellcodes nur "verrannt". Ich möchte gerne Informationen, die (vermutlich) im Arbeitsspeicher abgelegt wurden, in eine Datei speichern. Auf den Pointer kann ich mit dem Befehl "p:=Addr(x);" zugreifen. In diesem Fall handelt es sich um ein Email, welches ich unter Umgehung der Outlook - Sicherheitsabfrage speichern möchte. Leider fehlt es mit am Wissen mit dem Ungang mit Pointern. Nach meiner Einschätzung muß ich den Pointerinhalt in einen TMemoryStream schreiben und dann mit einem "SaveAsFile" - Befehl speichern, aber wie komme ich an den Inhalt und an deren Größe? Anbei ein Beispielcode. Weil es ausschließlich um den Umgang mit Pointern geht, habe ich den Inhalt von Mapi nach Outlook umgeändert und sehr viele Bestandteile (z.B. Freigabe des Speichers) weggelassen.
Delphi-Quellcode:
Vielen Dank für eure Hilfe.
procedure TForm1.Button1Click(Sender: TObject);
var oOutlook:variant; oOrdner:variant; oMail:variant; p:Pointer; begin oOutlook:=CreateOleObject('Outlook.Application'); oOrdner:=oOutlook.GetNamespace('MAPI').GetDefaultFolder(6); oMail:=oOrdner.Items[1]; p:=Addr(oMail); { ...... } end; Gebhard |
Re: Speichern von Pointerinhalten in eine Datei
Hallo,
sehr abenteuerlicher Ansatz :firejump: Du hast ja nur einen Zeiger auf das Interface der E-Mail, nicht auf die Daten. Bei deinem Ansatz kommt im besten Fall Müll in der Datei an, oder es gibt einfach nur eine Zugriffsverletzung. Um die Sicherheitsabfrage zu Umgehen kannst du direkt über MAPI arbeiten. Hierfür gibts eine sehr gute Lösung, die die Interfaces des Outlook Com-Objekts nachbildet: ![]() Ich hab auch mal irgendwo ein Add-In für Outlook gesehen, das die Security Warnungen unterdrückt, weiß aber grad nicht mehr wo. Ciao Chris |
Re: Speichern von Pointerinhalten in eine Datei
Wenn du einen normalen Pointer (in das RAM, das deinem Prozess gehört) hast, dann kannst du die Daten dahinter so abgreifen:
Delphi-Quellcode:
var
p:Pointer; s : string; begin p := .... SetString(s, PChar(p), 1024 {Anzahl Bytes}); // jetzt sind die Daten im String s |
Re: Speichern von Pointerinhalten in eine Datei
aber nicht die EMail sondern Daten die er nicht haben will
|
Re: Speichern von Pointerinhalten in eine Datei
Hallo Chris.R, shmia, Sir Thomberry,
vielen Dank für eure Hilfe. Schade, das es nicht klappt. Ich habe es mir wohl etwas zu einfach vorgestellt. Schöne Wochenende Gebhard |
DP-Maintenance
Dieses Thema wurde von "fkerber" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Sonstige Fragen zu Delphi" verschoben.
Das ist eher eine Frage als ein Vorschlag für die Codelib. ;) |
Re: Speichern von Pointerinhalten in eine Datei
Hi,
es geht vielleicht etwas an deinem Problem vorbei, aber wenn du im Speicher fremder Prozesse herumlesen willst, geht das wie folgt:
Delphi-Quellcode:
Das sollen nur ein paar Hinweise zur Recherche sein, die ich aus einem Codestück abfiltriert habe, im Grunde geht es darum, die Rechte einzuholen, einen Prozess zu öffnen und im richtigen Adressraum davon zu lesen. Ich frage mich dabei nur, wie du nun die emails finden willst ;) Vielleicht ist die von den Vorrednern vorgeschlagene Vorgehensweise doch die bessere ...
EnableTokenPrivilege(SE_DEBUG_NAME);
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,...); MapViewOfFile(...); ReadProcessMemory(...); |
Re: Speichern von Pointerinhalten in eine Datei
Hallo helgew,
vielen Dank für Deine Hilfe. Leider hilft mir Deine Idee nicht in diesem speziellen Fall, aber vielleicht kann ich (oder ein anderer Leser) Deinen Script in der Zukunft einmal nutzen. Tschüss Gebhard |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz