Eu tenho muitos discos rígidos no meu computador (7).
Quando eles não são usados, a opção de energia os enviapara dormir depois de um tempo. Mas como tudo faz muito barulho, eu gostaria de mandá-los para dormir quando eu quiser, não apenas após o tempo limite padrão do sistema.
No Windows (XP e acima), de preferência em C #,
Como posso enviar um disco para dormir por código?
Muito obrigado antecipadamente por sua ajuda...
Respostas:
1 para resposta № 1Eu não sei da API para fazer isso diretamente, mas existem ferramentas que podem fazer isso. Um que eu vi é Dorminhoco do disco rígido. Eu não usei isso em minhas próprias máquinas, então não posso falar sobre sua qualidade ou eficácia.
1 para resposta № 2
É possível fazer isso se você enviar comandos ATA diretamente para uma unidade usando IOCTL_ATA_PASS_THROUGH. Você precisará passar o comando SLEEP.
Eu não acho que isso é um projeto para C # embora.
1 para resposta № 3
AFAIK, este é um comando ATA que define o giro *down time8 - significa que é a própria unidade que desliga. Você poderia usar IOCTL_ATA_PASS_THROUGH para enviar comandos diretamente para a unidade - mas eu receio que você não faça nada melhor do que apenas configurá-la com algum valor mínimo (o que eu não faço) Não sei o que é, mas deve estar nas especificações do ATA).
Edit: Parece que o venerável O hdparm suporta, então deve estar nas especificações do ATA:
-y Force uma unidade IDE a entrar imediatamente no modo de espera de baixo consumo de energia, geralmente fazendo com que ela desacelere.
-Y Força uma unidade IDE a entrar imediatamentemenor consumo de energia no modo sleep, fazendo com que ele desligue completamente. Uma redefinição de hardware ou software é necessária para que a unidade possa ser acessada novamente (o driver IDE do Linux tratará automaticamente a redefinição se / quando necessário).
Desde a hdparm (e o kernel Linux subjacente que ele usa para se comunicar com a unidade) é GPL - você deve ser capaz de criar os detalhes de lá se não tiver uma especificação ATA à mão.
Ou apenas use o porta win32.
0 para a resposta № 4
Eu sinceramente não acho que é possível fazer isso usando apenas C # (ou seja, o .NET framework).
Independentemente disso, eu começaria aprendendo sobre WMI e ACPI.
Isso tende a ser o tipo de coisa que requervocê se aprofunda em uma linguagem de nível mais baixo (pelo menos para descobrir as chamadas da API para usar com o PInvoke) porque geralmente envolve interagir de perto com o sistema operacional ou possivelmente diretamente com um driver.
Talvez você possa começar investigando o Funções de gerenciamento de energia do Windows embora eu não pense que permite o controle dos discos rígidos individuais.