Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Festplatte ausschalten (https://www.delphipraxis.net/42549-festplatte-ausschalten.html)

Der_Ventilator 20. Mär 2005 17:46


Festplatte ausschalten
 
Kann man irgendwie eine einzelne Festplatte per Software abschalten?

gmarts 6. Jan 2006 08:01

Re: Festplatte ausschalten
 
Da meine Backup/Capture-Festplatten meist nur unnötig Strom fressen und laut sind, interessiert mich das auch;
deswegen: push

Robert Marquardt 6. Jan 2006 08:07

Re: Festplatte ausschalten
 
Nicht wirklich.
Man kann zwar ein neues Energieschema setzen, aber da gibt es Probleme wenn die Timeouts zu kurz sind.

CG2003 6. Jan 2006 08:07

Re: Festplatte ausschalten
 
Zitat:

Zitat von Der_Ventilator
Kann man irgendwie eine einzelne Festplatte per Software abschalten?

Ich weiß nicht genau, aber vielleicht ist es möglich dieser per WinAPI in den "Ruhezustand zu versetzen" ?

gmarts 6. Jan 2006 08:37

Re: Festplatte ausschalten
 
Zitat:

Zitat von CG2003
Ich weiß nicht genau, aber vielleicht ist es möglich dieser per WinAPI in den "Ruhezustand zu versetzen" ?

Das Problem beim Ruhezustand ist, daß die Festplatten bei jedem Zugriffsversuch sofort wieder "aufwachen" ...da reicht schon ein Click auf den Arbeitsplatz.
Und das ständige aus und an der Platten tut denen ganz schön weh.

tommie-lie 6. Jan 2006 10:31

Re: Festplatte ausschalten
 
Zitat:

Zitat von Der_Ventilator
Kann man irgendwie eine einzelne Festplatte per Software abschalten?

Ein ganz klares: Ja!
Aber fragt mich nicht, wie es unter Windows geht. Unter Linux ist es kein Problem, mit hdparm eine einzelne Festplatte in den Standby-Zustand zu versetzen, da hdparm die Devices einzeln anspricht. Ich wage die Vermutung, daß Windows dafür keine entsprechende Schnittstelle zur Verfügung stellt.

Der_Ventilator 8. Jan 2006 19:35

Re: Festplatte ausschalten
 
Wie wäre es, wenn man eine Platte z.B an den 2. IDE Kanal hängt und diesen in der Systemsteuerung deaktiviert?
Dann müssten doch Zugriffe auf die Platte nicht mehr auftreten?

rantanplan99 8. Jan 2006 19:39

Re: Festplatte ausschalten
 
Also man kann auch unter Windows Festplatten einzeln abschalten. Ich hatte da mal ein Programm das dies konnte, zumindest für P-ATA Festplatten. Vielleicht fällt mir der Programmname noch ein. Dann poste ich den noch.

rantanplan

[EDIT]
Ich habs gefunden: http://www.softlookup.com/display.as...1&DID=4J58YURT

Das Programm heisst "HDSleep", hilft aber wohl nicht weiter da die letzte Version 1.55 von 1999 ist. Die Webseite des Herstellers existiert auch nicht mehr. Und da das Programm für Win9x ist weiss ich nicht ob es unter Win2k/WinXP überhaupt läuft (die gab es 1999 ja noch nicht).
[/EDIT]

TheAn00bis 10. Jun 2006 20:05

Re: Festplatte ausschalten
 
Gibt es dazu wirklich keine Lösung?

Auch ich habe Festplatten, die ich gerne einfach ausschalten könnte.
Sie über das Gerätemanagement zu aktivieren und deaktiveren wäre umständlich und fällt für mich komplett raus, da ich mich dafür immer als Administrator anmelden müsste; ein Programm mit Administrator-Rechten zu starten wäre hingegen kein Problem.

Würde mich über eine Lösung sehr freuen. :)

Daniel G 10. Jun 2006 20:13

Re: Festplatte ausschalten
 
na ja, das Programm bringt einen *.sys (NT) und einen *.vxd (9x) - Treiber mit. Also könnte es unter Win XP arbeiten. Leider lässt sich das Programm nicht starten.... Lizenz abgelaufen... :wall:

Man müsste sich also mal den Treiber näher ansehen....

Daniel G 16. Jun 2006 10:58

Re: Festplatte ausschalten
 
Hmm, ich hab' mir den Treiber mal angesehen. Er importiert zumindestens nicht allzu viele Funktionen:

Delphi-Quellcode:
//Impotierte Funktionen
IoCreateSymbolicLink 00010280   
IoCreateDevice      00010284   
RtlInitUnicodeString 00010288   
IofCompleteRequest  0001028C  
IoDeleteSymbolicLink 00010290   
KeQuerySystemTime   00010294   
IoDeleteDevice      00010298
//Interne Funktionen  
aDeviceHdsback      000102A0   
aDosdevicesHdsb     000102C0   
aDosdevicesHd_0      00010420 
//Exportierte Funktionen
start               000102E8 P
Hat irgendwer eine Idee, wie der Treiber arbeiten könnte? Könnte ein Anfänger in Sachen Treiberprogrammierung mit Grund - C - Syntax - Kenntnissen und ab jetzt zuviel Zeit (/ME) sowas auch schreiben?

*auf Olli wart'*

Daniel G 10. Jul 2006 23:03

Re: Festplatte ausschalten
 
*klick*

Zitat:

in der aktuellen c't wird eine Programmier-Routine beschrieben, mit der man SMART Festplatten steuern kann - Lautstärke, Temperatur und eben auch Festplatten ausmachen.
Nur leider funktioniert das mal wieder nicht mir Raid Controllern.
Hab meine Festplatten aber alle am Raid hängen...
Hat jemand zufällig die c't, die in diesem Zeitraum (25.03.2002) aktuell war und könnte er was zu diesem Thema beisteuern? Ich wollte mir jetzt nicht extra den Artikel kaufen, zumal ich nicht weiß, ob das die c't überhaupt ist (7/02)

Daniel G 13. Jul 2006 19:59

Re: Festplatte ausschalten
 
So, um meinen Monolog jetzt zu komplettieren (:mrgreen:)

Die Lösung

Man definiere folgende Typen (Dank' an Alex Konshin für seine Unit, die diese Definitionen schon beinhaltet)

Delphi-Quellcode:
Type
TIDERegs = packed record
    bFeaturesReg    : Byte; // Used for specifying SMART "commands".
    bSectorCountReg : Byte; // IDE sector count register
    bSectorNumberReg : Byte; // IDE sector number register
    bCylLowReg      : Byte; // IDE low order cylinder value
    bCylHighReg     : Byte; // IDE high order cylinder value
    bDriveHeadReg   : Byte; // IDE drive/head register
    bCommandReg     : Byte; // Actual IDE command.
    bReserved       : Byte; // reserved for future use. Must be zero.
  end;
  IDEREGS  = TIDERegs;
  PIDERegs = ^TIDERegs;

 TIdSector = packed record
    wGenConfig                : Word; //00
    wNumCyls                  : Word;
    wReserved                 : Word;
    wNumHeads                 : Word;
    wBytesPerTrack            : Word;
    wBytesPerSector           : Word;
    wSectorsPerTrack          : Word;
    wVendorUnique             : Array[0..2] of Word;
    sSerialNumber             : Array[0..19] of Char; //10-19
    wBufferType               : Word;
    wBufferSize               : Word;
    wECCSize                  : Word;
    sFirmwareRev              : Array[0..7] of Char; //23-26
    sModelNumber              : Array[0..39] of Char; //27-46
    wMoreVendorUnique         : Word;
    wDoubleWordIO             : Word;
    wCapabilities             : Word;
    wReserved1                 : Word;
    wPIOTiming                : Word;
    wDMATiming                : Word;
    wBS                       : Word;
    wNumCurrentCyls           : Word;
    wNumCurrentHeads          : Word;
    wNumCurrentSectorsPerTrack : Word;
    ulCurrentSectorCapacity   : ULONG; //57-58
    wMultSectorStuff          : Word;
    ulTotalAddressableSectors : ULONG; //60-61
    wSingleWordDMA            : Word;
    wMultiWordDMA             : Word; //63
    wFlowControlPIOSupported  : Word; //64
    wMinimumMultiWordDMA      : Word; //65
    wRecommendedMultiWordDMA  : Word; //66
    wMinimumPIOCycleWOFlow    : Word; //67
    wMinimumPIOCycleIORDYFlow : Word; //68
    bReserved1                 : Array[0..21] of Byte; //69-79
    wMajorVersionNumber       : Word; //80
    wMinorVersionNumber       : Word; //81
    wCommandSetSupported      : Word; //82
    wCommandSetSupported2      : Word; //83
    wCommandSetExtension      : Word; //84
    wCommandSetFeatureEnabled1 : Word; //85
    wCommandSetFeatureEnabled2 : Word; //86
    wCommandSetFeatureEnabled3 : Word; //87
    wUltraDMAMode             : Word; //88
    wTimeRequiredErase        : Word; //89
    wTimeRequiredEnhancedErase : Word; //90
    wAbleMode                 : Word; //91
    bReserved2                 : Array[0..71] of Byte; //92-127
    wSecurityModeFeature      : Word; //128
    wCurrentFeatureOption     : Word; //129
    wReserved2                 : Word; //130
    wInitialPowerMode         : Word; //131
    bReserved3                 : Array[0..247] of Byte; //132-255
  end;
  PIdSector = ^TIdSector;
Man übernehme diese Konstanten:

Delphi-Quellcode:
const
  BufferSize = SizeOf(TIDERegs)+4;
  IOCTL_IDE_PASS_THROUGH       = $0004d028;
Und dann diese beiden Funktionen:
Delphi-Quellcode:
Function IdeRegPassThrough(Device: String; var ideregs: TIDERegs ): Boolean;
var
  ret:BOOL;
  hDevice : THandle;
  cbBytesReturned : DWORD;
  pInData : PIDERegs;
  pOutData : Pointer;
  Buffer : Array[0..BufferSize-1] of Byte;
begin
  Result := False;
  FillChar(Buffer,BufferSize,#0);

  hDevice := CreateFile( PChar(Device), GENERIC_READ or GENERIC_WRITE,
    FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0 );
  if hDevice=INVALID_HANDLE_VALUE then Exit;
  try
    pInData := @Buffer;
     pOutData := pInData;
    pInData^ := ideregs;
    ret := DeviceIoControl( hDevice, IOCTL_IDE_PASS_THROUGH, @Buffer, BufferSize, @Buffer, BufferSize, cbBytesReturned, nil );
    if not ret then begin
      Exit;
    end;
    ideregs := PIDERegs(pOutData)^;
  finally
    CloseHandle(hDevice);
  end;
  Result := True;
end;

function SendToSleep(Device: String): Boolean;
var
  ideregs : TIDERegs;
begin
  Result := False;
  with ideregs do
  begin
    bFeaturesReg    := 0;
    bSectorCountReg := 0;
    bSectorNumberReg := 0;
    bCylLowReg      := 0;
    bCylHighReg     := 0;
    bDriveHeadReg   := $A0;
    bCommandReg     := $E6;
    bReserved       := 0;
  end;
  if not IdeRegPassThrough(Device, ideregs ) then Exit else Result := True;
end;
Voilà.

Jetzt die
Erklärung:
Die Funktion IdeRegPassThrough stammt aus einem japanischen Projekt, in dem es darum ging, das APM von Festplatten unter W2k zu kontrollieren. Um dies zu tun, werden ATA - Kommandos an die Festplatte geschickt. Dies kann man unter Windows 2000 aufwärts mit dem Befehl IOCTL_IDE_PASS_THROUGH bewerkstelligen.
Jetzt brauch man eigentlich nur den Befehl zum Ausschalten an die Platte senden. Dies geschieht mit meiner Funktion SendToSleep, die als Parameter \\.\PhysicalDriveX erwartet, wobei X hier für eine Zahl steht. Dabei repräsentiert die 0 euer erstes IDE - Laufwerk, die 1 euer zweites usw... Der eigentliche Befehl findet sich in dieser Zeile:
Delphi-Quellcode:
bCommandReg     := $E6;
$E6 ist laut ATA - Definition der Sleep-Befehl. Dieser ist ab ATA4 Pflicht. Er erwartet keine weiteren Parameter und gibt auch keine Werte zurück.

Beispielaufruf:
Aufgerufen werden könnte die Funktion zum Beispiel so:
Delphi-Quellcode:
if SendToSleep('\\.\PhysicalDrive'+ SleepEdit.Text) then
 Showmessage('Laufwerk erfolgreich schlafen gelegt')
 else
 Showmessage('Laufwerk nicht schlafen legen können');
end;
Mal sehen, vllt. baue ich so eine Funktion noch in mein SMART - Programm ein. Über den Sinn und Zweck schweige ich mich aus. Es gibt Solche, die meinen, soetwas sei für die Lebensdauer der Hardware nicht förderlich, wieder andere meinen, ab einer gewissen Zeit würde das sogar Sinn ergeben.

Ich hoffe, ich konnte euch etwas helfen...

himitsu 13. Jul 2006 21:46

Re: Festplatte ausschalten
 
Hatte mal vor 'ner ewigkeit so'ne "Doku" gesehn, darin ging es um den Umzug ein (Fernseh)Redaktion und odrt haben die masig aufwand bestrieben, daß die Festplatten janicht zuweit abkühlen ... die Dinger liefen (weil es "angeblich" besser ist) immer durch ... vom Einbau, bis sie mal irgendwann durch 'ne neue esetzt werden (was aus Sicherheitsgrünnden alle ner bestimmten Zeit gemacht wurde)


Also angeblich soll es demnach besser sein, wenn die nicht ständig abschalten ... sich erwärmen und abkühlen, also ausdehnen und zusammenziehn ... wodurch struckturelle Schäden entstehen sollen.

Kann man sich so wie en Sand in den meisten Wüsten vorstellen .. das waren mal rießige steine ... sie eißen Tage und kalten Nächte haben sie aber zebröseln lassen ._.



Für den Umzug liefen die platten also is zur letzten Sekunde wuren superschnell ausbebaut, spezialverpackt verschickt und immernoch warm wieder eingebaut, und angeschaltet ... damit die blosnicht zu sehr auskühlen ...

Christian Seehase 13. Jul 2006 21:49

Re: Festplatte ausschalten
 
Moin Himitsu,

da muss man aber zwischen Server- und Workstationplatten unterscheiden.
Serverplatten sind für den Dauerbetrieb ausgelegt, normale Workstationplatten dafür, dass man ihnen auch mal Ruhe gönnt (was die Serverplatten nicht so sehr mögen ;-))

Muetze1 13. Jul 2006 22:15

Re: Festplatte ausschalten
 
Zitat:

Zitat von Christian Seehase
Moin Himitsu,

da muss man aber zwischen Server- und Workstationplatten unterscheiden.
Serverplatten sind für den Dauerbetrieb ausgelegt, normale Workstationplatten dafür, dass man ihnen auch mal Ruhe gönnt (was die Serverplatten nicht so sehr mögen ;-))

Siehe Maxtor und IBM Standardmodelle, welche dann öfters ausfielen und beide Hersteller daher in den Datenblättern explizit hingewiesen hatten, dass die Platten für einen 8 Stunden Betrieb pro Tag ausgelegt sind.

himitsu 13. Jul 2006 23:07

Re: Festplatte ausschalten
 
dann muß ich mir wohl Sorgen machen ... also wenn die mal ein paar Tage/Wochen durchlaufen?

Christian Seehase 13. Jul 2006 23:35

Re: Festplatte ausschalten
 
Moin Himitsu,

ich würde mir zumindest immer mal wieder die SMART-Daten anschauen, speziell auf Veränderungen

Muetze1 13. Jul 2006 23:47

Re: Festplatte ausschalten
 
Zitat:

Zitat von himitsu
dann muß ich mir wohl Sorgen machen ... also wenn die mal ein paar Tage/Wochen durchlaufen?

Hängt ganz davon ab, welche Serie du kaufst bei den Herstellern. Ich achte schon seit Jahren darauf mit die Serverfestplatten zu kaufen die auch eine entsprechende MTBF haben. Du siehst doch den Typ deiner Festplatte, hole dir in so fern doch die Datenblätter vom Hersteller. Matrox und IBM produzieren solche "Desktop" Festplatten für die 0815 Bürorechner bis heute. Wir hatten gerade bei uns in der Firma eine Reihe austauschen lassen, weil es genau eine solche Reihe war und wir die Laufzeiten in der Firma deutlich überschreiten.

glkgereon 14. Jul 2006 07:45

Re: Festplatte ausschalten
 
naja...aber für leute mit einem homeserver die ihre festplatten aus defekten rechnern aus der schule beziehen könnte das zumindest für die backup-festplatte interessant sein ;-)
diese Linux-variante hört sich SEHR interessant an :-)


Edit:
Ahhhhh....ist das Leise an meinem Server... *genieß*

himitsu 14. Jul 2006 07:54

Re: Festplatte ausschalten
 
dein SMART-Dinges erkennt doch nich alle?

Aber die Wechselplattenlaufwerke haben noch 'ne Kühlung (sind ja in diesen kleinen Einschubkästen eingezwängt) und wnn ich mal Zeit finde, dann bekommt die Hauptplatte ihre Kühlung och wieder danmontiert ^^

ManuMF 14. Jul 2006 10:23

Re: Festplatte ausschalten
 
Hallo,

funktioniert bei mir super!
Nur die Rückmeldung für Erfolg kommt erst, wenn die Platte wieder an ist... :cyclops:

Gruß,
ManuMF

himitsu 14. Jul 2006 10:46

Re: Festplatte ausschalten
 
Ich würd mal vermuten, weil die platte aus is und kein OK mehr senden kann?

Aber steht nich im MSDN, dat es keinen Rückgabewert gibt?



[add]
was ich mich jetzt aber frage ...

sollte man vorher noch alle Volumes dismounten, bevorman abschaltet, oder geschieht das automatisch?
(also so daß auch noch alle Daten abgespeichert werden)

Der_Ventilator 14. Jul 2006 11:21

Re: Festplatte ausschalten
 
Zitat:

Zitat von Daniel G
So, um meinen Monolog jetzt zu komplettieren (:mrgreen:)

Die Lösung
...

Nicht schlecht.
Könntest du dein Demo-Programm, mit dem man Festplatten abschaltet, hier posten?

Eigentlich brauche ich es nicht mehr so sehr, weil ich meine laute 120GB WD Platte in einen externen Käfig verfrachtet habe, den ich per Hand an- und abschalte, aber es ist einen Testlauf wert.

Vjay 14. Jul 2006 11:44

Re: Festplatte ausschalten
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe das ganze mal in eine Unit verfrachtet, für alle die keine Lust haben dies manuell zu tun.
PS. wirklich genial.

Und zu dem, dass es schädlich ist, dass die Platten sich abkühlen, der braucht nur sein Gehäuse mit Platten voll stopfen und die abzuschaltenden über die ständig laufenden platzieren. Meine Backupplatte hängt zwischen meinem Raidset und die wird sicher nicht kalt ;-)

Daniel G 14. Jul 2006 12:24

Re: Festplatte ausschalten
 
Liste der Anhänge anzeigen (Anzahl: 1)
@Vjay: Danke für's "einpacken" :wink:

@ManuMF: hö? Das ist komisch.

@All: Ich habe noch was vergessen:
Anstelle von $E6 nennt die Spezifikation für den selben Befehl auch noch $99.

Außerdem gibt es noch zwei weitere Befehle:

Code:
Standby $E2 oder $96
Standby Immediate $E0 oder $94
Im Anhang mal ein Testprojekt, mit dem ihr die unterschiedlichen Kommandos durchgehen könnt.

P.S.:
Wer den Source lesen kann, weiß es natürlich schon längst, trotzdem sei es nochmal geschrieben:

=> Nur für Win2000 aufwärts
=> Administratorrechte werden benötigt

//Edit:
Zitat:

sollte man vorher noch alle Volumes dismounten, bevorman abschaltet, oder geschieht das automatisch?
(also so daß auch noch alle Daten abgespeichert werden)
Ich denke, das macht Windows automatisch. Man könnte es allerdings vorsichtshalber machen. Wahrscheinlich ist der "Immediate" - Befehl dafür da, dass die Festplatte SOFORT in den Standby geschickt wird. Das ist aber nur eine Vermutung. Die Dokumentation ist nicht so doll....
//Edit2:
*nochmal nachgedacht hat*
Wieso eigentlich dismounten?

Muetze1 14. Jul 2006 13:33

Re: Festplatte ausschalten
 
Zitat:

Zitat von Daniel G
Zitat:

sollte man vorher noch alle Volumes dismounten, bevorman abschaltet, oder geschieht das automatisch?
(also so daß auch noch alle Daten abgespeichert werden)
Ich denke, das macht Windows automatisch. Man könnte es allerdings vorsichtshalber machen. Wahrscheinlich ist der "Immediate" - Befehl dafür da, dass die Festplatte SOFORT in den Standby geschickt wird. Das ist aber nur eine Vermutung. Die Dokumentation ist nicht so doll....

Es ist eine wahre Freude. Hier werden mit den Funktionen rumgespielt und einfach mal rumgebastelt. Aber das Betriebssystem soll's richten... Naja. Schonmal auf die Idee gekommen und mal geschaut? Das IDE PASSTHROUGH Interface füllt die IDE Register und schickt das Kommando direkt an die Platte. Dabei wird nichts überprüft, schliesslich ist es ein PASSTHROUGH (wie der Name schon sagt). Das Betriebssystem kümmert sich nicht drum - du musst nicht umsonst Admin Rechte haben. Du musst sicherstellen das da nix schief geht etc. Das Betriebssystem weiss nix von deinen Aktivitäten - schliesslich sagst du ihm ja nur: "Hier, das schickste jetzt mal der Festplatte und gut ist".

