Вы можете сделать это, но это не красиво. Так как поток не ожидает этого, вы будете очень ограничены в том, что вы можете назвать. Например, вы не сможете вызывать что-либо, использующее какой-либо API синхронизации.
Если вы все еще хотите это сделать - SuspendThread
, GetThreadContext
, SetThreadContext
и ResumeThread
позволят вам симулировать вызов функции. Вам нужно сохранить все регистры, включая флаги.
Очевидно, что для этого требуется специфичный для платформы код. Также обратите внимание, что некоторый код пользовательского режима касается местоположений, которые находятся выше указателя стека, так что вы можете захотеть добавить некоторое поле к возвращаемому адресу возврата.