HD in den Sleep-Modus schalten
Verfasst: 13.10.2006 09:18
Hallo,
habe wieder versucht eines meiner Delphi-Source nach PB zu übertragen.
Funktioniert, aber ich glaube das könnte man sicher schöner lösen. Besonders der Part mit dem Buffer gefällt mir nicht!
habe wieder versucht eines meiner Delphi-Source nach PB zu übertragen.
Funktioniert, aber ich glaube das könnte man sicher schöner lösen. Besonders der Part mit dem Buffer gefällt mir nicht!
Code: Alles auswählen
;******************************************
;* Festplatte in den Sleep-Modus schalten *
;* Windows NT/2000/XP ab ATA4 *
;* Info to: fremdenlegion [at] gmail.com *
;******************************************
#BufferSize = 12
#IOCTL_IDE_PASS_THROUGH = $4D028 ;ATA - Kommando an die Festplatte
Device.s = "\\.\PhysicalDrive0" ;Die erste physikalische HD
hDevice = CreateFile_(@Device,#GENERIC_READ|#GENERIC_WRITE ,#FILE_SHARE_READ|#FILE_SHARE_WRITE,#Null,#OPEN_EXISTING,#FILE_ATTRIBUTE_NORMAL,0)
If hDevice = INVALID_HANDLE_VALUE
MessageRequester("Info","Laufwerk konnte nicht angesprochen werden",#PB_MessageRequester_Ok)
Goto Exit
EndIf
Dim Buffer.b(#BufferSize)
Buffer(0)= 0
Buffer(1)= 0
Buffer(2)= 0
Buffer(3)= 0
Buffer(4)= 0
Buffer(5)= $A0
Buffer(6)= $E6 ;--> laut ATA-Definition der Sleep-Befehl
Buffer(7)= 0
Buffer(8)= 0
Buffer(9)= 0
Buffer(10)= 0
Buffer(11)= 0
ReturnValue = DeviceIoControl_(hDevice,#IOCTL_IDE_PASS_THROUGH,@Buffer(),#BufferSize,@Buffer(),#BufferSize,@cbBytesReturned,#Null)
If ReturnValue <> 0
MessageRequester("Info","HD erfolgreich im Sleep-Modus",#PB_MessageRequester_Ok)
Else
MessageRequester("Info","Sleep-Modus fehlgeschlagen",#PB_MessageRequester_Ok)
EndIf
CloseHandle_(hDevice)
Exit:
End