Spin Down Hard Disk Programmatically on Windows?

前端 未结 5 459
名媛妹妹
名媛妹妹 2021-02-01 19:44

How do you request Windows to spin down a hard disk programmatically? Is there any user-mode function I can call (or kernel-mode function to call or IRP to send) in order to mak

5条回答
  •  旧巷少年郎
    2021-02-01 20:07

    Have you tried WMI? Based on MSDN documentation, you should be able to send spindown command to HDD via WMI:

    http://msdn.microsoft.com/en-us/library/aa393493%28v=VS.85%29.aspx

    uint32 SetPowerState(
      [in]  uint16 PowerState,
      [in]  datetime Time
    );
    

    EDIT:

    This code lists all drives in system and drives that support this API:

    strServer = "."
    
    Set objWMI = GetObject("winmgmts://" & strServer & "/root\cimv2")
    rem Set objInstances = objWMI.InstancesOf("CIM_DiskDrive",48)
    Set objInstances = objWMI.ExecQuery("Select * from CIM_DiskDrive",,48) 
    On Error Resume Next
    For Each objInstance in objInstances
        With objInstance
            WScript.Echo Join(.Capabilities, ", ")
            WScript.Echo Join(.CapabilityDescriptions, ", ")
            WScript.Echo .Caption
            WScript.Echo .PNPDeviceID
            WScript.Echo "PowerManagementCapabilities: "  & .PowerManagementCapabilities
            WScript.Echo "PowerManagement Supported: " & .PowerManagementSupported
            WScript.Echo .Status
            WScript.Echo .StatusInfo
        End With
    On Error Goto 0
    Next
    

    Just save this code as a .vbs file and run that from command line.

提交回复
热议问题