【问题标题】:Windows - put HDD stand-by and sleep modeWindows - 将硬盘置于待机和睡眠模式
【发布时间】:2010-03-16 09:05:32
【问题描述】:

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

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

【问题讨论】:

    标签: .net winapi


    【解决方案1】:

    我发现了一个名为“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

    祝你好运。

    【讨论】:

      猜你喜欢
      • 2016-05-17
      • 1970-01-01
      • 2017-05-03
      • 2011-03-12
      • 1970-01-01
      • 1970-01-01
      • 2011-03-15
      • 1970-01-01
      • 2016-01-27
      相关资源
      最近更新 更多