Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

Re: SPTI - CD-Laufwerk steuern (lesen) und CD/DVD auslesen

  Alt 26. Feb 2007, 19:53
Das ist ja das Problem, im Prinzip hab ich noch nichts.

Vermutlich geht es ja irgendwie mit DeviceIoControl und IOCTL_SCSI_PASS_THROUGH*, aber welche Parameter ich da übergeben muß und vorallem wie, das weiß ich halt nicht.

Wie gesagt, ich bin zwar noch am suchen (hab daheim halt nur kein INet und hier nicht unbedingt all zuviel Zeit, daher hab ich mir einige vorallem OpenSourceProjekte runtergeladen und schau dort drin nach.

Allerdings setzten viele da ja nur auf ASPI (was ich nicht möchte/will) und die Anderen verwenden Beides, also ASPI und SPTI gemischt, wobei die anscheinend erstmal ASPI verwenden und wenn das nicht geht, dann versuchen auf SPTI auszuweichen. Leider haben die dann allerdings intern alles so verschachtelt, daß es dann z.B. nur einen Befehl gibt, womit die z.B. 'nen Sektor auslesen und dieses dann über für mich noch total wirre Wege dann an die entsprechende Stelle leiten, so daß ich einfach noch nicht rausfinden konnte was wirklich für SPTI nötig ist.


Ich brauche also erstmal irgendeinen Einstieg und wenn es auch nur ein "gutes" Suchwort ist,
welcher sich am Besten mal nur mit SPTI beschäftig.

Ach ja, warum unbedingt SPTI, weils Windows (NT...) von Haus aus unterstützt und nicht erst ein ASPI-Treiber benötigt wird.



In meinem Programm ist davon jedenfalls noch nichts drin ... drum suche ich ja schließlich.
Und mal sehn ob ich die Sourcen zum Programm später mit freigebe.
(es wird dann also ... wenn es mal fertig ist ... unter Freeware, oder OpenSource nochmals richtig erscheinen)

Aber erstmal muß ich irgendwie noch mit SPTI klarkommen.

Zitat:
So, hier mal mein bißheriges Versuchsprogramm (siehe Anhang).

Wie gesagt eine Optimierung für CD/DVD-Laufwerke müßte noch rein.
Es muß ja nicht sein, daß die Geschwindigkeit sich ständig ändert (unnötige Zeitverschwendung), oder diese ständig/sinnlos im Keller rumdümpelt -.-''
Speziell denke ich da beim Kopierprozess an:
- maximum Speed bei Mode 1
- 50% Speed bei Mode 2
- und Mode 3 mit minimum Speed und wenn möglich hier noch etwas mehr in Richtung Fehlerkorrektur verbessert


Zum Programm selber ... 's ist eigentlich recht einfach gestrickt.
Derzeit kann jeweils nur eine Datei kopiert werden, welches aber auch 'nen kleinen Vorteil hat.
So kann man z.B. auch ein ISO-Image 'ner CD/DVD erstellen (als Quelldatei z.B. einfach sowas wie "\\.\CDRom0", oder "\\.\E:" angeben).
Und auch ein grober (sektorenweiser) Vergleich zweier Dateien wäre möglich.

OK, Design/Dediehnung is noch so toll und was das BitMap (SectorÜbersicht) angeht, da läßt sich noch einiges machen, aber jetzt is mir der Lesevorgang noch wichtiger.
  • wie gesagt ... kopiert derzeit nur eine einzige Datei
  • reagiert schonmal etwas langsam
    der Kopierprozess läuft halt im Hauptthread
    (wegen der einfacheren Fehlersuche und für weitere Tests)
  • es wird in mehreren Schritten kopiert
    - zuerst mit mehreren Sektoren aufeinmal
    - dann die fehlerhaften Sektoren nochmal Sektor für Sektor
    - und wenn dann immernoch was fehlt nochmals sektorweise in 'nem erweiterten Modus
  • der Kopierstatus wird in Zieldatei[/b].usr[/b] gespeichert
    darum kann er später wieder geladen und für einen weiteren Kopiervorgang wiederverwendet werden
  • für [Load] und [Fill] wird keine Quelldatei benötigt
  • [SectorSize]: mit -1 wird die aktuelle Sektorengröße ausgelesen
    aber man kann auch selber einen Wert angeben (z.B. für den Dateivergleich)
    Es muß sich aber immer um ein Vielfaches der reellen Sektorgrößen (Quell- und Zieldatei) sein.
  • [Copy]: startet den Kopiervorgang
    über die CheckBoxen darunter ist es auch möglich den Kopierstatus zurückzusetzen und/oder die ersten beiden Kopiermethoden zu überspringen
  • [Test]: vergleicht Quell- und Zieldatei
  • [Fill]: fehlende/fehlerhafte Sektoren werden mit dem angegebenem Wert (0..255, also Byte),
    oder mit dem Inhalt der angegebenen Datei gefüllt.
    Aus der Datei wird der erste "Sektor" ausgelesen (die Datei muß also mindestens eine Größe von SektorSize aufweisen) und als FüllSektor verwendet.
  • [Status]:
    Farben (pro Sektor ein Pixel):
    grau: noch nicht gelesen
    Hellgrün: erfolgreich gelesen
    Rot: Lesefehler
    Dunkelgrün: Lesefehler, aber der Sektor wurde früher schonmal erfolgreich ausgelesen
  • und natürlich wird außer in Zieldatei und Zieldatei.usr nirgends was gespeichert/verändert

Da der Lesestatus ja gespeichert und im Normalfall nur fehlende Sektoren erneut gelesen werden,
kann man den Lesevorgang abbrechen und später fortsetzten,
oder den Lesevorgang beliebig oft wiederholen (z.B. nach 'ner CD-Reinigung/-Reperatur...)
und auch ein kombinieren zweier Dateien wäre möglich (einfach 'ne andere, gleichgroße Quelldatei angeben).

Ach ja, Status- und Fehlermeldungen verstecken sich in der Titelleiste.

PS: da die Fehlererkennung ja nur über 'ne kleine Prüfsumme (CRC) läuft, ist es dennoch möglich, daß einige fehlerhafte Sektoren als OK durchgehen ... dieses läßt sich aber auch nicht ändern, notfalls kann man aber nochmal einen "Test" drüberlaufen lassen.
Miniaturansicht angehängter Grafiken
project8_copyfile_318.gif  
Angehängte Dateien
Dateityp: exe project8_copyfile_124.exe (230,0 KB, 16x aufgerufen)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat