/ / Por código, como posso enviar uma unidade de disco rígido para dormir - c #, windows, hardware

Por código, como posso enviar uma unidade de disco rígido para dormir - c #, windows, hardware

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 № 1

Eu 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.