30.VC(custom)-伪句柄

DWORD WINAPI ParentThread(PVOID pvParam)
{
   HANDLE hThreadParent = GetCurrentThread();
   CreateThread(NULL, 0 , ChildThread, (PVOID)hThreadParent, 0, NULL);
   //Function continues...
}

DWORD WINAPI ChildThread(PVOID pvParam) 
{
   HANDLE hThreadParent = (HANDLE) pvParam;
   FILETIME ftCreationTime, ftExitTime, ftKernelTime, ftUserTime;
   GetThreadTimes(hThreadParent, &ftCreationTime, 
      &ftExitTime, &ftKernelTime, &ftUserTime);
   // Function continues...
}

  这个代码的目的是让父线程给子线程传递一个线程句柄,以标识父线程。但是,父线程传递了一个伪句柄,而不是一个实句柄。当子线程开始运行时,它将一个伪句柄传递给GetThreadTime函数,使子线程得到它自己的CPU时间,而不是父线程的CPU时间

答:伪句柄和句柄都能代表一个核心对象,并且通过他们都能进行对核心对象的操作,比如CloseHandle等。

但是伪句柄只是一个壳,他在线程间传递的时候,句柄所引用的东西是目标对象的,不是自身的。也就是说,在不同的线程中,他映射的对象不一样。而且伪句柄在传递过程中不会引起引用计数的增减。
可以用DuplicateHandle将伪句柄转换成实句柄,同时源句柄引用计数加1。

具体参看核心编程第6章


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值