Win API:之GetCurrentThread、GetCurrentThreadId、GetCurrentProcess、GetCurrentProcessId
2021-05-03 03:26
标签:define sid function etc uri val table stream c++ Win API:之GetCurrentThread、GetCurrentThreadId、GetCurrentProcess、GetCurrentProcessId 提示:
DWORD WINAPI MyThread( LPVOID lpParam );
hProcess = GetCurrentProcess();
cin.get();
DWORD WINAPI MyThread( LPVOID lpParam )
TCHAR msgBuf[BUF_SIZE] = {
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
} Win API:之GetCurrentThread、GetCurrentThreadId、GetCurrentProcess、GetCurrentProcessId 标签:define sid function etc uri val table stream c++ 原文地址:http://www.cnblogs.com/MakeView660/p/7755374.html {返回当前线程的虚拟句柄} GetCurrentThread: THandle;
{返回当前线程 ID} GetCurrentThreadId: DWORD;
{返回当前进程的虚拟句柄} GetCurrentProcess: THandle;
{返回当前进程 ID} GetCurrentProcessId: DWORD;
ID 是系统唯一的标识.
所谓虚拟句柄, 就是该句柄只在调用进程的进程中有效, 也不能被继承;
如果用于其他进程需要用 DuplicateHandle 复制句柄;
GetCurrentProcess 返回的虚拟句柄可以通过 OpenProcess 创建一个真实的句柄.
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
int nVal1;
int nVal2;
} MYDATA, *PMYDATA;
{
HANDLE hProcess = NULL;
DWORD dwProcessId = 0;
HANDLE hThread = NULL;
DWORD dwThreadId = 0;
PMYDATA pData;
cout "The Current Process Pseudo Handle is "
DuplicateHandle(GetCurrentProcess(),
GetCurrentProcess(),
GetCurrentProcess(),
&hProcess,
0,
FALSE,
DUPLICATE_SAME_ACCESS
);
cout "The Current Process Real Handle is "
dwProcessId = GetCurrentProcessId();
cout "The Current Process Id is "
// Allocate memory for thread data.
pData = (PMYDATA) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(MYDATA));
{
ExitProcess(2);
}
// Generate unique data for each thread.
pData->nVal1 = 1;
pData->nVal2 = 100;
// Create Thread
hThread = CreateThread( NULL, // default security attributes
0, // use default stack size
MyThread, // thread function
pData, // argument to thread function
0, // use default creation flags
&dwThreadId); // returns the thread identifier
}
{
HANDLE hThread =
DWORD dwThreadId = 0;
hThread = GetCurrentThread(); //线程伪句柄
cout "The Current Thread Pseudo Handle is "
DuplicateHandle(GetCurrentProcess(),
GetCurrentThread(),
GetCurrentProcess(),
&hThread,
0,
FALSE,
DUPLICATE_SAME_ACCESS
);
cout "The Current Thread Real Handle is "
dwThreadId = GetCurrentThreadId();
cout "The Current Thread Id is "
HANDLE hStdout;
PMYDATA pData;
size_t cchStringSize;
DWORD dwChars;
return 1;
pData = (PMYDATA)lpParam;
StringCchPrintf(msgBuf,
BUF_SIZE,
TEXT("Parameters = %d, %d\n"),
pData->nVal1,
pData->nVal2);
StringCchLength(msgBuf, BUF_SIZE, &cchStringSize);
WriteConsole(hStdout, msgBuf, cchStringSize, &dwChars, NULL);
文章标题:Win API:之GetCurrentThread、GetCurrentThreadId、GetCurrentProcess、GetCurrentProcessId
文章链接:http://soscw.com/essay/81613.html