【发布时间】:2010-03-16 09:05:32
【问题描述】:
如何在 Windows 中将硬盘驱动器置于待机或睡眠模式,以编程方式。
Windows API 或任何 .Net 库是否提供任何函数来实现这一点? (我知道我可能不应该干涉 Windows 的电源管理机制,但这不是我打算在生产环境中使用的东西,它是一些算法的概念证明)。
【问题讨论】:
如何在 Windows 中将硬盘驱动器置于待机或睡眠模式,以编程方式。
Windows API 或任何 .Net 库是否提供任何函数来实现这一点? (我知道我可能不应该干涉 Windows 的电源管理机制,但这不是我打算在生产环境中使用的东西,它是一些算法的概念证明)。
【问题讨论】:
我发现了一个名为“RevoSleep”的程序。 警告:音乐! http://revosleep.realspooky.de/
我不能告诉你它是否有效[我没有勇气尝试:)] 但我确实尝试使用.NET Reflector 对其进行反编译。哪一个,你瞧,奏效了。 (我找不到这个东西是根据什么授权的,所以小心。)
在不知道我在看什么的情况下,这些 sn-ps 似乎最相关。他们都使用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
祝你好运。
【讨论】: