![]() |
Defragmentier- oder datenrecovery programm realisieren?
Ich wollte mir eigentlich ein Defragmentier programm so wie DiskKeeper schreiben und auch ein Datenrecovery tool für NTFS so wie GetDataBack. Nur weiß ich nicht wie ich low level read und write mit delphi realisieren. nun meine frage: Ist dies überhaupt möglich und wenn ja welche befehle brauche ich?
Danke schon mal im vorraus ;) MfG starY |
Re: Defragmentier- oder datenrecovery programm realisieren?
Zitat:
Außerdem würde ich dir Delphi da nicht empfehlen, das aber nur nebenbei. Ansonsten werden dir die Funktionen, welche wir mit Marcel van Brakel in unserer Native API Unit zusammengetragen haben, helfen. In einem älteren Post von mir findest du die entsprechenden Infos wo du das alles findest: ![]() DiskKeeper hat außerdem noch einen Service, der mit SYSTEM-Rechten agiert. Also auch dahingehend mußt du dich kundig machen. Ansonsten findet sich in Gary Nebbetts "Windows NT/2000 Native API Reference" ganz am Ende des Buches ein Kapitel zur Wiederherstellung gelöschter Daten mit Beschreibung der internen NTFS-Strukturen. Auch diverse OpenSource-Projekte setzen sich mit den Interna von NTFS auseinander. Aber ich denke ohne ein NDA mit Microsoft wirst du qualitativ nie an DiskKeeper und ähnliche Produkte herankommen. Und mit qualitativ ist hier durchaus auch gemeint wie sicher dein Produkt seinen Job tut! |
Re: Defragmentier- oder datenrecovery programm realisieren?
Nur für Windows NT:
![]() Und wenn du das Kätzchen ganz lieb' fragst, darfst du vllt. sogar einen Blick in den Source werfen. :mrgreen: (generell gilt: sofern irgendwas mit Treibern anfängt, kannst du Delphi Language knicken.) |
Re: Defragmentier- oder datenrecovery programm realisieren?
Erstmal danke für die Antworten ;)
Ich weiß, dass ich dafür die NTFS Spezifikationen brauche ;) aber da diese mir relativ logisch vorkamen, dachte ich mir, dass diese nicht so das Hindernis darstellen. Ich habe mir nun die Native API gezogen. Kann mir wer vielleicht sagen welche *.pas ich einbinden muss und mit welchen Befehlen ich dann Bytes auslese und schreibe? Sakura habe ich eine PM geschickt und warte noch auf Antwort. MfG starY |
Re: Defragmentier- oder datenrecovery programm realisieren?
Ersteinmal: Treiber sind nicht notwendig, jedenfalls nicht unter Windows NT. Unter Windows 9x braucht man eine 16 Bit DLL oder einen Treiber, aber ich glaube der Aufwand lohnt nicht Windows 9x zu unterstützen.
Was das direkte Lesen/Schreiben von Festplatten angeht, was für Datenwiederherstellung sinnvoll wäre, habe ich hier schon mal einen Beitrag gepostet: ![]() Zweitens Zitat:
Es gibt ein sehr gutes (in Delphi geschriebenes) Tool namens Drive Rescue von Alexander Grau. War eine Zeit lang Freeware mit Quelltext, bei ![]() |
Re: Defragmentier- oder datenrecovery programm realisieren?
Zitat:
Zitat:
Zitat:
Zitat:
Ansonsten brauchst du noch einen Service - wenn das nicht wäre, wäre mein komplettes Vertrauen in Windows erschüttert, da du dann auch als Gast mal eben Dateien des Admins wiederherstellen oder "defragmentieren" kannst. Zitat:
|
Re: Defragmentier- oder datenrecovery programm realisieren?
defragmentierer einfach - da gibts ne api welche unkaputtbar ist.
schau mal bei sysinternals "inside diskdefragment" oder so hiess der artikel |
Re: Defragmentier- oder datenrecovery programm realisieren?
Zitat:
Diesen Artikel meinst du wohl?: ![]() |
Re: Defragmentier- oder datenrecovery programm realisieren?
Zitat:
Falls Du einen Treiber für Windows 9x brauchst nimm den der bei dem genannten Quelltext von Alexander Grau drin ist (sehr gut geschriebener Assembler). NativeAPI sind genauso wenig nötig! Ab Windows 2000 gibt es ziemlich bequeme Funktionen um zu Defragmentieren ![]() Zitat:
Zitat:
Zitat:
|
Re: Defragmentier- oder datenrecovery programm realisieren?
Zitat:
Zitat:
Guck dir das DDK an. Was hatte Nico da noch mal zu geschrieben? Moment: Zitat:
![]() Und zum Schluss: Olli und NicoDE wissen wo von sie sprechen. Ich kenn niemanden im der deutschsprachigen Delphi Community mit so viel Ahnung was die Interna von Windows angeht. |
Re: Defragmentier- oder datenrecovery programm realisieren?
Zitat:
Zitat:
Das heißt direkter Festplattenzugriff braucht keinen Treiber (wenn man unbedingt einen braucht gibt es wie gesagt einen im Code von Alexander Grau) und daher ist Delphi perfekt dazu geeignet. Zitat:
Zitat:
Dieses "es geht nicht und Punkt so ist es" ist einfach nicht zutreffend. |
Re: Defragmentier- oder datenrecovery programm realisieren?
Zitat:
|
Re: Defragmentier- oder datenrecovery programm realisieren?
Zitat:
|
Re: Defragmentier- oder datenrecovery programm realisieren?
Zitat:
Zitat:
Es ist auch nicht die Aufgabe von Gast die MMC aufzurufen, warum gibt es dann überhaupt RunAs? Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
In meinem Duden von 1967 steht: permanent (dauernd, anhaltend, ununterbrochen, ständig) <lat> Warum arbeitet der Uhrmacher nicht mit einer Axt, der Bauer nicht mit einem Schraubenzieher und der Raumfahrer nicht mit einem Taucheranzug? Eben, weil es für jedes Ding das richtige Werkzeug gibt. In manchen Fällen sind es auch mehrere Werkzeuge die zur Verfügung stehen, oder Werkzeuge verschiedener Firmen mit ähnlicher Funktion. Wo ist dein Problem? Wer nicht in der Lage ist das korrekte Werkzeug auszuwählen sollte es sein lassen. Zitat:
Zitat:
![]() Zitat:
![]() Zitat:
|
Re: Defragmentier- oder datenrecovery programm realisieren?
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Oh Gott der Rest ist ja noch schlimmer. Wenn es hier um Status und Ruhm geht, tut mir Leid daß ich hier jemanden kritisiere. Der Punkt ist Delphi kann es, Code Beispiele habe ich geliefert, setz dich mit der Realität auseinander oder lass es. Durch blosen Status und ich oder jener ist bekannt, wirst du daran nichts ändern. Schade... |
Re: Defragmentier- oder datenrecovery programm realisieren?
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Abgesehen davon bietet natürlich auch Windows 9x/Me Möglichkeiten zum kontrollierten (aber weniger als in NT) "direkten" Festplattenzugriff. Zitat:
Wenn ich "Treiber" und "Delphi" im selben Beitrag benutze und du das als rotes Tuch auffaßt, dann tut es mir leid. In diesem Falle solltest du statt zu unterstellen lieber die gegebenen Aussagen aufgreifen. Das bringt auch dem Fragesteller mehr. Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
![]() Aber wenn du hier fixiert bist auf "Längenvergleich", dann laß uns doch das über PN machen. Da kannst du mich dann auch so richtig beleidigen :zwinker: ... aber bitte nur auf Basis meiner Aussagen, nicht auf Basis deiner eigenen. Nachtrag: ![]() |
Re: Defragmentier- oder datenrecovery programm realisieren?
Hallo ihr beiden,
Zitat:
Greetz alcaeus |
Re: Defragmentier- oder datenrecovery programm realisieren?
ja unkaputtbar :
Zitat:
|
Re: Defragmentier- oder datenrecovery programm realisieren?
Zitat:
|
Re: Defragmentier- oder datenrecovery programm realisieren?
Gut danke an alle, auch wenn der Thread mehr zum Streitthema über Delphi geworden ist.
Maels Methode geht und diese finde ich auch einfacher. Aber wie so immer gibt es mehrere Methoden ;)
Delphi-Quellcode:
Ich hab nochmal eine Frage zu dieser Funktion... irgendwie will mein Delphi IOCTL_DISK_GET_DRIVE_GEOMETRY und Dummy nicht ;) Welche uses muss ich dafür einbinden?
DeviceIoControl(DeviceHandle, IOCTL_DISK_GET_DRIVE_GEOMETRY, nil, 0,
@DiskGeometry, sizeof(DiskGeometry), Dummy, nil); NTFS läuft außerdem nur unter NT (von haus aus) und höher deswegen bringt es nichts wenn ich 9x Unterstützung mache. ;) |
Re: Defragmentier- oder datenrecovery programm realisieren?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
BTW: Ab XP gibt es auch IOCTL_DISK_GET_DRIVE_GEOMETRY_EX. Verrätst du mir bitte noch, wie du die Wiederherstellung der Daten löst? Aktuell waren wir ja da stehen geblieben, daß man mit Administratorrechten sowohl Defragmentierung als auch sektorweises Auslesen durchführen kann. Mehr machst du ja mit maels Beispielcode (noch) nicht (als Auslesen - nicht daß es wieder zu Mißverständnissen kommt). Nachtrag: Ich bezweifle, daß die IOCTLs irgendwo deklariert sind im Standard-Delphi. Entweder behilfst du dir, indem du sie selber übersetzt, oder du schaust mal in DelphiWorks von Codehunter - er hat IMO Code zum Thema drin. Ansonsten wären die JEDI JCL und ApiLib (JwaWinIoctl.pas - dort ist der gesuchte Code definitiv drin, aber SF ist grad down) noch eine Anlaufstelle. PS: Habe mal CVS-Version 1.6 von der JwaWinIoctl.pas anghangen, damit du nicht auf SF.net angewiesen bist, wenn es doch grad down ist ;) |
Re: Defragmentier- oder datenrecovery programm realisieren?
NTFS speichert ja die gelöschten Dateien (bzw. den Zeiger auf den Datenbereich) in einem Log file record. Ich weiß zwar gerade nicht wieviele Dateien dort gespeichert bleiben aber ich wollte mich erstmal darauf beschränken. Danach mich dann wohl mit MBR bzw Partitionstable recovery beschäftigen und dann vielleicht Datenstrukturen analysieren, wobei ich davon noch keine Ahnung habe.
Die IOCTLs sind wirklich nicht in Standard Delphi deklariert. Nur ist SF.net leider wirklich down und die pas Datei, die du angehängt hast, braucht leider noch ein paar mehr pas Dateien, welcher aber wohl wieder andere pas Dateien brauchen. :( PS: 7z-Format ist vielleicht ein wenig exotisch aber darüber lässt sich ja bekannterweise streiten ;D |
Re: Defragmentier- oder datenrecovery programm realisieren?
Die anderen PAS-Dateien solltest du nicht brauchen. Ansonsten mußt du mir nochmal sagen welche du brauchst. Habe eine lokale Kopie. Dauert aber dann eine Weile, weil ich gleich weg muß.
|
Re: Defragmentier- oder datenrecovery programm realisieren?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
ich weiss nicht welche version von der jwa ich hier ab. aber es ist immer noch besser als keine, oder? |
Re: Defragmentier- oder datenrecovery programm realisieren?
|
Re: Defragmentier- oder datenrecovery programm realisieren?
Zitat:
Marcel hat seine Header ja für das JEDI AiLib-Projekt spendiert. Ich persönlich arbeite am meisten an der JwaNative.pas (ist inzwischen >70% größer als Marcels Ursprungsversion). Also alles im ApiLib-Projekt ist neuer. |
Re: Defragmentier- oder datenrecovery programm realisieren?
@StarY:
Ich weiß ja net, was du für eine Internetverbindung hast. Aber, wenn du DSL hast, würde ich mir an deiner Stelle das PSDK von der Microsoft - HP herunterladen. Da hast du dann auch gleich Headerdateien dabei (allerdings in C). Aber die Werte für die IOCTL - Konstanten stehen da drinne, also eine unschätzbare Hilfe ;) |
Re: Defragmentier- oder datenrecovery programm realisieren?
Notfalls kann ich's dir auch auf CD zuschicken, wenn du kein DSL hast. Einfach PN an mich ;)
Übrigens sind die meisten IOCTLs keine festen Werte, sondern vielmehr Makros. Die können sich leider auch irgendwann mal ändern *schnief* ... das wird ein Wartungsalptraum. |
Re: Defragmentier- oder datenrecovery programm realisieren?
Moin Olli,
Zitat:
Dann würden "ältere" Programme, schlagartig, nicht mehr funktionieren. Zitat:
|
Re: Defragmentier- oder datenrecovery programm realisieren?
Ja DSL hab ich aber es geht schon mit der JwaWinIoctl.pas.
Nochmals danke für die Hilfe. ;) Bin mal weiter testen und probieren ;D MfG starY |
Re: Defragmentier- oder datenrecovery programm realisieren?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:33 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