Creating your own signatures for methods such as this often just requires 'googling' MSDN for the function name and reading the information there. That's what I have done and this is what I've come up with. It's untested and may need some modification (PInvoke stuff often takes a little manipulation to get just right) but if you look at the links in the comments you should see how I've arrived at this:
using System;
using System.Runtime.InteropServices;
public class NativeMethods
{
#region CreationFlags
public const int CREATE_IMMEDIATE = 0;
public const int CREATE_SUSPENDED = 0x00000004;
public const int STACK_SIZE_PARAM_IS_A_RESERVATION = 0x00010000;
#endregion
public delegate int ThreadProc(IntPtr lpParameter);
[StructLayout(LayoutKind.Sequential)]
public struct SECURITY_ATTRIBUTES
{
int nLength;
IntPtr lpSecurityDescriptor;
bool bInheritHandle;
}
[DllImport("kernel32.dll")]
public static extern IntPtr CreateThread(
SECURITY_ATTRIBUTES lpThreadAttributes,
int dwStackSize,
ThreadProc lpStartAddress,
IntPtr lpParameter,
int dwCreationFlags,
out int lpThreadId);
}