Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Speichern von Pointerinhalten in eine Datei (https://www.delphipraxis.net/141407-speichern-von-pointerinhalten-eine-datei.html)

Gebhard 8. Okt 2009 13:49


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:
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;
Vielen Dank für eure Hilfe.

Gebhard

Chris.R 8. Okt 2009 14:57

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: Outlook Redemption (kostet allerdings Geld).

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

shmia 8. Okt 2009 16:45

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

SirThornberry 8. Okt 2009 16:50

Re: Speichern von Pointerinhalten in eine Datei
 
aber nicht die EMail sondern Daten die er nicht haben will

Gebhard 9. Okt 2009 07:12

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 17. Okt 2009 12:25

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. ;)

helgew 18. Okt 2009 18:10

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:
EnableTokenPrivilege(SE_DEBUG_NAME);
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,...);
MapViewOfFile(...);
ReadProcessMemory(...);
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 ...

Gebhard 4. Nov 2009 19:52

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 02:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz