AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

stream, der nur im RAM bleibt?

Ein Thema von quirks · begonnen am 12. Sep 2004 · letzter Beitrag vom 15. Sep 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von quirks
quirks

Registriert seit: 5. Sep 2004
Ort: Fischbachtal
46 Beiträge
 
Delphi 8 Professional
 
#1

stream, der nur im RAM bleibt?

  Alt 12. Sep 2004, 15:10
Hi.
Ich habe ein Programm, bei dem aus sicherheitstechnischen Gründen ein Stream gebraucht wird, der nicht in die Auslagerungsdatei gelangt. Also nur im RAM "resident" bleibt. Gibt es da eine Möglichkeit?
  Mit Zitat antworten Zitat
mytar

Registriert seit: 30. Mai 2004
Ort: Zermatt
411 Beiträge
 
Delphi 6 Enterprise
 
#2

Re: stream, der nur im RAM bleibt?

  Alt 12. Sep 2004, 15:14
Schau dir Delphi-Referenz durchsuchenTMemoryStream in der OH an.
Das ist genau das was du suchst!
Francis Obikwelu
greetz
mytar
  Mit Zitat antworten Zitat
Benutzerbild von quirks
quirks

Registriert seit: 5. Sep 2004
Ort: Fischbachtal
46 Beiträge
 
Delphi 8 Professional
 
#3

Re: stream, der nur im RAM bleibt?

  Alt 12. Sep 2004, 15:20
Hm, hätt ich selber drauf kommen können

Wenn das so stimmt, dann hab ich bis jetzt immer instinktiv den richtigen Stream benutzt...

Aber noch ne Frage dazu: Bleibt der wirklich NUR im RAM oder wird der bei vollem RAM doch (zumindest teilweise) in die SWAP-Datei ausgelagert?
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#4

Re: stream, der nur im RAM bleibt?

  Alt 12. Sep 2004, 15:44
Kann eine Windows-Anwendung überhaupt kontrollieren, ob Teile ihres Speichers ausgelagert werden? Das geschieht doch alles im Hintergrund, oder nicht? Meiner Meinung nach lautet die Antwort auf deine Frage also: Nein, der verbleibt nicht notwendigerweise im RAM.

