如何在没有电池设备的Windows工作站中以编程方式模拟电池?

时间:2018-06-02 16:14:43

标签: windows battery

出于测试目的,我需要强制Windows认为它在工作站PC上有电池。

在没有电池设备的Windows工作站中,有没有办法伪造/模拟/模拟/模拟电池状态/低电平/充电/放电?

我可以在Windows上以编程方式设置电池电量吗?

2 个答案:

答案 0 :(得分:2)

tl; dr :使用Windows驱动程序工具包(WDK)中的Windows Driver Testing Framework (WDTF) Runtime Libraries

长篇指示:

  1. 使用Windows驱动程序工具包(WDK)安装Visual Studio
  2. 创建虚拟机
  3. WDK Test Target Setup x64-x64_en-us.msi
  4. 中查找C:\Program Files (x86)\Windows Kits
  5. 在虚拟机上安装WDK Test Target Setup x64-x64_en-us.msi
  6. 在Visual Studio中,在主菜单Driver>中测试>配置设备添加要安装的虚拟机(WDTF)运行时库。 simulate windows battery device

  7. 从工作站上的虚拟机副本文件夹C:\Program Files (x86)\Windows Kits\10\Testing\Runtimes\WDTF\RunTime

  8. RunTime文件夹以管理员RegisterWDTF.exe
  9. 运行

    输出:

    C:\RunTime>RegisterWDTF.exe
    -Delete registry state.
    -Get registry path.
    -Register COM DLLs.
       Process "C:\RunTime\Actions\Deprecated\DeviceManagement.dll".
       Process "C:\RunTime\Actions\DeviceSupport\WDTFDeviceSupportAction.dll".
       Process "C:\RunTime\Actions\DrvPkgLibExt.dll".
          Not a COM DLL
    
       Process "C:\RunTime\Actions\EDT\WDTFEDTAction.dll".
       Process "C:\RunTime\Actions\IoSpy\WDTFIoAttackAction.dll".
       Process "C:\RunTime\Actions\IoSpy\WDTFIoSpyAction.dll".
       Process "C:\RunTime\Actions\SimpleIO\SimpleIO_D3DTest.dll".
       Process "C:\RunTime\Actions\SimpleIO\WDTFAnySimpleIoAction.dll".
       Process "C:\RunTime\Actions\SimpleIO\WDTFAudioSimpleIoAction.dll".
       Process "C:\RunTime\Actions\SimpleIO\WDTFBluetoothSimpleIoAction.dll".
       Process "C:\RunTime\Actions\SimpleIO\WDTFCDROMSimpleIoAction.dll".
       Process "C:\RunTime\Actions\SimpleIO\WDTFMobileBroadbandSimpleIoAction.dll".
       Process "C:\RunTime\Actions\SimpleIO\WDTFMUTT2STRESSSimpleIoAction.dll".
       Process "C:\RunTime\Actions\SimpleIO\WDTFMUTT2TCDSimpleIoAction.dll".
       Process "C:\RunTime\Actions\SimpleIO\WDTFNetworkSimpleIoAction.dll".
       Process "C:\RunTime\Actions\SimpleIO\WDTFVolumeSimpleIoAction.dll".
       Process "C:\RunTime\Actions\SimpleIO\WDTFWebcamSimpleIoAction.dll".
       Process "C:\RunTime\Actions\SimpleIO\WDTFWirelessSimpleIoAction.dll".
       Process "C:\RunTime\Actions\SimpleIO\WDTFWPDSimpleIoAction.dll".
       Process "C:\RunTime\Actions\SimulatedBattery\WDTFSimulatedBatterySystemAction.dll".
       Process "C:\RunTime\Actions\System\WDTFSystemAction.dll".
       Process "C:\RunTime\Actions\WDTFConcurrentIOAction.dll".
       Process "C:\RunTime\Actions\WDTFCpuUtilizationSystemAction.dll".
       Process "C:\RunTime\Actions\WDTFDriverPackageAction.dll".
       Process "C:\RunTime\Actions\WDTFDriverSetupDeviceAction.dll".
       Process "C:\RunTime\Actions\WDTFDriverSetupSystemAction.dll".
       Process "C:\RunTime\Actions\WDTFDriverVerifierSystemAction.dll".
       Process "C:\RunTime\Actions\WDTFFuzzTestAction.dll".
       Process "C:\RunTime\Actions\WDTFInterfaces\WDTFInterfaces.dll".
       Process "C:\RunTime\Actions\WDTFPNPAction.dll".
       Process "C:\RunTime\Actions\WDTFSUPAction.dll".
       Process "C:\WDTF.DLL".
    -Update registry state.
    -Install Drivers.
    -Done
    
     WDTF Registration Successful
    

    现在你可以使用COM对象" WDTF2.WDTF"在您的程序语言中,如在此VBScript示例中:

    '
    ' Variable defenition 
    '
    Dim WDTF
    Dim SimulatedBatterySystemSystemAction
    
    
    '
    ' Create WDTF object
    '
    Set WDTF = CreateObject("WDTF2.WDTF")
    
    '
    '  Get your newly created SimulatedBatterySystem action interface
    '
    Set SimulatedBatterySystemSystemAction = WDTF.SystemDepot.ThisSystem.GetInterface("SimulatedBatterySystem")
    
    
    '  enable the simulated battery
    SimulatedBatterySystemSystemAction.EnableSimulatedBattery()
    
    '  disable real batteries
    SimulatedBatterySystemSystemAction.DisableRealBatteries()
    
    '  set to DC power status
    SimulatedBatterySystemSystemAction.SetSimulatedBatteryToDC()
    
    '  set to 50% charge level
    SimulatedBatterySystemSystemAction.SetSimulatedBatteryChargePercentage(50)
    
    WScript.Sleep 10000 
    
    '  set to AC power status
    SimulatedBatterySystemSystemAction.SetSimulatedBatteryToAC()
    
    '  enable real batteries
    SimulatedBatterySystemSystemAction.EnableRealBatteries()
    
    '  disable the simulated battery
    SimulatedBatterySystemSystemAction.DisableSimulatedBattery()
    

    此处所有WDTF参考:https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/content/_dtf/

    以防万一,Linux假电池模块:https://github.com/hoelzro/linux-fake-battery-module

