我是靠谱客的博主 魁梧板栗,这篇文章主要介绍RtlCreateUserThread创建用户线程,现在分享给大家,希望可以做个参考。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
HANDLE WINAPI RLIBCreateThread(HANDLE hProcess, SECURITY_ATTRIBUTES *sa, SIZE_T stack, LPTHREAD_START_ROUTINE start, LPVOID param, DWORD flags, LPDWORD id ) { HANDLE handle; CLIENT_ID client_id; NTSTATUS status; SIZE_T stack_reserve = 0, stack_commit = 0; if (flags & STACK_SIZE_PARAM_IS_A_RESERVATION) stack_reserve = stack; else stack_commit = stack; status = RtlCreateUserThread( hProcess, NULL, TRUE, NULL, stack_reserve, stack_commit, (LPVOID/*PRTL_THREAD_START_ROUTINE*/)start, param, &handle, &client_id ); if (status == STATUS_SUCCESS) { if (id) *id = HandleToULong(client_id.UniqueThread); if (sa && (sa->nLength >= sizeof(*sa)) && sa->bInheritHandle) SetHandleInformation( handle, HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT ); if (!(flags & CREATE_SUSPENDED)) { ULONG ret; if (NtResumeThread( handle, &ret )) { NtClose( handle ); System::Exception::SetLastError( ERROR_NOT_ENOUGH_MEMORY ); handle = 0; } } } else { System::Exception::SetLastError( RtlNtStatusToDosError(status) ); handle = 0; } return handle; }

奇怪的是, 通过这种方法创建的线程一切正常, 就是调用WSAStarup初始化Winsock会失败.

最后

以上就是魁梧板栗最近收集整理的关于RtlCreateUserThread创建用户线程的全部内容,更多相关RtlCreateUserThread创建用户线程内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(69)

评论列表共有 0 条评论

立即
投稿
返回
顶部