Wenn es dir darum geht, dass der Stream nicht nach der Verwendung in der Auslagerung verbleibt, kannst du 1. ihn komplett überschreiben und 2. gibt es eine Option, dass Windows beim Herunterfahren die Auslagerungsdatei löscht (frag' mich jetzt aber bitte nicht wo und ob du das innerhalb deines Programms einstellen kannst).
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Benutzerbild von quirks
quirks

Registriert seit: 5. Sep 2004
Ort: Fischbachtal
46 Beiträge
 
Delphi 8 Professional
 
#5

Re: stream, der nur im RAM bleibt?

  Alt 12. Sep 2004, 15:51
Hm, ich weiß zwar nicht, wie performant das ist, aber ich hab da ne Idee:
Ich verschlüssel den Stream dynamisch und entschlüssel dann nur jeweils den gebrauchten Teil in einen kurzen String/Array mit max. 100-Byte Größe.
Hat jemand eine Ahnung, wo ich einen Vergleich von der Geschwindigkeit von Crypto-Verfahren bekomme, bzw. welches der schnellste ist?
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#6

Re: stream, der nur im RAM bleibt?

  Alt 12. Sep 2004, 16:10
Zitat von quirks:
Bleibt der wirklich NUR im RAM oder wird der bei vollem RAM doch (zumindest teilweise) in die SWAP-Datei ausgelagert?
Da hast du mit TMemoryStream keinen Einfluss drauf. Hier kommt es drauf an, wie Windows konfiguriert ist.
Ein kleines Beispiel, mit einem 100 MB großen TMemoryStream. Da kannst du dann sofort sehen, wieviel ausgelagert wird.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
  MEMINFOTEXT = 'Auslagerungsdatei ist ca. %d MB groß.';
var
  MemStat: TMemoryStatus;
  PageFileSize: Integer;
  MemStream: TMemoryStream;
begin

  // Größe der Auslagerungsdatei berechnen

  MemStat.dwLength := SizeOf(TMemoryStatus);
  GlobalMemoryStatus(MemStat);
  PageFileSize := (MemStat.dwTotalPageFile - MemStat.dwAvailPageFile) div 1024 div 1024;
  ShowMessage(Format(MEMINFOTEXT, [PageFileSize]));



  // MemoryStream erstellen (100 MB)

  MemStream := TMemoryStream.Create;
  MemStream.Size := 104857600;



  // Größe der Auslagerungsdatei neu berechnen

  MemStat.dwLength := SizeOf(TMemoryStatus);
  GlobalMemoryStatus(MemStat);
  PageFileSize := (MemStat.dwTotalPageFile - MemStat.dwAvailPageFile) div 1024 div 1024;
  ShowMessage(Format(MEMINFOTEXT, [PageFileSize]));



  // MemoryStream wieder freigeben

  MemStream.Free;



  // Größe der Auslagerungsdatei neu berechnen

  MemStat.dwLength := SizeOf(TMemoryStatus);
  GlobalMemoryStatus(MemStat);
  PageFileSize := (MemStat.dwTotalPageFile - MemStat.dwAvailPageFile) div 1024 div 1024;
  ShowMessage(Format(MEMINFOTEXT, [PageFileSize]));

end;
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
Benutzerbild von quirks
quirks

Registriert seit: 5. Sep 2004
Ort: Fischbachtal
46 Beiträge
 
Delphi 8 Professional
 
#7

Re: stream, der nur im RAM bleibt?

  Alt 12. Sep 2004, 16:18
Danke, werds gleich mal ausprobieren
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: stream, der nur im RAM bleibt?

  Alt 12. Sep 2004, 17:45
Da für das Auslagern ein LRU-Verfahren verwendet wird (LRU = Least Recently Used, d.h. es werden die Seiten ausgelagert, die am längsten nicht mehr benutzt worden sind), könntest du das Auslagern erschweren, indem du häufig auf die Daten zugreifen.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Brüggendiek

Registriert seit: 13. Dez 2002
Ort: Dortmund
275 Beiträge
 
Delphi 5 Standard
 
#9

Re: stream, der nur im RAM bleibt?

  Alt 12. Sep 2004, 20:55
Hallo quirks!

Es gibt nur eine sichere Methode, die Auslagerung des RAM zu verhindern:
Schreibe ein eigenes Betriebssystem, das dieses Feature bietet. Ggf. wäre ja Linux eine gute Grundlage dafür

Im Ernst: Letztendlich wirst Du niemals verhindern können, daß es zur Auslagerung kommt. Da gibt es z.B. Programme zum RAM-Freigeben. Die arbeiten so:
Es wird Speicher bis zum Anschlag angefordert und mit Müll gefüllt. Folge: Alle anderen Programme fliegen raus in die Auslagerungsdatei.
Dann wird der Speicher wieder freigegeben. Der RAM ist jetzt vollkommen leer und die noch aktiven Programme belegen ihn dann aus der Auslagerung wieder neu.

Als Ergebnis stehen inaktive Daten in der Auslagerungsdatei und die aktiven Daten haben wieder Platz.

Also hilft wirklich nur ein massive Eingriff ins System - was bei Linux wegen OpenSource natürlich "leichter" durchzuführen ist als bei Windows.

Alternative: Rechner in einen Panzerschrank stellen.

Gruß

Dietmar Brüggendiek
Dietmar Brüggendiek
Die 6 Probleme des Programmierers: 1. dauert das länger, als man 2. glaubt, 3. geht das nicht so, wie man sich das 4. schlau überlegt hat, und 5. sitzt der Fehler da, wo man ihn 6. zuletzt sucht
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#10

Re: stream, der nur im RAM bleibt?

  Alt 13. Sep 2004, 12:49
Naja, ganz stimmt das natürlich nicht. In jedem Betriebsystem muß es auch Mechanismen geben die explizit bestimmte Speicherbereiche vor der Auslagerung schützen. Denn eine Interrupt-Service-Routine darf in keinem Falle ausgelagert werden, sonst funktioniert garnichts mehr. Demzufolge gibt es sehr wohl solche Mechanismen auch in Windows. Schaue dir zb. mal die API Funktionen VirtualProtect(), VirtualLock() oder die MMF's an. Über diese sollte man auf Ring3, sprich Applicationlevel Einfluß nehmen könne. Verbliebe dann noch das MS CryptoAPI das die Protected Storage umsetzt, d.h. geschützer Speicher der neben der Lifeverschlüssung auch das Auslagern verhindert. Ansonst müsste man schon auf Treiberebene -> Ring0 in Windows arbeiten um das Gleiche zu erreichen.
Und soviel ich weis lagert Windows auch niemals den Stack von Prozessen oder Threads aus.

Gruß Hagen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:26 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