
Utilitários em C# para o Recurso de Notificação do Windows
Este é o repositório de ferramentas do Windows Notification Facility (WNF). Atualmente, foi carregado um port em C# das ferramentas do wnfun desenvolvidas por Alex Ionescu (@aionescu) e Gabrielle Viala (@pwissenlit). Quando eu desenvolver ferramentas adicionais para o Windows Notification Facility, elas serão carregadas aqui.
Esta ferramenta despeja ou manipula informações sobre WNF State Names. Equivalente a wnfdump.exe e WnfDump.py. Fiz algumas atualizações em relação à ferramenta original (Tratamento de Exceções, Well-Known State Name e novo membro WNF_DATA_SCOPE).
Para recuperar informações de todos os WNF State Names Well-Known, Permanent e Persistent no seu host, execute com a flag -d (--dump):```
PS C:\Dev> .\SharpWnfDump.exe -d
| WNF_WEBA_CTAP_DEVICE_STATE | S | W | N | RW | I | 0 | 12 | 0 | | WNF_WEBA_CTAP_DEVICE_CHANGE_NOTIFY | S | W | N | RW | I | 0 | 4 | 0 | | WNF_PNPA_DEVNODES_CHANGED | S | W | N | RO | U | 0 | 0 | 11 |
--snip--
Para mostrar apenas o nome do estado usado no sistema, defina a flag `-u` (`--used`). Esta flag pode ser aplicada às opções `-d` e `-b`:```
PS C:\Dev> .\SharpWnfDump.exe -d -u
| WNF State Name [WellKnown Lifetime] | S | L | P | AC | N | CurSize | MaxSize | Changes |
----------------------------------------------------------------------------------------------------------------------
| WNF_PNPA_DEVNODES_CHANGED | S | W | N | RO | U | 0 | 0 | 140 |
| WNF_AUDC_RENDER | S | W | N | RO | U | 4096 | 4096 | 7 |
| WNF_AUDC_CAPTURE | S | W | N | RO | U | 4096 | 4096 | 1 |
| WNF_AUDC_SPATIAL_STATUS | S | W | N | RO | U | 4096 | 4096 | 3 |
--snip--
Se você quiser recuperar informações do Security Descripter, defina a flag -s (--sid):```
PS C:\Dev> .\SharpWnfDump.exe -d -s
| WNF_WEBA_CTAP_DEVICE_STATE | S | W | N | RW | I | 0 | 12 | 0 |
D:(A;;CCDC;;;SY)(A;;CCDC;;;BA)(A;;CCDC;;;S-1-5-80-242729624-280608522-2219052887-3187409060-2225943459)(A;;CC;;;AU)(A;;CC;;;AC)
| WNF_WEBA_CTAP_DEVICE_CHANGE_NOTIFY | S | W | N | RW | I | 0 | 4 | 0 |
D:(A;;CCDC;;;SY)(A;;CCDC;;;BA)(A;;CCDC;;;S-1-5-80-242729624-280608522-2219052887-3187409060-2225943459)(A;;CC;;;AU)(A;;CC;;;AC)
| WNF_PNPA_DEVNODES_CHANGED | S | W | N | RO | U | 0 | 0 | 11 |
D:(A;;CC;;;BU)(A;;CCDC;;;SY)
--snip--
Se você quiser recuperar dados do buffer, use a flag `-v` (`--value`) ou `-r` (`--read`).
Essas flags podem ser usadas com a flag `-s`:```
PS C:\Dev> .\SharpWnfDump.exe -d -v
| WNF State Name [WellKnown Lifetime] | S | L | P | AC | N | CurSize | MaxSize | Changes |
----------------------------------------------------------------------------------------------------------------------
| WNF_WEBA_CTAP_DEVICE_STATE | S | W | N | RW | I | 0 | 12 | 0 |
| WNF_WEBA_CTAP_DEVICE_CHANGE_NOTIFY | S | W | N | RW | I | 0 | 4 | 0 |
--snip--
| WNF_AUDC_RENDER | S | W | N | RO | U | 4096 | 4096 | 1 |
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000 | 01 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 | ........ ........
00000010 | 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 | ........ ........
00000020 | 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 | ........ ........
--snip--
Para recuperar informações de todos os Nomes de Estado WNF temporários no seu host, execute com a flag -b (--brut):```
PS C:\Dev> .\SharpWnfDump.exe -b
| 0x41C64E6DA3AC3845 | S | T | N | RW | A | 8 | ? | 1 | | 0x41C64E6DA3AC4845 | S | T | N | RW | A | 8 | ? | 1 | | 0x41C64E6DA3AC6845 | S | T | N | RW | A | 8 | ? | 1 |
--snip--
A opção `-b` (`--brut`) pode ser usada com a opção `-v` (`--value`) ou `-r` (`--read`), mas não pode ser usada com a opção `-s` (`--sid`).
O significado de cada coluna na tabela obtida a partir dos resultados da opção `--dump` ou `--brut` é o seguinte:
| Column Name | Description |
| :--- | :--- |
| `WNF State Name` | Os WNF State Names são exibidos aqui |
| `S` | Escopo de dados para o WNF State Name. Os significados das letras exibidas são os seguintes:<br><br>+ `S` : Escopo do Sistema<br>+ `s` : Escopo da Sessão<br>+ `U` : Escopo do Usuário<br>+ `P` : Escopo do Processo<br>+ `M` : Escopo da Máquina<br>+ `p` : Escopo da Máquina Física |
| `L` | Tempo de vida para o WNF State Name. Os significados das letras exibidas são os seguintes:<br><br>+ `W` : Well-Known<br>+ `P` : Permanente<br>+ `V` : Persistente (Volátil)<br>+ `T` : Temporário |
| `P` | Exibe se o WNF State Name é permanente:<br><br>+ `Y` : Sim<br>+ `N` : Não |
| `AC` | Controle de acesso para o WNF State Name:<br><br>+ `RW` : Legível e Gravável<br>+ `RO` : Somente Leitura<br>+ `WO` : Somente Gravação<br>+ `NA` : Não Legível e Gravável |
| `N` | Exibe a existência de assinante:<br><br>+ `A` : Assinante existe<br>+ `I` : Nenhum assinante existe<br>+ `U` : Desconhecido |
| `CurSize` | O número indica o tamanho atual do buffer usado para o WNF State Name. |
| `MaxSize` | O número indica o tamanho máximo do buffer que pode ser usado para o WNF State Name. |
| `Changes` | O número indica quantas vezes foi atualizado. |
Se você quiser recuperar informações sobre um WNF State Name específico, execute `SharpWnfDump.exe` com a opção `-i` (`--info`) da seguinte forma:```
PS C:\Dev> .\SharpWnfDump.exe -i WNF_SHEL_APPRESOLVER_SCAN