代码之家  ›  专栏  ›  技术社区  ›  kjv

Windows-放置HDD待机和休眠模式

  •  2
  • kjv  · 技术社区  · 15 年前

    如何在Windows中将硬盘驱动器置于待机或休眠模式, 以程序化的方式 .

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

    1 回复  |  直到 7 年前
        1
  •  4
  •   Matt Blaine    15 年前

    我找到了一个叫做“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

    祝你好运。