句柄:HANDLE
进程结构: EPROCESS
在内核开发中,经常需要进行进程和句柄之间的互相转换。进程通常由一个唯一的进程标识符(PID)来标识,而句柄是指对内核对象的引用。在Windows内核中,EProcess
结构表示一个进程,而HANDLE是一个句柄。
一、进程PID与句柄HANDLE转换
使用函数如OpenProcess
和GetProcessId。通过
OpenProcess(PID),返回一个句柄(HANDLE)。通过 GetProcessId(HANDLE)返回句柄对应的进程PID。
二、进程PID 与 EPROCESS结构转换
使用函数如PsGetProcessId,
PsLookupProcessByProcessId和PsGetCurrentProcess
。通过PsGetProcessId(EPROCESS),获取进程PID。PsLookupProcessByProcessId 例程接受进程的进程 ID,并返回指向进程的 EPROCESS 结构的引用指针。通过PsGetCurrentProcess
函数返回当前进程的EProcess
结构。通过 PsGetProcessImageFileName(IN PEPROCESS pProcess),获取进程映像名称。
三、句柄HANDLE与EPROCESS结构转换
使用函数如ObReferenceObjectByHandle和PsGetProcessId,
PsLookupProcessByProcessId。ObReferenceObjectByHandle函数接受一个句柄和一个对象类型作为参数,并返回对该对象的引用。PsGetProcessId
函数接受一个EProcess结构作为参数,并返回该进程的PID。