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/
- 打開拉鍊後,使用powerShell中的二進製文件:&“ c: users users myuser downloads hlksigntool_v1.0 hlksigntool.exe“ keyserialnumber” c: users users users myuser myuser firtual firtual box vms share scaphandredriver_withsymbolsysymbolsysymbols.hlkxxx
- 為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)