As I understand it, calling the unsafe WinAPI code directly, through the P / Invoke mechanism.
Example (taken from here )
C # method signature:
[DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] private unsafe static extern uint CreateThread( uint* lpThreadAttributes, uint dwStackSize, ThreadStart lpStartAddress, uint* lpParameter, uint dwCreationFlags, out uint lpThreadId);
Example of use:
public delegate void StartThread(); unsafe uint StartThread(StartThread ThreadFunc, int StackSize) { uint a = 0; uint* lpThrAtt = &a; uint i = 0; uint* lpParam = &i; uint lpThreadID = 0; uint dwHandle = CreateThread(null, (uint)StackSize, ThreadFunc, lpParam, 0, out lpThreadID); if (dwHandle == 0) throw new Exception("Unable to create thread!"); return dwHandle; } [DllImport("kernel32.dll")] static extern IntPtr CreateThread([In] ref SECURITY_ATTRIBUTES SecurityAttributes, uint StackSize, System.Threading.ThreadStart StartFunction, IntPtr ThreadParameter, uint CreationFlags, out uint ThreadId);