aboutsummaryrefslogtreecommitdiff
path: root/SMSSBSOD/README.md
blob: 321ed8fa410ff6f360dafb603ae137a26b494e62 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
今天奇观了:用 NT API RtlCreateUserProcess 在 Win32 进程中启动了一个 Subsystem 为 Native 的进程(即,PE+ Subsystem = Native,入口点为 NtProcessStartup。smss.exe 就是这样一个程序,它是 Windows 第一个用户态进程,由它启动其他进程再启动 Win32 subsystem。感兴趣可以看下面参考文献 [0] 以及 ReactOS 相关代码。)

正常调用 Win32 CreateProcess 来跑 Native 二进制会报错,试试看 autochk.exe。

然后今天看了一篇文章(参考文献 [1]),发现可以通过 RtlCreateUserProcess 直接跑 Native 二进制,于是试了一下成功了(不懂 Windows 开发,但目测 CreateProcess 或许是一个 Win32 的 RtlCreateUserProcess Wrapper,会检查 Subsystem 是不是 Win32 之类的)。

于是我跑了一下 smss.exe,发现会 BSOD,100% 复现,错误码为 0x000021a。

其实能跑是情理之中的,但会导致 BSOD 却是意外的。欢迎大家自行测试。

另外,NT 开进程的这套 API,和 Fuchsia 好像啊(小声

Windows 版本为 21H2 (OS Build 19044.2006)。

参考文献:
[0]: https://learn.microsoft.com/en-us/sysinternals/resources/inside-native-applications
[1]: http://www.rohitab.com/discuss/topic/41379-running-native-applications-with-rtlcreateuserprocess/