/ / Per codice, come posso inviare un'unità disco fisso in modalità sospensione - c #, windows, hardware

Per codice, come posso inviare un hard disk per dormire - c #, windows, hardware

Ho un sacco di hard disk nel mio computer (7).

Quando non vengono utilizzati, l'opzione di alimentazione li inviaa dormire dopo un po '. Ma poiché tutto fa molto rumore, vorrei mandarli a dormire quando voglio, non solo dopo il timeout di sistema predefinito.

Su Windows (XP e versioni successive), preferibilmente in C #,

Come posso inviare un disco in modalità di sospensione tramite codice?

Grazie mille in anticipo per il tuo aiuto ...

risposte:

1 per risposta № 1

Non conosco l'API per farlo direttamente ma ci sono strumenti che possono farlo. Uno che ho visto è Hard Disk Sleeper. Non l'ho usato sulle mie macchine, quindi non posso parlare della sua qualità o efficacia.


1 per risposta № 2

È possibile farlo se si inviano comandi ATA direttamente a un'unità mediante IOCTL_ATA_PASS_THROUGH. Dovrai passare il comando SLEEP.

Non penso che questo sia un progetto per C #.


1 per risposta № 3

AFAIK, questo è un comando ATA che imposta lo * spindown time8 - significa che "è l'unità stessa che si spegne. È possibile utilizzare IOCTL_ATA_PASS_THROUGH per inviare comandi direttamente all'unità - ma temo che non farei meglio di impostarlo su un valore minimo (che non ho" non so cosa sia, ma dovrebbe essere nelle specifiche ATA).

Modifica: sembra il venerabile hdparm lo supporta, quindi deve essere nelle specifiche ATA:

-y Forzare un'unità IDE ad accedere immediatamente alla modalità standby a basso consumo energetico, causando in genere una riduzione.

-Y Forza un'unità IDE a immettere immediatamente il filemodalità di sospensione a basso consumo energetico, provocando lo spegnimento completo. È necessario un ripristino hardware o software prima di poter accedere nuovamente all'unità (il driver IDE di Linux gestirà automaticamente l'emissione di un ripristino se / quando necessario).

Da hdparm (e il kernel Linux sottostante che utilizza per comunicare con l'unità) è GPL - dovresti essere in grado di cogliere le specifiche da lì se non hai una specifica ATA a portata di mano.

Oppure usa semplicemente il porta win32.


0 per risposta № 4

Onestamente non penso che sia possibile farlo usando solo C # (cioè il framework .NET).

Indipendentemente da ciò, vorrei iniziare conoscendo WMI e ACPI.

Questo tende ad essere il tipo di cosa che richiedeapprofondire un linguaggio di livello inferiore (almeno per capire le chiamate API da utilizzare con PInvoke) perché di solito comporta l'interazione ravvicinata con il sistema operativo o eventualmente direttamente con un driver.

Forse potresti iniziare indagando sul Funzioni di gestione dell'alimentazione di Windows anche se non credo che consenta il controllo dei singoli dischi rigidi.