Win API:之GetCurrentThread、GetCurrentThreadId、GetCurrentProcess、GetCurrentProcessId

 {返回当前线程的虚拟句柄} GetCurrentThread: THandle;
 {返回当前线程 ID} GetCurrentThreadId: DWORD;
 {返回当前进程的虚拟句柄} GetCurrentProcess: THandle;
 {返回当前进程 ID} GetCurrentProcessId: DWORD;

  提示:
  ID 是系统唯一的标识.
  所谓虚拟句柄, 就是该句柄只在调用进程的进程中有效, 也不能被继承;
  如果用于其他进程需要用 DuplicateHandle 复制句柄;
  GetCurrentProcess 返回的虚拟句柄可以通过 OpenProcess 创建一个真实的句柄.

 C++ Code 
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
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
 
#include <iostream>
#include <Windows.h>
#include <process.h>
#include <tchar.h>
#include <strsafe.h>

#define BUF_SIZE

typedef struct MyData {
    int nVal1;
    int nVal2;
} MYDATA, *PMYDATA;

using namespace std;

DWORD WINAPI MyThread( LPVOID lpParam );

int main(void)
{
    HANDLE hProcess = NULL;
    DWORD dwProcessId = ;
    HANDLE hThread = NULL;
    DWORD dwThreadId = ;
    PMYDATA pData;

hProcess = GetCurrentProcess(); //进程伪句柄
    cout << "The Current Process Pseudo Handle is " << hProcess << endl;
    DuplicateHandle(GetCurrentProcess(),
        GetCurrentProcess(),
        GetCurrentProcess(),
        &hProcess,
        ,
        FALSE,
        DUPLICATE_SAME_ACCESS
        );
    cout << "The Current Process Real Handle is " << hProcess << endl;
    dwProcessId = GetCurrentProcessId();
    cout << "The Current Process Id is " << dwProcessId << endl;
    
    // Allocate memory for thread data.
    pData = (PMYDATA) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(MYDATA));

if( pData == NULL )
    {
        ExitProcess();
    }
    // Generate unique data for each thread.
    pData->nVal1 = ;
    pData->nVal2 = ;
    // Create Thread
    hThread = CreateThread( NULL,               // default security attributes
                            ,                  // use default stack size  
                            MyThread,           // thread function 
                            pData,              // argument to thread function 
                            ,                  // use default creation flags 
                            &dwThreadId);       // returns the thread identifier

cin.get();
    return ;
}

DWORD WINAPI MyThread( LPVOID lpParam )
{
    HANDLE hThread = NULL;
    DWORD dwThreadId = ;
    hThread = GetCurrentThread();   //线程伪句柄
    cout << "The Current Thread Pseudo Handle is " << hThread << endl;
    DuplicateHandle(GetCurrentProcess(),
        GetCurrentThread(),
        GetCurrentProcess(),
        &hThread,
        ,
        FALSE,
        DUPLICATE_SAME_ACCESS
        );
    cout << "The Current Thread Real Handle is " << hThread << endl;
    dwThreadId = GetCurrentThreadId();
    cout << "The Current Thread Id is " << dwThreadId << endl;

HANDLE hStdout;
    PMYDATA pData;

TCHAR msgBuf[BUF_SIZE] = {};
    size_t cchStringSize;
    DWORD dwChars;

hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
    if( hStdout == INVALID_HANDLE_VALUE )
        return ;

// Cast the parameter to the correct data type.
    pData = (PMYDATA)lpParam;

// Print the parameter values using thread-safe functions.
    StringCchPrintf(msgBuf, 
                    BUF_SIZE, 
                    TEXT("Parameters = %d, %d\n"), 
                    pData->nVal1, 
                    pData->nVal2); 
    StringCchLength(msgBuf, BUF_SIZE, &cchStringSize);
    WriteConsole(hStdout, msgBuf, cchStringSize, &dwChars, NULL);

return ;

}

最新文章

  1. 关于 C# 调用 JavaWebservice服务,版本不一致的问题
  2. C++ 一个统计文件夹下所有代码文件行数的小工具
  3. C# WinForm 技巧八:界面开发之&ldquo;WeifenLuo.WinFormsUI.Docking+OutLookBar&rdquo; 使用
  4. asp 回发的时候样式变化
  5. Digital Root - SGU 118(高精度运算)
  6. Session 原理
  7. zoj1183 Scheduling Lectures
  8. [ML]机器学习书单
  9. LFYZ-OJ ID: 1009 阶乘和
  10. java代理通俗简单解析
  11. linux 命令 — cut
  12. ThreadLocal 类 的源码解析以及使用原理
  13. JAVA方法调用中的解析与分派
  14. Python执行ImportError:No module named MySQLdb异常
  15. JVM内存管理--分代搜集算法
  16. 微信小程序开发工具
  17. PHP开发环境安装说明书
  18. HDU 1896 Stones (优先队列)
  19. nexus 手动更改 私服包
  20. 一、redis系列之基础知识与centos下环境搭建

热门文章

  1. FX Composer VS RenderMonkey 【转】
  2. JS组件系列——显示隐藏密码切换的jQuery插件
  3. IntelliJ IDEA 控制台中文乱码
  4. JAVA 模块
  5. 基于iOS 10、realm封装的下载器
  6. 《DirectX 9.0 3D游戏开发编程基础》 第一章 初始化Direct3D 读书笔记
  7. MATLAB 的日期和时间
  8. 导入解析excel小结
  9. iBatis 使用总结
  10. 字符串算法之 AC自己主动机