В NT основная рабочая единица называется потоком (т. Е. NT планирует потоки, а не процессы). Пользовательские потоки выполняются в контексте процесса. Когда вы вызываете CreateThread, вы запрашиваете ядро NT выделить рабочий блок в контексте вашего процесса (у вас также есть волокна, которые в основном являются потоками, которые вы можете планировать самостоятельно, но это выходит за рамки вашего вопроса).
Когда вы вызываете CreateThread, вы предоставляете функции точку входа, которая будет запускаться после вызова функции. Код должен находиться в виртуальном пространстве процесса, а страница должна иметь права на выполнение. Проще говоря, вы даете указатель на функцию. ;)
fork () - это функция UNIX, которая запрашивает ядро о создании копии запущенного процесса. Родительский процесс получает pid дочернего процесса, а дочерний процесс получает 0 (таким образом, вы знаете, кто вы есть).
Если вы хотите создать процесс в Windows, вы вызываете функцию CreateProcess, но она не ведет себя как fork (). Причина в том, что большую часть времени вы будете создавать потоки, а не процессы.
Как видите, между CreateThread и fork нет никакой связи.