Windows-Rapl-Driver
RAPL 메트릭 수집 용 Windows 드라이버
설치 (테스트/문제 해결 목적, 테스트 모드)
테스트 모드를 활성화합니다
현재로서는 드라이버가 서명되지 않았으므로 Windows를 테스트 모드에 넣어야합니다 (사용자 지정 드라이버를 실행할 수 있음).
이렇게하려면 관리자로 명령 프롬프트를 열고 실행하십시오.
bcdedit.exe -set TESTSIGNING ON
bcdedit.exe -set nointegritychecks on
그런 다음 컴퓨터 또는 서버를 다시 시작하십시오.
다시 시작되면 데스크탑에서 "테스트 모드"가 표시된 데스크탑보기의 오른쪽 하단에 텍스트를 작성해야합니다.
테스트 모드를 비활성화하려면 Adminstrator 액세스 및 실행으로 다른 명령 프롬프트를 엽니 다.
bcdedit.exe -set TESTSIGNING OFF
드라이버 설치
첫 번째 다운로드 또는 컴파일 :
- 드라이버 로더 .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 Driver Kit) 설치
옵션 : EWDK를 설치하십시오
오른쪽 패널의 ScaphandRedrv에서 오른쪽 Clik은 일반적인 속성으로 "플랫폼 툴셋"필드를 찾으십시오. "WindowsKernelModedRiver10.0"이라고해야합니다.
WDK가 ScAphAndRedRV 속성에 플랫폼 툴셋 선택으로 표시되지 않으면 다음과 같은 경로가 있어야하는 VSIX 러너를 찾으십시오.
C:Program Files (x86)Windows Kits10VsixVS202210.0.22621.382WDK.vsix.
Visual Studio 2022를 닫고 VSIX 러너를 실행하십시오.
vs 창 위의 상단에서 "릴리스"를 대상으로, "x64"를 대상 플랫폼으로 선택하십시오.
그런 다음 "빌드"> "솔루션 빌드".
드라이버 로더 구축 :
솔루션을 마우스 오른쪽 버튼으로 클릭하십시오> 새로운 Projet> 빈 프로젝트를 추가하십시오.
솔루션 내부의 새 프로젝트 "드라이버 로더"에서 마우스 오른쪽 버튼을 클릭하십시오> 기존 항목을 추가하고 DriverLoader.cpp를 찾으십시오.
오른쪽 패널> 속성> 고급에서 드라이버 로더를 마우스 오른쪽 버튼으로 클릭 한 다음 "문자 세트"가 "다중 바이트 문자 세트 사용"으로 설정되어 있는지 확인하십시오.
빌드> 빌드 솔루션 (ScaphandRedrv와 동일한 대상 및 플랫폼).
GNU/Linux (Ubuntu 22.04)에서 컴파일하고 Windows에서 실행됩니다 (정적 컴파일이므로 권장되지 않음)
userland/Service 에서 DriverLoader.exe를 컴파일합니다.
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에서 Open Extensions> 확장 관리 및 "Microsoft Visual Studio Installer Projects 2019 | 2022"를 검색 한 다음 다운로드, Visual Studtio를 닫습니다.
그런 다음 VSIX 설치 프로그램이 시작됩니다. 비주얼 스튜디오를 다시 시작하십시오.
scaphandredrvinstaller 프로젝트가 호환되지 않는 것으로 표시되면 마우스 오른쪽 버튼을 클릭 한 다음 "프로젝트를 다시로드"하십시오. 그런 다음 빌드하십시오.
테스트 신호 드라이버 (참조 문서는 여기에 있습니다)
C : Program Files (x86) Windows Kits 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 Kits 10 bin 10.0.22621.0 x86, 이미 INF 파일이있을 때
.stampinf.exe -f C:UsersMYUSERsourcereposwindows-rapl-driverScaphandreDrvScaphandreDrv.inf -d 03/11/2023 -v 0.0.1
그런 다음 (x64로 성공하려면 INF 파일을 변경해야합니다.
.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 문서 프로세스, 구조를 인증하려면 법률 회사의 서신이 필요하거나 제 3자인 Google 비즈니스의 유효성 검사 프로세스를 따라야합니다. Google 프로세스는 내 스마트 폰에서 작동하지 않았으므로 법률 회사를 통과했습니다.
- Azure AD Domain / Entra ID의 글로벌 관리자 계정으로 Azure 계정을 만들거나 사용하십시오 (Azure 계정의 사용자 제작자 인 경우 기본값)
- 하드웨어 파트너 프로그램에 등록하십시오
- EV 인증서가 파트너 센터 (“인증서 관리”)에 등록되어 있는지 확인하십시오. 그렇지 않으면 다운로드 + 서명 + 테스트 파일 업로드 절차를 따르십시오.
- 가상 HLK (물리적 기계 용 가상 머신 또는 앱) 컨트롤러 다운로드 대상 테스트 머신 (예 : Windows 10 22H2)과 호환되는 버전을 정확하게 선택하도록 조심하십시오.
- 컨트롤러에서 네트워크에 사용 가능한 HLK 클라이언트를 테스트 머신에 설치하여 테스트 머신을 컨트롤러에 연결하십시오.
- HLK 스튜디오에서
- 기계 풀을 만들고 발견 된 테스트 머신을 거기에 넣으십시오.
- 비. 프로젝트를 만듭니다
- 선택 중에 기계 풀을 선택한 다음 소프트웨어 장치에서 .sys 드라이버를 찾으십시오.
- 테스트 에서이 드라이버에서 사용 가능한 테스트를 확인하고 필요한 경우 테스트 재생 목록을로드하십시오.
- 런칭 실행 선택
- HLK 관리자에서 테스트 머신이 준비되거나 실행 중이며 작업이 예정되어 있는지 확인하고 실행 중인지 확인하십시오 (서비스 사용자에 로그인하여 여러 번 다시 시작).
- 결과에서 모든 것이 녹색인지 확인하거나 로그를 보러 가십시오.
- 패키지에서 드라이버 폴더를 추가하십시오 (.sys, .inf 및 .cat을 필수적으로 포함해야 함)는 EV 인증서로 직접 수행 할 수있는 경우 서명하십시오. 개인 키를 유지하고 Yubikey 또는 클라우드 서명 서비스를 거쳐야하는 SSL.com에서는 불가능합니다. 이 경우 서명하지 않고 HLKX 패키지를 만들도록 선택하십시오.
- 기호 추가 : 패키지 탭에서 폴더 라인을 마우스 오른쪽 버튼으로 클릭 한 다음 기호를 추가하고 Visual Studio 빌드에서 .pdb 파일을 찾으십시오.
- HLKX 서명 : HLK 스튜디오에서는 이론적으로 가능하지만 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 : user myuser downloads hlksigntool_v1.0 hlksigntool.exe"keyserialnumber "c : users myuser vidualbox vms shared scaphandredriver_withymbols.hlkx.
- OTP를 위해 휴대 전화를 준비하십시오
출처
- https://learn.microsoft.com/fr-fr/windows-hardware/drivers/dashboard/get-started-dashboard-submissions
- https://learn.microsoft.com/fr-fr/windows-hardware/drivers/get-started-dashboard-submissions#step-4-submit-for-certification-s-cationability
가상 HLK 및 HLK 스튜디오
Windows 11 및 + 호환 버전의 경우 관리자 계정은 비밀번호가 시작시 Hlkadminuser입니다. 이전 버전의 경우 Hlkadminuser / TestPassword, 1입니다.
우리는 hyper-v에서만 사용할 수있는 vhdx를 다운로드합니다. Hyper-V 호환 Windows가없는 경우 Virtual Box에서 사용하려면 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에서 Bridged Interface로 변경 한 다음 Windows 게스트에서 네트워크의 검색을 수락하십시오.
컨트롤러로 VHLK 설정 및 테스트 시스템에서 HLK 클라이언트 설정
네트워크 발견 모드 : Control Panel > Network and Internet > Network and Sharing center > Advanced Sharing Settings 활성화 한 다음 네트워크 검색 켜기를 클릭 한 다음 변경 사항을 저장해야합니다.
작동하지 않는 경우 (이 패널을 다시 열면 버튼이 여전히 "끄기"에 있습니다.
보다 정확하게는 Open Run and Launch Services.msc 문서에 언급 된 서비스 중 하나가 시작되지 않은 경우 : 마우스 오른쪽 클릭, 모드 : 매뉴얼, 적용, 시작
다음의 종속성 서비스가 시작되었는지 확인하십시오.
- DNS 클라이언트
- 기능 검색 자원 출판
- SSDP 발견
- UPNP 장치 호스트
Windows 방화벽을 구성하여 다음 단계를 수행하여 네트워크 발견을 허용합니다.
- 제어판을 열고 시스템 및 보안을 선택한 다음 Windows 방화벽을 선택하십시오.
- 왼쪽 창에서 앱 또는 기능 허용을 선택합니다.
- 제어판을 열고 시스템 및 보안을 선택한 다음 Windows 방화벽을 선택하십시오.
- 왼쪽 창에서 Windows 방화벽을 통해 앱 또는 기능 허용을 선택하십시오.
- 변경 설정을 선택하십시오. 관리자 비밀번호 또는 확인이 표시되면 암호를 입력하거나 확인을 제공하십시오.
- 네트워크 검색을 선택한 다음 OK를 선택하십시오.
- 네트워크의 다른 방화벽을 구성하여 네트워크 발견을 허용하십시오.
- 네트워크 및 공유 센터에서 네트워크 발견을 켜십시오.
출처
- https://learn.microsoft.com/fr-fr/windows-hardware/drivers/dashboard/hardware-submission-create
프로세스 자동화 :
- https://learn.microsoft.com/fr-fr/windows-hardware/test/hlk/user/hck-testing-cepts#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 ++ 드라이버 로더
컴파일 CPUID (구식)
CPUID를 통한 CPU 제조업체의 정보를 얻는 코드는 인라인 어셈블리를 사용합니다.
Linux에서 컴파일하려면 GCC에 AT & T가 아닌 인텔 구문을 사용하도록 지시해야합니다. 또한 독립적 인 위치를 가진 축 방향을 원하지 않는 것을 지정해야합니다.
예 : 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
Q & A
우리가 사용한 외부 문서
- https://woshub.com/how-to-sign-an-unsigned-driver-for-windows-7-x64/
- https://github.com/microsoftdocs/windows-driver-docs/blob/staging/windows-docs-pr/install/signature-categoriess-and-driver-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-heen2%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-- 읽기 msr-
- https://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-vol-3b-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/download/64-and-ia-32-architectures-software-developers-manual--1-basic-architection.html
- https://github.com/tianocore/edk2/blob/mas
- https://github.com/tianocore/edk2/tree/mas
- https://github.com/lizhuohua/linux-kernel-module-rust
- https://docs.rs/x86test-test/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-started-writing-windows-drivers/
- http://woshub.com/how-to-sign-an-unsigned-driver-for-windows-7-x64/
- https://www.electronicdesign.com/technologies/windows/article/21802026/how-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/synchronization-and-overlappinput-and output
- 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-vesy-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-samples
- https://www.osronline.com/article.cfm%5earticle=229.htm
- https://fr.adasbcc.org/driver-blocked-from-loading-fix-3085
- https://www.codeproject.com/articles/13090/building-and-deploying-a-basic-kernel-mode-dri
- https://www.digicert.com/kb/code-signing/signcode-signtool-command-lin.htm
- https://www.techpout.com/update-drivers-using-command-prompt-in-windows-10/
Fichiers Intéressants Dans Le Noyau Linux :
- 드라이버/powercap/intel_rapl_msr.c
- 아치/x86 : lib/msr_smp.c
Q & A
MSVCP140D.DLL을 찾을 수 없었기 때문에 코드 실행은 진행될 수 없습니다. 프로그램을 다시 설치하면 문제가 해결 될 수 있습니다.
릴리스 모드로 빌드 한 다음 다시 시도하십시오!
구축 방법?
"F : Windows 키트 10 bin x86 inf2cat.exe" /driver : c : users nulse documents github test /os : 10_19H1_X64,10_RS5_X64, ServerRS5_X64,10_RS4_X64
https://docs.microsoft.com/en-us/windows-hardware/drivers/devtest/inf2cat을 참조하십시오
이전 버전이없는 것처럼 보이더라도 새 버전의 드라이버를 다시 설치할 수 없습니다.
DriverQuery는 이전 버전의 드라이버의 흔적을 보여주지 않지만 DriverLoader.msc에 Scaphandre Service를 볼 수없는 새 제품을 설치하려고 할 때 Error 1078 Gert 1078, Trick에서 전체 패키지를 추가 또는 제거하지 않은 상태에서 전체 패키지를 추가 또는 제거하지 않았는지 확인한 상태에서 서비스 이름이있는 나머지 레지스트리 항목을 제거했는지 확인하십시오. (https://social.msdn.microsoft.com/forums/windowsdesktop/en-us/ed214b30-094-43c0-85e8-4702da85b5dd/add-service-failed-to-create-service?