WinHttpReadData() doesn't short read available data, it reads until the full requested size is read or end of data is reached. So currently it may block without queuing async read.
As a side effect, this is supposed to fix one crash scenario in Halo Infinite. When WinHttpReadData fails (due to network timeout) the game crashes in its code after closing request handle in error callback and going back through callback call stack. And doesn't crash if the failing WinHttpReadData was queued async and broke the recursion. With this patch failing case should never happen as WinHttpReadData should be executed synchronously only when it doesn't perform any network read and failure to read may happen only when the read is queued asynchronously and broke the recursion.