I have the following assembly code :.....lea eax, [ebp+ThreadID]push eax              ; lpThreadIDpush 0                ; dwCreationFlagspush 0                ; lpParameterpush offset StartAddress  ; lpStartAddresspush 0                ; dwStackSizecall CreateThread....So, I try to translate it in a C-like pseudocode:DWORD* LPWORD eax_lpThreadID = NULL;DWORD dwCreationFlags;void *LPVOID lpParameter;SIZE_T dwStackSize;LPSECURITY ATTRIBUTES lpThreadAttributes;HANDLE handle_to_new_Thread = CreateThread(lpThreadAttributes, dwStackSize, ..., lpParameter, dwCreationFlags, eax_lpThreadID );As you can see, I do not include the 3rd parameter, namely the parameter LPTHREAD_START_ROUTINE lpStartAddress, because I have problems understanding it.In this SO thread i have read that a LPTHREAD_START_ROUTINE is a function pointer defined as:typedef DWORD (__stdcall *LPTHREAD_START_ROUTINE) (  [in] LPVOID lpThreadParameter);That would mean that the 4th parameter lpThreadParameter is a parameter of this. But how can I integrate that information into my pseudo C code program ?I am little bit confused about that. Can someone explain it to me? The other attributes/parameters are clear.... 
How to understand the lpStartAddress-Parameter of the function CreateThread
assembly;c
In C pseudocode let's say you have a function called doJob. You want to create a thread to executes it.DWORD WINAPI doJob(LPVOID lpParameter){    // Do some work. You can only pass one parameter.    // If you need more parameters, define a structure    // and send it though it's pointer.    return statuscode;}Handle hThread =    CreateThread(&attributes,dwStackSize,&doJob,&paramstruct,flags,&newThreadIdBuffer);Or in asm (nasm syntax, if I still remember it):lea eax, newThreadIdBufferpush eaxpush 0 ; or 4 or 0x00010000 or 0x00010004lea eax, paramstructpush eaxlea eax, doJobpush eaxpush dwStackSize ; 0 will use defaultlea eax, attributespush eaxcall CreateThreadThis can be done cleaner, but I believe it demonstrates the concept.