That's a widely spread code sample that I've seen in many many places while looking for code to compare to find a bug in my own implementation. And like with a lot of code snippets found on the net, in the end you'll be faster if you implement it yourself.
I'll give you a hint at what to look for:
//Fake Pointer - nötig damit der Speicer wieder freigegeben wird
Open up
MSDN, compare the data structure, and implement this one correctly to avoid further problems (these fake pointers, where someone misunderstood what unions are, make all following fields invalid / pointing to something else than the name suggests).