2010-03-16 45 views
3

如何將硬盤驅動器以編程方式置於Windows的待機或睡眠模式下,Windows - 把硬盤驅動器待機和睡眠模式

Windows API或任何.Net庫是否提供了實現此功能的任何功能? (我知道我可能不應該干擾Windows的電源管理機制,但這不是我打算在生產環境中使用的,它是某些算法的概念證明)。

回答

4

我找到了一個名爲「RevoSleep」的程序。 警告:音樂!http://revosleep.realspooky.de/

我不能告訴你它是否可以工作[我不敢嘗試:)]但我確實嘗試了用.NET Reflector反編譯它。哪一個,你看,工作。 (我找不到這個東西是什麼授權的,所以要當心。)

不知道我在看什麼,這些代碼片段似乎最相關。他們都使用Windows API功能DeviceIoControl

「睡眠」 驅動:

if (Environment.OSVersion.Version.Build > 0xa28) 
{ 
    num2 = DeviceIoControl(this.hDevice[0], 0x4d02c, (void*) &_ata_pass_through_ex_with_buffer, 40, (void*) &_ata_pass_through_ex_with_buffer, 40, (uint modopt(IsLong)*) &num11, null); 
} 
else 
{ 
    num2 = DeviceIoControl(this.hDevice[0], 0x4d028, (void*) &_ata_pass_through, 0x20c, (void*) &_ata_pass_through, 0x20c, (uint modopt(IsLong)*) &num11, null); 
    //... 
} 

「鎖定」 驅動器:

DeviceIoControl(hDevice[index], 0x90018, null, 0, null, 0, (uint modopt(IsLong)*) &num11, null); 

「停用」 驅動:

DeviceIoControl(this.hDevice[0], 0x2d1080, null, 0, (void*) &_storage_device_number2, 12, (uint modopt(IsLong)*) &num8, null); 

「放卷在脫機狀態」(?) :

DeviceIoControl(this.hDevice[num3], 0x56c00c, null, 0, null, 0, (uint modopt(IsLong)*) &num11, null); 

這再一次,我不知道這是否工作,甚至是你在找什麼。你總是可以嘗試反編譯它並自己查看所有的代碼。

或者,這些api調用中的任何一個都可以提供幫助嗎?
SetSuspend function
GetPwrDiskSpindownRange function

好運。