这是 Windows 通知设施(WNF)工具的仓库。 目前,已上传了 Alex Ionescu(@aionescu)和 Gabrielle Viala(@pwissenlit)所开发的 wnfun 中工具的 C# 移植版本。 当我为 Windows 通知设施开发更多工具时,它们将被上传到这里。
此工具用于转储或操作有关 WNF 状态名称的信息。 等同于 wnfdump.exe 和 WnfDump.py。 我对原始工具进行了一些更新(异常处理、已知状态名称和新的 WNF_DATA_SCOPE 成员)。
要检索主机上所有已知、永久和持久 WNF 状态名称的信息,请使用 -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--
仅显示系统中使用的状态名称,请设置 `-u`(`--used`)标志。
此标志可应用于 `-d` 和 `-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--
如果要检索安全描述符信息,请设置 -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--
如果你想检索缓冲区数据,请设置 `-v`(`--value`)或 `-r`(`--read`)标志。
这些标志可以与 `-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--
要检索主机上所有临时 WNF 状态名称的信息,请使用 -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--
`-b`(`--brut`)标志可以与 `-v`(`--value`)或 `-r`(`--read`)标志一起使用,但不能与 `-s`(`--sid`)标志一起使用。
从 `--dump` 或 `--brut` 选项结果中获得的表格中各列的含义如下:
| 列名 | 描述 |
| :--- | :--- |
| `WNF State Name` | 此处输出 WNF State Name |
| `S` | WNF State Name 的数据范围。显示的字母含义如下:<br><br>+ `S` : 系统范围<br>+ `s` : 会话范围<br>+ `U` : 用户范围<br>+ `P` : 进程范围<br>+ `M` : 计算机范围<br>+ `p` : 物理机范围 |
| `L` | WNF State Name 的生命周期。显示的字母含义如下:<br><br>+ `W` : 已知<br>+ `P` : 永久<br>+ `V` : 持久(易失)<br>+ `T` : 临时 |
| `P` | 显示 WNF State Name 是否永久:<br><br>+ `Y` : 是<br>+ `N` : 否 |
| `AC` | WNF State Name 的访问控制:<br><br>+ `RW` : 可读写<br>+ `RO` : 只读<br>+ `WO` : 只写<br>+ `NA` : 不可读写 |
| `N` | 显示订阅者是否存在:<br><br>+ `A` : 存在订阅者<br>+ `I` : 不存在订阅者<br>+ `U` : 未知 |
| `CurSize` | 该数字表示 WNF State Name 当前使用的缓冲区大小。 |
| `MaxSize` | 该数字表示 WNF State Name 可使用的最大缓冲区大小。 |
| `Changes` | 该数字表示更新次数。 |
如果要检索特定 WNF State Name 的信息,请使用 `-i`(`--info`)选项执行 `SharpWnfDump.exe`,如下所示:```
PS C:\Dev> .\SharpWnfDump.exe -i WNF_SHEL_APPRESOLVER_SCAN
| WNF State Name | S | L | P | AC | N | CurSize | MaxSize | Changes |
----------------------------------------------------------------------------------------------------------------------
| WNF_SHEL_APPRESOLVER_SCAN | S | W | N | RW | A | 4 | 4 | 1 |
-i(--info)选项可以与 -v(--value)、-r(--read)和 -s(--sid)标志一起使用:```
PS C:\Dev> .\SharpWnfDump.exe -i WNF_SHEL_APPRESOLVER_SCAN -s -v
| WNF_SHEL_APPRESOLVER_SCAN | S | W | N | RW | A | 4 | 4 | 1 |
D:(A;;CC;;;WD)(A;;CCDC;;;AU)(A;;CCDC;;;AC)
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000 | 01 00 00 00 | ....
要从特定的 WNF State Name 读取数据,请按如下方式使用 `-r`(`--read`)标志:```
PS C:\Dev> .\SharpWnfDump.exe -r WNF_SHEL_APPRESOLVER_SCAN
WNF_SHEL_APPRESOLVER_SCAN:
00000000 | 11 00 00 00 | ....
要向特定的 WNF 状态名称写入数据,请使用 -w (--write) 标志,如下所示(用于写入的数据应通过文件提供):```
PS C:\Dev> "hi" | Out-File -Encoding ascii -FilePath C:\Dev\test.txt
PS C:\Dev> Get-Content -Path C:\Dev\test.txt
hi
PS C:\Dev> .\SharpWnfDump.exe -w WNF_SHEL_APPRESOLVER_SCAN C:\Dev\test.txt