关于windows 伪句柄

本文详细解析了Windows核心编程中关于'伪句柄'的概念及其应用,通过具体代码实例展示了如何从父线程传递真实句柄至子线程,以便在子线程中获取正确的父线程时间参数。文章最后提供了修正伪句柄问题的解决方案,确保了子线程能够准确地获取到所需的信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      《windows核心编程》里提到了“伪句柄”一词,故名思议,它并不是真的句柄,有时候不会达到你想要的效果。边看代码,边解释

代码如下:

 

      

这段代码的意图,是要在 ChildThread 这个线程函数里获得其父线程的一些时间参数(例如:创建时间,结束时间,执行用户代码所需要的时间等等)   ,因此,在父线程里,通过 GetCurrentThread() 函数,获得当前线程的句柄,并作为子线程函数的参数传递

 代码是这句:HANDLE hThreadC = (HANDLE)_beginthreadex(NULL,0,(unsigned  (_stdcall*)( void*))ChildThread,(PVOID)hThreadParent,0,0);

 然后在子线程里,接收 父线程的句柄,用GetThreadTimes(hThreadParent,&ftCreationTime,&ftExitTime,&ftKernelTime,&ftUserTime)

    获得相应的时间参数。但是输出结果并不是我们想要的 父线程的时间参数,而是子线程的时间参数,因为我们传递的是一个 “伪句柄”,而线程的伪句柄是一个指向当前线程的句柄;换言之,指向的是发出函数调用的那个线程!

     要想获得真句柄,很简单,只需要用我们 注释的代码,换掉  GetCurrentThread() ,正确代码如下:

 

DuplicateHandle()函数获得一个进程表中的记录项,在另一个进程的句柄表中创建这个记录项的副本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值