Zu den Befehlen STANDBY und IMMEDIATE STANDBY: Ersteres schickt die Festplatte in den Standby nach dem Sie sichergestellt hat, dass alle Übertragungen und Befehle abgearbeitet wurden und der Cache geschrieben wurde. Der IMMEDIATE STANDBY sagt der Festplatte sie soll sofort in den StandBy gehen und alles stehen und liegen lassen. Die ATA Dokumentationen lassen sich zu den Befehlen genügend aus, schau einfach mal bei dem T13 Technical Committee vorbei und lad dir die aktuellen Dokumente.

Und zu der Frage mit dem dismounten: Wenn Windows was von den Festplatten will und irgendein Befehl hinschickt, dann fährt die Festplatte automatisch wieder an. So kann es sehr gut sein, dass ihr die Platte abschaltet und ein paar Minuten später verfällt die Gültigkeit von Daten des Schreibpuffers und Windows schreibt diese auf die Platte: ergo: sie fährt wieder an und läuft. Daher:

Wenn ihr die Platten schon abschalten wollt, dann empfehle ich euch viel eher das Power Management der Platte zu aktivieren. Dann geht die Festplatte automatisch in den Standby, wenn sie eine einstellbare Zeit lang nix zu tun hat. Das wäre deutlich besser als die Platte schlafen zu legen und eine halbe Minute später will Windows doch was wissen.

Daniel G 14. Jul 2006 14:27

Re: Festplatte ausschalten
 
Zitat:

Zitat von Muetze1
Es ist eine wahre Freude. Hier werden mit den Funktionen rumgespielt und einfach mal rumgebastelt. Aber das Betriebssystem soll's richten... Naja. Schonmal auf die Idee gekommen und mal geschaut? Das IDE PASSTHROUGH Interface füllt die IDE Register und schickt das Kommando direkt an die Platte. Dabei wird nichts überprüft, schliesslich ist es ein PASSTHROUGH (wie der Name schon sagt). Das Betriebssystem kümmert sich nicht drum - du musst nicht umsonst Admin Rechte haben. Du musst sicherstellen das da nix schief geht etc. Das Betriebssystem weiss nix von deinen Aktivitäten - schliesslich sagst du ihm ja nur: "Hier, das schickste jetzt mal der Festplatte und gut ist".

Is' mir auch gerade eingefallen. :roll: Kommt, wenn man Beiträge unter Zeitnot verfasst...

Der_Ventilator 14. Jul 2006 22:59

Re: Festplatte ausschalten
 
Das Problem am PowerManagement ist, das die Platte eben nicht aus bleibt. Windows soll auf die Backupplatte eben nix draufschreiben können, auch wenn es das will.

himitsu 15. Jul 2006 00:01

Re: Festplatte ausschalten
 
