zoukankan      html  css  js  c++  java
  • 【转】win32内核程序中进程的pid,handle,eprocess之间相互转换的方法

    在win32内核程序开发中,我们常常需要取得某进程的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, ProcessBasicInformation, (PVOID)&pbi, sizeof(ProcessBasicInformation), NULL);
    pid = pbi.UniqueProcessId; 
    pid即为所求。

    3、pid->eprocess

    PEPROCESS pEProc;
    PsLookupProcessByProcessId((HANDLE)pid, &pEProc);
    ObDereferenceObject(pEProc); 
    pEProc即为所求eprocess的指针。

    4、handle->eprocess

    暂未发现直接转换的方法,可由handle->pid->eprocess。

    5、eprocess->pid

    _EPROCESS.UniqueProcessId即为所求,虽然声明类型为HANDLE,但实际上是pid。

    6、eprocess->handle

    暂未发现直接转换的方法,可由eprocess->pid->handle。

    以上方法在Windows XP SP2中验证通过,欢迎大家补充

    • 标 题:答复
    • 作 者:
    • 时 间:2010-08-25 17:17:23

    4、handle->eprocess

    暂未发现直接转换的方法,可由handle->pid->eprocess。

    这个我来完善吧.

        st = ObReferenceObjectByHandle (ProcessHandle,
                                        PROCESS_TERMINATE,
                                        PsProcessType,
                                        KeGetPreviousModeByThread(&Self->Tcb),
                                        &Process,
                                        NULL);

    6、eprocess->handle

    暂未发现直接转换的方法,可由eprocess->pid->handle。

    这个也完善下.


            Status = ObOpenObjectByPointer(
                        Process,
                        Attributes,
                        &AccessState,
                        0,
                        PsProcessType,
                        PreviousMode,
                        &Handle
                        );

  • 相关阅读:
    所谓的底层问题
    字符流与字节流
    字节和字符,对信息进行编码
    Asp.net和数据库的一些概念
    谈.NET,由编译器开始谈起
    Extjs中的dom,Ext.Element和Ext.Component对象的关系
    WCF和Delphi通信时序列化的问题
    认真的考虑了下领域模型,发现设计是最难的部分。书上的例子各个对象职责划分的不错,可惜能看懂不代表能设计出。
    MS100 [011020]
    MS100[001]
  • 原文地址:https://www.cnblogs.com/Lthis/p/4788800.html
Copyright © 2011-2022 走看看