Windows-apl-driver
RAPL指标收集的Windows驱动程序
安装(用于测试/故障排除目的,在测试模式下)
启用测试模式
目前,驱动程序未签名,因此您需要将Windows放置在测试模式下(允许自定义驱动程序运行)。
为此,请打开命令提示,作为管理员并运行:
bcdedit.exe -set TESTSIGNING ON
bcdedit.exe -set nointegritychecks on
然后重新启动计算机或服务器。
重新启动后,如果在桌面上,则应在显示“测试模式”的桌面视图的右下角写一些文本。
为了禁用测试模式,只需打开另一个命令提示符,并使用Adminstrator访问并运行:
bcdedit.exe -set TESTSIGNING OFF
安装驱动程序
首先下载或编译:
- driverloader.exe
- scaphandredrv.sys
您需要在同一文件夹中的这些文件。
然后在Adminstrator命令提示符中运行:
开始服务:
随时您可以使用此命令检查系统上的服务状态:
driverquery /v | grep -i scaph
如果正确运行,则应显示一条类似的行:
Scaphandre Dr Scaphandre Driver Serv Scaphandre Driver Serv File System System Running OK TRUE FALSE 0 4□096 0 14/01/2022 16:01:37 C:WINDOWSsystem32DRIVERSScaphandreDrv.sys 4□096
汇编
Windows 10
安装Visual Studio 2019
Windows 11
安装Visual Studio 2022
根据此文件:
- 安装Windows 11 SDK
- 安装Windows 11 WDK(Windows驱动程序套件)
选项:安装ewdk
在一般属性中,在右面板中的scaphandredrv上的右clik查找“平台工具集”字段。它应该说“ WindowskernelModedRiver10.0”。
如果WDK没有作为平台工具集选择出现在ScaphandRedRv属性中,请查找应该具有类似路径的VSIX Runner:
C:Program Files (x86)Windows Kits10VsixVS202210.0.22621.382WDK.vsix.
Close Visual Studio 2022,运行VSIX Runner。
在VS窗口的顶部,选择“释放”作为目标,而“ X64”作为目标平台。
然后“构建”>“构建解决方案”。
构建驱动程序负载器:
右键单击解决方案>添加>新Projet>空项目
在解决方案内的新项目“驱动程序”中,右键单击>添加>现有项目,查找驱动程序loader.cpp。
右键单击右图>属性>高级的驱动程序负载程序,然后确保“字符集”设置为“使用多字节字符集”。
构建>构建解决方案(与ScaphandRedRV相同的目标和平台)。
从GNU/Linux(Ubuntu 22.04)编译,在Windows上运行(不建议使用,因为这是静态编译)
compile driverloader.exe在userland/Service中:
cd userland/Service
sudo apt install g++-mingw-w64 g++-mingw-w64-x86-64-win32 g++-mingw-w64-x86-64
x86_64-w64-mingw32-g++ DriverLoader.cpp -I/usr/x86_64-w64-mingw32/include/ddk/ -I/usr/x86_64-w64-mingw32/include/ --sysroot=. -o DriverLoader.exe -Wall -pedantic
建立一个MSI软件包
设置
在Visual Studio 2022或2019中,打开扩展名>管理扩展名,然后搜索“ Microsoft Visual Studio Installer Projects 2019 | 2022”,然后下载,Close Visual Studtio。
然后应启动VSIX安装程序。重新启动视觉工作室。
如果将ScaphandRedRvinStaller项目显示为不兼容,请右键单击,然后“ Reload Project”。然后构建。
测试符号驱动程序(参考文档在这里)
在C: Program Files(x86) Windows套件 10 bin 10.0.22621.0 x64
.MakeCert.exe -r -pe -ss PrivateCertStore -n CN=hubblo.org -eku 1.3.6.1.5.5.7.3.3 ScaphandreDrvTest.cer
在C: Program Files(x86) Windows套件 10 bin 10.0.22621.0 x86,当您已经拥有INF文件时
.stampinf.exe -f C:UsersMYUSERsourcereposwindows-rapl-driverScaphandreDrvScaphandreDrv.inf -d 03/11/2023 -v 0.0.1
然后(需要更改INF文件以成功使用X64,TODO文档此部分)
.Inf2Cat.exe /driver:C:UsersMYUSERsourcereposwindows-rapl-driverScaphandreDrv /os:10_X64
然后
.signtool.exe sign /v /fd sha256 /s PrivateCertStore /n hubblo.org "C:UsersMYUSERsourcereposwindows-rapl-driverScaphandreDrvscaphandredrv.cat"
然后(作为管理员)
.certmgr.exe /add "C:UsersMYUSERsourcereposwindows-rapl-driverScaphandreDrvScaphandreDrvTest.cer" /s /r localMachine root
签名适当后,您应该能够安装驱动程序:
& "C:Program Files (x86)Windows Kits10Tools10.0.22621.0x64devcon.exe" install .ScaphandreDrv.inf rootSCAPHANDREDRV
如果签名还可以(即使不受信任),则应该获取此弹出窗口:

