Можно ли как нибудь в хуке на ZwCreateThread определить был ли он вызван через CreateThread или CreateRemoteThread?
Определить Id процесса, создавшего поток, создавшего текущий процесс и текущего процесса. Поток удалённый, если: Id процесса создавшего поток не равен текущему PID и не равен Id процесса, создавшего текущий процесс. Определить идентификатор процесса, в котором создаётся поток можно через его хэндл(1-й параметр): ZwQueryInformationProcess(InfoClass=ProcessBasicInformation, поле ClientId.UniqueProcess). Кстати CreateThread->CreateRemoteThread.