内核程序中进程的pid,handle,eprocess之间相互转换的方法
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在内核程序开发中,我们常常需要取得某进程的pid或句柄,或者需要检索进程的eprocess结构,很多API函数需要的参数也不同,所以掌握pid<->handle<->eprocess相互转换的方法会大大提高我们的开发效率。 以下就是我自己在实际开发中总结出来的转换方法,在此记录下来,以供需要的朋友参考。 1、pid->handle OBJECT_ATTRIBUTES ObjectAttributes; CLIENT_ID clientid; InitializeObjectAttributes(&ObjectAttributes, 0 ,OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, 0, 0); clientid.UniqueProcess = (HANDLE)pid; clientid.UniqueThread=0; ZwOpenProcess(&handle, PROCESS_ALL_ACCESS, &ObjectAttributes, &clientid); handle即为所求。 2、handle->pid PROCESS_BASIC_INFORMATION pbi; ns = ZwQueryInformationProcess(ProcessHandle,