语境
该驱动程序已针对特定用例开发:在Windows上启用Scaphandre。
请查看这些幻灯片,以更好地了解如何以及为什么要开发该驾驶员。
如何签署驱动程序(MS验证,避免测试模式)
总体过程
- 获取EV(扩展验证)代码签名证书
- 例如:ssl.com#todo文档流程,您需要律师事务所的信件来验证结构,或者遵循第三方的验证过程,例如Google Business。 Google Process无法在我的智能手机上使用,因此我经历了一家律师事务所。
- 使用Azure AD域 / ENTRA ID的全局管理员帐户创建或使用Azure帐户(如果Azure帐户的用户创建者默认)
- 在硬件合作伙伴程序上注册
- 检查EV证书是否已在合作伙伴中心注册(在“管理证书”中)。否则,请按照下载 +签名 +上传测试文件的过程。
- 下载虚拟HLK(物理机器的虚拟机或应用程序)控制器,请小心选择与目标测试机兼容的版本(示例:Windows 10 22H2):https://learn.microsoft.com/fr-fr/windows-hardware/test/test/test/hlk/
- 通过安装网络上的HLK客户端,在测试机上将测试机与控制器相关联
- 在HLK工作室
- 创建一个机器池,将发现的测试机放在那里
- b。创建一个项目
- 在选择中,选择机器池,然后在软件设备中找到.sys驱动程序
- 在测试中检查该驱动程序可用的测试,如有必要,加载测试播放列表
- 选定的启动运行
- 在HLK Manager中,检查测试机是否准备就绪或运行并安排了作业,请检查它是否运行它们(在服务用户上使用登录使用多次)
- 在结果中,检查一切都是绿色的,或者去查看日志
- 在软件包中,添加驱动程序文件夹(必须包含.sys,.inf和.cat),请务必使用EV证书直接执行此操作。 SSL.com不可能保持私钥,并且需要通过Yubikey或其云签名服务。在这种情况下,选择制作HLKX软件包而无需签名。
- 添加符号:右键单击“软件包”选项卡中的文件夹行,然后添加符号,然后从“ Visual Studio”构建中查找.pdb文件
- HLKX签名:HLK Studio在理论上是可能的,但它与SSL.com键无法使用
- 确保您已通过ssl.com CKA在本地商店中包含了键,下载CKA,然后进行身份验证:https://www.ssl.com/download/ssl-com-esigner-cka
- 从ssl.com下载hlksigntool:https://www.ssl.com/download/hlksigntool/
- Once unzipped, use the binary in powershell: & "C:UsersMYUSERDownloadsHLKSignTool_v1.0HLKSignTool.exe" KeySerialNumber "C:UsersMYUSERVirtualBox VMssharedScaphandreDriver_withsymbols.hlkx"
- 为OTP提供手机
来源
- https://learn.microsoft.com/fr-fr/windows-hardware/drivers/dashboard/get-started-dashboard-subissions
- https://learn.microsoft.com/fr-fr/windows-hardware/drivers/dashboard/get-started-dashboard-submissions#step-4-submit-for-certification-and-certification-and-compatifications
虚拟HLK和HLK工作室
对于Windows 11和 +兼容版本,Admin帐户是HLKADMINUSER,并在启动时设置了密码。对于以前的版本,它是HLKADMINUSER / testPassword,1。
我们下载了一个VHDX,该VHDX仅在Hyper-V中使用。如果您没有Hyper-V兼容窗口,则必须将其转换为VHD或VDI,以便在虚拟框中使用
.VBoxManage.exe clonemedium disk "C:UsersMYUSERDownloads2019DC-22621.1.ni_release.220506-1250-HLK.vhdx" "C:UsersMYUSERDownloads2019DC-22621.1.ni_release.220506-1250-HLK.vhd" --format vhd
将虚拟框中的网络接口从NAT更改为桥接接口,然后接受Windows Guest的网络发现。
在测试机上将VHLK设置为控制器和HLK客户端
请记住启用网络发现模式: Control Panel > Network and Internet > Network and Sharing center > Advanced Sharing Settings ,然后单击打开网络发现,然后保存更改
如果它不起作用(如果重新打开此面板时,按钮仍在“关闭”时,请按照以下操作:https://learn.microsoft.com/en-us/troubleshoot/windows-client/networking/networking/cannot-turn-turn-turn-turn-on-network-network-network-discovery
更准确地说,开放式运行和启动Services.msc如果未启动文档中提到的一项服务:右键单击,模式:手动,应用,启动
确保启动以下依赖服务:
- DNS客户端
- 功能发现资源出版
- SSDP发现
- UPNP设备主机
配置Windows防火墙以允许通过以下步骤进行网络发现:
- 打开控制面板,选择系统和安全性,然后选择Windows防火墙。
- 在左窗格中,选择允许应用程序或功能
- 打开控制面板,选择系统和安全性,然后选择Windows防火墙。
- 在左窗格中,选择通过Windows防火墙允许应用程序或功能。
- 选择更改设置。如果提示您获取管理员密码或确认,请输入密码或提供确认。
- 选择网络发现,然后选择“确定”。
- 配置网络中的其他防火墙以允许网络发现。
- 打开网络和共享中心中的网络发现。
来源
- https://learn.microsoft.com/fr-fr/windows-hardware/drivers/dashboard/hardware-submission-create
TODO自动化过程:
- https://learn.microsoft.com/fr-fr/windows-hardware/test/hlk/user/hck-testing-concepts#how-it-works
- https://learn.microsoft.com/fr-fr/windows-hardware/test/hlk/developer/hlk-developer-guide
- https://learn.microsoft.com/fr-fr/windows-hardware/test/hlk/user/hlk-automation-tool
交叉汇编Mingw(过时)
依赖性:
汇编:X86_64-W64-MINGW32-G ++驱动程序loader.cpp -o driverloader.exe
汇编CPUID(过时)
代码获得CPU制造商的信息(通过CPUID)使用了内衬组件。
要在Linux上进行编译,我们需要告诉GCC使用Intel语法,而不是AT&T One。我们还需要指定我们不希望具有独立位置的Axecutable。
示例:gcc -masm = intel -no -pie cpuid.c -o cpuid
要在Windows上编译,我们可以在32位组装中内联,而不是64位(MSVC编译器不支持它)。
为了解决此问题, CPUID函数用纯汇编编写,匹配Windows ABI(X86和X86_64)。要编译,请使用这些命令:
- X86:NASM -F WIN32 CPUID_X86.NASM -O CPUID_X86.OBJ
- X86_64:NASM -F WIN64 CPUID_X86_64.NASM -O CPUID_X86_64.OBJ
要编译包括CPUID功能在内的代理,请根据体系结构进行操作:
- x86_64:x86_64-w64-mingw32-g ++ raplagent.cpp -s cpuid_x86_64.obj -o raplagent.exe
问答
我们使用的外部文档
- https://woshub.com/how-to-to-sign-an-unsigned-driver-for-windows-7-x64/
- https://github.com/microsoftdocs/windows-driver-docs/blob/staging/windows-driver-driver-docs-pr/install/signature-categories-and-categories-and-driver-and-river-installation.md
- https://github.com/intel/powergov
- https://community.intel.com/t5/software-tuning-performance/rapl-for-energy-measurement/td-p/919723
- www.eecs.berkeley.edu/pubs/techrpts/2012/eecs-2012-168.pdf
- https://github.com/kentcz/rapl-tools
- https://01.org/blogs/2014/running-average-power-limit-power-limit-%E2%80%93-rapl
- https://github.com/energymon/energymon/blob/master/msr/energymon-msr.c
- https://github.com/gz/rust-x86
- https://docs.rs/x86/0.43.0/x86/
- https://github.com/gz/rust-x86/tree/master/x86test
- https://docs.rs/x86/0.43.0/x86/msr/constant.msr_rapl_power_unit.html
- https://github.com/insula-rs/libwhp/tree/master/src
- https://crates.io/crates/register/1.0.2
- https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/rdmsr--Read-read-msr-
- https://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architures-software-developer-vol-vol-3b-part-part-part-2-manual.html
- https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html
- https://software.intel.com/content/www/us/en/develop/download/intel-64-and-ia-32-acritectures-software-develoders-manual-volvevely-manual-volume-volume-1-basic-architecture.html
- https://github.com/tianocore/edk2/blob/master/mdepkg/include/include/register/intel/architecturalmsr.h
- https://github.com/tianocore/edk2/tree/master/mdepkg/include/include/register/intel/msr
- https://github.com/lizhuohua/linux-kernel-module-rust
- https://docs.rs/x86test-types/0.0.3/x86test_types/macro.kassert.html
- https://doc.rust-lang.org/unstable-book/library-features/llvm-asm.html
- https://elixir.bootlin.com/linux/latest/source/drivers/powercap
- http://icl.cs.utk.edu/papi/docs/d4/d46/linux-powercap_8c_source.html
- https://www.osr.com/getting-writing-windows-drivers/
- http://woshub.com/how-to-to-sign-an-unsigned-driver-for-windows-7-x64/
- https://www.electronicdesign.com/technologies/windows/article/21802026/how-to-to-write-windows-drivers
- https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-readfile
- https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-writefile
- https://docs.microsoft.com/en-us/windows/win32/sync/synchronization-and-over-lapped-input-and-anput
- https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilea
- https://docs.microsoft.com/en-us/windows-hardware/drivers/gettingstarted/writing-a-vering-a-very-small-kmdf- driver
- https://docs.microsoft.com/en-us/windows-hardware/drivers/gettingstarted/writing-your-first-driver
- https://www.intel.com/content/www/us/en/developer/articles/tool/power-gadget.html#inpage-nav-12
- https://github.com/microsoft/windows-driver-smples
- https://www.osronline.com/article.cfm%5Article=229.htm
- https://fr.adasbcc.org/driver-blocked-from-loading-fix-3085
- https://www.codeproject.com/articles/13090/building-and-deploying-a-basic-wdf-kernel-mode-dri
- https://www.digicert.com/kb/code-signing/signcode-signtool-command-line.htm
- https://www.techpout.com/update-drivers-using-command-prompt-in-windows-10/
fichiers dressants dans le noyau linux:
- 驱动程序/powerCap/intel_rapl_msr.c
- Arch/x86:lib/msr_smp.c
问答
由于找不到MSVCP140D.DLL,因此无法进行代码执行。重新安装程序可能会解决问题。
在释放模式下建立然后重试!
如何构建?
“ f: windows套件 10 bin x86 inf2cat.exe” /驱动程序:c: users nulse nulse documents github test test /os:10_19H1_x64,10_x64,10_rs5_x64
请参阅https://docs.microsoft.com/en-us/windows-hardware/drivers/devtest/inf2cat
即使上一个似乎不存在,也无法重新安装新版本的驱动程序
driverquery不会显示驱动程序的先前版本的任何踪迹,但是在尝试安装新的driverloader.exe时,您不会在services.msc中看到scaphandre service。 https://social.msdn.microsoft.com/forums/windowsdesktop/en-us/ed214b30-b094-43c0-43c0-85e8-4702da85b5b5b5b5b5b5b5b5b5dddd emandd-service-failed to-created-createed-createe-servee-forumcterefulum = wdk)