ATA Kommando an die Festplatte senden

Hallo,

weiß jemand von euch wie man ein ATA Kommando an eine Festplatte senden kann?

Also ich möchte über ein kleines Assembler Programm ATA Befehle an eine Festplatte senden. Ist dies evtl. mit einen entsprechenden Interrupt 13 Befehl möglich?

Habe mir bereits diverse Webseiten zu diesem Thema angesehen, doch leider fehlen überall die genauen Details hierzu. Z. B. hab ich mir folgende Seiten angeschaut:

http://www.htl-steyr.ac.at/~morg/pcinfo/hardware/int…
http://www.heise.de/ct/05/08/172/

Jedoch konnte ich dort nirgends ein entsprechendes Kommando finden.

Eine Tabelle mit möglichen ATA Kommands habe ich bereits vorliegen.

Gruß
Christoph

Hab jetzt folgende nützliche Webseite gefunden:

http://www.geocities.com/siliconvalley/2072/atapi.htm

Offenbar muss man eine ATA Kommando mittels des Assemblerbefehls OUT an Port 1F7 schicken. Wobei der Aufbau eines Kommandos wie folgt aussehen muss:

  1. Byte: Operation Code
      1. Byte: Parameter

Zu beachten ist, dass man vor dem Senden eines Befehls die Interrupts mittels des Assemblerbefehls CLI deaktivieren muss. Anschließend muss man dann mittels des Assemblerbefehls STI die Interrupts wieder aktivieren.

Allerdings fehlt mir jetzt noch eine Tabelle wo zum Einen die ATA Kommandos, also das Operation Code Byte, und zum Anderen deren Parameter, also die restlichen 11 Bytes des Kommandos, aufgelistet sind. Hat jemand von euch zufälligerweise eine solche Liste zur Hand?

Gruß
Christoph

Hallo,

ich glaube das was ich vorhin geschrieben habe lediglich für ATAPI Geräte bspw. CD-ROMs gilt. Insbesondere die Parameterübergabe kann so nicht funktionieren, da es ATA Befehle gibt welche Parameter insgesamt länger als 11 Bytes sind.

z.B. der Befehl „Security Set Password“, welcher den Opcode F1 hat, besitzt zwei je 32 Byte lange Parameter. Also 2 Integer Parameter. Diese müssen irgenwie anders zu der Festplatte übertragen werden. Habe allerdings keine Ahnung wie dies geschehen könnte.

Gruß
Christoph

Hallo,

weiß jemand von euch wie man ein ATA Kommando an eine
Festplatte senden kann?

Also ich möchte über ein kleines Assembler Programm ATA
Befehle an eine Festplatte senden. Ist dies evtl. mit einen
entsprechenden Interrupt 13 Befehl möglich?

Habe mir bereits diverse Webseiten zu diesem Thema angesehen,

Christoph

Hallo Christoph,

zu dem Zweck habe ich mir mal die Software winata (Free oder Share) angesehen, Zitat:
Die Beispielprogramme senden ATA-Befehle unter Windows direkt an eine Festplatte. Identify.cpp nutzt dazu die offizielle SMART-Schnittstelle, die in allen aktuellen Windows-Versionen enhalten ist. Damit die SMART-Schnittstelle unter Windows 9x und ME funktioniert, muss die Datei Smartvsd.vxd im Windows-Verzeichnis System\Iosubsys liegen – eventuell muss sie der Benutzer per Hand aus dem System-Ordner verschieben. WinATA verwendet undokumentierte Schnittstellen und arbeitet nur mit den Original-Treibern von Microsoft unter Windows NT, 2000 oder XP.

Ausserdem kannst du bei MS suchen:

Windows 95 and Windows NT SMART IOCTL API Specification
Updated: December 4, 2001

Microsoft Windows 95 and Windows NT SMART IOCTL API Specification describes the API for an application to issue SMART commands to an IDE drive under Microsoft® Windows® and Windows NT®. Published by Microsoft Corporation and Compaq Computer Corporation.

Gruss Reinhard