AGB  ·  Datenschutz  ·  Impressum  







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

File Eraser programmieren

Ein Thema von 3_of_8 · begonnen am 29. Dez 2005 · letzter Beitrag vom 4. Jan 2011
Antwort Antwort
Seite 2 von 4     12 34      
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: File Eraser programmieren

  Alt 29. Dez 2005, 10:34
Achso...Verstehe. Ohne mich zu fragen, tss... Als nächstes veröffentlicht er noch meine Klasse...Tsss...

Obwohl, die ist ja eh sch****, hat Matze mir gesagt, ich soll ja alles am besten vergessen. Sollte ich wirklich gaaanz schnell tun.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#12

Re: File Eraser programmieren

  Alt 29. Dez 2005, 13:00
Da meine Variante eh mal als OpenSource auslaufen wird, kann ich dat hier ja ruhig mal zeigen ^^

Alao aktuell mach ich dat so:
Delphi-Quellcode:
Type TDelFlags = Set of (cdfOverride1, cdfOverride3, cdfOverride7, cdfOverride15, cdfOverride31,
  cdfSplit, cdfSplitLarge, cdfFileTable); // cdfFileTable do not use on Win NT file system.

Const cdfDefault = [cdfOverride7 {, cdfFileTable}];
  cdfDefaultLarge = [cdfOverride1, cdfSplitLarge {, cdfFileTable}];



Function ClearAndDeleteFile(FileName: WideString; Flags: TDelFlags = cdfDefault): ByteBool;
  Var Handle: THandle;
    Len, LF: TLargeIntRec;
    DecSize, BufSize, i, i2: LongInt;
    Buffer: PLongWordArray;

  Begin
    Result := False;
    FileName := _ExpandFileName(FileName);
    Handle := CreateFileW(Pointer(FileName), amGenericWrite or amGenericRead,
      amFileShareRead or amFileShareWrite or amFileShareDelete, nil, cdOpenExisting, 0, 0);
    If Handle = InvalidHandle Then Exit;
    Buffer := nil;
    Try
      Len.Lo := GetFileSize(Handle, @Len.Hi);
      If Len.Org = InvalidFileSizeLI Then Exit;
      If (Len.Hi = 0) and (Len.Lo <= $00A00000) Then BufSize := Len.Lo shr 2 Else BufSize := $00280000;
      Buffer := Memory.Get((BufSize + 1) shl 2);
      Memory.Fill1(Buffer, BufSize shl 2, LongWord(_Random(-1)));
      If cdfOverride31 in Flags Then i := 31 Else If cdfOverride15 in Flags Then i := 15
      Else If cdfOverride7 in Flags Then i := 7 Else If cdfOverride1 in Flags Then i := 1 Else i := 3;
      For i := i downto 0 do Begin
        For i2 := BufSize - 1 downto 0 do Buffer^[i2] := Buffer^[i2] xor LongWord(_Random(-1));
        i2 := BufSize shl 2 - _Random(BufSize);
        LF.Org := Len.Org;
        SetFilePointer(Handle, 0, nil, mmFileBegin);
        While LF.Org >= i2 do Begin
          WriteDataNE(Handle, Buffer, i2, nil, nil);
          Dec(LF.Org, i2);
        End;
        WriteDataNE(Handle, Buffer, LongInt(LF.Lo), nil, nil);
        FlushFileBuffers(Handle);
      End;
      If (cdfSplit in Flags) or (cdfSplitLarge in Flags) Then Begin
        DecSize := GetClusterSize(_ExtractFileDrive(FileName), 512);
        LF.Org := Len.Org;
        SetFilePointer(Handle, LF.Lo, @LF.Hi, mmFileBegin);
        If cdfSplitLarge in Flags Then Begin
          i := DecSize;
          While LF.Org > i do Begin
            Dec(LF.Org, i);
            SetFilePointer(Handle, -i, nil, mmFileCurrent);
            SetEndOfFile(Handle);
            FlushFileBuffers(Handle);
            i := DecSize + LF.Org shr 10;
          End
        End Else While LF.Org > DecSize do Begin
          Dec(LF.Org, DecSize);
          SetFilePointer(Handle, -DecSize, nil, mmFileCurrent);
          SetEndOfFile(Handle);
          FlushFileBuffers(Handle);
        End;
      End;
      SetFilePointer(Handle, 0, nil, mmFileBegin);
      SetEndOfFile(Handle);
    Finally
      Memory.Free(Pointer(Buffer));
      CloseHandle(Handle);
    End;
    DeleteFileW(Pointer(FileName));
    If cdfFileTable in Flags Then Begin
      For i := 0 to 99 do Begin
        FileName := WideString('CF') + WideChar(i div 10 or $30) + WideChar(i mod 10 or $30) + WideString('.FNSClearDir');
        Handle := CreateFileW(Pointer(FileName), amGenericWrite,
          amFileShareRead or amFileShareWrite or amFileShareDelete, nil, cdCreateAlways, 0, 0);
        If Handle <> InvalidHandle Then CloseHandle(Handle);
      End;
      For i := 99 downto 0 do Begin
        FileName := WideString('CF') + WideChar(i div 10 or $30) + WideChar(i mod 10 or $30) + WideString('.FNSClearDir');
        DeleteFileW(Pointer(FileName));
      End;
    End;
    Result := True;
  End;
