曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 6104|回复: 0
打印 上一主题 下一主题

[进程,线程,模块] GetCurrentProcess() -- 获取当前进程的虚句柄

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2012-3-3 01:00:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
GetCurrentProcess() 原型如下:
[Plain Text] 纯文本查看 复制代码
HANDLE WINAPI GetCurrentProcess(void);

函数没有参数,返回值是当前进程的虚句柄。

一个虚句柄是一个特别的常数,对于目前来说,值为 -1 ,也就是说如果将 -1 当成是一个句柄,那么就表示当前进程的句柄。为了能和以后的操作系统兼容,我们最好还是用 GetCurrentProcess() 函数来获取本进程的句柄,而不是直接使用这个硬编码。任何时候需要当前进程的句柄时,都可以该函数获得。虚句柄不能由子进程继承。

虚句柄对于进程对象来说具有 PROCESS_ALL_ACCESS 访问权限。

一个进程可以在在其他进程的上下文环境里给自己创建一个真实的句柄,如使用 OpenProcess() 函数就可以做到这一点。

测试代码
[C++] 纯文本查看 复制代码
#include "stdafx.h"
#include "stdafx.h"
#include <Windows.h>

int _tmain(int argc, _TCHAR* argv[])
{
    printf ("My PID is %d\n", GetCurrentProcessId());
    printf ("my Handle is %d\n", GetCurrentProcess());
    HANDLE hMyselfHandle = OpenProcess (PROCESS_ALL_ACCESS, TRUE, GetCurrentProcessId());

    printf ("Get my PID through My real handle: %d\n", GetProcessId(hMyselfHandle));

    return 0;
}

运行输出:
My PID is 6540
my Handle is -1
Get my PID through My real handle: 6540
程序中,GetProcessId() 函数可以通过句柄获得进程的 PID 。由输出可见,在进程为自己创建了真实的句柄后,由此所获得的 PID 值和直接使用 GetCurrentProcessId() 是一致的。

此外,虚句柄最后也不需要用 CloseHandle() 函数进行句柄关闭。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-18 02:55 , Processed in 0.076591 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表