Erstmal, GetLastError prüft man immer nur, wenn man weiß, dass es "soeben" einen Fehler gab, in dem
WinAPI-Aufruf davor.
Du prüfst aber garnicht, ob es einen Fehler gab.
Der "Fehler" 5 kann also von irgendeiner anderen
API gekommen sein,
irgendwann vorher.