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

    很有用,收下以后方便查询。

    原贴地址:http://bbs.pediy.com/showthread.php?t=119193

    在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中验证通过,欢迎大家补充

    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
                        );

  • 相关阅读:
    hi.baidu.com 百度流量统计
    Autofac is designed to track and dispose of resources for you.
    IIS Manager could not load type for module provider 'SharedConfig' that is declared in administration.config
    How to create and manage configuration backups in Internet Information Services 7.0
    定制swagger的UI
    NSwag在asp.net web api中的使用,基于Global.asax
    NSwag Tutorial: Integrate the NSwag toolchain into your ASP.NET Web API project
    JS变量对象详解
    JS执行上下文(执行环境)详细图解
    JS内存空间详细图解
  • 原文地址:https://www.cnblogs.com/cxun/p/3070551.html
Copyright © 2011-2022 走看看