GetCurrentProcess进程的句柄的问题(100分)

  • 主题发起人 主题发起人 linshenyang
  • 开始时间 开始时间
L

linshenyang

Unregistered / Unconfirmed
GUEST, unregistred user!
GetCurrentProcess获得的当前进程A的句柄,如果只知道A进程的ID或者名称,怎么获得和GetCurrentProcess值一样的句柄值?
 
API:OpenProcess
 
GetCurrentProcess得到得到的称之为"伪句柄"
只是一个标识,你可以发现,其实就是返回$FFFFFFFF,
每个进程得句柄都是一样得,只是实用于进程内部得使用.
如果你想得到实际得句柄,在进程间进行通讯,必需要进行转化,
调用DuplicateHandle,注意,得实句柄使用完成以后,你必须要调用CloseHandle去关闭.
其实,你应该明白了为何"伪句柄"得存在,就是使用简单,不用关闭,
不会造成内存泄漏.

同样道理,GetCurrentThread也是伪句柄,其值永远是$FFFFFFFE,只是适用于线程内部得使用.
 
NeutronDelphi说的正确。
GetCurrentProcess取得的值永远是-1.翻译成无符号整数就是
$FFFFFFFF
看Windows的源代码可以看到
#define NtCurrentProcess() ((HANDLE)(LONG_PTR)-1)
......
HANDLE STDCALL
GetCurrentProcess(VOID)
{
return((HANDLE)NtCurrentProcess());
}

进程、线程句柄有效范围仅仅是进程范围内。不同进程打开同一个进程句柄是不同的。
进程、线程唯一的标识是ID。有了ID就可以OpenProcess再操作了。
 
wr960204是高人啊,希望能够结识一下.
 
后退
顶部