Windows - 放置硬盘待机和睡眠模式

时间:2010-03-16 09:05:32

标签: .net winapi

如何在Windows中将硬盘驱动器置于待机或睡眠模式,以编程方式

Windows API或任何.Net库是否提供了实现此功能的任何功能? (我知道我可能不应该干扰Windows的电源管理机制,但这不是我打算在生产环境中使用的,它是某些算法的概念证明。)

1 个答案:

答案 0 :(得分:4)

我找到了一个名为“RevoSleep”的程序。 警告:音乐! http://revosleep.realspooky.de/

我不能告诉你它是否有效[我不够勇敢尝试:)]但我确实尝试用.NET Reflector反编译它。哪个,看哪,工作。 (我无法在 beware 下找到这个东西的许可。)

如果不知道我在看什么,这些片段似乎最相关。它们都使用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

祝你好运。

相关问题