Windows Internals Blog
windows-internals.com · Company blog · on HN since 2014
Windows Internals Blog is written by security researchers who analyze Windows internals, covering I/O rings, exploits, CET and print spooler bugs.
What HN saysHN commenters link it for technical write-ups, like PrintDemon, which they call well written, and for comparing Windows I/O Rings with Linux io_uring.
26HN people shared it
18linked it in comments
10stories submitted
198story points
1 year agolast shared
2014people per year2026
Most-shared posts
- 1I/O Rings: When One I/O Operation is Not Enough11 people · 78 points · first shared 2021 · 12 comments on HN
- 2IoRing vs. io_uring: a comparison of Windows and Linux implementations6 people · 1 points · first shared 2023 · discussion on HN
- 3Printdemon Print Spooler Privilege Escalation CVE 2020-10485 people · 5 points · first shared 2020 · 1 comments on HN
- 4RIP ROP: CET Internals in Windows 20H11 people · 73 points · first shared 2020 · 41 comments on HN
- 5Windows 10 Technical Preview Source Tree1 people · 38 points · first shared 2014 · 46 comments on HN
- 6An Exercise in Dynamic Analysis1 people · 1 points · first shared 2022 · discussion on HN
- 7Faxing Your Way to System – Part Two1 people · 1 points · first shared 2020 · 1 comments on HN
- 8One I/O Ring to Rule Them All: A Full Read/Write Exploit Primitive on Windows 111 people · 1 points · first shared 2022 · discussion on HN
- 9Hyperguard secure kernel patch guard part 1 skpg initialization1 people · first shared 2022
- 10Exploiting a simple vulnerability in 35 easy steps or less1 people · first shared 2020
What HN people wrote when they linked it
Arnavion · 2021-12-09
Following that through to the blog post ([1]), it's interesting how much new API they had to add. The Windows IO API is already completion-style (as opposed to epoll, etc's readiness-style) - userspace submits an async operation to the kernel, blocks on a channel to receive its result, and the kernel enqueues the result to said channel when it's done. So I naively assumed that they'd "just" have to refit io_uring's API on top of the existing Win32 API.
[1]: https://windows-internals.com/i-o-rings-when-one-i-o-operation-is-not-…
barbegal · 2020-05-14
It's worth reading the full technical analysis https://windows-internals.com/printdemon-cve-2020-1048/
It's well written and easy to follow even for someone that doesn't know much about Windows security.
And if you didn't read it the bug comes from the fact that the Powershell command Add-PrinterPort can be used to add a printer port as a file that you don't have access to. After restarting the spooler service you can then use this port to write to that file.
nullindividual · 2024-09-08
> I think you missed the point: io_uring is the newer API.
GP was pointing out that io_uring came after RIO; RIO has similar capabilities to io_uring for the network space. GP did not "miss the point".
> Microsoft understand quite well that they have pervasive issues with IO performance
This has nothing to do with IOCP but rather the file system filters. This is why removal of file system filters from "DevDrive" (a ReFS volume) improves performance vs a ReFS volume with file system filters in place.
> If what Windows has had all along is so great, why did they bother cloning io_uring when io_uring came along?
IoRing eliminates the need to copy buffers between kernel and user space [0][1].
With regards to performance, this is a bench between a traditional multithreaded UDP server and an RIO IOCP UDP server. The gains are significant. [2] And further comparisons... [3]
> seldom bother to assess whether the decades-old async API actually offers good performance in comparison to more recent alternatives
There are no complete alternatives [r]. Nor is Linux fully asynchronous throughout the kernel.
> introducing DirectStorage
Not really relevant to the context. DirectStorage is a method to deliver data from nVME storage with minimal CPU overhead and/or compressed [4]. Such a system would improve performance on any OS and indeed, we can see that on PS OS (PS5, FreeBSD-based (probably)). Again, limited in scope.
I'm honestly not sure what you're attempting to argue.…
nu11ptr · 2025-05-07
Is this new async. I/O feature for Linux only?
I know Windows has IOCP and also now an IORing implementation of its own (Less familiar with macOS capabilities other than POSIX AIO).
https://learn.microsoft.com/en-us/windows/win32/api/ioringapi/
Update: Most of the comments below seem to be missing the fact that Windows now also has an IORing implementation, as I mentioned above. Comparison article here:
https://windows-internals.com/ioring-vs-io_uring-a-comparison-of-windo…
p_ing · 2025-04-12
IOCP, which originated in NT 3.1, is not a circular buffer like io_uring, but both are completion-oriented.
Microsoft introduced I/O Rings, more or less a 1:1 copy of io_uring, in Windows 21H1.
https://learn.microsoft.com/en-us/windows/win32/api/ioringapi/
https://windows-internals.com/i-o-rings-when-one-i-o-operation-is-not-…
https://windows-internals.com/ioring-vs-io_uring-a-comparison-of-windo…
Windows 8/2012 R2 did introduce Registered I/O for WinSock which is very similar to I/O Rings and io_uring.
https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/win…
JoshTriplett · 2025-01-06
I wasn't referring to async I/O. I'm talking about the ability to make system calls using a user/kernel shared memory buffer, without having to enter and exit the kernel. (This is particularly important with all the security mitigations that make kernel entry/exit more expensive.)
https://windows-internals.com/ioring-vs-io_uring-a-comparison-of-windo…
monocasa · 2024-06-19
Interestingly io_uring was added to NT.
https://windows-internals.com/i-o-rings-when-one-i-o-operation-is-not-…
mappu · 2023-04-13
> io_uring is significantly better than anything available on Windows right now.
Windows 11 copied io_uring almost 1:1 - https://windows-internals.com/ioring-vs-io_uring-a-comparison-of-windo…
323 · 2022-09-30
In Windows 10/11 the core of the Windows kernel can run in a virtual machine totally separated from the rest of the kernel.
> HyperGuard takes advantage of VBS – Virtualization Based Security
> Having memory that cannot be tampered with even from normal kernel code allows for many new security features
> This is also what allows Microsoft to implement HyperGuard – a feature similar to PatchGuard that can’t be tampered with even by malicious code that managed to elevate itself to run in the kernel.
https://windows-internals.com/hyperguard-secure-kernel-patch-guard-par…
ptrwis · 2021-09-19
yxhuvud · 2021-08-02
Seems windows is getting ring buffers based io too, eventually: https://windows-internals.com/i-o-rings-when-one-i-o-operation-is-not-…
Not identical to io_uring, but close enough that porting between them will probably be quite simple.
merb · 2021-08-02
Btw Windows built an api based on io_uring https://windows-internals.com/i-o-rings-when-one-i-o-operation-is-not-…
ot · 2021-06-17
Yes, and now things are going full circle and windows is adopting the ring model too.
https://windows-internals.com/i-o-rings-when-one-i-o-operation-is-not-…
johncolanduoni · 2021-06-03
It did, then io_uring leapfrogged it, and now Windows is moving towards adding a ring-based IO submission system: https://windows-internals.com/i-o-rings-when-one-i-o-operation-is-not-…
ToFab123 · 2021-05-25
The url should be updated to the source article
https://windows-internals.com/i-o-rings-when-one-i-o-operation-is-not-…
muricula · 2021-01-09
Forgot to check for replies. In particular, I was thinking of this blog post:
https://windows-internals.com/exploiting-a-simple-vulnerability-in-35-…
Thanks for the correction, sorry I typoed her name.
Here's a tweet from the original finder:
https://twitter.com/gabe_k/status/1330966182543777792?s=20
Yarden & Ionescu's work are both really top notch.
Also anything by Google Project Zero if you want to do a deep dive on the subject.
kevinarpe · 2021-01-01
I tried Googling to find this blog post. Did you mean to write Yarden Shafir? If yes, maybe it was this blog post? https://windows-internals.com/printdemon-cve-2020-1048/
I also found another hint about their findings in this PDF written by Yarden's co-researcher Alex Ionescu: https://www.usenix.org/system/files/woot20_slides_ionescu.pdf. One of the slides specifically mentions the use of fuzzing tools to find these issues.
If there are other, better links I don't know about, please kindly share. :)
pjc50 · 2020-05-14
I think the key problem is that it's very old; almost certainly the core code dates from NT, possibly earlier.
Longer analysis: https://windows-internals.com/printdemon-cve-2020-1048/
The core is:
a) you can set up a printer port that prints to a file
b) no admin privilege is required to do this, just a check on the ownership of the file
c) the ownership check is in the wrong place, so you can just create a port that prints to a DLL in system32
d) a second export forces Windows to load that DLL and run a specific function as SYSTEM, at which point game over