关于windows 伪句柄

      《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()函数获得一个进程表中的记录项,在另一个进程的句柄表中创建这个记录项的副本。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章