There's plenty of literature on the topic, but you can start with "A fork() in the road" [1] that explains why this Unix feature has long passed its best-by date. Another good read is "Dot Dot Considered Harmful" [2]. There are other papers on features that have badly aged like signals for example, but I don't have them on hand.
It's interesting and I've experienced slow forks which lead to using a tiny companion process to execute programs (before spawn arrived).
I have to say I hate CreateProcess more for taking a string rather than an array of string pointers to arguments like argv. This always made it extra difficult to escape special characters in arguments correctly.
[1] https://www.microsoft.com/en-us/research/uploads/prod/2019/0...
[2] https://fuchsia.dev/fuchsia-src/concepts/filesystems/dotdot