
Utilidades de C# para el mecanismo de notificaciones de Windows
Este es el repositorio de herramientas para Windows Notification Facility (WNF). Actualmente, se ha subido una adaptación en C# de las herramientas de wnfun desarrolladas por Alex Ionescu (@aionescu) y Gabrielle Viala (@pwissenlit). Cuando desarrolle herramientas adicionales para Windows Notification Facility, se subirán aquí.
Esta herramienta vuelca o manipula información sobre los nombres de estado de WNF. Equivalente a wnfdump.exe y WnfDump.py. Hice algunas actualizaciones con respecto a la herramienta original (manejo de excepciones, nombre de estado Well-Known y nuevo miembro de WNF_DATA_SCOPE).
Para recuperar información de todos los nombres de estado de WNF Well-Known, permanentes y persistentes en su host, ejecute con la opción -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 solo el nombre de estado usado en el sistema, activa la opción `-u` (`--used`).
Esta opción se puede aplicar a las opciones `-d` y `-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--
Si deseas recuperar información del descriptor de seguridad, usa la opción -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--
Si quieres recuperar datos del buffer, establece la bandera `-v` (`--value`) o `-r` (`--read`). Estas banderas se pueden usar con la bandera `-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 información de todos los nombres de estado WNF temporales en tu host, ejecuta con la bandera -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--
El indicador `-b` (`--brut`) puede usarse con el indicador `-v` (`--value`) o `-r` (`--read`), pero no puede usarse con el indicador `-s` (`--sid`).
El significado de cada columna en la tabla obtenida de los resultados de la opción `--dump` o `--brut` es el siguiente:
| Nombre de la columna | Descripción |
| :--- | :--- |
| `WNF State Name` | Aquí se muestran los nombres de estado WNF. |
| `S` | Ámbito de datos para WNF State Name. El significado de los alfabetos mostrados es el siguiente:<br><br>+ `S` : Ámbito del sistema<br>+ `s` : Ámbito de sesión<br>+ `U` : Ámbito de usuario<br>+ `P` : Ámbito de proceso<br>+ `M` : Ámbito de máquina<br>+ `p` : Ámbito de máquina física |
| `L` | Duración para WNF State Name. El significado de los alfabetos mostrados es el siguiente:<br><br>+ `W` : Bien conocido<br>+ `P` : Permanente<br>+ `V` : Persistente (volátil)<br>+ `T` : Temporal |
| `P` | Muestra si el WNF State Name es permanente:<br><br>+ `Y` : Sí<br>+ `N` : No |
| `AC` | Control de acceso para el WNF State Name:<br><br>+ `RW` : Legible y escribible<br>+ `RO` : Solo lectura<br>+ `WO` : Solo escritura<br>+ `NA` : No legible ni escribible |
| `N` | Muestra la existencia de suscriptores:<br><br>+ `A` : Existe suscriptor<br>+ `I` : No existe suscriptor<br>+ `U` : Desconocido |
| `CurSize` | El número indica el tamaño actual del búfer utilizado para el WNF State Name. |
| `MaxSize` | El número indica el tamaño máximo del búfer que se puede utilizar para el WNF State Name. |
| `Changes` | El número indica cuántas veces se ha actualizado. |
Si desea recuperar información sobre un WNF State Name específico, ejecute `SharpWnfDump.exe` con la opción `-i` (`--info`) de la siguiente manera:```
PS C:\Dev> .\SharpWnfDump.exe -i WNF_SHEL_APPRESOLVER_SCAN