Substituto mínimo, escrito em Rust, do Rise Mode Temp CPU Driver R2.2. Ele faz só uma coisa: mostra a temperatura da CPU no display da bomba do water cooler Rise Mode.
Projeto não oficial, sem nenhuma afiliação com a Rise Mode. Use por sua conta e risco. Nos caminhos abaixo,
<projeto>é a pasta onde o repositório foi clonado.
| Original (R2.2) | risemode-temp | |
|---|---|---|
| Arquivos | 22 arquivos, ~19 MB (.NET + LibreHardwareMonitor + 3 processos) | 1 arquivo .exe, ~395 KB |
| Processos | Rise Mode Temp CPU Driver R2.2.exe + SendTemp.exe |
risemode-temp.exe |
| RAM | dezenas de MB (runtime .NET + interface gráfica) | ~3,4 MB em uso (working set), 6,7 MB de memória privada confirmada |
| CPU | — | ~0,007 % de um núcleo: 62 ms de CPU em 15 min rodando (Ryzen 7 5700X3D) |
| Janela | interface gráfica + ícone na bandeja | nenhuma (roda invisível) |
Os números do risemode-temp foram medidos em 14/10/2026, com a v0.2.0 instalada. A CPU é o tempo total gasto desde que o processo iniciou: uma amostra de poucos segundos dá 0, porque o Windows conta tempo de CPU em blocos de ~15 ms.
| Item | Situação |
|---|---|
| Programa novo | ✅ v0.2.0 (da Release) instalado em C:\Program Files\RiseModeTemp\risemode-temp.exe e rodando (testado: display mostra a temperatura) |
| Início automático | ✅ tarefa agendada RiseModeTempRs: no logon, como administrador, sem limite de tempo, reinicia se cair |
| Driver antigo (Rise Mode R2.2) | ❌ desinstalado: pasta, tarefa Tif Task e entrada em "Programas e Recursos" apagadas |
| PawnIO 2.0.1.0 | ✅ mantido em C:\Program Files\PawnIO, serviço PawnIO rodando (necessário para ler o sensor) |
| Backup do instalador do PawnIO | ✅ C:\Program Files\RiseModeTemp\PawnIO_setup.exe |
| Rust (para recompilar) | ✅ instalado: rustup + toolchain stable-x86_64-pc-windows-gnu (rustc 1.99.0) |
| Código-fonte e docs | ✅ <projeto>\ |
SHA-256 do executável instalado (v0.2.0):
F2B9D1F4E3A0676B685A669099F6A692C82B5A6E62977450972BEEA54FA230F5
- A análise foi feita com o desmontador de IL .NET
tools\ildump.ps1, escrito para isso. Ele usa reflexão do .NET Framework e não executa nenhum código do programa analisado. - Os três
.exedo driver eram .NET. Descobri:CPU Server.exe: serviço Windows que só iniciava oSendTemp.exe;Rise Mode Temp CPU Driver R2.2.exe: LibreHardwareMonitor modificado. A cada 1 s, liaCore (Tctl/Tdie)e mandava 11 bytes pelo named pipetifPipe;SendTemp.exe: recebia do pipe e escrevia no display USB (HIDVID_AA88&PID_8666), abrindo-o em modo exclusivo;- inicialização pela tarefa agendada
Tif Task, como administrador.
- No
LibreHardwareMonitorLib.dllencontrei a leitura do sensor: o módulo PawnIOAMDFamily17.binchamandoioctl_read_smn(0x59800). Veja Como funciona.
- Instalei o Rust:
winget install Rustlang.Rustupe depois o toolchain GNU, porque não há Visual Studio nesta máquina. - Escrevi
risemode-temp(src\main.rs,src\pawnio.rs,src\hid.rs). Os três programas viraram um só, sem pipe, sem interface gráfica e sem dependências externas. - Extraí o
AMDFamily17.bindoLibreHardwareMonitorLib.dlle o embuti no.exe. O PawnIO só aceita módulos assinados, então não dava para escrever um próprio. - Testes feitos:
--send 88: o display mostrou 88 (protocolo USB confirmado);--consolecomo admin: temperatura real aparecendo no display.
- Primeira instalação: tarefa
RiseModeTempRsapontando paratarget\release, criada comschtasks /SC ONLOGON.
- Limite de 72 h: a tarefa criada pelo
schtaskspadrão fecharia o programa depois de 3 dias ligado (e não rodaria na bateria). O--installpassou a gerar a tarefa por XML: sem limite de tempo, reinício automático em 1 min se cair, e só uma instância. - Local de instalação: o
.exesaiu de<projeto>\target\release(pasta do usuário, apagada por umcargo clean) paraC:\Program Files\RiseModeTemp. Como roda como administrador, precisa ficar onde só um admin pode alterá-lo. - Criei os scripts
instalar.ps1,desinstalar.ps1eremover-antigo.ps1, que pedem administrador sozinhos.
instalar.ps1: copiou o programa paraC:\Program Files\RiseModeTemp, recriou a tarefaRiseModeTempRspelo XML e iniciou o programa.remover-antigo.ps1: guardou oPawnIO_setup.exe, rodou o desinstalador oficial em modo silencioso e limpou as sobras.- Conferi tudo depois. Resultado: o estado atual acima.
Programa "Rise Mode Temp CPU Driver R2.2" inteiro, pelo desinstalador oficial + limpeza:
-
Pasta
C:\Program Files (x86)\Rise Mode Temp CPU Driver R2.2\(22 arquivos, ~19 MB):Arquivo O que era Rise Mode Temp CPU Driver R2.2.exe(7,2 MB)programa principal (interface + leitura de sensores) SendTemp.exeponte pipe → display USB CPU Server.exeserviço que iniciava o SendTemp LibreHardwareMonitorLib.dll/.xml/.configbiblioteca de sensores HidSharp.dll,RAMSPDToolkit-NDD.dllUSB/HID e leitura de SPD da RAM Aga.Controls.dll/.pdb,OxyPlot.dll,OxyPlot.WindowsForms.dllinterface gráfica e gráficos Newtonsoft.Json.dll,System.CodeDom.dll,Microsoft.Win32.TaskScheduler.dlldependências .NET PawnIO_setup.exe(5 MB)instalador do PawnIO (cópia guardada em C:\Program Files\RiseModeTemp)cpu4.ico,Cyberiada_Medium.otf,License.html,ini.txtícone, fonte, licença, config vazia unins000.exe/unins000.datdesinstalador -
Tarefa agendada
Tif Task: iniciava o driver antigo no logon. Antes de apagar, desativei. -
Serviço
tifSer(CPU Server.exe): o desinstalador o para e apaga. Não está mais registrado. -
Entrada "Rise Mode Temp CPU Driver R2.2 version 2.2" em Configurações → Aplicativos.
-
Processos
Rise Mode Temp CPU Driver R2.2.exeeSendTemp.exe, encerrados.
Restos temporários do desenvolvimento:
- a primeira versão da tarefa
RiseModeTempRs, que apontava paratarget\releasee tinha o limite de 72 h. Foi substituída; target\release\risemode-temp.old.exe, a cópia renomeada durante a recompilação.
O que NÃO foi removido, de propósito:
- PawnIO (
C:\Program Files\PawnIO, serviçoPawnIO): o programa novo precisa dele.
Ler o sensor do Ryzen (registrador SMN) exige código rodando no kernel. Avaliado em 13/10/2026:
-
Driver próprio em Rust: é possível escrever (
windows-drivers-rs), mas o Windows 11 só carrega driver de kernel assinado pela Microsoft. OPawnIO.sysé assinado por Microsoft Windows Hardware Compatibility Publisher. Para ter a mesma assinatura:- certificado EV pago todo ano;
- conta no Partner Center;
- envio do driver para a Microsoft.
Sem isso, só funciona em test signing, que tem estes custos:
- exige desligar o Secure Boot;
- deixa marca d'água na tela;
- faz anti-cheats (Vanguard, FACEIT etc.) recusarem rodar;
- reduz a segurança do sistema.
Além disso, um bug em driver de kernel causa tela azul.
-
Módulo PawnIO próprio: o PawnIO só executa módulos assinados pelo autor dele. Por isso reaproveitamos o
AMDFamily17.bin. -
Sem driver: testado. Esta placa não expõe temperatura pelo Windows: os contadores
Thermal Zone Informationnão existem e a classeMSAcpi_ThermalZoneTemperatureresponde "Sem suporte". -
WinRing0 (driver antigo): está na lista de drivers vulneráveis bloqueados da Microsoft. Seria pior.
O que daria para refazer é só a parte de usuário, a PawnIOLib.dll (23 KB): falar direto com o driver
via DeviceIoControl. O ganho seria eliminar uma DLL, mas o driver PawnIO.sys continuaria necessário.
O PawnIO é código aberto (namazso/PawnIO), assinado pela Microsoft, e é o mesmo que o LibreHardwareMonitor usa.
| Item | Onde | Tamanho | Como remover |
|---|---|---|---|
| risemode-temp | C:\Program Files\RiseModeTemp\ |
~5,6 MB (5 MB são o backup do PawnIO) | desinstalar.ps1 |
Tarefa RiseModeTempRs |
Agendador de Tarefas | — | desinstalar.ps1 |
| Código-fonte | <projeto>\ |
~1 MB | apagar a pasta |
| Rust (rustup + toolchain GNU) | %USERPROFILE%\.rustup, %USERPROFILE%\.cargo |
~2,3 GB | rustup self uninstall (só se não for mais recompilar) |
- Rode
desinstalar.ps1. - Reinstale o "Rise Mode Temp CPU Driver" pelo instalador do site da Rise Mode.
O PawnIO já instalado é reaproveitado.
| O quê | Caminho |
|---|---|
| Executável instalado | C:\Program Files\RiseModeTemp\risemode-temp.exe |
| Esta documentação (cópia) | C:\Program Files\RiseModeTemp\LEIAME.md |
| Desinstalador | C:\Program Files\RiseModeTemp\desinstalar.ps1 |
| Instalador do PawnIO (backup) | C:\Program Files\RiseModeTemp\PawnIO_setup.exe |
| Código-fonte | <projeto>\ |
| Executável compilado | <projeto>\target\release\risemode-temp.exe |
| Scripts | <projeto>\scripts\ |
| Tarefa de inicialização | Agendador de Tarefas → RiseModeTempRs |
| Logs dos scripts | %TEMP%\risemode-temp-*.log |
- CPU AMD Ryzen (família 17h/19h/1Ah: Zen, Zen 2, Zen 3, Zen 4, Zen 5). Em CPU Intel o programa se recusa a rodar.
- PawnIO instalado (
C:\Program Files\PawnIO). É o driver de kernel que permite ler o sensor da CPU. Ele veio junto com o driver original e não é removido com ele. Se sumir, reinstale comC:\Program Files\RiseModeTemp\PawnIO_setup.exeou baixe em https://pawnio.eu. - Rodar como administrador, porque o PawnIO exige. A tarefa agendada já cuida disso.
- Display do water cooler conectado por USB. Ele aparece como dispositivo HID
VID_AA88&PID_8666.
- Baixe o
risemode-temp-vX.Y.Z-windows-x64.zipem Releases e extraia numa pasta qualquer. - Desbloqueie os arquivos. O Windows marca o que veio da internet e se recusa a rodar os
.ps1. Clique com o botão direito no.zipantes de extrair → Propriedades → marque Desbloquear → OK. Ou, depois de extrair, rode num PowerShell dentro da pasta:Get-ChildItem | Unblock-File. - Clique com o botão direito em
instalar.ps1→ Executar com o PowerShell e aceite o UAC.
O .exe não é assinado digitalmente, então o SmartScreen pode avisar "O Windows protegeu o computador". O SHA-256
de cada arquivo está nas notas da Release, para você conferir com Get-FileHash risemode-temp.exe.
- Compile (veja Recompilar) e abra a pasta
<projeto>\scripts. - Clique com o botão direito em
instalar.ps1→ Executar com o PowerShell. - Aceite o pedido de administrador (UAC).
O script:
- para uma versão que já esteja rodando;
- copia o
.exeparaC:\Program Files\RiseModeTemp; - desativa a tarefa
Tif Taskdo driver antigo e fecha os processos dele; - cria a tarefa agendada
RiseModeTempRse já inicia o programa.
Pelo terminal, em um PowerShell como administrador:
powershell -ExecutionPolicy Bypass -File <projeto>\scripts\instalar.ps1- Clique com o botão direito em
C:\Program Files\RiseModeTemp\desinstalar.ps1→ Executar com o PowerShell, ou use o mesmo arquivo em<projeto>\scripts\.
O script para o processo, apaga a tarefa RiseModeTempRs e remove C:\Program Files\RiseModeTemp.
O PawnIO continua instalado. Para removê-lo também: Configurações → Aplicativos → PawnIO → Desinstalar.
- Clique com o botão direito em
scripts\remover-antigo.ps1→ Executar com o PowerShell.
O script:
- fecha
Rise Mode Temp CPU Driver R2.2.exeeSendTemp.exe; - guarda uma cópia do
PawnIO_setup.exeemC:\Program Files\RiseModeTemp; - roda o desinstalador oficial em modo silencioso;
- apaga a
Tif Taske a pastaC:\Program Files (x86)\Rise Mode Temp CPU Driver R2.2; - confere se o PawnIO continua instalado.
Rode o
instalar.ps1antes, para que a cópia do instalador do PawnIO tenha onde ser guardada.
O instalar.ps1 já deixa isso configurado. Ele cria a tarefa agendada RiseModeTempRs, que:
- dispara no logon do seu usuário;
- roda com privilégios mais altos (administrador), sem pedir UAC a cada boot;
- não tem limite de tempo. A tarefa criada por
schtasks /SC ONLOGONpararia o programa depois de 72 h; - reinicia sozinha 1 minuto depois, se o processo cair;
- roda também na bateria (relevante só em notebook).
Comandos úteis, no PowerShell como administrador:
Start-ScheduledTask -TaskName RiseModeTempRs # iniciar agora
Stop-ScheduledTask -TaskName RiseModeTempRs # parar
Disable-ScheduledTask -TaskName RiseModeTempRs # não iniciar mais no logon
Enable-ScheduledTask -TaskName RiseModeTempRs # voltar a iniciar no logon
Get-ScheduledTask -TaskName RiseModeTempRs | Select TaskName, StatePela interface gráfica: Iniciar → Agendador de Tarefas → Biblioteca → RiseModeTempRs.
O próprio executável também cria e remove a tarefa:
& "C:\Program Files\RiseModeTemp\risemode-temp.exe" --install # cria a tarefa (aponta para onde o exe está)
& "C:\Program Files\RiseModeTemp\risemode-temp.exe" --uninstall # fecha o processo e apaga a tarefa- Gerenciador de Tarefas (Ctrl+Shift+Esc) → aba Detalhes →
risemode-temp.exe.
Pelo PowerShell:
$p = Get-Process risemode-temp
"RAM: {0:N1} MB em uso (privada {1:N1} MB)" -f ($p.WorkingSet64/1MB), ($p.PrivateMemorySize64/1MB)
$seg = ((Get-Date) - $p.StartTime).TotalSeconds
"CPU: {0:N0} ms em {1:N0} min = {2:N3} % de um núcleo" -f $p.TotalProcessorTime.TotalMilliseconds, ($seg/60), ($p.TotalProcessorTime.TotalMilliseconds / $seg / 10)A CPU é calculada sobre todo o tempo desde que o processo iniciou. Medir só alguns segundos costuma dar 0, porque o Windows conta tempo de CPU em blocos de ~15 ms e o programa gasta menos que isso.
A cada segundo, o programa faz uma leitura do sensor (1 chamada ao PawnIO) e uma escrita USB. No resto do tempo fica dormindo.
O programa roda sem janela. Para ver o que está acontecendo, primeiro pare a tarefa (só pode existir uma instância) e rode num PowerShell como administrador:
| Comando | O que faz |
|---|---|
risemode-temp.exe --console |
roda normalmente, mostrando a temperatura a cada segundo |
risemode-temp.exe --once |
lê a temperatura, envia uma vez ao display e sai |
risemode-temp.exe --send 88 |
manda o valor fixo 88 ao display. Testa o USB e não precisa de admin |
risemode-temp.exe --install / --uninstall |
cria/remove a tarefa agendada |
risemode-temp.exe --version / --help |
mostra a versão / todas as opções |
| Mensagem | Causa / solução |
|---|---|
erro PawnIO: ... 0x80070005 |
não está rodando como administrador |
PawnIOLib.dll não encontrada |
PawnIO não instalado. Rode PawnIO_setup.exe |
CreateFile falhou ... erro 32 |
outro programa está com o display aberto, geralmente o driver antigo (SendTemp.exe). Feche-o ou rode remover-antigo.ps1 |
display AA88:8666 não encontrado |
cabo USB do display desconectado. O programa tenta de novo a cada segundo |
já está rodando |
já existe uma instância (a da tarefa). Pare a tarefa antes de testar |
antivírus apaga ou bloqueia o .exe (ex.: Kaspersky VHO:Trojan-Downloader.Win32.Remus.gen) |
falso positivo da análise heurística, comum em executáveis pequenos e sem assinatura. Confira o SHA-256 e o atestado da Release (veja abaixo), adicione uma exceção e, se quiser, reporte o falso positivo ao fabricante do antivírus |
Descobri o funcionamento por engenharia reversa do IL .NET do driver original:
CPU Server.exe: serviço que só inicia oSendTemp.exe.Rise Mode Temp CPU Driver R2.2.exe: cópia do LibreHardwareMonitor. A cada 1 s, lê o sensorCore (Tctl/Tdie)e escreve 11 bytes no named pipetifPipe.SendTemp.exe: lê o pipe e escreve os bytes crus (WriteFile) no HIDVID 0xAA88 / PID 0x8666.
Formato do relatório enviado ao display:
| Byte | Conteúdo | risemode-temp envia |
|---|---|---|
| 0 | report ID (0) |
0 |
| 1 | temperatura da CPU (°C) | ✅ |
| 2 | temperatura da GPU (°C) | 0 |
| 3 | uso da CPU (%) | 0 |
| 4 | uso da RAM (%) | 0 |
| 5 | temperatura da placa-mãe (°C) | 0 |
| 6 | uso da GPU (%) | 0 |
| 7… | zeros | 0 |
Leitura da temperatura, igual ao LibreHardwareMonitor Amd17Cpu:
pelo PawnIO, carrega o módulo assinado AMDFamily17.bin (extraído do LibreHardwareMonitorLib.dll
e embutido no .exe) e chama ioctl_read_smn(0x59800):
temp = (raw >> 21) * 0.125
se (raw & 0x80000) != 0: temp -= 49
O valor passa por uma média móvel leve (α = 0,5), porque o Tctl do Ryzen oscila muito de um segundo para o outro.
src/main.rs laço principal, argumentos, criação da tarefa agendada (XML)
src/pawnio.rs cliente do PawnIO (carrega PawnIOLib.dll dinamicamente) + checagem de CPU
src/hid.rs enumeração (cfgmgr32) e escrita no HID (hid.dll + WriteFile)
src/win.rs FFI mínima com o kernel32, compartilhada pelos módulos
.github/ CI, Release automática e scripts de smoke test/empacotamento
third_party/pawnio-modules/ módulo PawnIO AMDFamily17 (.bin assinado + fonte .p, LGPL-2.1)
scripts/ instalar.ps1, desinstalar.ps1, remover-antigo.ps1
tools/ildump.ps1 desmontador de IL .NET usado na análise do driver original
Para refazer a análise: powershell -File tools\ildump.ps1 -Path "<arquivo .exe/.dll .NET>" > saida.txt.
Use -ListOnly para listar só classes e métodos, ou -TypeFilter 'Regex' para filtrar classes.
Não usa nenhuma crate externa, só FFI direto com a API do Windows.
Requisitos: Rust (winget install Rustlang.Rustup) com o toolchain GNU. Não há MSVC nesta máquina.
rustup default stable-x86_64-pc-windows-gnu
git clone https://github.com/Jaimedsf/risemode-temp
cd risemode-temp
cargo build --release
# depois rode scripts\instalar.ps1 para atualizar a cópia em Program FilesSe a versão antiga estiver rodando, o
cargo buildpode falhar com "Acesso negado" ao sobrescrever o.exe. Pare a tarefa antes, ou renomeie o.exeantigo.
Antes de mandar mudanças, rode o mesmo que o CI:
cargo fmt --check
cargo clippy --all-targets --locked -- -D warnings
cargo test --locked
opt-level = "s"(e não"z") noCargo.tomlé de propósito: em 13/10/2026 o build com"z"era apagado pelo Kaspersky como falso positivo (VHO:Trojan-Downloader.Win32.Remus.gen), e o com"s"não, com só ~1 KB a mais.
- CI (
.github/workflows/ci.yml): a cada push e pull request, no Windows, com os toolchainsx86_64-pc-windows-gnuex86_64-pc-windows-msvc: formatação, clippy, testes, build release e um smoke test do.exe(--version,--helpe argumentos inválidos). O.exede cada toolchain fica disponível como artefato. - Release (
.github/workflows/release.yml): publica sozinha quando a versão doCargo.tomlainda não tem tag. O.exepublicado é o do toolchain GNU, o mesmo usado para desenvolver e testar com o hardware.
Para lançar uma versão (a main é protegida, então a versão muda sempre por PR):
- Pelo GitHub: Actions → Preparar release → Run workflow → escolha
patch,minoroumajor. O workflow abre o PRrelease: vX.Y.Ze roda o CI nele. Quando ficar verde, faça o merge: o workflow Release compila, testa, cria a tagvX.Y.Ze publica. - Local: numa branch, mude
versionnoCargo.toml, rodecargo build(atualiza oCargo.lock), faça commit dos dois, abra um PR e faça o merge depois do CI.
Uma versão com sufixo (ex.: 0.3.0-rc.1) sai como pre-release. A Release leva o .zip, o .exe, o
SHA256SUMS.txt e um atestado de proveniência
que prova que o .exe foi compilado pelo GitHub Actions a partir deste repositório:
gh attestation verify risemode-temp.exe --repo Jaimedsf/risemode-tempA main tem um ruleset (Settings → Rules → Rulesets → Proteger main) que:
- bloqueia push direto: toda mudança entra por pull request;
- exige o CI verde nos dois toolchains (
stable-x86_64-pc-windows-gnuestable-x86_64-pc-windows-msvc); - bloqueia force push e a exclusão da branch.
Como o projeto tem um mantenedor só, o PR não exige aprovação. O fluxo do dia a dia:
git switch -c minha-mudanca
# ... editar, commitar ...
git push -u origin minha-mudanca
gh pr create --fill
gh pr merge --squash --delete-branch # depois que o CI passar (ou use --auto para esperar sozinho)- Código deste projeto (
src/,scripts/,tools/, documentação): MIT. VejaLICENSE. third_party/pawnio-modules/(móduloAMDFamily17, de namazso): LGPL-2.1-or-later. O código-fonte e o texto da licença acompanham o binário. VejaTHIRD-PARTY-NOTICES.md.- O driver PawnIO não é distribuído aqui. Instale-o pelo site oficial: https://pawnio.eu.
- Nenhum código ou binário da Rise Mode é distribuído. "Rise Mode" aparece só para indicar compatibilidade.