L linshenyang Unregistered / Unconfirmed GUEST, unregistred user! 2006-12-05 #1 GetCurrentProcess获得的当前进程A的句柄,如果只知道A进程的ID或者名称,怎么获得和GetCurrentProcess值一样的句柄值?
N NeutronDelphi Unregistered / Unconfirmed GUEST, unregistred user! 2006-12-05 #3 GetCurrentProcess得到得到的称之为"伪句柄" 只是一个标识,你可以发现,其实就是返回$FFFFFFFF, 每个进程得句柄都是一样得,只是实用于进程内部得使用. 如果你想得到实际得句柄,在进程间进行通讯,必需要进行转化, 调用DuplicateHandle,注意,得实句柄使用完成以后,你必须要调用CloseHandle去关闭. 其实,你应该明白了为何"伪句柄"得存在,就是使用简单,不用关闭, 不会造成内存泄漏. 同样道理,GetCurrentThread也是伪句柄,其值永远是$FFFFFFFE,只是适用于线程内部得使用.
GetCurrentProcess得到得到的称之为"伪句柄" 只是一个标识,你可以发现,其实就是返回$FFFFFFFF, 每个进程得句柄都是一样得,只是实用于进程内部得使用. 如果你想得到实际得句柄,在进程间进行通讯,必需要进行转化, 调用DuplicateHandle,注意,得实句柄使用完成以后,你必须要调用CloseHandle去关闭. 其实,你应该明白了为何"伪句柄"得存在,就是使用简单,不用关闭, 不会造成内存泄漏. 同样道理,GetCurrentThread也是伪句柄,其值永远是$FFFFFFFE,只是适用于线程内部得使用.
W wr960204 Unregistered / Unconfirmed GUEST, unregistred user! 2006-12-06 #4 NeutronDelphi说的正确。 GetCurrentProcess取得的值永远是-1.翻译成无符号整数就是 $FFFFFFFF 看Windows的源代码可以看到 #define NtCurrentProcess() ((HANDLE)(LONG_PTR)-1) ...... HANDLE STDCALL GetCurrentProcess(VOID) { return((HANDLE)NtCurrentProcess()); } 进程、线程句柄有效范围仅仅是进程范围内。不同进程打开同一个进程句柄是不同的。 进程、线程唯一的标识是ID。有了ID就可以OpenProcess再操作了。
NeutronDelphi说的正确。 GetCurrentProcess取得的值永远是-1.翻译成无符号整数就是 $FFFFFFFF 看Windows的源代码可以看到 #define NtCurrentProcess() ((HANDLE)(LONG_PTR)-1) ...... HANDLE STDCALL GetCurrentProcess(VOID) { return((HANDLE)NtCurrentProcess()); } 进程、线程句柄有效范围仅仅是进程范围内。不同进程打开同一个进程句柄是不同的。 进程、线程唯一的标识是ID。有了ID就可以OpenProcess再操作了。
N NeutronDelphi Unregistered / Unconfirmed GUEST, unregistred user! 2006-12-07 #5 wr960204是高人啊,希望能够结识一下.