Das meiste dürfte ja selbsterklärend sein, von den Namen her.
- WriteDataNE entspricht dabei WriteFile (WinAPI incl. 'ner winzigen Fehlerbehandling)
- Memory geht direkt an den MemoryManager in etwa kann man das so sehn: Memory.Get=GetMem, ...

Ein Problem hab ich allerdings noch beim entfernen der Daten aus dem Verzeichnis.
Bei den älteren Dateisystemen (FAT...) konnte man den Eintrag dadurch entfernen, daß man die Tabelle überfüllt hat.
Leider führt NTFS 'ne Art LogBuch, oder wie man das nennen kann, wo ich bisher noch nicht weiß, wie ich da rannkomme, um den entsprechenden Eintrag entfernen zu können -.-''


Na ja, mal sehn ob jemand noch ein paar Tipps hat
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#13

Re: File Eraser programmieren

  Alt 29. Dez 2005, 13:38
Zu diesen Thema gibt es im Forum schon Lösungen. Einfach mal suchen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#14

Re: File Eraser programmieren

  Alt 29. Dez 2005, 13:42
Wie man was aus'm NTFS rausbekommt?
Hab bereits gesucht und nichts passendes entdeckt.
Und nicht nur in der DP.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#15

Re: File Eraser programmieren

  Alt 29. Dez 2005, 13:44
Hier im Forum suchenShredder.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#16

Re: File Eraser programmieren

  Alt 29. Dez 2005, 13:56
Diese Beiträge kenn ich schon alle und haben mir nicht geholfen.

Die Daten der Datei bekomm ich schon "weg", nur eben bei NTFS nicht den Verweis darauf, also das, was innerhalb des übergeordneten Verzeichnisses steckt.

Denn, wie gesagt, NTFS scheint 'ne Art Logbuch zu führen (Dateiumbenennungen, Dateilöschungen, und was es sonst noch gibt) und genau das bekomm ich nicht weg.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#17

Re: File Eraser programmieren

  Alt 29. Dez 2005, 14:12
Hagen hat auch schonmal geschrieben, dass man mit den Methoden, die ihr bisher gerwähnt habt nur die Datei so löscht, wie sie gerade besteht. Aber die Datei kann ja auch mal größer gewesen sein als unmittelbar vor dem Löschvorgang, also liegen noch in irgendwelchen Sektoren auf der Platte Restinhalte der Originaldatei rum und warten darauf, gefunden zu werden.
Julian J. Pracht
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#18

Re: File Eraser programmieren

  Alt 29. Dez 2005, 14:39
Jupp, und das bekommt man nur weg, indem man die leeren Sektoren und das ungenutzte Sektoenteil am Ende jeder Datei "sicher" löscht.
Außerdem müßte man noch jede vorhande Datei "sicher löschen" und danach den Dateiinhalt wieder herstelllen, damit auch hinter den vorhandenen Daten die Restmagnetisierung zerstört wird ...
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#19

Re: File Eraser programmieren

  Alt 29. Dez 2005, 14:47
WinAPI? Assembler?
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#20

Re: File Eraser programmieren

  Alt 29. Dez 2005, 14:58
Zitat von 3_of_8:
WinAPI? Assembler?
Knapp die Absicht von himitsus Posting verfehlt
Es ist sozusagen ein Ding der Unmöglichkeit, Daten unwiederbringlich zu löschen (ohne Hammer )
Julian J. Pracht
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 22:18 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