Dann mußt du sie eben nicht ausschalten, sondern deaktivieren ;)
Und am Besten den ganzen Port gleich mit, damit nichmal 'ne aktuell vorhandene, auch wenn deaktiverte Karte gefunden würde.
(also einzeln an 'nen Port hängen und diesen dann auch deaktivieren)

jedenfalls mach ich das mit meinen Wechselplatten so, also den IDE-Port in der Systemsteuerung (de)aktiveren ... so kann man halt ganz praktisch 'ne Platte im laufenden Betrieb ein-/ausbauen.

Muetze1 15. Jul 2006 00:07

Re: Festplatte ausschalten
 
Zitat:

Zitat von Der_Ventilator
Das Problem am PowerManagement ist, das die Platte eben nicht aus bleibt. Windows soll auf die Backupplatte eben nix draufschreiben können, auch wenn es das will.

Und du glaubst wirklich mit dem Standby Befehl ist das anders? Übersetz dir mal Stand-By ins deutsche oder anders: Schalte deine Platte in den Standby und geh dann mal im Arbeitsplatz auf die selbige....

Sie bleibt nicht aus - um das zu erreichen ist dies hier der völlig falsche Ansatz. Für dein Problem musst du den Weg wie von himitsu beschrieben gehen.

ManuMF 15. Jul 2006 12:28

Re: Festplatte ausschalten
 
Hallo,

was ist hier eigentlich der Unterschied zwischen Standby und Sleep?

Muetze1 15. Jul 2006 14:51

Re: Festplatte ausschalten
 
Zitat:

Zitat von ManuMF
was ist hier eigentlich der Unterschied zwischen Standby und Sleep?

Warum muss ich hier immer die ATA Specs lesen, schau selber nach:

ATA 7 Specs, Volume 1 release 4a
ATA 7 Specs, Volume 2 release 4a
ATA 7 Specs, Volume 3 release 4a

ManuMF 15. Jul 2006 15:26

Re: Festplatte ausschalten
 
Hallo,

was heißt hier "muss"? :roll:

Das war eine einfache Frage, es hätte ja auch eine eine einfache Antwort geben können. :?

Die Specs möchte ich selbst auch nicht durchforsten, aber dass Manche aus einer Frage einen Befehl machen...

Muetze1 15. Jul 2006 16:36

Re: Festplatte ausschalten
 
Zitat:

Zitat von ManuMF
Die Specs möchte ich selbst auch nicht durchforsten, ...

Genau - und warum solltes andere machen? Die interessiert die Frage schliesslich nicht... :gruebel: :twisted:

TurboMartin 15. Jul 2006 16:49

Re: Festplatte ausschalten
 
Soweit ich weiß, geht das noch viel einfacher. :-D

Delphi-Quellcode:
var hIntr: Longword (* Interruptnummer *)

(* fürs ausschalten: *)
IOUnregisterInterrupt(hIntr);
IODisconnectInterrupt(hIntr);

(* fürs einschalten: *)
IoConnectInterrupt(
    OUT PKINTERRUPT *InterruptObject,
    IN PKSERVICE_ROUTINE ServiceRoutine,
    IN PVOID ServiceContext,
    IN PKSPIN_LOCK SpinLock OPTIONAL,
    IN ULONG Vector,
    IN KIRQL Irql,
    IN KIRQL SynchronizeIrql,
    IN KINTERRUPT_MODE   InterruptMode,
    IN BOOLEAN ShareVector,
    IN KAFFINITY ProcessorEnableMask,
    IN BOOLEAN FloatingSave
    );
IORegisterInterrupt(hIntr);
(* aus der MSDNLibary, da ich nicht alle Parameter auswendig weiß. Mehr dazu weiter unten. *)
Oder noch einfacher:

Delphi-Quellcode:
(* fürs ausschalten: *)
IoDeleteDevice(
    IN PDEVICE_OBJECT DeviceObject
    );
IoDeleteSymbolicLink(
    IN PUNICODE_STRING SymbolicLinkName
    );

(* fürs einschalten: *)
IoCreateDevice(
    IN PDRIVER_OBJECT DriverObject,
    IN ULONG DeviceExtensionSize,
    IN PUNICODE_STRING DeviceName OPTIONAL,
    IN DEVICE_TYPE DeviceType,
    IN ULONG DeviceCharacteristics,
    IN BOOLEAN Exclusive,
    OUT PDEVICE_OBJECT *DeviceObject
    );
IoCreateSymbolicLink(
    IN PUNICODE_STRING SymbolicLinkName,
    IN PUNICODE_STRING DeviceName
    );
(* aus der MSDNLibary, da ich nicht alle Parameter auswendig weiß. Mehr dazu weiter unten. *)
MSDN-Links:
IODeleteDevice
IOCreateDevice
IODeleteSymbolicLink
IOCreateSymbolicLink

Die restlichenLinks poste ich mal nicht, die sind dann auch leicht in der Navi links zu finden.
ACHTUNG!!! Bei allen muss noch eine wdm.h oder ntddk.h eingebunden werden, unter Delphi ist es nicht drin (hab ich jedenfals nicht gefunden).

Daniel G 15. Jul 2006 17:48

Re: Festplatte ausschalten
 
Das sind genau dieselben Funktionen, die der Treiber aufruft. Wenn man diese Funktionen also in einen Treiber packen muss*, wird die Sache eher komplizierter, da man mit Delphi keine Treiber schreiben kann sollte. (Das Aufwand - Nutzen - Verhältnis stimmt nicht.)

//Edit:
*ja, muss man:
Zitat:

The IoCreateDevice routine creates a device object for use by a driver.

Muetze1 15. Jul 2006 22:42

Re: Festplatte ausschalten
 
Zitat:

Zitat von TurboMartin
ACHTUNG!!! Bei allen muss noch eine wdm.h oder ntddk.h eingebunden werden, unter Delphi ist es nicht drin (hab ich jedenfals nicht gefunden).

Jo, Delphi hat zwar eine teilweise übersetzte WinAPI SDK dabei, aber die werden bestimmt keine DDK übersetzen und beipacken. Das DDK kannste nicht umsonst auch nur als registrierter Entwickler und Lizenznehmer runterladen (MSDN Abo).

Sleep Command:
Zitat:

This command is the only way to cause the device to enter Sleep mode.
This command shall cause the device to set the BSY bit to one, prepare to enter Sleep mode, clear the BSY
bit to zero and assert INTRQ. The host shall read the Status register in order to clear the Interrupt Pending
and allow the device to enter Sleep mode. In Sleep mode, the device shall only respond to the assertion of
the RESET- signal and the writing of the SRST bit in the Device Control register and shall release the device
driven signal lines (See Figure 4). The host shall not attempt to access the Command Block registers while
the device is in Sleep mode.
Because some host systems may not read the Status register and clear the Interrupt Pending, a device may
release INTRQ and enter Sleep mode after a vendor specific time period of not less than 2 s.
The only way to recover from Sleep mode is with a software reset, a hardware reset, or a DEVICE RESET
command.
A device shall not power-on in Sleep mode nor remain in Sleep mode following a reset sequence.
Standby Command:
Zitat:

This command causes the device to enter the Standby mode.
If the Sector Count register is non-zero then the Standby timer shall be enabled. The value in the Sector
Count register shall be used to determine the time programmed into the Standby timer (See Table 19).
If the Sector Count register is zero then the Standby timer is disabled.
Standby Immediatly Command:
Zitat:

This command causes the device to immediately enter the Standby mode.
Idle Command:
Zitat:

The IDLE command allows the host to place the device in the Idle mode and also set the Standby timer.
INTRQ may be asserted even though the device may not have fully transitioned to Idle mode.
If the Sector Count register is non-zero then the Standby timer shall be enabled. The value in the Sector
Count register shall be used to determine the time programmed into the Standby timer (See 4.5). If the
Sector Count register is zero then the Standby timer is disabled.
Idle Immediatly Command:
Zitat:

Default Fuction:
The IDLE IMMEDIATE command allows the host to immediately place the device in the Idle mode. INTRQ
may be asserted even though the device may not have fully transitioned to Idle mode (See 4.5).
Unload Feature:
The UNLOAD FEATURE of the IDLE IMMEDIATE command allows the host to immediately unload/park the
heads. The device shall stop read look-ahead if it is in process. If the device is performing a write operation,
the device shall suspend writing cached data onto the media as soon as possible, and keep unwritten
sectors stored in the buffer until receiving a new command.
A device that supports load/unload technology shall retract the head(s) onto the ramp position as soon as
receiving this command. INTRQ shall be asserted and BSY shall be cleared after the head(s) is(are)
completely retracted onto the ramp position and latched if available. The time to complete the unload
operation is vendor specific, this typically would be within 500 milliseconds of receiving the command. The
unload controlling method by the Unload Feature of the Idle Immediate command shall be the same as that
by Power mode transition, and shall not effect the specification of normal load/unload times per device life.
A device that supports contact start/stop technology shall seek to the landing zone. INTRQ shall be asserted
and BSY shall be cleared after seek completion. The time to complete the seek operation is vendor specific,
this typically would be within 300 milliseconds of receiving this command.
The device shall stay at Low Power Idle mode, shall not go into Standby mode and shall not load the head(s)
onto the media until receiving a new command. Power consumption of the device is not an issue for this
case. If a device receives this command while the head(s) is(are) currently on ramp/parked no physical
action is needed.
The device shall retain data in the write cache and resume writing the cached data onto the media after
receiving a Software Reset, a Hardware Reset, or any new command except IDLE IMMEDIATE with
UNLOAD FEATURE.

TurboMartin 16. Jul 2006 11:43

Re: Festplatte ausschalten
 
Zitat:

Zitat von Muetze1
Zitat:

Zitat von TurboMartin
ACHTUNG!!! Bei allen muss noch eine wdm.h oder ntddk.h eingebunden werden, unter Delphi ist es nicht drin (hab ich jedenfals nicht gefunden).

Jo, Delphi hat zwar eine teilweise übersetzte WinAPI SDK dabei, aber die werden bestimmt keine DDK übersetzen und beipacken. Das DDK kannste nicht umsonst auch nur als registrierter Entwickler und Lizenznehmer runterladen (MSDN Abo).

Also ich hab gestern das neuste ohne Registrierung vom Microsoft-Server geladen. Nur EULA muste ich akzeptiren.

Muetze1 16. Jul 2006 19:38

Re: Festplatte ausschalten
 
Dann gib mir den Link - und bitte nicht zu einem DirectX SDK, dem Platform SDK oder sonstigem SDK, sondern zum DDK. Den würde ich gerne haben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:33 Uhr.
Seite 1 von 2  1 2      

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