/ / Kodem, jak mogę uśpić dysk twardy - c #, Windows, sprzęt

Według kodu, jak mogę wysłać dysk twardy do spania - c #, Windows, sprzęt

Mam dużo dysków twardych w moim komputerze (7).

Kiedy nie są używane, opcja mocy je wysyłaspać po chwili. Ale ponieważ wszystko robi dużo hałasu, chciałbym je uśpić, kiedy chcę, a nie tylko po domyślnym limicie czasu systemu.

W systemie Windows (XP i nowsze), najlepiej w języku C #,

Jak mogę wysłać dysk do uśpienia za pomocą kodu?

Z góry dziękuję za pomoc ...

Odpowiedzi:

1 dla odpowiedzi № 1

Nie znam interfejsu API, aby to zrobić bezpośrednio, ale są narzędzia, które mogą to zrobić. Jeden, który widziałem, to Uśpienie dysku twardego. Nie używałem go na własnych maszynach, więc nie mogę mówić o jego jakości ani skuteczności.


1 dla odpowiedzi nr 2

Jest to możliwe, jeśli wysyłasz polecenia ATA bezpośrednio do napędu za pomocą IOCTL_ATA_PASS_THROUGH. Będziesz musiał przekazać polecenie SLEEP.

Nie sądzę jednak, że jest to projekt dla C #.


1 dla odpowiedzi nr 3

AFAIK, to jest polecenie ATA, które ustawia * spindown time8 - co oznacza, że ​​wyłącza się sam dysk. Możesz użyć IOCTL_ATA_PASS_THROUGH do wysyłania poleceń bezpośrednio do dysku - ale obawiam się, że nie zrobiłbyś nic lepszego niż po prostu ustawienie wartości minimalnej (której nie robię) wiem, co to jest, ale powinno znajdować się w specyfikacji ATA).

Edycja: Wygląda na czcigodnego hdparm to obsługuje, więc musi być w specyfikacji ATA:

-y Wymuś na dysku IDE natychmiastowe przejście w tryb gotowości z niskim zużyciem energii, co zwykle powoduje jego wyłączenie.

-Y Wymusza na dysku IDE natychmiastowe wprowadzenie plikunajniższy pobór mocy w trybie uśpienia, powodując całkowite wyłączenie. Przed ponownym uzyskaniem dostępu do dysku wymagany jest twardy lub miękki reset (sterownik Linux IDE automatycznie obsłuży resetowanie, jeśli / kiedy będzie to konieczne).

Od hdparm (i bazowe jądro Linuksa, którego używa do komunikacji z dyskiem) to GPL - powinieneś być w stanie wyciągnąć tam szczegóły, jeśli nie masz pod ręką specyfikacji ATA.

Lub po prostu użyj port win32.


0 dla odpowiedzi nr 4

Szczerze mówiąc, nie sądzę, aby można to zrobić używając tylko C # (tj. Frameworka .NET).

Niezależnie od tego, zacząłbym od poznania WMI i ACPI.

Zwykle jest to coś, co wymagazagłębić się w język niższego poziomu (przynajmniej po to, aby dowiedzieć się, jakie wywołania API mają być używane z PInvoke), ponieważ zwykle wymaga to ścisłej interakcji z systemem operacyjnym lub prawdopodobnie bezpośrednio ze sterownikiem.

Może mógłbyś zacząć od zbadania Funkcje zarządzania energią systemu Windows chociaż nie sądzę, aby umożliwiał sterowanie poszczególnymi dyskami twardymi.