答案 1 :(得分:1)

Oleg的回答相当简单,但是我无法使其模拟电池-禁用和启用实际电池的操作确实成功。

PS C:\RunTime> .\RegisterWDTF.exe
This version of WDTF is compatible with Windows Build 17763.
-Delete registry state.
-Get registry path.
-Register COM DLLs.
   Process "C:\RunTime\Actions\Deprecated\DeviceManagement.dll".
   Process "C:\RunTime\Actions\DeviceSupport\WDTFDeviceSupportAction.dll".
   Process "C:\RunTime\Actions\DrvPkgLibExt.dll".
      Not a COM DLL

   Process "C:\RunTime\Actions\EDT\WDTFEDTAction.dll".
   Process "C:\RunTime\Actions\IoSpy\WDTFIoAttackAction.dll".
   Process "C:\RunTime\Actions\IoSpy\WDTFIoSpyAction.dll".
   Process "C:\RunTime\Actions\SimpleIO\SimpleIO_D3DTest.dll".
   Process "C:\RunTime\Actions\SimpleIO\WDTFAnySimpleIoAction.dll".
   Process "C:\RunTime\Actions\SimpleIO\WDTFAudioSimpleIoAction.dll".
   Process "C:\RunTime\Actions\SimpleIO\WDTFBluetoothSimpleIoAction.dll".
   Process "C:\RunTime\Actions\SimpleIO\WDTFCDROMSimpleIoAction.dll".
   Process "C:\RunTime\Actions\SimpleIO\WDTFMobileBroadbandSimpleIoAction.dll".
   Process "C:\RunTime\Actions\SimpleIO\WDTFMUTT2STRESSSimpleIoAction.dll".
   Process "C:\RunTime\Actions\SimpleIO\WDTFMUTT2TCDSimpleIoAction.dll".
   Process "C:\RunTime\Actions\SimpleIO\WDTFNetworkSimpleIoAction.dll".
   Process "C:\RunTime\Actions\SimpleIO\wdtfsensorsiosimpleioaction.dll".
   Process "C:\RunTime\Actions\SimpleIO\WDTFVolumeSimpleIoAction.dll".
   Process "C:\RunTime\Actions\SimpleIO\WDTFWebcamSimpleIoAction.dll".
   Process "C:\RunTime\Actions\SimpleIO\WDTFWirelessSimpleIoAction.dll".
   Process "C:\RunTime\Actions\SimpleIO\WDTFWPDSimpleIoAction.dll".
   Process "C:\RunTime\Actions\SimulatedBattery\WDTFSimulatedBatterySystemAction.dll".
   Process "C:\RunTime\Actions\System\WDTFSystemAction.dll".
   Process "C:\RunTime\Actions\WDTFConcurrentIOAction.dll".
   Process "C:\RunTime\Actions\WDTFCpuUtilizationSystemAction.dll".
   Process "C:\RunTime\Actions\WDTFDriverPackageAction.dll".
   Process "C:\RunTime\Actions\WDTFDriverSetupDeviceAction.dll".
   Process "C:\RunTime\Actions\WDTFDriverSetupSystemAction.dll".
   Process "C:\RunTime\Actions\WDTFDriverVerifierSystemAction.dll".
   Process "C:\RunTime\Actions\WDTFFuzzTestAction.dll".
   Process "C:\RunTime\Actions\WDTFInterfaces\WDTFInterfaces.dll".
   Process "C:\RunTime\Actions\WDTFPNPAction.dll".
   Process "C:\RunTime\Actions\WDTFSUPAction.dll".
   Process "C:\RunTime\WDTF.DLL".
-Update registry state.
-Install Drivers.
-Done

 WDTF Registration Successful
PS C:\RunTime> cscript.exe .\fake-battery.vbs
Microsoft (R) Windows Script Host Version 5.812
Copyright (C) Microsoft Corporation. All rights reserved.

Loading Wex.Logger.dll from systemdata.cpp linep 922 failed.
WDTF_TARGET               : INFO  :  - GetInterface("SimulatedBatterySystem")
WDTF_TARGET               : INFO  :          Target: ORANGE
WDTF_SIMBATT              : INFO  : DisableRealBatteries()
WDTF_SIMBATT              : INFO  : EnableSimulatedBattery()
WDTF_SIMBATT              : ERROR : SimulatedBatterySystem critical error installing battbus device. HRESULT=0xE0000203
C:\RunTime\fake-battery.vbs(22, 1) WDTF.SimulatedBatterySystem.1: SimulatedBatterySystem critical error installing battbus device. HRESULT=0xE0000203

很遗憾,我在公共Internet上找不到这些错误的信息。希望外面有人遇到这个问题,并且知道下一步该怎么做!

-

edit:似乎Visual Studio除了测试框架之外还安装了各种驱动程序,因此仅复制RunTime文件夹是不够的。我最终使用另一个工作站中的VS将工作站添加为完整目标。然后让我模拟电池。

enter image description here