Нашел такое описание, но не понятно где получается CLIENT_ID. На форуме промелькнула мысль о том, что последний параметр - и есть указатель на CLIENT_ID, но на практике там какая-то другая структура. NTSTATUS NTAPI ZwCreateThreadEx( OUT PHANDLE ThreadHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN HANDLE ProcessHandle, IN LPVOID lpStartAddress, IN LPVOID lpParameter, IN BOOL CreateSuspended, IN ULONG StackZeroBits, IN ULONG SizeOfStackCommit, IN ULONG SizeOfStackReserve, OUT LPVOID lpBytesBuffer );
Код (Text): NTSTATUS NtCreateThreadEx( OUT PHANDLE ThreadHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN HANDLE ProcessHandle, IN PTHREAD_START_ROUTINE StartRoutine, IN PVOID StartContext, IN ULONG CreateThreadFlags, IN ULONG ZeroBits OPTIONAL, IN ULONG StackSize OPTIONAL, IN ULONG MaximumStackSize OPTIONAL, IN PNT_PROC_THREAD_ATTRIBUTE_LIST AttributeList ); #define CREATE_THREAD_SUSPENDED 0x0001 typedef struct _NT_PROC_THREAD_ATTRIBUTE_ENTRY { ULONG Attribute; // PROC_THREAD_ATTRIBUTE_XXX, UpdateProcThreadAttribute() SIZE_T Size; ULONG_PTR Value; ULONG Unknown; } PROC_THREAD_ATTRIBUTE_ENTRY, *PPROC_THREAD_ATTRIBUTE_ENTRY; typedef struct _NT_PROC_THREAD_ATTRIBUTE_LIST { ULONG Length; NT_PROC_THREAD_ATTRIBUTE_ENTRY Entry[1]; } NT_PROC_THREAD_ATTRIBUTE_LIST, *PNT_PROC_THREAD_ATTRIBUTE_LIST; h**p://hi.baidu.com/zzzevazzz/blog/item/a6c9f488773b679da4c272fe.html Используйте ThreadBasicInformation.
Нет, это не он. Судя по коду CreateRemoteThreadEx, для этого используется аттрибут с номером 8 (ProcThreadAttributeMax, =\), lpValue там указатель на ClientId как-то так